2016-09-28 2 views
1

In CUDA werden Threads mit den IDs 0-31, 32-63, ... immer im selben Warp ausgeführt. Ich kann jedoch keine ähnliche Aussage in OpenGL-Spezifikation oder Wiki finden. Bietet OpenGL die gleiche Garantie oder kann man davon ausgehen, dass dies für die meisten OpenGL-Implementierungen der Fall ist?Wie berechnet OpenGL Shader-Threads zu Warps?

Antwort

1

OpenGL-Spezifikation sagt nichts über Verwerfungen, die nVidia Detail spezifische Implementierung sind.

In OpenGL parlance die Shader Invokationen in Arbeitsgruppen unterteilt sind. Die Anzahl der Shaderaufrufe in einer Arbeitsgruppe wird durch die Deklaration im Shader angegeben. Die Anzahl der Arbeitsgruppen wird im Aufruf glDispatchCompute angegeben. Die Art, wie sie in CUDA-Warps abgebildet werden, ist ein Implementierungsdetail , das für Sie als Benutzer transparent ist.

+0

Solange die Leistung betrifft, so ist dies nicht wirklich transparent. Eine Änderung der Warp-Aufteilung kann bis zu 32x langsamen Shared Memory-Zugriff verursachen (auf NVIDIA- und AMD-Hardware) –

+0

@HuazuoGao: Ja, könnte es. Aber die OpenGL-Spezifikation lässt Sie davon nichts wissen. Die Spezifikation ist eine * Abstraktion *. –

+0

@HuazuoGao: Stimmt, aber es ist vernünftig anzunehmen, dass die Implementierung die Hardwareressourcen auf die effizienteste Weise zuordnen wird. Beachten Sie, dass Sie die genaue Zuordnung von Thread-ID und ↔ Warp nicht wirklich interessieren, nur dass sie nicht verschwendet werden. – ybungalobill