Ho una funzione foo
che prende un puntatore alla memoria come argomento ed entrambe le scrive e legge a quel ricordo:Cython memoria condivisa in cython.parallel.prange - blocco
cdef void foo (double *data):
data[some_index_int] = some_value_double
do_something_dependent_on (data)
Sto allocando a data
come so:
cdef int N = some_int
cdef double *data = <double*> malloc (N * sizeof (double))
cdef int i
for i in cython.parallel.prange (N, nogil=True):
foo (data)
readout (data)
La mia domanda è ora: come trattano i diversi thread? La mia ipotesi è che la memoria puntata da data
sarà condivisa da tutti i thread e "simultaneamente" letti o scritti all'interno della funzione foo
. In questo modo tutti i risultati verrebbero compromessi dal momento che non è possibile fare affidamento su un valore dati impostato in precedenza (entro foo
)? La mia ipotesi è corretta o c'è qualche cintura di sicurezza magica implementata nel cython-compilatore?
Grazie mille in anticipo.
** NB: ** Non ho OpenMP su nessuno dei miei sistemi, quindi non posso testarlo facilmente. –