Прочитал безумно интересную статью о новом алгоритме для перемножения матрицы на неё же, но перевёрнутую – транспонированную. Если вы когда-либо применяли PCA (метод главных компонент) или линейную регрессию, то там используется эта операция. Как и ещё в куче мест Не без помощи ИИ авторы нашли алгоритм, который делает это быстрее! Матрицы можно перемножать эффективнее, чем так как вас учили в университете – это показал Штрассен ещё в прошлом веке. А некоторые частные случаи могут быть решены ещё быстрее. Например, для матриц специального размера это совсем недавно показали в Дипмайнде. А перемножение матрицы на её транспонированную обладает симметричной структурой, которой можно воспользоваться для ещё более эффективного алгоритма Однако в комментариях к посту о статье жаловались, что авторы не провели эксперименты на GPU – видеокартах. А это как раз самое интересное, все самые тяжёлые вычисления (как, например, тренировка больших языковых моделей) происходят на них. Мне захотелось потратить выходные, чтобы написать этот алгоритм для видеокарт, а заодно стряхнуть пыль со знаний C++ и разобраться как вообще выглядит такое программирование Три недели спустя алгоритм был наконец написан, а баги отловлены. В процессе мне удалось его даже улучшить. Для вычисления результата авторы вводят 47 дополнительных переменных. На видеокартах заводить дополнительные переменные и выделять память под них – дорого, важно избежать каждой лишней операции. И мне удалось вместить все вычисления в память результирующей матрицы. Выделять дополнительную не нужно совсем! К моему удивлению, готовый алгоритм заработал медленнее, чем стандартный из библиотеки от NVIDIA. Пусть в ней и не оптимальный алгоритм, куча инженеров и миллионы долларов, потраченных на их работу, привели к тому, что он отполирован донельзя и работает лучше, чем теоретически более быстрый. Впрочем, нам удалось догнать и перегнать стандартный алгоритм на больших матрицах. И это с минимумом оптимизаций! Если написать более низкоуровневый алгоритм на уровне ядер, вычисления станут ещё быстрее Если вам близка эта тема, загляните в репозиторий: https://github.com/VladimirShitov/RTXX-CUDA . Звёздочки (а тем более улучшения) крайне приветствуются! #программирование@chelovek_nauk