Sabato 29 Giugno 2013
Ma vai a fare in CUDA!
Per caso ti è venuta quella comune voglia di sviluppare dei programmi con CUDA??
Per caso ti piace sviluppare sulla/per la piattaforma linux?
Sempre per caso non sai molto smanettare con linux?
Benissimo, nessun problema!

Installare CUDA 5.0 e il suo SDK non è mai stato così semplice complesso!!!

Facciamo un salto indietro!

Dopo aver cominciato a smanettare con CUDA all'università mi è venuta la brillante idea di installare l'SDK di CUDA su un PC (propriamente attrezzato per l'occasione) in ambiente Linux.
"Sarà relativamente semplice, dopotutto la nVidia fornisce il suo installatore..."

Ah se si!

Allora, cominciamo prima con le dotazioni hardware: una qualunque scheda video nVidia CUDA-capable, in sostanza una scheda video nVidia abbastanza recente, diciamo dalla 9400GT in su! Io per il mio setup ho usato una GeForce GTX 550 Ti.

Come prima cosa vado sul sito della nVidia e noto una cosa molto importante: la piattaforma viene sviluppata per alcune distribuzioni (tra cui non figurava la mia amata Debian).
Ubuntu no, non mi piace, "troppo semplice"; Fedora non mi piace molto... cosa usano all'università? SUSE... Va beh! Scelto: OpenSUSE!!

Aro l'hard disk del mio PC e comincio ad installarci su OpenSUSE 12.3 x86_64 (n.b. la versione supportata ufficialmente è la 12.1) con il minimo sindacabile e il buon GNOME, visto che non ho molta dimestichezza con la distribuzione ancora.
Bene, la piattaforma di base c'è, ora mancano come prima cosa i driver per la scheda grafica!
Facilissimo, qui il link, scarico i drivers appropriati e installo!

Ora l'arduo compito di installare l'SDK..........
Tutto parrebbe semplice, invece qua iniziano i primi fastidi!

Una volta scaricato il pacchetto si parte con la shell: vado nella cartella "Scaricati" e do il comando

sudo ./cuda_5.0.35_linux_64_suse12.1-1.bin -toolkit -samples -override

Questo comando installa solo l'SDK e gli esempi (senza i driver nVidia) e non tiene conto delle dipendenze (vi sfido a farlo senza!)
Benissimo! Ora avremo il nostro SDK installato in /usr/local/cuda-5.0

Ora le buone notizie:
-CUDA 5.0 utilizza il gcc 4.6
-OpenSUSE utilizza il gcc 4.7 e non c'è verso di installare il gcc al completo nella versione 4.6
-Viene segnalata la mancanza di una libreria (libglut.so)
-/usr/local/cuda-5.0/lib e/o /usr/local/cuda-5.0/lib64 contengono le nostre librerie runtime al momento non raggiungibili dagli eseguibili

Figo no?

Allora, del primo punto ce ne freghiamo altamente, tanto non ci possiamo far nulla! Mettiamoci una toppa nel secondo:
nel file /usr/local/cuda-5.0/include/host_config.h sostituiamo la riga

#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 6)

Con

#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 7)

Rimangono un paio di errori di compilazione che sono i seguenti:

/usr/include/c++/4.7/ext/atomicity.h(48): error: identifier "__atomic_fetch_add" is undefined
/usr/include/c++/4.7/ext/atomicity.h(52): error: identifier "__atomic_fetch_add" is undefined

Creiamo un semplice header /usr/local/cuda-5.0/include/__cuda_gcc47_fix.h che fixi questi due problemi, scriviamo al suo interno:

#undef _GLIBCXX_ATOMIC_BUILTINS
#undef _GLIBCXX_USE_INT128

Ora o scegliamo di includere questo header in ogni file CUDA che intendiamo compilare, oppure ci inventiamo un altro magheggio per risolvere questo problemino... Quindi? ... magheggio!

Rinominiamo /usr/local/cuda-5.0/bin/nvcc in nvcc.bin

mv /usr/local/cuda-5.0/bin/nvcc /usr/local/cuda-5.0/bin/nvcc.bin

e scriviamo il file /usr/local/cuda-5.0/bin/nvcc:

#!/bin/sh
$0.bin --pre-include __cuda_gcc47_fix.h [email protected]

E rendiamolo eseguibile:

chmod +x /usr/local/cuda-5.0/bin/nvcc

Bene, risolviamo ora questo piccolo fastidio della libreria libglut.so: creiamo un link fisico o simbolico della libreria libglut.so.[qualche_cosa] da mettere nella stessa cartella, ovvero

ln -s /usr/lib/libGLU.so.[qualche_cosa] /usr/lib/libGLU.so

Complimenti! Adesso possiamo allegramente compilare i nostri programmi C/C++ con il nostro SDK CUDA!!


Finito?? Ovviamente no!

Adesso è il momento di settare l'ambiente per l'esecuzione dei nostri programmi! Se avviamo la nostra macchina in modalità grafica (runlevel 5), basta inserire una riga all'interno del file presente nella /home, .profile. Inseriamo in questo file una delle seguenti righe (in base al proprio sistema operativo 32-64 bit):

export LD_LIBRARY_PATH=/usr/local/cuda/lib64
export LD_LIBRARY_PATH=/usr/local/cuda/lib

Ora sarete in grado di compilare ed eseguire codice CUDA tranquillamente sulla vostra macchina: buon lavoro!

Torna indietro


Commenti: 0

Nome:
Messaggio:
Riscrivi il codice:

Non รจ stato inviato nessun commento!

Filtra per Tag:

-Windows (9)
-HowTo (7)
-Server (6)
-Linux (4)
-Hardware (4)
-e-commerce (3)
-Wireless (2)
-eMule (2)
-nVidia (2)
-Programmazione (2)
-PDF (1)
-Arduino (1)
-Elettronica (1)
-WEB (1)
-Trashware (1)
-IRC (1)
-Puttanate (1)