logo
делать №5

Приклад виконання задачі для імітації розпаралелення процесу додавання двох матриць 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;

}

Робота програми

Програма виконує знаходження добутку матриць, імітуючи розпаралелення процесу. Використано такі змінні:

На рисуноку 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 – Приклад виконання програми