2011-12-07 1 views
8

Questa domanda è strettamente correlata a this one, ma la mia appartiene al mondo CUDA.Diversi thread che scrivono lo stesso valore nella stessa posizione di memoria globale

Ho diversi thread nel mio kernel che potrebbero scrivere lo stesso valore nella stessa posizione di memoria globale. Questo ha funzionato bene, ma temo che potrebbe essere potenzialmente fasullo, e che finora sono stato solo fortunato.

C'è qualche possibilità di danneggiamento della memoria o comportamento imprevisto nel mio flusso di lavoro (a causa di dati razziali, sincronizzazione della cache, ecc.)?

+2

La risposta breve è sì. Ridisegnare il proprio algoritmo o utilizzare gli operatori di accesso alla memoria atomica se si deve assolutamente scrivere più thread sulla stessa memoria. – talonmies

+0

Avrei dovuto fare questa domanda prima di avere i miei algoritmi quasi pronti per andare :(Va bene, è tempo per qualche ripensamento e refactoring! Sarebbe bello sapere il motivo, però. – Auron

+2

check out: http://stackoverflow.com/ questions/5953955/threads-concurrent-write – jkysam

risposta

7

Ho diversi thread nel mio kernel che potrebbero scrivere lo stesso valore nella stessa posizione di memoria globale.

Contrariamente ad alcuni commenti, questo è sicuro. Per sicurezza, intendo che il valore scritto verrà visualizzato in quella posizione di memoria globale. Non c'è possibilità che una scrittura non si verifichi e non vi è alcuna possibilità di altri corruzione di dati spuri. Tom's answer here è applicabile a questo.

Se sono stati scritti valori diversi, uno dei valori si troverà in quella posizione, ma quale valore non è definito.

+0

Questo è quello che ho pensato e quello che ho sempre vissuto. Imposterò questa risposta come raccomandato, a meno che qualcuno vuole sfidarlo. – Auron