Блок AMX в каждом ядре стоит. Так что если задача достаточно большая, то AMX практически всегда обгоняет AVX-512. Если смотреть на более реальных задачах задачах инференса моделей целиком, то AMX обгоняет AVX-512 в 2-3 раза.
Если интересует практика использования AMX и как его применять для реального умножения матриц, то могу порекомендовать: https://habr.com/ru/articles/807033/
Если смотреть на Intel AMX, то по умолчанию матричные регистры отключены. Их включают перед использованием и выключают после них. На сколько я понимаю, как раз чтобы избежать указанные вами проблемы с переключением контекста.
В следующем (шестом) поколении серверных процессоров Granite Rapids ожидается добавление в AMX поддержки формата FP16 (5 бит экспонента, 10 бит мантисса), а также комплексных (тоже FP16) чисел.
Искал, но ничего не нашел. С одной стороны, АМД только недавно внедрили полноценный AVX-512. С другой стороны, если они через несколько лет внедрят AMX сразу за один раз (INT8, BF16, FP16) может будет даже лучше с точки зрения поддержки. А вообще, как мне кажется, AMX в той или иной форме - это практически единственный путь дальнейшего повышения производительности, если не считать дальнейшее увеличение числа ядер.
Да судя по результатам тестов блок AMX один на ядро. Я пробовал запускать команды AMX последовательно и с возможностью их одновременного исполнения. Если бы там было больше одного исполняемого устройства, то это было бы видно, но результат идентичен для обоих случаев.
Операции AMX выполняются синхронно. Операция матричного умножения выполняется 16 тактов. Судя по содержанию конфигурационного регистра, ОС может прервать выполнение этой инструкции и потом продолжить исполнение с произвольной позиции (за это отвечает параметр startRow). На пользовательском уровне что-либо подобное сделать нельзя. При любом изменении конфигурации происходит очистка регистров с данными.
AMX регистры могут работать только с памятью (кэшем). Из обычных регистров туда что-либо загрузить или выгрузить нельзя, хотя было бы очень удобно для ряда операций (подготовка данных на лету, пост обработка результатов).
А нет ли смысла (и возможно ли) использовать и то и другое одновременно?
Я первым делом померял производительность AVX512_BF16 на Sapphire Rapids. Может я его не правильно использовал, но получилось, что он работает в 2 раза медленнее обычного AVX512. По сути бесполезен. Я так огорчился, что даже выпилил весь код с ним из Simd.
Да, для самообразования (и образования других) работа отличная. Но стоит посмотреть, сколько ещё могут выжать профессионалы (всё таки нюансов там много, скажем даже при обычном умножении матриц на SSE/AVX/AVX512 кроме обычного кеша надо думать ещё про TLB).
Смотрю разное, изучаю. Если будут какие нюансы обнаружены, добавлю в статью.
Пока писал статью, нашел нюансы позволяющие выжать дополнительные 20% :)
Тут такое дело, что AVX512_BF16 отдельно от AMX достаточно редко встречается (в Cooper Lake есть, в следующем поколении Ice Lake его уже нет). Но в целом с замечанием согласен.
С oneDNN пока не сравнивал. Было желание самому разобраться с тем как это работает.
10 см пучка в диаметре я лично не видел :) - это у очень мощных лазеров, таких в нашей лаборатории не было. Но вообще диаметр пучка ограничивается диаметром активной зоны и диаметром зеркала резонатора. Других причин нет.
Не совсем так. Дифракционное рассеяние лазерного пучка (угловое расхождение) обратно пропорционально диаметру пучка: ~(длина волны) / (диаметр пучка). А расстояние на котором лазерный пучок расходится в двое ~(диаметр пучка)^2 / (длина волны). 1 мм лазерный луч расходится на расстоянии 1 м, а 10 см на расстоянии -10 км.
Действительно: E=q*U=m*V^2/2 => V = Sqrt(q*U * 2 / m ), Скорость истечения обратно пропорциональна корню молярной массы вещества. Однако изменение импульса P = V*m = Sqrt(E * 2 * m ) уже пропорционально корню молярной массы при заданной энергии. Так как все современные ионные двигатели ограничены в основном со стороны источников питания, то естественно, что в качестве рабочего тела логично использовать наиболее тяжелые ионы для создания наибольшей тяги.
Как бы существует большая разница между прототипом распознавания какой-либо ситуации или объекта при помощи нейросети, которое сейчас достаточно легко на коленке реализуется любым студентом и законченным продуктом, когда задача дожна быть решена с заданной точностью и эффективностью.
Спасибо за статью. Я бы добавил небольшой раздел про то, как определить наличие этого самого расширения AVX-512VBMI (далеко не каждый сервер его поддерживает, не говоря уже про десктоп). А так же что, делать если такого расширения нет.
Он ориентирован в основном на однопоточную производительность и оптимизирован под основные процессорные расширения (SSE, AVX, AVX-512, AMX, NEON) (по этому направлению опережает OpenVINO). Он поддерживает конвертацию из формата ONNX и OpenVINO. А также динамическую квантизацию моделей.
Как раскрутить астероид для создания искусственной гравитации и не разрушить его, с учетом того, что они по большей части представляют собой слабосвязанную кучу камней?
Блок AMX в каждом ядре стоит. Так что если задача достаточно большая, то AMX практически всегда обгоняет AVX-512. Если смотреть на более реальных задачах задачах инференса моделей целиком, то AMX обгоняет AVX-512 в 2-3 раза.
Водород получают из природного газа. Электролизом будет дороже в разы. Но это так для уточнения.
Если интересует практика использования AMX и как его применять для реального умножения матриц, то могу порекомендовать: https://habr.com/ru/articles/807033/
Если смотреть на Intel AMX, то по умолчанию матричные регистры отключены. Их включают перед использованием и выключают после них. На сколько я понимаю, как раз чтобы избежать указанные вами проблемы с переключением контекста.
Я ни разу не сварщик, но предположу вариант: нарушение механизма блокировки по каким-то причинам?
Тут не поспоришь.
В следующем (шестом) поколении серверных процессоров Granite Rapids ожидается добавление в AMX поддержки формата FP16 (5 бит экспонента, 10 бит мантисса), а также комплексных (тоже FP16) чисел.
Искал, но ничего не нашел. С одной стороны, АМД только недавно внедрили полноценный AVX-512. С другой стороны, если они через несколько лет внедрят AMX сразу за один раз (INT8, BF16, FP16) может будет даже лучше с точки зрения поддержки. А вообще, как мне кажется, AMX в той или иной форме - это практически единственный путь дальнейшего повышения производительности, если не считать дальнейшее увеличение числа ядер.
Да судя по результатам тестов блок AMX один на ядро. Я пробовал запускать команды AMX последовательно и с возможностью их одновременного исполнения. Если бы там было больше одного исполняемого устройства, то это было бы видно, но результат идентичен для обоих случаев.
Операции AMX выполняются синхронно. Операция матричного умножения выполняется 16 тактов. Судя по содержанию конфигурационного регистра, ОС может прервать выполнение этой инструкции и потом продолжить исполнение с произвольной позиции (за это отвечает параметр
startRow)
. На пользовательском уровне что-либо подобное сделать нельзя. При любом изменении конфигурации происходит очистка регистров с данными.AMX регистры могут работать только с памятью (кэшем). Из обычных регистров туда что-либо загрузить или выгрузить нельзя, хотя было бы очень удобно для ряда операций (подготовка данных на лету, пост обработка результатов).
Я первым делом померял производительность AVX512_BF16 на Sapphire Rapids. Может я его не правильно использовал, но получилось, что он работает в 2 раза медленнее обычного AVX512. По сути бесполезен. Я так огорчился, что даже выпилил весь код с ним из Simd.
Смотрю разное, изучаю. Если будут какие нюансы обнаружены, добавлю в статью.
Пока писал статью, нашел нюансы позволяющие выжать дополнительные 20% :)
Тут такое дело, что AVX512_BF16 отдельно от AMX достаточно редко встречается (в Cooper Lake есть, в следующем поколении Ice Lake его уже нет). Но в целом с замечанием согласен.
С oneDNN пока не сравнивал. Было желание самому разобраться с тем как это работает.
10 см пучка в диаметре я лично не видел :) - это у очень мощных лазеров, таких в нашей лаборатории не было. Но вообще диаметр пучка ограничивается диаметром активной зоны и диаметром зеркала резонатора. Других причин нет.
Не совсем так. Дифракционное рассеяние лазерного пучка (угловое расхождение) обратно пропорционально диаметру пучка: ~(длина волны) / (диаметр пучка). А расстояние на котором лазерный пучок расходится в двое ~(диаметр пучка)^2 / (длина волны). 1 мм лазерный луч расходится на расстоянии 1 м, а 10 см на расстоянии -10 км.
Да к стати. Недавно нужно было реализовать быструю SIMD версию функций cos() и sin().
Использовал полиномы Чебышева. Если кому интересно: версии SSE/AVX/AVX-512 : https://github.com/ermig1979/Simd/blob/master/src/Simd/SimdTrigonometric.h
Хоть картошка и не теплокровная, но вполне себе живая и дышит. И выделяет тепло, особенно при гниении.
Действительно: E=q*U=m*V^2/2 => V = Sqrt(q*U * 2 / m ), Скорость истечения обратно пропорциональна корню молярной массы вещества. Однако изменение импульса P = V*m = Sqrt(E * 2 * m ) уже пропорционально корню молярной массы при заданной энергии. Так как все современные ионные двигатели ограничены в основном со стороны источников питания, то естественно, что в качестве рабочего тела логично использовать наиболее тяжелые ионы для создания наибольшей тяги.
Как бы существует большая разница между прототипом распознавания какой-либо ситуации или объекта при помощи нейросети, которое сейчас достаточно легко на коленке реализуется любым студентом и законченным продуктом, когда задача дожна быть решена с заданной точностью и эффективностью.
Спасибо за статью. Я бы добавил небольшой раздел про то, как определить наличие этого самого расширения AVX-512VBMI (далеко не каждый сервер его поддерживает, не говоря уже про десктоп). А так же что, делать если такого расширения нет.
Если кому интересно, то с 18 года разрабатываю фреймворк для запуска обученных нейронных сетей на CPU:
https://github.com/ermig1979/Synet
Он ориентирован в основном на однопоточную производительность и оптимизирован под основные процессорные расширения (SSE, AVX, AVX-512, AMX, NEON) (по этому направлению опережает OpenVINO). Он поддерживает конвертацию из формата ONNX и OpenVINO. А также динамическую квантизацию моделей.
Как раскрутить астероид для создания искусственной гравитации и не разрушить его, с учетом того, что они по большей части представляют собой слабосвязанную кучу камней?
Красивая математика, но в реальных алгоритмах не взлетит, как и алгоритм Штрассена впрочем.