/*多个线程的执行结果通过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实现的并行编程示例,重点讲解了reduction子句如何帮助处理多个线程产生的结果。通过一个简单的求和程序,展示了不同线程如何各自计算部分结果,并最终合并到全局变量中。
2903

被折叠的 条评论
为什么被折叠?



