Обновить

Комментарии 10

Монументальный труд, спасибо! Есть же люди, которым не лень учить других!

Вопрос: а если я использую NumPy, там всё эффективно реализовано?

numpy при сборке ищет BLAS/LAPACK. Если Apple BLAS найдётся при сборке, то будет эффективно.

В miniconda, кажись, numpy собран с openblas, а там есть реализация с использованием ARM SME2, так что должно работать, но я не проверял.

Наблюдаются странности со временем выполнения при размерностях матриц, равных степени двойки.

А на маке есть инструменты, позволяющие замерить доступы/миссы по кешам (типа perf в Linux)? Есть подозрение, что при "круглых" размерах разные доступы попадают в один и тот же set кеша и ассоциативности не хватает, чтобы разрулить конфликты - но это только предположение, детально код не смотрел и в любом случае при возможности лучше явно измерить.

Главный инструмент в macOS для оценки производительности Xcode Instruments, но у меня с ним как-то раньше не задалось. Надо бы протестить, но код из статьи только с целью разобраться, что да как устроено и понять насколько код написанный "на коленке" хуже чем то, что реализовано производителем в BLAS. Так что результат меня устраивает и больше тратить время на эту задачу не хочется)

Вот это статья, так статья. Статьища! Хабр - торт

Подскажите, "заполненные матрицы" в большинстве мест в статье и "плотные матрицы" в одном из заголовков ("Базовый вариант умножения плотных матриц") - это же синонимы? Это два варианта перевода dense matrix?

Да, все верно, я приводил к единообразию, но похоже что-то пропустил

Спасибо за статью, было интересно прочитать. Ранее в рамках интереса выполнял похожую задачу с разницей того, что это всё не на CPU а на GPU используя OpenCL/CUDA. Если кому-то интересно, исследовательскую работу провел товарищ из Европы - https://cnugteren.github.io/tutorial/pages/page1.html

Большая была разница в производительности между CUDA и OpenCL?

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации