Xeon Phi 编程备忘

▶ 闲鱼的 Xeon Phi 3120A 配办公室的新 Xeon 服务器,记录一下环境安装过程。

 

● 原本尝试搭 Ubuntu 服务器,参考【https://software.intel.com/en-us/forums/intel-many-integrated-core/topic/532329】以及其中引用的一篇重要的日志【http://www.arrayfire.com/getting-started-with-the-intel-xeon-phi-on-ubuntu-14-04linux-kernel-3-13-0/】。但是这些文章只能使用 Ubuntu 14.04 或 Ubuntu 12.04,以及较老版本的 MPSS 驱动,他提供的修改后的源码文件在 Ubuntu 16.04 上无法编译通过,我记得报错至少有【https://blog.csdn.net/hn2zzzz1996/article/details/79496282】和【https://blog.csdn.net/hjs1122/article/details/6163629】,这都是函数版本的问题。最后只能回归 Red Hat 。

● 改用 RedHat 7.2,安装环境较为简单。基本环境弄好后,首先下载安装包【https://software.intel.com/en-us/articles/intel-manycore-platform-software-stack-mpss#lx34rel】,选了当时最新的 MPSS 3.8.4 release for Linux,最主要的是 mpss-3.8.4-linux.tar,其他的软件、源码都暂时没用到。就可以按照安装包链接下方的 readme.txt 进行安装了,总体思路是重建了 src 目录里的一个 rpm 包,然后把所有的包放到一起全部安装,然后调整网络、服务等。有一篇中文的介绍可供参考【https://blog.csdn.net/mrhiuser/article/details/51481713】

● 教科书《Intel Xeon Phi协处理器高性能编程指南》(J. Jeffers & J. Reinders )

● 安装 Intel Parallel Studio 全家桶,主要使用到 icc 编译器和几个性能分析器,用学校邮箱申请了一年免费使用(听说以前有永久免费版版?)

● 无密码登录计算卡的方法,参考【https://blog.csdn.net/linweieran/article/details/80333239】

[root@mic01]# ssh-keygen                    // 创建 root 秘钥
[root@mic01]# service mpss stop             // 暂停 mpss
[root@mic01]# micctrl --sshkeys=root mic0   // 添加 root 秘钥
[root@mic01]# service mpss start            // 重启 mpss

● Xeon Phi 的精简 Linux 默认没有 su,dir,vim 等命令,没有 /opt 目录,/etc 中 没有 /etc/ld.so.conf.d 目录

● 用 icc 编译在计算卡上运行的程序,需要用到 OpenMP 和 Offload 等扩展时需要添加动态库。用到的库在 /usr/local/intel/composer_xe_2015.0.090/compiler/lib/mic 和 /usr/local/intel/composer_xe_2015.0.090/compiler/lib/intel64 下,两个目录下的库文件分别对应计算卡和主机,很多库文件的名字相同但大小不同,且不相互兼容,需要不同文件时要注意对应。

● 动态库问题的最终解决方法如下,参考【https://software.intel.com/zh-cn/forums/intel-visual-fortran-compiler-for-windows/topic/518187】。另外一种方法,向 /etc/ld.so.conf 中添加库文件目录(或者在 /etc.ld.so.conf.d 中新建一个文件 echo "/usr/local/intel/composer_xe_2015.0.090/compiler/lib/mic" >> xeonphi.conf),然后 ldconfig。但是用这种方法只解决了初级库文件 libiomp5.so 和 liboffload.so 的问题,他们再引用的次级库文件还是找不到,不懂。

[cuan@host ~]$ vim .bashrc # 添加下列内容,有什么用后面说

# for icc & mic
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/intel/composer_xe_2015..0.090/compiler/lib/mic:/usr/local/intel/composer_xe_2015..0.090/compiler/lib/intel64
export MIC_LD_LIBRARY_PATH=$MIC_LD_LIBRARY_PATH:/usr/local/intel/composer_xe_2015..0.090/compiler/lib/mic

[cuan@host ~]$ source .bashrc

■ 编译时

[cuan@host code]$ icc -std=c99 -openmp -O3 test_omp.c -o test_omp.exe -liomp5 
    # OpenMP 用到了 libiomp5.so,但是好像可以不加 -liomp5

[cuan@host code]$ icc -std=c99 -openmp -O3 test_offload.c -o test_offload.exe -limf -lirng -lintlc -lsvml 
    # offload 模式用到了以 liboffload.so.5 为首的一系列库文件,-loffload 本身可以不加,但剩下几个一定要加

