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:
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.