這是 GPU 微基準測試的集合。每個測試旨在測試特定場景或硬體機制。一些基準已用於為這些論文產生數據:
“現代 GPU 上程式碼產生過程中的分析效能評估”
“GPU 上真實複雜的高瘦矩陣乘法內核的性能工程”
稱為gpu-<benchmarkname>
的基準測試是可以 hipify 的!預設 Makefile 目標建置 CUDA 可執行檔cuda-<benchmarkname>
,而目標make hip-<benchmarkname>
使用 hipify-perl 工具從main.cu
檔案建立檔案main.hip
,並使用 hip 編譯器建置它。編寫 CUDA 主文件後,hipify 工具無需進一步幹預即可運作。
另請參閱 gpu-metrics 函數,它提供了一種簡潔的方法來測量正在運行的程式內啟動的核心的硬體效能計數器指標。
如果本文有用,歡迎加星和引用!
測量不同佔用情況下串流核心的頻寬。共享記憶體分配充當擾流器,因此每個 SM 只能運行兩個執行緒區塊。掃描線程區塊大小從32到1024,掃描佔用率從3%到100%。
核心 | 公式 | |
---|---|---|
初始化 | A[i] = c | 1 個儲存流 |
讀 | 總和 = A[i] | 1 個負載流 |
規模 | A[i] = B[i] * c | 1 個加載流,1 個儲存流 |
三合會 | A[i] = B[i] + c * C[i] | 2 個加載流,1 個儲存流 |
3分 | A[i] = B[i-1] + B[i] + B[i+1] | 1 個加載流,1 個儲存流 |
5分 | A[i] = B[i-2] + B[i-1] + B[i] + B[i+1] + B[i+2] | 1 個加載流,1 個儲存流 |
NVIDIA-H100-PCIe / CUDA 11.7 的結果
區塊大小線程 %occ | 初始化讀取比例三重軸 3pt 5pt 32 3648 3 % | GB/秒:228 96 183 254 168 164 64 7296 6.2 % | GB/秒:452 189 341 459 316 310 96 10944 9.4 % | GB/秒:676 277 472 635 443 436 128 14592 12.5 % | GB/秒:888 368 607 821 567 558 160 18240 15.6 % | GB/秒:1093 449 704 966 680 670 192 21888 18.8 % | GB/秒:1301 533 817 1121 794 781 224 25536 21.9 % | GB/秒:1495 612 925 1264 903 889 256 29184 25.0 % | GB/秒:1686 702 1037 1399 1005 989 288 32832 28.1 % | GB/秒:1832 764 1124 1487 1100 1082 320 36480 31.2 % | GB/秒:2015 841 1213 1564 1188 1169 352 40128 34.4 % | GB/秒:2016 908 1295 1615 1269 1250 384 43776 37.5 % | GB/秒:2016 985 1378 1644 1348 1326 416 47424 40.6 % | GB/秒:2016 1045 1439 1641 1415 1395 448 51072 43.8 % | GB/秒:2016 1116 1497 1649 1472 1453 480 54720 46.9 % | GB/秒:2016 1179 1544 1655 1521 1505 512 58368 50.0 % | GB/秒:2017 1261 1583 1675 1556 1545 544 62016 53.1 % | GB/秒:2016 1300 1591 1669 1572 1563 576 65664 56.2 % | GB/秒:2016 1362 1607 1678 1587 1579 608 69312 59.4 % | GB/秒:2018 1416 1619 1689 1598 1592 640 72960 62.5 % | GB/秒:2016 1473 1639 1712 1613 1607 672 76608 65.6 % | GB/秒:2016 1527 1638 1714 1618 1613 704 80256 68.8 % | GB/秒:2015 1578 1644 1725 1625 1619 736 83904 71.9 % | GB/秒:2016 1624 1651 1738 1632 1628 768 87552 75.0 % | GB/秒:2016 1680 1666 1755 1642 1638 800 91200 78.1 % | GB/秒:2015 1714 1663 1758 1645 1642 832 94848 81.2 % | GB/秒:2016 1759 1668 1770 1649 1647 864 98496 84.4 % | GB/秒:2016 1795 1673 1779 1654 1651 896 102144 87.5 % | GB/秒:2016 1837 1686 1796 1663 1662 928 105792 90.6 % | GB/秒:2018 1871 1684 1800 1666 1664 960 109440 93.8 % | GB/秒:2016 1897 1688 1808 1672 1670 992 113088 96.9 % | GB/秒:2016 1919 1693 1818 1678 1675 1024 116736 100.0 % | GB/秒:2016 1942 1704 1832 1686 1683
SCALE 核心和所選 GPU 的結果:
請注意,H100 結果適用於 PCIe 版本,其 DRAM 頻寬低於 SXM 版本!
用於延遲測量的指針追逐基準。單一扭曲以隨機順序完全遍歷緩衝區。分區方案用於確保所有快取行在再次訪問之前都恰好命中一次。時脈週期中的延遲是根據目前時脈速率計算的。
Sharp L1 快取轉換對於 NVIDIAS V100/A100/H100 為 128/192/256 kB,對於 AMD MI210 為 16kB。 V100和MI210都有6MB二級快取。 A100 和 H100 具有 2x20MB 和 2x25MB 的分段 L2 緩存,當從較遠的 L2 部分獲取資料時,這表現為一個小的中間平台。
RDNA2 GPU RX6900XT 擁有最有趣的快取層次結構,其 4 個快取等級清晰可見:16kB L0 快取、128kB 半共享 L1 快取、4MB L2 快取和 128MB 無限快取。它也是主頻最高的 GPU,因此絕對存取時間將低於其他 GPU。測量其 DRAM 延遲很困難,因為 DRAM 介面無法為單一波前計時,導致 DRAM 延遲 > 2000 個週期。
測量第一級和第二級快取的頻寬。每個 SM 啟動一個線程塊。每個執行緒區塊重複讀取同一緩衝區的內容。不同的緩衝區大小會改變目標快取等級。
16kB (MI100/MI210)、128kB (V100)、192kB (A100) 和 256 kB (H100) 一級快取容量非常明顯且銳利。三種NVIDIA架構的傳輸速度都接近128B/cycle/SM,AMD的MI100和MI210上的最大測量值取決於資料類型。對於雙精度,最大值為 32B/cycle/CU。對於單精度和 16B 資料類型(float4 或 double2),頻寬高達 64B。
此基準測試不針對超過第二快取等級的記憶體層次結構層級(即大多數 GPU 的 DRAM),因為資料集不會明顯地從共享快取中刪除。由於所有執行緒區塊都讀取相同的數據,因此在資料被逐出之前,共享快取內部存在大量重複使用潛力。 RX6900XT 的價值超過其 128kB 共享 L1 快取。當超出單一快取部分的容量時,A100 和 H100 略有下降,為 20/25MB。超過這一點,資料就無法在兩個二級快取部分中複製,最大頻寬也會下降,因為資料也必須從其他部分取得。
測量共享快取等級的頻寬。此基準測試明確不針對 L1 快取。
所有三個 GPU 都具有相似的 L2 快取頻寬,約為 5.x TB/s,但容量不同。
一個值得注意的現像是 RX6900XT,它具有第二級共享緩存,即 128MB 無限緩存。其速度接近 1.92 TB/s,與 A100 的 DRAM 一樣快。一開始,可以看到RX6900XT半共享L1緩存,對於某些塊的放置,4個L1緩存的影響很小。這同樣適用於 H100,它具有更大的 L1 緩存,線程塊更有可能在前一個線程塊加載的 L1 緩存中找到它想要處理的資料。這僅適用於小數據集,其中只有幾個不同的數據塊,而且這種機會仍然很大。這不能歸因於分散式共享記憶體網絡,該網絡允許從其他 SM 的共享記憶體加載,因為它僅適用於顯式共享記憶體加載,不適用於全域加載。這需要針對任何負載檢查 GPC 中每個 L1 快取的標籤。
只讀 L1 快取基準測試,以 1 到 128 的步幅存取記憶體。從 1 到 128 的步長採用 16x8 的畫面格式,因為這突顯了 2/4/8/16 的倍數的重複模式。
每個設備都適合
它透過啟動開銷對效能進行建模
該程式透過改變內循環行程的數量來掃描一系列計算強度。 它既適合研究從記憶體到計算綁定程式碼的轉變,也適合研究使用多個 GPU 時的功耗、時脈頻率和溫度。 shell 腳本 series.sh 為每個值建立一個可執行文件,並在建置完成後逐一執行它們。
該代碼在所有可用設備上同時運行。四個 Tesla V100 PCIe 16GB 上的輸出範例:
1 640 塊 0 其 0.125 Fl/B 869 GB/s 109 GF/s 1380 Mhz 138 W 60°C2 640 塊 0 其 0.125 Fl/B 869 GB/s 109 GF/s 1035 塊 10013 100012 300002其0.125 Fl/B 869 GB/s 109 GF/s 1380 Mhz 124 W 56°C0 640 塊0 其0.125 Fl/B 869 GB/s 109 GF/s 1380 Mhz 124 塊 54° 109 GF/s 1380 Mhz 124 154 164 1254 1254° 1254 1254 1254°C B 861 GB/s 968 GF/s 1380 Mhz 159 W 63°C0 640 塊8 其1.125 Fl/B 861 GB/s 968 GF/s 1380 Mhz 142 W 56°C2 640 塊 1. s 968 GF/s 1380 Mhz 157 W 62°C3 640 塊8 其1.125 Fl/B 861 GB/s 968 GF/s 1380 Mhz 144 W 59°C[...]0 640 塊 FlB GB/s 6587 GF/s 1380 Mhz 223 W 63°C3 640 塊64 其8.125 Fl/B 813 GB/s 6604 GF/s 1380 Mhz 230 W 66°C1 640 GF/s 1380 Mhz 230 W 66°C1 640 GF/s 1380 Mhz 230 W 66°C1 640 塊/751 125125 125125 125/125 125 125 125/125 125 125 125/32 125175 125 125 125 125132 125135 1375 32175/32 1975/32 1975/32 1975/32 125175 1325 1325/1975132 GF/s 1380 Mhz 241 W 71°C2 640 塊64 其8.125 Fl/B 813 GB/s 6603 GF/s 1380 Mhz 243 W 69°C
測量 cudaMemcpy 函數在一定傳輸大小範圍內的主機到裝置傳輸速率
Tesla V100 PCIe 16GB 的輸出範例
1kB 0.03ms 0.03GB/s 0.68% 2kB 0.03ms 0.06GB/s 5.69% 4kB 0.03ms 0.12GB/s 8.97% 8kB 0.03ms 0.24GB 16. 2kB 0.04ms 0.93 GB /s 2.70% 64kB 0.04ms 1.77GB/s 5.16% 128kB 0.04ms 3.46GB/s 7.55% 256kB 0.05ms 5.27GB/s 7.55% 256kB 0.05ms. .11毫秒9.25GB/秒2.52% 2048kB 0.20ms 10.50GB/s 1.07% 4096kB 0.37ms 11.41GB/s 0.58% 8192kB 0.71ms 11.86GB/s 0.44% 16384k0. .74ms 12 .23GB/秒0.03% 65536kB 5.46ms 12.29 GB/ 0.08% 131072kB 10.89ms 12.32GB/s 0.02% 262144kB 21.75ms 12.34GB/s 0.00% 524288kB 43.47ms 1.357015.357 1000% 200570005750000% 2157. 3 5GB/秒 0.00%
使用 STREAM triad 核心測量 CUDA 統一記憶體傳輸速率。使用一系列資料集大小,比裝置記憶體小或大。 Tesla V100 PCIe 16GB 上的範例輸出:
緩衝區大小時間擴充頻寬24 MB 0.1ms 3.2% 426.2GB/s 48 MB 0.1ms 24.2% 511.6GB/s 96 MB 0.1ms 0.8% 688.0GB/s 192 MB 0.3701.8% 40.8% GB 0.505/ms . 0.5 % 764.6GB/s 768MB 1.0ms 0.2% 801.8GB/s 1536MB 2.0ms 0.0% 816.9GB/s 3072MB 3.9ms 0.1% 822.948 614879380238090002 00020202090000 3802990009809000 380202090000 3802020900098% 200259000238090009700098% 38290002038090009857000237000098599300023809000970000 382900098509000 38020900098570003333333333339333% 5.7ms 0.1 % 822.1GB/秒24576 MB 5108.3 毫秒0.5% 5.0GB/秒49152 MB 10284.7 毫秒0.8% 5.0GB/秒
測量 FMA、DIV 和 SQRT 操作的延遲和吞吐量。它透過產生 1..8 個獨立依賴鏈來掃描 ILP=1..8 的組合,透過將 SM 上的扭曲計數從 1 更改為 32 來掃描 TLP。吞吐量(每次操作的周期):
Tesla V100 PCIe 16GB 上的範例輸出:
DFMA 8.67 4.63 4.57 4.66 4.63 4.72 4.79 4.97 4.29 2.32 2.29 2.33 2.32 2.36 2.39 2.48 2.14 1.16 1.14 1.17 1.16 1.18 1.20 1.24 1.08 1.05 1.05 1.08 1.08 1.10 1.12 1.14 1.03 1.04 1.04 1.08 1.07 1.10 1.11 1.14 1.03 1.04 1.04 1.08 1.07 1.10 1.10 1.14DDIV11 1 .55 111.53 111.53 111.53 111.53 668.46 779.75 891.05 55.76 55.77 55.76 55.76 55.76 334.77 55.76 55.76 55.76 334.2682. 8 27.88 27.88 167.12 194.96 222.82 14.11 14.11 14.11 14.11 14.11 84.77 98.89 113.00 8.48 8. 84 7.51 7.51 7.51 7.51 7.51 44.98 52.48 59.97 DSQRT101 .26 101.26 101.26 101.26 101.26 612.76 714.79 816.83 50.63 50.62 50.63 50.63 50.62 30753. 25.31 25.31 25.31 153.18 178.68 204.19 13.56 13.56 13.56 13.56 13.56 82.75 96.83 110.29 13.56 82.75 96.83 110.29 9. 4 80.62 9.61 9.61 9.61 9.61 9.61 58.91 68.72 78.53
可以從圖中提取一些特徵。
延遲:
DFMA:8 個週期
DDIV:112 個週期
DSQRT:101 個週期
1 個 warp 的吞吐量(在一個 SM 象限上運行),無依賴性:
DFMA:每個週期 1/4(ILP 2,到操作重疊)
DDIV:每個週期 1/112(無 ILP/重疊)
DSQRT:每個週期 1/101(無 ILP/重疊)
多重扭曲的吞吐量(所有 SM 象限),依賴性不相關:
DFMA:每個週期 1 個
DDIV:1/7.5 週期
DSQRT:1/9.6 週期