Comments 16
Я правильно понимаю, что в взяли серверную платформу на серверных процах с десктопной вендой и картой nvidia, и сравнили в компьютером на убунте и проц которого наиболее эффективен с двумя каналами памяти, при том что у вас один модуль всего, и видеокартой амд?
Вас ничего не смущает? Например совершенно зазря потраченное время? Вы ничего не сравнили совершенно. Тест бесполезен чуть больше чем полностью.
Посмотрите внимательно исходный файл. Там учитывается время затраченное именно на вычисления, без пересылки данных. Эффективность ОЗУ как и процессора здесь роли практически не играет. Версия PCI-E на обеих системах одинаковая.
В плане ОС. Единственное на что она не существенно влияет, это время пересылки данных в GPU. Но это время опять же не учитывалось.
Продолжайте писать посты! Читаю, и вдруг вижу, из песочницы
Непонятно, что автор хотел показать.
По части компилирования для AMD, HIP и CUDA в clang (а именно его использует AMD в последних версиях) используют один и тот же front-end, с незначительными изменениями имен макросов и функций рантайма. Так что портирование действительно относительно просто.
Но есть нюанс.
Переносимый код != переносимая производительность. Код быстро раборающий на NVIDIA не обязательно будет оптимальным для совершенно другой архитектуры. Особенно такой код, как умножение матриц, где авторы изощряются в использовании всех мелочей архитектуры.
Так что сравнение вышло яблок с апельсинами.
Тем не менее, много есть решений построенных именно на CUDA. Возможность их запустить на amd железе - полезно хотя бы для опробования самой технологии. При необходимости оптимизировать можно на следующем этапе, поначалу же надо понять нужно ли оно вообще.
В целом производительность видеокарт одинаковая, но напрягает что разные сборки пк. Но в лбом случае есть над чем задуматься. а еще нужны различны тесты с одинаковыми исходными параметрами. Не только перемножение матриц но допустим нахождение определителя матриц или вычитание и сложение....
Очень интересно и спасибо автору за статью!
Я вообще не понимал, что у АМД происходит.
Все научные вычисления делаются на Куде, либо на OpenCL, второго на два порядка меньше.
Nvidia проводит какие-то семинары, популяризирует Куду, а со стороны АМД - тишина.
Тем не менее вопрос - а что у АМД с двойной точностью? Для научных расчетов это важно.
Тем не менее вопрос - а что у АМД с двойной точностью? Для научных расчетов это важно.
Она гораздо лучше, чем у Nvidia. У Nvidia в 64 раза медленнее 32-битных, а у AMD всего в 16. Я, как раз недавно для доклада на PiterPy делал таблицу сравнения производительности. AMD 6960XT в fp64 чуть быстрее Nvidia 4090.
Я вообще не понимал, что у АМД происходит.
Ходят слухи, что ROCm делался для единственного заказчика (см. суперкомпьютер El Capitan). Тогда понятно, почему нет винды, почему забили болт на поддержку RDNA 1 (карты 5000 серии) и т. д.
Винда уже: OpenCL рантайм виндошный перешёл на ROCm на новых картах.
Винда ещё нет: https://docs.amd.com/bundle/ROCm-Installation-Guide-v5.3.3/page/Introduction_to_ROCm_Installation_Guide_for_Linux.html#d5494e830
Никакой rocBLAS или другие библиотеки не поддерживают винду.
Но ABI ядер на RDNA действительно такое же, как у ROCm.
Так вы сравнивали с игровыми видеокартами. Для двойной точности у NVidia смотрите ускорители серии Tesla.
Только она стоит как самолёт.
Так и считают на fp64 в основном как раз всякие физические модели. Те-же самолеты, ядренные бомбы и погоду. Для Machine Learning fp32 обычно более чем достаточно, bf16 - примерно оптимально, fp16 чуть хуже и тут часто не-Tesla GPU могут выигрывать.
NVIDIA сегментирует свой рынок весьма эффективно (или агрессивно?). Те-же Quadro и Titan карточки тоже стоят существенно дороже просто потому, что их покупатели готовы платить, даже когда железо практически то же, что и в игровых картах. Ну а за все фичи сразу, просто грех денег не взять. :-)
Сравнение производительности платформ
Скажите, пожалуйста, на Nvidia использовались тензорные ядра или нет?
UPD: посмотрел в код, тензорных ядер нет, вопрос снят.
Почему бы при сравнении платформ не указать сначала заявленную производительность вычислительных ядер GPU и памяти?
Nvidia RTX 3070: fp32: 20.31 TFLOPS fp16: 20.31 TFLOPS (1:1) fp64: 317.4 GFLOPS (1:64) Memory Bandwidth 448.0 GB/s.
AMD RX 6800XT: fp 32: 20.74 TFLOPS fp16: 41.47 TFLOPS (2:1) fp64: 1,296 GFLOPS (1:16) Memory Bandwidth 512.0 GB/s.
А ещё было бы хорошо в профайлере посмотреть, во что упирается производительность: в память или вычислительные блоки хотя бы на Nvidia (а то на AMD ужасный профайлер).
В данном примере мы видим, что из-за особенностей архитектуры AMD (меньшее количество блоков для операций над 32-битными числами)
Тем не менее, fp32 на обеих картах заявлено около 20 TFLOPS (см. techpowerup). Я полагаю, что у этого ядра на ROCm проблемы с оптимизацией.
В случае с операциями на 16-битными числами преимущество в скорости вычислений на стороне платформы ROCm.
У видеокарты 6800XT fp16 в два раза быстрее, чем на 3070. Но результат очень странный. Почему у AMD при размере матриц в сто раз больше время работы стало выше всего в десть раз? Было бы интересно поисследовать этот момент.
Это моя первая статья на habr.
Пишите ещё! Если добавить информации в сравнение, получится вообще отличная статья.
Запуск кода CUDA на видеокартах AMD