OpenMP ,VS2005 programming

本文介绍如何在Visual C++ 2005中利用OpenMP进行多线程编程,以提高双核处理器上的应用运行速度。通过设置项目属性启用OpenMP支持,并在代码中使用特定指令实现任务并行化。实测表明,合理配置线程数量能够有效减少程序执行时间。
摘要由CSDN通过智能技术生成
本文转自 :
http://hi.baidu.com/lampjinn/blog/item/cce5853559315a1091ef3911.html

VC 2005 下的OpenMP编程
2007年05月25日 星期五 17:09

用着双核的机器,跑着单进程的应用,忍不了它的缓慢,于是想找找怎么简单提升速度的方法。

下面这个文章是MSDN上讲怎么在VC++ 2005 里面用OpenMP的:http://msdn.microsoft.com/msdnmag/issues/05/10/OpenMP/

看了一下2003下面的工程,的确没有OpenMP的支持,看来要升级到2005啦。

另外是seavon同学的space上有一个她的学习心得,是在linux下面的:

http://seavon9.spaces.live.com/blog/cns!257B76F0ED0B0F19!786.entry

在我的双核机器VS2005上尝试了一下,

普通的c++工程,在project的property页面上的C/C++ -> Language 选项卡中将OpenMP Support这项设置为Yes,在需要使用OpenMP函数的cpp文件中引用"omp.h",这样设置就完成了。

写了后面的代码测试,发现了两点:

1. 写程序的时候进入parallel模块之前应该仔细确认后面用到变量的局部性问题,一般来说,凡是后面会“写”的变量都要逐一规定其共享方式,比如后面代码中的private(x) 和 reduction(+: sum)。

2. 并行的确有一定的作用:

不并行(注掉#pragma那行)的运行时间是135661197 ticks

并行(默认似乎是根据机器的处理器数分配线程的,我机器是双核,于是是双线程)运行时间是75405715 ticks

如果在代码中用omp_set_num_threads()设定并行的线程数,比如设为3,那么运行时间是104065248 ticks,确实比双线程要耗时一点;设为4的情况是88858420 ticks,这也符合双核机器的预期,也就是4线程均分比双线程多了overhead,但比3线程要好,因为没有cpu空闲。

void call()
{
int len = 1000000;
double x = 0;
double sum = 0;
#pragma omp parallel for private(x) reduction(+: sum)
for(int i=0;i<len;i++)
{
   x = len-i;
   x *= i;
   x /= len;
   x /= len;
   sum += x;
}
printf("sum = %lf/n", sum);
}

int _tmain(int argc, _TCHAR* argv[])
{
unsigned __int64 start;
start = __rdtsc();

call();

unsigned __int64 end;
end = __rdtsc();
printf("%d ticks/n", end-start);

return 0;
}

 

并有以下参考 :

https://computing.llnl.gov/tutorials/openMP/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值