6

私はJuliaで配列操作を最適化しようとしていましたが、ときどき私の行列でかなり大きなエラーが発生していることに気付きました。 JuliaのSharedArrayの同じインデックスに同時に書き込む可能性があることに気付きました。私はJuliaがそれを安全に処理できるかどうか疑問に思っていました。そうでない場合は、どうすれば対応できますか?ここで共有アレイはJuliaで同時書き込みを安全に処理できますか?

for a list of arbitrary x,y indexes in array J 
    j[x,y] += some_value 
end 

私の問題の基本的な例であるジュリアはCのように、データを上書きする可能性が存在しますが、このケースを処理するかができます。ジュリアの原子力発電は、これを補償するか?

答えて

4

ロックは高価になる可能性があるため、共有配列には意図的にロックがありません。最も簡単なアプローチは、重複しない作業を異なるプロセスに割り当てることです。しかし、誰かがロックライブラリを書いているのか、それともあなた自身に行かれているのかを調べるかもしれません:https://en.wikipedia.org/wiki/Mutual_exclusion

+0

明らかにJuliaはロックをサポートしています。これは基本パッケージの一部です:https://stackoverflow.com/questions/33778907/how-to-use-lock-in-julia – Skylion

+1

これは本当ですが、ソリューションは複数のコンピュータに分散された作業でも機能するように設計されています。配列の要素ごとに1つのロックが必要な場合は、一般的なソリューションのオーバーヘッド量に不満があり、SharedArrays用に最適化されたものが必要と思われます。 – tholy

+0

この情報があれば、あなたは何を示唆しますか? Julia 0.5がリリースされるまで待つと、より洗練されたソリューションを念頭に置いていない限り、PThreadのサポートを追加してAtomicsを使用できます。理想的には、コードが分散システム上で動作することができればいいが、必要ではない。 – Skylion

関連する問題