OpenMP的两个不同版本可以在同一可执行文件中共存吗?

问题描述 投票:0回答:3

我必须使用Microsoft Visual C ++ 2013来构建使用OpenMP的项目,并链接到还使用OpenMP的Intel MKL库。问题是Visual C ++ 2013使用OpenMP 2.0,而MKL是使用OpenMP 4.x构建的。

一切似乎都可以正常工作,即使这可能是错误的印象。

我收到一些警告:

warning C4005: 'HUGE_VALF' : macro redefinition

我不能仅禁用这些警告。我该如何解决?

visual-c++ version openmp intel-mkl
3个回答
1
投票

我不确定是否有帮助,但过去我已经遇到过这样的问题。以下文章(https://software.intel.com/en-us/articles/limits1120-error-identifier-builtin-nanf-is-undefined)建议了一些解决方法。


1
投票

您需要非常小心,并确保只有一个OpenMP运行时库链接到您的代码中。如果您不这样做,则几乎可以肯定获得的线程数应该是您应有的两倍,从而导致硬件的超额订购和性能下降。

Intel意识到了这个问题,因此Intel openMP运行时库(“ libiomp5”)提供了Microsoft编译器编译的代码所需的运行时接口。因此,您可以链接到Intel运行时,一切都应该很好。


0
投票

按照吉姆·考尼的回答,从项目中排除旧的Microsoft OpenMP并使用英特尔的,这是语法:

cl /MD /openmp hello.cpp /link /nodefaultlib:vcomp /nodefaultlib:vcompd libiomp5md.lib

不包括MSVC OpenMP(vcomp.lib vcompd.lib)并连接Intel OpenMP(版本TR4:版本5.0)(libiomp5md.lib)

参考:"OpenMP use from INTEL"

© www.soinside.com 2019 - 2024. All rights reserved.