OpenMp 程序优化,怎么让并行达到并行的效果!
来源:互联网 发布:网络教育哪家好 编辑:程序博客网 时间:2024/04/30 06:43
参考链接:http://blog.csdn.net/donhao/article/details/5651156
常用的库函数
函数原型 功能
int omp_get_num_procs(void) 返回当前可用的处理器个数
int omp_get_num_threads(void) 返回当前并行区域中的活动线程个数,如果在并行区域外部调用,返回1
int omp_get_thread_num(void) 返回当前的线程号(个人感觉这里为omp_get_thread_ID好一些)
int omp_set_num_threads(void) 设置进入并行区域时,将要创建的线程个数
写了个并行程序,本来吧,不用并行的时候运行时间:680000
在程序里的两个差不多的for循环中加入了#pragma omp parallel for 糟糕了,时间变成了34130000,俺用的是4个核心,俺很感伤。
我又把代码换成了 #pragma omp parallel for shedule(runtime)时间终于变成了12400000,依然很感伤,慢了20倍。
查了资料,乒乓效应看不懂,不过应该是它。
所以我把代码有换成了 #pragma omp parallel for private(i,sum,s) shedule(runtime)
于是我开心了,因为时间变成了1280000,可是伤感啊,速度还是没有提高啊。
把private(sum)改成reduction(+:sum) 1290000没有明显改善。
终于,忍不住找老师帮了忙,原本定义时刻的是:clock_t t1,t2;用clock()提取自己想要的时间。
后来改成了,double t1,t2; 用 omp_get_wtime()函数提取自己想要的时刻。
用 export OMP_NUM_THREADS=1或2或3或4来测试自己的的程序运用不同核心数时候的速度。
发现,核心数为1时:Time is 1.032s
核心数为2时:Time is 0.568s
核心数为3时:Time is 0.403s
核心数为4时:Time is 0.322s
加速了哦!不知道还可以怎么优化,暂时就这样吧,大家有建议,可以提议提!
- OpenMp 程序优化,怎么让并行达到并行的效果!
- 程序优化之并行OpenMP
- OpenMP: 程序for循环并行效率优化
- Qt OpenMP并行程序
- OpenMP程序 for 循环并行的效率
- Qt下OpenMP并行程序
- 如何利用VS的代码优化和openmp并行计算提高程序运行速度
- 利用VS的代码优化和openmp并行计算提高程序运行速度
- Openmp并行域内的子函数并行化
- OpenMP: 并行域内的子函数并行化
- OpenMP: 循环结构的并行
- OpenMP: 循环结构的并行
- OpenMP循环结构的并行
- openmp并行的计时问题
- OpenMP: OpenMP并行程序设计
- OpenMP: OpenMP嵌套并行
- OpenMP: OpenMP嵌套并行
- Qt使用openmp并行化加速程序
- POSIX 线程详解,第1部分
- mysql出现unauthenticated user简单分析以及解决方法
- 提高matlab运行速度的心得
- 第一篇
- Android ICS2中.nomedia文件或文件夹用来屏蔽文件避免在图库或铃声中出现.
- OpenMp 程序优化,怎么让并行达到并行的效果!
- 新浪微博开发保存的access_token不能继续使用的解决办法
- hdu 1175 连连看<java>
- TCP/IP协议栈与数据包封装
- Node.js优缺点
- 解决mysql设置密码不成功问题
- 黑马程序员----交通灯管理系统
- XMLSAX解析
- Java调用Webservice(asmx)的几个例子