Ma compréhension actuelle est que tout ce qui est fait dans un fichier shader est fait sur le GPU, et tout ce qui est fait dans mon code (Java, dans mon cas) est fait sur le CPU.
Est-ce une description précise?
Ma compréhension actuelle est que tout ce qui est fait dans un fichier shader est fait sur le GPU, et tout ce qui est fait dans mon code (Java, dans mon cas) est fait sur le CPU.
Est-ce une description précise?
Réponses:
Voilà l'essentiel.
En principe, la plate-forme pourrait, en théorie, faire ce qu'elle veut. On pourrait imaginer un système d'exploitation avancé effectuant la traduction juste à temps du code compilé de, disons, x86 en code GPU. De même, les pilotes OpenGL pourraient exécuter tout ce qu'ils veulent sur le CPU hôte.
Mais vraiment, ce que vous venez de décrire, c'est ce qui se passe.
Généralement, oui. Java est utilisé pour écrire des programmes qui s'exécutent sur le processeur. Les langages de shader (cg, hlsl, et al) sont utilisés pour écrire des programmes qui s'exécutent sur le GPU.
Une exception à la règle serait d'utiliser des API tierces qui peuvent combler l'écart.
david van brink a répondu à votre question en général.
Mais comme il le dit, le pilote OpenGL pourrait exécuter des trucs sur le CPU, et cela arrive souvent. Surtout avec les contextes de compatibilité, où certaines fonctions héritées étranges ne peuvent pas être implémentées sur les cartes graphiques. Ils nécessitent une émulation logicielle. Par exemple, j'ai entendu auparavant que le pointillé était exécuté sur le CPU. Vous pouvez également vous attendre à des surprises avec la cueillette.
Ces surprises peuvent se produire encore plus sur MacOS en utilisant des contextes 2.1, car Apple a unifié assez bien la vue d'OpenGL sur toute sa gamme de matériel, et certains matériels plus petits manquent de choses à émuler. Cela va jusqu'à être réellement possible d'exécuter la spécification ENTIÈRE OpenGL 2.1 entièrement sur CPU, si le code de création de contexte spécifie explicitement un périphérique logiciel.
Inversement, le code qui est exécuté via des bibliothèques informatiques comme vexcl ou boost compute, ou AMP de Microsoft, ou nVidia thrust, PEUT être exécuté sur le GPU ou le CPU en fonction des indicateurs de configuration de l'API.
Et pour la touche finale, à l'intérieur du CPU, vous avez également une architecture DSP avec la partie que nous appelons SIMD. Le compilateur ispc d'Intel fournit une aide à la génération de code qui est "assuré" pour s'exécuter sur des voies SIMD avec de nombreux diagnostics de performances au moment de la compilation pour vous aider à en tirer le meilleur parti. Ajoutez OpenMP à cela et vous pouvez obtenir un SIMD multithread, qui se rapproche des concepts de GPU. Si vous avez un processeur haut de gamme et un GPU bas de gamme, cela peut en fait être plus performant.
http://ispc.github.io/