Je sais que OpenCL donne le contrôle de l’architecture de la mémoire du GPU et permet donc une meilleure optimisation, mais, mis à part cela, pouvons-nous utiliser Compute Shaders pour les opérations vectorielles (addition, multiplication, inversion, etc.)?
Réponse
Trop de publicités?Contrairement aux autres OpenGL shader types, compute shaders ne sont pas directement liées à l'informatique graphique et de fournir un beaucoup plus directe d'abstraction du matériel sous-jacent, semblable à CUDA et OpenCL. Il fournit personnalisable groupe de travail de la taille, de la mémoire partagée, les échanges intra-groupe de la synchronisation et de toutes ces choses connu et aimé de CUDA et OpenCL.
Les principales différences sont essentiellement:
- Il utilise GLSL au lieu de OpenCL C. bien qu'il n'y a pas une énorme différence entre ces langages de programmation, vous pouvez toutefois utiliser tous les graphiques GLSL fonctions non disponibles pour OpenCL, comme les types de texture (par exemple cube map tableaux), filtrage avancé (par exemple, mipmapping, bon Ok, vous aurez probablement besoin de calculer le mip-niveau vous-même), et peu de commodité des choses comme les matrices 4x4 ou fonctions géométriques.
- C'est un OpenGL shader programme comme n'importe quel autre shader GLSL. Cela signifie accéder à OpenGL de données (comme les tampons, des textures, des images) est trivial, alors que l'interfaçage entre OpenGL et OpenCL/CUDA peut s'avérer fastidieuse, avec possibilité de synchronisation manuelle effort de votre côté. De la même manière à l'intégrer dans un OpenGL flux de travail est aussi trivial, lors du paramétrage de la prise en charge d'OpenCL est un livre sur son propre, de ne pas parler de son intégration dans un pipeline graphique.
Donc, ce que cela revient à dire, que les compute shaders sont vraiment prévu pour une utilisation dans les applications OpenGL, bien que présentant l'habitude (OpenCL/CUDA-like) de calcul de l'approche de la programmation sur GPU, contrairement aux graphiques-l'approche de l'autre shader étapes, qui n'ont pas le calcul de flexibilité de la prise en charge d'OpenCL/CUDA (tout en offrant d'autres avantages, bien sûr). Donc, faire des tâches de calcul est plus souple, direct et facile, que ce soit en serrant dans d'autres shader étapes pas de portée générale, de l'informatique ou de l'introduction d'un supplément de cadre informatique vous avez à synchroniser avec.
Compute shaders devrait être capable de faire à peu près tout est réalisable avec OpenCL avec la même flexibilité et de contrôle sur les ressources matérielles et avec la même approche de la programmation. Donc, si vous avez un bon GPU-adapté de l'algorithme (qui serait bien travailler avec CUDA ou OpenCL) pour la tâche que vous voulez faire, alors oui, vous pouvez aussi le faire avec des compute shaders, trop. Mais ça ne ferait pas beaucoup de sens d'utiliser OpenGL (qui l'est toujours et le sera probablement toujours être un cadre d'ordinateur en temps réel, des graphiques en premier lieu), seulement à cause des compute shaders. Pour cela, vous pouvez simplement utiliser OpenCL ou CUDA. La force réelle des compute shaders entre en jeu lors du mélange de graphiques et de capacités de calcul.