Quelle est la différence entre OpenCL et 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 cela de côté, pouvons-nous utiliser Compute Shaders pour les opérations vectorielles (addition, multiplication, inversion, etc.)?

Contrairement aux autres types de shader OpenGL, les shaders de calcul ne sont pas directement liés aux graphiques informatiques et fournissent une abstraction beaucoup plus directe du matériel sous-jacent, similaire à CUDA et OpenCL. Il fournit une taille de groupe de travail personnalisable, une mémoire partagée, une synchronisation intra-groupe et tous les éléments connus et appréciés par CUDA et OpenCL.

Les principales différences sont essentiellement les suivantes:

  • Il utilise GLSL au lieu d’OpenCL C. Bien qu’il n’y ait pas une si grande différence entre ces langages de programmation, vous pouvez toutefois utiliser toutes les fonctions GLSL liées aux graphiques non disponibles pour OpenCL, telles que les types de texture avancés Filtrage (par exemple, mipmapping, bien Ok, vous devrez probablement calculer vous-même le niveau MIP), et peu de choses pratiques comme les masortingces 4×4 ou les fonctions géomésortingques.
  • C’est un programme de shake OpenGL comme tout autre shader GLSL. Cela signifie que l’access aux données OpenGL (comme les tampons, les textures, les images) est simplement sortingvial, tandis que l’interfaçage entre OpenGL et OpenCL / CUDA peut s’avérer fastidieux, avec un effort de synchronisation manuel de votre part. De la même façon, l’intégrer dans un workflow OpenGL existant est également sortingvial, alors que la configuration d’OpenCL est un livre en soi, sans parler de son intégration dans un pipeline graphique existant.

Ainsi, les shaders de calcul sont vraiment destinés à être utilisés dans les applications OpenGL existantes, bien qu’ils présentent l’approche informatique habituelle (semblable à OpenCL / CUDA) à la programmation GPU, contrairement à l’approche graphique de l’autre shader. étapes, qui n’avaient pas la souplesse de calcul d’OpenCL / CUDA (tout en offrant bien sûr d’autres avantages). Ainsi, les tâches de calcul sont plus flexibles, directes et faciles que de les écraser dans d’autres étapes de shader non destinées à l’informatique générale ni d’introduire une infrastructure informatique supplémentaire à synchroniser.

Les éditeurs de calcul devraient pouvoir 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é à GPU (qui fonctionnerait bien avec CUDA ou OpenCL) pour la tâche que vous voulez faire, alors oui, vous pouvez aussi le faire avec les shaders de calcul. Mais cela n’aurait pas beaucoup de sens d’utiliser OpenGL (qui est et sera toujours toujours un framework pour l’infographie en temps réel en premier lieu) uniquement à cause des shaders de calcul. Pour cela, vous pouvez simplement utiliser OpenCL ou CUDA. La force réelle des compute shaders entre en jeu lors du mixage des capacités graphiques et 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 qu’OpenGL (pensez aux GPU… l’architecture Xeon Phi d’Intel prend en charge> 50 cœurs x86).

En outre, le partage de tampons entre OpenGL / CUDA et OpenCL n’est pas amusant.