Shared Arrays
SharedArrayは、単一のマシン上で複数のプロセス間で共有される配列を表します。
SharedArrays.SharedArray — TypeSharedArray{T}(dims::NTuple; init=false, pids=Int[])
SharedArray{T,N}(...)ビット型 T とサイズ dims の SharedArray を、指定されたプロセス pids にわたって構築します - すべて同じホスト上に存在する必要があります。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 の場合、すべてのインデックスは各ワーカープロセスにとって同じくらい速いはずです。