参考链接: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
加速了哦!不知道还可以怎么优化,暂时就这样吧,大家有建议,可以提议提!