使用 Cygwin 和 Intel Parallel Studio 编译 IPOPT

Posted

技术标签:

【中文标题】使用 Cygwin 和 Intel Parallel Studio 编译 IPOPT【英文标题】:Compiling IPOPT with Cygwin and Intel Parallel Studio 【发布时间】:2021-01-07 00:39:13 【问题描述】:

我正在尝试使用 Cygwin 在 Windows 中编译 IPOPT 3.13.3。我有一份 Intel Parallel Studio 2019 的副本,并且正在尝试使用此安装中的 Intel 编译器和 Intel MKL。这是我的过程:

    启动 Intel 编译器 64 位命令提示符 运行 Cygwin.bat 以启动 cygwin bash 终端。然后我可以确认 ifort 和 icl 在路径上并将运行 导航到 ipopt 源文件夹并运行 ./configure --enable-mscv

从这里它发现编译器很好,直到尝试从 MKL 获取 lapack:

checking for function dsyev_ in /cygdrive/c/Program Files (x86)/INTELS~1/COMPIL~1.144/windows/mkl/lib/INTEL6~1/mkl_intel_lp64_dll.lib /cygdrive/c/Program Files (x86)/INTELS~1/COMPIL~1.144/windows/mkl/lib/INTEL6~1/mkl_sequential_dll.lib /cygdrive/c/Program Files (x86)/INTELS~1/COMPIL~1.144/windows/mkl/lib/INTEL6~1/mkl_core_dll.lib ... no
checking for function dsyev in /cygdrive/c/Program Files (x86)/INTELS~1/COMPIL~1.144/windows/mkl/lib/INTEL6~1/mkl_intel_lp64_dll.lib /cygdrive/c/Program Files (x86)/INTELS~1/COMPIL~1.144/windows/mkl/lib/INTEL6~1/mkl_sequential_dll.lib /cygdrive/c/Program Files (x86)/INTELS~1/COMPIL~1.144/windows/mkl/lib/INTEL6~1/mkl_core_dll.lib ... no
checking for function DSYEV_ in /cygdrive/c/Program Files (x86)/INTELS~1/COMPIL~1.144/windows/mkl/lib/INTEL6~1/mkl_intel_lp64_dll.lib /cygdrive/c/Program Files (x86)/INTELS~1/COMPIL~1.144/windows/mkl/lib/INTEL6~1/mkl_sequential_dll.lib /cygdrive/c/Program Files (x86)/INTELS~1/COMPIL~1.144/windows/mkl/lib/INTEL6~1/mkl_core_dll.lib ... no
checking for function DSYEV in /cygdrive/c/Program Files (x86)/INTELS~1/COMPIL~1.144/windows/mkl/lib/INTEL6~1/mkl_intel_lp64_dll.lib /cygdrive/c/Program Files (x86)/INTELS~1/COMPIL~1.144/windows/mkl/lib/INTEL6~1/mkl_sequential_dll.lib /cygdrive/c/Program Files (x86)/INTELS~1/COMPIL~1.144/windows/mkl/lib/INTEL6~1/mkl_core_dll.lib ... no

然后它继续检查 cygwin 包中的 blas/lapack(我不想这样做),但这也失败了:

checking for lapack.pc and blas.pc... yes
checking for function dsyev_ in -llapack  ... no
checking for function dsyev in -llapack  ... no
checking for function DSYEV_ in -llapack  ... no
checking for function DSYEV in -llapack  ... no
configure: WARNING: lapack.pc and blas.pc present, but could not find dsyev when trying to link with it.
checking for function dsyev_ in -llapack -lblas ... no
checking for function dsyev in -llapack -lblas ... no
checking for function DSYEV_ in -llapack -lblas ... no
checking for function DSYEV in -llapack -lblas ... no
configure: error: Required package LAPACK not found.

我尝试使用 --with-lapack 标志手动添加各种库组合,例如此处建议:Linking Ipopt with Intel MKL,但我通常得到相同的结果。这是我尝试的另一个命令:

./configure --enable-msvc --with-lapack=" -L$MKLROOT/lib/intel64 -lmkl_intel_lp64 -lmkl_core -lmkl_intel_thread -liomp5 -lpthread -lm -ldl"

这是输出:

checking for function dsyev_ in  -LC:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2019.1.144\windows\mkl/lib/intel64 -lmkl_intel_lp64 -lmkl_core -lmkl_intel_thread -liomp5 -lpthread -lm -ldl ... no
checking for function dsyev in  -LC:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2019.1.144\windows\mkl/lib/intel64 -lmkl_intel_lp64 -lmkl_core -lmkl_intel_thread -liomp5 -lpthread -lm -ldl ... no
checking for function DSYEV_ in  -LC:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2019.1.144\windows\mkl/lib/intel64 -lmkl_intel_lp64 -lmkl_core -lmkl_intel_thread -liomp5 -lpthread -lm -ldl ... no
checking for function DSYEV in  -LC:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2019.1.144\windows\mkl/lib/intel64 -lmkl_intel_lp64 -lmkl_core -lmkl_intel_thread -liomp5 -lpthread -lm -ldl ... no
configure: error: Could not find dsyev in Lapack

我确实担心 MKL 的路径中有空格(呃,Windows!),但我尝试将库复制到另一个路径并链接到该路径并没有改变结果。

我还从 cygwin 目录中删除了 GNU link.exe,以便运行 link --version 确认我正在使用 Microsoft 链接器(根据此处的建议:Installing and using IPopt with Cygwin - or even better alternative?

我的互联网研究没有给出更多答案。如果有人对这里的操作有什么建议,请提前感谢您!

【问题讨论】:

【参考方案1】:

应该是--enable-msvc 而不是--enable-mscv

最好确保在库搜索路径中找到 MKL 库。然后配置应该只是自动选择它们。否则,请尝试使用不带空格的 DOS 样式短路径作为链接器标志 (https://github.com/coin-or/Ipopt/issues/472#issuecomment-842446604)。

此外,如果配置中的测试失败,请查看 config.log 文件了解详细信息。

应该不需要删除link.exe。 Ipopt 附带的compile 脚本中有一个解决方法。

PS:我还没有尝试过cygwin。 msys2 为我工作。

【讨论】:

以上是关于使用 Cygwin 和 Intel Parallel Studio 编译 IPOPT的主要内容,如果未能解决你的问题,请参考以下文章

GETTING STARTED WITH DISTRIBUTED DATA PARALLE

数据泵expdp 在rac环境下 paralle 的处理方法

Cygwin工具安装和使用指导书

可以在 EmacsW32 和 cygwin 中使用 tramp 吗?

使用 qt 和 cygwin 的编译器编译独立应用程序

Mongoose、Cygwin 和 MongoDB - 不保存