2017-08-15 85 views
0

我的GPU是NVIDIA GeForce GT440,其計算能力版本是2.x. NVIDIA的官方CUDA_C_Programming_Guide指出OpenGL和CUDA之間的不一致最大線程數

限制1.每塊= 1024
限制2.每多居民的最大線程數的最大線程數= 1536

但是,有兩個OpenGL的計算機着色器實現限制是

極限3. GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS = 1536

我的問題是
1.爲什麼限制1不等於限制2和限制3?
2.真正的線程/塊(invocations/workgroup)應該是1024還是1536?

+0

Isnt「2」是多個正在運行的線程並依賴於硬件(因此它可能會同時計算兩個塊)? –

+1

CUDA中的每個塊的實際線程數爲1024。它是1536號碼的單獨硬件限制。多處理器可以有多個「駐留」在其上的塊,因此多處理器可以支持更多的線程,而不僅僅是來自單個塊的那些線程。似乎很明顯,GL限制可能與限制2相關聯。限制1和限制2之間的差異在SO上的許多問題以及Web上的許多地方都有討論,如果您願意查看。 –

+0

CUDA中每個塊的最大線程數爲1024.但是,OpenGL中的最大計算工作組調用是1536.它們看起來不同。但我認爲CUDA ** block **相當於OpenGL ** Work Group **,兩個最大值應該相同。我對嗎? –

回答

2

爲什麼限制1不等於限制2和限制3?

因爲它不是一回事。塊是CUDA中的邏輯構造,並且被限制爲最多1024個線程。但是多處理器可以同時運行多個模塊(硬件情況下最多可以運行8個模塊)。所以一個SM可以在你的硬件中有多達1536個併發線程,但並不是所有這些線程都可以來自一個單獨的塊。

真正的線程/塊應該是1024還是1536?

1024由於上述所有原因。您可以看到所有支持硬件的功能的完整摘要here

+0

我認爲CUDA ** block **相當於OpenGL **工作組**。這樣對嗎? –