Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти і науки УкраїниНаціональний університет «Львівська політехніка»
Лабораторна робота №3з дисципліни: «Технології розподілених систем та паралельних обчислень»Варіант - 6
Тема роботи: Сучасні технології паралельного та розподіленого програмування у порівнянні з технологією OpenMP.
Мета роботи: Оволодіти практичними прийомами розробки паралельних алгоритмів та розподілених програм за допомогою сучасних технологій програмування, дослідити їх переваги при розв’язанні практичних задач у порівнянні з технологією OpenMP.
Завдання: Обчислити суму 1/1 + 1/2 + 1/3 + … до заданої кількості знаків після коми.
Виконання.
Код програми:
#include <iostream>
#include <time.h>
#include <sstream>
#include <amp.h>
#include <amp_math.h>
//#include <ppl.h>
using namespace std;
using namespace concurrency;
void main()
{
setlocale(LC_ALL, "");
double *ms, sum = 0, temp = 0, temp_sum = 0;//Для розміщення добутків і знаходження суми
int size = 0, temp_koma = 1;
clock_t t1;//Змінна, яка буде підраховувати час роботи програми
cout << "Кiлькiсть значень пiсля коми: ";
cin >> size;
for (int i = 0; i < size; ++i) temp_koma = temp_koma * 10;
temp = 1 / (double)temp_koma;
cout << "Значення пiсля коми: " << temp << endl;
cout << "Результат операцiї дiлення [частка]" << endl;
int count = 0;
if (size == 1) count = 3;
if (size == 2) count = 13;
if (size == 3) count = 31;
if (size == 4) count = 35;
if (size == 5) count = 351;
if (size == 6) count = 1203;
if (size == 7) count = 3630;
if (size == 8) count = 8778;
size = temp_koma + count;
ms = new double[size];
t1 = clock();//Для часу роботи всієї програми
array_view<double, 1> summm(size, ms);
//size = 5;
parallel_for(0, size, [=](int i) //restrict(amp)
{
summm[i] = (double)1 / (i + 1);
});
for (unsigned int i = 0; i < size; ++i){
sum += summm[i];
cout << summm[i] << endl;
}
t1 = clock() - t1;
printf("\nЦе забрало (%f секунд).\n", ((float)t1) / CLOCKS_PER_SEC);//Вивід часу роботи програми
cout << endl << "Сума чисел: " << sum << endl;
free(ms);
system("pause");
}
Програма в роботі:
Час з використанням AMP
/
Без використанням AMP
/
Висновок: на лабораторній роботі було виконано завдання написавши код, який реалізовує алгоритм його виконання. Використав для розпаралелення іншу технологію, під назвою AMP, бібліотека встроєна в Visual Studio 2013. Ця технологія дуже подібна до omp і в багатьох джерелах порівнюють між собою ці 2 технології. amp це оновлення до omp або створено на його прикладі. AMP на мою думку більш гнучкіша і стійкіша до виключень, тому що більш чітко потрібно писати код, у іншому випадку буде враховуватись як помилка. На мою думку це краще, тому що краще зразу написати код без помилок, ніж пізніше шукати проблему і виправляти проблему.