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