Xeon Phi用OpenFOAM 2.2.2の構築

Xeon Phi用OpenFOAM 2.2.2の構築

構築しようとしています。オープンバブル~のためXeon血存在するセントOS 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

スイッチを使用してlibraryを呼び出していますが、-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

おすすめ記事