Shared Arrays
SharedArray
は、単一のマシン上で複数のプロセス間で共有される配列を表します。
SharedArrays.SharedArray
— TypeSharedArray{T}(dims::NTuple; init=false, pids=Int[])
SharedArray{T,N}(...)
ビット型 T
の SharedArray
を、指定されたプロセス pids
に対してサイズ dims
で構築します - すべてのプロセスは同じホスト上に存在する必要があります。N
が SharedArray{T,N}(dims)
を呼び出すことで指定される場合、N
は dims
の長さと一致しなければなりません。
pids
が指定されていない場合、共有配列は現在のホスト上のすべてのプロセスにマッピングされ、マスターも含まれます。しかし、localindices
と indexpids
はワーカープロセスのみを参照します。これにより、作業分配コードが実際の計算にワーカーを使用し、マスタープロセスがドライバーとして機能することが容易になります。
init
関数の型 initfn(S::SharedArray)
が指定されている場合、それはすべての参加ワーカーで呼び出されます。
共有配列は、マッピングを作成したノード上に SharedArray
オブジェクトへの参照が存在する限り有効です。
SharedArray{T}(filename::AbstractString, dims::NTuple, [offset=0]; mode=nothing, init=false, pids=Int[])
SharedArray{T,N}(...)
ファイル filename
にバックアップされた SharedArray
を、要素型 T
(ビット型でなければならない)およびサイズ dims
で、指定されたプロセス pids
に対して構築します - すべてのプロセスは同じホスト上に存在する必要があります。このファイルはホストメモリにマップされ、以下の結果をもたらします:
- 配列データはバイナリ形式で表現される必要があります(例:CSVのようなASCII形式はサポートされません)
- 配列の値に対する変更(例:
A[3] = 0
)は、ディスク上の値も変更します
pids
が指定されていない場合、共有配列は現在のホスト上のすべてのプロセスにマッピングされ、マスターも含まれます。しかし、localindices
と indexpids
はワーカープロセスのみを参照します。これにより、作業分配コードが実際の計算にワーカーを使用し、マスタープロセスがドライバーとして機能することが容易になります。
mode
は "r"
、"r+"
、"w+"
、または "a+"
のいずれかでなければならず、指定されたファイル filename
がすでに存在する場合はデフォルトで "r+"
になり、存在しない場合は "w+"
になります。init
関数の型 initfn(S::SharedArray)
が指定されている場合、それはすべての参加ワーカーで呼び出されます。ファイルが書き込み可能でない場合、init
関数を指定することはできません。
offset
はファイルの先頭で指定されたバイト数をスキップすることを可能にします。 ```
SharedArrays.SharedVector
— TypeSharedVector
一次元の SharedArray
です。
SharedArrays.SharedMatrix
— TypeSharedMatrix
二次元の SharedArray
です。
Distributed.procs
— Methodprocs(S::SharedArray)
共有配列にマッピングされたプロセスのベクトルを取得します。
SharedArrays.sdata
— Functionsdata(S::SharedArray)
S
を支える実際のArray
オブジェクトを返します。
SharedArrays.indexpids
— Functionindexpids(S::SharedArray)
現在のワーカーのインデックスを、SharedArray
をマッピングしているワーカーのリストの中で返します(つまり、procs(S)
によって返されるのと同じリスト内で)。SharedArray
がローカルにマッピングされていない場合は0を返します。
SharedArrays.localindices
— Functionlocalindices(S::SharedArray)
現在のプロセスが処理する「デフォルト」のインデックスを記述する範囲を返します。この範囲は線形インデックスの意味で解釈されるべきであり、すなわち 1:length(S)
のサブ範囲としてです。マルチプロセスのコンテキストでは、親プロセス(または indexpids
が 0 を返す任意のプロセス)では空の範囲を返します。
localindices
は純粋に便利さのために存在することを強調する価値があります。配列の作業をワーカー間で任意の方法で分割することができます。SharedArray
の場合、すべてのインデックスは各ワーカープロセスにとって同じくらい速いはずです。