Jump to content
papafoxtrot

Elaborazioni General Purpose Gpu

Recommended Posts

L'ATTUALE STATO DELLE COSE CIRCA LE ELABORAZIONI GP-GPU

Vorrei chiarire un po' le idee circa lo stato delle cose per quanto riguarda il calcolo GP-GPU.

La sigla indica una procedura di elaborazione che sfrutta l'hardware proprio delle schede video per calcoli non prettamente di competenza di queste schede.

Ciò è stato reso possibile a partire dal 2006 con l'uscita delle prime schede video dotate di shader unificati e programmabili, sebbene le schede video ATI della generazione precedente integrassero prevedessero già queste fnzionalità. ATI a suo tempo (autunno 2006) aveva presentato schede firestream basate su r580 (chip video delle schede x1900 e x1950).

Cosa significa shader programmabili? Significa che è possibile compilare un codice sorgente in modo che sia eseguito dagli shader della GPU.

Le schede al momento in grado di supportare questo tipo di elaborazione sono tutte le schede nvidia geforce, gefore 9, gtx e nvidia quadro che ne derivano (dunque quadro 370, 570, 1700, 3700, 4600, 5600), nonché tutte le schede video AMD-ATI hd2000, hd3000 e hd4000, nonché tutte le schede ATI fireGL che da queste derivano (v3600, v5600, v7600, v8600, spero di non averne saltate).

