计算化学公社

标题: AMBER18使用Intel Parallel Studio XE 2019 Linux编译的错误求解 [打印本页]

作者
Author:
gsbear    时间: 2018-11-30 00:58
标题: AMBER18使用Intel Parallel Studio XE 2019 Linux编译的错误求解
本帖最后由 gsbear 于 2018-11-30 00:59 编辑

Amber18的源代码编译安装,使用GNU编译器编译安装完全正常,但是选用Intel编译器编译时候,在configure步骤
./configure intel
其中进入到C和Fortran混合编译阶段测试出错,提示找不到库文件
/opt/intel/compilers_and_libraries_2019.0.117/linux/compiler/lib/intel64_lin/libifport.so.5
从出错命令看应该是icc的链接参数-lifport对应,有大侠知道这个是Intel编译器的什么问题引起的吗?
这个文件ls明明是存在的啊,为什么会找不到呢?
[root@localhost intel64_lin]# ls -l /opt/intel/compilers_and_libraries_2019.0.117/linux/compiler/lib/intel64_lin/libifport.so.5
-rwxr-xr-x. 1 root root 210422 Aug  3 19:35 /opt/intel/compilers_and_libraries_2019.0.117/linux/compiler/lib/intel64_lin/libifport.so.5


以下是configure出错信息:
-------------------------------------------------------------------------------------------------------------------------------------------------
Testing mixed C/Fortran compilation:
     icc -fPIC  -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -std=gnu99 -c -o testp.c.o testp.c
     ifort -fPIC  -O0 -c -o testp.f.o testp.f
     icc -fPIC  -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -o testp testp.c.o testp.f.o -lifport -lifcore -lsvml
ld: warning: libimf.so, needed by /opt/intel/compilers_and_libraries_2019.0.117/linux/compiler/lib/intel64_lin/libifport.so.5, not found (try using -rpath or -rpath-link)
ld: warning: libintlc.so.5, needed by /opt/intel/compilers_and_libraries_2019.0.117/linux/compiler/lib/intel64_lin/libifport.so.5, not found (try using -rpath or -rpath-link)
ld: testp: hidden symbol `__intel_cpu_features_init_x' in /opt/intel/compilers_and_libraries_2019.0.117/linux/compiler/lib/intel64_lin/libirc.a(cpu_feature_disp.o) is referenced by DSO
ld: final link failed: Bad value
./configure2: line 2642: ./testp: No such file or directory
Error: Unable to compile mixed C/Fortran code.
       Please check your compiler settings and configure flags.
Configure failed due to the errors above!



作者
Author:
kunkun    时间: 2018-11-30 10:13
为啥要用icc...
作者
Author:
gsbear    时间: 2018-11-30 10:26
kunkun 发表于 2018-11-30 10:13
为啥要用icc...

ifort的效率不是比gfortran高很多么,所以想试一下看看用Intel编译器编译Amber以后运行效率是否会有较大提高
作者
Author:
gsbear    时间: 2018-11-30 10:40
查了一堆资料,还改了一个configure文件加了一些链接的参数之后,链接那步终于过去了,后来运行C/Fortran混编测试程序testp的时候又出错提示库文件libifport.so.5找不到,最后在/etc/ld.so.conf.d/下面写了一个加载Intel库的路径文件,再通过/sbin/ldconfig –v命令刷新加载库的路径就通过configure了,现在可以make install了。貌似后面应该不会有问题了。

但是我觉得我的这个解决方法是不是有点歪楼?是本身Intel编译器配置就没配置好库的加载参数和路径的问题,还是我安装设置Intel编译环境哪里没有搞对,虽然问题是解决了,但是还想请教各位高人是否有更简便的解决方案?

详细的解决步骤稍后整理一下再发上来,我的解决方法虽然可行,但是有歪楼的嫌疑,特此提醒,被误导的不要骂我就好。
作者
Author:
sobereva    时间: 2018-11-30 10:51
gsbear 发表于 2018-11-30 10:26
ifort的效率不是比gfortran高很多么,所以想试一下看看用Intel编译器编译Amber以后运行效率是否会有较大 ...

ifort效率比gfortran高很多(其实很多情况下是因为优化选项用的不同所致,比如gfortran在-O2时是没有利用SIMD指令集的,而ifort在-O2的时候就已经利用了)。但根据我以往的对比,至少对于amber,用icc比gcc一般并没有显著优势,一般没有特别必要去用icc,何况amber的计算密集型代码大部分还是fortran写的。
作者
Author:
gsbear    时间: 2018-11-30 11:17
多谢社长指教,库链接的问题您怎么看?是我自己歪楼了还是也没有更好的解决办法?
作者
Author:
gsbear    时间: 2018-11-30 11:39
用Intel的编译器编译Amber还真是问题多啊,make install的过程中又出错了,这回貌似是某个.c程序文件中有一条OpenMP的并行指令不兼容引起的,这个问题实在是没招了,还要去改源代码的话实在没那个能耐和时间,就此作罢,还是GNU的编译版本就好了

nblist.c(883): warning #3180: unrecognized OpenMP #pragma
  #pragma omp parallel reduction (+: totpair) \
  ^

": internal error: ** The compiler has encountered an unexpected problem.
** Segmentation violation signal raised. **
Access violation or stack overflow. Please contact Intel Support for assistance.

compilation aborted for nblist.c (code 4)
make[2]: *** [nblist.o] Error 4
make[2]: Leaving directory `/home/gsbear/amber18/AmberTools/src/sff'
make[1]: *** [serial] Error 2
make[1]: Leaving directory `/home/gsbear/amber18/AmberTools/src'
make: *** [install] Error 2

作者
Author:
sobereva    时间: 2018-11-30 11:43
gsbear 发表于 2018-11-30 11:17
多谢社长指教,库链接的问题您怎么看?是我自己歪楼了还是也没有更好的解决办法?

我还没试过编译18,不好评论。编译以往的版本都很顺利。

有时候编译器太新也容易有问题,因为编译器每个版本都可能做一些变动,但是程序开发者还来不及考虑最新版本编译器的变动并使之与之兼容。我一般建议用比起程序发布日期早一些(但不能早特别多)的编译器。但当前报错未必是这个所致。
作者
Author:
lonewolf659    时间: 2018-11-30 12:15
ld: warning: libimf.so, needed by /opt/intel/compilers_and_libraries_2019.0.117/linux/compiler/lib/intel64_lin/libifport.so.5, not found (try using -rpath or -rpath-link)
ld: warning: libintlc.so.5, needed by /opt/intel/compilers_and_libraries_2019.0.117/linux/compiler/lib/intel64_lin/libifport.so.5, not found (try using -rpath or -rpath-link)

从这两行看,还是intel的库没有link到。修改LD_LIBRARY_PATH试试,注意是“libimf.so”和"libintlc.so"。
我的Intel Parallel Studio 2018里面是都在的。
另外,我在用2016和2018编译Amber16的时候,也遇到过在configure check C和Fortran混编的时候出错。不是因为连不到库,而至编译好的testp执行出错,导致configure不过。最后换成Intel Parallel Studio 2015才编译过。最后也没搞明白。。。
作者
Author:
gsbear    时间: 2018-11-30 13:33
lonewolf659 发表于 2018-11-30 12:15
ld: warning: libimf.so, needed by /opt/intel/compilers_and_libraries_2019.0.117/linux/compiler/lib/i ...

我是修改amber16/src/configure2脚本,在里边加了-lmif -lm等几个链接参数就通过的,只是后来编译到有个C程序的时候里面有一行OpenMP的并行指令过不去就放弃了,不想去改源码了。
作者
Author:
gsbear    时间: 2018-11-30 13:35
lonewolf659 发表于 2018-11-30 12:15
ld: warning: libimf.so, needed by /opt/intel/compilers_and_libraries_2019.0.117/linux/compiler/lib/i ...

另外,我在用2016和2018编译Amber16的时候,也遇到过在configure check C和Fortran混编的时候出错。不是因为连不到库,而至编译好的testp执行出错,导致configure不过。最后换成Intel Parallel Studio 2015才编译过。最后也没搞明白。。。

这个看样子就是Amber和高版本Intel编译器的问题了,我跟你的问题一样,编译好以后testp执行出错,后来我把Intel编译器库的路径在/etc/ld.so.conf.d/下面写了一个加载Intel库的路径文件,再通过/sbin/ldconfig –v命令刷新加载库的路径就通过configure了

作者
Author:
gsbear    时间: 2018-11-30 13:41
sobereva 发表于 2018-11-30 11:43
我还没试过编译18,不好评论。编译以往的版本都很顺利。

有时候编译器太新也容易有问题,因为编译器每 ...

根据楼上同学描述,应该是新版本编译器的问题,相同的问题楼上同学用2016和2018编译Amber16也遇到了,那应该是个普遍现象,但是还2015编译就通过了,说明应该是新版本编译器兼容方面的问题了。
作者
Author:
gsbear    时间: 2018-12-1 11:13
虽然最终因为在编译到nblist.c第883行一条OpenMP指令的兼容性错误而放弃了用Intel编译器编译Amber18,但是还是把整个编译过程中遇到的一些问题大体叙述一下,以便后来者能有参考吧:

首先,Amber18用GNU编译器是可以简单顺利编译通过的,具体步骤就不重复了,按照Amber18手册里P23-24页的7个步骤进行就好。
其间可能会遇到的一个问题是在第4步configure的时候会要求由configure脚本自动从网上下载并安装Miniconda的python环境,但是下载的过程中开始速度还可以,但是后面下载速度就越来越慢,直至完全卡死不动,我至少是在这里卡了5次,实在忍无可忍,拿出翻q工具从外网下载了Miniconda的安装程序手动安装好以后,在configure的时候通过--with-python参数指定好手动安装的Miniconda的bin目录(主要是设置python解释器路径)就可以跳过下载的过程。Miniconda安装包也一并传到网盘吧,需要的同学自取。(链接见文末)

接下来说一下在Intel编译器下遇到的问题吧:
./configure intel
首先遇到的问题是在顶楼帖子里说到的在混编测试中遇到的找不到libimf.so以及libintlc.so.5两个库文件的问题,这个问题可能对Intel编译器可能比较普遍,网上有不少的博文说到类似的问题,解决方法就是在编译选项里加上-limf -lintlc -lm使得链接器能够正确的把对应库文件的链接加上,本来通常的做法是设置环境变量$LD_LIBRARY_PATH让链接器加上相关参数,但是貌似Amber18的configure脚本并没有使用$LD_LIBRARY_PATH环境变量,这就需要自己分析configure脚本加上相关链接参数了。
分析以后发现Amber18解压后根目录的configure脚本只是一个总脚本,具体的执行脚本是在$AMBER_HOME/amber18/src/configure2(此处$AMBER_HOME为Amber18的解压目录)
分析configure2发现,Intel编译器的配置参数从1510行开始
#################### icc #######
intel)
    test -z "$pic" && pic="-fpic"
    # following appears to work on Intel compilers version 11,2013..
    flibs_arch="-lifport -lifcore"

1514行这里对应的变量flibs_arch就是编译链接库的参数,在其中添加 -limf -lintlc -lm,并保存
flibs_arch="-lifport -lifcore -limf -lintlc -lm"

重新./configure intel
发现之前顶楼帖子里提示的问题解决了,但是混编测试编译好的testp在运行时候提示找不到库还是出错,这个问题比较好解决,是运行时动态链接库的问题,具体做法是在/etc/ld.so.conf.d/目录下自己建一个文本文件,把Intel编译器的库路径/opt/intel/compilers_and_libraries_2019.0.117/linux/compiler/lib/intel64_lin写进去,保存以后通过/sbin/ldconfig –v命令刷新加载库的路径就可以了(此步骤需要root权限),至此configure就顺利完成了。

本来以为接下来的make install会很顺利了,哪知道编译快完成的时候出了7楼的那个OpenMP指令不兼容的问题,对于OpenMP函数和预处理指令不是很熟悉,实在没有时间为了解决这个兼容性问题再去分析OpenMP跟Intel编译器哪里不兼容,于是就此打住。

最后,把Miniconda的安装程序,Amber18手册和我修改过的configure2脚本以及从Sob老大那分享的AmberTools18安装程序一起提供大家共享吧
感谢Sob老大无私的把那么多Amber版本的分享给大家

链接:https://pan.baidu.com/s/1duwr8MeKBI2PzRll4o7vWg 密码:cdv2
作者
Author:
abdoman    时间: 2018-12-3 11:18
“The results above pertain to a "real-world" setup (multiple serial runs were performed concurrently on separate cores of the same CPU, and the GNU compiler we used results in about 30% lower performance on the Intel CPUs).
from: http://ambermd.org/GPUPerformance.php
Intel编译器貌似比较好。

作者
Author:
gsbear    时间: 2018-12-3 19:27
abdoman 发表于 2018-12-3 11:18
“The results above pertain to a "real-world" setup (multiple serial runs were performed concurrentl ...

如果要用Intel编译器编译估计得换回老版本2015的编
作者
Author:
Daniel_Arndt    时间: 2018-12-6 03:54
感觉Anaconda提供的下载的网址应该是被土啬了。我已经有好多次下载Anaconda时,最后速度为0,不得不科学上网去下载的经历了。
作者
Author:
gsbear    时间: 2018-12-17 22:05
Daniel_Arndt 发表于 2018-12-6 03:54
感觉Anaconda提供的下载的网址应该是被土啬了。我已经有好多次下载Anaconda时,最后速度为0,不得不科学上 ...

看来Anaconda下载有问题的不止我一个,应该是普遍问题了
作者
Author:
hzfish    时间: 2019-1-21 21:27
gsbear 发表于 2018-12-17 22:05
看来Anaconda下载有问题的不止我一个,应该是普遍问题了

国内有很多镜像站点。
作者
Author:
liuzejiang    时间: 2020-3-17 07:46
本帖最后由 liuzejiang 于 2020-3-17 07:59 编辑

楼主的问题我也遇到了,用intel2020无法编译amber18并行版
首先串行版是能编译的,但是在装好Openmpi4.0.3准备编译并行版的时候,也是提示“c/Fortran混合编译失败,找不到libifport.so.5。然后重新去编译串行版也出现同样错误,去掉openmpi的环境变量就又能编译串行版了。
我想是Intel2020和openmpi4.0.3存在一些冲突?




作者
Author:
gsbear    时间: 2020-3-17 10:55
liuzejiang 发表于 2020-3-17 07:46
楼主的问题我也遇到了,用intel2020无法编译amber18并行版
首先串行版是能编译的,但是在装好Openmpi4.0.3 ...

估计是Intel编译器带的一些库和库路径设置的问题,用GNU的编译器编译就好了,不用折腾
作者
Author:
liuzejiang    时间: 2020-3-18 01:15
gsbear 发表于 2020-3-17 10:55
估计是Intel编译器带的一些库和库路径设置的问题,用GNU的编译器编译就好了,不用折腾

OK,多谢楼主的调试经验




欢迎光临 计算化学公社 (http://bbs.keinsci.com/) Powered by Discuz! X3.3