Приклад виконання задачі для імітації розпаралелення процесу додавання двох матриць 2х2
Листинг програми
/* Програма виконує множення двох матриць 2х2 А і В з імітацією процесу розпаралелювання. Використовує 4 процесори і 8 елементів пам'яті. */
#include <iostream.h> //Підключення бібліотек
#include <windows.h>
#include <conio.h>
int i,j,a[2][2],b[2][2],proc1,proc2,proc3,proc4; //Опис змінних
int mem1,mem2,mem3,mem4,mem5,mem6,mem7,mem8;
int main() //Початок головної функції
{ SetConsoleOutputCP(1251); //Використання кодування 1251
cout<<"введите масив A\n"; //Ініціалізація масиву А
for (i=0;i<2;i++){
for (j=0;j<2;j++){
cin>>a[i][j]; }
}
cout<<"введите масив B\n"; //Ініціалізація масиву В
for (i=0;i<2;i++){
for (j=0;j<2;j++){
cin>>b[i][j];}
}
cout<<"Массив A: "; //Виведення масиву А
cout<<endl;
for (i=0;i<2;i++){
for (j=0;j<2;j++){
cout<<a[i][j]<<"\t"; }
cout<<endl;
}
cout<<"Массив В: "; //Виведення масиву В
cout<<endl;
for (i=0;i<2;i++){
for (j=0;j<2;j++){
cout<<b[i][j]<<"\t"; }
cout<<endl;
}
//перший ярус
proc1=a[0][0]*b[0][0];
mem1=proc1;
proc2=a[0][1]*b[1][0];
mem2=proc2;
proc3=a[1][0]*b[0][1];
mem3=proc3;
proc4=a[1][1]*b[1][1];
mem4=proc4;
//другий ярус
proc1=a[0][0]*b[0][1];
mem5=proc1;
proc2=a[0][1]*b[1][1];
mem6=proc2;
proc3=a[1][0]*b[0][0];
mem7=proc3;
proc4=a[1][1]*b[1][0];
mem8=proc4;
//третій ярус
proc1=mem1+mem2;
mem1=proc1;
proc2=mem3+mem4;
mem3=proc2;
proc3=mem5+mem6;
mem2=proc3;
proc4=mem7+mem8;
mem4=proc4;
cout<<"Результат: \n"; //Виведення результатів
cout<<mem1<<"\t";
cout<<mem2<<"\n";
cout<<mem3<<"\t";
cout<<mem4<<"\n";
getch(); //Очікування натиснення клавіші
return 0;
}
Робота програми
Програма виконує знаходження добутку матриць, імітуючи розпаралелення процесу. Використано такі змінні:
8 комірок памяті — змінні mem1–mem8;
4 процесори proc1 – proc4;
лічильники i,j;
масиви a[2,2], b[2,2].
На рисуноку 1.4 показано процес розпаралелення. В першому та другому ярусі всі чотири процесори виконують функцію множення, в третьому — додавання. Як видно на рисунку, при виконанні задачі не виникає конфліктів в пам’яті.
На рисунку 1.5 проілюстровано результат виконання програми. Далі подані результати у компактному вигляді.
Рисунок 1.4 – Схема розпаралелення процесу
Введите массив А
1
5
4
3
Введите массив В
2
3
4
5
Массив А:
1 5
4 3
Массив В:
2 3
6 5
Результат :
32 28
26 27
Рисунок 1.5 – Приклад виконання програми
- Методичні вказівки
- "Паралельні та розподілені обчислення"
- М.Кривий Ріг
- Основні вимоги та загальні методичні вказівки до виконання лабораторних робіт
- Лабораторна робота №1 Тема: «Імітація процесу розпаралелювання обчислення суми, добутку, матриць та знаходження коефіцієнтів характеристичного поліному»
- Концепція необмеженого паралелізму
- Приклад:
- Приклад виконання задачі для імітації розпаралелення процесу додавання двох матриць 2х2
- Звіт повинен містити:
- Контрольні питання:
- Лабораторна робота №2 Тема: «Розпаралелювання обчислення суми десяти чисел»
- Хід роботи
- Для восьми чисел:
- Для дев’яти чисел:
- Особливості програмного інтерфейсу потоків
- Створення потоків у Win32 арі
- Завершення потоків у Win32 арі
- Приєднання потоків у Win32 арі
- Приклад програми для знаходження суми 8-ми чисел за допомогою процесів без розпаралелення
- Звіт повинен містити:
- Контрольні питання:
- Лабораторна робота №3 Тема: «Розпаралелювання обчислення суми, добутку матриць та знаходження коефіцієнтів характеристичного поліному»
- Приклад виконання задачі розпаралелювання процесу додавання двох матриць 2х2
- Звіт повинен містити:
- Контрольні питання:
- Лабораторна робота №4 Тема: «Розпаралелювання процесу сортування масивів даних»
- Теоретичні відомості Мютекси
- Правила спрощеного паралелізму
- Приклад програми процесу сортування масиву даних
- Звіт повинен містити:
- Контрольні питання:
- Приклад виконання програми
- Звіт повинен містити:
- Контрольні питання:
- Література
- Додаток а
- "Паралельні та розподілені обчислення"
- 6.050102 «Комп’ютерні системи та мережі»