Wenn Sie Arrays aus dem globalen Speicher in den gemeinsamen Speicher laden, tun Variablen im Shared Memory nicht, was ich will.Wie man Werte in extern geteiltes Array lädt
template<class T>
__global__ void kernel(T *t1,T *t2)
{
int tid=threadIdx.x;
extern __shared__ T array1[];
extern __shared__ T array2[];
array1[tid]=t1[tid];//copy (1)
array2[tid]=t2[tid];//copy (2)
__syncthreads();
}
Dinge ergeben sich, dass array1 [tid] = array2 [tid] = t2 [tid]. Wenn Sie die Stelle von Kopie (1) und Kopie (2) austauschen, ist das Ergebnis array1 [tid] = array2 [tid] = t1 [tid]. nur wenn ich "extern" entferne das Ergebnis geht was ich will (array1 [tid] = t1 [tid], array2 [tid] = t2 [tid]). Kann jemand erklären warum?
Ist es möglich, dass sowohl „statisch __shared__“ und „extern __shared__“ existieren im selben Kernel wie: "__shared__ float array1 [N]" und "extern __shared__ T array2 []"? – fireplay
Ich glaube, Sie sollten in der Lage sein, sowohl statische als auch dynamische Zuweisungen im selben Kernel zu verwenden, haben Sie es versucht? –
Ja, ich habe es, vielen Dank. – fireplay