Розпаралелювання обчислення суми десяти чисел
Cout << «Потоки завершили виконання» << endl; Cout << «Потоки завершили виконання» << endl; Cout << «Потоки завершили виконання» << endl; Рис. 1 Схема розпаралелювання процесу. Unsigned __stdcall Sum2(void * arg) // Функція потоку. Unsigned __stdcall Sum (void * arg) // Функція потоку. Thread = (HANDLE)_beginthreadex (NULL, 0, Sum2, 0, 0, &tid); Thread = (HANDLE)_beginthreadex (NULL, 0, Sum2, 0… Читати ще >
Розпаралелювання обчислення суми десяти чисел (реферат, курсова, диплом, контрольна)
Лабораторна робота № 2.
Тема: Розпаралелювання обчислення суми десяти чисел Бондар Ігор СУА-12−1.
Задача Задано масив перших десяти натуральних чисел. Скласти блок-схеми і програму алгоритму розпаралелювання сум від 4 до 10 чисел. Для перевірки додати у програму частину, яка б сумувала числа за допомогою стандартного алгоритму. Алгоритм і програму складати за умовою, що є два процесори.
Лістинг програми.
// ptroc++.cpp: определяет точку входа для консольного приложения.
#include «stdafx.h» .
#include.
#include.
#include.
#include.
using namespace std;
int proc1, proc2, k=0, mem[12];
unsigned tid;
HANDLE Thread[10];
int i, p=2, A, B;
int a[10]= {0,0,0,0,0,0,0,0,0,0};
unsigned __stdcall Sum (void * arg) // Функція потоку.
{.
proc1=a[k]; proc2=a[k+1];
mem[k]=proc1+proc2;
cout<<" Комiрка памятi[ «<<» ] «<<
k+=2;
return 0;
};
unsigned __stdcall Sum2(void * arg) // Функція потоку
{
proc1 = mem[k];
proc2 = mem[k + p];
mem[k] = proc1 + proc2;
cout << «Комiрка памятi[ «<< i << «] «<< mem[k] << endl;
k += 4;
return 0;
};
int main ()
{
setlocale (LC_ALL, «Russian»);
cout<<" Введiть кiлькiсть чисел (до десяти) «;
cin>>A;
for (i = 0; i < A; i++)
{
cout << «Введiть число «<< i <<»: «;
cin >> a[i];
}
for (i = 0; i < 5; i++)
{
Thread[i] = (HANDLE)_beginthreadex (NULL, 0, Sum, 0, 0, &tid);
Sleep (10);
}
// Чекаємо, доки потоки не завершать свою работу
WaitForMultipleObjects (5, Thread, TRUE, INFINITE);
cout << «Потоки завершили виконання» << endl;
for (i = 0; i < 10; i++)
{
CloseHandle (Thread[i]);
}
k = 0;
for (i = 0; i < 3; i++)
{
Thread[i] = (HANDLE)_beginthreadex (NULL, 0, Sum2, 0, 0, &tid);
Sleep (10);
}
// Чекаємо, доки потоки не завершать свою работу
WaitForMultipleObjects (3, Thread, TRUE, INFINITE);
cout << «Потоки завершили виконання» << endl;
for (i = 0; i < 3; i++)
{CloseHandle (Thread[i]);}
p = 4;
k = 0;
i = 0;
Thread[1] = (HANDLE)_beginthreadex (NULL, 0, Sum2, 0, 0, &tid);
Sleep (10);
cout << «Потоки завершили виконання» << endl;
CloseHandle (Thread[1]);
p = 8;
k = 0;
i = 0;
Thread[2] = (HANDLE)_beginthreadex (NULL, 0, Sum2, 0, 0, &tid);
Sleep (10);
cout << «Потоки завершили виконання» << endl;
CloseHandle (Thread[1]);
_getch ();
return 0;
}
Рис. 1 Схема розпаралелювання процесу
розпаралелювання число натуральний масив На рис. 3 показано процес розпаралелювання. В першому та другому ярусі всі чотири процесори виконують функцію множення, в третьому — додавання. Як видно на малюнку при виконанні задачі не виникає конфліктів в пам’яті.
Висновок: під час цієї лабораторної роботи ми навчилися розпаралелюванним обчисленням суми десяти чисел.