您的位置:首页 > 编程语言

OpenMP编程->数据约束

2014-04-13 16:03 148 查看
/*多个线程的执行结果通过reduction中声明的操作符进行计算,以加法操作符为例:假设
sum的初始值为10,reduction(+: sum)声明的并行区域中每个线程的sum初始值为0(规定
),并行处理结束之后,会将sum的初始化值10以及每个线程所计算的sum值相加。 */
void test8()
{
int sum = 0;

std::cout << "Before: " << sum << std::endl;
omp_set_num_threads(3);
#pragma omp parallel for reduction(+: sum)
for (int i = 0; i < 15; ++i)
{
sum = sum + i;
cout<<"ID "<<omp_get_thread_num()<<endl;
std::cout << sum << std::endl;
}

std::cout << "After: " << sum << std::endl;
}
/*
reduction (operator: var1, val2, ...)
其中operator以及约定变量的初始值如下:
运算符 数据类型 默认初始值
+ 整数、浮点 0
- 整数、浮点 0
* 整数、浮点 1
& 整数 所有位均为1
| 整数 0
^ 整数 0
&& 整数 1
|| 整数 0
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: