Mojo Academy · Урок

Пошаговое создание Matmul

От наивных циклов к настоящему ядру.

Урок 2 из 413 шагов

«Пошаговое создание 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 — локальная установка не требуется.

Все уроки этого курса

  1. Моделирование тензора в Mojo
  2. Пошаговое создание Matmul
  3. Оптимизация скалярного произведения
  4. Проверка числовой корректности
← Назад к Mojo Academy