Riassunto veloce
I binari di einstein per gpu sono a 32 bit quindi anche sui sistemi operativi linux a 64 bit vanno installate le librerie cuda a 32 bit per farli funzionare.
Più nel dettaglio...
Sintomo
Le WU GPU partono e falliscono in 2-3 secondi
gio 01 nov 2012 10:23:32 CET | Einstein@Home | Starting task p2030.20111110.G174.63-04.26.S.b1s0g0.00000_664_0 using einsteinbinary_BRP4 version 128 (BRP4cuda32nv270) in slot 4
gio 01 nov 2012 10:23:34 CET | Einstein@Home | Computation for task p2030.20111110.G174.63-04.26.S.b1s0g0.00000_664_0 finished
gio 01 nov 2012 10:23:34 CET | Einstein@Home | Output file p2030.20111110.G174.63-04.26.S.b1s0g0.00000_664_0_0 for task p2030.20111110.G174.63-04.26.S.b1s0g0.00000_664_0 absent
Causa
Mancano le librerie 32 bit e il sistema non riesce quindi a farne il link dinamico. L'output di errore visibile è simile ai seguenti:
<core_client_version>7.0.29</core_client_version>
<![CDATA[
<message>
process exited with code 127 (0x7f, -129)
</message>
<stderr_txt>
../../projects/einstein.phys.uwm.edu/einsteinbinary_BRP4_1.28_i686-pc-linux-gnu__BRP4cuda32nv270: error while loading shared libraries: libcuda.so.1: cannot open shared object file: No such file or directory
</stderr_txt>
]]>
<core_client_version>7.0.27</core_client_version>
<![CDATA[
<message>
process exited with code 127 (0x7f, -129)
</message>
<stderr_txt>
../../projects/einstein.phys.uwm.edu/einsteinbinary_BRP4_1.28_i686-pc-linux-gnu__BRP4cuda32nv270: error while loading shared libraries: libcuda.so.1: wrong ELF class: ELFCLASS64
</stderr_txt>
]]>
Andando ad analizzare le dipendenze delle shared library sul binario di einstein sono visibili le librerie mancanti:
ldd einsteinbinary_BRP4_1.28_i686-pc-linux-gnu__BRP4cuda32nv270
linux-gate.so.1 => (0xf77bf000)
libcufft.so.3 => not found
libcudart.so.3 => not found
libcuda.so.1 => not found
libpthread.so.0 => /lib32/libpthread.so.0 (0xf7786000)
libm.so.6 => /lib32/libm.so.6 (0xf7760000)
libstdc++.so.6 => /usr/lib32/libstdc++.so.6 (0xf7673000)
libc.so.6 => /lib32/libc.so.6 (0xf7516000)
/lib/ld-linux.so.2 (0xf77c0000)
libgcc_s.so.1 => /usr/lib32/libgcc_s.so.1 (0xf74f9000)
Soluzione
Installare almeno le librerie cuda a 32 bit.
Su Debian e derivate per mantenere anche le lib 64:
In verità sarebbe necessaria solo libcuda1:i386... io ho installato le altre solo per completezza. Attenzione che potrebbe cercare di rimuovere le lib a 64...
dpkg --add-architecture i386
apt-get update
apt-get install libcuda1:i386 libcudart4:i386 libcufft4:i386
Oppure, dovrebbe andare ugualmente
apt-get install libcuda1-ia32
Su Fedora (immagino vada per tutti i sistemi con pacchettizzazione rpm a meno di nomenclature) caterpillar ha risolto con:
yum install -y xorg-x11-drv-nvidia-libs.i686
Dopo le installazioni le librerie dovrebbero venire trovate, ad esempio:
ldd einsteinbinary_BRP4_1.28_i686-pc-linux-gnu__BRP4cuda32nv270
linux-gate.so.1 => (0xf77c2000)
libcufft.so.3 => not found
libcudart.so.3 => not found
libcuda.so.1 => /usr/lib/i386-linux-gnu/libcuda.so.1 (0xf6e13000)
libpthread.so.0 => /lib/i386-linux-gnu/i686/cmov/libpthread.so.0 (0xf6dfa000)
libm.so.6 => /lib/i386-linux-gnu/i686/cmov/libm.so.6 (0xf6dd4000)
libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xf6ce8000)
libc.so.6 => /lib/i386-linux-gnu/i686/cmov/libc.so.6 (0xf6b8b000)
/lib/ld-linux.so.2 (0xf77c3000)
libz.so.1 => /lib/i386-linux-gnu/libz.so.1 (0xf6b71000)
libdl.so.2 => /lib/i386-linux-gnu/i686/cmov/libdl.so.2 (0xf6b6d000)
libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xf6b50000)
Che libcufft e libcudart non vengano linkate non ne pregiudica il funzionamento.
Ovviamente bisogna restartare almeno i job (un bel restartone del client boinc non fa male).