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