Inoltre i due prouttori hanno iniziato a produrre schede derivate dalle schede video ma non adatte a questo scopo (mancano dell'uscita video), bensì specifiche per elaborazioni GP-GPU. Tipicamente queste schede sono semplicemente schede video dotate di un maggiore quantitativo di memoria ram (che può arrivare a 4Gb) e sprovviste di uscite video e dunque dell'hardware a queste dedicato: ramdac e credo anche teture filtering unit.

Le schede prendono il nome di nvidia Tesla ed AMD Firestream. NVIDIA propone anche dei sistemi rack dotati di 4 schede e collegabili ad un rack tradizionale tramite un bus pci-express esterno fornito da una scheda pci-e di interfaccia.

Le schede firestream e l'ultima generazione di schede tesla (T10) sono inoltre in grado di svolgere calcoli in virgola mobile in doppia precisione.

Per rendersi conto del potenziale che simili schede possono offrire basti pensare che le ultie versioni dichiaano una potenza elaborativa di un teraflop in singola precisione.

Ora vediamo in quali ambiti possiamo sfruttare queste schede video: In primis le elaborazioni che più si avantaggiano di questa tecnologia sono le elaborazioni che più si adattano ad essere svolte da un grande numero di elaboratori "semplici", e fra queste ci sono prativamente tutti i calcoli eseguiti su vettori:ovviamente il rendering, cosa per cui è nata la scheda video, ma anche tutte le simulazioni della fisica, dai videogiochi alla fluidodinamica computazionale all'elaborazione agli elementi finiti propria della meccanica dei solidi e quant'altro.

Teoricamente la magior parte dei software potrebbe funzionare ricorrendo alla scheda video, ma ciò non significa che ne siano avvantaggiati. Ecco perché non vedremo mai, almeno commercialmente, un microsoft office GPU edition, sebbene nvidia avesse proposto, a livello dimostrativo, qualcosa di simile.

Per quanto riguarda noi treddisti le opportunità offerte dalle elaborazioni GP-GPU sono decisamente interessanti. Non solo la procedura di rendering sarebbe svolta in modo molto più ottimizzato dalla gpu che non dalla cpu, ma anche tutt'unaltra serie di operazioni quali apunto le simulazioni fisiche, l'applicazione di filtri (vedi photoshop), l'editing ed il compositing video. In effetti motori di rendering in grado di sfruttare la gpu esistono da molto prima del concetto di gp-gpu,ma non sono mai stati in grado di affermari per tutta una serie di motivi, fra i quali la mancanza di uno standard e la dificoltà di impostazione.

Software e ambienti di sviluppo per la programmazione GP-GPU

La mancanza di uno standard

Al momento non esiste uno standard in questo senso e ciò è probabilmente la maggior causa della lentezza con cui il gpgpu si sta affermando, oltre comunque al tradizionale conservatorismo delle software house nei confronti di novità in ambito hardware di un certo livello: basti pensare alla lentezza con cui il software x64 si sta diffondendo e anche la mancanza di supporto al multicore da parte della maggior parte dei software attualmente in circolazione. Salvo software prfessionali specifici, che hanno ereditatole capacità multicore dal tradizionale approccio multi cpu presente anche nelle workstation del passato, la maggior parte dei software è rimasta al single core o, in modo ironicamente molto longimirante è passata al supporto di una coppia di core, col risultato di risultare inadatta se usata su un ormai normale pc dotato di quad core...

Tornando in tema, vediamo quali sono al momento, le vie possibili per sviluppare un sorgente eseguibile dalla gpu:

Gli attori sono sostanzialmente quattro: NVIDIA ed AMD ovviamente, ma anche intel e mamma microsoft.

NVIDIA: sta spingendo in modo particolare in questo nuovo settore ed ha messo a disposizione degli sviluppatori un ambiente proprietario detto CUDA: sostanzialmente si tratta di un ambiente di programmazione simile al C.

Tramite CUDA nvidia ha anche implementato nei driver delle sue schede video il codice ex-AEGIA per la gestione della fisica nei videogiochi. In sostanza sono stati trasferiti nei driver forceware i driver physx. La diffusione si software in grado di sfruttare questa funzionalità è, come al solito, bassissima.

Nvidia sta pubblicizzando in modo molto spinto il suo approccio al GP-GPU anche attraverso concorsi aperti ai programmatori per lo sviluppo di software tramite CUDA. Il software proprietario, d'altra parte, sebra non essere gradito agli sviluppatori.

AMD-ATI: ha optato per la strada open: in sostanza propone un SDK (AMD stram SDK) che mette a disposizione dei progammatori un ambiente di sviluppo aperto ed opensource, dunque della massima flessibilità. L'azienda ha inoltre aderito al consorzio khronos group che mira, in quest'ambito, a definire nuove librerie multipiattaorma openCL dedicate all'elaborazione parallela.

INTEL: è nuova al settore delle schede video discrete. Le prime versioni di schede video intel dovrebbero uscire fra il 2009 (ottimisticamente parlando) ed il 2010 e saranno schede dedicate al solo GP-GPU.

Schede video propriamente dette saranno introdotte solo successivamente.

La scelta di Intel in questo senso è stata quella di sviluppare schede basate su architettura x86: scelta discutibie dal punto di vista dell'eficienza e della potenza elaboativa, ma che trova la sua motivazione nela completa compatibilità della futura scheda video con gli attuali ambienti di sviluppo diffusi fra tutti i prorammatori. In sostanza sarà possibile utilizzare un qualunque attuale compliatore C per compliare codice adatto a queste schede.

Cosa c'entra microsoft? Microsoft mira adintegrare nella prossima versione di direct x 11 una libreria di istruzioni volte all'elaborazione gp-gpu. Si tratta dunque di un approcio analogo a quello di kronos group per quanto riguarda le openCL.

Trovo molto facile che questa soluzione si affermi in ambito videoludico, dato che offrirebbe agli sviluppatori di videogiochi una piattaforma finalmente condivisa da AMD e molto facilmente anche da NVIDIA, che pur volendo spingere su CUDA non potrà rinunciare al supporto alle librere dx11. D'altra parte in ambito professionale questa soluzione, con tutti i suoi vantaggi dal punto di vita della compatibilità, sembra di difficile applicazione per via del tradizionale orientamento single platform delle librerie directx. Microsoft non offre infatti librerie simili per ambienti diversi da windows e ciò on sarà ovviamente accettato dagli sviluppatori, almeno non da tutti.

E' chiaro che ogni produttore tenderà a singere per il proprio standard, d'altra parte AMD ha scelto la via opensource, aparentemente molto gradita agli sviluppatori anche se meno pubblicizzato, nvidia cerca invece di imporre uno standard, CUDA, che è stato anche proposto ad AMD. D'altra parte qeust'ultima è comprensibilmente diffidente nell'appoggiarsi ad un concorrente per quanto riguarda un settore così strategico. Infine il gigante intel propone una via al moemnto non percorribile ne da AMD ne da NVIDIA, meno innovativa e forse meno efficiente, ma certamente gradita alle software house. E cosniderando il peso e l'influenza di intel in questo senso è sicuramente pensabile che la sua soluzione si diffonda in modo molto veloce. Oserei dire che probabilmente anche per questo NVIDIA, che al momento si trova nella condizione di essere l'unico grande produttore di hardware informatico nel mercato consumer a non poter proporre una piattaforma completa, non disponendo di licenza per produrre hardware x86, sta cercando di imporre il proprio standard con ogn mezzo prima dell'arrivo sulmercato di intel. Se lo standard concorrente dovesse imporsi in efeftti nvidia non sarebbe in grado di fornire un hardware per supportarlo.

Probabilmente lascelta del mercatodipenderà molto dall'hardware che intel riusciràa produrre. Se questo sarà molto inferiore alle gpu NVIDIA ed AMD probabilmente non sarà preso in considerazione, o potrebbe costituire un nuovo segmento probabilmente di livello un po' più basso ma di semplicissima implementazione: si tratta sempre di uno stream processor GP-GU e fortemente votato all'elaborazione parallela che non richiede altro, per girare, che un comune software x86.

Se le schede di Intel dovessero rivelarsi degne concorrenti dei prodotti NVIDIA ed AMD, cosa non facile per un produttore che entra da neofita nel mercato (se non consideriamo le varie IGP intel che pur avendo pretazioni scarsissime ne fanno il maggior produttore mondiale di GPU...), probabilmente riscuoterano un successo tale daspingere anche AMD ad entrare nel settore.

D'altra parte il mercato richiede uno standard per avviarsi...

Cosa voglio dire?

E' chiaro che finché non si saprà quale sarà lo standard emergente, le implementazioni in questo senso saranno scarse o per la maggior parte orientate ad ambienti chiusi quali software sviluppato internamente ad aziende che decidono di appoggiarsi all'uno o all'altro formato.

In questo senso per le software house si dimostra più vantaggioso sviluppare software in grado di girare sia su schede nvidia che amd, evitando dunque, per quanto possibile , l'uso dell'ambiente CUDA, er quanto questo ambiente sia potente e l'influenza di NVIDIA pesante nel settore.).

Le attuali implementazioni delle elaborazioni GP-GPU in ambito grafico:

Riporto solo alcuni esempi:

1) Ovviamente la fisica dei videogiochi, a livello concettuale è stato uno dei primi settori che hanno cercato di avvantaggiarsi delle GPU o comunque di stream processor per elaborazioni parallele GPU-like. NVIDIA ha scelto di assorbire AEGIA ed implementare il codice physx, AMD aveva scelto la strada di un altro produttore di codice dedicato allla computazione dela fisica, Havok, ma al momento sembra non tenere molto in considerazione questo settore ancora acerbo.

