と私は、このコード(プリミティブ熱伝達を)持っている:私は1つ上で実行しても遅く順次実行したときにジュリア著しく遅い@parallel
function heat(first, second, m)
@sync @parallel for d = 2:m - 1
for c = 2:m - 1
@inbounds second[c,d] = (first[c,d] + first[c+1, d] + first[c-1, d] + first[c, d+1] + first[c, d-1])/5.0;
end
end
end
m = parse(Int,ARGS[1]) #size of matrix
firstm = SharedArray(Float64, (m,m))
secondm = SharedArray(Float64, (m,m))
for c = 1:m
for d = 1:m
if c == m || d == 1
firstm[c,d] = 100.0
secondm[c,d] = 100.0
else
firstm[c,d] = 0.0
secondm[c,d] = 0.0
end
end
end
@time for i = 0:opak
heat(firstm, secondm, m)
firstm, secondm = secondm, firstm
end
このコードは、良い時間を与えるが、私はそれ@parallel追加するとき糸。なぜこれが起こっているのか説明が必要なだけですか?熱機能のアルゴリズムを変更しない場合にのみコーディングしてください。
は私が共有配列の異なる要素を読んでパラレル更新が/実際に動作することを確認していませんよ。 –
は 'SharedArray'における各参加プロセスのみのアレイのローカルインデックスに動作するかどうか、それはOK動作するはず@RezaAfzalan。 OPは、並列計算ドキュメントから[移流例](http://docs.julialang.org/en/latest/manual/parallel-computing/#id2)を見ていますか?私はそれが非常に有用であることが分かった'localindices'で区切られた境界に注意してください。 –
並列コンピューティングとは関係ありませんが、早期に作成すると便利です。Juliaでは、 'firstm'と' secondm'を行ではなく列で埋め込む方が効率的です。外側ループに 'd'インデックスを入れ、内側ループに' c'変数を入れてみてください。 –