一个简单的OpenMP例子
首先启动VisualStudio 2010,新建一个C++的控制台应用程序,如下图所示:
然后在项目解决方案资源管理器上选择项目名称,点击右键,选择“属性”,如下图所示:
然后在属性页上左侧选择“配置属性”——“C/C++”——“语言”,然后在右侧“OpenMP支持”后选择“是(/openmp)”,如下图所示:
在cpp文件中添加如下代码:
#include "stdafx.h"
#include<omp.h>
#include<iostream>
usingnamespace std;
//循环测试函数
void test()
{
for(int i=0;i<10000;i++)
{
}
}
int _tmain(int argc,_TCHAR* argv[])
{
cout<<"这是一个串行测试程序!\n";
double start = omp_get_wtime( );//获取起始时间
for(int i = 0; i < 10000; i++)
{
test();
}
double end = omp_get_wtime( );
cout<<"计算耗时为:"<<end -start<<"\n";
cin>>end;
return 0;
}
以上代码中红色字体为添加的代码,以上程序是一个典型的串行程序,经过随机运行10次,其平均耗时约0.283273s(具体所耗时间跟测试计算机有密切的关系,测试电脑CPU采用Core I7 2630QM,4核)。
下面将其转换成并行程序,只需要在for循环加上#pragma omp parallel for即可,如下代码(注意红色部分):
#include "stdafx.h"
#include<omp.h>
#include <iostream>
using namespace std;
//循环测试函数
void test()
{
for(inti=0;i<10000;i++)
{
}
}
int _tmain(int argc, _TCHAR* argv[])
{
cout<<"这是一个并行测试程序!\n";
doublestart = omp_get_wtime( );//获取起始时间
#pragma ompparallel for
for(inti = 0; i < 10000; i++)
{
test();
}
doubleend = omp_get_wtime( );
cout<<"计算耗时为:"<<end -start<<"\n";
cin>>end;
return0;
}
次数 | 串行 | 并行 |
1 | 0.283382 | 0.0746704 |
2 | 0.283654 | 0.0686404 |
3 | 0.283212 | 0.0536631 |
4 | 0.280234 | 0.0517737 |
5 | 0.283041 | 0.0717588 |
6 | 0.283126 | 0.0524264 |
7 | 0.281881 | 0.0580316 |
8 | 0.283301 | 0.0730386 |
9 | 0.284545 | 0.0745088 |
10 | 0.286353 | 0.0572926 |
平均值 | 0.283273 | 0.06358044 |
两种运行方式的结果如下图所示:
从上面的分析结果可见,采用OpenMP并行所耗时间仅为串行的22.44%,节约近4.5倍的时间。
http://download.csdn.net/detail/xwebsite/3843187