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,70 @@
|
||||
#import "@local/nure:0.1.0": *
|
||||
|
||||
#show: pz-lb.with(
|
||||
..yaml("doc.yaml"),
|
||||
worknumber: 2,
|
||||
title: "Pішення найпростіших математичних завдань за допомогою алгоритмів паралельних обчислень",
|
||||
)
|
||||
|
||||
#v(-spacing)
|
||||
|
||||
== Мета роботи
|
||||
#v(-spacing)
|
||||
Метою роботи є оволодіння основними навичками аналізу трудомісткості
|
||||
паралельних обчислень на прикладі паралельного алгоритму множення матриць,
|
||||
визначення основних характеристик трудомісткості та їх залежності від схеми
|
||||
обчислень та кількості процесорів. Отримання досвіду оцінки трудомісткості
|
||||
паралельних обчислень за допомогою основних теорем.
|
||||
|
||||
== Хід роботи
|
||||
#v(-spacing)
|
||||
|
||||
Темою на розгляд у даній роботі є множення матриць.
|
||||
Елементи результуючої матриці розраховуютсья за наступною формулою: $c_(i j) = sum_(k=1)^n a_(i k)*b(k j)$
|
||||
Візьмемо дві матриці розмірністю $n times n$.
|
||||
Для розрахунку одного елементу результуючої матриці знадобиться $n + (n - 1) = 2n - 1$ операцій ($n$ множень, $n-1$ додавань).
|
||||
Враховуючи $n^2$ елементів у вихідних матрицях, для розрахунку результату на одному процесорі (враховуючи, що одна операція займає одну одиницю часу)
|
||||
знадобиться рівно $(2n - 1) * n^2$ одиниць часу. Іншими словами, час розрахунку на одному процесорі можна описати так:
|
||||
$ T_1 = (2n - 1) * n^2 $
|
||||
|
||||
// NOTE: завдання 2
|
||||
Спершу, розрахуємо всі основні показники для $p = n^2$. Враховуючи, що кількість процесорів дорівнює кількості елементів,
|
||||
можемо зазначити, що час на виконання у багатопоточному режимі буде дорівнювати часу обробки одного елемента $T_p = 2n - 1$.
|
||||
$ S_p = T_1/T_(n^2) = ((2n-1) dot n^2)/(2n-1) = n^2 $
|
||||
$ E_p = S_p/p = n^2/n^2 = 1 $
|
||||
$ C_p = T_p dot p = (2n-1) dot n^2 $
|
||||
Відмітимо, що ефективність $E_p$ дорівнює одиниці, що означає 100% використання всіх процесорів під час роботи алгоритму.
|
||||
Також, ціна дорівнює часу виконання на одному процесорі, що дає нам привід назвати цей розподіл роботи вартісно-оптимальним. // NOTE: E_p = S_p/p = T_1/C_p
|
||||
|
||||
// NOTE: завдання 3
|
||||
Наступним кроком, визначимо кількість процесорів і розподіл робіт, що забезпечує підвищення прискорення $S_p$ відносно попереднього варіанту.
|
||||
// S_p = T_1 / T_p
|
||||
Враховуючи, що ми не можемо впливати на кількість обробки елементів одним процесором,
|
||||
ми зменшимо кількість обробки $p$ процесорами, взявши $p = n^3$.
|
||||
Ця міра дозволить нам зменшити час обробки всіх елементів до наступного:
|
||||
$ T_p = T_"mult" + T_"sum" = 1 + log_2 n $
|
||||
Де $T_"mult" = 1$ тому що ми розділили час множення елементів $n$ на кількість процесорів $n$, та $T_"sum" = log_2 n$, використовуючи каскадний алгоритм додавання, згідно з теор. 1 та 2.
|
||||
|
||||
Розрахуємо основні показники для даного розподілу.
|
||||
$ S_p = T_1/T_(n^3) = ((2n-1) dot n^2)/(1+log_2 n) $
|
||||
$ E_p = S_p/p = ((2n-1) dot n^2)/(1+log_2 n)/n^3 = (2n-1)/(n(1+log_2 n)) = (2n-1)/(n+log_2 n^n) $
|
||||
$ C_p = T_p dot p = (1+log_2 n) dot n^3 $
|
||||
|
||||
// NOTE: завдання 4
|
||||
Далі, визначимо розподіл робіт, при якому кількість процесорів може бути меншою, ніж в попередній задачі.
|
||||
Для цього, візьмемо $p=n$. Використовуючи логіку з попередніх задач, визначимо паралельний час виконання: $T_p = n dot (2n - 1)$
|
||||
|
||||
Розрахуємо основні показники для даного розподілу.
|
||||
$ S_p = T_1/T_(n) = ((2n-1) dot n^2)/(n dot (2n-1)) = n $
|
||||
$ E_p = S_p/p = n/n = 1 $
|
||||
$ C_p = T_p dot p = ((2n-1) dot n) dot n = (2n - 1) dot n^2 $
|
||||
Можемо побачити абсолютно ідентичну ситуацію з усіма показниками (окрім прискорення)
|
||||
з розподілом робіт, де $p=n^2$. Це означає, що цей алгоритм використовує процесори 100% часу
|
||||
роботи алгоритма, а також є вартісно-оптимальним.
|
||||
|
||||
== Висновки
|
||||
|
||||
Було проведено аналіз розпаралелювання алгоритму добутку двох матриць, розмірністю $n times n$. Було застосовано декілька конфігурацій з різною кількістю процесорів.
|
||||
Для кожної конфігурації було розраховано основні параметри.
|
||||
Було отримано досвід оцінки трудомісткості
|
||||
паралельних обчислень за допомогою основних теорем.
|
||||
Reference in New Issue
Block a user