// Sum_section.cpp : 定義控制檯應用程序的入口點。
//section功能:;
//1.指定其內部的代碼劃分給線程中某個線程,不同的section由不同的線程執行;
//2.將一個任務劃分成獨立的幾個section,且section之間是並行執行的;
#include "stdafx.h"
//#include <stdio.h>
#include <time.h>
#include "omp.h"
#include <windows.h>
#define NUM_THREADS 2
#define num 1000000000
int _tmain(int argc, _TCHAR* argv[])
{
omp_set_num_threads(NUM_THREADS);
long long sum=0;
clock_t t1=clock();
#pragma omp parallel sections reduction(+:sum)//reduction解決數據競爭,將兩個線程所得的sum加起來
{
#pragma omp section
{
for (long i=omp_get_thread_num();i<=num;i=i+NUM_THREADS)
{
sum=sum+i;
}
}
#pragma omp section
{
for (long i=omp_get_thread_num();i<=num;i=i+NUM_THREADS)
{
sum=sum+i;
}
}
}
clock_t t2=clock();
clock_t parallel=t2-t1;
printf("sum=%lld\n",sum);
printf("parallel time=%d\n\n",parallel);
//串行
sum=0;
t1=clock();
for(long long i=1;i<=num;i=i+1)
{
sum=sum+i;
}
t2=clock();
clock_t serial=t2-t1;
printf("sum=%lld\n",sum);
printf("serial time=%d\n",serial);
system("pause");
return 0;
}
//運行結果如下:相對加速比爲:2981/1643=1.81
OpenMP之求和(用section分塊完成)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.