ベクトル並列型スーパーコンピューター SR8000 利用ガイド〜 FORTRAN によるコンパイル、実行入門（１）システム運用掛宮 嵜洋

佐々木 一孝「どのコマンドを使用したら良いか」、「オプションは何が必要か」、「数値計算ライブラリーを使用したい」、「具体的なプログラムのコンパイル例を見たい」等、本センターのベクトル並列型スーパーコンピューター SR8000 をこれから利用していこうとする方々からの声をよく耳にします。詳細情報を豊富に含んだマニュアルはプログラムの最適化には不可欠ですが、初心者が必要な情報を探そうとすると困難なものです。そこで、本稿では SR8000 で FORTRAN プログラムをコンパイル、実行する上で初歩的な例題を列挙しましたので御覧下さい。なお、コマンドやオプションの動作、機能に関する詳細につきましては必ずメーカー発行のマニュアルで御確認下さい。

1. コンパイルとリンク
コマンド
FORTRAN プログラムのコンパイル、リンクには以下のコマンドを使用します。
最適化 FORTRAN77

f77

最適化 FORTRAN90

f90

コマンドとオプション、ファイルの指定は以下のようになります。
%〔 –オプション . . 〕

f77〔ファイル名 . . 〕〔 –オプション . . 〕

オプション
オプションは空白で区切り複数指定できます。左から順に処理していきますので肯定／否定の関係にあるオプションは後に指定したものが有効になります。特に、ライブラリー名を指定する–l オプション、リンケージオプションはオプションの位置がコンパイル、リンクに影響するので注意が必要です。なお、オプションの指定方法には –W0,’コンパイル
オプション’, –Wl,’リンケージオプション’と記述する方法がありますが、本稿では –オプシ
ョンの形式を使用します。
ファイル名
ファイル名にソースプログラム名（ .f）を指定してコマンドを実行するとコンパイラーはコンパイル及びリンクを行ない実行ファイル（a.out）を作成します。このときオプション –c

を同時に指定するとリンクは行われずオブジェクトモジュール（.o）を作成します。また、ファイル名がオブジェクトモジュール名（ .o）の場合にはリンクが行われ、オブジェクトモジュールから実行ファイル（a.out）を作成することができます。なお、実行ファイル名は–o オプションで指定することができます。
コンパイル、リンクの例
main.f, sub.f をコンパイルして実行ファイルを作成% f77 main.f
sub.f
main.f:
f77: compile start : main.f*OFORT77 V01‑01‑A entered.
*program name = MAIN
*end of compilation : MAIN
*program units = 0001, nogenerated.
sub.f:
f77: compile start : sub.f*OFORT77 V01‑01‑A entered.
*program name = SUB*end of compilation : SUB*program units = 0001, nogenerated.
% ls
a.out
main.fsub.f%（main.f のコンパイルメッセージ）
diagnostics（sub.f のコンパイルメッセージ）
diagnostics（この後リンクが行われる）実行ファイル a.out ができる

オブジェクトモジュール作成後、リンクする例% f77 ‑c main.f
sub.f
（略）
% ls
main.f main.o sub.f sub.o%% f77 ‑o program main.o sub.o% lsmain.f main.o program sub.f sub.o%

main.f, sub.f をコンパイルしてオブジェク
トモジュールを作成
オブジェクトモジュール main.o, sub.o ができる
main.o, sub.o をリンクして実行ファイルを作成
実行ファイル program ができる

並列アプリケーションではコンパイル時に必要なライブラリー、インクルードファイル、オプション等を自動的に設定する専用のコマンドを用意しているものがあります。これらのコマンドは専用のオプションを解釈した後、必要なオプション、ファイル名を f77 又はf90 コマンドに渡してコンパイルします。
MPI

mpif77 、 m p i f 9 0

PARALLELWARE

srf77 、 s r f 9 0

また、ソースプログラム中に記述した指示文（ディレクティブ）に従って、並列化変換した FORTRAN ソースプログラム（f90 のみ）を生成するトランスレーターもあります。
Parallel FORTRAN

pf90

これらのコマンドの詳細は各並列アプリケーションのマニュアルを御覧下さい。使用例は次号スーパーコンピューティングニュースでも紹介します。

2. オプションと機能最適化 FORTRAN77（または最適化 FORTRAN90）で使用される主なオプションとその機能について記述します。
最適化オプション
最適化とは演算子の変更、ループ構造の変換、演算順序の変更などをコンパイラーが自動的に行ない、プログラムの実行速度を向上させる機能です。各種オプションが最適化
機能ごとに用意されておりますが、以下に示すレベルに従って最適化することができます。
最適化レベル
レベル０
レベル３
レベル４
レベル S

原始プログラム通りのコンパイル、文の実行順序に影響を与えない一文単位の最適化（べき演算の乗算化、文関数のインライン化、局所的なレジスタの割り当て等）
演算順序の変更はせず、プログラム全体での大域的な最適化（分岐命令の最適化、命令の実行順序変更、演算子の変更、不変式のループ外への移動、ユーザー関数のインライン展開等）
制御構造、演算順序の変更を含むプログラム全体の最適化（演算順序の変更、除算の乗算化、ループ展開・分配・融合等）
実行速度が最も速くなるようなコンパイルオプションの自動設定（擬似ベクトル化、要素並列化を含む各種最適化オプションの設定）

演算精度を落としても実行速度が速くなるようなコンパイルオプションの自動設定（レベル S に加えてライブラリーコード使用、引数チェックの抑止等）
高いレベルの最適化は、それより低いレベルの機能を含んでいます。また、一般にレベルが高い最適化ほどコンパイルに時間がかかります。さらに場合によっては最適化機能による副作用のため、計算結果が異なる場合がありますので御注意下さい。
レベル SS–opt= 最適化レベル
% f77
% f77
% f77

program.f‑opt=3
program.f‑opt=ss program.f

最適化オプション
最適化レベル S でコンパイル
最適化レベル３でコンパイル
最適化レベル SS でコンパイル

オプション無指定時の最適化レベルは f77 が S（ただし要素並列化を含まない）、 f90 が３。

–loopdiag% f77 ‑loopdiag program.f
f77: compile start : program.f*OFORT77 V01‑01‑A entered.
*program name = MAIN
*end of compilation : MAIN
KCHF1805C
the do 10 loop is fuzed with thefollowing one. line=3
KCHF1809C
the do 10 loop is unrolled 2 times.
line=3*program units = 0001, no diagnostics
generated.

最適化ループ診断メッセージ
program.f を最適化レベル S でコンパイルしたときのループ構造診断メッセージを出力す
る（DO10 ループと後続のループを融合）（DO10 ループを 2 回展開）

オプションの詳細及び個別の最適化オプションにつきましてはマニュアル「最適化 FORTRAN77 使用の手引（ 6A30-3-314）」又は「最適化 FORTRAN90 使用の手引（ 6A30-3-311）」を御覧下さい。

擬似ベクトル化オプション
擬似ベクトル化とはメモリー上のデーターを先読みすることで演算をパイプライン的に処理するオブジェクトを生成する機能です。データー転送のオーバーヘッド（主記憶アクセスレイテンシー）を隠蔽できるので命令間の依存による性能低下を抑えることができます。擬似ベクトル化が適用される主な条件は以下の通りです。
?? 最内側DOループである?? DOループに以下の文を含まない-

ループ脱出文(GOTO文、EXIT文など)-

割り当てGOTO文、計算型GOTO文、SELECT文-

関数、手続き呼び出し（擬似ベクトル化数学関数を除く）-入出力文-終了・停止文(STOP文、PAUSE文、RETURN文など)?? DOループ内でIF文による分岐命令を生成しない最適化（PREDICATE）が適用できる?? DOループ内に別名参照（EQUIVALENCE等）を含まない?? DOループの実行性能向上が見込める

–pvec
% f77
% f77
% f77

擬似ベクトル化オプション
program.f‑pvec
program.f‑nopvec program.f

擬似ベクトル化する
擬似ベクトル化する
擬似ベクトル化を抑止する

オプション無指定時でも f77では擬似ベクトル化オプションが有効（デフォルト）、 f90では指定が必要。

–pvdiag

