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?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage