Ho sempre pensato che le divergenze ramo è causata solo dal codice ramificazione, come "se", "altro", "per", "switch", ecc, tuttavia ho letto un articolo di recente in cui si dice:In CUDA, gli accessi di memoria non coalescenti causano divergenze di diramazione?
" Si può chiaramente osservare che il numero di rami divergenti presi dai thread in ciascun primo algoritmo basato sull'esplorazione è almeno due volte più importante della strategia di esplorazione completa Questo è in genere il risultato di ulteriori accessi non coalizzati al memoria globale Quindi, tale divergenza nei thread porta a molti accessi di memoria che devono essere serializzati, aumentando il numero totale di istruzioni eseguite.
Si può osservare che il numero di serializzazioni di ordito per la versione che utilizza accessi non coalescenti è tra sette e sedici volte più importante rispetto alla sua controparte. Infatti, una divergenza dei thread causata da accessi non coalizzati porta a molti accessi di memoria che devono essere serializzati, aumentando le istruzioni da eseguire. "
Sembra che, secondo l'autore, accessi non coalizzati possono causare rami divergenti. E 'vero? La mia domanda è, quanti motivi esattamente ci sono per la divergenza ramo? Grazie in anticipo.
Potete collegare al riferimento originale? – talonmies
+1 Voglio davvero sapere come una strategia di accesso alla memoria sarebbe responsabile per le diramazioni divergenti. Si prega di aggiungere il riferimento. –
Questa tesi dovrebbe essere il riferimento. I 2 paragraghes provengono rispettivamente da p80 e p107. http://mistic.heig-vd.ch/luong/thesis.pdf – kangshiyin