擬似ベクトル化診断メッセージ% f77 ‑pvdiag program.f
f77: compile start : program.f

program.f を擬似ベクトル化してコンパイルしたときの診断メッセージを出力する*OFORT77 V01‑01‑A entered.
*program name = MAIN
*end of compilation : MAIN
KCHF1700C
the do 20 loop is pseudo‑vectorized.
line=7*program units = 0001, no diagnostics
generated.
%（DO20 ループを擬似ベクトル化）

オプションの詳細及び個別の擬似ベクトル化オプションにつきましてはマニュアル「最適化 FORTRAN77 使用の手引（ 6A30-3-314）」又は「最適化 FORTRAN90 使用の手引（ 6A30-3-311）」を御覧下さい。

要素並列化オプション
要素並列化とはプログラムを並列処理単位に分割して、ノード内の複数のプロセッサーで並列実行するためのオブジェクトを生成する機能です。メッセージ通信を行う並列化とは異なり、利用者が並列処理自体をコーディングすることなく、単一ノード内でプログラムを高速化することができます。以下に示す要素並列化レベルが設定されています。

要素並列化レベル
レベル 0

要素並列化をしない

レベル 1
レベル 2

SECTION 型要素並列化、強制 DO 型要素並列化
変数・配列のプライベート化、リダクション変数要素並列化

レベル 3

ループ分配、ループ分割、ループの一重化

レベル 4

パイプライン要素並列化、圧縮・拡張ループの要素並列化

高いレベルの最適化は、それより低いレベルの機能を含んでいます。

要素並列化変換にはオプション指示で DO ループを自動的に変換する DO 型要素並列化とパラメーター指示（POPTION）で文の集まりをプロセッサーに分配する SECTION 型要素並列化があります。DO 型要素並列化が適用される主な条件は以下の通りです。
?? SECTION 型要素並列化指示された範囲内にあるDOループでない?? DOループに以下の文を含まない-

ループ脱出文(GOTO文、EXIT文など)-

割り当てGOTO文-関数、手続き呼び出し-入出力文-終了・停止文(STOP文、PAUSE文、RETURN文など)?? DOループに NOPARALLEL 指示がない?? DOループ内に同期制御又は排他制御指示がない?? DOループの実行性能向上が見込める–parallel= 要素並列化レベル% f77% f77% f77% f77‑parallelprogram.f‑parallel=4 program.f‑noparallel program.f‑parallel main.o sub.o

要素並列化オプション
要素並列化（レベル２）する
要素並列化（レベル４）する
要素並列化を抑止
要素並列オブジェクトをリンクする場合–parallelオプションにレベル指定がない場合はレベル 2（ –parallel=2）を仮定。
–parallel リンケージオプションにはレベル指定は不要。

–pardiag% f77 ‑pardiag program.f
f77: compile start : program.f

要素並列化診断メッセージ
program.f を要素並列化してコンパイルしたときの診断メッセージを出力する*OFORT77 V01‑01‑A entered.
*program name = MAIN
*end of compilation : MAIN
*end of compilation : ̲parallel̲func̲1̲MAIN(diagnosis for loop structure)
KCHF2000C
the do 10 loop is parallelized.line=3（DO10 ループを要素並列化）
KCHF2011C
the variable(s) or array(s) in do 10 loop （DO10 ループ内の変数を TLOCAL 化）
is applied to tlocal transformation.name=I
line=3*program units = 0001, no diagnostics
generated.
%
オプションの詳細及び個別の要素並列化オプションにつきましてはマニュアル「最適化 FORTRAN77 使用の手引（ 6A30-3-314）」又は「最適化 FORTRAN90 使用の手引（ 6A30-3-311）」を御覧下さい。

64 ビットアドレッシングモード
プログラムで使用するメモリーサイズが 2GB を超える場合には、64 ビットアドレッシ
ングモードのオブジェクトモジュールを作成する必要があります。以下のオプションを指定してコンパイルします。また、オブジェクトモジュールをリンクする際にも指定が必要です。
–64

64 ビットアドレッシングモードオプション% f77% f77% f77% f77‑64‑32‑64

program.f
program.f
program.fmain.o sub.o

