本文主要是介绍OpenMP编程-数据约束,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
/*多个线程的执行结果通过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
*/
这篇关于OpenMP编程-数据约束的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!