little changes
This commit is contained in:
@@ -11,16 +11,9 @@
|
||||
|
||||
== Хід роботи
|
||||
#v(-spacing)
|
||||
/* TODO: work
|
||||
3. Розрахувати прискорення та ефективність для розробленого паралельного алгоритму.
|
||||
// 4. Написати програмний засіб обробки зображення, якій накладає фільтр згідно з отриманим завданням.
|
||||
// 5. Зібрати статистику витрат часу на обробку зображенні в одному та декількох потоках (1, 2, 4, 6, 8, 10, 12, 14, 16).
|
||||
6. Побудувати графік залежності часу обробки зображення та створених потоків.
|
||||
7. Порівняти отримані практичні результати з теоретичними.
|
||||
*/
|
||||
|
||||
Для виконання роботи було обрано тему "Шум Перліна". Шум Перліна -- це алгоритм
|
||||
генерації процедурного шуму, розроблений Кеном Перліномб який
|
||||
генерації процедурного шуму, розроблений Кеном Перліном, який
|
||||
створює природно виглядаючі випадкові текстури та рельєфи. На відміну від
|
||||
звичайного випадкового шуму, шум Перліна генерує плавні, безперервні градієнти
|
||||
шляхом інтерполяції між випадковими векторами градієнтів на регулярній сітці,
|
||||
@@ -33,7 +26,9 @@ $ T_p = T_1/p $
|
||||
Використаємо стандартну формулу розрахунку прискорення, підставивши значення часу виконання на декількох процесорах з минулого рівняння.
|
||||
$ S_p = T_1/T_p = T_1/(T_1/p) = p $
|
||||
|
||||
Для конкретних розрахунків візьмемо час виконання на одному потоці з реальної роботи програми (середнє значення з 10 запусків):
|
||||
Для конкретних розрахунків візьмемо час виконання на одному
|
||||
потоці з реальної роботи програми з шумом
|
||||
розміру 8129 на 8129 пікселів (було взято середнє значення з 10 запусків):
|
||||
$ T_1 = 6.48301 (sec) $
|
||||
|
||||
#let t1 = decimal("6.48301")
|
||||
@@ -66,14 +61,19 @@ $ T_1 = 6.48301 (sec) $
|
||||
|
||||
#figure(table(
|
||||
columns: 4,
|
||||
table.header([$p$], [$T_p$], [$S_p$], [$E_p$]),
|
||||
table.header([$p$], [$T_p$ (сер. за 10 запусків)], [$S_p$ (разів)], [$E_p$]),
|
||||
..(1, ..range(2, 16 + 1, step: 2))
|
||||
.zip(practical)
|
||||
.map(v => {
|
||||
let (p, prac) = v
|
||||
let speedup = t1 / prac
|
||||
let effcy = speedup / p
|
||||
([$#p$], [$#prac$], [$#(calc.round(speedup, digits: 5))$], [$#(calc.round(effcy, digits: 5))$])
|
||||
(
|
||||
[$#p$],
|
||||
[$#prac$],
|
||||
[$#(calc.round(speedup, digits: 5))$],
|
||||
[$#(calc.round(effcy, digits: 5)) approx #(calc.round(effcy * 100, digits: 2))%$],
|
||||
)
|
||||
})
|
||||
.flatten(),
|
||||
))
|
||||
@@ -89,8 +89,8 @@ $ T_1 = 6.48301 (sec) $
|
||||
|
||||
Також, було зображенно порівняння замірів на графіку (@plot[рис.]). Можна побачити, що
|
||||
після того, як значення $p$ досягає чотирьох одиниць, дані практичного і теоретичного
|
||||
розрахунків розходяться. Скоріш за все, це пов'язано з тим, що цей комп'ютер має
|
||||
лише чотири фізичних ядра.
|
||||
розрахунків розходяться. Скоріш за все, це пов'язано з тим, що комп'ютер, на якому було виконану
|
||||
лабораторну роботу має лише чотири фізичних ядра.
|
||||
Іншими словами, він може виконувати лише чотири завдання справді паралельно.
|
||||
Якщо кількість використаних потоків збільшується,
|
||||
відбувається розділення ресурсів одного фізичного ядра
|
||||
@@ -106,7 +106,7 @@ $ T_1 = 6.48301 (sec) $
|
||||
|
||||
#figure(
|
||||
image("./noise.png", width: 50%),
|
||||
caption: [Згенерований шум перліна],
|
||||
caption: [Приклад згенерованого шуму перліна],
|
||||
) <noise>
|
||||
|
||||
/* 1 THREAD{{{
|
||||
@@ -353,4 +353,8 @@ Vendor ID: AuthenticAMD
|
||||
|
||||
== Висновки
|
||||
#v(-spacing)
|
||||
// TODO: conclusions
|
||||
Було проведено роботу з способами організації паралельних
|
||||
багатопоточних додатків на прикладі розробки програмного засобу,
|
||||
що генерує статичний шум Перліна. Було проведено бенчмаркінг
|
||||
програмного засобу на декількох різних конфігураціях та порівняно
|
||||
резульати теоретичних розрахунків з отриманими на практиці значеннями.
|
||||
|
||||
Reference in New Issue
Block a user