精華區beta VideoCard 關於我們 聯絡資訊
勘誤一些硬體觀念的部分. ※ 引述《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)