Чи існують алгоритми експонації паралельної матриці, які ефективніші, ніж послідовне множення?


11

Потрібно знайти потужність (натуральне число) матриці дійсних чисел. Є багато ефективних алгоритмів множення матриць (наприклад, деякі паралельні алгоритми - це Кеннон, DNS ), але чи є алгоритми, призначені саме для пошуку потужності матриці і які ефективніші, ніж послідовне виконання множення матриці? Мене особливо цікавлять паралельні алгоритми.


1
Що ви пробували? Де ти застряг? Які дослідження ви провели? Окрім назви, де питання? На варіант рішення вашої проблеми (з назви) відповідь "так", але ви це вже знаєте, правда?
Зло

2
@TomR Це питання, напевно, вас цікавить
adrianN

1
Може щось подібне ? Або шукаєте щось інше? Які розміри та потужність у вашій програмі?
Зло

1
Ви можете обчислити n-й потужність із меншим множенням n-1, коли n ≥ 4. Для великих матриць зазвичай варто знайти найменшу можливу кількість множень (наприклад, існує простий метод обчислити n ^ 15 з 6 множення, але це можна зробити з 5). Потім можна застосувати той самий принцип, щоб знайти найменшу кількість послідовних множень, що буде складніше.
gnasher729

1
Ви також повинні врахувати кількість доступного вам паралелізму. "Паралелізм" - це використання ресурсів, які в іншому випадку були б не використані. Якщо реалізація матричного множення вже може ефективно використовувати всі наявні ресурси, то для обчислення потужностей матриць немає нічого іншого.
gnasher729

Відповіді:


5

Якщо у вас є кілька процесорів, які можуть працювати паралельно, ви можете обчислити будь-яку потужність до потужності (2 ^ k) у k кроках. Наприклад: Щоб обчислити , ви обчислите:М15

Етап 1: Обчисліть М2

Етап 2: Обчисліть і M 4 = M 2M 2M3=M2MМ4=М2М2

Етап 3: Обчисліть і M 8 = M 4M 4М7=М4М3М8=М4М4

Етап 4: Обчисліть М15=М8М7

Це на одне множення більше, ніж обчислення у трьох множеннях і підняття М 5 до третьої потужності в інших двох множеннях, але має бути швидше, якщо у вас є два процесори. Для довільно високих потужностей вам знадобиться більше процесорів.М5М5

Якщо ви використовуєте алгоритм грубої сили для множення, множуючи рядок на стовпчик, ви можете заощадити деякий час, обчисливши один рядок продукту, а потім негайно використовуючи цей рядок для наступного продукту. Це допоможе в обчисленні коли ми можемо почати обчислювати M 3, як тільки буде обчислений перший рядок M 2 ; це не було б корисно для M 4, оскільки нам потрібні і рядки, і стовпці M 2 . Для великих потужностей ви, можливо, могли б домовитись, які повноваження обчислити.М3М3М2М4М2

І після публікації цього стає очевидним , що ви можете використовувати кілька процесори дуже легко: Ви починаєте шляхом обчислення першого рядка . Коли у вас є цей рядок, у вас є вся інформація, необхідна для обчислення першого рядка M 3 = M 2M , тому ви обчислюєте другий ряд M 2 і перший ряд M 3 паралельно. Потім можна обчислити третій ряд M 2 , другий ряд M 3 і перший ряд M 4 паралельно тощо.М2=МММ3=М2ММ2М3М2М3М4

Це зробить набагато більше операцій, ніж потрібно (наприклад, 14 матричних множень на замість мінімальних 5 або 6 чотиристадійного методу). Якщо потужність не велика порівняно з кількістю процесорів, це все одно буде швидше. Але обчислення М 1000 за допомогою чотирьох процесорів за допомогою цього методу буде неефективним; це зробити оптимально, було б цікавою проблемою.М15М1000

Комбінування підходів: використовуючи, наприклад, чотири процесори, ви можете обчислити AB, ABC, ABCD та ABCDE майже паралельно, обчислюючи кожен продукт по одному рядку. Це дозволяє обчислити всі чотири до M 5, використовуючи чотири процесори приблизно за той самий час, як один продукт з одним процесором.М2М5

З огляду на ці чотири результати та оригінальний M, ви можете обчислити чотири матриці до M 25 за один і той же час за умови, що матриці мають щонайбільше п’ять потужностей один від одного. Таким чином, кожна потужність до M 25 може бути обчислена приблизно в два рази більше часу одного матричного продукту процесора.М6М25М25

З урахуванням цих матриць усі матриці до і деякі більше до M 125 можна обчислити в три рази більше часу одного матричного продукту, якщо є чотири процесори. Для процесорів k це повинно бути щонайменше потужністю k ( k + 1 ) 2 .М108М125к(к+1)2


4

Ви можете проаналізувати паралельні прискорення з матричною експоненцією: рівень "макро-алгоритмічний", який вирішує, які матриці множити, і "мікро-алгоритмічний" рівень, коли ви можете прискорити самі множення за допомогою паралелізму.

Для останнього Вікіпедія припускає, що для множення на n матрицю теоретично можна досягти складності O ( log 2 ( n ) ) з необмеженою кількістю процесорів, або O ( n ) з більш реалістичним паралельним алгоритмом.ннО(журнал2(н))О(н)

(Примітка: сторінка вікіпедії призначена для обчислення загальних матриць. Я не впевнений, чи можна це ще більше паралелізувати, використовуючи інформацію, яку ми проводимо на матрицю.)

Для першого питання перетворюється на те, скільки кругів матричного множення потрібно для обчислення для деякої матриці A ? (Я кажу круги, тому що всі множення в даному раунді можуть бути виконані паралельно).АмА

Послідовний алгоритм побиття, як зазначається в інших відповідях, - це Експоненціація шляхом квадратування . Це дозволяє обчислити Ак множення в .О(журнал(к))

Питання: чи можемо ми перемогти це паралелізмом? Я стверджую, що відповідь - ні.

Проста причина полягає в тому, що експоненція шляхом квадратування по суті є алгоритмом динамічного програмування; це дозволяє пропустити всю роботу шляхом повторного використання підрезультатів, але це, в свою чергу, створює залежність даних, що вимикає паралелізм. Якщо ми позбуємось залежності від даних, але також значно збільшимо обсяг роботи, яку ми повинні виконати.

Щоб краще проілюструвати це, давайте подивимось, як би ви паралелізували множення матриць, якби ми не робили експоненцію. Припустимо, ви шукали паралельне множення окремих квадратних матриць:к

А1А2А3А4А5...Ак

Природний спосіб паралелізації цього очевидний, ви повинні зловживати асоціативністю для виконання множення у першому раунді:к2

(А1А2)(А3А4)(А5А6)...(Ак-1Ак)

Звідси ми можемо чітко помножити наші матриці на круглі множення O ( log ( k ) ), оскільки ми зменшуємо розмір проблеми на половину кожного раунду.кО(журнал(к))

Однак якби ми виконували експоненцію таким чином, це виглядало б так:

(АА)(АА)(АА)...(АА)

А2

АкннАО(журнал2(н)журнал(к))О(нжурнал(к))


3

Якщо під послідовним ви маєте на увазі множення м разів журналм рішення спочатку лише обчислення відповідних повноважень 2(він же Експонентація шляхом квадратування ) очевидно краще для великихм.

Поліпшення цього може бути специфічним для певних типів матриць. Наприклад, якщо ваша матриця діагоналізується,

А=SΛS-1Ам=SΛмS-1
Таким чином, обчислення мго потужність О(1) в м.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.