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.
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.
Tags und Links cuda