DOMANDA linguaggi di programmazione che girano su gpu

Dave199

Nuovo Utente
12
0
Ciao a tutti,
devo acquistare un nuovo notebbok per programmare e mi chiedevo se aveva senso avere anche una buona scheda grafica nel caso in cui ci siano linguaggi di programmazione che ne usano la capacità di calcolo. Esistono linguaggi del genere o ne esisteranno in un futuro?
 

BAT

Moderatore
Staff Forum
Utente Èlite
22,989
11,601
CPU
1-Neurone
Dissipatore
Ventaglio
RAM
Scarsa
Net
Segnali di fumo
OS
Windows 10000 BUG
se devi imparare a programmare non è necessaria nessuna GPU particolare

esistono linguaggi che sfruttano le capacità della GPU (CUDA, OpenCL) ma si tratta di linguaggi di progrmmazione parallela estremamente specialistici usati da scienziati o in applicazioni industriali.

La buona scheda grafica la userai per giocare, almeno per il momento, avercela male non fa
 

Andretti60

Utente Èlite
6,440
5,091
Scusate il ritardo, questo è un argomento complesso.

In aggiunta a quello detto giustamente dal nostro amico @BAT (concentrati sul imparare concetti e tecniche di programmazione) usare la potenza di calcolo delle schede GPU adesso è usato in maniera massiccia da moltissime applicazioni in cui è possibile scrivere gli algoritmi in modo che i dati possano essere facilmente manipolati nelle schede grafiche, in genere tali algoritmi elaborano dati in forma di vettori, e possono essere scritti per gestire più esecuzioni allo stesso tempo (ossia in parallelo). installando più schede grafiche nello stesso computer si può poi parallelizzare ulteriormente il processo. Adesso certi processi e certe simulazioni richiedono poche ore di calcolo mentre decine di anni fa, usando CPU convenzionali, richiedevano giorni di calcolo. Quindi per rispondere a una delle tue domande, la cosa è già fattibile.

Quindi prima di tutto occorre avere una chiara idea di come scrivere un algoritmo e come ottimizzarlo, non è qualcosa che si possa imparare nei primi corsi universitari (la prima volta che guidi un’auto non entri in una monoposto da F1)

Il secondo problema è che esistono attualmente molte schede grafiche ognuna con il suoi hardware e i suoi driver, scrivere un programma che possa andare bene per tutte è dura. Tale problema è stato risolto con librerie e framework specialistici che “nascondono” i dettagli dell’hardware (@BAT ti ha accennato a CUDA e OpenCL), e che espongono API (application programming interface) con cui si passano i dati (in genere sotto forma di vettori) e il tipo di elaborazione che si vuole effettuare, e loro fanno il “lavoro pesante”. Queste librerie sono scritte in C è sono quindi usabili direttamente da programmi scritti in C e C++, ma possono essere usate con accorgimenti da altri linguaggi. Python viene usato molto, specie a livello di sperimentazione, quando la sola cosa che deve fare è leggere i dati e passarli poi alle librerie di elaborazione (per questo motivo Python si è guadagnato il nomignolo di “glue language”, ossia “collante”)

Puoi trovare ulteriori informazioni anche di interesse storico sulla pagina Wiki (è un link) dedicata a questo argomento.

Per rispondere alla tua domanda, non ti preoccupare adesso del tipo di computer da comprare, e di quale scheda grafica. Devi imparare prima di tutto il ABC della scienza della informazione, e qualche linguaggio di programmazione (più di uno), quando sarai pronto per provare GPGP (acronimo per programmazione usando scheda grafica) probabilmente avrai bisogno di un computer nuovo. Compra un notebook economico, e aggiungici uno monitor decente, non ti serve nient’altro.
 

pabloski

Utente Èlite
2,868
916
Ciao a tutti,
devo acquistare un nuovo notebbok per programmare e mi chiedevo se aveva senso avere anche una buona scheda grafica nel caso in cui ci siano linguaggi di programmazione che ne usano la capacità di calcolo. Esistono linguaggi del genere o ne esisteranno in un futuro?

Perchè farsi tanti problemi? In generale, se il budget lo permette, è sempre meglio comprare un computer con una buona scheda grafica. Niente di incredibile per carità, qualcosa nella media basta e avanza.

Entrando nello specifico dell'argomento, ad oggi tra interfacce vocali dei sistemi operativi, ray tracing, desktop con compositing, rendering delle pagine web via GPU, direi che una GPU buona è un must.

E ovviamente ci metto dentro pure le integrate Intel e AMD, che tanto deboli non sono, almeno per gli usi comuni.

Riguardo i linguaggi, non è che esistono linguaggi che sfruttano la GPU, esistono estensioni per i linguaggi più popolari che supportano l'offloading dei workload su GPU. CUDA è C ( C++ o Fortran ) + aggiunte proprietarie di Nvidia. OpenCL è C + un runtime specializzato. OneAPI è la soluzione di Intel che dovrebbe sostituire tutte le API concorrenti. Rocm è la soluzione di AMD. Cito solo i maggiori player.

Il punto è che ad oggi puoi usare la GPU per fare i calcoli in Python, C, C++, Java, Rust e svariati altri. Non è qualcosa che ha da venire, è già qui.

Se abbia senso per te dipende dalle tue necessità. Certo che un programmatore moderno difficilmente non incrocerà il GPGPU.
 

bigendian

Utente Attivo
764
435
OS
Linux
gpu hanno un loro assembly, che generalmente non e' pubblico.


Non ho idea di come e se sia possibile compilare del codice, ma pare possibile darlo in pasto alla gpu. Sarebbe forse interessante a scopo didattico.

Tuttavia, per il normale utilizzo espongono funzioni comuni ad un livello piu alto, appunto come spiegato sopra, chiamate da opengl e in fine ultimo dai vari driver.
 
  • Mi piace
