スーパーコンピュータ SR8000 の基本的利用法

北海道大学大型計算機センターニュース
Vol. 34, No. 1, pp. 23-38, March 2002.
スーパーコンピュータ SR8000 の基本的利用法
研究開発部 大宮
学
omiya@cc.hokudai.ac.jp
あらまし 本センター研究開発部では,平 成 13 年度大学院講義においてスーパーコン
ピュータ SR8000 の利用法を含めた並列計算プログラミングについて教育を実施した.
この講義は,並列計算に関する基礎教育, OpenMP ディレクティブおよび MPI ライブ
ラリを用いたプログラミングとプログラムチューニングをテーマに,スーパーコンピ
ュータ利用上有効と考えられる事項をすべて網羅する内容および構成になってい る.
講義のうち 3 回をスーパーコンピュータ利用実習とし,並列計算プログラミングの知
識を定着しつつそれを深めた.その際,スーパーコンピュータ SR8000 の基本的な利
用法に関するテキストの必要性が明らかになった.本報告においては,講義資料をも
とにあくまでも基本的な利用法を明らかにすることを目的に,スーパーコンピュータ
SR8000 利用法を要領よくまとめている.
写真 1 .熱心にスーパーコンピュータ実習に取り組む大学院受講生.
( 大型計算機センター 2 階端末室 ) .
― 23 ―
1. まえがき
本報告においては,スーパーコンピュータ SR8000 の基礎的利用法について説明す
る.本センター研究開発部においては,平成 13 年度大学院講義 ( 後期 )「情報シミュレ
ーション特論」 ( 大学院工学研究科電子情報工学専攻電子情報エレクトロニクス専修 )
において,スーパーコンピュータ SR8000 の利用を含むスーパーコンピュータ活用の
ための並列計算プログラミングの講義を実施した.その講義を担当して,スーパーコ
ン ピ ュ ー タ 利 用 に 関 す る 多 数 の マ ニ ュ ア ル [1-4] が 本 セ ン タ ー か ら 提 供 さ れ て い る も
のの,重要項目が複数の資料に分散していたり,系統的な利用法を分かりやすく示し
た資料がないことに気がついた.したがって,スーパーコンピュータ SR8000 を利用
する上で必要な情報を得るためには,それらすべての資料に目を通さなければならな
く,SR8000 を利用できるようになるまでには何度となく困難な場面に遭遇する.本報
告においては,このような体験から得た問題点を解決することを目的として,今一度
基礎に戻って,本センターにおけるスーパーコンピュータ SR8000 の基本的利用方法
についてまとめる.
本報告は,大学院講義で利用した資料に基づいている.講義においては FORTRAN90
言語仕様, OpenMP ディレクティブ, MPI ライブラリおよびコンパイラオプション等
プログラム開発における基礎知識の教育を行っているが,本報告においてはこれら説
明は行っていない.したがって,それら基礎知識を修得することから始めようとする
のであれば参考文献[5-14] を参照されたい.
2. スーパーコンピュータ利用法
図 1 にスーパーコンピュータ SR8000 の構造を示す. 32 個のノード (Node #0∼#31)
から構成される.各ノードはユーザが利用可能な 8 個の CPU と主記憶装置から構成さ
れている.ジョブの実行方法として表 1 に示す 3 種類が考えられる.表 1(1) のシング
ルノード・シングル CPU での利用は実用的ではないが,複数 CPU を利用した場合の
並列処理による速度向上度を確認するための比較対象として意味がある.並列計算を
行う場合,表 1(2) または (3) を利用する.各ノードで利用できる主記憶装置の容量はジ
ョブクラスによって異なり,標準メモリジョブにおいては 6.5GB ,大容量メモリジョ
ブにおいては 13GB である.したがって,これら容量以上の主記憶を必要とする場合,
複数ノードを利用することになる.ただし,複数ノードを使用する 場合, MPI ライブ
ラリを用いたプログラム開発を行う.これには,大幅なソースコードの変更が必要で
ある.一方,シングルノードでの並列計算では,コンパイラオプションを適当に指定
― 24 ―
することによってコンパイラによる自動並列化が行われる.したがって,前述の主記
憶容量の上限以下で並列計算を実行する場合,この方法を採用するのが容易である.
High speed network
Processors
Processors
Processors
#0 #1 #2
#0 #1 #2
#0 #1 #2
#3 #4 #5
#3 #4 #5
#3 #4 #5
#6 #7
#6 #7
Main memory
Main memory
Node #0
・
・
・
Node #1
#6 #7
Main memory
Node #31
図 1 .スーパーコンピュータ SR8000 の構造.
32 個 の ノ ー ド が 高 速 ネ ッ ト ワ ー ク に よ り 結 合 さ れ て い る . 各 ノ ー ド に お い て
ユ ー ザ は 8CPU お よ び 主 記 憶 容 量 6.5GB ま た は 13GB を 利 用 する こ と が で き る .
表 1 .スーパーコンピュータでのジョブ実行方法.
名 称
シングルノード
シングル CPU
解
説
例えば,ノード #0 の CPU#0 のみを利用する.
(2)
シングルノード
8CPU
(3)
複数ノード
ノード #0 の 8 つ の CPU を利用して,ノード内で並列計算
を行う.この場合,コンパイラの自動並列化機能を利用で
きる.また, OpenMP ディレクティブ [8,9] を使用して,ユ
ーザ独自に並列計算プログラムを開発する.
例えば,ノード #0 および #1 を同時に利用して,並列計算
を行う.この場合,MPI ライブラリ [4,10,13-17] を利用して
ユーザが明示的に複数ノードを利用する並列計算プログ
ラムを開発する.
(1)
図 2 にスーパーコンピュータ SR8000 利用のための基本的な例を示す.スーパーコ
ンピュータ SR8000( ホスト名 hop) は TSS 接続等によって直接アクセスすることを許可
していない.したがって,スーパーサーバ HP Exemplar V2500( ホスト名 wine) をスーパ
ーコンピュータのフロントエンドとして利用する.ユーザは P C 上で稼動する telnet
クライアントまたは X window エミュレータソフトウエアを利用して,wine にログイ
― 25 ―
ンする.wine ではスーパーコンピュータ用クロスコンパイラ xf90 および xcc ,スーパ
ーコンピュータでバッチジョブを実行するための NQS コマンド qsub , qstat, qdel 等
を利用できるので,プログラムの実行以外の処理をすべてスーパーサーバ wine で行う.
Terminals
telnet
Program development,
compile and job entry
(xf90, xcc, qsub ・・・)
・ ・ ・
Super server ‘wine’
HP Exemplar
V2500
Executing jobs
NQS
Super computer ‘hop’
HITACHI SR8000
X window
emulator
Hard disk
図 2 .スーパーコンピュータ SR8000 の利用方法.
ス ー パ ー サ ー バ wine を フ ロ ン ト エ ン ド マ シ ン と し て ,ス ー パ ー コ ン ピ ュ ー
タ SR8000 を 利 用 す る . 端 末 装 置 か ら telnet ク ラ イ ア ン ト ま た は X window
エ ミ ュ レ ー タ ソ フ ト ウ エ ア を 利 用 し て , wine に ロ グ イ ン す る .
3. 並列計算プログラムの開発と実行
本章においては,並列計算プログラミングの具体的な例として 1 次元熱伝導方程式
の解を求めるプログラム [4] について,ノード内並列計算およびノードを 2 つ利用した
並列計算の手順を示す . ここでは,プログラミング言語として FORTRAN90 を使用する.
FORTRAN90 は FORTRAN77 に比較して大幅に機能拡張が行われ,並列計算プログラ
ムを作成するのに適した言語仕様になっている.大規模並列計算を目的としている研
究者の方は FORTRAN90 を修得し,それを並列計算プログラミングにおいて積極的に
利用していただきたい.なお, FORTRAN90 の学習マニュアルおよび FORTRAN77 か
ら FORTRAN90 の移行マニュアルとして参考文献 [6] および [7] を参照されたい.
3.1 環境設定
MPI ライブラリを使用して作成したプログラムをスーパーコンピュータ SR8000 で
実行させるためには,ユーザホームディレクトリにある環境設定ファイル .cshrc にリ
スト 1 に示す環境変数の設定を追加する.ただし,ここではシェル環境として C シェ
ルを利用しているものとする.
― 26 ―
リスト 1. ~/.cshrc ファイルに環境変数を設定する.
・
・
・
setenv MPIR_HOME /usr/mpi
set
path=( $path $MPIR_HOME )
た だ し , ’~ / ’ は ホ ー ム デ ィ レ ク ト リ を 表 す .
3.2 並列プログラムの作成
図 3 および式 (1) で表される 1 次元熱伝導モデルを検討する.ただし,この例題は参
考文献 [4] で示されており,本報告ではそれを例として使用する. 1 次元熱伝導に関す
る基本方程式は次式のような微分方程式で表される.
?u ? ? ? u?
?k
?
?
? t ? x ?? ? x ??
(1)
ただし, u=u(x,t) は場所 x における時刻 t での温度,k =k(x) は位置 x における熱拡散係
数を表す.さらに,計算を容易にするため,次式のような境界条件および初期条件を
設定する.
u(A,t)=u(B,t)=0
(2)
k(x)=1.0
(3)
u(x,0)=1.0
for x=A and B
(4)
計算モデルを作成するため,微分方程式(1) を空間と時間の 差分方程式に変換する.
ここでは,時間離散間隔 ? t ,空間離散間隔? x とし,x=i? x (i=0, 1, ・・・ , M) ,t=n? t (n=0,
1, ・・・ , N) する.
? u n ? u in ? u in? 1 ?
??
u in? 1 ? uin ? ? t ?? i? 1
? x2
?
?
(5)
n
式 (5) において, u i ? u (i ? x, n? t ) としている.
0
1
1
1
・・・
0
A
0
B
M? x
? x 2Δ x
図 3 .空間離散化,境界条件および初期値設定.
3.3 シングルノードでの実行
プログラム作成の手順を (a) から (g) に示す.
― 27 ―
x
(a) 現在時刻の温度を格納する配列を uc ,それに対して ? t 後の新しい温度を格納する
配列を un とする.
(b) 長さ 1 の一次元媒質を空間離散間隔 ? x = 0.001 で,M = 1,000 分割する.時間離散
間隔 ? t = 0.1μ sec ,繰返計算回数 N=2,500 とする.
(c) 温度を格納する配列 uc に初期値 1.0 を設定する.
(d) 時間ステップのループでは,初めに境界条件を設定する.配列の両端は常に 0.0
を与える.現在値から ? t 後の新しい時間ステップの値を求める.un(i) を求めるた
めには, uc(i) およびその両端の値 uc(i+1) , uc(i-1) を使用する.
(e) 上記計算をすべての un について実行する.次に, un の値を uc に代入する.
(f) 上記 (c) から (e) の処理を N 回繰返し行う.
(g) 最後に,結果をファイルに出力してプログラムを終了する.
以上の手順に従って作成した,FORTRAN90 によるプログラムをリスト 2 に示す.
リスト 2 . 1 次元熱伝導方程式の解を求めるプログラム (FORTRAN90) .
PROGRAM heat
*
INTEGER, PARAMETER:: M = 10001, timecount = 25000
INTEGER ::
M1,
M2,
I,
J
REAL(8) ::
r,
r1,
REAL(8) ::
Dx = 1.0D-3,
uc( M ), un( M )
Dt = 1.0D-7
*
M1 = M ? 1 ; M2 = M - 2
r = Dt / ( Dx * Dx ) ; r1 = 1.0D0 - 2.0D0 * r
uc = 1.0D0 ; uc( M ) = 0.0D0 ; uc( 1 ) = 0.0D0
*
DO J = 1, timecount, 1
un( 1 ) = 0.0D0 ; un( M ) = 0.0D0
un(2:M1) = r * ( uc(1:M2) + uc(3:M) ) + r1 * uc(2:M1)
uc
END DO
= un
*
OPEN( UNIT = 1, FILE = "output.dat" )
WRITE( 1, 100 ) ( I, uc(I), I = 1 , M, 1 )
CLOSE( UNIT = 1 )
STOP
*
100 FORMAT( I5, E12.5 )
END PROGRAM heat
このプログラムをスーパーサーバ wine でコンパイルおよびリンクする.そのために
― 28 ―
は,リスト 3 に示す Makefile を使用する. Makefile をプログラムと同じディレクトリ
に作成する.ここでは, FORTRAN90 ソースファイルの名称を main.f とし,コンパイ
ルおよびリンクの結果作成される実行オブジェクト名を main.exe としている.リスト
3 はシングルノード・ 8CPU を使用する場合の Makefile である.また,リスト 4 はシ
ングルノード・シングル CPU で実行するための実行オブジェクト main.exe を作成す
るための Makefile におけるリスト 3 との差分を示している.
Makefile に基づいて実行オブジェクトを作成するためには,コマンド make を実行
すればよい.なお,FLAGS および LDFLAGS で指定するオプションについては,当セ
ンターホームページ http://www.hitachi.co.jp/ Prod/comp/hpc/foruser/index-j.html を参照
されたい.リスト 3 に示す Makefile においては,コンパイルフラグとして -loglist を指
定している.このオプションにより,プログラムの並列化に関する情報がファイル
main.log に出力されるので,プログラムチューニング [3,11] に役立てる.
リスト 3. FORTRAN90 用 Makefile ( コンパイラ自動並列化オプション使用 ).
FLAGS
= -Oss ?procnum=8 -parallel=4 -pardiag=2 ?loglist ?c
DEST
= .
LD
LDFLAGS
= xf90
= -parallel
LIBS
=
MAKEFILE
INC
= Makefile
= ./
OBJS
= $(SRCS:.f=.o)
PROGRAM
SHELL
= main.exe
= /usr/bin/sh
SRCS
= main.f
SYSHDRS
=
all:
$(PROGRAM)
$(PROGRAM):
$(OBJS)
@echo "Linking $(PROGRAM) ..."
$(LD) $(LDFLAGS) $(OBJS) -o $(PROGRAM) $(LIBS)
@echo "done"
.f.o:
$(SRCS)
$(LD) $(FLAGS) $<
clean:;
@rm -f $(OBJS) $(SRCS:.f=.diag) $(SRCS:.f=.par) core
clobber:;
@rm -f $(OBJS) $(PROGRAM) $(SRCS:.f=.log) core tags ¥
output.dat *.sh.*
depend:;
echo:;
index:;
@mkmf -f $(MAKEFILE) ROOT=$(ROOT)
@echo $(HDRS) $(SRCS)
@ctags -wx $(HDRS) $(SRCS)
― 29 ―
リスト 4. シングル CPU で実行するオブジェクト作成方法.
(Makefile の 変 更 箇 所 の み 表 示 )
FLAGS
= -Oss -noparallel -loglist ?c
LDFLAGS
=
次に,スーパーサーバ wine からスーパーコンピュータ SR8000 に NQS コマンドを
使ってバッチジョブを投入する方法について説明する.初めに,バッチジョブ用シェ
ルファイルを作成する.シェルファイルの例をリスト 5 に示す.ここでは,シェルフ
ァイルの名称を heat.sh とし,プログラムおよび Makefile と同じディレクトリにこの
ファイルが存在するものとする.当該ディレクトリはホームディレクトリか
ら ./SMP/heat の位置にあると仮定している.
リスト 5 .バッチジョブ用シェルファイルの例.
ファイル名を heat.sh と仮定する.
#!/bin/csh
(C シ ェ ル に よ り 実 行 )
cd ./SMP/heat
main.exe
(カ レ ン ト デ ィ レ ク ト リ を 変 更 )
( プ ロ グ ラ ム main.exe を 実 行 )
スーパーコンピュータ SR8000 でバッチジョブを実行するため,次のような NQS コ
マンドをスーパーサーバ wine で実行する.
wine 11:
qsub -N 1 -q a heat.sh
ただし,行頭 ’ wine 11: ’ はプロンプトを表しているので, ’ : ’ 以降を入力する. ’-N 1’ は
1 つのノードを使用することを,’-q a’ はジョブクラス a ( 実行時間 60 分以下,主記憶
容量 6.5GB 以下 ) で実行することを指示している.なお,コマンド qsub のオプション
に関する詳細については参考文献[1] を参照されたい.
解析結果を図 4 に示す.また,図 5 および 6 に空間離散化数 M と DO ループ繰返計
算に要する時間比および時間を示す.ただし,DO ループ繰返計算部分とはリスト 2
において,変数 J で繰返計算を行っている DO ループ部分である.図 5 において,縦
軸は DO ループ繰返計算に要する時間と経過時間の比を表している.ただし,経過時
間の測定ではリスト 2 の OPEN 文から CLOSE 文までを削除し,解析結果のファイル
出力を行わない.図 6 において,縦軸は DO ループ繰返計算に要する時間を空間離散
化数 M で規格化した値である.図 5 と同様に,解析結果のファイル出力は行わない.
さらに,図 5 お よ び 6 において実線はノード内自動並列化を行った場合,●はシング
― 30 ―
ルノード・シングル CPU で計算した場合の結果である.両図から,空間離散化数 M
が増加するほど DO ループの繰返計算に要する時間が経過時間の大部分を占めるよう
になり, 1 つあたりの x 位置における計算処理時間は短くなることが分かる.図 6 に
おいて,処理時間の最小値はシングル CPU と 8CPU についてそれぞれ 30.0μ sec およ
び 4.21μ sec であることから,ノード内並列処理により 7 倍程度の処理速度の向上を
実現しているといえる.ただし,リスト 2 に示した例題は特に並列化の効果が期待で
きる単純な解析モデルである.実際の場合には,採用するアルゴリズムを厳選し,プ
ログラムにさまざまなチューニングを施し,高い並列化を実現するようにユーザが努
力しなければならない [18] .
1
Temperature
0.8
0.6
0.4
0.2
0
0
200
400
600
800
1000
Position
図 4. 解析結果 (M =1,000 , N=2,500) .
Calculation time (?sec)
5
Ratio (%)
80
Single CPU
60
40
Eight CPUs
20
0
10
5
6
10
M
4.8
30.5
Single CPU
4.6
30
4.4
29.5
4.2
4
7
10
図 5. 空間離散化数 M と DO ループの
繰返計算に要する時間比の関係.
31
Eight CPUs
10
5
6
10
M
7
10
Calculation time (?sec)
100
29
図 6. 空間離散化数 M と DO ループの
繰返計算に要する時間の関係.
3.4 複数ノードでの実行
2 つのノードを利用する並列計算プログラミングおよび実行方法について説明する.
複数ノードを利用する場合, MPI ライブラリを利用してプログラム開発する.3.3 で
解説した 1 次元熱伝導方程式を 2 つのノードで処理する方法について解説する.
― 31 ―
複数ノードで並列処理する部分を上記プログラム作成手順 (c) ∼ (e) とする.このとき,
配列変数 uc(1) ∼ uc(1001) および un(1) ∼un(1001) を 2 つのスレッドに分割して,計算す
る.例えば,
(スレッド 0)
uc(1) ∼ uc(500) および un(1) ∼ un(500)
(スレッド 1)
uc(501) ∼ uc(1001) および un(501) ∼ un(1001)
である.ここで,スレッド 0 における un(500) を計算するためには,スレッド 0 の uc(499)
および uc(500) ,スレッド 1 の uc(501) が必要になる.すなわち,他のノードで計算さ
れた結果を利用するため,ノード間通信が必要になる.そのようすを図 7 に示す. 2
つのノードを用いる場合,図 8 に示すようにスレッド 0 における uc(501) およびスレッ
ド 1 における uc(1) を両ノードで同期を取って共有しなければならない.したがって,
これらデータの通信に MPI ライブラリを用いる.
Thread 0
・・・
1
498
Thread 1
499
500
501
502
・・・
1001
Communication between the nodes
・・・
1
498
499
500
図 7. ノード 2 つを利用する並列計算.
Thread 0
1
・・・
498
499
500
501
Communication using MPI library
001
002
(500)
(501)
・・・
502
(1001)
Thread 1
図 8.
MPI ライブラリを用いたノード間通信.
リスト 6 に一次元熱伝導方 程式の MPI ライブラリを用いた解析プログラムを示す.
ただし,ノード数は 2 の場合である. MPI ライブラリを用いた並列処理プログラムの
作成方法については参考文献 [4,10,13-15] を参照されたい.リスト 7 に MPI ライブラリ
を使用する場合の Makefile を示す.スーパーサーバ上でクロスコンパイラ xf90 を用い
て実行オブジェクト main.exe を作成する.スーパーサーバ wine ではスーパーコンピ
― 32 ―
ュータ用 MPI ライブラリを用いたプログラムの開発に必要なインクルードファイルお
よ び ラ イ ブ ラ リ の デ ィ レ ク ト リ 位 置 が 次 のよ う に な っ て い る の で , そ の こ と を
Makefile で定義する.すなわち,
INC
= -I/usr/SR8000/USR/mpi/include
LIBS
= -L/usr/SR8000/USR/mpi/lib -lfmpi -lmpi
また,ロードフラッグに -rdma を含める.すなわち,
LDFLAGS = -parallel -rdma
リスト 6.
FORTRAN90 と MPI ライブラリによる
1 次元熱伝導方程式のプログラミング ( ノード数 2) .
PROGRAM heat
*
include 'mpif.h'
*
INTEGER, PARAMETER:: Np = 2,
M = 1001, timecount = 2500
INTEGER, PARAMETER:: Mm = M / Np + 2
INTEGER::
I,
INTEGER::
INTEG ER::
ierr, MyRank, Nsize, tag1 = 100, tag2 = 200
ireq1, ireq2, stat( MPI_STATUS_SIZE )
REAL(8)::
r,
REAL(8)::
REAL(8)::
Dx = 1.0D-3,
ts,
te
CHARACTER(12)::
J,
r1,
lm,
lm1,
lm2
uc( Mm ), un( Mm )
Dt = 1.0D -7
file_name
*
CALL MPI_INIT( ierr )
CALL MPI_COMM_SIZE( MPI_COMM_WORLD, Nsize,
ierr )
CALL MPI_COMM_RANK( MPI_COMM_WORLD, MyRank, ierr )
*
CALL MPI_BARRIER( MPI_COMM_WORLD, ierr )
CALL xclock( ts, 7 )
*
r
= Dt / ( Dx * Dx ) ; r1 = 1.0D0 - 2.0D0 * r
*
uc = 1.0D0
IF ( MyRank .EQ. 0 ) THEN
uc( 1 ) = 0.0D0
lm
= Mm - 2
END IF
IF ( MyRank .EQ. 1 ) THEN
uc( mm ) = 0.0D0
lm
= Mm - 1
END IF
lm1 = lm - 1
lm2 = lm + 1
*
― 33 ―
DO J = 1, timecount, 1
un(2:lm) = r * ( uc(1:lm1) + uc(3:lm2) ) + r1 * uc(2:lm)
IF ( MyRank == 0 ) un( 1
) = 0.0D0
IF ( MyRank == 1 ) un( lm ) = 0.0D0
uc = un
IF ( MyRank == 1 ) THEN
CALL MPI_ISEND( uc(2), 1, MPI_DOUBLE_PR ECISION,
0, tag1, MPI_COMM_WORLD, ireq1, ierr )
&
CALL MPI_IRECV( uc(1), 1, MPI_DOUBLE_PRECISION,
&
0, tag2, MPI_COMM_WORLD, ireq2, ierr )
END IF
IF ( MyRank == 0 ) THEN
CALL MPI_ISEND( uc(lm), 1, MPI_DOUBLE_PRECISION,
1, tag2, MPI_COMM_WORLD, ireq1, ierr )
&
CALL MPI_IRECV( uc(lm+1), 1, MPI_DOUBLE_PRECISION,
&
1, tag1, MPI_COMM_WORLD, ireq2, ierr )
END IF
*
CALL MPI_WAIT( ireq1, stat, ierr )
CALL MPI_WAIT( ireq2, stat, ierr )
END DO
*
CALL xclock( te, 8 )
WRITE( 6, * ) '### elapsed time=', te
*
ifile = 10 + MyRank
WRITE( file_name, 200 ) 'output', ifile, '.dat'
OPEN( UNIT = ifile, FILE = file_name )
IF ( MyRank .EQ. 0 ) WRITE( ifile, 999 ) ( uc(i), i = 1, lm, 1 )
IF ( MyRank .EQ. 1 ) WRITE( ifile, 999 ) ( uc(i), i = 2, Mm, 1 )
CLOSE( UNIT = ifile )
*
CALL MPI_FINALIZE( ie rr )
STOP
*
999 FORMAT( E12.5 )
200 FORMAT( A6, I2, A4 )
END PROGRAM heat
リスト 7. Makefile (MPI ライブラリ,ノード数 2)
FLAGS
= $(INC) -Oss -procnum=8 ?parallel=4 -pardiag=2 -loglist -c
DEST
= .
LD
LDFLAGS
= xf90
= -parallel -rdma
LIBS
= -L/usr/SR8000/USR/mpi/lib -lfmpi -lmpi
MAKEFILE = Makefile
INC
= -I/usr/SR8000/USR/mpi/include
OBJS
= $(SRCS:.f=.o)
PROGRAM
SHELL
= main.exe
= /usr/bin/sh
― 34 ―
SRCS
SYSHDRS
all:
= main.f
=
$(PROGRAM)
$(PROGRAM):
$(OBJS)
@echo "Linking $(PROGRAM) ..."
$(LD) $(LDFLAGS) $(OBJS) -o $(PROGRAM) $(LIBS)
.f.o:
@echo "done"
$(SRCS)
$(LD) $(FLAGS) $<
clean:;
clobber:;
@rm -f $(OBJS) $(SRCS:.f=.log) $(PROGRAM)
@rm -f $(OBJS) $(PROGRAM) core
depend:;
@mkmf -f $(MAKEFILE) ROOT=$(ROOT)
echo:;
index:;
@echo $(HDRS) $(SRCS)
@ctags -wx $(HDRS) $(SRCS)
リスト 8 . 2 ノード並列計算実行用バッチジョブシェルファイル
( ファイル名を heat.sh とする ) .
#! /bin/csh
cd ./MPI/heat
mpiexec ?n 2 -p $QSUB_PARTNAME main.exe
リスト 8 に 2 ノード並列計算実行用バッチジョブシェルファイルの例を示す.実行
オブジェクトファイルが存在するディレクトリはホームディレクトリから見
3 行目に示すコマンド mpiexec は MPI ライブラリ
て ./MPI/heat であると仮定している.
を用いたプログラムを実行する ための専用コマンドである. 3 行目においては, ’-n 2’
により 2 つのノードを使用して実行オブジェクト main.exe を実行するように指示して
いる.また, ’-p $QSUB_PARTNAME’ を必ず記述する.
スーパーコンピュータ SR8000 でバッチジョブを実行するため,次のような NQS コ
マンドをスーパーサーバ wine で実行する.
wine77:
qsub
–N 2 –q a heat.sh
ただし,行頭 ’wine77:’ はプロンプトを表している.ここでは, ’-N 2’ とすることで 2
つのノードを利用した並列計算を実行させる.以上のことから,複数のノードを用い
て並列計算をエラーなく実行するためには,下記 3 つのファイルまたはコマンドで指
定するノード数を一致させなければならない.
・ ユーザプログラム
・ 並列計算実行用バッチジョブシェルファイルに記述する mpiexec のオプシ
ョン -n の引数.
・ コマンド qsub のオプション-N の引数
― 35 ―
31
7
Single CPU
6
5
30.5
30
4
29.5
Eight CPUs
3
2
Two nodes
105
106
M
107
Calculation time (? sec)
Calculation time (? sec)
8
29
図 9. 空間離散化数 M と DO ループ繰返計算に要する時間の関係.
図 9 は 2 つのノードを利用した並列処理結果を破線で示し,図 6 と同様の特性図で
5
ある.同図から,M が 4 × 10 以上になると 1 ノードよりも 2 ノードを利用した方が解
6
析時間が短いことが分かる.しかしながら,M が 10 以上では解析時間が一定である
ことから,使用するノード数を増加して,さらに解析時間を短縮することを考えるべ
きである.
4. むすび
本報告においては,スーパーコンピュータ SR8000 の利用法について基本に立ちか
えってまとめた.我が国においてはスーパーコンピュータが多くの研究機関ならびに
共同利用施設に導入され,大いに利用されている.さらに,将来は世界中に散らばっ
たスーパーコンピュータを超高速なネットワークで相互接続し,クラスタリングによ
り利用しようとするグリッドコンピューティングが一般化してくるものと考える.こ
のような状況にあって,本センターにおいてはスーパーコンピュータをより多くの研
究者および大学院生に利用してもらえる機会を作り,世界に通用する研究活動に役立
てていただきたいと考えている.一方で,P C およびワークステーションなどと比較し
て,スーパーコンピュータは使いにくいと思われている方,利用を躊躇されている方
がまだ多くいるのではないかとも考えている.しかしながら,今回の大学院講義での
スーパーコンピュータ利用実習を通じて,受講生はスーパーコンピュータの利用法が
予想を裏切って容易であったことに驚きを隠せないようであった.さらに,好奇心を
― 36 ―
持ってさまざまな解析モデルへの適用に夢を膨らませているようでもあった.この報
告がスーパーコンピュータ利用普及の一助になればと考えている.また,本センター
ではスーパーコンピュータホームページ http://portal.hucc.hokudai.ac.jp/eng/index.html
を開設しているので[19] ,併せて参照されたい.
参考文献
[1]
新スーパーコンピュータの運用について ,北海道大学大型計算機センター「速報
No. 8」別冊, Dec. 1999 .
[2]
株式会社 日立製作所,スーパーテクニカルサーバ HITACHI SR8000 有効な利用
方法について,北海道大学大型計算機センター講習会資料, 2001 .
[3]
株式会社 日立製作所,スーパーテクニカルサーバ HITACHI SR8000 チューニン
グマニュアル,北海道大学大型計算機センター講習会資料, 1999 .
[4]
株式会社日立製作所,スーパーテクニカルサーバ HITACHI SR8000 MPI 入門,
北海道大学大型計算機センター講習会資料,2001 .
[5]
冨田博之,Fortran90 プログラミング,培風館,東京, 1999 .
[6]
R. Davies, A. Rea and D. Tsaptsinos, Introduction to Fortran90: An Introduction
Course for Novice Programmers , Cardiff HPC Training and Education Center, Cardiff,
London.
[7]
S. Ramsden, F. Lin, M. A. Pettipher, G. S. Noland and J. M. Brooke, FORTRAN90: A
Conversion Course for Fortran77 Programmer , Student Notes, The Manchester and
North HPC Training and Education Center, The University of Manchester, Jul. 1995.
[8]
OpenMP Organization, OpenMP Fortran Application Program Interface, Version 2.0,
Nov. 2000.
[9]
南里豪志,天野浩文,
“ OpenMP 入門 (1) ”,九州大学情報基盤センター広報,vol. 1,
no. 3, pp. 186-215, Oct. 2001.
[10] 坂本雄児,“ MPI を用いた計算機合成ホログラム並列計算プログラムのスーパー
コンピュータ SR8000 での開発”,北海道大学大型計算機センターニュース,vol.
32, no. 4, pp. 5-14, Dec. 2000.
[11] 青山幸也,チューニング技法虎の巻,日本アイ・ビー・エム株式会社,東京,2000 .
[12] 青山幸也,並列プログラミング虎の巻 SMP 版,日本ア イ・ビー・エム株式会社,
東京, 2000 .
[13] 青山幸也,並列プログラミング虎の巻 MPI 版,日本アイ・ビー・エム株式会社,
― 37 ―
東京, 2000 .
[14] W. Gropp, Tutorial on MPI: The Message-Passing Interface, Mathenatics and
Computer Science Division, Argonne National Laboratory, 2000.
[15] N. MacDonald, E. Minty, J. Malard, T. Harding, S. Brown and M. Antonioletti, Writing
Message Passing Parallel Programs with MPI, Edinburgh Parallel Computing Center,
The University of Edinburgh, 2000.
[16] 打矢
匡,柏
達也,
“ スーパーコンピュータ SR8000 を用いた FDTD 並列計算”,
北海道大学大型計算機センターニュース, vol. 33, no. 3, pp. 4-11, Sep. 2001.
[17] C. Guiffaut and K. Mahdjoubi, “A Parallel FDTD Algorithm Using the MPI Library”,
IEEE Antennas and Propagation Magazine, vol. 43, no. 2, pp. 94-103, Apr. 2001.
[18] 坂本
天,“ SR8000 性能モニタの使用法とチューニング指針”,北海道大学大型
計算機センターニュース, vol. 33, no. 1, pp. 28-35, Mar. 2001.
[19] 大宮
学,
“ポータルサイトの公開について”,北海道大学大型計算機センターニ
ュース, vol. 33, no. 4, pp. 30-37, Dec. 2001.
― 38 ―