T2KへのOpenFOAMインストール及び並列効率について

317 views
Skip to first unread message

Guanghao WU

unread,
Mar 14, 2010, 10:25:16 PM3/14/10
to OpenFOAM
今野先生

ファーム・フローの呉です。
初めて質問させていただきます。

まず、東大のT2KへのOpenFOAMインストールについてです。
第一回ワークショップの今野先生のT2Kへのインストール資料を参考にしていますが、詳細が分からなく難航しております。
(1)現在はintel C++コンパイルと使ってOpenMPIでコンパイルしていますが、OpenMPIがmyrinetへ対応できるでしょう
か?
(2)資料ではmyrinet用MPICHへのリンクすると説明されていますが、具体的な設定教えて頂ければと思います。

次、並列効率についてです。
第一回ワークショップの発表資料では128コアの並列計算結果まででしたが、その後もっと大規模の計算はなさっているのでしょうか?
(例え、256プロセッサ、512プロセッサ等) もし、結果があればその結果を教えていただきませんでしょうか。

以上、よろしくお願い致します。

Guanghao WU

unread,
Mar 15, 2010, 3:31:31 AM3/15/10
to OpenFOAM
呉です。

参考として、現在コンパイルしている設定をまとめました。

(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

以上、よろしくお願いいたします。

IMANO Masashi

unread,
Mar 15, 2010, 4:00:06 AM3/15/10
to open...@googlegroups.com

今野です.

> (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コアの計算もしたことはありますが,並列化効率は調べてません.
是非、呉さんのほうで調べて公表してください。

それでは.

OpenFOAM-1.6.x_UT_T2K_patch.tar.gz

IMANO Masashi

unread,
Mar 15, 2010, 4:07:29 AM3/15/10
to open...@googlegroups.com

今野です。

>
> 参考として、現在コンパイルしている設定をまとめました。
>

このメールを見る前に投稿してしまいました。

> ++ 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とリンクしようとすると、上記のようなエラーになります。

参考まで。

Guanghao WU

unread,
Mar 15, 2010, 4:19:11 AM3/15/10
to OpenFOAM
今野先生

呉です。
迅速なご対応ありがとうございます。
早速試してみます。

> 256,512,1024コアの計算もしたことはありますが,並列化効率は調べてません.
> 是非、呉さんのほうで調べて公表してください。
結果があれば公表させていただきます。

Reply all
Reply to author
Forward
0 new messages