Reazioni: finmat92

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,224
1,855
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
gpu hanno un loro assembly, che generalmente non e' pubblico.


Non ho idea di come e se sia possibile compilare del codice, ma pare possibile darlo in pasto alla gpu. Sarebbe forse interessante a scopo didattico.

Tuttavia, per il normale utilizzo espongono funzioni comuni ad un livello piu alto, appunto come spiegato sopra, chiamate da opengl e in fine ultimo dai vari driver.

Si, con CUDA C/C++. C'è questo bell'articolo di introduzione: https://developer.nvidia.com/blog/even-easier-introduction-cuda/
 

pabloski

Utente Èlite
2,868
916
Non ho idea di come e se sia possibile compilare del codice, ma pare possibile darlo in pasto alla gpu.

il problema è duplice

da un lato la generazione del codice macchina, che nel caso di Nvidia è strettissimamente proprietario ( non sia mai qualcuno glielo toccasse!! )

il compilatore nvcc il massimo che fa è produrre bytecode PTX, che poi viene tradotto nel linguaggio macchina della GPU in uso dal driver cuda ( che poi è integrato nel driver che comunemente installiamo )

alla fine si può al massimo usare l'API driver per effettuare il caricamente del codice PTX e il resto avviene dietro le quinte

la situazione è un pelino migliore con Intel e AMD, perchè usano SPIR-V come bytecode
 
  • Mi piace
Reazioni: finmat92

Andretti60

Utente Èlite
6,440
5,091
da un lato la generazione del codice macchina, che nel caso di Nvidia è strettissimamente proprietario ( non sia mai qualcuno glielo toccasse!! )
Non per difendere Nvidia, ma se si spendono un sacco di soldi per progettare e costruire il proprio hardware, si cerca di tenere i dettagli il più nascosti possibile. Dove lavoro io costruiamo sistemi hardware proprietari per grossi sistemi industriali dove la competizione e' altissima (abbiamo visto clienti cercare di ricostruirlo pezzo per pezzo), abbiamo un vero limitato insieme di API che i clienti possono usare per connettersi. E mantenere API costa una fortuna, perche' le dobbiamo aggiornare sempre quando cambiamo hardware (cosa che avviene spesso). In poche parole, non puoi immaginare quanto vogliano "toccare" l'hardware (in parole povere, "rubare")
 
  • Mi piace
Reazioni: finmat92

Ibernato

Utente Èlite
4,333
2,048
OS
Windows 10 Pro / Ubuntu 22.04
il problema è duplice

da un lato la generazione del codice macchina, che nel caso di Nvidia è strettissimamente proprietario ( non sia mai qualcuno glielo toccasse!! )

il compilatore nvcc il massimo che fa è produrre bytecode PTX, che poi viene tradotto nel linguaggio macchina della GPU in uso dal driver cuda ( che poi è integrato nel driver che comunemente installiamo )

alla fine si può al massimo usare l'API driver per effettuare il caricamente del codice PTX e il resto avviene dietro le quinte

la situazione è un pelino migliore con Intel e AMD, perchè usano SPIR-V come bytecode
Non c'è da stupirsi sulla questione del codice proprietario.
Come Nvidia, c'è anche Apple che ha un sistema chiuso e non puoi fare niente se non hai un loro hardware.
 
  • Mi piace
Reazioni: finmat92

bigendian

Utente Attivo
764
435
OS
Linux
Discorso interazione con la gpu mi e' abbastanza oscuro, anche quanto sopra postato da me viene naturalmente da qualche ricerca su google. Linux offre la possibilita' di imparare dai driver opensource, per altro per alcune gpu come vivante galcore (cpu imx) e' stato fatto un ottimo lavoro, dicono di aver convertito i blob binari del costruttore in un formato aperto, con un po' di reverse engineering.


c'e' anche la community sviluppo #etnaviv su irc, conosco personalmente uno di loro, prima o poi mi cimentero' nel capirne il codice, per ora, il tempo come sempre e' limitato, ma argomento e' per me stimolante proprio in quanto complesso.
 
Ultima modifica:

pabloski

Utente Èlite
2,868
916
Discorso interazione con la gpu mi e' abbastanza oscuro, anche quanto sopra postato da me viene naturalmente da qualche ricerca su google. Linux offre la possibilita' di imparare dai driver opensource, per altro per alcune gpu come vivante galcore (cpu imx) e' stato fatto un ottimo lavoro, dicono di aver convertito i blob binari del costruttore in un formato aperto, con un po' di reverse engineering.


c'e' anche la community sviluppo #etnaviv su irc, conosco personalmente uno di loro, prima o poi mi cimentero' nel capirne il codice, per ora, il tempo come sempre e' limitato, ma argomento e' per me stimolante proprio in quanto complesso.

Il grosso problema delle GPU, rispetto ad altre tipologie di periferiche, è la vastità dei comandi disponibili, che arriva al punto di vare un intero set d'istruzioni, indirizzamenti e tutto il resto per implementare un modello di programmazione Turing completo o quasi.

E lì giustamente non è che puoi metterti a fare prove per tirare fuori le varie istruzioni, tutte le loro varianti, ecc... Da cui la necessità di produce via reversing, che almeno è faciltato dal fatto che hai alla fine un compilatore che prende un bytecode in un formato più o meno noto ( PTX non lo è tanto, SPIR-V invece è opensource ) e lo traduci nel linguaggio macchina della GPU. Per cui non è difficile identificare i vari componenti e quindi indirizzarsi con maggiore precisione verso il reversing di un elemento specifico alla volta.

Nel complesso le GPU restano bestie complesse, del resto che aspettarsi da un computer che sta dentro un altro computer!!
 

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili