CUDA中確定你顯示卡的thread和block數

2022-06-30 20:51:11 字數 1312 閱讀 6225

在進行平行計算時, 你的顯示卡所支援建立的thread數與block數是有限制的, 因此, 需要自己提前確定夠用, 再進行計算, 否則, 你需要改進你的演算法, 或者, 更新你的硬體了.

首先你需要知道你的顯示卡的compute capability , 在目前市面上絕大多數的都是支援1024 threads , 只有一些非常早期(compute 1.x)的只是支援 512 threads. 如果是非常早期的一些顯示卡的話可以參閱這個webpage

在你確定完你的compute capability 後, 根據此, 你的顯示卡的compute capability 如果是 1.x的話, grid 支援的只有 1d 和 2d , 2.x 及以上才支援 3d 的 grid , 而 block 則在1.x和2.x及更新的版本都支援3d , 在1.x / 2.x+的情況下, 每個block的最大支援分別是[512,512,64] / [1024,1024,64] ,現代顯示卡的grid的size已經可以支援到[2^31-1,65535,65535]

每個block中的暫存器, 在compute capability為1.0,1.1/1.2,1.3/2.x-/3.0/3.2/3.5-5.2/5.3/6-6.1/6.2/7.0的情況下, 對應的暫存器總量不超過8k/16k/32k/64k/32k/64k/32k/64k/32k/64k .

每個block中 , 在compute capability為1.x/2.x-6.2/7.0的情況下, 對應的 share memery不能超過 16kb/48kb/96kb .

你的block的數量,前面已經說了,現在的顯示卡grid的size一般最大支援[65535,65535,1],因此,當你需要的block小於65535時,使用1d即可,如果你的compute capability 大於3.0的話,同樣是1d,你的grid最大可以支援231-1個block,2d或者3d時,你的grid最大可以支援[231-1,65535,65535]

如果你超過了你的顯示卡的硬體限制, 它會自動停止工作.

實際上, 你想要充分利用你的顯示卡的效能, 就需要對你的**仔細分析, 然後才能夠 充分利用, 而不是每一條都照著官方給的標準進行. 簡單總結下 :

每個 block 上的 threads 數都應該是warp大小的四捨五入,在所有當前硬體上都是32。

充分利用streaming multiprocessor unit, 使得你的 warp 始終都在執行, 從而來隱藏一些記憶體讀取的時間, 簡單說就是, 讓你的所有warp始終都在計算, 這樣子的話, 你的記憶體讀取時間就可以基本被忽略(隱藏) .

利用好你的share memery 以及 sync .

顯示卡,驅動和CUDA的認識

之乎 顯示卡 gpu 主流是nvidia的gpu,深度學習本身需要大量計算。gpu的平行計算能力,在過去幾年裡恰當地滿足了深度學習的需求。amd的gpu基本沒有什麼支援,可以不用考慮。驅動 沒有顯示卡驅動,就不能識別gpu硬體,不能呼叫其計算資源。但是呢,nvidia在linux上的驅動安裝特別麻煩...

如何檢視顯示卡支援的CUDA版本

1.在開始中找到並開啟nvidia控制面板,如下圖所示。2.開啟nvidia控制面板,如下圖所示。選擇 系統資訊 元件 找到nvcuda.dll資訊顯示即為顯示卡支援的cuda最高版本。3.在編譯caffe時,若顯示卡的計算能力比較低的話,需要修改caffe master windows下的 com...

Android中的非同步處理技術之Thread

目錄 1.定義 thread是android中非同步處理技術的基礎,是執行任務的基本單位。2.實現方法 繼承thread類並重寫run 方法。public class mythread extends thread private void startthread 繼承runnable介面並實現ru...