|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#8521 |
|
Senior Member
Iscritto dal: Feb 2006
Messaggi: 1659
|
OT
e continueremo a prenderne se non cambia la proprietà di questa squadra. Per lo stato attuale potremmo adottare nvidia come sponsor ufficiale ed andare in giro con la scitta "FERMI" sulle magliette. Fine OT
__________________
ogni minuto muore un imbecille e ne nascono due. |
|
|
|
|
#8522 | ||||||
|
Member
Iscritto dal: Oct 2006
Messaggi: 102
|
Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
http://www.capsl.udel.edu/conference...Papers/101.doc Mi sembra buona norma linkare le fonti, in modo che se c'è qualche volenteroso che ha voglia/tempo/capacità per capire lo possa fare senza sbattersi. Tanto se ho le citazioni vuol dire che ho il documento, per cui linkarlo non mi costa nulla. Bisogna dire subito che questo paper è riferito a CUDA, e quindi con la grafica non centra nulla. Proprio nulla no ma ci siamo capiti. Conseguenza diretta di questo è che tutte le considerazioni sono riferite alla programmazione general purpose e non ai linguaggi di shading. Infatti già nella prima citazione questa caratteristica emerge subito; se invece di partire da quel punto si legge anche la frase prima, già molte cose risultano più chiare a chi legge: "CUDA provides a few simple extensions to C/C++ that enables users to specify what part of their program they want to run in parallel on a GPU. The CUDA compiler driver splits an application into two parts, one which is run on the host CPU, and the other which is run on the GPU." Qua si sta parlando di codice c/c++, quindi assolutamente impossibile da eseguire per qualsiasi GPU. Infatti NVIDIA a fatto delle estensioni al c grazie alle quali il programmatore definisce le parti di codice che, adottando comunque sempre una sintassi c-like, possano essere possibili da eseguire dalle GPU. E quindi il codice viene diviso in 2 parti: quello "normale" che il programmatore ha deciso che sarà eseguito dalla CPU e che segue una via più tradizionale, e quello da dare in pasto tramite CUDA alla GPU. Anche questo codice però non è gestibile direttamente così com'è (e non sto parlando del fatto che sia un sorgente e non compilato), a causa del possibile/probabile uso di strutture dati/costrutti che la GPU non può eseguire. L'esempio più banale che mi viene in mente è, ad esempio che il GLSL supporta soltanto (almeno fino alle opengl 2.1, ma non credo che dopo la situazione cambi radicalmente, e anche se cambiasse visto che gli shader c'erano anche con le directx9 e opengl 2.1, il discorso deve essere valido) vettori di 4 elementi o matrici fino a 4x4. Dimensioni ridicole per codice general purpose. Ovviamente ci sono le texture, che presumo siano, come negli shader, la via maestra per passare i dati alla GPU; però siccome in c le texture non ci sono e nella GPU "lavorano" in maniera diversa rispetto a semplici array, bisogna usarle in modo adeguato. Da questo derivano considerazioni circa l'inadeguatezza del compilatore usato finora per la grafica e quindi gli shader: "NVIDIA already had a well-tuned low-level compiler for graphics codes, called OCG (Optimized Code Generator). This handles register allocation, scheduling, and peephole optimizations. This compiler is built into the graphics driver for doing just-in-time compilation of graphic codes. Because graphics codes tend to be relatively simple compared to general purpose C code (control flow has only recently been added to DirectX), and due to the compile-time limitations of needing to compile at runtime, it was decided that CUDA needed a high-level optimizer to handle the compute codes." Infatti dice che essendo il "graphics code" semplice rispetto al "general purpose C code" (fa riferimento pure al fatto che solo recentemente nel HLSL delle directx è stato inserito l'if-then-else, questo per farvi capire di che dimensione di semplicità stiamo parlando), il compilatore risulta inadeguato e quindi hanno dovuto piazzarci in mezzo qualcosa d'altro. Veniamo ora a due belle cosette: la prima è Il riferimento alla compilazione just-in-time che di primo acchito può essere fourviante, ma anche qui basta ragionarci un po per capire meglio. Il primo dubbio può venire già dal nome just-in-time (al volo), che sembra non lasciare scampo. Per questo è forse sufficiente anche una lettura da wikipedia (inglese) che però non so se basta se si parte a digiuno con l'argomento. Questi compilatori sono utilizzati solitamente per migliorare le prestazioni dei linguaggi INTERPRETATI, cioè che non sono compilati nativamente per la macchina su cui l'applicazione viene eseguita, ma che vengono compilati in, ad esempio, bytecode. Questo codice viene quindi letto dall'interprete che, al volo, lo traduce in linguaggio macchina da eseguire. Che vantaggi comporta tutto ciò? semplice: se scrivo un programma e lo compilo in bytecode, basta avere un interprete di bytecode per ogni piattaforma su cui vorrò fare girare il programma che esso potrà girare senza bisogno di ricompilarlo. Quindi è possibilie scrivere un programma che giri su osx, linux windows, ecc... Un esempio è JAVA. Problemi? prestazioni pestilenziali. E allora? arriva in aiuto la compilazione just-in-time che provvede, durante l'avvio del programma, a compilare il programma da bytecode a codice macchina in modo che, dopo un primo avvio più lento rispetto con un interprete classico, il programma risulti moooolto più svelto (vi ricorda qualcosa questo comportamento?). Assodato che quindi il termine just-in-time non significa quello che può sembrare ad un primo sguardo, passo ora ala seconda considerazione, in cui si fa riferimento ai limiti della compilazione a run-time. Anche qui la questione è chiara: gli shader hanno pochi tipi di dati e semplici, pochi costrutti e sono PICCOLI, cioè composti da poche righe, il tutto ovviamente rapportato a quante linee di codice potrebbe contenere un normale programma, magari commerciale/professionale in ambito, per esempio, di calcolo scientifico. Nei giochi infatti si parla di programmi che devono terminare il loro ciclo di esecuzione anche un centinaio di volte al secondo (i nostri cari fps) di cui per giunta non tutto il tempo è speso in calcoli della GPU, mentre in un classico programma una "operazione" può richiedere un tempo nettamente più lungo, e qui mi sento che di esempi non ne servono. Chiunque poi abbia programmato in linguaggi tipo c/c++ visual basic ecc... sa che in progetti anche di piccole dimensioni la compilazione non è assolutamente una operazione istantanea. Quindi ci si può immaginare se sia di buon auspicio per un cliente avere un tempo di attesa nel lanci dell'applicativo che non si misura certo in frazioni di secondo... Per cui si è reso necessario un ulteriore stadio di compilazione che potesse rendere il lavoro per il compilatore del Just-in-time del driver sopportabile (quindi in tempi "ragionevoli"). E' da qui che nasce tutto il discorso su Open64 e via discorrendo cosa che quindi non centra assolutamente nulla con il tema del contendere. Tra l'altro in questo caso si tratta proprio di cercare di compilare in maniera "definitiva" la maggior parte del codice (cioè lo fa una volta lo sviluppatore e poi basta), in modo che il grosso del lavoro venga fatto prima di dover utilizzare, ad ogni avvio, il compilatore Just-in-time del driver. Risulta ora anche chiaro il riferimento alla difficoltà di farlo questo compilatore, con la scelta di optare per implementare una derivazione di Open64: bisogna infatti adattare il dataset del linguaggio c-like a quello per forza di cose ridotto delle GPU. E' sempre riguardo a questo è anche il riferimento a PTX: "The GPU input is then processed by our Open64 compiler (called nvopencc), which emits an assembly language that we created called PTX (Parallel Thread Execution). PTX provides a virtual machine model that multiple tools can target, and which is independent of the underlying processor. Some important features of PTX are that it has: • unlimited virtual registers of different sizes, • explicit memory segments for different levels of sharing between threads, • no stack or heap, • strongly typed instructions, • vector support for memory accesses, • predication for branching, • C-like syntax for calls." Serve infatti come interfaccia al nostro Just-in-time per rendergli il tutto digeribile. Concludendo (...), non mi sembra che ci sia niente di nuovo su cui discutere. Adesso spero che se qualcuno avesse avuto delle difficoltà a capire la differenza tra interprete e compilatore ora abbia le idee più chiare. |
||||||
|
|
|
|
#8523 |
|
Senior Member
Iscritto dal: Nov 2008
Città: (VA)
Messaggi: 10993
|
ragazzi, news importanti su date?
__________________
CPU: i9 13900k @def | MoBo: MSI Tomahawk Z790 | RAM: DDR5 Fury 2x32GB 6000 C30 | VGA: RTX 5080 | PSU: Seasonic Focus GX850 | Dischi:WB SN850 500GB + Crucial P2 1TB +2TB | Monitor + TV: Asus MG279Q + Samsung 65" QN90A
|
|
|
|
|
#8524 | |
|
Senior Member
Iscritto dal: Mar 2001
Messaggi: 5390
|
Quote:
CUDA non c'entra niente con la grafica? CUDA non è solo GPGPU ma un insieme di architettura SW e microarchitettura HW e serve per ottimizzare anche le operazioni grafiche su gpu (mi spieghi cosa c'entrerebbe, ad esempio, la gestione delle operazioni su texture e la loro allocazione in memoria con applicazioni di tipo gpgpu?). E comunque, grazie ai tool messi a disposizione con cuda ci si può fare un'idea di quelle che sono le operazioni possibili su una gpu (e le preephole optimization rientrano tra queste). Inoltre, visto che l'oggetto del contendere sono le ottimizzazioni e non la compilazione (mi dici, ripeto, dove avrei scritto che la compilazione è a carico della gpu?) e, in particolare le sostituzioni di MADD con FMA e che queste si effettuano facendo uso di preephole e su linguaggio binario (la cpu può effettuare la traduzione del codice dei prephole, semmai), ti invito a dare un'occhiata a questo link, con l'avvertenza che si tratta di una versione vecchia di cuda e non si quella destinata a girare su Fermi (che non è detto che sia retrocompatibile e, sicuramente, non lo sarà in toto con le gpu dx10). http://moss.csc.ncsu.edu/~mueller/cl...a/GPU+CUDA.pdf dove, a pagina 30, riporta, tra le operazioni svolte a runtime dal device (GPU) le atomic ops, tra cui and, or e confronti tra interi, che servono per eseguire preephole optimization. Le atomic operation sono state introdotte con l'adozione dei compute shader 4.0 (DX10). Qui, invece, parla dell'adozione di vere e proprie cache (non le L1 e L2 dei chip fino a GT200 che sono solo texture cache) per poter eseguire atomic operations direttamente on chip senza dover accedere continuamente alla vram http://www.behardware.com/articles/7...evolution.html e qui dell'adozione di puntatori (con CUDA 3.0 e PTX2.0, scritti appositamente per Fermi). http://www.behardware.com/articles/7...evolution.html Dalla tua invocata wikipedia http://it.wikipedia.org/wiki/Compilatore_just-in-time riporto testualmente In un ambiente JIT la prima fase è costituita dalla compilazione del bytecode, in cui si trasforma il codice sorgente in una rappresentazione intermedia portabile e ottimizzabile, detta appunto bytecode. Successivamente il codice bytecode viene installato sul sistema di destinazione. Quando il codice viene eseguito, il compilatore dell'ambiente di esecuzione lo traduce in codice macchina nativo. La traduzione in codice macchina può avvenire per file o per funzione: le funzioni possono essere compilate solo quando stanno per essere eseguite, da qui il nome just-in-time, ovvero "appena in tempo". La compilazione just-in-time permette di ottenere un buon compromesso tra velocità d'esecuzione e portabilità del codice. Nella fase di compilazione del bytecode è eseguita la maggior parte del "lavoro pesante", ovvero tutte quelle operazioni che richiedono molto tempo per essere eseguite, come l'analisi sintattica e semantica del codice sorgente e una prima fase di ottimizzazione; la compilazione da bytecode a codice nativo è invece molto più veloce. I compilatori da bytecode a codice macchina (tra cui, appunto, i sistemi JIT) sono più semplici da scrivere perché la maggior parte del lavoro è già stata compiuta dal compilatore che ha prodotto il bytecode; questo, inoltre, rende i programmi in bytecode più facilmente portabili su nuove architetture. Insomma, secondo le schema di nVidia, c'è un compilatore STANDARD che fa la compilazione in bytecode (chi ha detto che non c'è il compilatore standard?). In questa fase si suole fare le ottimizzazioni ma, abbiamo visto, secondo lo schema adottato da nVidia le cose non stanno così, dato che l'OCG che si occupa delle ottimizzazioni, è a valle della PTX che fa traduzione JIT. Infine la traduzione JIT prevede che le funzioni siano tradotte al momento in cui stanon essere eseguite (e nel caso di nVidia tradotte e ottimizzate, aggiungerei). Questo significa che la cpu non invia codice già bello e pronto prima dell'esecuzione, perchè il codice bello e pronto arriva solo dopo la compilazione JIT. Se se ne occupa la cpu significa che ciò comporta un traffico continuo tra cpu, ram di sistema, vram e gpu che è prorpio quello che i progettisti di gpu stanno cercando da alcuni anni di evitare come la peste (trasferimento in batch di migliaia di vertici invece di singoli triangoli, texture e cube map array, ecc). Sai cosa me ne frega di quant'è veloce una cpu a fare la sostituzione se poi quell'istruzione arriva alla gpu dopo due giorni? Non si può teorizzare senza avere bene in mente il sistema fisico su cui si deve operare e i suoi colli di bottiglia (e il canale tra cpue gpu, nonostante il pci-express, è uno dei peggiori). Quindi la sostituzione di madd con fma, semmai si farà e se sarà possibile, sarà fatta in runtime dalla gpu e direttamente on chip. (come sto dicendo da 10 pagine), dal momento che fermi, a detta della stessa nVidia, pare perfettamente in grado di fare preephole optimizzation direttamente on chip. Ultima modifica di yossarian : 30-11-2009 alle 15:14. |
|
|
|
|
|
#8525 |
|
Senior Member
Iscritto dal: Dec 2006
Città: sumirago (VA)
Messaggi: 4825
|
mmm non credo se non si trovano sui maggiori siti di hw.. (quindi escluso fudzilla che la dava x gennaio in step A3) XD
in effetti è qualche settimana che non si hanno notizie. |
|
|
|
|
#8526 | |
|
Bannato
Iscritto dal: Jan 2006
Città: Red Light District
Messaggi: 13937
|
Quote:
|
|
|
|
|
|
#8527 | |
|
Senior Member
Iscritto dal: Nov 2008
Città: (VA)
Messaggi: 10993
|
Quote:
__________________
CPU: i9 13900k @def | MoBo: MSI Tomahawk Z790 | RAM: DDR5 Fury 2x32GB 6000 C30 | VGA: RTX 5080 | PSU: Seasonic Focus GX850 | Dischi:WB SN850 500GB + Crucial P2 1TB +2TB | Monitor + TV: Asus MG279Q + Samsung 65" QN90A
|
|
|
|
|
|
#8528 |
|
Bannato
Iscritto dal: Nov 2002
Città: Treviso
Messaggi: 17549
|
Oggi a Milano.....ore 16.00.....Nvidia....speriamo bene.
|
|
|
|
|
#8529 |
|
Member
Iscritto dal: Oct 2006
Messaggi: 165
|
io mi tengo la mia giusto perchè ho 1gb di ram
cmq fai bene...sono d'accordo con te...nVidia se lo merita di perdere fette di mercato! I propri clienti li considera meno di quella cosa che si pesta accidentalmente ai giardinetti... E poi è l'ora che perda un po', giusto per rimboccarsi le maniche e per mettere prezzi decenti
__________________
Configurazione: Win 7 Ultimate 64 Bit su P5Q-pro, q6600 G0 con Zalman 9700 NT, Palit GTX 460 256bit 1gb DDR5, 4gb DDR2 800Mhz Corsair Dominator,HDD:2x WD 1TB, 1x seagate 1TB, 1x seagate 500GB, 1x WD320GB, 1x WD 2TB per tot 5820TB |
|
|
|
|
#8530 |
|
Bannato
Iscritto dal: Apr 2009
Messaggi: 1323
|
|
|
|
|
|
#8531 |
|
Member
Iscritto dal: Oct 2006
Messaggi: 165
|
In effetti non so cosa possa presentare nvidia oggi alle 16:00 a milano
__________________
Configurazione: Win 7 Ultimate 64 Bit su P5Q-pro, q6600 G0 con Zalman 9700 NT, Palit GTX 460 256bit 1gb DDR5, 4gb DDR2 800Mhz Corsair Dominator,HDD:2x WD 1TB, 1x seagate 1TB, 1x seagate 500GB, 1x WD320GB, 1x WD 2TB per tot 5820TB |
|
|
|
|
#8532 |
|
Messaggi: n/a
|
|
|
|
#8533 |
|
Senior Member
Iscritto dal: Oct 2002
Messaggi: 11569
|
|
|
|
|
|
#8534 |
|
Bannato
Iscritto dal: Nov 2009
Messaggi: 342
|
|
|
|
|
|
#8535 | |
|
Senior Member
Iscritto dal: Oct 2002
Messaggi: 11569
|
Quote:
Non è che se arrivano un anno dopo c'è poi da stupirsi che vada più forte, e ci mancherebbe altro... No no, per me sto giro hanno fatto proprio una gran bella figuraccia, e da nvidia-ista da ani, mi sa che stavolta li mollo.. |
|
|
|
|
|
#8536 |
|
Senior Member
Iscritto dal: Sep 2006
Città: Firenze
Messaggi: 4087
|
E' si, che vuoi che presentino a Milano.... Probabilmente dimostreranno che, basandosi sulle configurazioni hardware medie degli italiani, il loro prodotto che si addice meglio per non essere CPU limited è il Geforce 4 Ti 4600
__________________
Intel Core i7 12700k - ASUS PRIME Z690-P - 2x8 Gb G.Skill Trident Z DDR4-3200C14 - Gainward GeForce RTX 3080 Ti - SSD Samsung 980 pro 2 TB M.2 + WD Red 3 TB - Sound Blaster Z - Case BeQuiet Silent 800 Window with Enermax Platimax 850w |
|
|
|
|
#8537 | |
|
Senior Member
Iscritto dal: Sep 2002
Città: Orizzonte degli eventi
Messaggi: 22740
|
Quote:
__________________
AMD Ryzen 7 9800X3D | Arctic Liquid Freezer 3 420 | ASUS ROG Strix X870E-e | 2x16GB DDR5 6400 CL30 G.Skill | Zotac NVIDIA GeForce RTX 5090 Solid | Seasonic Prime 1,3Kw Titanium | Kingston Fury Renegade 2Tb + SSD vari | Lian li o11 Dynamic Evo XL | ASUS PG42UQ | Razer DeathAdder V3 + Atlas + Huntsman V3 Pro TKL + Leviathan V2 Pro + Blackshark v2 pro (2023) | Synology DS423+ 3x8TB WD Red Pro | MacBook Air 2022 | AVM 5690 Pro | |
|
|
|
|
|
#8538 |
|
Senior Member
Iscritto dal: Oct 2002
Messaggi: 11569
|
|
|
|
|
|
#8539 | ||||
|
Member
Iscritto dal: Oct 2006
Messaggi: 102
|
Quote:
Quote:
Voglio però ritornare velocemente alla questione del compilatore standard HLSL. riporto nuovamente i 2 grafici che ho già linkato: HLSL (directx) http://img109.imageshack.us/img109/2233/grafico.jpg GLSL (opengl, il discorso continua poi nelle altre 2 pagine seguenti) http://img69.imageshack.us/img69/5382/45128354.jpg siccome quando la discussione è partita pensavo di dover solo fare una puntualizzazione veloce e non sta opera enciclopedica, ho parlato solo (l'ho specificato quasi subito) di opengl visto che è l'ambito che conosco bene. Andando poi a pescare le fonti di quello che stavo spiegando sono incappato in una breve descrizione dello schema delle directx che è leggermente diverso ma non sposta in modo sostanziale il problema. Qualche post fa sono sicuro di avere accennato alla questione ma vedendo questa domanda o non è stata letto il pezzo in questione o non sono stato abbastanza chiaro. In entrambi i mondi è sempre nel driver che avviene la compilazione dello shader, infatti la frecetta del graphics hardware viene dubito dopo. Quello che è diverso, è che in opengl il source dello shader GLSL arriva direttamente nel driver, l'operazione di compilazione in linguaggio macchina avviene tutta li. In HLSL invece c'è "l'HLSL translator" che effettua una prima traduzione, ma che ovviamente non può essere in linguaggio macchina perchè essendo quel modulo uguale per tutti non può compilare per tutti (la compilazione è una operazione "su misura"). In pratica fa qualcosa tipo il bytecode del JAVA. Questo codice passa al driver (che come nel caso dell'opengl è prodotto dal "graphics hardware vendor") che si preoccupa di compilare lo shader nel linguaggio macchina. Alla fine il risultato è il medesimo in entrambi i casi. In una delle pagine successive (mi sembra in quella dopo) si fa un ragionamento su quale approccio sia preferibile. Essendo il libro di riferimento delle opengl, non ci sono dubbi su quale sia l'approccio che venga reputato migliore (ognuno tira l'acqua al suo mulino), ma i concetti hanno validità generale. L'approccio opengl è sicuramente più oneroso per quanto riguarda il compilatore del driver, visto che deve eseguire a run-time la completa conversione dalle istruzioni ad alto livello al linguaggio macchina. Quindi o risulta più lento (il che non comporta frame-rate minori visto che viene fatta una volta sola, ma comunque non può essere lento oltre un certo limite) oppure "ottimizza" meno (anche se è un termine troppo semplicistico ma ci siamo capiti). In HLSL invece il compito del driver è molto più leggero perchè il grosso del lavoro lo ha fatto l'HLSL translator (che può metterci quanto gli pare visto che può non essere eseguito a runtime e quindi rentere il codice più compatto possibile). Il difetto di questo approccio è che se l'architettura della GPU diverge troppo dal generico modello di calcolo previsto dal codice "intermedio" che gli arriva al driver, allora quest'ultimo lo adatterebbe sicuramente peggio che in opengl, non avendo le informazioni del sorgente ma solo il codice uscito dal translator (si perde parecchia informazione). Se quindi non ci fossero limiti di tempo, sicuramente l'approccio GLSL sarebbe nettamente superiore, ma visto che non può metterci ore (è una battuta) per compilare, allora il risultato dipende appunto dal bilanciamento complessità della GPU/tempo a disposizione. Quindi nessuno dei due approcci è in modo totale migliore dell'altro. Ritornando all'argomento del quote, io non ho mai detto (e se l'ho detto mi sono sbagliato) che viene modificato il traduttore HLSL di windows, ho fatto sempre riferimento a quello del driver, responsabile in entrambni i casi della generazione del codice macchina. Quote:
il GPGPU si faceva anche prima dell'avvento degli shader unificati quindi di cuda, il quale ha solo aggiunto un livello di astrazione e reso + semplice per il programmatore non perdersi in tecnicismi prettamente grafici (come appunto le texture) ma che sono la via privilegiata per la GPU di ricevere i dati. Non penso che cuda "internamente" lavori molto diversamente, ma rende più semplice la vita allo sviluppatore, oltre certamente, vista la maggiore attenzione delle nuove GPU al mondo general purpose, a offrire qualcosa in più ma che non dipende da cuda ma dall'HW sottostante. Non conosco però dettagliatamente CUDA per esprimere giudizi definitivi in merito, ma non capisco perchè inserire tutto nel caldernone di questa discussione che ha un argomento ben preciso e focalizzato. Alla fine il risultato è solo confondere le idee a chi ci legge. Quote:
Le due pagine dell'articolo che hai linkato e il pdf riguardano sempre la questione CUDA-GPGPU di cui ho già parlato sopra e, meglio, nel post precedente, e che non centra nulla con quello di cui stiamo discutendo. Comunque oltre a yoss qualcuno legge quello che scrivo? sennò tutto sto casino per una persona sola lo rende spam e basta |
||||
|
|
|
|
#8540 | |
|
Senior Member
Iscritto dal: Mar 2001
Messaggi: 5390
|
Quote:
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:51.




















