勘誤一些硬體觀念的部分.
※ 引述《a5000ml (咖啡裡的海洋藍)》之銘言:
: ◆ 多處理器 (MP, Multiprocessors)
: GPGPU 是以「多處理器」 為群組, 每個多處理器有 8 個單精確浮點數的「串流處理器」
: (SP, Stream Processor) 負責運算, 這些串流處理器就是我們平常說的「核心」.
: 所以像 GTX 280 有 30 個 MP, 裡面就有 30 x 8 = 240 個 SP 核心, 在不切換執行緒的
: 情況下, 可以同時處理 240 個單精確的運算.
理想狀態下是480個(理由同第二段,fMADD以及fADD)
: ◆ 運算效能估計
: 運算效能一般採用「每秒能執行的浮點運算次數」GFlops (Giga float operations per
: seconds)來衡量, NV 的 GPGPU 最大效能可用下面公式估計:
: 單精確倍數 (增速因子為 3, 每個多處理器有 8 個單精確的串流處理器)
: GFlops = 多處理器數目 x 8 x 3 x 處理器頻率(GHz)
: (其中 3 是因為管線化因素所造成的「增速因子」)
跟管線無關,是因為在nVidia的SP中,可以執行一個float的MADD(multiply-add)
以及一個float ADD指令,而通常計算flops的時候,MADD又可以被視為一個
乘法與一個加法.當兩個指令灌水....(其實最原始的FLOPS必須是MADD或者是
一次乘法與一次加法才構成一個FLOPS,只是後來為了數字灌水,而把定義當成
乘法與加法不用合併計算)
因此將MADD以及ADD當成每個SP每個cycle具有3 FLOPS(single)的能力
至於管線化造成的影響,已經反映在SP的平均throughput,以及
SP時脈倍率是晶片的2.5倍這兩項上面.
: 雙精確倍數 (增速因子為 2, 每個多處理器只有 1 個雙精確的串流處理器)
: GFlops = 多處理器數目 x 1 x 2 x 處理器頻率(GHz)
同上,這是因為GT200對於double,每個時脈可以執行一次MADD.
因此FLOPS算成每個SP每個時脈2次.
: 一般來說, 這種最大效能是達不到的, 因為我們還需要從記憶體中載入或儲存資料,
: 位址轉換和執行緒定位計算, 條件分支指令, 各執行緒之間同步和交換資料, 以及
: 內部記憶體競爭問題, GPU 做的工作並非單純直線型地只做浮點運算而己, 通常
: 達到最大效能的 1/3 或 1/4, 就已經很驚人了。
: ◆ 記憶體頻寬估計
: 記憶體頻寬通常用每秒傳輸的資料量來衡量 GB/s (giga-bytes per seconds),
: 其最大頻寬, 可用下面公式估計
: 記憶體頻寬(GB/s) = 記憶體介面寬度(bits) x 記憶體時脈頻率(GHz) / 8 x 2
: 其中 /8 是因為 1 個 byte 有 8 個 bits。
: x2 是因為雙通道。
x2是因為DDR SDRAM有兩倍的data rate.
跟雙通道無關,因為N通道會直接反映在記憶體bus的寬度上.
以256bit的G92來說,內部設計是每32bit一個channel,
構成256bit對256bit的crossbar架構.
: (2) 共享記憶體 (shared memory) 多處理機時, 會有一塊所有處理機都看得到的記憶體,
: 稱為共享記憶體, 用來共享或交換資料用, 交換資料時必需要同步所有
: 處理機, 避免因先後序不可預期而導至資料存取錯誤。
這裡有誤,CUDA中的shared memory,共享的對象是同一個MP(&block)中的
所有thread,shared memory也具有所有晶片內嵌記憶體的特色.
容量有限,存取速度極快等等.
不同MP(&block)中的shared memory是互不相干的.
但是同一個MP/block中的所有thread就共享這16KB shared memory,
也可以利用這個在thread之間"快速"交換資料......
^^^^^^存疑,因為等thread同步很慢
不過下一篇的記憶體有對於這個正確的解釋.請直接參考該篇...
: (9) 記憶庫 (Memory bank) 將記憶體分散成數個獨立的群組儲存, 並可借由多個獨立
: 的記憶體控制器來提昇整體的頻寬。
: (10) 記憶庫衝突 (bank conflict) 當同時要存取的資料位於同一記憶庫, 稱為記憶庫
: 衝突, 此時就要排隊等待而造成延遲.
這裡不是勘誤,不過由於memory bank存在於很多地方,
顯示卡上用的DDR SDRAM"晶片內部"有memory bank,因此
存取外部DDR SDRAM有bank conflict的延遲,顯示晶片內的
shared memory也有memory bank(共16組),存取shared memory就必須避開
bank conflict問題....不過CUDA文件中的bank conflict通常
是指後者.除非特例,不然前者的問題是被隱藏住的不需要直接控管.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.132.146.142
※ 編輯: jk21234 來自: 220.132.146.142 (12/11 13:25)