OpenMP并行程序设计(一)
来源:互联网 发布:淘宝美特斯邦威官方店 编辑:程序博客网 时间:2024/06/13 11:11
OpenMP并行程序设计(一)
OpenMP是一个支持共享存储并行设计的库,特别适宜多核CPU上的并行程序设计。今天在双核CPU机器上试了一下OpenMP并行程序设计,发现效率方面超出想象,因此写出来分享给大家。
在VC8.0中项目的属性对话框中,左边框里的“配置属性”下的“C/C++”下的“语言”页里,将OpenMP支持改为“是/(OpenMP)”就可以支持OpenMP了。
先看一个简单的使用了OpenMP程序
int main(int argc, char* argv[])
{
#pragma omp parallel for
for (int i = 0; i < 10; i++ )
{
printf("i = %d/n", i);
}
return 0;
}
这个程序执行后打印出以下结果:
i = 0
i = 5
i = 1
i = 6
i = 2
i = 7
i = 3
i = 8
i = 4
i = 9
可见for 循环语句中的内容被并行执行了。(每次运行的打印结果可能会有区别)
这里要说明一下,#pragma omp parallel for 这条语句是用来指定后面的for循环语句变成并行执行的,当然for循环里的内容必须满足可以并行执行,即每次循环互不相干,后一次循环不依赖于前面的循环。
有关#pragma omp parallel for 这条语句的具体含义及相关OpenMP指令和函数的介绍暂时先放一放,只要知道这条语句会将后面的for循环里的内容变成并行执行就行了。
将for循环里的语句变成并行执行后效率会不会提高呢,我想这是我们最关心的内容了。下面就写一个简单的测试程序来测试一下:
void test()
{
int a = 0;
clock_t t1 = clock();
for (int i = 0; i < 100000000; i++)
{
a = i+1;
}
clock_t t2 = clock();
printf("Time = %d/n", t2-t1);
}
int main(int argc, char* argv[])
{
clock_t t1 = clock();
#pragma omp parallel for
for ( int j = 0; j < 2; j++ ){
test();
}
clock_t t2 = clock();
printf("Total time = %d/n", t2-t1);
test();
return 0;
}
在test()函数中,执行了1亿次循环,主要是用来执行一个长时间的操作。
在main()函数里,先在一个循环里调用test()函数,只循环2次,我们还是看一下在双核CPU上的运行结果吧:
Time = 297
Time = 297
Total time = 297
Time = 297
可以看到在for循环里的两次test()函数调用都花费了297ms, 但是打印出的总时间却只花费了297ms,后面那个单独执行的test()函数花费的时间也是297ms,可见使用并行计算后效率提高了整整一倍。
下一篇文章中将介绍OpenMP的具体指令和用法。
- OpenMP并行程序设计(一)
- OpenMP并行程序设计(一)
- OpenMP并行程序设计(一)
- OpenMP并行程序设计(一)
- OpenMP并行程序设计(一)
- OpenMP并行程序设计(一)
- OpenMP并行程序设计(一)
- OpenMP并行程序设计(一)
- OpenMP并行程序设计(一)
- OpenMP并行程序设计(一)
- OpenMP并行程序设计(一)
- OpenMP并行程序设计(一)
- OpenMP并行程序设计(一)
- OpenMP并行程序设计(一)
- OpenMP并行程序设计(一)
- OpenMP并行程序设计(一)
- OpenMP并行程序设计(一)
- OpenMP并行程序设计(一)
- C/C++代码检视要点
- AJAX框架资源汇总
- 请关注ieframe.dll
- OpenMP并行程序设计(二)
- 木马生成技术
- OpenMP并行程序设计(一)
- 使用C++模板和不使用C++模板两种情况中的执行代码大小近似估计
- C#程序编码规范
- 浅析设计模式之抽象工厂模式
- C语言编程常见问题分析
- 来,领取你的可验证的C++吧
- VC开发多语言界面支持的简单方法
- ASP.NET验证控件详解
- 20080402这几天要做的事情