1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
|
#include "stdafx.h"
#include <iostream>
#include <time.h>
#include <conio.h>
#include <Windows.h>
#include <ppl.h>
#include <iomanip>
int _tmain(int argc, _TCHAR* argv[])
{
// Sequential computation
double Sum = 0.48022937707356972;
double Df = 0.29988796445769539;
clock_t startSequential = clock();
for(int i = 0 ; i < 100 ; ++i)
{
Sum+=i*Df;
Sleep(1);
}
clock_t endSequential = clock();
clock_t finSequential = endSequential - startSequential;
std::cout << "--------------SEQUENTIAL--------------" << std::endl;
std::cout << "\tSum : " << std::setprecision(17) << Sum << std::endl;
std::cout << "\tTime for computation : " << finSequential << std::endl;
// Parallel computation
clock_t startParallel = clock();
Sum = 0.48022937707356972;
Concurrency::critical_section mutexContention;
Concurrency::parallel_for( 0, 100, [&]( int i )
{
mutexContention.lock();
Sum+=i*Df;
mutexContention.unlock();
Sleep(1);
});
clock_t endParallel = clock();
clock_t finParallel = endParallel - startParallel;
std::cout << "--------------PARALLEL CONCURRENCY--------------" << std::endl;
std::cout << "\tSum : " << std::setprecision(17) << Sum << std::endl;
std::cout << "\tTime for computation : " << finParallel << std::endl;
clock_t startParallelOpen_MP = clock();
int imp;
Sum=0.48022937707356972;
#pragma omp parallel for reduction(+:Sum)
for( imp = 0 ; imp < 100 ; imp++)
{
Sum+=imp*Df;
Sleep(1);
}
clock_t endParallelOpen_MP = clock();
clock_t finParallelOpen_MP = endParallelOpen_MP - startParallelOpen_MP;
std::cout << "--------------PARALLEL OPEN MP--------------" << std::endl;
std::cout << "\tSum : " << std::setprecision(17) << Sum << std::endl;
std::cout << "\tTime for computation : " << finParallelOpen_MP << std::endl;
std::cout<<std::endl<<"press any key to exit..." <<std::endl;
_getch();
return 0;
} |
Partager