您的位置:首页 > 运维架构

Visual Studio 2015 OpenMP: (2) reduction

2016-03-22 14:02 531 查看
对于+,-,*,&,|,&&,||等运算,可以使用OpenMP提供的reduction方法,下面以求和+为例,说明其使用方法:

long NumAmounts = (long)1e6;
double ans = .0;

#pragma omp parallel for reduction (+:ans)
for (int i = 0; i < NumAmounts; ++i)
{
ans += sin((double)i);
}
fprintf(stdout, "Answer is: %16.8lf\n", ans);


这里reduction的意思是:CPU多线程执行for循环,每个线程保存ans的副本,循环结束后累加每个线程的ans并输出为ans。我的结果是ans=0.23288398,运行时间10ms.

之所以用reduction求和的原因是,避免race condition这个问题。race condition是多线程编程中比较头疼的问题,因为多个线程同时访问相同的共享内存会导致结果依赖于进程运行的精确时序。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: