2012-09-17 46 views
3

我是cuda編程的新手,並且正在閱讀「編程大規模並行處理器 - 一本實用手冊」一書,內容是有關128個SP(16個SM,每個帶有8個SP)的G80芯片。辦法」。 英特爾CPU和G80芯片之間有一個比較。 英特爾CPU支持2至4個線程,具體取決於機器型號,每個內核。由於G80芯片支持每個SM 768個線程,總共可以爲該芯片提供12000個線程。關於CUDA每個SM執行線程的說明

我的問題是,G80芯片可以同時執行768個線程? 如果不是同時那麼英特爾CPU的含義是什麼,每個內核支持2到4個線程?我們總是可以在OS安排的Intel CPU上運行多個線程/進程。

+1

[This answer may also help。](http://stackoverflow.com/questions/6490572/cuda-how-many-concurrent-threads-in-total) – harrism

回答

4

G80同時爲每個SM保留768個線程的上下文並交錯執行。這是CPU和GPU之間的關鍵區別。 GPU是深度多線程處理器通過來自其他線程的計算來隱藏某些線程的內存訪問。執行線程的延遲要高得多,以致CPU和GPU針對線程吞吐量而不是線程延遲進行了優化。相比之下,CPU使用亂序推測執行來減少一個線程的執行延遲。 GPU有幾種技術用於減少線程調度開銷。例如,GPU將線程分組在較粗糙的可調度元素中,稱爲波陣面的warps,並通過SIMD執行warp的線程。 GPU線程完全相同,因此適用於SIMD模型。在編程人員眼中,線程以MIMD方式執行,並且它們被分組在線程塊中以減少通信開銷。

CPU內核中使用的線程用於通過動態調度來填充不同的執行單元。 CPU線程不一定是相同的類型。這意味着一旦線程忙於浮點,其他線程可能會發現ALU空閒。因此,這些線程的執行可以同時完成。維護每個核心的多個線程以有效地填充不同的執行單元以防止空閒單元。然而,就動力和能源消耗而言,動態調度是昂貴的。因此,製造商每個CPU核心使用幾個線程。

回答第二部分問題:GPU中的線程由硬件調度(每個SM warp調度程序),操作系統甚至驅動程序都不會影響調度。

+2

這是迄今爲止最好的答案,一對夫婦的缺點。您應該提到GPU線程(和CPU超線程)沒有昂貴的上下文切換,因爲所有駐留線程都將其資源(寄存器數據)同時駐留在芯片上。另外,你的聲明「執行線程的延遲比CPU高得多」是誤導性的。你的意思是一些CPU指令由於更大/更深的高速緩存,無序執行,分支預測等而具有較低的等待時間。 – harrism

+0

@harrism:你的評論很好地補充了答案。 – ahmad

+0

謝謝ahmad,你的回答清除了我的疑惑。 – zap85

1

據我所知,768是SM中的最大號碼resident threads。線程在由32個線程組成的warp中執行。因此,在一個SM中,所有768個線程不會同時執行,但是它們將一次安排在32個線程中,即一次執行一個warp。

1

CPU上的類似技術被稱爲「同時多線程」(SMT),或英特爾營銷演講中的超線程技術。它通常允許兩個,在一些CPU上,四個線程由CPU本身在硬件中調度。

這不同於這樣的事實,即操作系統可能會在軟件中安排更多的線程。