2010-03-04 13 views
5

Die CUDA Programmieranleitung besagt, dassBedeutung der Bandbreite in CUDA und warum es wichtig ist

„Bandbreite einer der wichtigsten Gating-Faktoren für die Leistung ist. Fast alle Änderungen an Code sollen im Rahmen gemacht werden wie sie die Bandbreite beeinflussen. "

Er fährt fort, theoretische Bandbreite zu berechnen, die in der Größenordnung von Hunderten von Gigabyte pro Sekunde liegt. Ich weiß nicht, warum die Anzahl der Bytes, die man im globalen Speicher lesen/schreiben kann, eine Reflexion darüber ist, wie gut ein Kernel optimiert ist.

Wenn ich einen Kernel habe, der eine intensive Berechnung von Daten in Shared Memory und/oder Registern durchführt, mit nur einem einzigen Lesevorgang am Anfang und am Ende aus dem und zum globalen Speicher, wird die effektive Bandbreite sicher sein klein, während der Kernel selbst sehr effizient sein kann.

Kann jemand in diesem Zusammenhang die Bandbreite weiter erklären?

Dank

Antwort

4

Die meisten nichttrivialen Rechenkerne, in CPU und GPU Land, Speicher gebunden. GPU hat eine sehr hohe Rechenintensität und Durchsatz, aber der Zugriff auf den Hauptspeicher ist sehr langsam und hat eine hohe Latenz, einige hundert Zyklen pro Lesen/Speichern gegenüber vier Zyklen für viele arithmetische Operationen.

Es klingt wie Ihr Kernel ist Berechnung gebunden, so Ihr Glück. Sie müssen jedoch weiterhin auf Konflikte zwischen den Speicherkonsolen achten, die Teile des Codes unerwartet serialisieren können.

0

Typischerweise Kerne sind ziemlich klein und einfach und die gleiche Operation auf einer Menge von Daten durchzuführen. Möglicherweise haben Sie eine Reihe von Kerneln, die Sie nacheinander aufrufen, um einen komplexeren Vorgang auszuführen (stellen Sie sich eine Verarbeitungspipeline vor). Offensichtlich hängt der Durchsatz Ihrer Pipeline davon ab, wie effizient Ihre Kernel sind und ob Sie durch die Speicherbandbreite in irgendeiner Weise eingeschränkt sind.

1

Die meisten Kernel sind speichergebunden, so dass die Maximierung des Speicherdurchsatzes entscheidend ist. Wenn Sie Glück haben, einen compute-gebundenen Kernel zu haben, dann ist die Optimierung für die Berechnung in der Regel einfacher. Sie müssen nach Divergenz Ausschau halten und Sie sollten immer noch sicherstellen, dass Sie über genügend Threads verfügen, um Speicherwartezeit zu verbergen.

Weitere Informationen finden Sie in der Präsentation Advanced CUDA C, einschließlich einiger Tipps zum Vergleich Ihrer realisierten Leistung mit der theoretischen Leistung. Das CUDA Best Practices Gude hat auch einige gute Informationen, es ist als Teil des CUDA Toolkits verfügbar (Download von der NVIDIA site).

Verwandte Themen