ein Stück Code, das in einer Angelegenheit von Sekunden in NVIDIA Visuellen Profiler (mit der gleichen EXE) gut über 1 Minute auf der Befehlszeile erfolgte dauert. Also ist die natürliche Frage warum? Stimmt etwas nicht mit der Befehlszeile überein, oder führt Visual Profiler etwas anderes aus und führt nicht wirklich alles wie in der Befehlszeile aus?Warum läuft der CUDA-Code in NVIDIA Visual Profiler so viel schneller?
Ich benutze CUBLAS, Schub und cuRAND.
Übrigens gab es eine merkliche Verlangsamung im kompilierten Code auf meiner Maschine, sogar alten Code, der vorher schnell lief, daher werde ich verdächtig.
Update:
- ich überprüft haben, dass die berechneten Ausgangs auf der Kommandozeile und Visual Profiler ist identisch - das heißt alle erforderlichen Code in beiden Fällen ausgeführt wurde.
- GPU-Hai zeigte an, dass mein Leistungszustandunverändert bei P0 war, als ich von der Befehlszeile zu Visual Profiler wechselte.
- jedoch GPU Nutzung wurde bei 0,0% gemeldet, wenn sie mit von Visual Profiler, führen aber ging so hoch wie 98%, wenn Befehlszeile ablaufen.
- Darüber hinaus weitweniger Speicher wird mit Visual Profiler verwendet. Bei Ausführung der Befehlszeile zeigt der Task-Manager die Verwendung von 650-700 MB Speicher an (Spitzen beim ersten Aufruf
cudaFree(0)
). In Visual Profiler geht diese Zahl auf ~ 100 MB herunter.
Das Posten des Codes kann viel helfen. –
Nun, der Code in Frage ist eigentlich ein Projekt über 15 voneinander abhängige Dateien, so wahrscheinlich nicht in den Rahmen dieser Frage. Ich habe mich nur gefragt, ob jemand anderes das Phänomen Visual Profiler entdeckt hat und eine Erklärung dafür hatte. – mchen
Die CUDA-Profiler (Nsight VSE, Visual Profiler, nvprof und CUDA-Befehlszeilen-Profiler) versetzen die GPU in den höchsten P-Status, um sicherzustellen, dass die Ergebnisse konsistent sind. Dies sollte nicht mehr als ein paar Prozent ausmachen. Der wahrscheinlichere Grund ist, dass Ihre Anwendung beim Ausführen des Profilers fehlschlägt. Bitte bestätigen Sie, dass Ihre Anwendung vollständig ausgeführt wird und keine Fehler auftreten. –