Алгоритм пушки - Википедия - Cannons algorithm
В Информатика, Алгоритм Кэннона это распределен алгоритм умножения матриц для двумерных сетки впервые описан в 1969 г. Линн Эллиот Кэннон.[1][2]
Он особенно подходит для компьютеров, установленных в N × N сетка.[3] Хотя алгоритм Кэннона хорошо работает в однородных 2D-сетках, его распространение на гетерогенные 2D-сетки оказалось трудным.[4]
Основное преимущество алгоритма заключается в том, что его требования к памяти остаются постоянными и не зависят от количества процессоров.[2]
Масштабируемый универсальный алгоритм умножения матриц (SUMMA)[5]- это более практичный алгоритм, который требует меньше рабочего пространства и устраняет необходимость в квадратной 2D-сетке. Он используется ScaLAPACK, НАБОР, и Элементаль библиотеки.
Обзор алгоритма
При умножении двух п×п матрицы A и B, нам понадобится п×п узлы обработки p, расположенные в двумерной сетке. Первоначально pя, j несет ответственность зая, j и бя, j.
// PE (i, j) k: = (i + j) mod N; a: = a [i] [k]; b: = b [k] [j]; c [i] [j]: = 0; для (l: = 0; lНам нужно выбирать k на каждой итерации для каждого элемента процессора (PE), чтобы процессоры не имели доступа к одним и тем же данным для вычислений. .
Поэтому процессоры в одной строке / столбце должны начинать суммирование с разных индексов. Если например PE (0,0) вычисляет на первом этапе PE (0,1) выбирает первый. Выбор k: = (i + j) mod n за PE (i, j) удовлетворяет этому ограничению для первого шага.
На первом этапе мы распределяем входные матрицы между процессорами в соответствии с предыдущим правилом.
В следующих итерациях мы выбираем новый k ': = (k + 1) mod n для каждого процессора. Таким образом, каждый процессор будет продолжать получать доступ к различным значениям матриц. Тогда необходимые данные всегда находятся на соседних процессорах. A PE (i, j) тогда нужно из PE (i, (j + 1) mod n) и из PE ((i + 1) mod n, j) для следующего шага. Это означает, что должен проходить циклически влево, а также циклически вверх. Результаты умножения суммируются в обычном порядке. После n шагов каждый процессор рассчитал все один раз и его сумма, таким образом, искомая .
После первоначального распределения каждого процессора должны быть сохранены только данные для следующего шага. Это промежуточный результат предыдущей суммы, и . Это означает, что все три матрицы необходимо сохранить в памяти только после того, как они будут равномерно распределены между процессорами.
Обобщение
На практике у нас гораздо меньше процессоров, чем матричных элементов. Мы можем заменить элементы матрицы на подматрицы, чтобы каждый процессор обрабатывал больше значений. Скалярное умножение и сложение превращаются в последовательное умножение и сложение матриц. Ширина и высота подматриц будут .
Время выполнения алгоритма , куда - время начального распределения матриц на первом шаге, это расчет промежуточных результатов и и обозначает время, необходимое для установления соединения и передачи байта соответственно.
Недостатком алгоритма является то, что существует множество настроек подключения с небольшими размерами сообщений. Было бы лучше иметь возможность передавать больше данных в каждом сообщении.
Смотрите также
Рекомендации
- ^ Линн Эллиот Кэннон, Сотовый компьютер для реализации алгоритма фильтра Калмана, Технический отчет, к.т.н. Диссертация, Государственный университет Монтаны, 14 июля 1969 г.
- ^ а б Gupta, H .; Садаяппан, П .: Коммуникационное эффективное умножение матриц на гиперкубах, dbpubs.stanford.edu
- ^ 4.2 Умножение матриц на машине с распределенной памятью, www.phy.ornl.gov
- ^ Жан-Франсуа Пино, Планирование с учетом коммуникации на гетерогенных платформах master-worker, Кандидатская диссертация, октябрь 2010 г.
- ^ Роберт А. ван де Гейн и Джеррелл Уоттс, SUMMA: масштабируемый универсальный алгоритм умножения матриц, Параллелизм: практика и опыт. Том 9, выпуск 4, страницы 255–274, апрель 1997 г.
внешняя ссылка
Этот Прикладная математика -связанная статья является заглушка. Вы можете помочь Википедии расширяя это.