Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
kursovaya_rabota.docx
Скачиваний:
59
Добавлен:
21.09.2019
Размер:
565 Кб
Скачать
☆

2.1.4. Таблиця і графік проведених експериментів.

Проведемо два експерименти розрахунку визначеного інтегралу з різним кроком дискретизації і різною кількістю процесорів у кластері. Заповнимо таблицю результатами:

Таблиця. 2.1.Розрахунок визначеного інтегралу

Крок дискретизації / кількість процесів

1 процес

2 процеси

4 процеси

8 процесів

0,0002

0,004235

0,002028

0,002264

0,002635

0,00002

0,0857

0,023864

0,011583

0,013237

Рисунок 2.5.Графік залежності швидкості і часу розрахунку певного інтегралу

2.1.5. Висновок

З таблиці розрахунку визначеного інтегралу і графіку залежності швидкості від часу, ми бачимо, що при використанні паралельних обчислень, час на обробку визначеного інтегралу зменшується (відбувається прискорення обчислення за рахунок того, що кожний комп’ютер виконує менше циклів розрахунку). Також із таблиці ми можемо побачити, що чим більше процесів ми використовуємо, тим менше часу іде на розрахунок інтегралу. Але, чим більше процесів бере участь у розрахунку інтегралу, тим менше прискорення часу відбувається (якщо ми використовуємо два процеси замість одного, ми отримуємо прискорення у 1.046 разів, а при використанні 8 процесів замість чотирьох, отримаємо прискорення у 1.004 раз). Це відбувається тому,що при збільшенні числа процесів, збільшується і час на передачу повідомлень між процесами.

2.2. Завдання б. Варіант 3. Розробка паралельної програми множення квадратної матриці на квадратну матрицю.

2.2.1. Постановка завдання

Множення матриці A розміру m×n і матриці B розміру n×l наводить до здобуття матриці C розміру m×l, кожен елемент якої визначається відповідно до вираження:

Кожен елемент результуючої матриці C є скалярний твір відповідних рядки матриці A і стовпця матриці B:

Цей алгоритм передбачає виконання m*n*l операцій множення і стільки ж операцій складання елементів вихідних матриць. При множенні квадратних матриць розміру n×n кількість виконаних операцій має порядок O(n3).

Відомі послідовні алгоритми множення матриць, що володіють меншою обчислювальною складністю (наприклад, алгоритм Страссена (Strassen’s algorithm)).

Послідовний алгоритм множення матриць представляється трьома вкладеними циклами.

2.2.2. Послідовний алгоритм множення двох квадратних матриць

double MatrixA[Size][Size];

double MatrixB[Size][Size];

double MatrixC[Size][Size];

int i,j,k;

...

for (i=0; i<Size; i++){

for (j=0; j<Size; j++){

MatrixC[i][j] = 0;

for (k=0; k<Size; k++){

MatrixC[i][j]=MatrixC[i][j]+ MatrixA[i][k]*MatrixB[k][j];

}

}

}

Цей алгоритм є ітеративним і орієнтований на послідовне обчислення рядків матриці С. Дійсно, при виконанні однієї ітерації зовнішнього циклу (циклу по змінній i) обчислюється один рядок результуючої матриці (см. рис. 2.6).

З визначення операції матричного множення виходить, що обчислення всіх елементів матриці C може бути виконано незалежно один від одного. Як результат, можливий підхід для організації паралельних обчислень полягає у використанні як базова підзадача процедури визначення одного елементу результуючої матриці С. Для проведення всіх необхідних обчислень кожна підзадача повинна містити по одному рядку матриці А і одному стовпцю матриці В. Загальна кількість отримуваних при такому підході підзадач виявляється рівним n2 (по числу елементів матриці C).

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

У цьому плані може виявитися корисною агрегація обчислень вже на кроці виділення базових підзадач. Можливе рішення може полягати в об'єднанні в рамках однієї підзадачі всіх обчислень, пов'язаних не з одним, а з декількома елементами результуючої матриці С. Для подальшого розгляду визначимо базове завдання як процедуру обчислення всіх елементів одного з рядків матриці С. Такий підхід призводить до зниження загальної кількості підзадач до величини n. Для виконання всіх необхідних обчислень базовій підзадачі мають бути доступні один з рядків матриці A і всі стовпці матриці B. Просте вирішення цієї проблеми:

– дублювання матриці B у всіх підзадачах – є, як правило, неприйнятним через великі витрати пам'яті для зберігання даних. Тому організація обчислень має бути побудована так, щоб в кожен теперішній момент часу підзадачі містили лише частину даних, необхідних для проведення розрахунків, а доступ до останньої частини даних забезпечувався б за допомогою передачі даних між процесорами.

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

Можлива проста схема організації необхідної послідовності передач стовпців матриці В між підзадачами полягає в представленні топології інформаційних зв'язків підзадач у вигляді кільцевої структури. В цьому випадку на кожній ітерації підзадача i, 0<i<n, передаватиме свій стовпець матриці В підзадачі з номером i+1 (відповідно до кільцевої структури підзадача n-1 передає свої дані підзадачі з номером 0) – див. рис. 2.5. Після виконання всіх ітерацій алгоритму необхідна умова буде забезпечена – в кожній підзадачі по черзі виявляться всі стовпці матриці С.

На рис. 2.5 представлені ітерації алгоритму матричного множення для випадку, коли матриці складаються з чотирьох рядків і чотирьох стовпців (n=4). На початку обчислень в кожній підзадачі i, 0<i<n, розташовуються i-я рядок матриці A і i-й стовпець матриці B. В результаті їх перемножування підзадача отримує елемент cii результуючої матриці С.

Далі підзадачі здійснюють обмін стовпцями, в ході якого кожна підзадача передає свій стовпець матриці B наступній підзадачі відповідно до кільцевої структури інформаційних взаємодій. Далі виконання описаних дій повторюється до завершення всіх ітерацій паралельного алгоритму.

Рис.2.7. Загальна схема передачі даных для першого паралельного алгоритму матричного множення при стрічковій схемі розділення даних

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]