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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Комментарии (2)


  1. byman
    18.10.2024 14:09

    Как всегда все очень красиво. Насколько векторное расширение ускоряет умножение матриц по сравнению с обычным, скалярным подходом? Насколько ускорит матричное расширение по сравнению с векторным? Есть ли какие-то оценки ?


    1. yadro_team Автор
      18.10.2024 14:09

      Здравствуйте! В самой первой статье есть несколько графиков по известным расширениям: https://habr.com/ru/companies/yadro/articles/827430/

      Вот, например, данные про расширение Intel AMX:

      или Power MMA: