2010-02-05 43 views
16

我在使用cuda的NVIDIA gpu架構中有一些麻煩。幫我理解cuda

請有人澄清這些信息: 8800 gpu有16個SM,每個8個SP。所以我們有128個SP。

我正在查看stanford的視頻演示文稿,它說每個SP都能夠正常運行96個線程。這是否意味着它(SP)可以同時運行96/32 = 3個經紗?此外,由於每個SP可以運行96個線程,並且每個SM中有8個SP。這是否意味着每個SM可以同時運行96 * 8 = 768個線程?但是如果每個SM可以一次運行一個Block,並且一個塊中的最大線程數爲512,那麼同時運行768個線程的目的是什麼,並且最多有512個線程?

更常見的問題是:塊,線程和warp如何分配給SM和SP?我讀過每一個SM都會得到一個單獨的塊來執行,而塊中的線程被分成warp(32個線程),並且SPs執行warp。

+1

希望我已經在我的回答中解釋了,但重要的一點是每個SM可以在任何給定時間執行多個塊。此外,數字96是一個紅色的鯡魚,它不需要擔心每個SP的線程,只需擔心每個SM的線程,並讓硬件處理更精細的細節。 – Tom 2010-02-06 16:21:14

回答

2

起初有點令人困惑,但它有助於瞭解每個SP的工作方式與4路SMT一樣 - 它通過4個線程循環,每個時鐘發出一條指令,每條指令有4個週期的延遲。這就是你如何在8個SP上運行每個warp的32個線程。

而不是通過所有其他的東西與經紗,塊,線程等,我會引用你到nVidia CUDA Forums,這種問題經常出現,並已有一些很好的解釋。

48

您應該查看NVIDIA網站上的webinars,您可以加入實時會話或查看預先錄製的會話。下面是一個簡要的概述,但我強烈建議您觀看網絡研討會,他們會真正幫助您,因爲您可以看到圖表並在同一時間進行解釋。

當您執行在GPU上是一個函數(內核)執行作爲電網線程

  • 螺紋是最精細粒度,每個線程有其用於選擇操作在其上的數據塊(threadIdx)內的唯一標識符。該線程可以具有相對大量的寄存器,並且還具有被稱爲本地存儲器的專用存儲區域,其用於寄存器文件溢出和任何大的自動變量。
  • A 是一批一起執行的線程組。這種粒度級的主要原因是塊內的線程可以通過使用快速共享內存進行通信來進行協作。每個塊都有一個唯一的標識符(blockIdx),它與threadIdx一起用於選擇數據。
  • A 網格是一組執行GPU操作的模塊。

這是邏輯層次結構。您實際上只需瞭解邏輯層次結構即可在GPU上實現功能,但要獲得性能,您還需要理解SM和SP的硬件。

甲GPU由SM的,並且每個SM包含多個SP的。目前每個SM有8個SP,每個GPU有1到30個SM,但真正的實際數量並不是一個主要的問題,除非你真的進步了。

第一點要考慮性能的是扭曲。一個warp是一組32個線程(如果你在一個塊中有128個線程(例如),那麼線程0-31將在一個warp中,在下一個中爲32-63等。由於一些原因,warps非常重要,最重要的是:

  • 如果warp中的線程落在if-else塊的'if'側並且其他的落在'else'之後,則warp中的線程綁定在一起,然後其實所有的32個線程對雙方都去了。從功能上是沒有問題的,這不應該採取的分支這些線程被禁用,所以你總是會得到正確的結果,但如果雙方都長那麼性能損失是很重要的。
  • 經線內的線程(實際上是一個半經線,但如果你對經線正確的話,那麼你是安全的在下一代也一樣)從內存中獲取數據在一起,所以如果你可以確保所有的線程在相同的'段'中獲取數據,那麼你將只支付一個內存交易,如果他們都從隨機地址獲取,那麼你將支付32內存交易。有關詳細信息,請參閱Advanced CUDA C演示文稿,但僅限於準備就緒!一經訪問共享內存(在目前的GPU再次半warp)在一起,如果你不小心,你就會有「銀行衝突」,其中線程要排隊背後互相訪問存儲器內的
  • 線程。

因此,瞭解了warp是什麼,最後一點是塊和網格如何映射到GPU上。

每個塊將開始一個SM,並會一直保留,直到它已完成。一旦完成,它將退役,另一個區塊可以在SM上啓動。正是這種動態調度爲GPU提供了可擴展性 - 如果你有一個SM,那麼所有塊都在一個大隊列中的同一個SM上運行,如果你有30個SM,那麼這些塊將被動態調度到SM上。所以你應該確保當你啓動GPU功能時,你的網格由大量的塊(至少有數百個)組成,以確保它在任何GPU上擴展。

最後一點是,SM可以在任何給定的時間執行多個塊。這解釋了爲什麼SM可以處理768個線程(或者在某些GPU中更多),而一個塊最多隻能處理512個線程(當前)。實質上,如果SM具有可用資源(寄存器和共享內存),則它將佔用額外的塊(最多8個)。佔用率計算器電子表格(包含在SDK中)將幫助您確定可以隨時執行多少個塊。

對不起,我傾吐心事,觀看網絡研討會 - 它會更容易!

+3

+1寫得好,內容翔實的答案:) – Sekhat 2010-05-12 13:58:59

+0

非常全面的答案! – Jake0x32 2015-01-04 05:26:06

+0

@Tom:自2010年以來有幾件事情發生了變化,請您更新您答案中的各種數字(特別是最後一段)。這對我們真的很有幫助。 – skm 2015-07-17 09:08:50