1.獲取Intel Parallel Studio XE
Intel免費軟件工具提供免費的軟件包,其中包括完整的Intel編譯器和計算庫及其激活碼,軟件和激活碼一一對應。注意需要使用教育郵箱註冊,否則不予通過。
2. 安裝過程
解壓後在終端進入./install_GUI.sh
,按照提示進行就好,其中激活的步驟需要聯網,且最多隻能激活5次。最後整個庫會安裝在\opt\intel
路徑下,重要的是配置環境變量。
- 首先加入Intel編譯器icc的路徑
export INTELCOMP=/opt/intel/bin
export PATH=$INTELCOMP:$PATH
- 接着加入共享庫的路徑,其中庫的名稱一定要有對應的版本號,這裏是
.1.132
export MKLHOME=/opt/intel/mkl/lib/intel64
export LIB1=/opt/intel/compilers_and_libraries_2017.1.132/linux/mkl/lib/intel64_lin
export LIB2=/opt/intel/compilers_and_libraries_2017.1.132/linux/compiler/lib/intel64_lin
export LD_LIBRARY_PATH=$MKLHOME:$LIB1:$LIB2:$LD_LIBRARY_PATH
注意:如果使用中還有一些.so
庫找不到,則可以定位這些庫然後加入到LD_LIBRARY_PATH
中。如果需要有全局的作用,則可以編輯/etc/ld.so.conf
文件,增加這些路徑,並用ldconfig
刷新。
3. 構建numpy和scipy
主要依據Numpy/Scipy with Intel® MKL and Intel® Compilers官網提示。總結起來就是在numpy的安裝路徑下增加site.cfg文件,內容如下:
[mkl]
library_dirs = /opt/intel/compilers_and_libraries_2017.1.132/linux/mkl/lib/intel64
include_dirs = /opt/intel/compilers_and_libraries_2017.1.132/linux/mkl/include
mkl_libs = mkl_rt
lapack_libs =
接着更改numpy/distutils/intelccompiler.py
文件中的self.cc_exe
語句,如果是64位,則在IntelEM64TCCompiler
類中將之改爲self.cc_exe = 'icc -O3 -g -fPIC -fp-model strict -fomit-frame-pointer -openmp -xhost'
。然後就可以編譯安裝numpy了
$ python setup.py config --compiler=intelem build_clib --compiler=intelem build_ext --compiler=intelem install
構建安裝scipy可以直接進行
$ python setup.py config --compiler=intelem --fcompiler=intelem build_clib --compiler=intelem --fcompiler=intelem build_ext --compiler=intelem --fcompiler=intelem install
4. 關於一些錯誤
- 構建中編譯器和共享庫路徑找不到
c編譯器一定需要icc,所以一定要將icc定位後加入到系統變量PATH
中 ,共享庫路徑可以加入LD_LIBRARY_PATH
或者編輯/etc/ld.so.conf
文件。同時,還需要fortran編譯器,而它集成在gcc中,因此在編譯之前一定要確保已經安裝了gcc。
還有錯誤就是找不到系統的編譯器,例如ld: cannot find -lstdc++
的錯誤,這是說系統找不到libstdc++.so
文件,但是在/usr/lib64
中會有libstdc++.so.6
文件,因此要創建軟鏈接才能正常編譯
$ ln -s /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so
- 使用numpy/scipy時找不到共享庫
共享庫路徑同樣要加入LD_LIBRARY_PATH
或者編輯/etc/ld.so.conf
文件
- 安裝其他基於numpy的庫時,出現未定義的符號undefined symbols的錯誤
在當前環境中缺少共享庫路徑,可以暫時添加錯誤中缺少的路徑到LD_LIBRARY_PATH
中,即
export LD_LIBRARY_PATH=[the needed path]:$LD_LIBRARY_PATH
這樣重新安裝就可以了。