Алгоритм умножения матриц
Поскольку умножение матриц является центральной операцией во многих числовых алгоритмах , много работы было вложено в повышение эффективности алгоритмов умножения матриц . Применение умножения матриц в вычислительных задачах можно найти во многих областях, включая научные вычисления и распознавание образов, а также в, казалось бы, несвязанных задачах, таких как подсчет путей в графе . [ 1 ] Для умножения матриц было разработано множество различных алгоритмов на разных типах оборудования, включая параллельные и распределенные системы, где вычислительная работа распределена по нескольким процессорам (возможно, по сети).
Непосредственное применение математического определения умножения матриц дает алгоритм, требующий времени порядка n. 3 полевые операции для умножения двух матриц размера n × n над этим полем ( Θ( n 3 ) в большой записи O ). Лучшие асимптотические границы времени, необходимого для умножения матриц, были известны со времен алгоритма Штрассена в 1960-х годах, но оптимальное время (то есть вычислительная сложность умножения матриц ) остается неизвестным. По состоянию на апрель 2024 г. [update], наилучшая заявленная оценка асимптотической сложности алгоритма умножения матриц равна O( n 2.371552 ) время, данное Уильямсом , Сюй, Сюй и Чжоу. [ 2 ] [ 3 ] Это улучшает оценку O( n 2.3728596 ) время, данное Алманом и Уильямсом. [ 4 ] [ 5 ] Однако этот алгоритм является галактическим из-за больших констант и не может быть реализован практически.
Итерационный алгоритм
[ редактировать ]Определение умножения матриц таково: если C = AB для размера n × m матрицы A и размера m × p матрицы B , то C является матрицей размера n × p с элементами
Исходя из этого, можно построить простой алгоритм, который циклически перебирает индексы i от 1 до n и j от 1 до p , вычисляя вышеуказанное с помощью вложенного цикла:
- Входные данные: матрицы A и B.
- Пусть C — новая матрица соответствующего размера.
- Для i от 1 до n :
- Для j от 1 до p :
- Пусть сумма = 0
- Для k от 1 до m :
- Установить сумму ← sum + A ik × B kj
- Установить C ij ← am
- Для j от 1 до p :
- Возврат С
Этот алгоритм требует времени Θ( nmp ) (в асимптотических обозначениях ). [ 1 ] Обычное упрощение для анализа алгоритма состоит в том, чтобы предположить, что все входные данные представляют собой квадратные матрицы размера n × n , и в этом случае время работы равно Θ( n 3 ) , т. е. кубической по размеру размерности. [ 6 ]
Поведение кэша
[ редактировать ]Три цикла итеративного умножения матриц можно произвольно менять местами без влияния на корректность или асимптотическое время выполнения. Однако порядок может оказать значительное влияние на практическую производительность из-за шаблонов доступа к памяти и использования кэша алгоритма; [ 1 ] какой порядок лучше всего также зависит от того, хранятся ли матрицы в порядке по строкам, по столбцам или в их сочетании.
В частности, в идеализированном случае полностью ассоциативного кэша, состоящего из M байтов и b байтов на строку кэша (т.е. M / b строк кэша), приведенный выше алгоритм неоптимален для A и B, хранящихся в порядке строк. Когда n > M / b , каждая итерация внутреннего цикла (одновременный просмотр строки A и столбца B к элементу B. ) вызывает промах в кэше при доступе Это означает, что алгоритм несет Θ( n 3 ) в худшем случае кэш промахивается. По состоянию на 2010 год [update], скорость памяти по сравнению со скоростью процессоров такова, что промахи в кэше, а не фактические вычисления, доминируют над временем работы для матриц значительного размера. [ 7 ]
Оптимальным вариантом итерационного алгоритма для A и B в макете с разбивкой по строкам является мозаичная версия, в которой матрица неявно делится на квадратные плитки размером √ M на √ M : [ 7 ] [ 8 ]
- Входные данные: матрицы A и B.
- Пусть C — новая матрица соответствующего размера.
- Выберите размер плитки T = Θ( √ M )
- Для I от 1 до n с шагом T :
- Для J от 1 до p с шагом T :
- Для K от 1 до m с шагом T :
- Умножим A I : I + T , K : K + T и B K : K + T , J : J + T на C I : I + T , J : J + T , то есть:
- Для i от I до min( I + T , n ) :
- Для j от J до min( J + T , p ) :
- Пусть сумма = 0
- Для k от K до min( K + T , m ) :
- Установить сумму ← sum + A ik × B kj
- Установить C ij ← C ij + сумма
- Для j от J до min( J + T , p ) :
- Для K от 1 до m с шагом T :
- Для J от 1 до p с шагом T :
- Возврат С
В идеализированной модели кэша этот алгоритм требует только Θ( n 3 / b √ M ) промахи в кэше; делитель b √ M на современных машинах составляет несколько порядков, так что фактические вычисления доминируют во времени выполнения, а не промахи в кэше. [ 7 ]
Алгоритм «разделяй и властвуй»
[ редактировать ]Альтернативой итеративному алгоритму является «разделяй и властвуй» алгоритм умножения матриц . Это зависит от разделения блоков
который работает для всех квадратных матриц, размеры которых являются степенями двойки, т. е. формы равны 2. н × 2 н для некоторых н . Матричный продукт теперь
который состоит из восьми умножений пар подматриц с последующим шагом сложения. Алгоритм «разделяй и властвуй» рекурсивно вычисляет меньшие умножения , используя скалярное умножение c 11 = a 11 b 11 в качестве базового случая.
Сложность этого алгоритма как функция от n определяется рекуррентностью [ 6 ]
с учетом восьми рекурсивных вызовов матриц размера n /2 и Θ( n 2 ) для поэлементного суммирования четырех пар результирующих матриц. Применение основной теоремы для рекурсий «разделяй и властвуй» показывает, что эта рекурсия имеет решение Θ( n 3 ) , то же, что и итерационный алгоритм. [ 6 ]
Неквадратные матрицы
[ редактировать ]Вариант этого алгоритма, который работает для матриц произвольной формы и на практике работает быстрее. [ 7 ] разбивает матрицы на две вместо четырех подматриц следующим образом. [ 9 ] Разделение матрицы теперь означает разделение ее на две части одинакового размера или как можно ближе к равным размерам в случае нечетных размеров.
- Входные данные: матрицы A размера n × m , B размера m × p .
- Базовый случай: если max( n , m , p ) ниже некоторого порога, используйте развернутую версию итерационного алгоритма.
- Рекурсивные случаи:
- Если max( n , m , p ) = n , разделите A горизонтально:
- В противном случае, если max( n , m , p ) = p , разделите B вертикально:
- В противном случае max( n , m , p ) = m . Разделите A вертикально и B горизонтально:
Поведение кэша
[ редактировать ]Частота промахов в кэше при рекурсивном умножении матриц такая же, как и в мозаичной итеративной версии, но в отличие от этого алгоритма, рекурсивный алгоритм не учитывает кэш : [ 9 ] для достижения оптимальной производительности кэша не требуется никакого параметра настройки, и он хорошо работает в многопрограммной среде, где размеры кэша фактически динамичны из-за того, что другие процессы занимают пространство кэша. [ 7 ] (Простой итерационный алгоритм также не учитывает кэш, но на практике он работает намного медленнее, если расположение матрицы не адаптировано к алгоритму.)
Количество промахов кэша, возникающих в результате этого алгоритма, на машине с M строками идеального кэша, каждая размером b байт, ограничено [ 9 ] : 13
Субкубические алгоритмы
[ редактировать ]Существуют алгоритмы, которые обеспечивают лучшее время работы, чем простые алгоритмы. Первым был открыт алгоритм Штрассена , разработанный Фолькером Штрассеном в 1969 году и часто называемый «быстрым умножением матриц». Он основан на способе умножения двух матриц размера 2 × 2 , который требует всего 7 умножений (вместо обычных 8) за счет нескольких дополнительных операций сложения и вычитания. Применение этого рекурсивного подхода дает алгоритм с мультипликативной стоимостью . Алгоритм Штрассена более сложен, а численная устойчивость снижается по сравнению с наивным алгоритмом. [ 10 ] но это быстрее в случаях, когда n > 100 или около того [ 1 ] и появляется в нескольких библиотеках, таких как BLAS . [ 11 ] Это очень полезно для больших матриц в точных областях, таких как конечные поля , где численная стабильность не является проблемой.
Поскольку алгоритм Штрассена фактически используется в практическом численном программном обеспечении и системах компьютерной алгебры, улучшение констант, скрытых в большой нотации O, имеет свои преимущества. Ниже приведена таблица, в которой сравниваются ключевые аспекты улучшенной версии, основанной на рекурсивном умножении блочных матриц 2x2 посредством умножения 7-блочных матриц. По-прежнему дает размеры матрицы и обозначает размер памяти.
Год | Ссылка | #умножения матрицы за шаг | #добавления матрицы за шаг | итоговые арифметические операции | общая сложность ввода-вывода |
---|---|---|---|---|---|
1969 | улицы [ 12 ] | 7 | 18 | ||
1971 | Виноград [ 13 ] | 7 | 15 | ||
2017 | Карштадт, Шварц [ 14 ] | 7 | 12 |
Известно, что алгоритм Штрассена с шагом блочной матрицы 2x2 требует не менее 7 умножений блочной матрицы. В 1976 году Проберт [ 15 ] показал, что такой алгоритм требует как минимум 15 сложений (включая вычитания), однако скрытым предположением было то, что блоки и блочная матрица 2x2 представлены в одном и том же базисе. Карштадт и Шварц рассчитали в разных базисах и обменяли 3 сложения на менее затратные преобразования базисов. Они также доказали, что при использовании разных базисов нельзя опускаться ниже 12 сложений за шаг. В последующей работе Бениамини и др. [ 16 ] применил этот трюк с изменением базы к более общим разложениям, чем блочные матрицы 2x2, и улучшил ведущую константу для их времени выполнения.
остается открытым вопрос, В теоретической информатике насколько хорошо алгоритм Штрассена можно улучшить с точки зрения асимптотической сложности . Показатель умножения матрицы , обычно обозначаемый , — наименьшее действительное число, для которого любое матрицу над полем можно перемножить, используя полевые операции. Текущий лучший связанный является Уильямс , Сюй , Сюй и Чжоу. [ 2 ] [ 4 ] Этот алгоритм, как и все другие недавние алгоритмы в этом направлении исследований, является обобщением алгоритма Копперсмита-Винограда, предложенного Доном Копперсмитом и Шмуэлем Виноградом в 1990 году. [ 17 ] Концептуальная идея этих алгоритмов аналогична алгоритму Штрассена: разработан способ умножения двух k × k -матриц с числом менее k. 3 умножения, и этот метод применяется рекурсивно. Однако постоянный коэффициент, скрытый обозначением Big O, настолько велик, что эти алгоритмы имеют смысл только для матриц, которые слишком велики для обработки на современных компьютерах. [ 18 ] [ 19 ]
Алгоритм Фрейвалдса — это простой алгоритм Монте-Карло , который по матрицам A , B и C проверяется в Θ( n 2 ) время, если AB = C .
АльфаТензор
[ редактировать ]В 2022 году DeepMind представила AlphaTensor — нейронную сеть , которая использовала аналогию с однопользовательской игрой для изобретения тысяч алгоритмов умножения матриц, включая некоторые из них, ранее обнаруженные людьми, а некоторые — нет. [ 20 ] Операции были ограничены некоммутативным основным полем (нормальная арифметика) и конечным полем. (арифметика по модулю 2). Лучший найденный «практический» (явное разложение тензора матричного умножения низкого ранга) работал за O(n 2.778 ). [ 21 ] Нахождение разложений низкого ранга таких тензоров (и не только) NP-трудно; оптимальное умножение даже для матриц 3х3 остается неизвестным даже в коммутативном поле. [ 21 ] Для матриц 4x4 AlphaTensor неожиданно обнаружил решение с 47 шагами умножения, что является улучшением по сравнению с 49, необходимыми для алгоритма Штрассена 1969 года, хотя и ограниченным арифметикой по модулю 2. Аналогично, AlphaTensor решал матрицы 5x5 за 96 шагов вместо 98 шагов Штрассена. Основываясь на неожиданном открытии существования таких улучшений, другие исследователи быстро смогли найти аналогичный независимый алгоритм 4x4 и отдельно доработали 96-шаговый алгоритм 5x5 Deepmind до 95 шагов в арифметике mod 2 и до 97 шагов. [ 22 ] в обычной арифметике. [ 23 ] Некоторые алгоритмы никогда раньше не были обнаружены, например (4, 5, 5) был улучшен до 76 с 80 в обычной арифметике и арифметике по модулю 2.
Параллельные и распределенные алгоритмы
[ редактировать ]Параллелизм с общей памятью
[ редактировать ]Описанный ранее алгоритм «разделяй и властвуй» можно распараллелить двумя способами для мультипроцессоров с общей памятью . Они основаны на том факте, что восемь рекурсивных матричных умножений в
могут выполняться независимо друг от друга, как и четыре суммирования (хотя алгоритму необходимо «объединить» умножения перед выполнением суммирования). Используя полный параллелизм задачи, можно получить алгоритм, который можно выразить в в стиле fork-join псевдокоде : [ 24 ]
Процедура умножения( C , A , B ) :
- Базовый случай: если n = 1 , установите c 11 ← a 11 × b 11 (или умножьте небольшую блочную матрицу).
- В противном случае выделите место для новой матрицы T формы n × n , тогда:
- Разделите A на A 11 , A 12 , A 21 , A 22 .
- Разделите B на B11 , B12 , B21 , B22 .
- Разделить C на C11 , C12 , C21 , C22 .
- Разделить Т на Т 11 , Т 12 , Т 21 , Т 22 .
- Параллельное выполнение:
- Вилка умножения( C 11 , A 11 , B 11 ) .
- Вилочное умножение( C 12 , A 11 , B 12 ) .
- Вилка умножения( C 21 , A 21 , B 11 ) .
- Вилочное умножение( C 22 , A 21 , B 12 ) .
- Вилка умножается( T 11 , A 12 , B 21 ) .
- Вилка умножается( T 12 , A 12 , B 22 ) .
- Вилка умножения( T 21 , A 22 , B 21 ) .
- Вилка умножения( T 22 , A 22 , B 22 ) .
- Присоединяйтесь (дождитесь завершения параллельных разветвлений).
- добавить( С , Т ) .
- Освободить Т.
Процедура add( C , T ) добавляет T в C поэлементно:
- Базовый случай: если n = 1 , установите c 11 ← c 11 + t 11 (или сделайте короткий цикл, возможно, развернутый).
- В противном случае:
- Разделить C на C11 , C12 , C21 , C22 .
- Разделить Т на Т 11 , Т 12 , Т 21 , Т 22 .
- Параллельно:
- Вилка добавить( C 11 , T 11 ) .
- Вилка добавить( C 12 , T 12 ) .
- Вилка добавить( C 21 , T 21 ) .
- Вилка добавить( C 22 , T 22 ) .
- Присоединиться .
Здесь fork — это ключевое слово, которое сигнализирует, что вычисление может выполняться параллельно с остальной частью вызова функции, в то время как соединение ожидает завершения всех ранее «разветвленных» вычислений. Раздел достигает своей цели только путем манипулирования указателями.
Этот алгоритм имеет пути критическую длину Θ(log 2 n ) шагов, то есть столько времени требуется на идеальной машине с бесконечным числом процессоров; следовательно, он имеет максимально возможное ускорение Θ ( n 3 /бревно 2 n ) на любом реальном компьютере. Алгоритм непрактичен из-за затрат на связь, присущих перемещению данных во временную матрицу T и обратно , но более практичный вариант обеспечивает Θ( n 2 ) ускорение, без использования временной матрицы. [ 24 ]
Алгоритмы, избегающие общения, и распределенные алгоритмы
[ редактировать ]В современных архитектурах с иерархической памятью стоимость загрузки и хранения элементов входной матрицы обычно превышает стоимость арифметических операций. На одной машине это объем данных, передаваемых между ОЗУ и кешем, а на многоузловой машине с распределенной памятью - это объем, передаваемый между узлами; в любом случае это называется полосой пропускания связи . Наивный алгоритм, использующий три вложенных цикла, использует Ω( n 3 ) пропускная способность связи.
Алгоритм Кэннона , также известный как 2D-алгоритм , представляет собой алгоритм, позволяющий избежать связи , который разбивает каждую входную матрицу на блочную матрицу, элементы которой являются подматрицами размера √ M /3 на √ M /3 , где M — размер быстрой памяти. [ 25 ] Затем наивный алгоритм применяется к блочным матрицам, вычисляя продукты подматриц полностью в быстрой памяти. Это уменьшает пропускную способность связи до O ( n 3 / √ M ) , что является асимптотически оптимальным (для алгоритмов, выполняющих Ω( n 3 ) расчет). [ 26 ] [ 27 ]
В распределенной среде с p процессорами, расположенными в двумерной сетке √ p на √ p , каждому процессору может быть назначена одна подматрица результата, и произведение может быть вычислено с каждым процессором, передающим O ( n 2 / √ p ) слов, что является асимптотически оптимальным при условии, что каждый узел хранит минимум O ( n 2 / п ) элементы. [ 27 ] Это можно улучшить с помощью 3D-алгоритма, который размещает процессоры в сетке 3D-куба, назначая каждый продукт двух входных подматриц одному процессору. Затем генерируются результирующие подматрицы путем сокращения каждой строки. [ 28 ] Этот алгоритм передает O ( n 2 / п 2/3 ) слов на процессор, что асимптотически оптимально. [ 27 ] Однако для этого требуется репликация каждого элемента входной матрицы p 1/3 раз, поэтому требуется коэффициент p 1/3 больше памяти, чем необходимо для хранения входных данных. Этот алгоритм можно комбинировать с алгоритмом Штрассена для дальнейшего сокращения времени выполнения. [ 28 ] Алгоритмы «2.5D» обеспечивают постоянный компромисс между использованием памяти и пропускной способностью связи. [ 29 ] В современных распределенных вычислительных средах, таких как MapReduce , разработаны специализированные алгоритмы умножения. [ 30 ]
Алгоритмы для сеток
[ редактировать ]Существует множество алгоритмов умножения на сетках . Для умножения двух n × n на стандартной двумерной сетке с использованием алгоритма 2D Кэннона можно выполнить умножение за 3 n -2 шага, хотя при повторных вычислениях это число сокращается вдвое. [ 31 ] Стандартный массив неэффективен, поскольку данные из двух матриц поступают не одновременно и их необходимо дополнять нулями.
Результат еще быстрее на двухслойной сетке с перекрестными проволоками, где всего 2 n -1 шагов. требуется [ 32 ] Производительность еще больше улучшается при повторных вычислениях, что приводит к 100% эффективности. [ 33 ] Массив с перекрестной сеткой можно рассматривать как частный случай непланарной (т.е. многослойной) структуры обработки. [ 34 ]
См. также
[ редактировать ]- Вычислительная сложность математических операций
- Вычислительная сложность умножения матриц
- Алгоритм CYK § Алгоритм Валианта
- Умножение цепочки матриц
- Умножение разреженной матрицы на вектор
- Метод четырех русских
Ссылки
[ редактировать ]- ^ Перейти обратно: а б с д Скиена, Стивен (2012). «Сортировка и поиск». Руководство по проектированию алгоритмов . Спрингер. С. 45–46 , 401–3. дои : 10.1007/978-1-84800-070-4_4 . ISBN 978-1-84800-069-8 .
- ^ Перейти обратно: а б Уильямс, Вирджиния Василевска; Сюй, Иньчжан; Сюй, Цзысюань; Чжоу, Ренфэй (2024), Новые границы умножения матриц: от альфы до омеги , arXiv : 2307.07970
- ^ Дуань, Ран; Ву, Хунсюнь, Чжоу, Ренфей (2022), Более быстрое умножение матриц посредством асимметричного хеширования , arXiv : 2210.10173
- ^ Перейти обратно: а б Алман, Джош; Уильямс, Вирджиния Василевска (2020), «Усовершенствованный лазерный метод и более быстрое умножение матриц», 32-й ежегодный симпозиум ACM-SIAM по дискретным алгоритмам (SODA 2021) , arXiv : 2010.05846
- ^ Хартнетт, Кевин (23 марта 2021 г.). «Умножение матриц на несколько дюймов ближе к мифической цели» . Журнал Кванта . Проверено 1 апреля 2021 г.
- ^ Перейти обратно: а б с Кормен, Томас Х .; Лейзерсон, Чарльз Э .; Ривест, Рональд Л .; Стоун, Клиффорд (2009) [1990]. Введение в алгоритмы (3-е изд.). MIT Press и McGraw-Hill. стр. 75–79. ISBN 0-262-03384-4 .
- ^ Перейти обратно: а б с д и Амарасингхе, Саман; Лейзерсон, Чарльз (2010). «6.172 Проектирование производительности программных систем, Лекция 8» . MIT OpenCourseWare . Массачусетский технологический институт . Проверено 27 января 2015 г.
- ^ Лам, Моника С.; Ротберг, Эдвард Э.; Вольф, Майкл Э. (1991). Производительность кэша и оптимизация блокированных алгоритмов . ASPLOS91: 4-я Международная конференция по поддержке архитектуры языков программирования и операционных систем. дои : 10.1145/106972.106981 . ISBN 978-0-89791-380-5 .
- ^ Перейти обратно: а б с Прокоп, Харальд (1999). Алгоритмы, не обращающие внимания на кэш (PDF) (магистр). С. hdl : 1721.1/80568 .
- ^ Миллер, Уэбб (1975), «Вычислительная сложность и числовая стабильность», SIAM News , 4 (2): 97–107, CiteSeerX 10.1.1.148.9947 , doi : 10.1137/0204009
- ^ Пресс, Уильям Х.; Фланнери, Брайан П.; Теукольский, Саул А. ; Веттерлинг, Уильям Т. (2007). Численные рецепты: искусство научных вычислений (3-е изд.). Издательство Кембриджского университета . п. 108 . ISBN 978-0-521-88068-8 .
- ^ Штрассен, Волкер (1969). «Исключение по Гауссу не оптимально». Число. Математика . 13 (4): 354–356. дои : 10.1007/BF02165411 . S2CID 121656251 .
- ^ Виноград, Шмуэль (1971). «Об умножении матриц 2×2» . Линейная алгебра и ее приложения . 4 (4): 381–388. дои : 10.1016/0024-3795(71)90009-7 .
- ^ Карштадт, Илай; Шварц, Одед (июль 2017 г.). «Умножение матриц, немного быстрее» . Материалы 29-го симпозиума ACM по параллелизму в алгоритмах и архитектурах . СПАА '17. стр. 101–110. дои : 10.1145/3087556.3087579 .
- ^ Проберт, Роберт Л. (1976). «Об аддитивной сложности умножения матриц». СИАМ Дж. Компьютер . 5 (2): 187–203. дои : 10.1137/0205016 .
- ^ Бениамини, Гал; Ченг, Натан; Хольц, Ольга; Карштадт, Илай; Шварц, Одед (2020). «Разрежение операторов алгоритмов быстрого умножения матриц». arXiv : 2008.03759 [ cs.DS ].
- ^ Копперсмит, Дон; Виноград, Шмуэль (1990), «Умножение матриц посредством арифметических прогрессий» (PDF) , Журнал символических вычислений , 9 (3): 251, doi : 10.1016/S0747-7171(08)80013-2
- ^ Илиопулос, Костас С. (1989), «Оценки сложности в наихудшем случае алгоритмов вычисления канонической структуры конечных абелевых групп и нормальных форм Эрмита и Смита целочисленной матрицы» (PDF) , SIAM Journal on Computing , 18 (4 ): 658–669, CiteSeerX 10.1.1.531.9309 , doi : 10.1137/0218045 , MR 1004789 , заархивировано из оригинала (PDF) 05 марта 2014 г. , получено 16 января 2015 г. ,
Алгоритм Копперсмита-Винограда не практично из-за очень большой скрытой константы в верхней границе количества требуемых умножений.
- ^ Робинсон, Сара (ноябрь 2005 г.), «К оптимальному алгоритму умножения матриц» (PDF) , SIAM News , 38 (9),
Даже если кому-то удастся доказать одну из гипотез, продемонстрировав тем самым, что ω = 2 — сплетение Этот подход вряд ли будет применим к большим матричным задачам, возникающим на практике. [...] входные матрицы должны быть астрономически большими, чтобы разница во времени была очевидна.
- ^ «Открытие новых алгоритмов с помощью AlphaTensor» . www.deepmind.com . 5 октября 2022 г. Проверено 1 ноября 2022 г.
- ^ Перейти обратно: а б Фаузи, Аль-Хусейн; Балог, Матей; Хуанг, Аджа; Юбер, Томас; Ромера-Паредес, Бернардино; Барекатаин, Мохаммадамин; Новиков, Александр; Р. Руис, Франциско Дж.; Стевизер, Джулиан; Свирщ, Гжегож; Сильвер, Дэвид; Хассабис, Демис; Кохли, Пушмит (октябрь 2022 г.). «Открытие более быстрых алгоритмов умножения матриц с помощью обучения с подкреплением» . Природа . 610 (7930): 47–53. Нагрудный код : 2022Nature.610...47F . дои : 10.1038/s41586-022-05172-4 . ISSN 1476-4687 . ПМЦ 9534758 . ПМИД 36198780 .
- ^ Кауэрс, Мануэль; Моосбауэр, Якоб (2 декабря 2022 г.). «Перевернутые графы для умножения матриц». arXiv : 2212.01175 [ cs.SC ].
- ^ Брубейкер, Бен (23 ноября 2022 г.). «ИИ открывает новые возможности в умножении матриц» . Журнал Кванта . Проверено 26 ноября 2022 г.
- ^ Перейти обратно: а б Рэндалл, Кейт Х. (1998). Силк: Эффективные многопоточные вычисления (PDF) (доктор философии). Массачусетский технологический институт. стр. 54–57. hdl : 1721.1/47519 .
- ^ Кэннон, Линн Эллиот (14 июля 1969 г.). Сотовый компьютер для реализации алгоритма фильтра Калмана (доктор философии). Государственный университет Монтаны.
- ^ Хонг, JW; Кунг, ХТ (1981). «Сложность ввода-вывода: игра с красно-синими камешками» (PDF) . Материалы тринадцатого ежегодного симпозиума ACM по теории вычислений - STOC '81 . стр. 326–333. дои : 10.1145/800076.802486 . S2CID 8410593 . Архивировано (PDF) из оригинала 15 декабря 2019 г.
- ^ Перейти обратно: а б с Ирония, Дрор; Толедо, Сиван; Тискин, Александр (сентябрь 2004 г.). «Нижние границы связи для умножения матриц с распределенной памятью». Дж. Параллельное распределение. Вычислить . 64 (9): 1017–26. CiteSeerX 10.1.1.20.7034 . дои : 10.1016/j.jpdc.2004.03.021 .
- ^ Перейти обратно: а б Агарвал, Колорадо; Балле, С.М.; Густавсон, ФГ; Джоши, М.; Палкар, П. (сентябрь 1995 г.). «Трехмерный подход к параллельному умножению матриц». IBM J. Res. Дев . 39 (5): 575–582. CiteSeerX 10.1.1.44.3404 . дои : 10.1147/rd.395.0575 .
- ^ Соломоник, Эдгар; Деммель, Джеймс (2011). «Оптимальные для связи параллельные алгоритмы умножения матриц 2.5D и LU-факторизации» (PDF) . Материалы 17-й Международной конференции по параллельной обработке . Том. Часть II. стр. 90–109. дои : 10.1007/978-3-642-23397-5_10 . ISBN 978-3-642-23397-5 .
- ^ Босах Заде, Реза; Карлссон, Гуннар (2013). «Квадрат матрицы, не зависящий от измерения, с использованием MapReduce» (PDF) . arXiv : 1304.1467 . Бибкод : 2013arXiv1304.1467B . Проверено 12 июля 2014 г.
- ^ Бэ, ЮВ; Шинн, Т.-В.; Такаока, Т. (2014). «Более быстрый параллельный алгоритм умножения матриц в сетчатом массиве» . Procedia Информатика . 29 : 22:30–40. дои : 10.1016/j.procs.2014.05.208 .
- ^ Как, С (1988). «Двухслойный сетчатый массив для умножения матриц». Параллельные вычисления . 6 (3): 383–5. CiteSeerX 10.1.1.88.8527 . дои : 10.1016/0167-8191(88)90078-6 .
- ^ Как, С. (2014). «Эффективность умножения матриц на массиве перекрестных ячеек». arXiv : 1411.3273 [ cs.DC ].
- ^ Как, С (1988). «Вычисления на многоуровневых массивах». Информационные науки . 45 (3): 347–365. CiteSeerX 10.1.1.90.4753 . дои : 10.1016/0020-0255(88)90010-2 .
Дальнейшее чтение
[ редактировать ]- Буттари, Альфредо; Лангу, Жюльен; Курзак, Якуб; Донгарра, Джек (2009). «Класс параллельных алгоритмов тайловой линейной алгебры для многоядерных архитектур». Параллельные вычисления . 35 : 38–53. arXiv : 0709.1272 . дои : 10.1016/j.parco.2008.10.002 . S2CID 955 .
- Гото, Казусигэ; ван де Гейн, Роберт А. (2008). «Анатомия высокопроизводительного умножения матриц». Транзакции ACM в математическом программном обеспечении . 34 (3): 1–25. CiteSeerX 10.1.1.140.3583 . дои : 10.1145/1356052.1356053 . S2CID 9359223 .
- Ван Зи, Филд Г.; ван де Гейн, Роберт А. (2015). «BLIS: платформа для быстрого создания экземпляров функциональности BLAS». Транзакции ACM в математическом программном обеспечении . 41 (3): 1–33. дои : 10.1145/2764454 . S2CID 1242360 .
- Как оптимизировать GEMM