batman
This commit is contained in:
Symlink
+1
@@ -0,0 +1 @@
|
||||
../doc-pz.yaml
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,117 @@
|
||||
#import "@local/nure:0.1.0": *
|
||||
|
||||
#show: pz-lb.with(..yaml("doc.yaml"), worknumber: 3, title: "Розв'язування систем лінійних рівнянь")
|
||||
|
||||
#v(-spacing)
|
||||
|
||||
== Мета роботи
|
||||
#v(-spacing)
|
||||
|
||||
Реалізувати розв’язання системи лінійних алгебраїчних рівнянь методом
|
||||
Гауса з імітацією паралельних обчислень та розрахувати показники ефективності.
|
||||
|
||||
== Хід роботи
|
||||
#v(-spacing)
|
||||
Запишемо вихідну систему. Ми використаємо алгоритм Гауса для знаходження її рівнянь.
|
||||
Почнемо з прямого ходу.
|
||||
$
|
||||
mat(
|
||||
1, 3, 2, 1;
|
||||
2, 7, 5, 18;
|
||||
1, 4, 6, 26;
|
||||
augment: #(-1)
|
||||
)
|
||||
$
|
||||
|
||||
Маємо $a_11 = 1$, тож можемо не ділити перший рядок, а одразу віднімати його
|
||||
(помножений на 2 та 1, відповідно) від другого та третього. У результаті
|
||||
отримуємо:
|
||||
$
|
||||
mat(
|
||||
1, 3, 2, 1;
|
||||
0, 1, 1, 16;
|
||||
0, 1, 4, 25;
|
||||
augment: #(-1)
|
||||
)
|
||||
$
|
||||
|
||||
Помноживши його на 1, віднімаємо другий рядок від третього. Результат:
|
||||
$
|
||||
mat(
|
||||
1, 3, 2, 1;
|
||||
0, 1, 1, 16;
|
||||
0, 0, 3, 9;
|
||||
augment: #(-1)
|
||||
)
|
||||
$
|
||||
|
||||
Для зворотнього ходу застосуємо формулу $x_i = (b_i - sum_(j=i+1)^n a_(i j) dot x_j)/a_(i i)$
|
||||
$ x_3 = 9 / 3 = 3 $
|
||||
$ x_2 = (16 - 3) / 1 = 13 $
|
||||
$ x_1 = (1 - (39 + 6)) / 1 = -44 $
|
||||
|
||||
Для розпаралелювання алгоритму використано схему стрічкового циклічного
|
||||
розділення даних. Це дозволяє рівномірно
|
||||
розподілити навантаження, оскільки кількість активних рядків зменшується з
|
||||
кожною ітерацією.
|
||||
|
||||
Відповідно до методичних вказівок, для ефективної реалізації операцій розсилки
|
||||
даних обрана топологія мережі "Гіперкуб".
|
||||
Це зумовлено тим, що основною комунікаційною операцією є
|
||||
передача ведучого рядка від одного процесора всім іншим, що в такій топології
|
||||
виконується за логарифмічний час $O(log_2 p)$.
|
||||
|
||||
Прямий хід складається з $n-1$ ітерацій. Нехай $k$ — номер поточної ітерації ($0 <= k < n-1$).
|
||||
|
||||
+ Вибір ведучого елемента: процесор, що містить рядок $k$, обирає головний елемент $a_(k k)$;
|
||||
+ комунікація (Broadcast): процесор-власник розсилає рядок $k$ та елемент $b_k$ усім іншим процесорам. Трудомісткість цієї операції оцінюється як: $(n-1) log_2 p dot (alpha + w dot n / beta)$;
|
||||
+ Обчислення: кожен процесор модифікує свої локальні рядки $i$ ($i > k$):
|
||||
$ l_(i k) = a_(i k) / a_(k k) $
|
||||
$ a_(i j) = a_(i j) - l_(i k) dot a_(k j) $
|
||||
$ b_i = b_i - l_(i k) dot b_k $
|
||||
|
||||
Алгоритм розпаралелювання зворотнього ходу виконується від $i = n-1$ до $0$.
|
||||
|
||||
1. Обчислення кореня: Процесор-власник рядка $i$ знаходить $x_i$:
|
||||
$ x_i = (b_i - sum_(j=i+1)^(n-1) a_(i j) dot x_j) / a_(i i) $
|
||||
2. Комунікація: Знайдене значення $x_i$ розсилається всім процесорам.
|
||||
Трудомісткість: $(n-1) log_2 p (alpha + w/beta)$.
|
||||
3. Оновлення: Процесори підставляють відоме $x_i$ у свої рівняння для рядків $k < i$.
|
||||
|
||||
Оцінка ефективності базується на припущенні про використання топології
|
||||
"Гіперкуб", що дозволяє виконувати операції розсилки даних
|
||||
(Broadcast) та редукції за логарифмічний час $O(log_2 p)$.
|
||||
|
||||
1. послідовний алгоритм ($T_1$):
|
||||
трудомісткість послідовного методу Гаусса складається з суми операцій прямого ходу ($approx 2/3 n^3$) та зворотного ходу ($approx n^2$, враховуючи лише ділення та множення). Згідно з методичними вказівками, загальна складність становить:
|
||||
$ T_1 approx 2/3 n^3 + 2 n^2 $
|
||||
|
||||
2. паралельний алгоритм ($T_p$):
|
||||
загальний час виконання складається з обчислювальної частини та комунікаційних витрат.
|
||||
Обчислювальна складова: При використанні циклічного розподілу рядків навантаження балансується рівномірно, тому час обчислень зменшується пропорційно кількості процесорів:
|
||||
$ T_("comp") approx 1/p dot (2/3 n^3) dot tau $
|
||||
де $tau$ — час виконання однієї базової арифметичної операції.
|
||||
|
||||
Комунікаційна складова ($T_("comm")$): Включає три основні етапи взаємодії на кожній ітерації (пошук ведучого елемента, розсилка рядка, зворотна підстановка). Для $n$ ітерацій на топології гіперкуба сумарні витрати оцінюються формулою:
|
||||
$ T_("comm") approx (n-1) dot log_2 p dot (3 alpha + (w(n+2))/beta) $
|
||||
де $alpha$ — латентність мережі, $beta$ — пропускна здатність каналу, $w$ — розмір елемента даних у байтах.
|
||||
|
||||
Сумарна трудомісткість ($T_p$):
|
||||
$ T_p = T_("comp") + T_("comm") approx (2 n^3)/(3 p) tau + n log_2 p (3 alpha + (w n)/beta) $
|
||||
|
||||
3. показники ефективності:
|
||||
на основі наведених вище оцінок, теоретичне прискорення ($S_p$) та ефективність ($E_p$) розраховуються як:
|
||||
$ S_p = T_1 / T_p = (2/3 n^3 + 2 n^2)/((2 n^3)/(3 p) tau + n log_2 p (3 alpha + (w n)/beta)) $
|
||||
$ E_p = S_p / p = (2/3 n^3 + 2 n^2)/((2 n^3)/(3 p) tau + n log_2 p (3 alpha + (w n)/beta))/p $
|
||||
|
||||
При $n >> p$ (коли розмірність задачі значно перевищує кількість процесорів), вплив комунікаційної складової зменшується, і $E_p$ наближається до 1. Однак при фіксованому $n$ збільшення $p$ призводить до зростання частки $T_("comm")$ у загальному часі, що знижує ефективність.
|
||||
|
||||
== Висновки
|
||||
|
||||
Було реалізувано розв’язання системи лінійних алгебраїчних рівнянь методом
|
||||
Гауса з імітацією паралельних обчислень та розрахувано показники ефективності.
|
||||
Для розв'язання СЛАР методом Гаусса на $p$ процесорах використано
|
||||
одновимірну декомпозицію даних по рядках.
|
||||
Оптимальною топологією було визначено гіперкуб,
|
||||
оскільки алгоритм потребує постійної
|
||||
розсилки даних ("один-до-всіх") на кожній ітерації.
|
||||
Reference in New Issue
Block a user