为 Xeon Phi 构建 OpenFOAM 2.2.2

为 Xeon Phi 构建 OpenFOAM 2.2.2

我正在尝试建立开放泡沫为了至强融核CentOS 6.5(Linux 2.6.32-431.11.2.el6.x86_64)

使用这些脚步

安装英特尔并行工作室

tar xvfz parallel_studio_xe_2013_sp1_update2.tgz
cd parallel_studio_xe_2013_sp1_update2
./install.sh

编译flex和zlib

echo '
/opt/intel/bin/iccvars.sh intel64
export PATH=/opt/intel/bin:$PATH
' >> ~/.bashrc
bash
# zlib
wget -c 'http://zlib.net/zlib-1.2.8.tar.gz'
tar xvfz zlib-1.2.8.tar.gz
cd zlib-1.2.8
CC=icc CFLAGS="-mmic" CHOST=x86_64 ./configure --shared
make && make install prefix=/opt/crtdc/micgnu
cd ..
# flex
wget -c 'http://downloads.sourceforge.net/project/flex/flex-2.5.39.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fflex%2Ffiles%2F&ts=1397722559&use_mirror=jaist'
mv flex-2.5.39.tar.gz* flex-2.5.39.tar.gz
tar xvfz flex-2.5.39.tar.gz
cd flex-2.5.39
CC=icc ./configure --prefix=/opt/crtdc/micgnu/ --build=x86_64-k1om-linux
make && make install prefix=/opt/crtdc/micgnu
cd ..

下载OpenFOAM和ThirdParty,解压,编辑etc/bashrc文件

export WM_COMPILER=Icc
export WM_MPLIB=INTEL_MPI
source etc/bashrc 

清理旧编译(如果有)

wcleanAll ; wcleanLnIncludeAll ; wcleanMachine

添加-mmic标志

vim wmake/rules/linux64ICC/c
cFLAGS      = $(GFLAGS) $(cWARN) $(cOPT) $(cDBUG) $(LIB_HEADER_DIRS) -fPIC -mmic
vim  wmake/rules/linux64ICC/c++
c++FLAGS    = $(GFLAGS) $(c++WARN) $(c++OPT) $(c++DBUG) $(ptFLAGS) $(LIB_HEADER_DIRS) -fPIC -mmic

