2013-05-15 15 views
16

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.
+0

Das Posten des Codes kann viel helfen. –

+2

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

+12

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. –

Antwort

0

Dies sollte nicht passieren. So etwas habe ich noch nie gesehen. wahrscheinlich etwas in deinem Setup.

0

Es könnte sein, dass einige JIT-compile step vom Profiler übersprungen wird. Dies könnte den Unterschied in der Speichernutzung erklären. Versuchen Sie, eine fat binary zu erstellen?

3

Dies ist eine alte Frage, aber ich habe gerade das gleiche Problem verfolgt (obwohl die Ursache möglicherweise nicht die gleiche ist).

Nämlich: Meine App erreicht zwischen 900 und 1100 Frames (synchrone startet) pro Sekunde beim Ausführen unter NVVP, aber etwa 100-120 beim Ausführen außerhalb des Profilers.

Die Ursache scheint eine Statusmeldung zu sein, die ich über cout an die Konsole ausgegeben habe. Ich hatte beabsichtigt, dass dies nur einmal alle 100-200 Frames passiert. Stattdessen wurde die Statusmeldung für jeden Frame gedruckt, und die Konsolen-IO wurde zum Engpass.

Wenn Sie die Statusmeldung nur alle 100 Bilder drucken (obwohl die optimale Anzahl hier von Ihrer Anwendung abhängt), springt die Bildrate wieder hoch, um dem zu entsprechen, was ich in NVVP gesehen habe. Natürlich könnte dies auch in einem separaten CPU-Thread behandelt werden, wenn diese Art von Overhead unter Ihren Umständen nicht akzeptabel ist.

NVVP muss stdout zu seinem eigenen internen Puffer umleiten, um die Ausgabe der Anwendung zu erfassen (die es in seiner Konsolenregisterkarte anzeigt). Offenbar hat der NVVP-Mechanismus zum Puffern oder Verarbeiten dieser Ausgabe einen wesentlich geringeren Overhead als das Betriebssystem direkt damit umgehen kann. Es sieht so aus, als ob NVVP alles puffert und es in einem separaten Thread anzeigt oder einfach eine Menge Ausgaben speichert, bis ein Schwellenwert erreicht ist, wenn dieser Puffer zu seiner eigenen Konsolen-Registerkarte hinzugefügt wird.

Also, mein Rat wäre, jede Konsole IO zu deaktivieren, und zu sehen, ob oder wie sich das auf Dinge auswirkt.

(Es half nicht, dass VS2012 mein CUDA App zum Profil abgelehnt. Es wäre schön gewesen, um zu sehen, dass 80% der Ausführungszeit auf der Konsole IO ausgegeben wurde.)

hoffte, das hilft!

Verwandte Themen