Je sais qu'OpenCL donne le contrôle de l'architecture de mémoire du GPU et permet ainsi une meilleure optimisation, mais, en laissant cela de côté, pouvons-nous utiliser des Shaders de calcul pour les opérations vectorielles (addition, multiplication, inversion, etc.)?
Contrairement aux autres types de shaders 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 toutes ces choses connues et aimées de CUDA et OpenCL.
Les principales différences sont essentiellement:
Donc, cela revient à dire que les shaders de calcul sont vraiment destinés à être utilisés dans les applications OpenGL existantes, bien qu'ils présentent l'approche de calcul habituelle (comme OpenCL/CUDA) pour la programmation GPU, contrairement à l'approche graphique de l'autre shader étapes, qui n'avaient pas la flexibilité de calcul d'OpenCL/CUDA (tout en offrant d'autres avantages, bien sûr). Ainsi, effectuer des tâches de calcul est plus flexible, direct et facile que de les compresser dans d'autres étapes de shader non destinées à l'informatique générale ou d'introduire un cadre informatique supplémentaire avec lequel vous devez vous synchroniser.
Les shaders de calcul devraient être capables 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 souhaitez effectuer, 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 cadre pour les graphiques informatiques en temps réel en premier lieu) uniquement à cause des shaders de calcul. Pour cela, vous pouvez simplement utiliser OpenCL ou CUDA. La véritable force des shaders de calcul entre en jeu lors du mélange de graphiques et de capacités de calcul.
Regardez ici pour une autre perspective. Résumant:
Oui, OpenCL existait déjà, mais il cible les applications lourdes (pensez CFD, FEM, etc.), et il est beaucoup plus universel qu'OpenGL (pensez au-delà des GPU) ... L'architecture Intel Xeon Phi prend en charge> 50 cœurs x86).
De plus, le partage de tampons entre OpenGL/CUDA et OpenCL n'est pas amusant.