64 ビットモードでコンパイルする
32 ビットモードでコンパイルする
32 ビットモードでコンパイルする
64 ビットモードのオブジェクトをリンクする

以下は–64 オプション指定時の注意事項です。
?? 定数（名前付き定数）及び DATA 文等により配列に初期値を与える場合（初期化項目）には、2,147,483,647 バイトを超えるデーターは使用できない。
?? ASSIGN 文、割り当て GOTO 文、FMT 指定子の変数は整数型 8 バイトでなければならない。
-

型変更は利用者自身で行なうか、オプション–intexp=full で全ての整数型 4 バイトの変数、配列、定数を整数型 8 バイトへ拡張（引数の整合性には注意）する必要がある。

?? サービスサブルーチンの引数には、整数型 8 バイトは使用できない。
-

サービスサブルーチンを使用している場合には引数を整数型 8 バイトを整数型 4 バイトに変換するオプション–exsrvc を指定する必要がある｡?? オプション–hugeary が仮定され、以下の組込み関数は整数型 8 バイトを返す。（f90 のみ）-LBOUND,SHAPE,SIZE,UBOUND,COUNT,MAXLOC,MINLOC

なお、2GB を超えるファイルサイズの入出力は非同期入出力文を除いて 32 ビットアドレッ
シングモードでも可能です。
ログメッセージ
ログメッセージ出力オプションを指定することで、コンパイル診断メッセージをファイルに出力することができます。要素並列化や擬似ベクトル化を適用した様子がソースプログラムに併記されるのでプログラムのチューニングが容易になります。
–loglist% f77 ‑parallel ‑loglist
program.ff77: compile start : program.f*OFORT77 V01‑01‑A entered.
*program name = MAIN
*end of compilation : MAIN
*end of compilation : ̲parallel̲func̲1̲MAIN*program units = 0001, no diagnostics
generated% lsa.out
program.f
program.log

ログメッセージ出力オプション
ログメッセージファイルを出力する
ログメッセージファイルはソースプログラム毎に「ソースプログラム名.log 」というファイル名で出力される。

ログメッセージファイル program.log が作成される【続く】

% cat

ログメッセージファイル program.log の内容

program.log
parameter (n=1000)
real a(n),b(n),c(n)** Parallel processing starting at loop entry** Parallel function: ̲parallel̲func̲1̲MAIN** Parallel loop** ‑‑‑ loops merged(DO10 and DO20)‑‑‑** Parallel processing finishing at loop exit****
[DO 10]**Innermost loop unrolled (2 times).
XX there is no target for pattern
referencing,PVP not applied.
**（略）（並列処理開始）（並列ループ）（DO10、DO20 ループ融合）（最内側ループ展開）（擬似ベクトル化適用せず）

コンパイルメッセージやログメッセージは日本語で出力することができます。（デフォル
トは環境変数 LANG に設定された文字コード種別です。）–listlang=文字コード種別% f77‑parallel ‑loglist program.f‑listlang=sjis
f77: compile start : program.f

ログメッセージファイルを出力する（オプション –listlang=sjis を指定）

*OFORT77 V01‑01‑A 開始*プログラム名 = MAIN
*end of compilation : MAIN
*end of compilation : ̲parallel̲func̲1̲MAIN*プログラム数 = 0001 , エラーはありません｡% cat program.log
parameter (n=1000)
real a(n),b(n),c(n)コンパイルメッセージが日本語で表示される（端末の文字コードを SJIS に設定すること）** ループ入口で並列処理 開始** 並列手続き名 : ̲parallel̲func̲1̲MAIN** 並列ループ** ‑‑‑ ループ融合を行った(DO10 と DO20)‑‑‑** ループ出口で並列処理 終了****[DO 10]**
最内側ループ展開(2 倍)を行った。
XX対象となる配列参照が無いので擬似ベクトル化を適用しなかった。
**

ログメッセージファイル program.log が日本語で作成される

文字コード種別の対応
文字コード種別
CSJIS
EUC

言語（文字コード）
英語（ASCII）
日本語（SJIS ）日本語（EUC）

