|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#8541 |
|
Senior Member
Iscritto dal: Oct 2002
Messaggi: 11569
|
|
|
|
|
|
#8542 |
|
Senior Member
Iscritto dal: Feb 2008
Città: Arezzo
Messaggi: 1025
|
|
|
|
|
|
#8543 | |
|
Senior Member
Iscritto dal: Mar 2001
Messaggi: 5390
|
Quote:
Ripeto, CUDA serve a capire come funziona una gpu (nVidia nella fattispecie) e cosa può fare. Ora abbiamo appurato che esiste un compilatore standard (OPEN64, HLSL, GLSL) che fa una prima compilazione e sappiamo che le preephole optimizatin sono fatte dall'OCG su linguaggio binario (c'è scritto esplicitamente). l'OCG è a valle della PTX (quindi agisce dopo la compilazione JIT) e le preephole optimization si servono di quelle che sono definite atomic ops sugli interi (and, or, compare) e di salti condizionati. Fermi gestisce alla perfezione entrambe le cose (ha una gestione dei predicate cpu like). Quindi non ha nessuna difficoltà ad effettuare la sostituzione al volo sulla singola istruzione quando viene chiamata. E questo riduce anche il traffico tra cpu e gpu. Non vedo una sola buona ragione per cui debba essere la cpu ad effettuarla in sede di compilazione JIT. EDIT aggiungo, sempre da wikipedia http://en.wikipedia.org/wiki/Just-in-time_compilation i vantaggi della compilazione JIT 1. The compilation can be optimized to the targeted CPU and the operating system model where the application runs. For example JIT can choose SSE2 CPU instructions when it detects that the CPU supports them. To obtain this level of optimization specificity with a static compiler, one must either compile a binary for each intended platform/architecture, or else include multiple versions of portions of the code within a single binary. 2. The system is able to collect statistics about how the program is actually running in the environment it is in, and it can rearrange and recompile for optimum performance. However, some static compilers can also take profile information as input. 3. The system can do global code optimizations (e.g. inlining of library functions) without losing the advantages of dynamic linking and without the overheads inherent to static compilers and linkers. Specifically, when doing global inline substitutions, a static compiler must insert run-time checks and ensure that a virtual call would occur if the actual class of the object overrides the inlined method (however, this need not be the case for languages employing a static type discipline). 4. Although this is possible with statically compiled garbage collected languages, a bytecode system can more easily rearrange memory for better cache utilization.. ovviamente cpu va sostituita con gpu. In particolare, i due punti in neretto rappresentano due dei motivi principali per cui è opportuno che sia la gpu a fare le ottimizzazioni, quando possibile. Il punto 2 parla di riarrangiare al volo il codice per meglio ottimizzare l'elaborazione (ce lo vedi il bus pci intasato dall'andirivieni tra cpu e gpu? E i continui load/store tra vram e gpu a botta di 500-600 cicli per volta?). Il punto 4 parla di miglior utilizzo della cache (con ovvio riferimento alla cpu; ma in questo caso è la cpu stessa che gestisce tutto e ottimizza la propria cache. Nel caso in questione, la cpu non ha accesso alcuno alla cache interna della gpu). Quindi, questo tipo di operazioni può farle solo la gpu stessa. Come vedi, non vale il discorso del codice già bello e pronto da essere usato e, tanto meno, è pensabile la gestione JIT da parte della cpu di buona parte delle ottimizzazioni. Nel caso specifico della sostituzione delle madd con fma ho già detto quello che penso: fa parte di quelle ottimizzazioni a carico delle gpu, anche perchè rientrano tra quelle che obbligano a riarrangiare la gestione dei thread in corso di elaborazione (i dati sono elaborati in maniera dinamica e un insieme di vertici ne può generare uno molto più grande, oppure da un vertice possono venir fuori un gran numero di pixel e solo il thread processor della gpu può decidere in che ordine far eseguire le relative istruzioni e, di conseguenza, come distribuire e allocare le risorse). In quanto all'ultima frase, mi sa che nessuno ci sta filando e per quanto mi riguarda, possiamo chiuderla, visto che siamo ad un punto morto Ultima modifica di yossarian : 30-11-2009 alle 19:51. |
|
|
|
|
|
#8544 | |
|
Senior Member
Iscritto dal: Oct 2002
Messaggi: 11569
|
Quote:
Infatti hosempre avuto nvidia dai tempi della TNT perchè secondo me più performante, a parte il periodo ATI 9700-9800 in cui sono passato al rosso perchè nettamente migliore ATI all'epoca... E mi sa che a sto giro la storia si ripererà con il rapporto 5870 / GT 300: 9700 bis?
|
|
|
|
|
|
#8545 |
|
Member
Iscritto dal: Jul 2009
Città: Torino
Messaggi: 222
|
Vivete sereni, siete gli unici che scrivono cose interessanti! Criptiche per i profani, ma interessanti!
|
|
|
|
|
#8546 | ||
|
Senior Member
Iscritto dal: Sep 2005
Città: Milano
Messaggi: 14463
|
Quote:
Quote:
Sempre in rispettoso silenzio.... Scherzi a parte... l'argomento è ostico però qualcosa si imparara sempre... andate avanti.
__________________
ASRock Z77 Extreme4 | Intel i5-3570K @4.4GHz - @1.212v | Corsair H100i | Corsair Vengeance 2x4GB DDR3 1600 MHz | SSD Samsung 830 256GB + 830 128GB | 2x500GB Sata2 WD | Sapphire HD7950 DualX | CORSAIR HX850W | LG IPS234V LED 23" | CM690 II Ad. Thread: ATi Radeon HD 5850 - AMD Radeon HD 6870 - 6850 - 6790 - AMD Radeon HD 7870 - 7850 |
||
|
|
|
|
#8547 | |
|
Senior Member
Iscritto dal: Jan 2006
Messaggi: 309
|
Quote:
Vorrei che però si arrivaste ad un punto in cui sono tutti d'accordo... in fondo è naturale che sia così se si discute tra persone ragionevoli, no? Soprattutto visto che si parla di questioni tecniche e quindi dimostrabili... |
|
|
|
|
|
#8548 | |
|
Senior Member
Iscritto dal: Mar 2001
Messaggi: 5390
|
Quote:
|
|
|
|
|
|
#8549 | |
|
Senior Member
Iscritto dal: Apr 2008
Messaggi: 3153
|
Quote:
__________________
Case: Stacker 830 nVidia Edition-Ali: Corsair HX1000W-Mobo: Asus R2E-CPU: i7 920 3,80 Ghz-Dissi: NH-U12P SE-Ram: Dominator 6GB 1600Mhz CAS8-VGA: Zotac GTX480 2-Way SLI-HDD: 2x150GB Raptor Raid0;1TB WD10EADS-Schermo: Acer GD245HQ+nVidia 3D Vision -SO: Win8 Pro x64-Mouse: Razer Mamba-Cuffie: Sharkoon X-Tatic 5.1 Digital-Gaming: G13-G25-Rumble Pad 2, Xbox360 controller
|
|
|
|
|
|
#8550 | |
|
Member
Iscritto dal: Mar 2002
Città: Salerno
Messaggi: 70
|
Quote:
Sottolineo come altri che una discussione così sul forum non si vedeva da un bel pò. Ciao e grazie
__________________
MB: Asus P5Q - CPU: Intel E8400@3600 1,140V Dissi Scythe Mugen 2 - RAM: Geil 800Ultra 5-5-5-15 @900 2.2V SV: ATI 4870 Sapphire Toxic Design - Ali: Corsair Vx 550W |
|
|
|
|
|
#8551 | |
|
Senior Member
Iscritto dal: Feb 2006
Messaggi: 1659
|
Quote:
Molti di noi non intervengono attivamente semplicemente perchè...non possono. A stento vio seguiamo ma è l'occasione giusta per avvicinarsi a temi ostici che ci appassionano.
__________________
ogni minuto muore un imbecille e ne nascono due. |
|
|
|
|
|
#8552 |
|
Bannato
Iscritto dal: Nov 2009
Messaggi: 342
|
scusate non so se avete notato ma nel sito tutti gli stream processor sono stai rinominati come cuda core, perciò chi vi ha detto che questi stream siano diversi e non solo una rinominazione.
|
|
|
|
|
#8553 | |
|
Senior Member
Iscritto dal: Feb 2006
Città: Looking for a place to call home
Messaggi: 5325
|
Quote:
Stiamo parlando di quello da n pagine...
__________________
A.L.M. @ HWBOT | Personal PC: Asus N56VZ | Work PC: Lenovo Thinkpad T420 (Core i5 2520M, 4GB ram, 320GB 7200rpm) | Mobile device: iPhone 4S Work It Harder, Make It Better, Do It Faster, Makes Us Stronger, More Than Ever Hour After Hour Work Is Never Over |
|
|
|
|
|
#8554 |
|
Bannato
Iscritto dal: Nov 2009
Messaggi: 342
|
l'articolo dice : "Sviluppiamo ora quelle che sono le caratteristiche architetturali della nuova architettura Fermi di NVIDIA, alla luce di quello che il produttore ha sino ad ora reso disponibile per il pubblico. Partiamo dal numero di stream processors, passato dai precedenti 240 delle achitetture GT200 agli attuali 512; NVIDIA ha scelto di chiamare questi componenti come CUDA Cores e non più come stream processors, ma di fatto sono la stessa cosa in termini di architettura della GPU ".
probabilmente organizzati in modo differente ma allora perchè dite che l'efficienza di questi CUDA core sono incerti rispetto a quelli di GT200 ? da quel che mi è smebrato è parsa più un evoluzione del Gt200. |
|
|
|
|
#8555 | |||
|
Senior Member
Iscritto dal: Mar 2001
Messaggi: 5390
|
Quote:
Quote:
Quote:
|
|||
|
|
|
|
#8556 |
|
Bannato
Iscritto dal: Nov 2009
Messaggi: 342
|
CUDA core è solo una rinominazione da quanto ho capito ma sono quasi i medesimi o dei derivati degli stream da GT200.
Quindi se sono dichiarati 512 stream effettivamente potrebbe voler dire molto a livello di prestazione. |
|
|
|
|
#8557 | |||
|
Senior Member
Iscritto dal: Mar 2004
Città: Parma
Messaggi: 5959
|
Quote:
- Il gioco fa indirettamente una chiamata ai driver per inviare lo shader alla gpu - Il driver nell'ambito dell'esecuzione della chiamata usando codice assembler x86/x64, rimpiazza le madd con le fma e prepara le istruzioni per la gpu che conterranno quindi le ottimizzazioni. - Il driver invia le istruzioni ottimizzate alla gpu. Parzialmente in quanto la teoria che i driver contengano staticamente già le istruzioni per la gpu ottimizzate mi sembra poco probabile, e, perchè richiederebbe che i driver conoscano gli shader di tutti i giochi sviluppati, e, perchè questo replace non vedo perchè non si possa far eseguire alla cpu Quote:
Quote:
Non è detto che poi questa sarà la strada seguita da nVidia, quest'ultima come farebbe chiunque attuerà le ottimizzazioni compatibilmente con il miglior rapporto costi/benefici, e se il rapporto migliore deriverà adottando una soluzione simile a quella da te prospettata sceglierà quella, altrimenti ne sceglierà una simile a quella prospettata dal sottoscritto o un'altra ancora. Il punto è che comunque sono ambedue tecnicamente fattibili, mentre seguendo il dibattito sembrava che l'unica verosimile fosse un replace eseguito dalla gpu durante la decodifica delle istruzioni.
__________________
case: phanteks eclipse 500a - cpu: 9800x3d - aio: arctic liquid freezer iii 360 - mobo: msi b650 gaming plus wifi - ram: g.skill flare x5 6000 cl30 - gpu: rtx 5080 fe - storage: samsung 980pro 1tb, 960 evo 500gb, 850pro 512gb - psu: enermax revolution d.f. x 850w |
|||
|
|
|
|
#8558 | ||||||
|
Member
Iscritto dal: Oct 2006
Messaggi: 102
|
Quote:
Io quando dico compilatore del driver indico tutta la fase che dal codice sorgente (opengl) o dal codice restituito dall'HLSL translator (directx) restituisce il codice macchina per la GPU. Che poi la compilazione JIT e ottimizzazione sia composta da più passi è ovvio ma mi sono sempre limitato a dire il compilatore "ottimizza" per cercare di rendere la discussione più digeribile. Il succo del discorso è che partendo dallo shader, dal "blocco" software del driver esce il codice macchina che la GPU quando lo esegue non lo tocca più. E' appunto per questo che le sostituzioni si fanno a questo livello e non a run-time, sennò le dovrei fare tutte le volte invece così le faccio una volta sola. Tra l'altro se non si facesse in questo modo il codice non sarebbe compilato, ma richiederebbe una ulterirore interpretazione, cosa assolutamente priva di ogni significato visto che si sta parlando di ambiti dove la prestazione pura è quello che conta e se si può risparmiare qualcosa lo si fa. Quindi visto che nel driver si sa già molto di quello che si deve fare (almeno, lo ripeto, per operazioni prettamente statiche come appunto lasostituzione e la compilazione in generale) lo si fa li e basta. Perchè se lo si fa prima che lo shader passi a run-time, lo si fa una volta sola e basta. Forse non riesco a spiegarmi bene sul concetto di run-time: è ovvio che gli shader vengono compilati a run-time (da qui il nome di compiler just-in-time) ma il run-time è riferito all'applicazione e non agli shader; cioè per quanto riguarda la GPU siamo "fermi" (verbo e non l'architettura NVIDIA). Ad un certo punto nell'applicazione si arriva alla chiamata di caricamento degli shader che vengono compilati e installati all'interno della GPU pronti per essere eseguiti. Ed è quindi prima di arrivare all'esecuzione che alcune ottimizzazioni "statiche" (cioè come già detto che non riguardano l'esame del flusso delle istruzioni) come le sostituzioni possono venire eseguite dal JIT (o comunque subito dopo, ma prima di arrivare all'esecuzione sulla GPU, ci siamo capiti su cosa voglio dire), in modo da non dover essere fatte tutte le volte dalla GPU al volo; saranno pure rapide e mascherabili, ma sarà ben meglio non farle no? è questo il senso dei compilatori just-in-time che parlando in generale sono stati creati per velocizzare i linguaggi interpretati e che qui hanno lo stesso significato, cioè traducono "al volo" prima della prima esecuzione il codice degli shader. E' per questo che è assolutamente conveniente fare tutto il possibile qui invece che farle mentre gli shader sono in esecuzione sulla GPU. Spero di essere stato abbastanza chiaro nel non identificare queste ottimizzazione con tutto quello che si fa a runtime (qua intendo il run-time degli shader, cioè mentre la GPU lavora) per sfruttare l'enorme potenziale parallelo delle GPU. Ma ste cose le ho già ripetute a sufficienza e la mia posizione ritengo sia abbastanza chiara. Quote:
Quote:
Fai poi un riferimento al OCG ed al JIt come se fossero due entità distinte ma sono la stessa cosa (riporto sempre da un documento precedente): "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" Magari ho frainteso cosa volevi dire, è stata una giornata pazzesca e sono un po' cotto... Poi non vedo il problema del traffico tra CPU e GPU visto che il JIT è nel driver e fino a che non ha finito la GPU non lavora (almeno a quello che sta lavorando il JIT in compilazione). Magari sta eseguendo un altro shader, ma ritengo sia difficile in quanto è buona norma in qualsiasi gioco/applicazione compilare tutti gli shader prima di qualsivoglia operazione di rendering Quote:
Ma la sostituzione è una cosa che non implica nessuna analisi che non si possa fare a compile-time, per cui la si fa li, dal compilatore nel driver. Quote:
Quote:
|
||||||
|
|
|
|
#8559 | |||||||||||||
|
Senior Member
Iscritto dal: Mar 2001
Messaggi: 5390
|
Quote:
Inoltre, tutti i documenti linkati hanno parlato di ottimizzazioni a valle del compilatore JIT (la certezaz è che lo si fa con cuda e con hlsl; tu sostieni che ciò non avvenga in opengl e io sono convinto del contrario e, comunque, la cosa risulta del tutto irrilevante, visto che si parla di giochi e, quindi, quasi esclusivamente, di DirectX). In quanto alle ottimizzazioni in questione, è chiaro che quando nVidia, parlando di cuda, dice: un buon ottimizzatore già lo avevamo (OCG) intende dire che questo ottimizzatore esisteva già prima di cuda ed era usato in altri ambiti. E la cosa non mi stupisce: ho un ottimizzatore che funziona bene per le mie architetture, l'unica cosa di cui mi devo preoccupare è di migliorare il più possibile la sua portabilità in modo da poterlo usare in tutti gli ambiti. Questo OCG agisce su codice binario e fa preephole optimization. Quote:
Quote:
Quote:
Quote:
Ok, torniamo seri (i complimenti sono sentiti, però). Quote:
Per risolvere il problema tu proponi un'ottimizzazione, di fatto, at compile time che nVidia (ma non solo lei) non gradisce, che mal si adatta ad un'architettura superscalare (che necessità di un compilatore dinamico per poter meglio ottimizzare) e che comporta un notevole dispendio di risorse. Inoltre, ripeto, la stessa nVidia parla di ottimizzazini JIT e non at compile time. Quote:
Quote:
Quote:
Quote:
se, poi, parliamo di compile time, allora è un altro paio di maniche (ma nVidia dice JIT e un'architettura superscalare ha bisogno di compilazione dinamica). Quote:
Quote:
Quote:
invece io ritengo, per quanto esposto, che la sostituzione, ammesso che sia possibile e che si farà, avverrà sulla gpu. E mi pare che siamo di nuovo ad un punto morto e, poichè ho un avita sociale, un lavoro e un articolo da scrivere (tranquilli non è su fermi, anche se ci sarebbe materiale per una serie completa degna di beautiful Ultima modifica di yossarian : 01-12-2009 alle 10:48. |
|||||||||||||
|
|
|
|
#8560 | |
|
Bannato
Iscritto dal: Apr 2009
Messaggi: 1323
|
Quote:
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:11.












-SO: Win8 Pro x64-Mouse: Razer Mamba-Cuffie: Sharkoon X-Tatic 5.1 Digital-Gaming: G13-G25-Rumble Pad 2, Xbox360 controller








