Это коллекция микротестов графических процессоров. Каждый тест предназначен для проверки определенного сценария или аппаратного механизма. Некоторые из критериев были использованы для получения данных для этих статей:
«Аналитическая оценка производительности при генерации кода на современных графических процессорах»
«Проектирование производительности реальных и сложных ядер умножения высоких и тонких матриц на графических процессорах»
Бенчмарки, называемые gpu-<benchmarkname>
можно модифицировать! В то время как целевой Makefile по умолчанию собирает исполняемый файл CUDA cuda-<benchmarkname>
, целевой make hip-<benchmarkname>
использует инструмент hipify-perl для создания файла main.hip
из файла main.cu
и собирает его с помощью компилятора hip. . Основные файлы CUDA написаны так, что инструмент hipify работает без дальнейшего вмешательства.
Также обратите внимание на функции gpu-metrics, которые обеспечивают краткий способ измерения показателей счетчика производительности оборудования при запуске ядра внутри работающей программы.
Если что-то из этого окажется полезным, звезды и цитаты приветствуются!
Измеряет пропускную способность потоковых ядер при различной занятости. Выделение общей памяти служит спойлером, поэтому на SM могут выполняться только два блока потоков. Сканирование размера блока потока от 32 до 1024 сканирует занятость от 3% до 100%.
Ядро | Формула | |
---|---|---|
инициализация | А[я] = с | 1 поток в магазине |
читать | сумма = А[я] | 1 поток загрузки |
шкала | А[я] = Б[я] * с | 1 поток загрузки, 1 поток сохранения |
триада | А[i] = B[i] + c * C[i] | 2 потока загрузки, 1 поток сохранения |
3 балла | А[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
BlockSize нити %occ | init чтение масштаба триада 3pt 5pt 32 3648 3 % | ГБ/с: 228 96 183 254 168 164 64 7296 6,2 % | ГБ/с: 452 189 341 459 316 310 96 10944 9,4 % | ГБ/с: 676 277 472 635 443 436 128 14592 12,5 % | ГБ/с: 888 368 607 821 567 558 160 18240 15,6 % | ГБ/с: 1093 449 704 966 680 670 192 21888 18,8 % | ГБ/с: 1301 533 817 1121 794 781 224 25536 21,9 % | ГБ/с: 1495 612 925 1264 903 889 256 29184 25,0 % | ГБ/с: 1686 702 1037 1399 1005 989 288 32832 28,1 % | ГБ/с: 1832 764 1124 1487 1100 1082 320 36480 31,2 % | ГБ/с: 2015 841 1213 1564 1188 1169 352 40128 34,4 % | ГБ/с: 2016 908 1295 1615 1269 1250 384 43776 37,5 % | ГБ/с: 2016 985 1378 1644 1348 1326 416 47424 40,6 % | ГБ/с: 2016 1045 1439 1641 1415 1395 448 51072 43,8 % | ГБ/с: 2016 1116 1497 1649 1472 1453 480 54720 46,9 % | ГБ/с: 2016 1179 1544 1655 1521 1505 512 58368 50,0 % | ГБ/с: 2017 1261 1583 1675 1556 1545 544 62016 53,1 % | ГБ/с: 2016 1300 1591 1669 1572 1563 576 65664 56,2 % | ГБ/с: 2016 1362 1607 1678 1587 1579 608 69312 59,4 % | ГБ/с: 2018 1416 1619 1689 1598 1592 640 72960 62,5 % | ГБ/с: 2016 1473 1639 1712 1613 1607 672 76608 65,6 % | ГБ/с: 2016 1527 1638 1714 1618 1613 704 80256 68,8 % | ГБ/с: 2015 1578 1644 1725 1625 1619 736 83904 71,9 % | ГБ/с: 2016 1624 1651 1738 1632 1628 768 87552 75,0 % | ГБ/с: 2016 1680 1666 1755 1642 1638 800 91200 78,1 % | ГБ/с: 2015 1714 1663 1758 1645 1642 832 94848 81,2 % | ГБ/с: 2016 1759 1668 1770 1649 1647 864 98496 84,4 % | ГБ/с: 2016 1795 1673 1779 1654 1651 896 102144 87,5 % | ГБ/с: 2016 1837 1686 1796 1663 1662 928 105792 90,6 % | ГБ/с: 2018 1871 1684 1800 1666 1664 960 109440 93,8 % | ГБ/с: 2016 1897 1688 1808 1672 1670 992 113088 96,9 % | ГБ/с: 2016 1919 1693 1818 1678 1675 1024 116736 100,0 % | ГБ/с: 2016 1942 1704 1832 1686 1683
Результаты для ядра SCALE и набора графических процессоров:
Обратите внимание, что результаты H100 относятся к версии PCIe, у которой пропускная способность DRAM ниже, чем у версии SXM!
Тест погони за указателем для измерения задержки. Одиночный варп полностью пересекает буфер в случайном порядке. Схема секционирования используется для обеспечения того, чтобы все строки кэша попадали ровно один раз, прежде чем к ним снова будет осуществлен доступ. Задержка в тактовых циклах вычисляется с учетом текущей тактовой частоты.
Резкие переходы кеш-памяти L1 на уровне 128/192/256 КБ для NVIDIAS V100/A100/H100 и 16 КБ для AMD MI210. V100 и MI210 имеют кэш-память второго уровня объемом 6 МБ. A100 и H100 имеют сегментированный кэш L2 размером 2x20 МБ и 2x25 МБ, что проявляется в виде небольшого промежуточного плато при извлечении данных из дальнего раздела L2.
Графический процессор RDNA2, RX6900XT, имеет наиболее интересную иерархию кэша: четко видны 4 уровня кэша: кэш L0 объемом 16 КБ, полуобщий кэш L1 объемом 128 КБ, кэш L2 объемом 4 МБ и кэш Infinity объемом 128 МБ. Это также графический процессор с самой высокой тактовой частотой, поэтому абсолютное время доступа будет ниже, чем у других графических процессоров. Измерить задержку DRAM сложно, поскольку интерфейс DRAM не синхронизируется для одного волнового фронта, что приводит к задержке DRAM > 2000 циклов.
Измеряет пропускную способность первого и второго уровня кэша. Запускает один блок потоков для каждого SM. Каждый блок потока неоднократно считывает содержимое одного и того же буфера. Изменение размеров буфера меняет целевой уровень кэша.
Емкость кэша L1 16 КБ (MI100/MI210), 128 КБ (V100), 192 КБ (A100) и 256 КБ (H100) очень выражена и четка. Обе архитектуры NVIDIA передают скорость около 128B/цикл/SM, максимальное измеренное значение на AMD MI100 и MI210 зависит от типа данных. Для двойной точности максимум составляет 32B/цикл/CU. Для типов данных одинарной точности и 16 байт (float4 или double2) пропускная способность составляет до 64 байт.
Этот тест не нацелен на уровни иерархии памяти после второго уровня кэша (т. е. DRAM для большинства графических процессоров), поскольку наборы данных явно не выпадают из общего кэша. Поскольку все блоки потоков считывают одни и те же данные, внутри общего кэша существует большой потенциал повторного использования, прежде чем данные будут удалены. Значения RX6900XT просто сумасшедшие, несмотря на общий кэш первого уровня объемом 128 КБ. A100 и H100 немного падают на 20/25 МБ, когда емкость одного раздела кэша превышена. За пределами этой точки данные не могут реплицироваться в обоих разделах кэша L2, а максимальная пропускная способность снижается, поскольку данные также необходимо извлекать из другого раздела.
Измеряет пропускную способность уровней общего кэша. Этот тест явно не нацелен на кэши L1.
Все три графических процессора имеют одинаковую пропускную способность кэша L2 — около 5,0 ТБ/с, хотя и с разной емкостью.
Замечательным наблюдением является RX6900XT, который имеет второй уровень общего кэша — Infinity Cache объемом 128 МБ. Со скоростью почти 1,92 ТБ/с она такая же быстрая, как DRAM в A100. В самом начале можно увидеть полуобщий кэш L1 RX6900XT, где для некоторых размещений блоков 4 кэша L1 оказывают небольшой эффект. То же самое относится и к H100, который имеет больший кэш L1 с увеличенной вероятностью для блока потока найти данные, с которыми он хочет работать, уже в кэше L1, загруженном предыдущим блоком потока. Это работает только для небольших наборов данных, где имеется всего несколько разных блоков данных, и этот шанс все еще значителен. Это не связано с сетью распределенной общей памяти, которая позволяет загружать из общей памяти другого SM, поскольку она работает только для явных загрузок общей памяти, а не глобальных загрузок. Это потребует проверки тегов каждого кэша L1 в GPC на предмет любой нагрузки.
Только чтение, тест кэша L1, который обращается к памяти с шагом от 1 до 128. Пропускная способность преобразуется в байты на цикл и SM. Шаги от 1 до 128 форматируются в виде таблицы 16x8, поскольку это подчеркивает повторяющиеся шаблоны, кратные 2/4/8/16.
Каждое устройство получает набор
который моделирует производительность с накладными расходами при запуске
Эта программа сканирует диапазон вычислительной интенсивности, изменяя количество отключений внутреннего цикла. Он подходит как для изучения перехода от памяти к вычислительным кодам, так и для изучения энергопотребления, тактовых частот и температур при использовании нескольких графических процессоров. Сценарий оболочки series.sh создает исполняемый файл для каждого значения и выполняет их один за другим после завершения сборки.
Код работает одновременно на всех доступных устройствах. Пример вывода на четырех Tesla V100 PCIe 16 ГБ:
1 640 блоков 0 его 0,125 фл/Б 869 ГБ/с 109 GF/с 1380 МГц 138 Вт 60°C2 640 блоков 0 его 0,125 фл/Б 869 ГБ/с 109 GF/с 1380 МГц 137 Вт 59°C3 640 блоков 0 его 0,125 фл/Б 869 ГБ/с 109 ГБ/с 1380 МГц 124 Вт 56°C0 640 блоков 0 его 0,125 фл/Б 869 ГБ/с 109 ГБ/с 1380 МГц 124 Вт 54°C1 640 блоков 8 его 1,125 фл/Б 861 ГБ/с 968 GF/s 1380 МГц 159 Вт 63°C0 640 блоков 8 1,125 Fl/B 861 ГБ/с 968 GF/с 1380 МГц 142 Вт 56°C2 640 блоков 8 1,125 Fl/B 861 ГБ/с 968 GF/с 1380 МГц 157 Вт 62°C3 640 блоков 8 1,125 фл/Б 861 ГБ/с 968 ГБ/с 1380 МГц 144 Вт 59°C[...]0 640 блоков 64 8,125 фл/Б 811 ГБ/с 6587 GF/с 1380 МГц 223 Вт 63°C3 640 блоков 64 его 8,125 фл/Б 813 Гбайт/с 6604 ГФ/с 1380 МГц 230 Вт 66°C1 640 блоков 64 его 8,125 фл/Б 812 ГБ/с 6595 ГФ/с 1380 МГц 241 Вт 71°C2 640 блоков 64 его 8,125 фл/б 813 ГБ/с 6603 ГБ/с 1380 МГц 243 Вт 69°C
Измеряет скорость передачи данных между хостом и устройством функции cudaMemcpy в диапазоне размеров передачи.
Пример вывода для Tesla V100 PCIe 16 ГБ
1 КБ 0,03 мс 0,03 ГБ/с 0,68% 2 КБ 0,03 мс 0,06 ГБ/с 5,69% 4 КБ 0,03 мс 0,12 ГБ/с 8,97% 8 КБ 0,03 мс 0,24 ГБ/с 6,25% 16 КБ 0,04 мс 0,44 ГБ/с 5,16 % 32 КБ 0,04 мс 0,93 ГБ/с 2,70 % 64 КБ 0,04 мс 1,77 ГБ/с 5,16 % 128 КБ 0,04 мс 3,46 ГБ/с 7,55 % 256 КБ 0,05 мс 5,27 ГБ/с 1,92 % 512 КБ 0,07 мс 7,53 ГБ/с 1,03% 1024 КБ 0,11 мс 9,25 ГБ/с 2,52% 2048 КБ 0,20 мс 10,50 ГБ/с 1,07% 4096 КБ 0,37 мс 11,41 ГБ/с 0,58% 8 192 КБ 0,71 мс 11,86 ГБ/с 0,44% 16384 КБ 1,38 мс 12,11 ГБ/с 0,14% 32 768 КБ 2,74 мс 12,23 ГБ/с 0,03% 65 536 КБ 5,46 мс 12,29 ГБ/с 0,08% 131072 КБ 10,89 мс 12,32 ГБ/с 0,02% 262144КБ 21,75мс 12,34ГБ/с 0,00% 524288КБ 43,47мс 12,35ГБ/с 0,00% 1048576КБ 86,91мс 12,35ГБ/с 0,00%
Измеряет скорость передачи данных CUDA Unified Memory с использованием триадного ядра STREAM. Используется диапазон размеров наборов данных, как меньших, так и больших, чем память устройства. Пример вывода на Tesla V100 PCIe 16 ГБ:
размер буфера, расширение полосы пропускания по времени 24 МБ 0,1 мс 3,2% 426,2 ГБ/с 48 МБ 0,1 мс 24,2% 511,6 ГБ/с 96 МБ 0,1 мс 0,8% 688,0 ГБ/с 192 МБ 0,3 мс 1,8% 700,0 ГБ/с 384 МБ 0,5 мс 0,5% 764,6 ГБ/с 768 МБ 1,0 мс 0,2% 801,8 ГБ/с 1536 МБ 2,0 мс 0,0% 816,9 ГБ/с 3072 МБ 3,9 мс 0,1% 822,9 ГБ/с 6144 МБ 7,8 мс 0,2% 823,8 ГБ/с 12288 МБ 15,7 мс 0,1% 822,1 ГБ/с 24576 МБ 5108,3 мс 0,5% 5,0 ГБ/с 49152 МБ 10284,7 мс 0,8% 5,0 ГБ/с
Измеряет задержку и пропускную способность операций FMA, DIV и SQRT. Он сканирует комбинации ILP=1..8, генерируя 1..8 независимых цепочек зависимостей, и TLP, изменяя количество варпов на SM от 1 до 32. Конечным результатом является таблица ILP/TLP с обратными значениями. производительность (циклов на операцию):
Пример вывода на Tesla V100 PCIe 16 ГБ:
ДФМА 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,14DDIV111,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,26 389,86 445,51 27,88 27,88 27,88 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,48 8,48 8,48 8,48 50,89 59,36 67,84 7,51 7,51 7,51 7,51 7,51 44,98 52,48 59,97DSQRT101,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 306,36 357,38 408,40 25,31 25,31 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 9,80 9,80 9,80 9,80 9,80 60,47 70,54 80,62 9,61 9,61 9,61 9,61 9,61 58,91 68,72 78,53
Некоторые функции можно извлечь из сюжета.
Задержки:
ДФМА: 8 циклов
DDIV: 112 циклов
DSQRT: 101 цикл
Пропускная способность одного варпа (работает на одном квадранте СМ), никаких зависимостей:
DFMA: 1/4 за цикл (ILP 2, для перекрытия операций)
DDIV: 1/112 за цикл (без ILP/перекрытия)
DSQRT: 1/101 за цикл (без ILP/перекрытия)
Пропускная способность нескольких варпов (все квадранты SM), зависимости не имеют значения:
DFMA: 1 за цикл
DDIV: 1/7,5 цикла
DSQRT: 1/9,6 цикла