2017-05-08 3 views
3

私は、p個の作業者間でMxN整数配列を配布することに興味があります。配布するディメンションを指定する方法はありますか?特に、行数Mを固定し、N列に分散したい。私の場合、M> N(私は、サイズMと文書数Nの語彙を持つ用語 - 文書行列を持っています)。Julia distribute関数:分散次元を指定する

デフォルトでは、Juliaはアプリケーションでは機能しません(ドキュメントではなくボキャブラリで配布したい)という最大サイズのディメンションに配布するように見えます。どのディメンションが配布されるのかを制御する方法はありますか?

答えて

1

SharedArrayコンストラクタには、要素をプロセスにマップするオプションのパラメータ(documentationを参照)があります。

したがって、M×Nの行列は、次のコードで初期化することができる。

# 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) 

これは、プロセス間でバランス列と、のfloat64共有アレイを作成します。 Float64は、必要な要素型に置き換えることができます。 (innerouterNに変更してMpidvecに作成すると、行単位の分散配列を作成できます。

関連する問題