6

Also ich habe versucht, eine Array-Operation in Julia zu optimieren, aber bemerkte, dass ich gelegentlich einen ziemlich großen Fehler auf meiner Matrix bekam. Ich bemerkte auch, dass es die Möglichkeit gab, gleichzeitig in den gleichen Index eines SharedArray in Julia zu schreiben. Ich habe mich gefragt, ob Julia sicher damit umgehen kann. Wenn nicht, wie kann ich damit umgehen?Können Shared-Arrays in Julia gleichberechtigte Schreibvorgänge sicher verarbeiten?

Hier ist ein einfaches Beispiel meiner Ausgabe

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

Kann Julia diesen Fall oder handhaben, wie C, wird es existiert die Möglichkeit, die Daten zu überschreiben. Sind ihre Atomoperationen in Julia dafür zu kompensieren?

Antwort

4

Gemeinsam genutzte Arrays haben absichtlich keine Verriegelung, da die Verriegelung teuer sein kann. Der einfachste Ansatz besteht darin, nicht überlappende Arbeit verschiedenen Prozessen zuzuordnen. Sie könnten jedoch suchen, um zu sehen, ob jemand eine Sperrbibliothek geschrieben hat, oder selbst daran gehen: https://en.wikipedia.org/wiki/Mutual_exclusion

+0

Anscheinend hat Julia Unterstützung zum Sperren. Es ist Teil des Basispakets: https://stackoverflow.com/questions/33778907/how-to-use-lock-in-julia. – Skylion

+1

Das ist richtig, aber denken Sie daran, dass die Lösung auch für Arbeiten auf mehreren Computern funktioniert. Wenn Sie eine Sperre pro Element des Arrays möchten, vermute ich, dass Sie mit der Menge an Overhead der allgemeinen Lösung nicht zufrieden sein werden und etwas für SharedArrays optimiertes wollen. – tholy

+0

Angesichts dieser Informationen, was würden Sie dann vorschlagen? Ich nehme an, wenn ich warte, bis Julia 0.5 veröffentlicht wird, können wir Unterstützung für PThread hinzufügen und Atomics verwenden, wenn Sie keine elegantere Lösung im Sinn haben? Idealerweise wäre es schön, wenn der Code auf einem verteilten System laufen könnte, aber nicht notwendig. – Skylion