coarrayとco-indexed arrayを使用した並列プログラミング#
co_broadcast#
名前#
co_broadcast(3) - [集合演算] 現在のイメージセット内のすべてのイメージに値をコピーします
概要#
call co_broadcast(a, source_image [,stat] [,errmsg] )
特徴#
説明#
co_broadcast(3)は、イメージインデックスsource_imageを持つイメージ上の引数aの値を、現在のチームのすべてのイメージにコピーします。aは、組み込み代入と同様に定義されます。実行が成功し、statが存在する場合、値ゼロが割り当てられます。実行が失敗した場合、statにはゼロ以外の値が割り当てられ、存在する場合、errmsgには発生したエラーを説明する値が割り当てられます。
オプション#
- a
intent(inout)引数; 現在のチームのすべてのイメージで同じ動的な型と型パラメータを持つ必要があります。配列の場合、すべてのイメージで同じ形状を持つ必要があります。
- source_image
スカラー整数式。すべてのイメージで同じ値を持ち、現在のチームのイメージを参照する必要があります。
- stat
(オプション) スカラー整数変数
- errmsg
(オプション) スカラー文字変数
例#
サンプルプログラム
program demo_co_broadcast
implicit none
integer :: val(3)
if (this_image() == 1) then
val = [1, 5, 3]
endif
call co_broadcast (val, source_image=1)
print *, this_image(), ":", val
end program demo_co_broadcast
標準#
Fortran xx
関連事項#
co_max(3)、co_min(3)、co_sum(3)、co_reduce(3)
fortran-lang組み込み関数の説明
co_lbound#
名前#
co_lbound(3) - [集合演算] 配列の下位次元境界
概要#
result = co_lbound( coarray [,dim] [,kind] )
特徴#
説明#
co_lbound(3)は、coarrayの下限、またはdim次元に沿った単一下位次元境界を返します。
オプション#
- array
任意の型のcoarrayである必要があります。
- dim
(オプション) スカラー整数である必要があります。
- kind
(オプション) 結果のkindパラメータを示す整数初期化式。
結果#
戻り値は整数型であり、種類はkindです。kindがない場合、戻り値はデフォルトの整数型です。dimがない場合、結果はcoarrayの下位次元境界の配列です。dimがある場合、結果はその次元に沿った配列の下位次元境界に対応するスカラーです。
標準#
Fortran 2008
関連事項#
fortran-lang組み込み関数の説明
co_max#
名前#
co_max(3) - [集合演算] 現在のイメージセット上の最大値
概要#
call co_max(a, result_image [,stat] [,errmsg] )
特徴#
説明#
co_max(3)は、現在のチームのすべてのイメージ上のaの要素ごとの最大値を決定します。result_imageが存在する場合、最大値は指定されたイメージでのみaで返され、他のイメージでのaの値は未定義になります。result_imageがない場合、値はすべてのイメージで返されます。実行が成功し、statが存在する場合、値ゼロが割り当てられます。実行が失敗した場合、statにはゼロ以外の値が割り当てられ、存在する場合、errmsgには発生したエラーを説明する値が割り当てられます。
オプション#
- a
チームのすべてのイメージで同じ型と型パラメータを持つ整数、実数、または文字変数である必要があります。
- result_image
(オプション) スカラー整数式。存在する場合、すべてのイメージで同じ値を持ち、現在のチームのイメージを参照する必要があります。
- stat
(オプション) スカラー整数変数
- errmsg
(オプション) スカラー文字変数
例#
サンプルプログラム
program demo_co_max
implicit none
integer :: val
val = this_image()
call co_max(val, result_image=1)
if (this_image() == 1) then
write(*,*) "Maximal value", val ! prints num_images()
endif
end program demo_co_max
結果
Maximal value 2
標準#
TS 18508
関連事項#
co_min(3)、co_sum(3)、co_reduce(3)、co_broadcast(3)
fortran-lang組み込み関数の説明
co_min#
名前#
co_min(3) - [集合演算] 現在のイメージセット上の最小値
概要#
call co_min(a, result_image [,stat] [,errmsg] )
特徴#
説明#
co_min(3)は、現在のチームのすべてのイメージ上のaの要素ごとの最小値を決定します。result_imageが存在する場合、最小値は指定されたイメージでのみaで返され、他のイメージでのaの値は未定義になります。result_imageがない場合、値はすべてのイメージで返されます。実行が成功し、statが存在する場合、値ゼロが割り当てられます。実行が失敗した場合、statにはゼロ以外の値が割り当てられ、存在する場合、errmsgには発生したエラーを説明する値が割り当てられます。
オプション#
- a
チームのすべてのイメージで同じ型と型パラメータを持つ整数、実数、または文字変数である必要があります。
- result_image
(オプション) スカラー整数式。存在する場合、すべてのイメージで同じ値を持ち、現在のチームのイメージを参照する必要があります。
- stat
(オプション) スカラー整数変数
- errmsg
(オプション) スカラー文字変数
例#
サンプルプログラム
program demo_co_min
implicit none
integer :: val
val = this_image()
call co_min(val, result_image=1)
if (this_image() == 1) then
write(*,*) "Minimal value", val ! prints 1
endif
end program demo_co_min
標準#
TS 18508
関連事項#
co_max(3)、co_sum(3)、co_reduce(3)、co_broadcast(3)
fortran-lang組み込み関数の説明
co_reduce#
名前#
co_reduce(3) - [集合演算] 現在のイメージセット上の値の縮約
概要#
call co_reduce(a, operation, result_image [,stat] [,errmsg] )
特徴#
説明#
co_reduce(3) は、現在のチームのすべてのイメージにおける a の値の要素ごとのリダクションを決定します。operation として渡される純粋関数は、異なるイメージの a の値、またはそのようなリダクションの結果の値を引数として渡すことで、a の値をペアごとにリダクションするために使用されます。a が配列の場合、リダクションは要素ごとに行われます。result_image が存在する場合、結果の値は指定されたイメージの a にのみ返され、他のイメージの a の値は未定義になります。result_image が存在しない場合は、すべてのイメージで値が返されます。実行が成功した場合で stat が存在する場合は、値 0 が割り当てられます。実行が失敗した場合、stat には 0 以外の値が割り当てられ、存在する場合は、errmsg に発生したエラーを説明する値が割り当てられます。
オプション#
- a
は、intent(inout) 引数であり、非多相でなければなりません。割り当て可能な場合は割り当てられている必要があり、ポインタの場合は関連付けられている必要があります。a は、チームのすべてのイメージで同じ型と型パラメータを持つ必要があります。配列の場合、すべてのイメージで同じ形状を持つ必要があります。
- operation
2つのスカラー非割り当て可能引数を持つ純粋関数で、非多相であり、a と同じ型と型パラメータを持つ必要があります。関数は、a と同じ型と型パラメータを持つ非割り当て可能スカラーを返す必要があります。関数は、すべてのイメージで同じであり、引数に関して数学的に可換および結合的である必要があります。OPERATION は、組み込み関数でない限り、要素的であってはならないことに注意してください。
- result_image
(オプション) スカラー整数式。存在する場合、すべてのイメージで同じ値を持ち、現在のチームのイメージを参照する必要があります。
- stat
(オプション) スカラー整数変数
- errmsg
(オプション) スカラー文字変数
例#
サンプルプログラム
program demo_co_reduce
implicit none
integer :: val
val = this_image()
call co_reduce(val, myprod, 1)
if (this_image() == 1) then
write(*,*) "Product value", val ! prints num_images() factorial
endif
contains
pure function myprod(a, b)
integer, value :: a, b
integer :: myprod
myprod = a * b
end function myprod
end program demo_co_reduce
注意#
ルール上は原則として組み込み関数を許可していますが、標準の組み込み関数で、同じ型の2つの引数を取り、その型を結果として返す特定の関数という基準を満たすものはありません。
標準#
TS 18508
参照#
co_min(3), co_max(3), co_sum(3), co_broadcast(3)
fortran-lang組み込み関数の説明
co_sum#
名前#
co_sum(3) - [集合演算] 現在のイメージセットでの値の合計
概要#
call co_sum(a, result_image [,stat] [,errmsg] )
特性#
説明#
co_sum(3) は、現在のチームのすべてのイメージにおける a の各要素の値を合計します。
result_image が存在する場合、合計された値は、指定されたイメージの a にのみ返され、他のイメージの a の値は未定義になります。
result_image が存在しない場合は、すべてのイメージで値が返されます。実行が成功した場合で stat が存在する場合は、値 0 が割り当てられます。実行が失敗した場合、stat には 0 以外の値が割り当てられ、存在する場合は、errmsg に発生したエラーを説明する値が割り当てられます。
オプション#
- a
は、整数、実数、または複素数の変数であり、チームのすべてのイメージで同じ型と型パラメータを持つ必要があります。
- result_image
(オプション) スカラー整数式。存在する場合、すべてのイメージで同じ値を持ち、現在のチームのイメージを参照する必要があります。
- stat
(オプション) スカラー整数変数
- errmsg
(オプション) スカラー文字変数
例#
サンプルプログラム
program demo_co_sum
implicit none
integer :: val
val = this_image()
call co_sum(val, result_image=1)
if (this_image() == 1) then
! prints (n**2 + n)/2, with n = num_images()
write(*,*) "The sum is ", val
endif
end program demo_co_sum
結果
The sum is 1
標準#
TS 18508
参照#
co_max(3), co_min(3), co_reduce(3), co_broadcast(3)
fortran-lang組み込み関数の説明
co_ubound#
名前#
co_ubound(3) - [集合演算] 配列の上限コ次元境界
概要#
result = co_ubound(coarray [,dim] [,kind] )
特性#
説明#
co_ubound(3) は、コ配列の上限コ境界、または dim コ次元に沿った単一の上限コ境界を返します。
オプション#
- array
任意の型のcoarrayである必要があります。
- dim
(オプション) スカラー整数である必要があります。
- kind
(オプション) 結果のkindパラメータを示す整数初期化式。
結果#
戻り値は整数型であり、種類はkindです。kindがない場合、戻り値はデフォルトの整数型です。dimがない場合、結果はcoarrayの下位次元境界の配列です。dimがある場合、結果はその次元に沿った配列の下位次元境界に対応するスカラーです。
標準#
Fortran 2008
参照#
co_lbound(3), lbound(3), ubound(3)
fortran-lang組み込み関数の説明
event_query#
名前#
event_query(3) - [集合演算] コ配列イベントが発生したかどうかを照会します
概要#
call event_query(event, count [,stat] )
特性#
説明#
event_query(3) は、event 変数にポストされ、event_wait を呼び出してまだ削除されていないイベントの数を count に割り当てます。stat が存在し、呼び出しが成功した場合、値 0 が割り当てられます。存在し、呼び出しが失敗した場合は、正の値が割り当てられ、count には値 -1 が割り当てられます。
オプション#
- event
(intent(in)) iso_fortran_env で定義された event_type 型のスカラー。コインデックス化してはなりません。
- count
(intent(out)) デフォルトの整数以上の精度を持つスカラー整数。
- stat
(オプション) スカラーのデフォルト種類の整数変数。
例#
サンプルプログラム
program demo_event_query
use iso_fortran_env
implicit none
type(event_type) :: event_value_has_been_set[*]
integer :: cnt
if (this_image() == 1) then
call event_query(event_value_has_been_set, cnt)
if (cnt > 0) write(*,*) "Value has been set"
elseif (this_image() == 2) then
event post(event_value_has_been_set[1])
endif
end program demo_event_query
標準#
TS 18508
参照#
fortran-lang組み込み関数の説明
image_index#
名前#
image_index(3) - [集合演算] イメージインデックスへのコ添え字の変換
概要#
result = image_index(coarray, sub)
特性#
説明#
image_index(3) は、コ添え字に属するイメージインデックスを返します。
オプション#
- coarray
任意の型のコ配列。
- sub
coarray のコランクに等しいサイズのデフォルトの整数ランク1の配列。
結果#
コ添え字に対応するイメージインデックスの値を持つスカラーデフォルト整数。無効なコ添え字の場合、結果はゼロです。
例#
サンプルプログラム
program demo image_index
implicit none
integer :: array[2,-1:4,8,*]
! Writes 28 (or 0 if there are fewer than 28 images)
write (*,*) image_index(array, [2,0,3,1])
end demo image_index
標準#
Fortran 2008
参照#
fortran-lang組み込み関数の説明
num_images#
名前#
num_images(3) - [集合演算] イメージの数
概要#
result = num_images([team|team_number])
integer function num_images (team)
type(TEAM_TYPE),intent(in),optional :: team
integer(kind=KIND),intent(in),optional :: team_number
特性#
team および team_number の使用は相互に排他的です。
team は、組み込みモジュール ISO_FORTRAN_ENV からの型 TEAM_TYPE のスカラーです。
team_number は整数スカラーです。
結果は、デフォルトの整数スカラーです。
説明#
num_images(3) は、イメージの数を返します。
オプション#
- team
は、組み込みモジュール ISO_FORTRAN_ENV からの型 TEAM_TYPE のスカラーであり、現在のチームまたは祖先チームを識別する値を持つ必要があります。
- team_number
は、初期チームまたは親が現在のチームと同じチームを識別します。
結果#
指定されたチーム、またはチームが指定されていない場合は現在のチーム内のイメージの数。
例#
サンプルプログラム
program demo_num_images
implicit none
integer :: value[*]
real :: p[*]
integer :: i
value = this_image()
sync all
if (this_image() == 1) then
do i = 1, num_images()
write(*,'(2(a,i0))') 'value[', i, '] is ', value[i]
end do
endif
! The following code uses image 1 to read data and
! broadcast it to other images.
if (this_image()==1) then
p=1234.5678
do i = 2, num_images()
p[i] = p
end do
end if
sync all
end program demo_num_images
標準#
Fortran 2008。DISTANCE または FAILED 引数を使用すると、TS 18508
参照#
fortran-lang 組み込み関数の説明 (ライセンス: MIT) @urbanjost
this_image#
名前#
this_image(3) - [集合演算] このイメージのコ添え字インデックス
概要#
result = this_image() | = this_image(distance) | = this_image(coarray,dim)
integer function this_image( distance ,coarray, dim )
type(TYPE(kind=**),optional :: coarray[*]
integer,intent(in),optional :: distance
integer,intent(in),optional :: dim
特性#
** で指定された種類は、その型でサポートされている任意の種類にできます。
coarray は任意の型にできます。dim が存在する場合は必須です。
distance は coarray と一緒に使用することはできません。
dim が存在する場合、coarray が必要です。
説明#
this_image(3) は、このイメージのコ添え字を返します。
オプション#
- distance
負でないスカラーの整数 (coarray と一緒に使用することはできません)。
- coarray
dim が存在する場合は必須)。
- dim
存在する場合、dim は 1 と coarray のコランクの間にある必要があります。
結果#
デフォルトの整数型です。coarray が存在しない場合、スカラ値となります。distance が存在しないか、値が 0 の場合、現在のチームを呼び出したイメージ上のイメージインデックスが返されます。初期チームからの距離が distance 以下の値の場合、呼び出し元のチームから distance の距離にある先祖チーム上のイメージインデックスが返されます。distance が初期チームへの距離よりも大きい場合、初期チームのイメージインデックスが返されます。それ以外の場合で、coarray が存在する場合、dim が存在しなければ、コランク要素を持つランク1の配列が返され、coarray の呼び出しイメージを指定するコスーパースクリプトが含まれます。dim が存在する場合、this_image(coarray) の dim 要素の値を持つスカラが返されます。
例#
サンプルプログラム
program demo_this_image
implicit none
integer :: value[*]
integer :: i
value = this_image()
sync all
if (this_image() == 1) then
do i = 1, num_images()
write(*,'(2(a,i0))') 'value[', i, '] is ', value[i]
end do
endif
end program demo_this_image
結果
value[1] is 1
規格#
Fortran 2008。DISTANCE引数付きは、TS 18508
参照#
fortran-lang組み込み関数の説明
atomic_and#
名前#
atomic_and(3) - [ATOMIC:ビット操作] アトミックなビット単位AND演算
概要#
call atomic_and(atom, value [,stat])
subroutine atomic_and(atom,value,stat)
integer(atomic_int_kind) :: atom[*]
integer(atomic_int_kind),intent(in) :: value
integer,intent(out),intent(out) :: stat
特徴#
atom は、atomic_int_kind 種別を持つ整数型のスカラコ配列またはコインデックス変数です。
value は、atom と同じ型のスカラです。種別が異なる場合、値は atom の種別に変換されます。
stat は、デフォルト種別のスカラ整数変数です。
説明#
atomic_and(3) は、atom の値と value の値との間でビット単位の and 演算を行い、その結果で atom をアトミックに定義します。stat が存在し、呼び出しが成功した場合、値 0 が割り当てられます。存在し、呼び出しが失敗した場合は、正の値が割り当てられます。特に、コインデックスされた atom の場合、リモートイメージが停止した場合、iso_fortran_env の stat_stopped_image の値が割り当てられ、リモートイメージが失敗した場合は、stat_failed_image の値が割り当てられます。
オプション#
- atom
atomic_int_kind 種別を持つ整数型のスカラコ配列またはコインデックス変数。
- value
atom と同じ型のスカラ。種別が異なる場合、値は atom の種別に変換されます。
- stat
(オプション) デフォルト種別のスカラ整数変数。
例#
サンプルプログラム
program demo_atomic_and
use iso_fortran_env
implicit none
integer(atomic_int_kind) :: atom[*]
call atomic_and(atom[1], int(b'10100011101'))
end program demo_atomic_and
規格#
TS 18508
参照#
atomic_fetch_and(3), atomic_define(3), atomic_ref(3), atomic_cas(3), iso_fortran_env(3), atomic_add(3), atomic_or(3), atomic_xor(3)
fortran-lang組み込み関数の説明
atomic_fetch_and#
名前#
atomic_fetch_and(3) - [ATOMIC:ビット操作] 事前フェッチを伴うアトミックなビット単位AND演算
概要#
call atomic_fetch_and(atom, value, old [,stat] )
subroutine atomic_fetch_and(atom, value, old, stat)
特徴#
説明#
atomic_fetch_and(3) は、atom の値を old にアトミックに格納し、atom の値と value の値との間でビット単位の AND 演算を行い、その結果で atom を定義します。stat が存在し、呼び出しが成功した場合、値 0 が割り当てられます。存在し、呼び出しが失敗した場合は、正の値が割り当てられます。特に、コインデックスされた atom の場合、リモートイメージが停止した場合、iso_fortran_env の stat_stopped_image の値が割り当てられ、リモートイメージが失敗した場合は、stat_failed_image の値が割り当てられます。
オプション#
- atom
atomic_int_kind 種別を持つ整数型のスカラコ配列またはコインデックス変数。
- value
atom と同じ型のスカラ。種別が異なる場合、値は atom の種別に変換されます。
- old
atom と同じ型と種別のスカラ。
- stat
(オプション) デフォルト種別のスカラ整数変数。
例#
サンプルプログラム
program demo_atomic_fetch_and
use iso_fortran_env
implicit none
integer(atomic_int_kind) :: atom[*], old
call atomic_fetch_and (atom[1], int(b'10100011101'), old)
end program demo_atomic_fetch_and
規格#
TS 18508
参照#
atomic_define(3), atomic_and(3), iso_fortran_env(3),
atomic_fetch_add(3), atomic_fetch_or(3),
fortran-lang組み込み関数の説明
atomic_fetch_or#
名前#
atomic_fetch_or(3) - [ATOMIC:ビット操作] 事前フェッチを伴うアトミックなビット単位OR演算
概要#
call atomic_fetch_or(atom, value, old [,stat] )
subroutine atomic_fetch_or(atom, value, old, stat)
特徴#
説明#
atomic_fetch_or(3) は、atom の値を old にアトミックに格納し、atom の値と value の値との間でビット単位の OR 演算を行い、その結果で atom を定義します。stat が存在し、呼び出しが成功した場合、値 0 が割り当てられます。存在し、呼び出しが失敗した場合は、正の値が割り当てられます。特に、コインデックスされた atom の場合、リモートイメージが停止した場合、iso_fortran_env の stat_stopped_image の値が割り当てられ、リモートイメージが失敗した場合は、stat_failed_image の値が割り当てられます。
オプション#
- atom
atomic_int_kind 種別を持つ整数型のスカラコ配列またはコインデックス変数。
- value
atom と同じ型のスカラ。種別が異なる場合、値は atom の種別に変換されます。
- old
atom と同じ型と種別のスカラ。
- stat
(オプション) デフォルト種別のスカラ整数変数。
例#
サンプルプログラム
program demo_atomic_fetch_or
use iso_fortran_env
implicit none
integer(atomic_int_kind) :: atom[*], old
call atomic_fetch_or(atom[1], int(b'10100011101'), old)
end program demo_atomic_fetch_or
規格#
TS 18508
参照#
atomic_define(3), atomic_or(3), iso_fortran_env(3),
atomic_fetch_add(3), atomic_fetch_and(3),
fortran-lang組み込み関数の説明
atomic_fetch_xor#
名前#
atomic_fetch_xor(3) - [ATOMIC:ビット操作] 事前フェッチを伴うアトミックなビット単位XOR演算
概要#
call atomic_fetch_xor (atom, value, old [,stat] )
subroutine atomic_fetch_xor (atom, value, old, stat)
特徴#
説明#
atomic_fetch_xor(3) は、atom の値を old にアトミックに格納し、atom の値と value の値との間でビット単位の xor 演算を行い、その結果で atom を定義します。stat が存在し、呼び出しが成功した場合、値 0 が割り当てられます。存在し、呼び出しが失敗した場合は、正の値が割り当てられます。特に、コインデックスされた atom の場合、リモートイメージが停止した場合、iso_fortran_env の stat_stopped_image の値が割り当てられ、リモートイメージが失敗した場合は、stat_failed_image の値が割り当てられます。
オプション#
- atom
atomic_int_kind 種別を持つ整数型のスカラコ配列またはコインデックス変数。
- value
atom と同じ型のスカラ。種別が異なる場合、値は atom の種別に変換されます。
- old
atom と同じ型と種別のスカラ。
- stat
(オプション) デフォルト種別のスカラ整数変数。
例#
サンプルプログラム
program demo_atomic_fetch_xor
use iso_fortran_env
implicit none
integer(atomic_int_kind) :: atom[*], old
call atomic_fetch_xor (atom[1], int(b'10100011101'), old)
end program demo_atomic_fetch_xor
規格#
TS 18508
参照#
atomic_define(3), atomic_xor(3), iso_fortran_env(3),
atomic_fetch_add(3), atomic_fetch_and(3),
fortran-lang組み込み関数の説明
atomic_or#
名前#
atomic_or(3) - [ATOMIC:ビット操作] アトミックなビット単位OR演算
概要#
call atomic_or(atom, value [,stat] )
subroutine atomic_or(atom,value,stat)
integer(atomic_int_kind) :: atom[*]
integer(atomic_int_kind),intent(in) :: value
integer,intent(out),intent(out) :: stat
特徴#
atom は、atomic_int_kind 種別を持つ整数型のスカラコ配列またはコインデックス変数です。
value は、atom と同じ型のスカラです。種別が異なる場合、値は atom の種別に変換されます。
stat は、デフォルト種別のスカラ整数変数です。
説明#
atomic_or(3) は、atom の値と value の値との間でビット単位の or 演算を行い、その結果で atom をアトミックに定義します。stat が存在し、呼び出しが成功した場合、値 0 が割り当てられます。存在し、呼び出しが失敗した場合は、正の値が割り当てられます。特に、コインデックスされた atom の場合、リモートイメージが停止した場合、iso_fortran_env の stat_stopped_image の値が割り当てられ、リモートイメージが失敗した場合は、stat_failed_image の値が割り当てられます。
オプション#
- atom
atomic_int_kind 種別を持つ整数型のスカラコ配列またはコインデックス変数。
- value
atom と同じ型のスカラ。種別が異なる場合、値は atom の種別に変換されます。
- stat
(オプション) デフォルト種別のスカラ整数変数。
例#
サンプルプログラム
program demo_atomic_or
use iso_fortran_env
implicit none
integer(atomic_int_kind) :: atom[*]
call atomic_or(atom[1], int(b'10100011101'))
end program demo_atomic_or
規格#
TS 18508
参照#
atomic_define(3), atomic_fetch_or(3),
iso_fortran_env(3), atomic_add(3), atomic_or(3),
fortran-lang組み込み関数の説明
atomic_xor#
名前#
atomic_xor(3) - [ATOMIC:ビット操作] アトミックなビット単位OR演算
概要#
call atomic_xor(atom, value [,stat] )
subroutine atomic_xor(atom,value,stat)
integer(atomic_int_kind) :: atom[*]
integer(atomic_int_kind),intent(in) :: value
integer,intent(out),intent(out) :: stat
特徴#
atom は、atomic_int_kind 種別を持つ整数型のスカラコ配列またはコインデックス変数です。
value は、atom と同じ型のスカラです。種別が異なる場合、値は atom の種別に変換されます。
stat は、デフォルト種別のスカラ整数変数です。
特徴#
説明#
atomic_xor(3) は、atom の値と value の値のビット単位の xor を計算し、その結果で atom をアトミックに定義します。stat が存在し、呼び出しが成功した場合、0 が代入されます。存在し、呼び出しが失敗した場合は、正の値が代入されます。特に、コインデックスされた atom については、リモートイメージが停止している場合は iso_fortran_env の stat_stopped_image の値が、リモートイメージが失敗した場合は stat_failed_image の値が代入されます。
オプション#
- atom
atomic_int_kind 種別を持つ整数型のスカラコ配列またはコインデックス変数。
- value
atom と同じ型のスカラ。種別が異なる場合、値は atom の種別に変換されます。
- stat
(オプション) デフォルト種別のスカラ整数変数。
例#
サンプルプログラム
program demo_atomic_xor
use iso_fortran_env
implicit none
integer(atomic_int_kind) :: atom[*]
call atomic_xor(atom[1], int(b'10100011101'))
end program demo_atomic_xor
規格#
TS 18508
関連項目#
atomic_define(3), atomic_fetch_xor(3), iso_fortran_env(3), atomic_add(3), atomic_or(3), atomic_xor(3)
fortran-lang組み込み関数の説明
atomic_add#
名前#
atomic_add(3) - [ATOMIC] アトミックな加算操作
概要#
call atomic_add (atom, value [,stat] )
subroutine atomic_add(atom,value,stat)
integer(atomic_int_kind) :: atom[*]
integer(atomic_int_kind),intent(in) :: value
integer,intent(out),intent(out) :: stat
特性#
atom は、atomic_int_kind 種別を持つ整数型のスカラコ配列またはコインデックス変数です。
value は、atom と同じ型のスカラです。種別が異なる場合、値は atom の種別に変換されます。
stat は、デフォルト種別のスカラ整数変数です。
説明#
atomic_add(3) は、変数 atom に VAR の値をアトミックに加算します。stat が存在し、呼び出しが成功した場合、0 が代入されます。存在し、呼び出しが失敗した場合は、正の値が代入されます。特に、コインデックスされた ATOM については、リモートイメージが停止している場合は iso_fortran_env の STAT_STOPPED_IMAGE の値が、リモートイメージが失敗した場合は STAT_FAILED_IMAGE の値が代入されます。
オプション#
- atom
atomic_int_kind 種別を持つ整数型のスカラコ配列またはコインデックス変数。
- value
atom と同じ型のスカラ。種別が異なる場合、値は atom の種別に変換されます。
- stat
(オプション) デフォルト種別のスカラ整数変数。
例#
サンプルプログラム
program demo_atomic_add
use iso_fortran_env
implicit none
integer(atomic_int_kind) :: atom[*]
call atomic_add (atom[1], this_image())
end program demo_atomic_add
規格#
TS 18508
関連項目#
atomic_define(3), atomic_fetch_add(3), atomic_and(3), atomic_or(3), atomic_xor(3) iso_fortran_env(3),
fortran-lang組み込み関数の説明
atomic_cas#
名前#
atomic_cas(3) - [ATOMIC] アトミックな比較とスワップ
概要#
call atomic_cas (atom, old, compare, new [,stat] )
subroutine atomic_cas (atom, old, compare, new, stat)
特性#
説明#
atomic_cas(3) は、変数 atom と compare の値を比較します。もし値が同じであれば、atom は new の値に設定されます。さらに、old は比較に使用された atom の値に設定されます。stat が存在し、呼び出しが成功した場合、0 が代入されます。存在し、呼び出しが失敗した場合は、正の値が代入されます。特に、コインデックスされた atom については、リモートイメージが停止している場合は iso_fortran_env の stat_stopped_image の値が、リモートイメージが失敗した場合は stat_failed_image の値が代入されます。
オプション#
- atom
整数型で atomic_int_kind の種類を持つか、論理型で atomic_logical_kind の種類を持つ、スカラコ配列またはコインデックス付き変数。
- old
atom と同じ型と種別のスカラ。
- compare
atom と同じ型と種類のスカラ変数。
- new
atom と同じ型のスカラ変数。種類が異なる場合は、値は atom の種類に変換されます。
- stat
(オプション) デフォルト種別のスカラ整数変数。
例#
サンプルプログラム
program demo_atomic_cas
use iso_fortran_env
implicit none
logical(atomic_logical_kind) :: atom[*], prev
call atomic_cas(atom[1], prev, .false., .true.)
end program demo_atomic_cas
規格#
TS 18508
関連項目#
atomic_define(3), atomic_ref(3), iso_fortran_env(3)
fortran-lang組み込み関数の説明
atomic_define#
名前#
atomic_define(3) - [ATOMIC] アトミックな変数設定
概要#
call atomic_define (atom, value [,stat] )
subroutine atomic_define(atom, value, stat)
TYPE(kind=atomic_KIND_kind) :: atom[*]
TYPE(kind=KIND) :: value
integer,intent(out),optional :: stat
特性#
- atom
整数型で atomic_int_kind の種類を持つか、論理型で atomic_logical_kind の種類を持つ、スカラコ配列またはコインデックス付き変数。
- value
atom と同じ型のスカラ。種別が異なる場合、値は atom の種別に変換されます。
- stat
(オプション) デフォルト種別のスカラ整数変数。
説明#
atomic_define(3) は、変数 atom を value の値でアトミックに定義します。
オプション#
- atom
値 value をアトミックに代入するスカラコ配列またはコインデックス付き変数。種類。
- value
atom に代入する値
- stat
stat が存在し、呼び出しが成功した場合、0 が代入されます。存在し、呼び出しが失敗した場合は、正の値が代入されます。特に、コインデックスされた atom については、リモートイメージが停止している場合は iso_fortran_env の stat_stopped_image の値が、リモートイメージが失敗した場合は stat_failed_image の値が代入されます。
例#
サンプルプログラム
program demo_atomic_define
use iso_fortran_env
implicit none
integer(atomic_int_kind) :: atom[*]
call atomic_define(atom[1], this_image())
end program demo_atomic_define
規格#
Fortran 2008 ; stat 付き、TS 18508
関連項目#
atomic_ref(3), atomic_cas(3), iso_fortran_env(3), atomic_add(3), atomic_and(3), atomic_or(3), atomic_xor(3)
fortran-lang組み込み関数の説明
atomic_fetch_add#
名前#
atomic_fetch_add(3) - [ATOMIC] 事前フェッチ付きアトミック加算操作
概要#
call atomic_fetch_add(atom, value, old [,stat] )
subroutine atomic_fetch_add(atom, value, old, stat)
特性#
説明#
atomic_fetch_add(3) は、atom の値を old にアトミックに格納し、変数 atom に var の値を加算します。stat が存在し、呼び出しが成功した場合、0 が代入されます。存在し、呼び出しが失敗した場合は、正の値が代入されます。特に、コインデックスされた atom については、リモートイメージが停止している場合は iso_fortran_env の stat_stopped_image の値が、リモートイメージが失敗した場合は stat_failed_image の値が代入されます。
オプション#
- atom
整数型で atomic_int_kind の種類を持つか、論理型で atomic_logical_kind の種類を持つ、スカラコ配列またはコインデックス付き変数。
- value
atom と同じ型のスカラ。種別が異なる場合、値は atom の種別に変換されます。
- old
atom と同じ型と種別のスカラ。
- stat
(オプション) デフォルト種別のスカラ整数変数。
例#
サンプルプログラム
program demo_atomic_fetch_add
use iso_fortran_env
implicit none
integer(atomic_int_kind) :: atom[*], old
call atomic_add(atom[1], this_image(), old)
end program demo_atomic_fetch_add
規格#
TS 18508
関連項目#
atomic_define(3), atomic_add(3), iso_fortran_env(3),
atomic_fetch_and(3), atomic_fetch_or(3),
fortran-lang組み込み関数の説明
atomic_ref#
名前#
atomic_ref(3) - [ATOMIC] アトミックに変数の値を取得する
概要#
call atomic_ref(value, atom [,stat] )
subroutine atomic_ref(value,atom,stat)
integer(atomic_int_kind),intent(in) :: value
integer(atomic_int_kind) :: atom[*]
integer,intent(out),intent(out) :: stat
特性#
atom は、整数型で atomic_int_kind の種類を持つか、論理型で atomic_logical_kind の種類を持つ、スカラコ配列またはコインデックス付き変数です。
value は、atom と同じ型のスカラです。種別が異なる場合、値は atom の種別に変換されます。
stat は、デフォルト種別のスカラ整数変数です。
説明#
atomic_ref(3) は、変数 atom の値をアトミックに value に代入します。stat が存在し、呼び出しが成功した場合、0 が代入されます。存在し、呼び出しが失敗した場合は、正の値が代入されます。特に、コインデックスされた atom については、リモートイメージが停止している場合は iso_fortran_env の stat_stopped_image の値が、リモートイメージが失敗した場合は stat_failed_image の値が代入されます。
オプション#
- value
atom と同じ型のスカラ。種別が異なる場合、値は atom の種別に変換されます。
- atom
整数型で atomic_int_kind の種類を持つか、論理型で atomic_logical_kind の種類を持つ、スカラコ配列またはコインデックス付き変数。
- stat
(オプション) デフォルト種別のスカラ整数変数。
例#
サンプルプログラム
program demo_atomic_ref
use iso_fortran_env
implicit none
logical(atomic_logical_kind) :: atom[*]
logical :: val
call atomic_ref( val, atom[1] )
if (val) then
print *, "Obtained"
endif
end program demo_atomic_ref
規格#
Fortran 2008 ; STAT 付き、TS 18508
関連項目#
atomic_define(3), atomic_cas(3), iso_fortran_env(3),
atomic_fetch_add(3), atomic_fetch_and(3),
atomic_fetch_or(3), atomic_fetch_xor(3)
fortran-lang組み込み関数の説明