Антология матричных расширений: от популярного обзора до запуска на эмуляторе

937944ff50abb9aa8fc3ea7573220bf5.png

Матричные расширения в мире технологий появились лишь в 2020 году. Даже в сравнении с относительно «молодыми» темами искусственного интеллекта и квантовых вычислений это буквально «новорожденный» материал в IT-мире. И что самое интересное, матричные расширения уравняли тот разрыв в развитии, который существует между процессорными архитектурами. Свои расширения создают и Intel, и Apple, и IBM, и рабочие группы международного альянса RISC-V. 

Как это ни парадаксально, по числу матричных расширений RISC-V уже обогнала все остальные архитектуры. Сейчас для нее разработаны два кастомных расширения, а два стандартных развиваются буквально у нас на глазах. Если хотите разобраться в многообещающей для высокопроизводительных вычислений теме, изучите тексты в нашей подборке. От объяснения, что такое матричные расширения и какие они бывают, мы плавно погрузимся в спецификации разработки и протестируем матричное расширение на эмуляторе.

Первое погружение: зачем вообще ускорять CPU в век ускорителей и какие матричные расширения бывают  

Все довольно просто: расширения нужны для ускорения матричных операций. А последние — это основные хот-споты для приложений в сфере компьютерного зрения, AI/ML, дополненной реальности, математического моделирования и других. Спрос на вычислительные мощности для них растет так, что характеристики железа за ним не поспевает. В первую очередь требуется ускорение операций, связанных с умножением матриц. 

Вы можете подумать, что матричные нагрузки — это что-то для суперкомпьютеров и мощные вычислительных кластерах. Но на самом деле мы постоянно сталкиваемся с ними на самых обычных смартфонах, когда обрабатываете фотографии или видео, на планшетах, ноутбуках и не самых мощных персональных компьютерах без видеокарт.

Что вы узнаете из текста:  

  • Как ускоряли матричные операции на CPU до появления расширений.

  • Как расширения ускоряют вычисления.

  • Какие бывают виды матричных расширений.

  • Что мы знаем о существующих матричных расширениях, разработанных вендорами.

  • Какие показатели ускорения матричных операций демонстрируют расширения.

a36f7d730fa14b780bc73a1bf87c2563.png

Читать подробнее → 

Погружаемся в матричные расширения для архитектуры RISC-V

Матричные расширения для открытой архитектуры представляют особый интерес. Как минимум потому, что все наработки можно изучить и даже начать тестировать в своей работе. Чего не скажешь о проприетарных расширениях, информацию о которых найти в разы сложнее. 

В конце 2023 года международный консорциум RIDC-V сформировал две рабочие группы: одна разрабатывает интегрированное матричное расширение (IME), а вторая — независимое (AME). За работой обеих можно буквально наблюдать онлайн — на GitHub соответствующих рабочих групп (IME TG и AME TG). 

Несмотря на похожие дорожные карты, у этих стандартных матричных расширений свой путь. Так, они по-разному декомпозируют блоки матриц по векторным регистрам. При этом  обе рабочие группы единодушны в решении о поддержке разреженных матриц. Это матрицы с преимущественно нулевыми элементами. Для разреженных матриц существуют специальные форматы хранения, чтобы не тратить память компьютера на многочисленные нули, а для операций над ними разработаны специальные алгоритмы, исключающие эти нули из вычислений. 

5aabc653b063714da6abc0b879d68e11.png

Что вы узнаете из текста:  

  • Почему компания T-Head выбрала независимый тип матричного расширения. 

  • Какие варианты декомпозиции блоков матриц по векторным регистрам рассматривает рабочая группа интегрированного расширения. 

  • Как выглядит работа с разреженными матрицами в независимом матричном расширении. 

Узнать больше → 

Зум на матричное расширение от T-Head 

Если вы готовы погрузиться еще дальше, тут не обойтись без практики — и мы постепенно к ней подходим. В третьем тексте антологии рассмотрим под лупой независимое матричное расширение для RISC-V. 

Прочитав этот текст, вы можете попробовать реализовать алгоритм с использование этого матричного расширения, соотнести эту практику с предыдущим опытом низкоуровневых оптимизаций. А самые любопытные могут написать программу для расширения, которого еще нет ни в одном процессоре, и запустить ее на эмуляторе.

Само расширение дружелюбно к «новичкам»: его ISA минималистична и подходит для первых опытом использования матричного расширения в своем коде. 

Чем полезен текст:  

  • Разберетесь в спецификации матричного расширения — последовательно, блок за блоком. 

  • Посмотрите на реализацию поэлементного произведения блоков матрицы при помощи матричного расширения от T-Head. 

Узнать больше → 

Матричные расширения на практике 

В заключительной статье цикла разберем пример использования матричного расширения T-Head под RISC-V для реализации алгоритма матричного умножения. Сначала кратко рассмотрим наивную скалярную реализацию и блочный вариант алгоритма. Затем реализуем аналогичный вариант с использованием матричного. 

В заключение инженер поделится идеями, которые помогут в дальнейшей оптимизации матричного умножения, и полезными ссылками.  

f07273d2ec99fe7e7aba45ca98bc4989.png

Что вы узнаете из текста:  

  • С каким эмулятором лучше работать, чтобы протестировать матричное расширение. 

  • Где найти тулчейн RISC-V для сборки.  

  • Как выглядит скалярная реализация алгоритма умножения матриц. 

  • И как реализовать матричную реализацию — чем она отличается от скалярной. 

Узнать больше → 

Если вас интересует конкретная тема в области матричных расширений, пишите в комментариях! Будем рады продолжить этот цикл новыми статьями. 

© Habrahabr.ru