Пошаговое создание Matmul
От наивных циклов к настоящему ядру.
«Пошаговое создание Matmul» — бесплатный урок Mojo Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Mojo Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Mojo Academy содержит 4 уроков всего.
Что вычисляет matmul
Умножение матриц, или matmul, объединяет матрицу размера M на K с матрицей размера K на N и формирует результат размера M на N. Это основа вычислений в ИИ.
Правило скалярного произведения
Каждая ячейка результата — это скалярное произведение: пройдите по одной строке A и одному столбцу B, перемножая элементы и складывая результаты.
Три вложенных цикла
Наивная версия использует три цикла по i, j и k. Два внешних цикла выбирают ячейку результата, а внутренний складывает произведения.
for i in range(M):
for j in range(N):
for k in range(K):
C[i, j] += A[i, k] * B[k, j]Начинайте каждую ячейку с нуля
Перед накоплением установите каждую ячейку результата в ноль. Иначе старые или случайные значения исказят сумму.
C[i, j] = 0.0Накапливайте сумму
Внутренний цикл по k поддерживает текущее значение накопителя. Суммирование в локальную переменную часто быстрее, чем обращение к C на каждом шаге.
var acc: Float32 = 0.0
for k in range(K):
acc += A[i, k] * B[k, j]
C[i, j] = accИспользуйте fn для ускорения
Напишите ядро с помощью fn и типизированных аргументов. Строгая типизация позволяет Mojo компилировать компактный машинный код без динамических накладных расходов.
fn matmul(A: Matrix, B: Matrix, C: Matrix):
passПочему наивный вариант медленный
Базовый тройной цикл выполняет правильные вычисления, но читает B по столбцам, перескакивая по памяти. Плохая локальность приводит к потерям времени и неэффективному использованию кэша.
Порядок циклов имеет значение
Перестановка циклов в порядок i, k, j позволяет внутреннему циклу последовательно проходить память. Более удачные шаблоны доступа могут значительно ускорить matmul.
for i in range(M):
for k in range(K):
for j in range(N):
C[i, j] += A[i, k] * B[k, j]Цель — внутренний цикл
Почти всё время приходится на самый внутренний цикл. Именно в этом внутреннем цикле особенно полезны векторизация и оптимизация.
Сначала правильность
Сначала добейтесь правильной работы простой версии и сохраните её результат. Он станет эталоном, с которым Вы будете сравнивать каждое более быстрое ядро.
Путь к настоящему ядру
Затем Вы добавите SIMD, разбиение на блоки и параллелизм. Каждый шаг сохраняет тот же результат, но увеличивает пропускную способность, приближая её к максимальной скорости оборудования.
Быстрая проверка
Почему учебная реализация matmul с тройным циклом часто работает медленно на практике?
Повторение
Matmul вычисляет скалярное произведение для каждой ячейки результата с помощью трёх циклов; начинайте ячейки с нуля, накапливайте сумму локально и учитывайте порядок циклов для эффективной работы кэша. 🔢
Изучай Mojo с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 30
- Уроки
- 120
Часто задаваемые вопросы
Урок «Пошаговое создание Matmul» бесплатный?
Да — полный текст урока «Пошаговое создание Matmul» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Mojo Academy, подпишись на CoddyKit PRO. Курс Mojo Academy содержит 4 уроков всего.
Чему я научусь в уроке «Пошаговое создание Matmul»?
От наивных циклов к настоящему ядру. Ты практикуешь Mojo Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Mojo Academy?
Предыдущий опыт не требуется. Mojo Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Пошаговое создание Matmul»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Mojo Academy?
Да. Каждый урок Mojo Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Моделирование тензора в Mojo
- Пошаговое создание Matmul
- Оптимизация скалярного произведения
- Проверка числовой корректности