Термінова допомога студентам
Дипломи, курсові, реферати, контрольні...

Розпаралелювання обчислення суми десяти чисел

РефератДопомога в написанніДізнатися вартістьмоєї роботи

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 показано процес розпаралелювання. В першому та другому ярусі всі чотири процесори виконують функцію множення, в третьому — додавання. Як видно на малюнку при виконанні задачі не виникає конфліктів в пам’яті.

Висновок: під час цієї лабораторної роботи ми навчилися розпаралелюванним обчисленням суми десяти чисел.

Показати весь текст
Заповнити форму поточною роботою