2) Il rendering: al momento i motori di rendering che si appoggiano alle gpu sono pochi e sostanzialmente ridotti a semplici esercizi di stile portati avanti da NVIDIA ed AMD. Nvidia d'altra parte ha assorbito mental images, produttrice dell'arcinoto engine mental ray, ed è facile attendersi un "porting" su GPU di questo software tramite CUDA. Non è chiaro se na simile versione di MR potrà funzionare su schede AMD ne se NVIDIA sceglierà, allo scopo di fruire del maggior bacino di mercato possibile, di rendere il software utilizzabile anche con schede AMD. Ciò rppresenterebbe comunque un controsenso rispetto a quanto auspicato circa l'affermazione dello standard CUDA.

3) La grafica 2d: fotografia ed editing video: Adobe sta uscendo in questo momento con prodotti quali photoshop cs4 e successivamente cs5 in grado di sfruttare le gpu perl'applicazione di filtri ed altre funzioni specifiche. Non sono un utilizzatore di questi software, ne parlo dunque con una certa difficoltà. Anche premiere si avvantaggerà delle gpu per l'encoding /decoding ed il rendering in tempo reale.

Tali funzionalità sono supportate da qualnque tipo di scheda video programmabile, dunque nvidia, ati, geforce, quadro, radeon o firegl che sia. Sembra comunque che le schede video quadro, eventualmente in versione specifica per photoshop potranno fuire di alcune funzionalità addizionali (nvidia sta lanciando una nuova serie NVIDIA quadro cs, per il moemnto di dubbia utilità data l'enorme ed inutile potenza e costo almeno della prima soluzione).

Tengo dunque a sottolineare che al momento non esiste una particolare versione di scheda video più o meno adatta alla elaborazione GPU, sebbene esistano schede specificatamente svilupate. Ritengo anche difficile l'affermarsi di software importante in grado di sfruttare le gpu prima dell'anno prossimo che, ripeto, porterà con se librerie dx11 e schede video intel e dunque, probabilmente, a seguire, uno standard abbastanza definitivo.

NVIDIA e a seguire AMD stanno anche implementando via driver sistemi per sfruttae più gpu anche diverse fra loro presenti nel pc, dedicando arbitrariamente ed a scelta dell'utente, una o più schede alla gestione del vido vero e proprio, e l'altra ad elaborazioni GP-GPU quali la fisica. In una workstation ciò sarebbe di interesse marginale, difficile pensare infatti di necessitare contemporaneamente di una scheda video per lavorare su unas cena e di un'altra che svolga calcoli di qualunque altro tipo... Voglio dire; difficile pensare di lavorare ad una scena mentre il pc svolge un render, anche se a far ciò è una scheda video. La cosa è invece diversa per i videogiocatori.

Comunque ciò offre una via di scampo per un'eventuale futura scheda video invecchiata: invece che rivenderla sottocosto si potrà pensare di tenerla per elaborazioni di questo tipo.

Un ultimo commento circa le grosse workstation dedicate ad elaborazioni GP-GPU: sembra che la configurazione migliore per questo hardware preveda una cpu per ogni scheda video presente nel sistema, al fine di assicurare a queste ultime un'adeguato flusso di dati da elaborare in ogni momento.

Grazie a tutti per l'attenzione, spero che il pezzo posa essere di interesse per molti.


Edited by papafoxtrot

Share this post


Link to post
Share on other sites

Difficile trovare riassunti più completi di questo. Bisognerebbe al massimo creare una specie di specchietto nel quale segnalare le varie implementazioni dei vari software con calcolo GP-GPU e con quali schede video.

Non si deve pensare infatti che il solo fatto di utilizzare Adobe CS4 porterà alla moltiplicazione a dismisura delle operazioni da fare nello stesso medesimo tempo: non mi risulta che ogni singola funzione si avvarrà di questo calcolo, ma non uso tali programmi, ecco perché magari una tabella in tal senso potrebbe essere utile.

:hello:

Share this post


Link to post
Share on other sites

Chiaro e lineare come sempre,hai fatto luce su un argomento che stava prendendo piede nel forum,ma per lo più si brancolava nel buio...Bravo Papafoxtrot :Clap03:

Addio sogni di gpu che ti fanno il calcolo render in 2 secondi...ne deve passare di acqua sotto i ponti... :crying:

Share this post


Link to post
Share on other sites

Come sempre l'hardware non sempre avanza di pari passo con il software...

Quanti anni sono passati dal primo Athlon 64bit di AMD? Adobe ha rilasciato adesso il suo primo photoshop a 64bit... xp64 era una cosa arrancata, ecc... tra poco avremo processori a 128bit, in un mondo dove il software sta ancora migrando ai 64 vabbeh ma questi sono altri discorsi

Complimenti a Papa, come sempre preciso e professionale. :Clap03: :Clap03:

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...