Frage

Ich bin etwas mit dem CUDA Visual Profiler und der Belegung Tabelle vertraut, obwohl ich wahrscheinlich bin nicht sich so gut wie nutze ich kann. Profilieren & CUDA-Code zu optimieren ist Profilierung nicht wie & Optimierung Code, der auf einer CPU läuft. Also ich bin die Hoffnung, von Ihren Erfahrungen zu lernen, wie man das Beste aus meinem Code.

Es gab einen Beitrag vor kurzem für den schnellstmöglichen Code suchen zu identifizieren Selbst Zahlen und ich bot ein CUDA Implementierung . Ich bin nicht davon überzeugt, dass dieser Code so schnell ist, wie es sein kann, aber ich bin ratlos, da beide um herauszufinden, was die richtigen Fragen sind und welches Werkzeug kann ich die Antworten bekommt aus.

Wie erkennen Sie Möglichkeiten, um Ihre CUDA Kerne schneller durchführen zu machen?

War es hilfreich?

Lösung

Wenn Sie auf Linux entwickelst dann der CUDA von Visual Profiler gibt Ihnen eine ganze Menge von Informationen, zu wissen, was damit zu tun ein wenig schwierig sein kann. Unter Windows können Sie auch die CUDA von Visual Profiler verwenden, oder (auf Vista / 7/2008) können Sie Nexus verwenden, die gut mit Visual Studio integriert und gibt Ihnen kombinierten Host und GPU Profilinformationen.

Wenn Sie die Daten haben, müssen Sie wissen, wie sie zu interpretieren. Die Erweiterte CUDA C Präsentation von GTC hat einige nützliche Tipps. Die wichtigsten Dinge, wo sie nach sind:

  • Optimale Speicherzugriffe: Sie müssen wissen, was Sie erwarten, dass der Code für Ausnahmen zu tun und suchen dann. Also, wenn Sie immer schwimmen Laden, und jeder Thread lädt einen anderen Schwimmer aus einem Array, dann würden Sie erwarten, um zu sehen, nur 64-Byte-Lasten (auf Strom h / w). Alle anderen Belastungen sind ineffizient. Die Profilinformationen werden wahrscheinlich in Zukunft h / w verbessern.
  • Serialisierung minimieren: die „warp serialize“ Zähler zeigt an, dass Sie die Speicherbank Konflikte oder konstante Serialisierung geteilt haben, geht die Präsentation mehr ins Detail und was dagegen zu tun wie das SDK (zum Beispiel die Reduktion Probe)
  • Overlap I / O und berechnen: das ist, wo Nexus wirklich glänzt (Sie können die gleichen Informationen manuell mit cudaEvents bekommen kann), wenn Sie eine große Menge an Daten übertragen Sie die Rechen- und die ich zu überlappen wollen / O
  • Ausführung Konfiguration: die Belegung Rechner dabei helfen kann, aber einfache Methoden wie die Rechen kommentieren erwartet zu messen vs. gemessene Bandbreite wirklich nützlich ist (und umgekehrt für rechen Durchsatz)

Dies ist nur ein Anfang, die AGB Präsentation Besuche und die anderen Webinare auf der NVIDIA-Website.

Andere Tipps

Der CUDA-Profiler ist ziemlich grob und stellt keine Menge nützlicher Informationen. Der einzige Weg, um ernsthaft Code Mikro-Optimierung (vorausgesetzt, Sie bereits den bestmöglichen Algorithmus gewählt haben), ist ein tiefes Verständnis für die GPU-Architektur haben, vor allem im Hinblick auf die Verwendung von Shared Memory, Muster externen Speicherzugriff, registrieren Nutzung, Gewinde Belegung , Warps, etc.

Vielleicht könnten Sie Ihren Kernel-Code hier posten und ein Feedback bekommen?

Das nVidia CUDA Entwickler Forum Forum ist auch ein guter Ort, um zu gehen Hilfe bei dieser Art von Problem.

Wenn Sie Windows verwenden ... Überprüfen Nexus:

http://developer.nvidia.com/object/nexus.html

Ich hing zurück, weil ich keinen CUDA-Experte bin, und die anderen Antworten sind ziemlich gut, wenn der Code in der Nähe optimal bereits hübsch ist. Meiner Erfahrung nach ist das ein großer IF, und es gibt keinen Schaden es bei der Überprüfung.

Um es zu überprüfen, müssen Sie herausfinden, ob der Code sicher ist nichts zu tun, dass es nicht zu tun. Hier sind Möglichkeiten, wie ich sehen kann, dass überprüfen:

  • Führen Sie den gleichen Code auf dem Vanille-Prozessor, und nehmen Sie entweder stackshots davon, oder einen Profiler verwenden wie Oprofile oder rotateRight / Zoom, die Sie gleichwertige Informationen geben kann.

  • es auf einem CUDA Prozessor ausgeführt wird, und das gleiche tun, wenn möglich.

Was Sie suchen sind Codezeilen, die hohe Auslastung auf den Call-Stack haben, wie durch den Anteil an Stapelproben, die ihnen gezeigt. Das sind Ihre „Engpässe“. Es ist nicht eine sehr große Anzahl von Proben nimmt sie ausfindig zu machen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top