Cuda registriert sich pro Thread

Wie ich richtig verstehe, gibt es für Geräte mit 2.x-Rechenkapazität ein Registerlimit von 63 pro Thread. Wissen Sie, welches Registerlimit pro Thread für Geräte mit der Rechenkapazität 1.3 gilt?

Ich habe einen großen Kernel, den ich auf einer GTX260 teste. Ich bin mir ziemlich sicher, dass ich viele Register benutze, da der Kernel sehr komplex ist und ich viele lokale Variablen brauche. Laut dem Cuda-Profiler ist meine Registernutzung 63 (statischer Smem ist 68, obwohl ich mir nicht sicher bin, was das bedeutet und dynamischer Smem ist 0), obwohl ich ziemlich sicher bin, dass ich mehr als 63 lokale Variablen habe, also habe ich die berechnet Der Compiler verwendet Register erneut oder verschüttet sie in den lokalen Speicher.

Jetzt dachte ich, dass die Geräte mit der Rechenkapazität 1.3 eine höhere Anzahl von Registern pro Thread haben als die 2.x-Geräte. Ich vermute, dass der Compiler die 63-Grenze gewählt hat, weil ich Blöcke mit 256 Threads verwende. In diesem Fall ist 256 * 63 16128, während 256 * 64 16384 ist. Dies ist die maximale Anzahl von Registern für eine SM dieses Geräts. Wenn ich also die Anzahl der Threads pro Block verringere, kann ich die Anzahl der verwendeten Register erhöhen. Also habe ich den Kernel mit Blöcken von 196 Threads ausgeführt. Aber auch hier zeigt der Profiler 63 Register an, obwohl 63 * 192 12096 und 64 * 192 12288 sind, was weit innerhalb der 16384-Grenze des SM liegt.

Also eine Idee, warum der Compiler sich immer noch auf 63 Register beschränkt? Könnte es alles an der Wiederverwendung von Registern liegen oder werden immer noch Register verschüttet?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage