Depository of News

Почему NumPy тормозит на матрицах 16х16 и как микроядро на AVX2 в 100 кб решает эту проблему

newsdepo.com · world

<img src="https://habrastorage.org/getpro/habr/upload_files/35f/fcc/0dc/35ffcc0dc134802eefd2355dd16ed398.jpg" /><p>Когда профилируешь вычисления или инференс небольших моделей в Python, часто натыкаешься на странную вещь: вроде бы под капотом у NumPy крутится мощный OpenBLAS или Intel MKL, но на небольших матрицах (16x16, 32x32) умножение <code>A @ B</code> работает подозрительно медленно — по 3–5 микросекунд на одну операцию.</p><p>Если ты перемножаешь матрицы 2048x2048 раз в минуту — эти микросекунды незаметны. Но когда у тебя токенная генерация с batch=1, фильтр Калмана, физический движок или обработка сенсоров в реальном времени с миллионом итераций, профайлер начинает показывать, что программа большую часть времени просто простаивает на оверхеде библиотек.</p><p>Я решил разобраться, откуда берётся этот лаг, и написать предельно компактное решение на Си с AVX2 без зависимостей, чтобы выжать максимум из одного потока процессора.</p> <a href="https://habr.com/ru/articles/1079480/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=1079480#habracut">Читать далее</a>

Read full article →