性能モニター
性能モニター情報出力オプションを指定することで実行時に性能、負荷等の情報を得ることができます。これらのオプションはコマンド行の最後（ファイル名の後）に指定して下さい。また、リンク時にも指定が必要です。
–pmfunc

性能モニター情報（関数、手続き）出力オプション% f77 ‑parallel program.f ‑pmfunc
f77: compile start : program.f*OFORT77 V01‑01‑A entered.

性能モニター情報を出力する実行ファイルを作成
性能モニター情報ファイルは実行ファイル実行後に【続く】

*program name = MAIN
*program name = SUB*end of compilation : MAIN
*end of compilation : ̲parallel̲func̲1̲MAIN*end of compilation : SUB*end of compilation : ̲parallel̲func̲2̲SUB*program units = 0002, no diagnostics
generated.
% a.out
3.00000000
3000.00000% lsa.out
program.fpm̲a.out̲Aug22̲1625̲node000̲149513% pmpr pm̲a.out̲Aug22̲1625̲node000̲149513
pm̲a.out̲Aug22̲1625̲node000̲149513:（略）############################################# Function/Subroutine#############################################============================================= Function/Subroutine Ranking=============================================
CPU‑Time[%]Times Func(File+Line)‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑[1] 0.004126[93.08] 1
MAIN(program.f+3)[2] 0.000011[ 0.25] 1
SUB(program.f+14)‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑TOTAL 0.004137[93.32]–p m p a r「pm_実行ファイル名_日付_時間_ノード番号_プロセス番号 」というファイル名で出力される。
このファイルはバイナリ−形式のため、性能モニター情報出力コマンド pmprを使用してテキスト形式で表示する。
実行ファイル a.out を実行する
性能モニター情報ファイルが出来ていることを確認
pmpr コマンドで情報をテキスト形式で表示（pmpr –j ファイル名とすると日本語 SJISで表示される）

性能モニター情報の内容については
スーパーコンピューティングニュース
Vol.2NO.4(2000.7)「SR8000 チューニング支援機能を利用したプログラムチューニング」を参照して下さい。

性能モニター情報（要素並列化）出力オプション% f77 ‑parallel program.f ‑pmpar
f77: compile start : program.f

性能モニター情報を出力する実行ファイルを作成*OFORT77 V01‑01‑A entered.
*program name = MAIN
*program name = SUB*end of compilation : MAIN
*end of compilation : ̲parallel̲func̲1̲MAIN*end of compilation : SUB*end of compilation : ̲parallel̲func̲2̲SUB*program units = 0002, no diagnostics
generated.
% a.out
3.00000000
3000.00000
% ls
a.out
program.fpm̲a.out̲Aug22̲1647̲node000̲149551.
% pmpr pm̲a.out̲Aug22̲1647̲node000̲149551（略）############################################# Element Parallel Region###########################################============================================= Element Parallel Region Ranking=============================================
CPU‑Time[%] MFLOPS MIPS Times Func[Rank]‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑[1]0.000006[ 0.03] 173.010 963.322 1 SUB[‑][2] 0.000005[ 0.03] 392.912 1104.777 1 MAIN[‑]‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑TOTAL 0.000011[ 0.06]

性能モニター情報ファイルは実行ファイル実行後に「pm_実行ファイル名_日付_時間_ノード番号_プロセス番号」というファイル名で出力される。
このファイルはバイナリー形式のため、性能モニター情報出力コマンド pmprを使用してテキスト形式で表示する。
実行ファイル a.out を実行する
性能モニター情報ファイルが出来ていることを確認
pmpr コマンドで情報をテキスト形式で表示（pmpr –j ファイル名とすると日本語 SJIS
で表示される

性能モニター情報の内容については
スーパーコンピューティングニュース
Vol.2NO.4(2000.7)「SR8000 チューニング支援機能を利用したプログラムチューニング」を参照して下さい。

ソース差分部分コンパイル
ソース差分部分コンパイル機能はオブジェクトファイル中にソースプログラム情報を保持し、再度そのオブジェクトを出力先としてコンパイルしたときには、ソースプログラムの変更があったプログラム単位のみコンパイルする機能です。これによりコンパイル時間を短縮することができます。
–diffcomp

