OpenMP 并行求和for指令并行求和方法
开启两个并行线程程序如下:
#include "stdafx.h"
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <omp.h>
#define NUM_THREADS 2
int _tmain(int argc, _TCHAR* argv[])
{
omp_set_num_threads(NUM_THREADS);
long long sum = 0;
long long sumtmp [NUM_THREADS];
clock_t t1 = clock();
#pragma omp parallel
{
long i;
long id = omp_get_thread_num();
long long temp = 0l;
#pragma omp for
for(i = 1;i<= 1000000000; i++)
{
temp +=i;
}
sumtmp[id] = temp;
}
for(long i = 0;i<NUM_THREADS; i++)
{
sum +=sumtmp[i];
}
clock_t t2 = clock();
printf("sum=%lld\n",sum);
printf("parallel time=%d\n",(t2-t1));
sum = 0;
t1 = clock();
for (long i = 1;i<=1000000000;i++)
{
sum = sum + i;
}
t2 = clock();
printf("sum=%lld\n",sum);
printf("serial time=%d\n",(t2-t1));
printf("wo shi xingxing\n");
system("pause");
return 0;
}
运行结果如下图:
开启四个并行线程(修改如下语句):
#define NUM_THREADS 4
运行结果如下图: