RISOLTO Scaricare, installare, compilare ed eseguire programmi C/C++ che sfruttano OpenCL

Pubblicità

finmat92

Utente Attivo
Messaggi
214
Reazioni
209
Punteggio
50
Buonasera/buongiorno a tutti,

mi sono trovato di recente a perdere diversi giorni dietro un problema che non riesco a risolvere in alcun modo. Mi ero incuriosito alla tematica del multithreading e del calcolo aritmetico su schede grafiche, avendo seguito un corso universitario che accennava a questo, e così informandomi un po' ho scoperto che esiste la piattaforma e API CUDA con le sue librerie proprietarie, e avendo una GPU NVIDIA ho voluto provare a vedere se riuscivo a scrivere un programma basilare che effettuasse una moltiplicazione matriciale tra due matrici piene di numeri. Premetto che, al momento, mi trovo a lavorare principalmente su Windows 10 ma non ho voluto usare nessun IDE particolare, ma fare tutto, se possibile, da shell cmd/PowerShell. Dopo svariate imprecazioni e ricerche ho trovato il modo di scaricare il compilatore NVCC, configurarlo con le opportune flags e fargli compilatore sto benedetto programmino, e alla fine, dopo la configurazione di una variabile d'ambiente e lo scaricamento di Visual Studio di Microsoft, ce l'ho fatta. Il compilatore andava, l'eseguibile me lo produceva, e questo andava senza problemi:
Bash:
C:\Users\Io\> nvcc matrix-cuda.cu

C:\Users\Io\> a.exe

Facile come fare:
Bash:
$ gcc Hello.c

$ ./a.out

E così mi son chiesto se esisteva anche una variante open source di CUDA, e ho trovato OpenCL. Ho passato 2 giorni tra Google, ChatGPT, Youtube, Stackoverflow e non sono ancora riuscito a compilare il programmino che ho scritto, che fa la stessa cosa di quello scritto per CUDA. Quel che mi chiedo io, poi magari vi dico i passaggi che ho eseguito a richiesta giusto per non scrivere un papiro qui, c'è una procedura per Windows? sto impazzendo. Capisco che non sia usata da tutti, ma se qualcuno ci fosse passato gradirei i suoi consigli.
 
Buonasera/buongiorno a tutti,

mi sono trovato di recente a perdere diversi giorni dietro un problema che non riesco a risolvere in alcun modo. Mi ero incuriosito alla tematica del multithreading e del calcolo aritmetico su schede grafiche, avendo seguito un corso universitario che accennava a questo, e così informandomi un po' ho scoperto che esiste la piattaforma e API CUDA con le sue librerie proprietarie, e avendo una GPU NVIDIA ho voluto provare a vedere se riuscivo a scrivere un programma basilare che effettuasse una moltiplicazione matriciale tra due matrici piene di numeri. Premetto che, al momento, mi trovo a lavorare principalmente su Windows 10 ma non ho voluto usare nessun IDE particolare, ma fare tutto, se possibile, da shell cmd/PowerShell. Dopo svariate imprecazioni e ricerche ho trovato il modo di scaricare il compilatore NVCC, configurarlo con le opportune flags e fargli compilatore sto benedetto programmino, e alla fine, dopo la configurazione di una variabile d'ambiente e lo scaricamento di Visual Studio di Microsoft, ce l'ho fatta. Il compilatore andava, l'eseguibile me lo produceva, e questo andava senza problemi:
Bash:
C:\Users\Io\> nvcc matrix-cuda.cu

C:\Users\Io\> a.exe

Facile come fare:
Bash:
$ gcc Hello.c

$ ./a.out

E così mi son chiesto se esisteva anche una variante open source di CUDA, e ho trovato OpenCL. Ho passato 2 giorni tra Google, ChatGPT, Youtube, Stackoverflow e non sono ancora riuscito a compilare il programmino che ho scritto, che fa la stessa cosa di quello scritto per CUDA. Quel che mi chiedo io, poi magari vi dico i passaggi che ho eseguito a richiesta giusto per non scrivere un papiro qui, c'è una procedura per Windows? sto impazzendo. Capisco che non sia usata da tutti, ma se qualcuno ci fosse passato gradirei i suoi consigli.
Ho usato openCL più volte, ma mai installato da 0 e tantomeno usato su windows. Se hai pazienza qualche giorno possiamo provare a sbatterci la testa insieme.

A seconda del tuo utilizzo puoi provare anche torch... Non è esattamente la stessa cosa ma torch permette di definire tensori, che girano ovviamente su gpu(se definiti li). Nel caso in cui hai più gpu usare il data parallel(cuda wrappato in torch) oppure il distributed data parallel(sempre cuda, ma i dati all'interno delle gpu sono distribuiti con meccanismi di condivisione di risorse). Nel data parallel i dati son copiati...


Il precedente commento voleva essere uno spunto qualora tu optassi per fare Ai.

Se fine settimana non mi faccio vivo taggami pure, in questi periodi dimentico persino il mio nome
 
Ciao, non ho più aggiornato la discussione qui perchè ho avuto da fare altro in queste settimane, ma ho un aggiornamento: ho "risolto" il problema.
L'ostacolo principale è stato trovare le giuste opzioni di compilazione da specificare al compilatore e tutto ciò che ne conseguiva. Prima ho scaricato OpenCL SDK, la versione open-source pubblica e non personalizzata di OpenCL, da Github, perchè ho scoperto che ne esistono tante varianti, ed una di queste è installata nel mio computer nella directory di NVIDIA, usata, presumo, dalla scheda grafica con i drivers, ma che non faceva al caso mio perchè volevo provare a scrivere un programma e compilarlo affinchè potessi sfruttare qualsiasi GPU.
Mi sono anche sforzato di seguire i consigli online e sembrava obbligatorio usare un IDE, in particolare Visual Studio di Microsoft, il che mi ha dato non poco fastidio in linea di principio. Alla fine ho trovato le opzioni da specificare al linker:

Bash:
C:\Users\Io\> \percorso_a\g++.exe -o myprog_opencl myprog_opencl.cpp -I"C:\OpenCL-SDK-main\external\OpenCL-Headers" -L"\percorso_a\OpenCL.lib" -lOpenCL
 
C:\Users\Io\> myprog_opencl.exe

Dove g++.exe l'ho pescato dalla directory dell'IDE di DevC++ perchè è stato il primo risultato della ricerca dell'eseguibile sul mio computer, e tanto uno vale l'altro, basta averlo.
OpenCL SDK l'avevo messo in C: scaricando a parte, sempre da Github, le directories external e cercando il percorso al file OpenCL.lib (sulle distribuzioni Unix dovrebbe chiamarsi OpenCL.so) che era, purtroppo, presente e fornito da NVIDIA nella sua directory.
Morale della favola, gira che ti rigira, qualcosa di proprietario sei forzato a doverlo usare, anche se non vuoi, però il programma e ha funzionato. Spero possa essere utile a chi si è trovato/a in una situazione simile.
 
Ultima modifica:
Pubblicità
Pubblicità
Indietro
Top