2012-08-31 20 views
2

我正在研究CUDA編程結構,學習之後我感受到的是:在創建塊和線程之後,將每個塊分配給每個流式多處理器(例如,我正在使用具有14個流式多處理器的GForce 560Ti,因此一次可以將14個塊分配給所有流式多處理器)。但正如我經歷了幾個網上的材料,如這一個:它已經提到,一些塊可以同時在一個多處理器上運行併發塊如何運行單個GPU流式多處理器?

http://moss.csc.ncsu.edu/~mueller/cluster/nvidia/GPU+CUDA.pdf

。我基本上對流式多處理器上線程和塊的執行非常困惑。我知道塊的分配和線程的執行是絕對任意的,但我想如何實際地發生塊和線程的映射,以便可以發生併發執行。

回答

3

流式多處理器(SM)可以一次執行多個塊,使用硬件多線程,類似於Hypter-Threading的過程。

CUDA C Programming Guide描述此如在第4.2節如下:

4.2硬件多線程

用於由多處理器處理的每個經線 執行上下文(程序計數器,寄存器等)被保持芯片在整個 的生存期。因此,從一個執行上下文 切換到另一執行上下文沒有成本,並且在每個指令發佈時間,調度器選擇具有線程的warp,以準備執行其下一個 指令(warp的活動線程)併發出 指令給那些線程。

特別是,每個多處理器都有一組32位寄存器,其中 在warp中分區,以及在線程塊之間分區的並行數據緩存或共享內存。

塊和經紗可駐留並且對於給定的內核依賴於 量寄存器和共享存儲器內核使用和 量寄存器以及共享存儲器中可用上的多處理器進行處理 在一起的數量多處理器。 每個多處理器駐留塊的最大數量和最大駐留數量也是最大的。這些限制以及多處理器 上可用的寄存器和共享存儲器的數量是設備的計算能力的函數,並且在附錄F中給出了 。如果沒有足夠的寄存器或每個多處理器可用的共享存儲器 來處理至少有一個塊,內核 將無法​​啓動。

+0

我已經在嘗試回答OP時稍微閱讀了這部分內容,但是我沒有發現它令人信服。特別是,如果你有8塊,每塊有4個線程會發生什麼。它們能形成一個扭曲,並行執行嗎? – Tudor

+0

@Tudor:不,warp只包含同一塊的線程。 – Pedro

+1

每個塊將有1個warp。每個warp將有4個活動線程和28個禁用線程。 –

相關問題