CUDA: In Warp Reduction und Volatile Keyword
Nach dem Lesen der Frage und ihrer Antwort aus dem Folgenden
VERKNÜPFUNG
Ich habe noch eine Frage im Kopf. Aus meinem Hintergrund in C / C ++; Ich verstehe das mitvolatile
hat seine Nachteile. Außerdem wird in den Antworten darauf hingewiesen, dass im Fall von CUDA die Optimierungen das gemeinsam genutzte Array durch Register ersetzen können, um Daten zu speichern, wennvolatile
Schlüsselwort wird nicht verwendet.
Ich möchte wissen, welche Leistungsprobleme bei der Berechnung der (Summen-) Reduzierung auftreten können. z.B.
__device__ void sum(volatile int *s_data, int tid)
{
if (tid < 16)
{
s_data[tid] += s_data[tid + 16];
s_data[tid] += s_data[tid + 8];
s_data[tid] += s_data[tid + 4];
s_data[tid] += s_data[tid + 2];
s_data[tid] += s_data[tid + 1];
}
}
Ich verwende in der Verzerrungsreduzierung. Da alle Threads mit in warp synchron sind, glaube ich, dass es keine Notwendigkeit gibt, sie zu verwendensyncthreads()
bauen.
Ich möchte wissen, ob das Keyword entfernt wirdvolatile
meine summe durcheinander bringen (wegen cuda optimierungen)? Kann ich eine Reduzierung wie diese ohne verwenden?volatile
Stichwort.
Da ich diese Reduktionsfunktion mehrfach nutze, werde ichvolatile
Keyword verursachen Leistungseinbußen?