ソース差分部分コンパイルオプション% f77 ‑diffcomp program.f
f77: compile start : program.f

差分コンパイルオプションを指定する
通常と同様にコンパイルを開始*OFORT77 V01‑01‑A entered.
*program name = MAIN
*program name = SUB*end of compilation : MAIN
*end of compilation : SUB*program units = 0002, no diagnostics
generated.
% lsa.out
program.f
program.oプログラム MAIN コンパイル終了
プログラム SUB コンパイル終了% f77 ‑diffcomp program.f
f77: compile start : program.f

プログラム SUB の内容を変更後、改めて差分コンパイルする*OFORT77 V01‑01‑A entered.
*program name = MAIN
*program name = SUB*end of compilation : SUB*program units = 0002, nogenerated.
%

プログラム MAIN に変更がないので構文チェックのみ行う
プログラム SUB は変更があったのでコンパイルを行う
メッセージ「 *end of compilation : MAIN 」がないことに注意diagnostics

オブジェクトファイル program.o および実ファイル a.out が作成されるオブジェクト再コンパイル
オブジェクト再コンパイル機能はオブジェクトファイル中に保持しているソースプログ
ラム情報を使用し、オブジェクトを入力として再コンパイルする機能です。
–recomp

オブジェクト再コンパイルオプション% f77 ‑diffcomp program.f
f77: compile start : program.f*OFORT77 V01‑01‑A entered.
*program name = MAIN
*program name = SUB*end of compilation : MAIN
*end of compilation : SUB*program units = 0002, nogenerated.
% rm program.f% lsa.out
program.o

差分コンパイルオプションを指定する
通常と同様にコンパイルを開始

diagnostics

プログラム MAIN コンパイル終了
プログラム SUB コンパイル終了
オブジェクトファイル program.o および実ファイル a.out が作成される
試しにソースプログラム program.f を消してみる% f77 ‑recomp ‑parallel program.f
f77: compile start : program.f

再コンパイルオプションを指定してコンパイル（参考のため–parallel オプションも追加）*OFORT77 V01‑01‑A entered.
*program name = MAIN
*program name = SUB

オブジェクトモジュール内のソースプログラ
ム情報を利用して再コンパイルを行う【続く】

*end of compilation : MAIN
*end of compilation : SUB*program units = 0002, nogenerated.
%diagnostics

プログラム MAIN コンパイル終了
プログラム SUB コンパイル終了

制限コンパイル
通常コンパイラーは最大実行性能の実行ファイルを作成しようとするために、コンパイル時間やコンパイル時使用メモリー量は無制限に使用して最適化を行いますが、時間がかかり過ぎる場合やコンパイル時のメモリー不足の場合に、これらに制限を設けてコンパイルすることができます｡–l i m i t
% f77
% f77

制限コンパイルオプション‑limit‑nolimit

program.f
program.f

制限コンパイルを行う制限コンパイルを行わない（デフォルト）

並列コンパイル
プログラム単位毎に別々のプロセスでコンパイルするため、ノード内の各プロセッサーを使用した並列コンパイルができます。
–Xpcomp% f77

並列コンパイルオプション‑Xpcompprogram.f

並列コンパイルを行う

言語仕様の拡張
他の FORTRAN 処理系でコンパイルできるプログラムが本センターの SR8000 でコンパイルエラーとなるとき、以下のオプション指定により対応できる場合があります。
–i,U–nosymnchk

変数名、外部手続き名が 8 文字を超える、またはアンダースコア（ _）を含む場合は次のオプションを指定する必要があります。（f77 のみ）–i,P
以下の項目について言語仕様を拡張します。（本センターではこのオプションをデフォルトで設定しています。）--

デバッグ行（D、？）、タブコード、注釈（！）の扱い
型編集（＄型、NL 型、O 型、Q 型）
組込み関数（％VAL、％REF ）実定数が上限、下限値を超える場合の仮定処理
DO WHILE 文
DOUBLE COMPLEX 型 等–i,LTダブルクォーテーション（は）で囲まれた文字列を定数とみなします。（無指定時に以降、行の最後までを注釈とみなします。）

