インテル拡張ルーチン

インテル® Fortran® コンパイラでは、OpenMP* ランタイム・ライブラリへの拡張機能として、並列スレッドのスタックサイズの取得と設定およびメモリの割り当てルーチングループをサポートしています。

ここで説明するインテル拡張ルーチンは、ライブラリ・コードとアプリケーションが目的どおりに機能することを確認する低レベルのデバッグに使用できます。これらのルーチンを使用するには、プログラムをシーケンシャルに実行する -openmp_stubs コマンドライン・オプションを使用しなければならないため、充分注意して使用してください。これらのルーチンはまた、一般的に他のベンダの OpenMP 互換コンパイラには認識されません。これらのコンパイラでは、リンクの段階で失敗します。

スタックサイズ

多くの場合、環境変数は拡張ライブラリ・ルーチンの代わりに使用されます。例えば、並列スレッドのスタックサイズは、kmp_set_stacksize() ライブラリ・ルーチンではなく、KMP_STACKSIZE 環境変数を使用して設定します。


インテル拡張ルーチンへのランタイムの呼び出しは、対応する環境変数の設定よりも優先します。

kmp_set_stacksize()kmp_get_stacksize() の各ルーチンは 32 ビットの引数のみを受け付けます。kmp_set_stacksize_s()kmp_get_stacksize_s() の各ルーチンは、64 ビット整数を使用できる size_t 引数を受け付けます。

Itanium® ベース・システムでは、常に kmp_set_stacksize() および kmp_get_stacksize() を使用することをお勧めします。スタックサイズを ≥ 2**32 バイト (4 GB) に設定するには、_s() の付くバージョンのルーチンを使用する必要があります。

下の表でスタックサイズのルーチンの定義を参照してください。

メモリの割り当て

インテル Fortran コンパイラでは、OpenMP ランタイム・ライブラリに対する拡張機能として、メモリ割り当てルーチンを実装しています。そのため、スレッドは各スレッドにローカルなヒープからメモリを割り当てることが可能です。これらのルーチンは、kmp_mallockmp_calloc および kmp_realloc です。

これらのルーチンによって割り当てられたメモリは、kmp_free ルーチンによって解放する必要があります。あるスレッドによってメモリを割り当て、別のスレッドでメモリを kmp_free'd を呼び出しても不正な処理ではありませんが、このような処理によってパフォーマンスが多少低下します。

次の表でこれらのルーチンの定義を参照してください。

関数/ルーチン

説明

スタックサイズ

function kmp_get_stacksize_s()
integer(kind=kmp_size_t_kind)kmp_get
_stacksize_s

各並列スレッドがプライベート・スタックとして使用するバイト数を返します。この値は、最初の並列領域の前に kmp_get_stacksize_s で変更するか、または KMP_STACKSIZE 環境変数で変更できます。

function kmp_get_stacksize()
integer kmp_get_stacksize

このルーチンは、下位互換のみ提供します。 異なるインテル® プロセッサとの互換性には kmp_get_stacksize_s ルーチンを使用します。

subroutine kmp_set_stacksize_s(size)
integer (kind=kmp_size_t_kind)
size

各並列スレッドがプライベート・スタックとして使用するバイト数を size に設定します。この値は、KMP_STACKSIZE 環境変数で設定することもできます。kmp_set_stacksize_s を有効にするには、プログラムの最初の (動的に実行された) 並列領域の先頭の前に呼び出す必要があります。

subroutine kmp_set_stacksize(size)
integer
size

このルーチンは、下位互換のみ提供します。 異なるインテル・プロセッサとの互換性には kmp_set_stacksize_s(size) を使用します。

メモリの割り当て

function kmp_malloc(size)
integer(kind=kmp_pointer_kind)kmp_malloc
integer(kind=kmp_size_t_kind)
size

スレッド・ローカル・ヒープから size バイトのメモリブロックを割り当てます。

function kmp_calloc(nelem,elsize)
integer(kind=kmp_pointer_kind)kmp_calloc
integer(kind=kmp_size_t_kind)
nelem
integer(kind=kmp_size_t_kind)
elsize

スレッド・ローカル・ヒープからサイズ elsizenelem 要素の配列を割り当てます。

function kmp_realloc(ptr, size)
integer(kind=kmp_pointer_kind)kmp_realloc
integer(kind=kmp_pointer_kind)
ptr
integer(kind=kmp_size_t_kind)
size

スレッド・ローカル・ヒープからアドレス ptr および size バイトにメモリブロックを再割り当てします。

subroutine kmp_free(ptr)
integer (kind=kmp_pointer_kind)
ptr

スレッド・ローカル・ヒープからアドレス ptr のメモリブロックを解放します。 メモリは、以前に kmp_mallockmp_calloc、または kmp_realloc に割り当てられている必要があります。