■ 不加的报错:

# 没有加 LD_LIBRARY_PATH    
[cuan@host code]$ icc -std=c99 -openmp -O3 test_offload.c -o test_offload.exe                               # 报 warning,运行时找不到库文件
x86_64-k1om-linux-ld: warning: libimf.so, needed by /usr/local/intel/composer_xe_2015.0.090/compiler/lib/mic/liboffload.so.5, not found (try using -rpath or -rpath-link)
x86_64-k1om-linux-ld: warning: libsvml.so, needed by /usr/local/intel/composer_xe_2015.0.090/compiler/lib/mic/liboffload.so.5, not found (try using -rpath or -rpath-link)
x86_64-k1om-linux-ld: warning: libirng.so, needed by /usr/local/intel/composer_xe_2015.0.090/compiler/lib/mic/liboffload.so.5, not found (try using -rpath or -rpath-link)
x86_64-k1om-linux-ld: warning: libintlc.so.5, needed by /usr/local/intel/composer_xe_2015.0.090/compiler/lib/mic/liboffload.so.5, not found (try using -rpath or -rpath-link)
ld: warning: libimf.so, needed by /usr/local/intel/composer_xe_2015.0.090/compiler/lib/intel64/liboffload.so.5, not found (try using -rpath or -rpath-link)
ld: warning: libsvml.so, needed by /usr/local/intel/composer_xe_2015.0.090/compiler/lib/intel64/liboffload.so.5, not found (try using -rpath or -rpath-link)
ld: warning: libirng.so, needed by /usr/local/intel/composer_xe_2015.0.090/compiler/lib/intel64/liboffload.so.5, not found (try using -rpath or -rpath-link)
ld: warning: libintlc.so.5, needed by /usr/local/intel/composer_xe_2015.0.090/compiler/lib/intel64/liboffload.so.5, not found (try using -rpath or -rpath-link)
[cuan@host code]$ ./test_offload.exe                                            
./test_offload.exe: error while loading shared libraries: liboffload.so: cannot open shared object file: No such file or directory

[cuan@host code]$ icc -std=c99 -openmp -O3 base.c -o test_offload.exe -limf -lsvml -lirng -lintlc           # 无 warning,运行时找不到次级库文件
[cuan@host code]$ ./test_offload.exe 
./test_offload.exe: error while loading shared libraries: libimf.so: cannot open shared object file: No such file or directory

# 加了 LD_LIBRARY_PATH 但没加 MIC_LD_LIBRARY_PATH:
[cuan@host code]$ icc -std=c99 -openmp -O3 test_offload.c -o test_offload.exe                               # 报 warning,运行时找不到库文件
x86_64-k1om-linux-ld: warning: libimf.so, needed by /usr/local/intel/composer_xe_2015.0.090/compiler/lib/mic/liboffload.so.5, not found (try using -rpath or -rpath-link)
x86_64-k1om-linux-ld: warning: libsvml.so, needed by /usr/local/intel/composer_xe_2015.0.090/compiler/lib/mic/liboffload.so.5, not found (try using -rpath or -rpath-link)
x86_64-k1om-linux-ld: warning: libirng.so, needed by /usr/local/intel/composer_xe_2015.0.090/compiler/lib/mic/liboffload.so.5, not found (try using -rpath or -rpath-link)
x86_64-k1om-linux-ld: warning: libintlc.so.5, needed by /usr/local/intel/composer_xe_2015.0.090/compiler/lib/mic/liboffload.so.5, not found (try using -rpath or -rpath-link)
[cuan@host code]$ ./test_offload.exe 
The remote process indicated that the following libraries could not be loaded:    liboffload.so.5 libcilkrts.so.5 
offload error: cannot start process on the device 0 (error code 19)

[cuan@host code]$ icc -std=c99 -openmp -O3 test_offload.c -o test_offload.exe -limf -lsvml -lirng -lintlc   # 无 warning,运行时找不到次级库文件
[cuan@host code]$ ./test_offload.exe 
The remote process indicated that the following libraries could not be loaded:    libimf.so libsvml.so libirng.so libintlc.so.5 liboffload.so.5 libcilkrts.so.5 
offload error: cannot start process on the device 0 (error code 19)
原文地址:https://www.cnblogs.com/cuancuancuanhao/p/9467519.html