Compute Shader vs CUDA / OpenCL

8

Então, eu aprendi recentemente sobre o Compute Shader e parece que tive a mesma idéia que a programação paralela que você faria com CUDA ou OpenCL, mas no pipeline do shader.

Se eu quiser desenhar um milhão de cubos em uma cena, devo usar um método sobre o outro ou ambos. Se ambos, como você divide isso, a GPU não está tentando calcular paralelamente o shader e outro processo ao mesmo tempo

FrickeFresh
fonte
2
Por que você deseja usar o GPGPU para desenhar milhões de cubos em primeiro lugar?
285 Derag
3
Os sombreadores de computação são usados ​​para cargas de trabalho de computação, não para renderização. A regra geral é que, se você precisar de rasterização (ou seja, processamento da geometria triangular em pixels), deverá usar o pipeline de renderização; se você simplesmente precisar processar uma grande quantidade de dados, deverá usar a computação. Também estou interessado em argumentos sólidos a favor e contra shaders de computação e CUDA / OpenCL (com interoperabilidade da API gráfica). Um dos quais ouvi falar é o melhor enfileiramento de cargas de trabalho de computação com a API específica de computação, mas eu gostaria de saber mais (por exemplo, como a computação assíncrona entra em cena).
IneQuation
@Derag Apenas tentando alimentar o meu fetiche cubo o mais rápido possível
FrickeFresh
Se você quer desenhar um milhão de cubos, o uso de raios-marcha :)
russ

Respostas:

7

Hoje, não é correto pensar em sombreadores de computação como "no pipeline de sombreador" no mesmo sentido em que os sombreadores de vértice e fragmento estão literalmente conectados a um pipeline. Os sombreadores de computação não estão "conectados" a nada atualmente, não podem conduzir a rasterização ou consumir diretamente as saídas da rasterização.

O que ele permite fazer, no entanto, é consumir e produzir recursos de memória também usados ​​por chamadas de forma relativamente eficiente. O OpenCL torna isso bastante difícil (consulte, por exemplo, https://software.intel.com/en-us/articles/opencl-and-opengl-interoperability-tutorial ). Isso permite integrar com eficiência as passagens de computação no seu renderizador, mas ele não é integrado ao pipeline de renderização

GroverManheim
fonte