日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

淺談 CUDA

發布時間:2025/3/15 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 淺談 CUDA 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

淺談 CUDA

標簽: CUDASPSMnvidiathread 1833人閱讀 評論(0) 收藏 舉報 分類: CUDA技術談

目錄(?)[-]

  • 看懂 CUDA Device Query 參數的意義
  • 淺談 CUDA 計算設備優化
  • 看懂 CUDA Device Query 參數的意義

    當你安裝了CUDA SDK後,並且運行了deviceQuery後,應該能看到你的CUDA的計算性能清單,尤其需要注意以下性能指標(以GT220為例)

    CUDA Capability Major/Minor version number: 1.2

    CUDA Capability version number 所表示的是你的 CUDA 設備所能支持的計算架構,不同的計算架構能支持的特性是不一樣的,你若想用上最新的特性,那麼 version number 也應該越高才行,譬如最新的 CUDA 設備卡可以支持3-D網格。而過於老舊的 NVIDIA 設備卡甚至連 CUDA 都不支持。所以如果預算充足,你應該購買最新或者最有性價比的 CUDA 設備卡。

    Total amount of global memory: 512 MBytes (536870912 bytes)

    其次是 Global Memory 的大小,使用 CUDA RUNTIME API 並調用函數 cudaMalloc 後,便會消耗 GPU 設備上的存儲空間,合理設置程序,適當釋放和分配空間將避免程序出現Crash。

    ( 6) Multiprocessors, ( 8) CUDA Cores/MP: 48 CUDA Cores

    第三個性能指標是 Multiprocessor 也就是 (SM),而 CUDA Cores 也就是 (SP),對於GT220來說,該計算卡中含有6個多核流處理器(Streaming Multiprocessor),而每個流處理器又包含8個流處理管線器(Streaming Processor),因此對於 GT220 來說,該設備卡一共擁有48個流處理器,也就是48個 CUDA Cores。

    CUDA 設備的實際運行,是以 Wrap (32 threads) / Streaming Multiprocessor 為結構進行計算的,而在你編寫的代碼中,則是完全不同的, Thread / Block / Grid 的計算結構。

    這裡,需要一些說明,讓你弄明白二者的關係。例如,GT220一共有6個SM,每個SM中又有8個SP,這意味著一個SM可以駐留8個線程塊,理論上設備能同時處理的線程塊為 6 x 8 = 48 Blocks。

    Warp size: 32

    另外一個需要注意的性能指標就是 Warp size。Warp(線程束),是SM運行的最基本單位,也就是調用一次SM,最少啟用一次warp(32個線程打包運行)。需要注意的是,Block並不是SM運行的最基本單位,它會被分解為多個Warp,由設備根據實際情況進行調用(Block -> SM -> Wraps)。一個SM能最多駐留的Warp是由 SM 包含的線程數 / warp size決定的。

    Maximum number of threads per multiprocessor: 1024

    該參數表示一個SM中有最多1024個線程,也就意味著說該設備的SM可以同時駐留 1024 / 32 = 32個線程束。

    Maximum number of threads per block: 512

    該參數表明創建一個Block最多能使用的線程數量。

    Max dimension size of a thread block (x,y,z): (512, 512, 64)

    看到這個參數後不要錯誤的認為創建的Block可以使用 512 x 512 x 64個線程。實際上你能創建的線程數量最多由 maximum number of threads per block決定, 也就是首先 ThreadIdx.xThreadIdx.yThreadIdx.z <= maximum number。其次 ThreadIdx.x <= Idx, ThreadIdx.y <= Idy, ThreadIdx.z <= Idz。

    Max dimension size of a grid size (x,y,z): (65535, 65535, 1)

    線程塊在計算網格中是以一維或者二維的形式組成的,最新的設備可以支持到三維。這裡的 Max dimension 就意味著你可以創建 xyz 的進程塊。

    淺談 CUDA 計算設備優化

    在這裡,我們還是以GT220作為例子進行說明。

    開發CUDA程序主要看中的性能參數有SMSPWrap SizeMaximum number of threads per SMMaximum number of threads per blockMax dim of a thread block以及Max dim of a grid size

    問題:對於8x8、16x16、32x32這三種計算塊來說,我們該採用怎樣的網格大小對設備利用最佳?

    讓我們來計算一下:

    ? Threads Blocks Needed for Max Utilization
    8x8 64 1024 / 64 = 12
    16x16 256 1024 / 256 = 4
    32x32 1024(512) 1024 / 1024 = 1

    從上表可以看出,第一種方案想要將SM中1024個Threads全部使用完需要12個計算塊,第二種方案則需要4個,第三種方案只要1個,然而卻超過512個線程的限制。然而SP的限制,只允許在一個SM中創建8個計算格點,因此我們來計算一下實際利用率是多少?

    ? Threads Utilization
    8x8 64 x 12(8) = 512 50%
    16x16 256 x 4 = 1024 100%
    32x32 NULL NULL

    由於第一種方案由於SP數量的限制,使得12個計算塊不能同時駐留在SM中,因此實際上只有8個塊可以運行,而第三種方案由於線程數已經超出限制,所以理所當然的,第二種方案顯然是最好的。

    總結

    以上是生活随笔為你收集整理的淺談 CUDA的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。