SXによる並列計算 HOW TO
~ログインからコンパイル・実行・ログアウトまで~
帝塚山大学 日置慎治
1.はじめに
高速化のためにSXを利用されている方は多い。もしかすると今後SXを利用しようと考えておられる方も少なからずいるかもいれない。
今回は、前回までの[1.2]ような系統的なモニター報告ではなく、
SXによる並列計算HOW TO
として、SXで並列計算するための必要な知識を、
ログインから実行、ログアウトまで
総括的に説明してみたい。今後SXを利用される方の簡易マニュアルになれば幸いである。
(注:系統的な報告をする余裕がなかったと言うわけでは、決してない!
2.説明に入る前に
この簡易マニュアルでは、できるだけ短くつまり簡潔に説明することを目標とする。
より詳しい説明には以下を参照頂きたい。
SX-4 FORTRAN(並列処理を中心として)NEC
http://www.center.osaka-u.ac.jp/user-service/fortransx/fortransx.html
→SXの概要から始まって、並列化、チューニングまで詳しく説明されている。
sx4の日本語版オンラインマニュアル R8.1
http://www.center.osaka-u.ac.jp/user-service/sx4-8.1j/
→nqsやanalyzerなど、実際にジョブを投入するときには必見!
大阪大学大型計算機センターニュースSXモニター報告集
Vol.28 No1 1998-5 第108号,Vol.29 No1 1999-5 第112号
→これまでの報告集です。どの記事も情報満載!
3.ログインからコンパイル、実行、ログアウトまで
3.1 ログイン
SXで作業するために、ログインする。
端末として利用しているマシンのプロンプトをlocalmachine%とし、SXのプロンプトをsx%とする。
3.2 コンパイル/リンク
localmachine% telnet ccsx4.center.osaka-u.ac.jp
SUPER-UX UNIX (ccsx40)
login: ******
Password: ******
(メッセージがいっぱい)
sx%
ソースプログラムをコンパイル/リンクして、実行可能オブジェクトを作成する。
ここではfip.fというMPIによる並列化プログラムを例にとって説明する。プログラム作成については、後述する。
なお、コンパイルのために今回はf77コマンドを使用する。他コマンド(例:f90など)との比較については[?,?]を参照のこと。
sx% f77 fpi.f -P multi -G local -float1 -I/usr/include
-lmpi
fpi.f:
PROGRAM : main
56 do 20 i =myid+1,n,numprocs
VEC 1 : DOループ全体をベクトル化する.DO変数は i
NO ERROR
sx%
コンパイルが正常に行われ、実行可能ファイルa.outが作成される。
オプションについての詳細は、2章の文献/報告集を参照のこと。
3.3 実行/NQSサブミット
以下のような、subという名前のスクリプトファイルを使い、ジョブをNQSに投入する。
#!/usr/bin/csh
#@$-q p4 ←注意1
#@$
cd pi ←注意2
#setenv F_PROGINF yes ←注意3
mpisx-p2-e./a.out < input ←注意4
| 注意1 |
|
4プロセッサで並列実行可能なキューをp4に指定する。 |
| 注意2 |
|
NQSではホームディレクトリをデフォルトの作業ディレクトリとするため、ジョブを行うディレクトリにcdコマンドを移動しておく必要がある。 |
| 注意3 |
|
この例ではコメントにしてあるが(先頭に半角シャープ#)、これを有効にすると、実効性などの詳しい情報が得られる。 |
| 注意4 |
|
mpisxコマンドでジョブを並列実行。
-pオプションで実際の並列度を指定。この場合は、2プロセッサをしている。注意1で指定した4以下であれば問題なし。(残り2プロセッサはこの場合何もせずに休んでいることになるが・・・)入力ファイルinputを指定。 |
sx% qsub sub
←qsubコマンドでsubを投入
Request 72444.ccsx40 submitted to queue: p4. ←7244というのがジョブ番号
sx% qstatr ←qstatrコマンドでジョブの進行状況をモニターする
==================================================
NQS (RO8.10)BATCH REQUEST HOST:ccsx40
==================================================
| REQUEST ID |
NAME |
OWNER |
QUEUE |
PRI |
NICE |
MEMORY |
TIME |
STT |
JID |
R |
| ------------- |
------ |
------- |
------- |
---- |
---- |
-------- |
----- |
---- |
----- |
- |
| 72444.ccsx40 |
sub |
x60435 |
p4 |
31 |
0 |
- |
- |
RUT |
17307 |
- |
| -------------------------------------------------------------------------- |
sx%
4.おわりに:並列プログラム作成
上の例では、fpi.fという並列プログラムを使用した。はじめて並列計算を行う際に、もっとも重要な部分はプログラムの並列化である。この部分は、これまでのモニター報告にて詳細に説明されているので、今回の報告では割愛したが、fpi.fを例にとって、少しだけ説明する。
このfpi.fは、MPIによる並列化計算のサンプルとして、MPICHなどのディストリビュージョンには必ず含まれているサンプルプログラムである。これは

の積分を利用して、円周率πを計算するプログラムである。
積分をn等分し、このn個の計算をDOループとしてプロセッサに割り振っている。
h = 1.0d0/n
sum=0.0d0
do 20 i = myid+1,n,numprocs ←自分の担当部分は、プロセッサ数飛ばし
x = h * (dble( i )-0.5d0)
sum=sum+f(x)
20 continue
上の例で、numprocsは実行時のプロセッサ数、myidは自分のIDである。全体のループ数nをnumprocsで割った分が自分の担当になるよう、DOループの飛びをnumprocsにしてある。
プログラムの作成時に、このように並列計算できる部分を見つけ、そこを並列化対象とすることが重要である。MPIによる並列化だけでなく、共有メモリ型計算機での自動並列化を含めた並列計算についての簡単な解説をまとめたので併せて参考にして欲しい。[3]
並列化は個々のプログラムあるいは計算対象毎に千差万別であるから一概には言えないが、これから並列化による高速処理をめざす研究者が必要な技術やこれまでの実行例(成功例だけでなく失敗例も)に容易にアクセスできる環境は、もっとも重要な要素であると思う。この度、大阪大学大型計算機センターはサイバーメディアセンターに発展的整備されるとのことであるが、センターが今後もこのような要素を満たすべく発展されることを望んでやまない。
参考文献
- 日置慎治,大阪大学大型計算機センターニュース,Vol.28 No.1 1198-5 第108号,P125.
- 日置慎治,大阪大学大型計算機センターニュース,Vol.29 No.1 1199-5 第112号,P110.
- 「並列化でシュミレーション」中村純,日置慎治,青山幸也,
「シュミレーション科学への招待」コンピュータによる新しい科学(日経サイエンス社)2000年3月17日発行P26別冊日経サイエンス