OMP的效率测试

来源:互联网 发布:jsp javabean 获取数组 编辑:程序博客网 时间:2024/05/16 14:32

OMP是现在比较流行的并行计算的库,现在支持c,c++和fortran, 从VS2003开始已经集成到VS中了,要是用它分两步,1,第一步,在VS的properties里面的C/C++-->Language的OpenMP Support选择Yes。2.  第二步,程序中包括omp.h.测试程序为: 计算Pi。程序如下:

#include <boost/progress.hpp>#include <omp.h>using namespace std;using namespace boost::gregorian;const static __int64 num_steps = 10000000000;double step,pi;int main(int argc, char* argv[]){{boost::progress_timer t;__int64 i;double x,sum=0.0;step = 1.0/(double)num_steps;#pragma omp parallel for private(x) reduction(+:sum)for(i = 0; i < num_steps; i++){x = (i+0.5)*step;sum = sum + 4.0/(1.0+x*x);}pi = step*sum;printf("Pi = %f\n",pi);}//system("pause");return 0;}
串行计算的时候,也即注释掉pragma omp parallel for private(x) reduction(+:sum)的后,运行速度为

 


机器一共16个core,因此CPU的占有率一直是6%左右。


在并行的时候,即使用pragma omp parallel for private(x) reduction(+:sum)后,CPU使用情况以及运行速度如下,

上图中16个core全都用满了。

 

运行速度比串行的快了10倍。