Gibt es eine Möglichkeit, den Standardwert für das Shared-Memory-Array festzulegen?

8

Betrachten Sie den folgenden Code:

%Vor%

Ist es möglich, das gesamte shared_array auf einen bestimmten Wert zu setzen, z. 0 - ohne jede Zelle in einem Thread explizit anzusprechen?

    
fsh 25.06.2011, 13:42
quelle

3 Antworten

7

Nein. Shared Memory ist nicht initialisiert. Sie müssen es irgendwie selbst initialisieren, so oder so ...

Aus CUDA C Programmieranleitung 3.2, Abschnitt B.2.4.2, Absatz 2:

  

__shared__ Variablen können keine Initialisierung als Teil ihrer Deklaration haben.

Dies verwirft auch nichttriviale Standardkonstruktoren für gemeinsame Variablen.

    
CygnusX1 25.06.2011, 14:10
quelle
8

Sie können gemeinsam genutzte Arrays wie dieses effizient parallel initialisieren

%Vor%     
harrism 27.06.2011 01:16
quelle
1

Ja, das kannst du. Sie können angeben, dass der erste Thread im Block sie festlegt, während die anderen nicht zB:

%Vor%

Idealerweise sollten Sie so viel wie möglich vor dem synctreads-Aufruf tun, da dies allen anderen Threads erlaubt, ihre Arbeit zu erledigen, bevor das memset vollständig ist - offensichtlich ist das nur von Bedeutung, wenn die Arbeit einen ganz anderen Thread haben kann Abschlusszeiten, zB wenn eine bedingte Verzweigung vorliegt. Beachten Sie, dass Sie für den Thread 0 "setting" for-loop die Größe des local_bin-Arrays als Parameter an den Kernel übergeben müssen, damit Sie die Größe des Array kennen, das Sie durchlaufen.

Ursprüngliche Konzeptquelle

    
metamorphosis 17.07.2015 00:14
quelle

Tags und Links