Visual Studio 2015 OpenMP: (2) reduction
2016-03-22 14:02
531 查看
对于+,-,*,&,|,&&,||等运算,可以使用OpenMP提供的reduction方法,下面以求和+为例,说明其使用方法:
这里reduction的意思是:CPU多线程执行for循环,每个线程保存ans的副本,循环结束后累加每个线程的ans并输出为ans。我的结果是ans=0.23288398,运行时间10ms.
之所以用reduction求和的原因是,避免race condition这个问题。race condition是多线程编程中比较头疼的问题,因为多个线程同时访问相同的共享内存会导致结果依赖于进程运行的精确时序。
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是多线程编程中比较头疼的问题,因为多个线程同时访问相同的共享内存会导致结果依赖于进程运行的精确时序。
相关文章推荐
- OpenResty安装 Mac
- nginx学习心得
- CentOS7.1 Liberty云平台之Networking篇(6)
- Linux内核同步机制之(三):memory barrier【转】
- Flume日志收集分层架构应用实践
- #!/bin/bash
- Flume(NG)架构设计要点及配置实践
- 依赖注入及AOP简述(四)——“好莱坞原则”和依赖注入框架简介
- Linux network setting.
- Linux常见命令总结
- 远程部署Maven web项目到web服务器
- [学习开发板]iTOP-4412开发板AVIN驱动配置
- Linux中的makefile文件
- 百度UEditor图片上传、SpringMVC、Freemarker、Tomcat、Nginx、静态资源
- Linux 系统命令及其使用详解(大全)
- WPF MVVM之INotifyPropertyChanged接口的几种实现方式
- WEB三层架构与MVC
- 达观数据分析平台架构和Hive实践
- OpenCV问题记录
- Tomcat配置JNDI数据源的方式及使用