Compute Shader vs CUDA / OpenCL

8

Je viens donc d'apprendre récemment sur le Compute Shader et il ressort de ce que j'ai repris la même idée que la programmation parallèle que vous feriez avec CUDA ou OpenCL, mais dans le pipeline de shader.

Si je veux dessiner un million de cubes dans une scène, dois-je utiliser une méthode plutôt que l'autre ou les deux? Si les deux comment divisez-vous cela pour que le GPU n'essaie pas de calculer simultanément le shader et un autre processus en même temps

FrickeFresh
la source
2
Pourquoi voulez-vous utiliser GPGPU pour dessiner des millions de cubes en premier lieu?
Derag
3
Les shaders de calcul sont utilisés pour calculer les charges de travail, pas pour le rendu. La règle générale est que si vous avez besoin d'une pixellisation (c'est-à-dire le traitement d'une géométrie triangulée en pixels), vous devez utiliser le pipeline de rendu; si vous avez simplement besoin de traiter une grande quantité de données, vous devez utiliser le calcul. Je m'intéresse également aux arguments solides pour et contre les shaders de calcul et CUDA / OpenCL (avec interopérabilité avec l'API graphique). J'ai entendu parler d'une meilleure mise en file d'attente des charges de travail de calcul avec l'API spécifique au calcul, mais j'aimerais en savoir plus (c.-à-d. Comment le calcul asynchrone apparaît-il dans l'image).
IneQuation
@Derag J'essaie juste de nourrir mon fétiche de cube aussi vite que possible
FrickeFresh
Si vous voulez dessiner un million de cubes, utilisez le ray-marching :)
russ

Réponses:

7

Aujourd'hui, il n'est pas tout à fait correct de penser que les shaders de calcul sont "dans le pipeline de shaders" dans le même sens que vos vertex et fragments shaders sont littéralement connectés à un pipeline. Les shaders de calcul ne sont pas "connectés" à quoi que ce soit actuellement, ne peuvent pas piloter la pixellisation ou consommer directement les sorties de la pixellisation.

Ce qu'il vous permet de faire, cependant, est de consommer et de produire des ressources mémoire également utilisées par les appels de tirage d'une manière relativement efficace. OpenCL rend cela plutôt difficile (voir par exemple https://software.intel.com/en-us/articles/opencl-and-opengl-interoperability-tutorial ). Cela vous permet d'intégrer efficacement les passes de calcul dans votre moteur de rendu, mais il n'est pas intégré dans le pipeline de rendu

GroverManheim
la source