Wann ist flüchtig mit gemeinsamem CUDA-Speicher zu verwenden?
Unter welchen Umständen solltest du das benutzen?volatile
Schlüsselwort mit dem Shared Memory eines CUDA-Kernels? ich verstehe dasvolatile
weist den Compiler an, keine Werte zwischenzuspeichern, aber meine Frage bezieht sich auf das Verhalten mit einem gemeinsam genutzten Array:
__shared__ float products[THREADS_PER_ACTION];
// some computation
products[threadIdx.x] = localSum;
// wait for everyone to finish their computation
__syncthreads();
// then a (basic, ugly) reduction:
if (threadIdx.x == 0) {
float globalSum = 0.0f;
for (i = 0; i < THREADS_PER_ACTION; i++)
globalSum += products[i];
}
Brauche ichproducts
in diesem Fall volatil sein? Auf jeden Array-Eintrag greift nur ein einziger Thread zu, außer am Ende, wo alles von Thread 0 gelesen wird. Ist es möglich, dass der Compiler das gesamte Array zwischenspeichern kann, und so muss es seinvolatile
, oder werden nur Elemente zwischengespeichert?
Vielen Dank!