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
*/
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编程->数据约束
- OpenMP编程->数据传递
- OpenMP编程->数据传递
- OpenMP编程的数据竞争问题
- 数据更新:updata 逻辑运算符的优先等级问题 not>and>or 删除一个表中的内容 约束
- Day59-Oracle03 - 创建表空间、创建表(子查询创建表)、表的约束、事务、数据库对象(视图、序列、索引、同义词)、PLSQL编程、(if,循环)、数据的导入导出备份
- OpenMP编程->调度优化
- OpenMP编程->调度优化
- <良好的编程风格与习惯>使用数据的一般事项核对表
- OpenMP编程->并行循环
- 客户咨询<基于UDP协议的Socket编程(数据报式套接字)>
- Java编程基础知识复习:变量与数据类型<数据类型初阶>
- OpenCV编程->OpenMP优化入门
- 【Qt编程】基于Qt的词典开发系列<九>--JSON数据解析
- [置顶] OpenMP编程->互斥锁函数
- windows 编程随笔——GDI>>一些内部数据结构
- OpenMP编程->互斥锁函数
- OpenMP编程->库函数
- OpenMP编程->同步机制
- OpenMP编程的数据竞争问题