使用 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 的处理方法