ファーム・フローの呉です。
初めて質問させていただきます。
まず、東大のT2KへのOpenFOAMインストールについてです。
第一回ワークショップの今野先生のT2Kへのインストール資料を参考にしていますが、詳細が分からなく難航しております。
(1)現在はintel C++コンパイルと使ってOpenMPIでコンパイルしていますが、OpenMPIがmyrinetへ対応できるでしょう
か?
(2)資料ではmyrinet用MPICHへのリンクすると説明されていますが、具体的な設定教えて頂ければと思います。
次、並列効率についてです。
第一回ワークショップの発表資料では128コアの並列計算結果まででしたが、その後もっと大規模の計算はなさっているのでしょうか?
(例え、256プロセッサ、512プロセッサ等) もし、結果があればその結果を教えていただきませんでしょうか。
以上、よろしくお願い致します。
参考として、現在コンパイルしている設定をまとめました。
(1)OpenFOAM-1.6/etc/bashrcの修正部分
: ${WM_MPLIB:=MPICH}; export WM_MPLIB
case $WM_ARCH in
Linux)
WM_ARCH=linux
# compiler specifics
case `uname -m` in
i686)
;;
x86_64)
case $WM_ARCH_OPTION in
......
64)
WM_ARCH=linux64
WM_COMPILER=Icc
export WM_COMPILER_LIB_ARCH=64
export WM_CC='icc'
export WM_CXX='icpc'
export WM_CFLAGS='-m64 -fPIC'
export WM_CXXFLAGS='-m64 -fPIC'
export WM_LDFLAGS='-m64'
;;
(2)OpenFOAM-1.6/etc/settings.shの修正部分
# compilerInstall = OpenFOAM | System
compilerInstall=System
case "${compilerInstall:-OpenFOAM}" in
OpenFOAM)
.....
ここに、下記を追加
System)
export WM_COMPILER_DIR=/opt/intel/Compiler/11.0/074
WM_COMPILER_BIN=$WM_COMPILER_DIR/bin/intel64
WM_COMPILER_LIB=$WM_COMPILER_IDR/lib/intel64
;;
case "$WM_MPLIB" inの下記の部分修正
MPICH)
mpi_version=mpich-mx
export MPI_HOME=/opt/$mpi_version
export MPI_ARCH_PATH=$MPI_HOME
export MPICH_ROOT=$MPI_ARCH_PATH
_foamAddPath $MPI_ARCH_PATH/bin
_foamAddLib $MPI_ARCH_PATH/lib
export FOAM_MPI_LIBBIN=$FOAM_LIBBIN/$mpi_version
unset mpi_version
;;
(3)OpenFOAM-1.6/wmake/rules/linux64Icc/c++Opt修正部分
c++DBUG =
c++OPT = -xSSE3 -O3 -no-prec-div
上述の設定でコンパイルすると下記のエラーがでました。
他のsrc/OpenFOAMようなソースコードはエラーなくコンパイルされています。
++ wmake libso ParMETISLib
ld: /opt/mpich-mx/lib/libmpich.a(isend.o): relocation R_X86_64_PC32
against `MPIR_ToPointer' can not be used when making a shared object;
recompile with -fPIC
ld: final link failed: Bad value
make: *** [/home/b0n225/OpenFOAM/OpenFOAM-1.6/lib/linux64IccDPOpt/
mpich-mx/libparmetis.so] Error 1
以上、よろしくお願いいたします。
> (1)現在はintel C++コンパイルと使ってOpenMPIでコンパイルしていますが、OpenMPIがmyrinetへ対応できるでしょう
> か?
以下のサイト
http://blog.goo.ne.jp/sdpaninf/e/0d34877b706112e4313e72f3cb7fcf06
http://blog.goo.ne.jp/sdpaninf/e/eee535cac8da1c254e886c823ab26596
を参考に,OpenMPIのコンパイル時にMyrinetのライブラリをリンクするように
すれば良いと思いますが,自分ではやったことはありません.
なお,gccでコンパイルされたMyrinet用のOpenMPIライブラリなら,東京大学
のT2Kシステム上の/opt/itc/mpi/openmpi-mx-gccにありますので,OpenFOAMを
gccでコンパイルして,このopenmpi-mx-gccとリンクする手もあります.
> (2)資料ではmyrinet用MPICHへのリンクすると説明されていますが、具体的な設定教えて頂ければと思います。
資料の時はOpenFOAMのバージョンがOpenFOAM-1.5.x,MPIライブラリはMPICHを
使っていましたが,今回はOpenFOAM-1.6.x+Myrinet用MPICH2の場合として説明
します.
また,ログインシェルがbashと仮定します.
ここから
-----
0. OpenFOAMのソースをNFSファイルシステム上に置く.
T2KにおけるOpenFOAMのコンパイルをホームディレクトリのデフォルトのHSFS
ファイルシステム上行なうと,大変時間かかるかかると思います.
そこで,NFS領域に /nfs/all/LOGINNAME/OpenFOAM/OpenFOAM-1.6.x 等のディ
レクトリを作成し,ホームの/home/LOGINNAME/OpenFOAMからシンボリック・リ
ンクを貼ると良いと思います.
% mkdir -p /nfs/all/LOGINNAME/OpenFOAM/OpenFOAM-1.6.x
% cd ~/OpenFOAM
% ln -s /nfs/all/LOGINNAME/OpenFOAM/OpenFOAM-1.6.x .
(LOGINNAME はアカウント名)
1. Intel C,C++コンパイラとMPICH2ライブラリを使う設定をする.
http://www.cc.u-tokyo.ac.jp/service/ha8000/ic/
を見て設定してくさい.
具体的には~/.bashrcに
# Intel C,C++ compiler
source /opt/intel/Compiler/11.0/074/bin/iccvars.sh intel64
の行を入れます.
さらに,T2Kシステムに用意されているMyrinet用のMPICH2のライブラリ,MPI
コマンドを使うように,~/.bashrcに以下の設定をします.
# mpich-mx
source /opt/itc/mpi/mpiswitch.sh mpich2-mx-intel-shared
2. コンパイル時に_STRING_ARCH_unalignedとMPICH_IGNORE_CXX_SEEKを定義し
たり,最適化オプションを変更するようにwmakeのルールを修正する.
添付のパッチ
OpenFOAM-1.6.x_UT_T2K_patch_wmake_rules_linux64Icc_2010031501
をOpenFOAM-1.6.xのディレクトリに置いて,以下のようにパッチを当ててください.
% patch -p0 < OpenFOAM-1.6.x_UT_T2K_patch_wmake_rules_linux64Icc_2010031501
なお,iccやicpcの最適化オプションは-O3 -no-prec-div -msse3にしています.
3. Intelコンパイラでコンパイルしたmpich2-mxライブラリをリンクするようにする.
添付のパッチ
OpenFOAM-1.6.x_UT_T2K_patch_etc_2010031501
をOpenFOAM-1.6.xのディレクトリに置いて,以下のようにパッチを当ててください.
% patch -p0 < OpenFOAM-1.6.x_UT_T2K_patch_etc_2010031501
4. コンパイル時にHashTables廻りでエラーが出る場合
以下のファイルにおけるテンプレートパラメータとクラス名の重複を避けるた
めに,以下のファイルを修正します.
src/OpenFOAM/containers/HashTables/HashSet/HashSet.C
src/OpenFOAM/containers/HashTables/HashTable/HashTable.C
これを行なうには,添付のパッチ
OpenFOAM-1.6.x_UT_T2K_patch_HashTables_2009100701
OpenFOAM-1.6.xのディレクトリに置いて,以下のようにパッチを当ててください.
% patch -p0 < OpenFOAM-1.6.x_UT_T2K_patch_HashTables_2009100701
-----
ここまで
> 次、並列効率についてです。
> 第一回ワークショップの発表資料では128コアの並列計算結果まででしたが、その後もっと大規模の計算はなさっているのでしょうか?
> (例え、256プロセッサ、512プロセッサ等) もし、結果があればその結果を教えていただきませんでしょうか。
256,512,1024コアの計算もしたことはありますが,並列化効率は調べてません.
是非、呉さんのほうで調べて公表してください。
それでは.
>
> 参考として、現在コンパイルしている設定をまとめました。
>
このメールを見る前に投稿してしまいました。
> ++ wmake libso ParMETISLib
> ld: /opt/mpich-mx/lib/libmpich.a(isend.o): relocation R_X86_64_PC32
> against `MPIR_ToPointer' can not be used when making a shared object;
> recompile with -fPIC
> ld: final link failed: Bad value
> make: *** [/home/b0n225/OpenFOAM/OpenFOAM-1.6/lib/linux64IccDPOpt/
> mpich-mx/libparmetis.so] Error 1
OpenFOAMをコンパイルするには通常shared libraryが必要ですので、
> MPICH)
> mpi_version=mpich-mx
と、static libraryとリンクしようとすると、上記のようなエラーになります。
参考まで。
呉です。
迅速なご対応ありがとうございます。
早速試してみます。
> 256,512,1024コアの計算もしたことはありますが,並列化効率は調べてません.
> 是非、呉さんのほうで調べて公表してください。
結果があれば公表させていただきます。