So OpenCL dà il controllo di architettura di memoria della GPU e permette quindi una migliore ottimizzazione, ma, lasciando questa parte, possiamo usare Compute Shaders per operazioni vettoriali (addizione, moltiplicazione, inversione, ecc)?Qual è la differenza tra OpenCL e OpenGL?
risposta
Contrariamente agli altri tipi di shader OpenGL, gli shader di calcolo non sono direttamente correlati alla grafica del computer e forniscono un'astrazione molto più diretta dell'hardware sottostante, simile a CUDA e OpenCL. Fornisce dimensioni del gruppo di lavoro personalizzabili, memoria condivisa, sincronizzazione all'interno del gruppo e tutte le cose conosciute e amate da CUDA e OpenCL.
Le principali differenze sono essenzialmente:
- Esso utilizza GLSL invece di OpenCL C. Anche se non v'è una grande differenza così bewteen quei linguaggi di programmazione, è possibile comunque utilizzare tutte le funzioni GLSL relativi alla grafica non a disposizione di OpenCL, come tipi avanzati di texture (ad esempio cubetti mappa), filtraggio avanzato (ad esempio mipmapping, ben Ok, si avrà probabilmente bisogno di calcolare il livello di MIP-te), e piccole cose di convenienza come matrici 4x4 o funzioni geometriche.
- Si tratta di un programma OpenGL shader di come qualsiasi altro dello shader GLSL. Ciò significa che l'accesso ai dati OpenGL (come tamponi, texture, immagini) è solo banale, mentre interfacciamento tra OpenGL e OpenCL/CUDA può ottenere noioso, con possibilità di intervento manuale sincronizzazione dal lato. Allo stesso modo, l'integrazione in un flusso di lavoro OpenGL esistente è anche banale, mentre l'impostazione di OpenCL è un libro a sé stante, per non parlare della sua integrazione in una pipeline grafica esistente.
Così che cosa questo si riduce a è che shaders calcolo siano veramente destinati per l'utilizzo in applicazioni OpenGL esistenti, anche se esibendo il solito (OpenCL/CUDA-like) calcolare approccio alla programmazione GPU, in contrasto con la grafica -approach delle altre fasi di shader, che non avevano la flessibilità di calcolo di OpenCL/CUDA (pur offrendo altri vantaggi, ovviamente). In questo modo, le attività di elaborazione sono più flessibili, dirette e facili rispetto a comprimerle in altri stadi dello shader non destinati all'elaborazione generale o all'introduzione di un ulteriore framework di elaborazione con cui sincronizzarsi.
Gli shader di elaborazione devono essere in grado di eseguire praticamente qualsiasi operazione con OpenCL con la stessa flessibilità e controllo delle risorse hardware e con lo stesso approccio di programmazione. Quindi se hai un buon algoritmo adatto alla GPU (che funzionerebbe bene con CUDA o OpenCL) per l'attività che vuoi fare, allora sì, puoi farlo anche con shader di calcolo. Ma non avrebbe molto senso usare OpenGL (che è ancora e sarà probabilmente sempre un framework per la grafica computerizzata in tempo reale in primo luogo) solo per via degli shader computazionali. Per questo è sufficiente utilizzare OpenCL o CUDA. La vera forza degli shader computazionali entra in gioco quando si mescolano funzionalità grafiche e di elaborazione.
Cercare here per un altro punto di vista. Riassumendo:
Sì, OpenCL già esisteva, ma si rivolge applicazioni pesanti (pensano CFD, FEM, ecc), ed è molto più universale di OpenGL (pensare al di là GPU ... l'architettura Xeon Phi di Intel supporta> 50 core x86).
Inoltre, la condivisione di buffer tra OpenGL/CUDA e OpenCL non è divertente.
In pratica, una GPU di fascia alta è >> 40 volte più capace di una CPU di fascia alta per risolvere un problema parallelizzabile, nel calcolo a matrice, per essere più specifici. Per ora non mi interessa la capacità della CPU. Quindi, per tornare alla mia domanda, possiamo dire Matrix Inversion con gli shader computazionali? E quanto lavoro è necessario rispetto a OpenCL? – Maiss
AFAIK, esistono algoritmi paralleli solo per l'inversione delle matrici * sparse * e questi sono sufficientemente complessi che probabilmente vorrai scriverli in C99 (linguaggio del kernel di OpenCL). –
È possibile eseguire molti tipi di computazione negli shader di elaborazione di OpenGL che sarebbero simili a OpenCL, con la principale differenza che OpenGL utilizza _GLSL_ (The OpenGL Shading Language) come linguaggio del kernel, rispetto al dialetto C99 di OpenCL. Non c'è alcuna limitazione per fare calcoli a matrice (ad esempio, solo lavorando con matrici sparse), e in casi particolari, potresti essere in grado di utilizzare algoritmi a matrice basati su blocchi che sfruttano alcune delle operazioni di matrice nativa di GLSL. – radical7
- 1. Qual è la differenza tra opengl e GLSL?
- 2. Qual è la differenza tra = e: =
- 3. Qual è la differenza tra Verilog! e ~?
- 4. Qual è la differenza tra? : e ||
- 5. qual è la differenza tra [[], []] e [[]] * 2
- 6. Qual è la differenza tra $ e $$?
- 7. Qual è la differenza tra ("") e (null)
- 8. Qual è la differenza tra dict() e {}?
- 9. Qual è la differenza tra " " e ""?
- 10. Qual è la differenza tra {0} e ""?
- 11. Qual è la differenza tra `##` e `hashCode`?
- 12. Qual è la differenza tra {0} e +?
- 13. Qual è la differenza tra .ToString() e + ""
- 14. qual è la differenza tra:.! e: r !?
- 15. Qual è la differenza tra QWindow e QWidget
- 16. Qual è la differenza tra FreeGLUT vs GLFW?
- 17. Qual è la differenza tra "è Nessuno" e "== Nessuno"
- 18. Unix: Qual è la differenza tra la fonte e l'esportazione?
- 19. Qual è la differenza tra il callback e la promessa
- 20. Qual è la differenza tra la sezione .got e .got.plt?
- 21. Qual è la differenza tra la lista() e []
- 22. Qual è la differenza tra GHC e la piattaforma Haskell?
- 23. Qual è la differenza tra sé e la finestra?
- 24. Qual è la differenza tra la cartella vim72 e vimfiles?
- 25. Qual è la differenza tra la serratura e RLock
- 26. Qual è la differenza tra la funzione() {}() e function() {}()
- 27. Qual è la differenza tra la crittografia SHA e AES?
- 28. Qual è la differenza tra la [OptionalField] e [NonSerialized]
- 29. Qual è la differenza tra Chisel e Lava e CLaSH?
- 30. Qual è la differenza tra queste funzioni
Non dimenticare le garanzie di precisione che OpenCL fornisce che GLSL esplicitamente * non *. –
@NicolBolas Intendi per operazioni e funzioni aritmetiche? –
Sì. La precisione a virgola mobile è molto diversa tra i due. –