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倍。