6

Próbowałem więc zoptymalizować działanie macierzy w Julii, ale zauważyłem, że od czasu do czasu dostaję dość duży błąd na mojej macierzy. Zauważyłem również, że istniała możliwość równoczesnego pisania do tego samego indeksu SharedArray w Julia. Zastanawiałem się, czy Julia może bezpiecznie sobie z tym poradzić. Jeśli nie, jak mogę go obsłużyć?Czy współdzielone tablice mogą bezpiecznie obsługiwać równoczesne zapisy w Julii?

Oto prosty przykład z mojego problemu

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

Czy Julia obsłużyć ten przypadek lub, jak C, będzie istnieje możliwość nadpisania danych. Czy ich operacje atomowe są w Julii, aby to zrekompensować?

Odpowiedz

4

Współdzielone tablice celowo nie mają blokady, ponieważ blokowanie może być kosztowne. Najłatwiejszym sposobem jest przyporządkowanie nie nakładających się zadań do różnych procesów. Możesz jednak przeszukać, czy ktoś napisał bibliotekę blokującą, lub samemu spróbować: https://en.wikipedia.org/wiki/Mutual_exclusion

+0

Najwyraźniej Julia ma wsparcie dla blokowania. Jest to część pakietu podstawowego: https://stackoverflow.com/questions/33778907/how-to-use-lock-in-julia. – Skylion

+1

To prawda, choć należy pamiętać, że rozwiązanie to zostało zaprojektowane do pracy nawet w przypadku pracy rozproszonej na wielu komputerach. Jeśli chcesz mieć jedną blokadę na element tablicy, podejrzewam, że będziesz niezadowolony z nakładu ogólnego rozwiązania i będziesz chciał czegoś zoptymalizowanego dla SharedArrays. – tholy

+0

Biorąc pod uwagę te informacje, co byś wtedy zasugerował? Przypuszczam, że jeśli poczekam do wydania Julii 0.5 możemy dodać obsługę PThread i używać Atomics, chyba że masz na myśli bardziej eleganckie rozwiązanie? Idealnie byłoby, gdyby kod mógł działać w systemie rozproszonym, ale nie był konieczny. – Skylion

Powiązane problemy