2010-09-15 12 views
6

Ich habe ein CUDA-Projekt. Es besteht aus mehreren CPP-Dateien, die meine Anwendungslogik und eine .cu-Datei enthalten, die mehrere Kernel sowie eine __host__-Funktion enthält, die sie aufruft.nvcc -Xptxas -v Compiler-Flag hat keine Wirkung

Jetzt möchte ich die Anzahl der von meinem Kernel (s) verwendeten Register bestimmen. Mein normaler Compiler-Aufruf sieht so aus:

nvcc -arch compute_20 -link src/kernel.cu obj/..obj obj/..obj .. -o bin/..exe -l glew32 ...

Das Hinzufügen des Compiler-Flags "-Xptxas -v" zu diesem Aufruf hat leider keine Auswirkungen. Der Compiler erzeugt immer noch die gleiche Textausgabe wie zuvor. Die kompilierte .exe-Datei funktioniert genauso wie zuvor mit einer Ausnahme: Meine Framerate springt von 80 fps auf 1800 fps.

Antwort

-1

nicht genau das, was Sie suchen, aber Sie können das CUDA Visual Profiler mit der NVIDIA-GPU-Computing-sdk ausgeliefert verwenden. Neben vielen anderen nützlichen Informationen zeigt es die Anzahl der Register, die von jedem Kernel in Ihrer Anwendung verwendet werden.

+0

das kann nicht korrekt sein, weil es die Frage nicht beantwortet .. Wenn Sie nur eine Möglichkeit zum Zählen von Registern wünschen, ändern Sie die Frage. – jmilloy

+0

@jimilloy "Jetzt würde ich gerne die Anzahl der von meinen Kernel (s) verwendeten Register bestimmen" –

2

wenn Sie kompilieren

nvcc --ptxas-options=-v

+0

funktioniert auch nicht. Ich habe alle verschiedenen Bezeichnungen für diese Flagge ausprobiert, die im Internet gefunden werden können. –

+0

@Dav versuchen, Link-Option zu entfernen und kompilieren nur – Anycorn

+0

Karpfen In diesem Fall beschwert sich der Compiler über undefinierte externe Symbole. –

8

ich hatte das gleiche Problem, hier ist meine Lösung:

  1. Compile * cu Dateien in das Gerät nur * ptx-Datei, diese Host-Code verwerfen

    nvcc -ptx *.cu

  2. Compile * PTX-Datei:

Der zweite Schritt zeigt Ihnen die Anzahl der verwendeten Register nach Kernel und die Menge des verwendeten Shared Memory.

+0

+1: ausgezeichnet - danke - das hat bei mir funktioniert! –

1

Möglicherweise möchten Sie den Compiler verbose Option Standardeinstellungen.

Zum Beispiel ist VStudio goto: Tools-> Optionen-> ProjectsAndSolutions-> BuildAndRun dann die Ausführlichkeit Ausgang auf Normal eingestellt.

1

Wenn Sie "-Xptxas -v", "-arch" zusammen verwenden, können wir keine ausführlichen Informationen erhalten (Registernummer usw.). Wenn wir die Ausführlichkeit sehen wollen, ohne die Chance zu verlieren, die GPU-Architektur (-arch, -code) vorauszuplanen, können wir folgende Schritte ausführen: nvcc -arch compute_XX *.cu -keep dann ptxas -v *.ptx. Aber wir werden viele Verarbeitungsdateien erhalten. Sicherlich ist Koguts Antwort auf den Punkt.

2

Konvertieren Sie in Ihrem Compiler-Aufruf compute_20 in sm_20. Das sollte es beheben.

+0

Dies ist die eigentliche richtige Antwort. Es klappt. – markhor

Verwandte Themen