并删除-xHost标志(与 冲突-mmic

vim wmake/rules/linux64Icc/c++Opt
c++OPT      = -O2 -no-prec-div

为 XeonPhi 构建

source etc/bashrc 
./Allwmake

在最后一步,它显示一些错误:

icpc -std=c++0x -Dlinux64 -DWM_DP -wd327,654,819,1125,1476,1505,1572 -O2 -no-prec-div  -DNoRepository -I/root/OpenFOAM/OpenFOAM-2.2.2/src/finiteVolume/lnInclude -ItractionDisplacementCorrectionStress -I../solidDisplacementFoam -IlnInclude -I. -I/root/OpenFOAM/OpenFOAM-2.2.2/src/OpenFOAM/lnInclude -I/root/OpenFOAM/OpenFOAM-2.2.2/src/OSspecific/POSIX/lnInclude   -fPIC -mmic -Xlinker --add-needed -Xlinker --no-as-needed Make/linux64IccDPOpt/tractionDisplacementCorrectionFvPatchVectorField.o Make/linux64IccDPOpt/solidEquilibriumDisplacementFoam.o -L/root/OpenFOAM/OpenFOAM-2.2.2/platforms/linux64IccDPOpt/lib \
             -lfiniteVolume -lOpenFOAM -ldl   -L/lib -lm -o /root/OpenFOAM/OpenFOAM-2.2.2/platforms/linux64IccDPOpt/bin/solidEquilibriumDisplacementFoam
x86_64-k1om-linux-ld: cannot find -lfiniteVolume
x86_64-k1om-linux-ld: cannot find -lOpenFOAM
make[2]: *** [/root/OpenFOAM/OpenFOAM-2.2.2/platforms/linux64IccDPOpt/bin/solidEquilibriumDisplacementFoam] Error 1
make[2]: Leaving directory `/root/OpenFOAM/OpenFOAM-2.2.2/applications/solvers/stressAnalysis/solidEquilibriumDisplacementFoam'
make[1]: *** [solidEquilibriumDisplacementFoam] Error 2
make[1]: Target `application' not remade because of errors.
make[1]: Leaving directory `/root/OpenFOAM/OpenFOAM-2.2.2/applications/solvers/stressAnalysis'
make: *** [stressAnalysis] Error 2
make: Target `application' not remade because of errors.

第一步还显示:

Note: ignore spurious warnings about missing mpicxx.h headers
wmake libso mpi
SOURCE=UOPwrite.C ;  icpc -std=c++0x -Dlinux64 -DWM_DP -wd327,654,819,1125,1476,1505,1572 -O2 -no-prec-div  -DNoRepository   -IlnInclude -I. -I/root/OpenFOAM/OpenFOAM-2.2.2/src/OpenFOAM/lnInclude -I/root/OpenFOAM/OpenFOAM-2.2.2/src/OSspecific/POSIX/lnInclude   -fPIC -mmic -c $SOURCE -o Make/linux64IccDPOptINTEL_MPI/UOPwrite.o
UOPwrite.C(29): catastrophic error: cannot open source file "mpi.h"
  #include "mpi.h"

我尝试找到 mpi.h 文件:

$ locate /mpi.h
/home/ccfd/OpenFOAM/ThirdParty-2.2.2/ParaView-3.12.0/Utilities/mpi4py/Library/compat/anympi.h
/home/ccfd/OpenFOAM/ThirdParty-2.2.2/ParaView-3.12.0/Utilities/mpi4py/Library/compat/deinompi.h
/home/ccfd/OpenFOAM/ThirdParty-2.2.2/ParaView-3.12.0/Utilities/mpi4py/Library/compat/lammpi.h
/home/ccfd/OpenFOAM/ThirdParty-2.2.2/ParaView-3.12.0/Utilities/mpi4py/Library/compat/openmpi.h
/home/ccfd/OpenFOAM/ThirdParty-2.2.2/ParaView-3.12.0/Utilities/mpi4py/Library/compat/sgimpi.h
/home/ccfd/OpenFOAM/ThirdParty-2.2.2/ParaView-3.12.0/Utilities/mpi4py/Library/config/deinompi.h
/home/ccfd/OpenFOAM/ThirdParty-2.2.2/ParaView-3.12.0/Utilities/mpi4py/Library/config/lammpi.h
/home/ccfd/OpenFOAM/ThirdParty-2.2.2/ParaView-3.12.0/Utilities/mpi4py/Library/config/openmpi.h
/home/ccfd/OpenFOAM/ThirdParty-2.2.2/ParaView-3.12.0/Utilities/mpi4py/Library/config/sgimpi.h
/home/ccfd/OpenFOAM/ThirdParty-2.2.2/ParaView-3.12.0/VTK/Utilities/mrmpi/mpistubs/mpi.h
/home/ccfd/OpenFOAM/ThirdParty-2.2.2/ParaView-3.12.0/VTK/Utilities/vtkhdf5/src/H5FDmpi.h
/home/ccfd/OpenFOAM/ThirdParty-2.2.2/gcc-4.5.2/libjava/include/jvmpi.h
/home/ccfd/OpenFOAM/ThirdParty-2.2.2/openmpi-1.6.3/ompi/contrib/vt/vt/tools/vtunify/mpi/vt_unify_mpi.h
/home/ccfd/OpenFOAM/ThirdParty-2.2.2/openmpi-1.6.3/ompi/include/mpi.h.in
/home/ccfd/OpenFOAM/ThirdParty-2.2.2/openmpi-1.6.3/ompi/mpi/f77/prototypes_mpi.h
/home/ccfd/OpenFOAM/ThirdParty-2.2.2/platforms/linux64Gcc45/paraview-3.12.0/include/paraview-3.12/mrmpi/mpi.h
/home/ccfd/OpenFOAM/ThirdParty-2.2.2/platforms/linux64Gcc45/paraview-3.12.0/include/paraview-3.12/vtkhdf5/H5FDmpi.h
/opt/intel/composer_xe_2013_sp1.1.106/mkl/benchmarks/mp_linpack/include/hpl_mpi.h
/opt/intel/composer_xe_2013_sp1.1.106/mkl/include/fftw/fftw3-mpi.h
/opt/intel/composer_xe_2013_sp1.1.106/mkl/include/fftw/fftw_mpi.h
/opt/intel/composer_xe_2013_sp1.1.106/mkl/include/fftw/rfftw_mpi.h
/opt/intel/composer_xe_2013_sp1.2.144/mkl/benchmarks/mp_linpack/include/hpl_mpi.h
/opt/intel/composer_xe_2013_sp1.2.144/mkl/include/fftw/fftw3-mpi.h
/opt/intel/composer_xe_2013_sp1.2.144/mkl/include/fftw/fftw_mpi.h
/opt/intel/composer_xe_2013_sp1.2.144/mkl/include/fftw/rfftw_mpi.h
/root/OpenFOAM/ThirdParty-2.2.2/ParaView-3.12.0/Utilities/mpi4py/Library/compat/anympi.h
/root/OpenFOAM/ThirdParty-2.2.2/ParaView-3.12.0/Utilities/mpi4py/Library/compat/deinompi.h
/root/OpenFOAM/ThirdParty-2.2.2/ParaView-3.12.0/Utilities/mpi4py/Library/compat/lammpi.h
/root/OpenFOAM/ThirdParty-2.2.2/ParaView-3.12.0/Utilities/mpi4py/Library/compat/openmpi.h
/root/OpenFOAM/ThirdParty-2.2.2/ParaView-3.12.0/Utilities/mpi4py/Library/compat/sgimpi.h
/root/OpenFOAM/ThirdParty-2.2.2/ParaView-3.12.0/Utilities/mpi4py/Library/config/deinompi.h
/root/OpenFOAM/ThirdParty-2.2.2/ParaView-3.12.0/Utilities/mpi4py/Library/config/lammpi.h
/root/OpenFOAM/ThirdParty-2.2.2/ParaView-3.12.0/Utilities/mpi4py/Library/config/openmpi.h
/root/OpenFOAM/ThirdParty-2.2.2/ParaView-3.12.0/Utilities/mpi4py/Library/config/sgimpi.h
/root/OpenFOAM/ThirdParty-2.2.2/ParaView-3.12.0/VTK/Utilities/mrmpi/mpistubs/mpi.h
/root/OpenFOAM/ThirdParty-2.2.2/ParaView-3.12.0/VTK/Utilities/vtkhdf5/src/H5FDmpi.h
/root/OpenFOAM/ThirdParty-2.2.2/gcc-4.5.2/libjava/include/jvmpi.h
/root/OpenFOAM/ThirdParty-2.2.2/openmpi-1.6.3/ompi/contrib/vt/vt/tools/vtunify/mpi/vt_unify_mpi.h
/root/OpenFOAM/ThirdParty-2.2.2/openmpi-1.6.3/ompi/include/mpi.h.in
/root/OpenFOAM/ThirdParty-2.2.2/openmpi-1.6.3/ompi/mpi/f77/prototypes_mpi.h
/root/OpenFOAM/ThirdParty-2.2.2/platforms/linux64Gcc45/paraview-3.12.0/include/paraview-3.12/mrmpi/mpi.h
/root/OpenFOAM/ThirdParty-2.2.2/platforms/linux64Gcc45/paraview-3.12.0/include/paraview-3.12/vtkhdf5/H5FDmpi.h
/usr/include/openmpi-x86_64/mpi.h
/usr/src/kernels/2.6.32-431.11.2.el6.x86_64/include/config/usb/serial/siemens/mpi.h
/usr/src/kernels/2.6.32-431.11.2.el6.x86_64/include/linux/crypto/mpi.h
/usr/src/kernels/2.6.32-431.3.1.el6.x86_64/include/config/usb/serial/siemens/mpi.h
/usr/src/kernels/2.6.32-431.3.1.el6.x86_64/include/linux/crypto/mpi.h

这有什么问题吗?是因为我没有 Intel MPI 吗?有没有办法在没有 Intel MPI 的情况下解决这个问题?

答案1

您正在使用开关调用库-l,但它们并不位于编译器可以找到它们的任何地方。这是由/etc/ld.so.conf您提供给编译器的参数/etc/ld.so.conf.d控制的。-L

$ icpc -std=c++0x  ...... -lfiniteVolume -lOpenFOAM -ldl -L/lib -lm -o \
     /root/OpenFOAM/OpenFOAM-2.2.2/platforms/linux64IccDPOpt/bin/solidEquilibriumDisplacementFoam
x86_64-k1om-linux-ld: cannot find -lfiniteVolume
x86_64-k1om-linux-ld: cannot find -lOpenFOAM
....

我首先调查.so您通过开关提供的任何目录中是否存在实际的库-L

相关内容