SharedArrays
SharedArrays.SharedArray
── 型
SharedArray{T}(dims::NTuple; init=false, pids=Int[])
SharedArray{T,N}(...)
ビット型 T
の要素を持つサイズ dims
の共有配列を構築します。pids
は構築される共有配列を共有するプロセスの集合を表し、この集合に含まれるプロセスは同じホスト上にある必要があります。SharedArray{T,N}(dims)
と N
が指定されるなら、N
は dims
の長さと一致しなければなりません。
pids
が指定されないと、共有配列は現在のホスト上の全てのプロセス (マスター含む) にマップされます。ただし localindices
と indexpids
で「マップしているプロセス」とみなされるのはワーカープロセスだけです。そのため、これらの関数を使うと、マスタープロセスをドライバとして使って実際の計算をワーカーで行わせる分散コードを簡単に書けるようになります。
initfn(S::SharedArray)
型の関数 init
が指定されると、配列を共有するワーカー全てで init
が呼び出されます。
返り値の共有配列は、マッピングを作成したノードで SharedArray
オブジェクトへの参照が存在する間だけ有効になります。
SharedArray{T}(filename::AbstractString,
dims::NTuple,
[offset=0];
mode=nothing,
init=false,
pids=Int[])
SharedArray{T,N}(...)
ファイル filename
を内部で利用する SharedArray
を構築します。構築される共有配列の要素型はビット型 T
で、サイズは dims
です。pids
は構築される共有配列を共有するプロセスの集合を表し、この集合に含まれるプロセスは同じホスト上にある必要があります。このファイルはホストのメモリに mmap されるので、次の点に注意が必要です:
-
配列のデータはバイナリフォーマットでなければなりません (CSV のような ASCII フォーマットはサポートされません)。
-
配列の値を変更 (例えば
A[3] = 0
) すると、ディスク上の値も変更されます。
pids
が指定されないと、共有配列は現在のホスト上の全てのプロセス (マスター含む) にマップされます。ただし localindices
と indexpids
で「マップしているプロセス」とみなされるのはワーカープロセスだけです。そのためこれらの関数を使うと、マスタープロセスをドライバとして使って実際の計算をワーカーで行わせる分散コードを簡単に書けるようになります。
mode
に指定できるのは "r"
, "r+"
, "w+"
, "a+"
のどれか一つです。デフォルトでは filename
が指定するファイルが存在するなら "r+"
で、存在しないなら "w+"
です。initfn(S::SharedArray)
型の関数 init
が指定されると、配列を共有するワーカー全てで init
が呼び出されます。ファイルに書き込めないときは init
関数を指定できません。
offset
を使うと、ファイルの先頭から指定したバイト数だけ読み飛ばすことができます。
SharedArrays.SharedVector
── 型
SharedArrays.SharedMatrix
── 型
Distributed.procs
── メソッド
SharedArrays.sdata
── 関数
SharedArrays.indexpids
── 関数
SharedArrays.localindices
── 関数
localindices(S::SharedArray)
現在のプロセスが処理する "デフォルト" の添え字を表す区間を返します。この区間は線形添え字として、つまり 1:length(S)
の部分区間として解釈されるべきです。マルチプロセス環境では、親プロセス (および indexpids
が 0
を返す任意のプロセス) で呼び出すと空の区間が返ります。
localindices
は利便性のためだけに存在しており、ワーカーが共有配列に行う処理はどのように分割しても構わないことは強調に値します。SharedArray
に関して言えば、全ての添え字はどのワーカープロセスに対しても同じ速度を持つはずです。