Quelle est la différence entre OpenCL et le shader de calcul D'OpenGL?
Je sais Qu'OpenCL donne le contrôle de l'architecture mémoire du GPU et permet ainsi une meilleure optimisation, mais, en laissant de côté, pouvons-nous utiliser des Shaders de calcul pour les opérations vectorielles (addition, multiplication, inversion, etc.)?
2 réponses
Contrairement aux autres types de shaders OpenGL, les shaders compute ne sont pas directement liés à l'infographie et fournissent une abstraction beaucoup plus directe du matériel sous-jacent, similaire à CUDA et OpenCL. Il fournit la taille du groupe de travail personnalisable, la mémoire partagée, la synchronisation intra-groupe et toutes ces choses connues et aimées de CUDA et OpenCL.
Les principales différences sont essentiellement:
- il utilise GLSL au lieu D'OpenCL C. Bien Qu'il n'y ait pas une si grande différence après ces langages de programmation, vous pouvez cependant utiliser toutes les fonctions GLSL liées aux graphiques non disponibles pour OpenCL, comme les types de texture avancés (par exemple, les tableaux de cartes de cube), le filtrage avancé (par exemple, mipmapping, Eh bien, vous aurez probablement besoin de calculer le niveau mip vous-même), et peu de choses pratiques comme les matrices 4x4
- c'est un programme de shader OpenGL comme tout autre shader GLSL. Cela signifie que l'accès aux données OpenGL (comme les tampons, les textures, les images) est juste trivial, alors que l'interface entre OpenGL et OpenCL / CUDA peut devenir fastidieuse, avec un effort de synchronisation manuelle possible de votre côté. De la même manière, l'intégrer dans un workflow OpenGL existant est également trivial, tandis que la mise en place D'OpenCL est un livre en soi, pour ne pas parler de son intégration dans un pipeline graphique existant.
Donc, ce que cela signifie, c'est que les shaders de calcul sont vraiment destinés à être utilisés dans les applications OpenGL existantes, bien que présentant l'habituel (OpenCL/Cuda-like) approche de calcul de la programmation GPU, contrairement à l'approche graphique des autres étapes de shader, qui n'avait pas la flexibilité de calcul D'OpenCL / CUDA (tout en offrant d'autres avantages, bien sûr). Faire des tâches de calcul est donc plus flexible, direct et facile que de les presser dans d'autres étapes de shader non destinées à l'informatique générale ou d'introduire un framework de calcul supplémentaire avec lequel vous devez vous synchroniser.
Compute shaders devrait être capable de faire presque tout ce qui est réalisable avec OpenCL avec la même flexibilité et le même contrôle sur les ressources matérielles et avec la même approche de programmation. Donc, si vous avez un bon algorithme adapté au GPU (qui fonctionnerait bien avec CUDA ou OpenCL) pour la tâche que vous voulez faire, alors oui, vous pouvez également le faire avec des shaders de calcul. Mais cela n'aurait pas beaucoup de sens d'utiliser OpenGL (qui est toujours et sera probablement toujours un framework pour l'infographie en temps réel en premier lieu) uniquement à cause du calcul Shader. Pour cela, vous pouvez simplement utiliser OpenCL ou CUDA. La véritable force de compute shaders entre en jeu lors du mélange de graphiques et de capacités de calcul.
Regardez ici pour une autre perspective. Résumé:
Oui, OpenCL existait déjà, mais il cible les applications lourdes( pensez CFD, FEM, etc), et il est beaucoup plus universel {[6] } Qu'OpenGL (pensez au-delà des GPU... L'architecture Xeon Phi d'Intel prend en charge > 50 cœurs x86).
De plus, partager des tampons entre OpenGL / CUDA et OpenCL n'est pas amusant.