Shared Arrays

SharedArrayは、単一のマシン上で複数のプロセス間で共有される配列を表します。

SharedArrays.SharedArrayType
SharedArray{T}(dims::NTuple; init=false, pids=Int[])
SharedArray{T,N}(...)

ビット型 TSharedArray を、指定されたプロセス pids に対してサイズ dims で構築します - すべてのプロセスは同じホスト上に存在する必要があります。NSharedArray{T,N}(dims) を呼び出すことで指定される場合、Ndims の長さと一致しなければなりません。

pids が指定されていない場合、共有配列は現在のホスト上のすべてのプロセスにマッピングされ、マスターも含まれます。しかし、localindicesindexpids はワーカープロセスのみを参照します。これにより、作業分配コードが実際の計算にワーカーを使用し、マスタープロセスがドライバーとして機能することが容易になります。

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 が指定されていない場合、共有配列は現在のホスト上のすべてのプロセスにマッピングされ、マスターも含まれます。しかし、localindicesindexpids はワーカープロセスのみを参照します。これにより、作業分配コードが実際の計算にワーカーを使用し、マスタープロセスがドライバーとして機能することが容易になります。

mode"r""r+""w+"、または "a+" のいずれかでなければならず、指定されたファイル filename がすでに存在する場合はデフォルトで "r+" になり、存在しない場合は "w+" になります。init 関数の型 initfn(S::SharedArray) が指定されている場合、それはすべての参加ワーカーで呼び出されます。ファイルが書き込み可能でない場合、init 関数を指定することはできません。

offset はファイルの先頭で指定されたバイト数をスキップすることを可能にします。 ```

source
Distributed.procsMethod
procs(S::SharedArray)

共有配列にマッピングされたプロセスのベクトルを取得します。

source
SharedArrays.sdataFunction
sdata(S::SharedArray)

Sを支える実際のArrayオブジェクトを返します。

source
SharedArrays.indexpidsFunction
indexpids(S::SharedArray)

現在のワーカーのインデックスを、SharedArrayをマッピングしているワーカーのリストの中で返します(つまり、procs(S)によって返されるのと同じリスト内で)。SharedArrayがローカルにマッピングされていない場合は0を返します。

source
SharedArrays.localindicesFunction
localindices(S::SharedArray)

現在のプロセスが処理する「デフォルト」のインデックスを記述する範囲を返します。この範囲は線形インデックスの意味で解釈されるべきであり、すなわち 1:length(S) のサブ範囲としてです。マルチプロセスのコンテキストでは、親プロセス(または indexpids が 0 を返す任意のプロセス)では空の範囲を返します。

localindices は純粋に便利さのために存在することを強調する価値があります。配列の作業をワーカー間で任意の方法で分割することができます。SharedArray の場合、すべてのインデックスは各ワーカープロセスにとって同じくらい速いはずです。

source