// OpenMP1.cpp : 定义控制台应用程序的入口点。
//使用并行区域方法进行求和。
#include "stdafx.h"
#include <omp.h>
#include <stdlib.h>
#include <time.h>
#include <windows.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=0;
for(i=id;i<=1000000000;i=i+NUM_THREADS)
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+=1)
sum=sum+i;
t2=clock();
printf("sum=%lld\n",sum);
printf("serial time=%d\n",(t2-t1));
system("pause");
return 0;
}
运行结果:
分析:
加速比为2277/1139=1.999