Sebbene entrambi siano uguali in termini di prestazioni, è necessario tenere presente che il primo non è consigliato.
Restituire un thread all'interno di un kernel potrebbe causare un comportamento imprevisto nel resto del codice.
Per comportamento imprevisto intendo qualsiasi problema relativo all'unità minima di thread raggruppati in un ordito. Ad esempio, se nel kernel è presente un blocco if/else
, questa situazione è nota come divergenza tra i thread e in un caso normale i thread restano inattivi e altri eseguono alcune istruzioni.
CUDA dal Libro di esempio, Capitolo 5, Cooperazione Discussione:
Ma nel caso di __syncthreads(), il risultato è un po 'tragica. L'architettura CUDA garantisce che nessun filo avanzerà ad un'istruzione oltre le __syncthreads() finché ogni filo nel blocco ha eseguito i __syncthreads()
così, è principalmente correlato alla sincronizzazione thread all'interno di un kernel. È possibile trovare una buona domanda/risposta su questo argomento qui: Can I use __syncthreads() after having dropped threads?
Come ho nota finale, ho usato anche che cattiva pratica e nessun problema è apparso, ma non v'è alcuna garanzia che i problemi potrebbero sorgere in futuro . È qualcosa che non consiglierei
Entrambe ti daranno le stesse prestazioni. – sgarizvi