Pull to refresh
16K+
21
Роман Сницарь@nonpareil_coder

Параллелизатор

12
Rating
3
Subscribers
Send message

Упаковщик наносит ответный удар: ZA как машина транспонирования

Level of difficultyHard
Reading time9 min
Reach and readers6.2K

В этой части мы вернёмся к работе, которую предыдущие главы принимали как готовую: упаковке. Сначала найдём скалярную ловушку в упаковке B, затем используем ZA как машину транспонирования, после этого разберём 128-битный случай для комплексных чисел и правило корректности для общего PACKM_KER. В финале соберём весь цикл одной дугой: от FMOPA до работающей субконфигурации BLIS для Apple SME.

Читать далее

Комплексный GEMM: четыре вещественных внешних произведения в одном флаконе

Reading time8 min
Reach and readers6.7K

В этой части мы сначала отделим прямой комплексный путь от готового метода 1m; затем покажем конфликт между чередующимся форматом памяти и раздельной арифметикой внешних произведений; после этого разберём четыре вещественных внешних произведения, расслоение через svuzp, эпилог с комплексными alpha и beta, а в конце — почему сопряжение остаётся работой упаковщика. Следующая часть вернёт нас к упаковке и к тому месту, где эта граница ответственности особенно важна.

Читать далее

Двойная точность: в основном «найти и заменить», плюс два настоящих сюрприза

Level of difficultyHard
Reading time7 min
Reach and readers7.5K

В этой части мы используем sgemm как шаблон и проверим, что действительно меняется при переходе к dgemm: сначала пройдём скучную часть с удвоенными ширинами, затем разберём прямоугольный тайл 16×32, после этого — отдельный бит возможностей FEAT_SME_F64F64 и динамическую регистрацию ядра. Следующая часть будет устроена иначе: там меняется не только ширина элемента, но и сама форма данных.

Читать далее

Микроядро SME2 sgemm: 1024 умножения-сложения за проход

Level of difficultyHard
Reading time8 min
Reach and readers7K

В этой части мы возьмём первый из пропусков BLIS — микроядро sgemm; сначала зафиксируем форму аккумулятора 32×32 в четырёх тайлах ZA, затем разберём горячий цикл по K, потом эпилог с alpha, beta и ловушкой NaN, а в конце посмотрим, какие числа производительности даёт именно это ядро. Следующая часть оставит структуру почти той же, но заменит геометрию тайла и условия существования ядра.

Читать далее

BLIS: недостающую среднюю ступеньку построили тридцать лет назад

Reading time8 min
Reach and readers7.9K

В этой части мы начнём с тупика, в который приводит голый цикл FMOPA; затем покажем, какую часть GEMM BLIS уже построил за нас; после этого разберём пять циклов BLIS и место микроядра внутри них. Финал главы должен сделать дальнейший план конкретным: что именно нужно добавить для Apple SME, а что уже относится к готовой «мебели» фреймворка.

Читать далее

Попробуйте найти примеры кода для SME — я подожду

Level of difficultyHard
Reading time9 min
Reach and readers7.6K

В этой части мы проверим, есть ли у SME учебная дорога, сравнимая с той, которую получили тензорные ядра GPU; затем разберём два реально полезных источника: Arm Learning Path и KleidiAI; после этого отделим то, чему они действительно учат, от того, где они останавливаются. К концу главы станет видно, какая именно «середина лестницы» отсутствует и почему следующая часть неизбежно приводит к BLIS.

Читать далее

Ваш ноутбучный процессор отрастил себе маленькое тензорное ядро

Level of difficultyHard
Reading time6 min
Reach and readers10K

Часть 1 цикла о программировании Apple Scalable Matrix Extension (SME2) — от первых принципов до промышленной реализации GEMM.

Читать далее

Efficient Computer: программируем по кафелю

Level of difficultyMedium
Reading time3 min
Reach and readers6.5K

Экспериментируем с компилятором для новой не Фон-Неймановской архитектуры, обещающей повышение энергоэффективности в 100 раз.

Читать далее

Project Euler. Векторное программирование и задача номер 1

Level of difficultyMedium
Reading time3 min
Reach and readers7K

Добавляем щепотку векторного программирования в задачки проекта Эйлер. Заодно разбираемся, как эффективно реализовать деление на константу.

Читать далее

Оптимизация языковой модели Mamba для выполнения на CPU

Level of difficultyHard
Reading time4 min
Reach and readers5.9K

Как оптимизировать модель Mamba для выполнения на CPU? Ускоряем код в 20 раз по сравнению с PyTorch, нарушая в процессе все правила оптимизации.

Читать далее

О векторном вычислении экспоненциальной функции

Level of difficultyMedium
Reading time5 min
Reach and readers6.6K

Как вычислить экспоненциальную функцию быстро и с минимальной погрешностью? Пишем векторизованный код.

Читать далее

Об ошибках округления и способах борьбы с ними

Level of difficultyMedium
Reading time6 min
Reach and readers9K

Почему при сложениии одинаковых чисел в разном порядке получаются разные результаты?
Как мининмизировать ошибки округления или избавиться от них совсем?

Читать далее

Information

Rating
633-rd
Location
Redmond, Washington, США
Registered
Activity

Specialization

Директор по обеспечению качества, Архитектор программного обеспечения
Ведущий
From 300,000 $
C#
C++
Английский язык
Разработка программного обеспечения
Java
ООП
.NET
Visual Studio
Оптимизация кода
Прикладная математика