你好,游客 登录
背景:
阅读新闻

VC上使用OpenMP并行程序设计的配置 - Augusdi的专栏

[日期:2013-04-16] 来源:  作者: [字体: ]

转自:http://zuohuawei.blog.sohu.com/84249110.html

最近有不少陌生人问我关于在VC上使用OpenMP进行并行程序设计的配置问题,这个问题对于那些想在VC上使用OpenMP的人来说,是首先就要解决的问题,我开始时也碰到过,花了不少时间解决,现在把当时写的笔记发出来,供那些需要的人参考。

OpenMP是一个支持共享存储并行设计的库,特别适宜多核CPU上的并行程序设计。OpenMP应用编程接口API是在共享存储体系结构上的一个编程模型,包含编译制导(Compiler Directive)、运行库例程(Runtime Library)和环境变量(Environment Variables),支持增量并行化(Incremental Parallelization)。是C/C++ 和Fortan等的应用编程接口。

要使用OpenMP,首先开发环境必须支持OpenMP,在这个过程,遇到了很多的问题,在此我把它整理出来与大家共享,希望对初学OpenMP的人有些帮助。

VC2005

在VC版本中,只有Visual C++ 2005提供了一个新的/openmp开关来使能编译器支持OpenMP指令。(你也可以通过项目属性页来使能OpenMP指令。点击配置属性页,然后[C/C++],然后[语言],选中OpenMP支持。)当/openmp参数被设定,编译器将定义一个标识符_OPENMP,使得可以用#ifndef _OPENMP来检测OpenMP是否可用。

1. 虽然 VisualStudio 2005 Express 也有 OpenMP 的选项,但是实际上并没有附上 OpenMP 的函数库,所以理论上是不能用的;不过如果能找到 Standard 或 Professional 版的版本放进去,也是可以运作的!

2. 神奇的是…原则上如果沒有用到 OpenMP 的 Function,而只是用 directive 和 clause 的话,应该是可以不用 #include <omp.h> 才对;但是在 Express 中,不加入 #include <omp.h> 可以正确的编译、执行,而 Professional 版却只能正确的编译,而无法正确的执行(dll 起始错误)。

由于VC6.0和VC2003没有/openmp开关来使能编译器支持OpenMP指令,但是我们可以通过改用Intel编译器的方法,来使它支持OpenMP指令。我们必须保证先安装VC6.0和VC2003,在安装Intel编译器,Intel编译器在其官方网站上下载。

VC6+Intel Compiler 9.1

1.安装完Intel编译器后,在VC6.0的Tools下面会新增一个关于Intel编译器,进入勾选安装的Intel编译器版本(推荐使用Intel Compiler 9.1版本)。

2.在project中打开project settings,在C/C++ ->Preprocessor definitions里加入_USE_INTEL_COMPILER 即可以使用Intel Compiler 进行编译。编译窗口应该显示使用icl进行编译,OpenMP支持可以在C/C++ -> Project Options 里添加 /Qopenmp。

建议仔细阅读Intel Compiler的帮助,里面有详细的如何在VC6上使用Intel Compiler进行编译的说明,我想应该不难解决编译问题。

VC2003+Intel Compiler 9.1

1. 装换使用Intel编译器,点击Convert to use Intel(R) C++ Project System。

2.打开项目->属性页,选择支持OpenMP.

我相信只要按照上面的步骤执行,应该是可以在VC环境下支持使用OpenMP的。另外还要注意的一点就是,由于Intel 编译器比VC++自带的编译器要严格,所以在改用Intel编译器后,可能会出现一些移植错误。

VC上使用OpenMP并行程序设计的配置




收藏 推荐 打印 | 录入:admin | 阅读:
相关新闻