2017-05-08 2 views
3

Ich bin interessiert an der Verteilung eines MxN Integer-Array über p Worker. Gibt es eine Möglichkeit anzugeben, welche Dimension verteilt wird? Insbesondere möchte ich die Anzahl der Zeilen M festhalten und über N Spalten verteilen. In meinem Fall M> N (Ich habe eine Term-Dokument-Matrix mit Vokabular der Größe M und Anzahl der Dokumente N).Julia distribute function: Angabe der verteilten Dimension

Standardmäßig scheint Julia über die Dimension zu verteilen, die die größte Größe hat, was für meine Anwendung nicht funktioniert (ich möchte die Dokumente und nicht das Vokabular verteilen). Gibt es eine Möglichkeit zu steuern, welche Dimension verteilt wird?

Antwort

1

SharedArray Konstruktor hat einen pids optionalen Parameter, der Elemente Prozessen zuordnet (siehe documentation).

So kann eine MxN-Matrix mit dem folgenden Code initialisiert werden:

# a helper function which might be useful in other contexts 
function balancedfill(v,n,b) 
    d,r = divrem(n,b) 
    return v[[repeat(1:r,inner=d+1);repeat(r+1:b,inner=d)]] 
end 

# N,M = size(mat) 
pidvec = repeat(balancedfill(1:nprocs(),N,nprocs()),inner=M) 

sharedmat = SharedArray{Float64}((N,M); pids=pidvec) 

Dies schafft einen Float64 Shared-Array, mit Spalten zwischen Prozessen ausgeglichen. Float64 kann durch den benötigten Elementtyp ersetzt werden. Mit einem kleinen Wechsel (inner mit outer und N mit M in pidvec Erstellung) kann ein zeilenweises verteiltes Array erstellt werden.

Verwandte Themen