6

Quindi stavo cercando di ottimizzare un'operazione di array in Julia, ma ho notato che di tanto in tanto ricevevo un errore piuttosto grande sulla mia matrice. Ho anche notato che esisteva la possibilità di scrivere contemporaneamente allo stesso indice di un SharedArray in Julia. Mi stavo chiedendo se Julia può tranquillamente gestirlo. In caso contrario, come posso essere in grado di gestirlo?Le matrici condivise possono gestire le scritture concorrenti in modo sicuro in Julia?

Ecco un esempio di base del mio problema

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

grado di gestire Julia questo caso o, come C, sarà esistono la possibilità di sovrascrivere i dati. Le loro operazioni atomiche a Julia sono compensate da questo?

risposta

4

Gli array condivisi deliberatamente non hanno alcun blocco, poiché il blocco può essere costoso. L'approccio più semplice consiste nell'assegnare il lavoro non sovrapposto a diversi processi. Tuttavia, potresti cercare se qualcuno ha scritto una libreria di blocco o aver provato tu stesso: https://en.wikipedia.org/wiki/Mutual_exclusion

+0

A quanto pare Julia ha il supporto per il blocco. Fa parte del pacchetto base: https://stackoverflow.com/questions/33778907/how-to-use-lock-in-julia. – Skylion

+1

È vero, anche se tieni a mente che la soluzione è progettata per funzionare anche per il lavoro distribuito su più computer. Se si desidera un blocco per elemento dell'array, ho il sospetto che non sarete soddisfatti della quantità di costi generali della soluzione generale e desidereremo qualcosa di ottimizzato per SharedArrays. – tholy

+0

Data questa informazione, cosa suggeriresti allora? Suppongo che se aspetto che venga rilasciato Julia 0.5, possiamo aggiungere supporto per PThread e usare Atomics a meno che non abbia in mente una soluzione più elegante? Idealmente, sarebbe bello se il codice potesse girare su un sistema distribuito, ma non una necessità. – Skylion