実行可能プログラムのデフォルトのファイル名は a.out です。 -o コンパイラー・オプションを指定して別の名前を選択することができます。 誤ったコマンドをうっかり実行することがないように、 システム・コマンドまたはシェル・コマンド (たとえば、 test または cp) と同じ名前をプログラムに付けないようにする必要があります。 名前の矛盾が発生した場合は、 ./test などのパス名を指定することにより、 プログラムを実行することができます。
実行可能ファイルのパス名とファイル名、 実行時の引数をコマンド行に入力すれば、プログラムを実行できます。
プログラムの実行を中断するには、プログラムがフォアグラウンドにある間に Ctrl+Z キーを押してください。 実行を再開するには、fg コマンドを使用してください。
プログラムの実行を中断するには、 プログラムがフォアグラウンドにある間に Ctrl+C キーを押してください。
XL Fortran 実行可能ファイルを別のシステムに移動して実行したい場合は、 静的にプログラム (および任意で実行時メッセージ・カタログ) をリンクおよび コピーすることができます。 また、プログラム (および、必要な場合は XL Fortran ライブラリーと任意で実行時メッセージ・カタログ) を動的に リンクしてコピーすることもできます。 非 SMP プログラムの場合、libxlf90.so、libxlfmath.so、および libxlomp_ser.so のみが通常必要な XL Fortran ライブラリーです。 SMP プログラムの場合、通常、少なくとも libxlf90_r.so、libxlfmath.so、 および libxlsmp.so ライブラリーが必要出会う。SMP プログラムの場合、通常は少なくとも libxlf90_r.so, libxlfmath.so、 および libxlsmp.so ライブラリーが必要です。libxlfpmt*.so と libxlfpad.so が必要となるのは、 プログラムが -qautodbl オプションを使用してコンパイルされている場合のみです。
動的にリンクしたプログラムが正しく動作するためには、実行システム上の XL Fortran ライブラリーおよび オペレーティング・システム・レベルがコンパイル・システム上のレベルと同じか、またはそれより新しいレベルで なければなりません。
静的にリンクしたプログラムが正しく動作するためには、実行システム上の オペレーティング・システム・レベルがコンパイル・システム上のレベルと同じでなければならない場合があります。
POSIX のスレッド・サポートを使用して接続されたランタイム・ライブラリーが 2 種類あります。 libxlf90_r.so ライブラリーは、Fortran ランタイム・ライブラリーのスレッド・セーフであるバージョンです。 libxlsmp.so ライブラリーは、SMP ランタイム・ライブラリーです。
呼び出しコマンド、またある場合は、コンパイラー・オプションによって、スレッドをサポートするのに適切なライブラリー のセットがバインドされています。 たとえば、次のようになります。
コマンド | 使用されるライブラリー | インクルード・ディレクトリー |
---|---|---|
xlf90_r xlf95_r xlf_r |
/opt/ibmcmp/lib/libxlf90_r.so /opt/ibmcmp/lib64/libxlf90_r.so /opt/ibmcmp/lib/libxlsmp.so /opt/ibmcmp/lib64/libxlsmp.so |
/opt/ibmcmp/xlf/10.1/include |
XL Fortran プログラムが作成する実行時メッセージ用の言語を選択するには、 プログラムの実行前に環境変数 LANG と NLSPATH を設定してください。
環境変数の設定の他にも、プログラムは C ライブラリー・ルーチン setlocale を呼び出して、 実行時にプログラムのロケールを設定する必要があります。 たとえば、次のプログラムは、実行時メッセージのカテゴリーを環境変数 LC_ALL、 LC_MESSAGES、LANG に応じて設定することを指定します。
PROGRAM MYPROG PARAMETER(LC_MESSAGES = 5) EXTERNAL SETLOCALE CHARACTER NULL_STRING /Z'00'/ CALL SETLOCALE (%VAL(LC_MESSAGES), NULL_STRING) END
XL Fortran プログラム内の内部スイッチは、 コンパイラー・オプションがコンパイル時の動作を制御する方法と似た方法で、 実行時の動作を制御します。 実行時オプションは、 プログラム内の環境変数またはプロシージャー呼び出しによって設定することができます。 環境変数 XLFRTEOPTS および XLSMPOPTS を使用して、XL Fortran の実行時オプションの設定を指定することができます。
XLFRTEOPTS 環境変数を使用すると、 ユーザーは I/O、EOF エラー処理、 および乱数発生ルーチンの指定に影響を与えるオプションを指定することができます。 XLFRTEOPTS は、次の bash コマンド形式を使用して宣言します。
.-:------------------------------------------. V | >>-XLFRTEOPTS=--+---+----runtime_option_name--=----option_setting---+--+---+->< '-"-' '-"-'
オプション名と設定は、英大文字または小文字のどちらでも指定することができます。 コロンおよび等号の前後にブランクを追加して、読みやすくすることができます。 しかし、XLFRTEOPTS オプション・ストリングに組み込みブランクが含まれている場合は、 オプション・ストリング全体を二重引用符 (") で囲む必要があります。
プログラムが次のいずれかの状況を初めて検出したときに、環境変数がチェックされます。
プログラムの実行中に XLFRTEOPTS 環境変数を変更しても、プログラムには影響はありません。
SETRTEOPTS プロシージャー (「XL Fortran 言語解説書」で定義されています) は、 環境変数 XLFRTEOPTS と同じ名前値のペアを含んでいる単一ストリング引数を受け入れます。これは環境変数をオーバーライドし、プログラムの実行中に設定を変更したいときに使用することができます。 SETRTEOPTS への別の呼び出しによって変更されない限り、プログラムの残りの部分には、新たな設定が引き続き有効です。 プロシージャー呼び出しで指定された設定だけが変更されます。
次の実行時オプションは、環境変数 XLFRTEOPTS またはプロシージャー SETRTEOPTS で指定することができます。
ライブラリーは、チャンクにあるファイル・システムからのデータの読み取りや、それに対するデータの書き込みを、少しずつ 行うのではなく、READ 文や WRITE 文が来るたびに一括して行います。 バッファリングを実行する主な利点は、パフォーマンスを向上させることができるということです。
Fortran のルーチンが他の言語のルーチンと一緒に作業するアプリケーションや、Fortran のプロセスが同じ データ・ファイル上の他のプロセスと一緒に作業するアプリケーションがある場合、Fortran ルーチンによって 書かれたデータは、バッファリングが実行されるため、他のパーティーによってすぐには認識されない場合が あります (その逆も言えます)。 また、Fortran の READ 文は、入出力バッファーに必要以上のデータを読み込む場合があり、 結果として次のデータ項目を読み取るはずの、他の言語で書かれたルーチンや他のプロセスによって実行される 入力操作が失敗する可能性があります。 このような場合、buffering 実行時オプションを使用して、XL Fortran のランタイム・ライブラリーの バッファリングを使用不能にすることができます。 そうすれば、READ 文はファイルから必要とするデータを正確に読み取ることができ、 WRITE 文によるデータの書き込みも、文の完了時にファイル・システムへ フラッシュされます。
注: I/O バッファリングは、順次アクセス装置 (パイプ、端末、ソケット など) 上のファイルでは常に使用可能です。 buffering オプションを設定しても、このようなタイプのファイルに影響を及ぼすことはありません。
論理装置で I/O バッファリングを使用不能にすると、Fortran のサービス・ルーチン flush_ を呼び出して、 その論理装置用の I/O バッファーの内容をフラッシュする必要はありません。
buffering のサブオプションは、以下のとおりです。
以下の例では、Fortran ルーチンと C ルーチンが、リダイレクトする標準入力からデータ・ファイルを読み取ります。 最初に、メインの Fortran プログラムが整数を 1 つ読み取ります。 それから、C ルーチンが整数を 1 つ読み取ります。 最後に、メインの Fortran プログラムが別の整数を読み取ります。
Fortran のメインプログラム:
integer(4) p1,p2,p3 print *,'Reading p1 in Fortran...' read(5,*) p1 call c_func(p2) print *,'Reading p3 in Fortran...' read(5,*) p3 print *,'p1 p2 p3 Read: ',p1,p2,p3 end
C のサブルーチン (c_func.c):
#include <stdio.h>
void
c_func(int *p2)
{
int n1 = -1;
printf("Reading p2 in C...¥n");
setbuf(stdin, NULL); /* Specifies no buffering for stdin */
fscanf(stdin,"%d",&n1);
*p2=n1;
fflush(stdout);
}
入力データ・ファイル (infile):
11111 22222 33333 44444
メインプログラムは、リダイレクトする標準入力として infile を使用して実行します。 次のようにします。
$ main < infile
buffering=disable_preconn をオンにすると、結果は次のようになります。
Reading p1 in Fortran... Reading p2 in C... Reading p3 in Fortran... p1 p2 p3 Read: 11111 22222 33333
buffering=enable をオンにすると、結果は予想不能です。
cpu_time_type のサブオプションは、以下のとおりです。
default_recl 実行時オプションは 64 ビット・モードでのみ適用されます。 32 ビット・モードでは、default_recl は無視され、レコード・サイズは 32 ビットになります。
32 ビット・プログラムを 64 ビット・モードに移植するときは、default_recl を使用してください。 64 ビット・レコード長は指定された整変数に適合しません。 以下を見てください。
INTEGER(4) I OPEN (11) INQUIRE (11, RECL=i)
default_recl=64 のとき、64 ビット・モードでは上記のコード・サンプルで実行時エラーが 発生します。 これは、デフォルト・レコード長 2**63-1 が 4 バイト整数 I に適合しないためです。 default_recl=32 を指定すると、I に適合するデフォルト・レコード・サイズ 2**31-1 が保証されます。
RECL= 指定子について詳しくは、「XL Fortran 言語解説書」の OPEN 文の説明を参照してください。
たとえば、iostat_end=2003std 実行時オプションを設定すると、ファイルの終わり条件に対して 戻される拡張子と異なる IOSTAT 値となります。
export XLFRTEOPTS=iostat_end=2003std character(10) ifl integer(4) aa(3), ios ifl = "12344321 " read(ifl, '(3i4)', iostat=ios) aa ! end-of-file condition occurs and ! ios is set to -1 instead of -2.
IOSTAT 値の設定および使用の詳細については、 「XL Fortran 言語解説書」の READ および WRITE の説明、 ならびに『条件と IOSTAT 値』の節を参照してください。
MATMUL および RANDOM_NUMBER 組み込みプロシージャーで使用可能なスレッド数を変更すると、 パフォーマンスに影響を及ぼす可能性があります。
たとえば、langlvl=2003std 実行時オプションを設定すると、ランタイム・エラー・メッセージが出されます。
integer(4) aa(100) call setrteopts("langlvl=2003std") ... ! Write to a unit without explicitly ... ! connecting the unit to a file. write(10, *) aa ! The implicit connection to a file does not ... ! comform with Fortran 2003 behavior.
Fortran 95 標準の一部であり、XL Fortran で使用できる項目 (名前リストのコメントなど) の サポートを取得するには、以下のサブオプションのいずれかを指定する必要があります。
以下の例には、Fortran 95 拡張機能 (file 指定子が OPEN 文で脱落している) が含まれています。
program test1
call setrteopts("langlvl=95std")
open(unit=1,access="sequential",form="formatted")
10 format(I3)
write(1,fmt=10) 123
end
langlvl=95std を指定すると、ランタイム・エラー・メッセージが作成されます。
以下の例には、Fortran 90 には含まれていない Fortran 95 の機能 (名前リストのコメント) が含まれています。
program test2 INTEGER I LOGICAL G NAMELIST /TODAY/G, I call setrteopts("langlvl=95std:namelist=new") open(unit=2,file="today.new",form="formatted", & & access="sequential", status="old") read(2,nml=today) close(2) end today.new: &TODAY ! This is a comment I = 123, G=.true. /
langlvl=95std を指定すると、ランタイム・エラー・メッセージは作成されません。 しかし、langlvl=90std を指定すると、ランタイム・エラー・メッセージが作成されます。
err_recovery 設定は、発生したエラーが回復可能なエラーであるか、それとも重大なエラーであるかを 判別します。
同じプログラム内の多重接続が許可されるのは、ディスク・ドライブなどのランダム・アクセス・デバイス上にある ファイルの場合のみです。 次のような場合は、同じプログラム内の多重接続は許可されていません。
ファイルに損傷を与えないようにするために、以下の点に注意してください。
これでプログラムにおいて、UNIT パラメーターとは値が異なっていても、FILE パラメーターとは 同じ値を含む OPEN 文を複数指定することができます。 たとえば、TTY デバイス /dev/tty にリンクされている mytty という シンボリック・リンクがある場合は、multconnio=tty オプションを指定する際に、以下のプログラムを 実行することができます。
PROGRAM iotest OPEN(UNIT=3, FILE='mytty', ACTION="WRITE") OPEN(UNIT=7, FILE='mytty', ACTION="WRITE") END PROGRAM iotest
Fortran は、装置 0、5、および 6 を TTY デバイスに事前に接続します。 通常は、OPEN 文を使用して、装置 0、5、および 6 に接続された TTY デバイスに、追加の 装置を接続することはできませんが、multconnio=tty オプションを指定すれば、それが可能です。 たとえば、装置 0、5、および 6 が TTY デバイス /dev/tty に事前に接続されている 場合、multconnio=tty オプションを指定すれば、以下のプログラムを実行することができます。
PROGRAM iotest ! /dev/pts/2 is your current tty, as reported by the 'tty' command. ! (This changes every time you login.) CALL SETRTEOPTS ('multconnio=tty') OPEN (UNIT=3, FILE='/dev/pts/2') WRITE (3, *) 'hello' ! Display 'hello' on your screen END PROGRAM
namelist=old では、langlvl=95std、langlvl=90std、または langlvl=2003std 設定はいずれも、非標準 NAMELIST 形式をエラーと見なしません。
次の例は、実行時オプション cnverr を yes に設定し、 xrf_messages オプションを no に設定します。
# Basic format XLFRTEOPTS=cnverr=yes:xrf_messages=no export XLFRTEOPTS # With imbedded blanks XLFRTEOPTS="xrf_messages = NO : cnverr = YES" export XLFRTEOPTS
SETRTEOPTS への呼び出しとして、上記の例は次のように記述できます。
CALL setrteopts('xrf_messages=NO:cnverr=yes') ! Name is in lowercase in case -U (mixed) option is used.
XLSMPOPTS 環境変数を使用すると、ユーザーは SMP の実行に影響を与えるオプションを指定することが できます。 OpenMP 環境変数、OMP_DYNAMIC、OMP_NESTED、OMP_NUM_THREADS、および OMP_SCHEDULEは、並列コードの実行を制御できます。これらの使用について詳しくは、 XLSMPOPTS および OpenMP 環境変数 を参照してください。
デフォルトで、libxlopt ライブラリーは読者が XL Fortran でコンパイルするすべてのアプリケーションに リンクされます。ただし、サード・パーティーの 基礎線形代数サブプログラム (BLAS) ライブラリーを使用していたり、ESSL ルーチンを組み込む バイナリーを出荷したい場合、XL_BLAS_LIB 環境変数を使用してこれらを指定する必要があります。たとえば、 ご使用の BLAS ライブラリーが libblas と呼ばれる場合、環境変数を次のように設定します。
export XL_BLAS_LIB=/usr/lib/libblas.a
コンパイラーが BLAS ルーチンへの呼び出しを生成するとき、libblas ライブラリーで定義 されているサブルーチンが libxlopt で定義されているものの代わりに実行時に使用されます。
XL_NOCLONEARCH を使用してプログラムに汎用コードのみを実行するように指示してください。 ここで、汎用コードとはアーキテクチャー用に使用されないコードです。XL_NOCLONEARCH 環境変数は、 デフォルトで設定されません。ユーザーはアプリケーションでデバッグの目的用に設定できます。(-qipa=clonearch オプション も参照してください。)