デフォルトオプション
本センターでは幾つかのオプションをデフォルトで設定しています。オプション無指定
時にも以下のオプションが仮定されますのでご注意ください。
f77:–i,P –opt=s

f90:

–i,P

–pvec

–noparallel–symnchk

デフォルトオプションは環境変数 F77OPTS（又は F90OPTS）で利用者ごとに変更することができます。（特に必要がない場合には変更しないで下さい。）% setenv% setenv

F77OPTS
F77OPTS‑pvec‑parallel

デフォルトオプションを設定しない
デフォルトオプションの設定例

3. 実行
コンパイルして作成した実行ファイル a.out（または実行ファイル名）はコマンドとして実行することができます。
% a.out
プログラムの実行
sr8000-s では要素並列化したプログラムは実行できません。

バッチジョブ（NQS）で実行する場合にはスクリプトファイルを作成し、バッチシステムにサブミットします。
% cat a.csh#@$‑q single#@$‑lT 1:00:00#@$‑lM 2GB
cd samplea.out% qsub a.csh
Request 6180.sr8000‑s.cc.u‑tokyo.ac.jp
submited to queue: single% qstat ‑h sr8000‑bt
REQUESTNAMEOWNERQUEUE PRI
6180.sr8000‑s a.csh
a30000 C
0NICE CPUMEM STATE
2028800 7168 RUNNING% lsa.csh
a.csh.e6180
a.csh.o6180% cat a.csh.o6180
hello.
% cat a.csh.e6180%

スクリプトファイル例
要素並列プログラムのときは#@$-q parallel#@$-N 1#@$-lT 1:00:00#@$-lM 2GB
ジョブのサブミット
ジョブの確認（RUNNING は実行中）

ジョブの結果ジョブが終了していれば標準出力ファイル（結果）と標準エラー出力ファイル（エラー）の 2つのファイルが作成されます。

複数のノードを使用した並列プログラムの場合には各アプリケーションによって実行方法が異なります。実行例は次号スーパーコンピューティングニュースでも紹介します。
資源制限値
ログインした環境（ TSS）で使用できる計算機資源はデフォルト値によって制限されています。このため、プログラムのサイズによっては資源不足となる場合がありますので必要に応じて制限値を変更して下さい。ただし、ログイン環境自体がこれらの制限値の影響を受けますので無闇に大きく（または小さく）設定しないよう心掛けて下さい。

limit 資源制限（sr8000-p の例）% limitcputimefilesizedatasize
stacksize
coredumpsize
memoryusedescriptors
64datasize
64stacksize
pgrpcputime
addressspace
pgrpadrspaceessizepgrpessize
threadcount% limit% limit% limit% limit

1:00:00
unlimited
131072 kbytes
1024 kbytes
0 kbytes
unlimited
128 files
262144 kbytes
1024 kbytes
unlimited
128 Mbytes
unlimited
512 Mbytes
unlimited
9 threads

addressspace unlimited
datasize
2048
cputime7200
64datasize
3072

CPU 時間制限値
データーサイズ
スタックサイズ

データーサイズ（64 ビット使用時）
スタックサイズ（64 ビット使用時）
メモリー使用量（TSS で ES は使用できない）

メモリー使用量を指定できる最大値を設定
データーサイズに 2048MB を設定
CPU 時間制限値を 2 時間を設定
64 ビットモードの場合（3072MB を設定）

バッチジョブ（NQS）で使用する資源制限値はスクリプトファイルのオプション（#@$-）
で設定します。
#@$‑N#@$‑lT#@$‑lM#@$‑lV#@$‑lt#@$‑ld#@$‑ls4
1:00:00
2048MB
1GB00:30:00
1024MB
1024KB#@$-N ノード数#@$-lT 実行時間制限（ETIME）#@$-lM メモリー使用量#@$-lV ES 使用量#@$-lt プロセス毎の実行制限時間（CTIME）#@$-ld プロセス毎のデーターサイズ#@$-ls プロセス毎のスタックサイズ

次号スーパーコンピューティングニュースでは複数ノードを使用した並列プログラムのコンパイルや実行の例、ライブラリー使用例、実行時オプション等を紹介する予定です。