CUDA運算速度和顯示卡CUDA核心數量關係大嗎?

時間 2021-05-06 11:00:55

1樓:高通

同樣架構下,運算速度和核心數量等比例遞增,Cuda核心裡面有運算器,例如乙個Float32浮點運算器,1000個核心,1G主頻,則FP32的算力為1T Flops,就是這麼簡單。

新的架構下:

(1)Float的運算器可能是 64位的,可以實現雙精度計算,在單精度上翻倍;

(2)新的Tensor Core運算器支援FP16、INT8、INT4的計算能力,速度等比例翻倍;

(3)新的Tensor Core可以支援4*4 個運算在乙個時鐘週期內完成,效能翻16倍數;

Cuda Core和Tensor Core是不同的硬體單元,計算效能累加。

2樓:季文瀚

nvidia gpu內部硬體單元有很多種,單獨某一種的數量與顯示卡效能並不成嚴格的正相關。

實際上每一代架構都在調整各種單元之間的比例,目的是為了讓程式提高並行度,使有效吞吐接近理論極限。如果設計gpu的過程中沒有權衡各種硬體資源的比例,會造成某一種硬體資源的缺乏成為限制整個cuda程式執行效率的瓶頸。

問題裡的cuda core,或者稱為sp,是主要的運算單元,內部有分別處理int和單精度float的部分,用於執行一些常用的運算指令。除了sp之外還有雙精度單元用於科學計算以及特殊運算單元sfu來執行比較複雜的運算指令比如三角函式。而gpu中除了這些運算單元之外還有很重要很稀缺的儲存器結構。

現代計算機,無論CPU還是GPU,主要的效能瓶頸都來自儲存器。gpu運算單元的總峰值吞吐能力遠遠超過訪存的峰值頻寬。

在硬體上比SP更大的運算單位稱為SM,乙個SM是由多個SP加上其他的資源組成的,實際上SM才更像是乙個具有完整功能的CORE。因為SM可以排程並發射指令到運算單元內。

nvidia一直在努力把自己的gpu從一般的圖形處理器往通用計算的方向發展,cuda core裡面的cuda這個詞就是nvidia主推的平行計算架構。無論是圖形渲染還是cuda程式設計,最基本的程式並行結構稱為thread,這是程式設計師可以控制的最細粒度的並行單位。每乙個thread在運算單元上就對應乙個sp,所以新聞裡常常會籠統的把sp數量等同於thread的並行數量,從而量化不同GPU的效能。

多個thread組合起來稱為乙個block,數量是程式設計師可以設定的。在同乙個block內的thread之間可以相互通訊,因為他們可以共用同乙個SM內的shared memory(共享儲記憶體),每乙個thread還擁有各自獨佔的register(暫存器)和local memory(本地儲存器),這幾種儲存器都是整個GPU中距離運算單元距離最近,速度最快的儲存器資源。但是跨block的執行緒通訊不能通過SM內部的儲存器,只能通過距離很遠,訪問時間長達幾百個週期的global memory(全域性記憶體,就是指視訊記憶體)來實現,這個速度實在太慢了,所以cuda程式會盡量避免使用global memory。

block在硬體上是由SM呼叫駐留的,乙個SM會把屬於它的block拆分成很多warp(硬體上的排程單位)分批餵給運算單元去執行,乙個warp包含了32個thread。而所有屬於這個SM的block會共用這個SM上的資源。對於程式設計人員來說,程式並行化的關鍵就在於設計乙個方案,使得乙個SM內的各種硬體單元都能有效利用,得到最理想的吞吐。

打個比方,乙個SM內部有48kb的shared memory,8192個register,假如程式設計師設定的每個block裡面有64個執行緒,並且希望每個sm能同時駐留2個block,那麼每個執行緒就能分到8192/2/64=64個register,乙個block可以分配到48/2=24kb的shared memory,接著這位程式設計師又修改了程式,使得每個thread使用到的資源更多,並且恰好比之前算出來的極限值多那麼一點點,就會導致乙個SM滿足不了駐留2個block,只能留下來乙個,於是就會空置很多硬體資源不能得到有效的利用。總結一下,如果乙個SM內的硬體資源比例不均,不能滿足程式設計師的分配需求,那麼就會導致同時執行的block數量變少。結合題主的問題來說,即使乙個gpu內部有很多很多的運算單元,卻沒有足夠的其他資源支撐這些運算單元同時並行,那麼這些運算單元就會閒置,白白浪費了算力。

最新的Pascal雖然每個SM的sp數量相對於前代Maxwell而言只有一半(64/128),但是擁有相同的儲存器資源,所以能提供給每個block/thread更多的儲存器資源,從而保證每個運算單元的充分利用。再加上全域性上的GPU執行頻率比原來更高,即使總運算單元數量減少一點,最終折算的吞吐能力也會比上一代更高。

另外gpu的設計是考慮到成本和散熱等巨集觀因素的,高速片上儲存器占用電晶體多,所以容量有限,往往在晶元製程和工藝更新換代之後才有條件增大容量,不可能做到無限制的堆砌硬體資源。新一代的設計一般都會著重於提公升每瓦效能,並且根據實際程式設計中總結出來的設計模式對硬體資源比例進行調整,這是個不斷trade off的過程。

3樓:

其實核多只能說明計算能力可能會更強,但是如果訪存速度跟不上,也是白搭。就比如有100個人等著幹活,但是每次只能輸送過來50個人的任務量,那剩餘的50個人就閒著,雖然你的任務總量很大,但是沒用,你的傳輸效能太低,這樣,即使有1000個人等著幹活也沒用,除了50個幹活的,別的都在閒著,處理速度也不會相差很大

4樓:

乙個特定計算量的任務,如果核心的數目越多,那麼單位時間內執行的運算就越多,所以完成這個任務所花費的時間就越少,顯然計算速度就越快。

但是如果不同的顯示卡的核心速度不同,那麼核心多的不一定就比核心少的花費的計算時間少。

定點運算和浮點運算哪個速度快

來知曉 一般來講,定點運算更快,因為浮點運算涉及到複雜的定點轉換。具體原理見下文 目錄 基本概念 浮點數與定點數對映轉換 浮點到定點 定點到浮點 定點數與浮點數儲存的區別 參考資料 在分析講解定點和浮點之間對映前,我們需要了解以下基本概念。位寬 乙個浮點數用多少位的整數來表示 如 16,4 則表示用...

Python 科學計算有哪些提高運算速度的技巧?

Sager 避免使用for迴圈。備註 能用Series,Dataframe,矩陣運算的千萬不要使用for迴圈。也可以結合Python的列表解析和生成器表示式取代for迴圈。 陳樂群 劉天亮 用multiprocessing。如果沒記錯的話模組應該叫這個名字,跑程式的時候可以把需要大量計算的東西拆成幾...

如何區分位運算和邏輯運算?

琴酒 位運算 主要針對二進位制位的操作,有取反 位與 位或 位異或 對每一位取反,0變成1,1變成0,一元運算子,其它位運算基本都是二元運算子 只有同為1時,結果才是1 只要有1,結果就為1 相同為0,不同為1 邏輯運算 主要用於條件判斷,有與 或 非!條件都為真時為真 條件有乙個為真,即為真 把真...