Shared Arrays
SharedArray
stellt ein Array dar, das auf einer einzelnen Maschine über mehrere Prozesse hinweg geteilt wird.
SharedArrays.SharedArray
— TypeSharedArray{T}(dims::NTuple; init=false, pids=Int[])
SharedArray{T,N}(...)
Konstruiere ein SharedArray
eines Bits-Typs T
und der Größe dims
über die Prozesse, die durch pids
angegeben sind - alle müssen sich auf demselben Host befinden. Wenn N
durch den Aufruf von SharedArray{T,N}(dims)
angegeben wird, muss N
der Länge von dims
entsprechen.
Wenn pids
nicht angegeben wird, wird das gemeinsame Array über alle Prozesse auf dem aktuellen Host, einschließlich des Masters, abgebildet. Aber localindices
und indexpids
beziehen sich nur auf Arbeitsprozesse. Dies erleichtert den Code zur Arbeitsverteilung, um Arbeiter für die tatsächliche Berechnung zu verwenden, während der Masterprozess als Treiber fungiert.
Wenn eine init
-Funktion des Typs initfn(S::SharedArray)
angegeben ist, wird sie auf allen teilnehmenden Arbeitern aufgerufen.
Das gemeinsame Array ist gültig, solange eine Referenz auf das SharedArray
-Objekt auf dem Knoten existiert, der die Abbildung erstellt hat.
SharedArray{T}(filename::AbstractString, dims::NTuple, [offset=0]; mode=nothing, init=false, pids=Int[])
SharedArray{T,N}(...)
Konstruiere ein SharedArray
, das durch die Datei filename
unterstützt wird, mit dem Elementtyp T
(muss ein Bits-Typ sein) und der Größe dims
, über die Prozesse, die durch pids
angegeben sind - alle müssen sich auf demselben Host befinden. Diese Datei wird in den Host-Speicher mmapped, mit den folgenden Konsequenzen:
- Die Array-Daten müssen im binären Format dargestellt werden (z. B. kann ein ASCII-Format wie CSV nicht unterstützt werden)
- Alle Änderungen, die Sie an den Array-Werten vornehmen (z. B.
A[3] = 0
), ändern auch die Werte auf der Festplatte
Wenn pids
nicht angegeben wird, wird das gemeinsame Array über alle Prozesse auf dem aktuellen Host, einschließlich des Masters, abgebildet. Aber localindices
und indexpids
beziehen sich nur auf Arbeitsprozesse. Dies erleichtert den Code zur Arbeitsverteilung, um Arbeiter für die tatsächliche Berechnung zu verwenden, während der Masterprozess als Treiber fungiert.
mode
muss eines von "r"
, "r+"
, "w+"
oder "a+"
sein und standardmäßig auf "r+"
gesetzt werden, wenn die durch filename
angegebene Datei bereits existiert, oder auf "w+"
, wenn nicht. Wenn eine init
-Funktion des Typs initfn(S::SharedArray)
angegeben ist, wird sie auf allen teilnehmenden Arbeitern aufgerufen. Sie können keine init
-Funktion angeben, wenn die Datei nicht beschreibbar ist.
offset
ermöglicht es Ihnen, die angegebene Anzahl von Bytes am Anfang der Datei zu überspringen.
SharedArrays.SharedVector
— TypeSharedVector
Ein eindimensionales SharedArray
.
SharedArrays.SharedMatrix
— TypeSharedMatrix
Ein zweidimensionales SharedArray
.
Distributed.procs
— Methodprocs(S::SharedArray)
Holen Sie sich den Vektor der Prozesse, die das gemeinsame Array abbilden.
SharedArrays.sdata
— Functionsdata(S::SharedArray)
Gibt das tatsächliche Array
-Objekt zurück, das S
zugrunde liegt.
SharedArrays.indexpids
— Functionindexpids(S::SharedArray)
Gibt den aktuellen Index des Arbeiters in der Liste der Arbeiter zurück, die das SharedArray
zuordnen (d.h. in derselben Liste, die von procs(S)
zurückgegeben wird), oder 0, wenn das SharedArray
nicht lokal zugeordnet ist.
SharedArrays.localindices
— Functionlocalindices(S::SharedArray)
Gibt einen Bereich zurück, der die "Standard"-Indizes beschreibt, die vom aktuellen Prozess verarbeitet werden sollen. Dieser Bereich sollte im Sinne der linearen Indizierung interpretiert werden, d.h. als ein Teilbereich von 1:length(S)
. In Mehrprozesskontexten gibt er einen leeren Bereich im übergeordneten Prozess (oder in jedem Prozess, für den indexpids
0 zurückgibt) zurück.
Es ist wichtig zu betonen, dass localindices
rein aus Bequemlichkeit existiert und Sie die Arbeit im Array unter den Arbeitern nach Belieben aufteilen können. Für ein SharedArray
sollten alle Indizes für jeden Arbeitsprozess gleich schnell sein.