La mia attuale comprensione è che tutto ciò che viene fatto in un file shader viene fatto sulla GPU e tutto ciò che viene fatto nel mio codice (Java, nel mio caso) viene fatto sulla CPU.
Questa è una descrizione accurata?
La mia attuale comprensione è che tutto ciò che viene fatto in un file shader viene fatto sulla GPU e tutto ciò che viene fatto nel mio codice (Java, nel mio caso) viene fatto sulla CPU.
Questa è una descrizione accurata?
Risposte:
Questo è il senso.
In linea di principio, la piattaforma potrebbe, plausibilmente, fare tutto ciò che vuole. Si potrebbe immaginare un sistema operativo avanzato che esegua la traduzione just-in-time del codice compilato da, diciamo, x86 al codice GPU. Allo stesso modo, i driver OpenGL potrebbero funzionare come vogliono sulla CPU host.
Ma davvero, quello che hai appena descritto, è ciò che accade.
Generalmente sì. Java viene utilizzato per scrivere programmi in esecuzione sulla CPU. I linguaggi shader (cg, hlsl, et al) sono usati per scrivere programmi che girano sulla GPU.
Verrà utilizzata un'eccezione alla regola API di terze parti che possono colmare il divario.
David Van Brink ha risposto alla tua domanda in generale.
Ma come dice, il driver OpenGL potrebbe eseguire roba sulla CPU, e in realtà succede molto. Soprattutto con i contesti di compatibilità, in cui alcune strane funzioni legacy non possono essere implementate sulle schede grafiche. Richiedono l'emulazione del software. Ad esempio, ho sentito prima che la punteggiatura viene eseguita sulla CPU. Puoi aspettarti anche sorprese con la raccolta.
Queste sorprese possono verificarsi ancora di più su MacOS usando i contesti 2.1, perché Apple ha unificato abbastanza bene la vista di OpenGL attraverso la loro gamma hardware, e alcuni hardware più piccoli mancano di alcune cose che devono essere emulate. Si arriva al punto di poter effettivamente eseguire la specifica INTERA OpenGL 2.1 completamente sulla CPU, se il codice di creazione del contesto specifica esplicitamente un dispositivo software.
Al contrario, il codice che viene eseguito tramite librerie di elaborazione come vexcl o boost compute o AMP di microsoft o nVidia spinta, PUO 'essere eseguito sulla GPU o sulla CPU a seconda dei flag di configurazione dell'API.
E per il tocco finale, all'interno della CPU hai anche un'architettura DSP con la parte che chiamiamo SIMD. Il compilatore ispc di Intel fornisce assistenza per la generazione di codice "garantito" per l'esecuzione su corsie SIMD con un sacco di diagnostica delle prestazioni in fase di compilazione per aiutarti a trarne il massimo. Aggiungi OpenMP a questo e puoi ottenere SIMD multithread, che si avvicina ai concetti di GPU. Se hai una CPU di fascia alta e una GPU di fascia bassa, questo può effettivamente essere più performante.
http://ispc.github.io/