Как стать автором
Обновить

Теоретическая и реальная производительность Intel AMX

Уровень сложностиСложный
Время на прочтение11 мин
Количество просмотров4.7K
Всего голосов 28: ↑28 и ↓0+30
Комментарии12

Комментарии 12

Это в 16 раз больше того, что можно достичь при использовании AVX-512 в формате float32.

Всё таки стоит сравнивать с AVX512_BF16

И, кстати, с oneDNN не сравнивались?

Тут такое дело, что AVX512_BF16 отдельно от AMX достаточно редко встречается (в Cooper Lake есть, в следующем поколении Ice Lake его уже нет). Но в целом с замечанием согласен.

С oneDNN пока не сравнивал. Было желание самому разобраться с тем как это работает.

Тут такое дело, что AVX512_BF16 отдельно от AMX достаточно редко встречается

А нет ли смысла (и возможно ли) использовать и то и другое одновременно?

Было желание самому разобраться с тем как это работает.

Да, для самообразования (и образования других) работа отличная. Но стоит посмотреть, сколько ещё могут выжать профессионалы (всё таки нюансов там много, скажем даже при обычном умножении матриц на SSE/AVX/AVX512 кроме обычного кеша надо думать ещё про TLB).

А нет ли смысла (и возможно ли) использовать и то и другое одновременно?

Я первым делом померял производительность AVX512_BF16 на Sapphire Rapids. Может я его не правильно использовал, но получилось, что он работает в 2 раза медленнее обычного AVX512. По сути бесполезен. Я так огорчился, что даже выпилил весь код с ним из Simd.

Да, для самообразования (и образования других) работа отличная. Но стоит посмотреть, сколько ещё могут выжать профессионалы (всё таки нюансов там много, скажем даже при обычном умножении матриц на SSE/AVX/AVX512 кроме обычного кеша надо думать ещё про TLB).

Смотрю разное, изучаю. Если будут какие нюансы обнаружены, добавлю в статью.

Пока писал статью, нашел нюансы позволяющие выжать дополнительные 20% :)

  1. Правильно ли я понимаю, що блок Intel AMX идет один на каждое ядро?

  2. Если этот блок находится отдельно, есть ли возможность одновременно исполнять код на обычных регистрах или AVX/AVX2/AVX512 и на AMX одновременно?

  3. Если результат умножения матриц мне нужен для дальнейше работы, я должен его выгрузить в L1/L2/L3 кеш перед тем как использовать инструкции AVX/AVX2/AVX512?

  1. Да судя по результатам тестов блок AMX один на ядро. Я пробовал запускать команды AMX последовательно и с возможностью их одновременного исполнения. Если бы там было больше одного исполняемого устройства, то это было бы видно, но результат идентичен для обоих случаев.

  2. Операции AMX выполняются синхронно. Операция матричного умножения выполняется 16 тактов. Судя по содержанию конфигурационного регистра, ОС может прервать выполнение этой инструкции и потом продолжить исполнение с произвольной позиции (за это отвечает параметр startRow). На пользовательском уровне что-либо подобное сделать нельзя. При любом изменении конфигурации происходит очистка регистров с данными.

  3. AMX регистры могут работать только с памятью (кэшем). Из обычных регистров туда что-либо загрузить или выгрузить нельзя, хотя было бы очень удобно для ряда операций (подготовка данных на лету, пост обработка результатов).

  1. Есть ли информация про roadmap AMX, я не смог ничего найти про возможные расширения инструкций?

  2. Слышно ли о планах AMD имплементировать его?

  1. В следующем (шестом) поколении серверных процессоров Granite Rapids ожидается добавление в AMX поддержки формата FP16 (5 бит экспонента, 10 бит мантисса), а также комплексных (тоже FP16) чисел.

  2. Искал, но ничего не нашел. С одной стороны, АМД только недавно внедрили полноценный AVX-512. С другой стороны, если они через несколько лет внедрят AMX сразу за один раз (INT8, BF16, FP16) может будет даже лучше с точки зрения поддержки. А вообще, как мне кажется, AMX в той или иной форме - это практически единственный путь дальнейшего повышения производительности, если не считать дальнейшее увеличение числа ядер.

AMX в той или иной форме - это практически единственный путь дальнейшего повышения производительности

На достаточно узком наборе ворклоадов, где ещё и с GPU приходится конкурировать.

Тут не поспоришь.

А какая будет максимальная производительность на все ядра? AVX512 догонит или в 2 раза медленее будет?

Блок AMX в каждом ядре стоит. Так что если задача достаточно большая, то AMX практически всегда обгоняет AVX-512. Если смотреть на более реальных задачах задачах инференса моделей целиком, то AMX обгоняет AVX-512 в 2-3 раза.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории