Parallele Thread -Ausführung

Parallele Thread -Ausführung (PTX oder Nvptx[1]) ist ein niedriger Ebene parallel Faden Hinrichtung virtuelle Maschine und Anweisungsset Architektur benutzt in Nvidia's CUDA Programmierumgebung. Das NVCC Compiler übersetzt Code in CUDA, a C ++-ähnliche Sprache, in PTX -Anweisungen (a Montagesprache dargestellt als ASCII Text) und der Grafiktreiber enthält einen Compiler, der die PTX -Anweisungen in den ausführbaren Binärcode übersetzt[2] die auf den Verarbeitungskernen von ausgeführt werden können Nvidia gpus. Das GNU Compiler -Sammlung hat auch grundlegende Fähigkeiten für die PTX -Erzeugung im Kontext von OpenMP abladen.[3] Die Inline -PTX -Baugruppe kann in CUDA verwendet werden.[4]

Register

PTX verwendet ein willkürlich großes Registersatz. Der Ausgang vom Compiler ist fast rein Einzelausstattungsformmit aufeinanderfolgenden Linien, die sich im Allgemeinen auf aufeinanderfolgende Register beziehen. Programme beginnen mit Erklärungen der Form

.reg .U32 %r<335>; // 335 Register %R0, %R1, ..., %R334 des nicht signierten 32-Bit-Ganzzahl vom Typ deklarieren 

Es handelt sich um eine Drei-Argument-Assembly-Sprache, und fast alle Anweisungen listen den Datentyp (in Bezug auf Zeichen und Breite) ausdrücklich auf, auf dem sie arbeiten. Registriernamen sind mit einem% -Scharakter voraus und Konstanten sind wörtlich, z. B.:

Shr.U64 %RD14, %RD12, 32; // Verschiebung nach rechts eine nicht signierte 64-Bit-Ganzzahl von %RD12 um 32 Positionen, %RD14 CVT.U64.U32 %RD142, %R112; // eine unsignierte 32-Bit-Ganzzahl in 64-Bit konvertieren 

Es gibt Prädikatregister, aber kompilierter Code in Shader Model 1.0 verwendet diese nur in Verbindung mit Zweigbefehlen. Der bedingte Zweig ist

@%P14 BH $ label; // Branche auf $ label 

Das setp.cc.type Anweisungen setzt ein Prädikatregister für das Ergebnis des Vergleichs von zwei Registern des geeigneten Typs fest. Es gibt auch a einstellen Anweisung, wo set.le.u32.u64 %r101, %rd12, %rd28 Legt das 32-Bit-Register fest %R101 zu 0xffffffff Wenn das 64-Bit-Register %RD12 ist weniger oder gleich dem 64-Bit-Register %RD28. Andernfalls %R101 ist eingestellt auf 0x00000000.

Es gibt einige vordefinierte Kennungen, die Pseudoregister bezeichnen. Unter anderen, %TID, %NTID, %CTAID, und %NCTAID enthalten Gewindeindizes, Blockabmessungen, Blockindizes und Gitterdimensionen.[5]

Zustandsräume

Belastung (ld) und lagern (st) Befehle beziehen sich auf einen von mehreren unterschiedlichen Zustandsräumen (Speicherbanken), z. ld.param. Es gibt acht staatliche Räume:[5]

  • .reg: Register
  • .Sreg: Spezielle, schreibgeschützte, plattformspezifische Register
  • .Const: Shared, schreibgeschützte Speicher
  • .Global: globales Gedächtnis, von allen Threads geteilt
  • .lokal: Lokaler Speicher, privat für jeden Thread
  • .PARAM: Parameter an den Kernel übergeben
  • .Shared: Speicher, der zwischen Threads in einem Block geteilt wird
  • .Tex: Globales Texturgedächtnis (veraltet)

Der gemeinsame Speicher wird in der PTX -Datei über Zeilen zu Beginn des Formulars deklariert:

.Shared .ausrichten 8 .b8 pbatch_cache[15744]; // 15.744 Bytes definieren, die an eine 8-Byte-Grenze ausgerichtet sind 

Das Schreiben von Kerneln in PTX erfordert explizit die Registrierung von PTX -Modulen über die CUDA -Treiber -API, die normalerweise mehr umständlichere als die CUDA -Laufzeit -API und die CUDA -Compiler von NVIDIA, NVCC, verwendet werden. Das GPU -OCELOT -Projekt stellte eine API zur Registrierung von PTX -Modulen neben CUDA -Laufzeit -API -Kernel -Aufrufe zur Verfügung, obwohl die GPU -Ocelot nicht mehr aktiv aufrechterhalten wird.[6]

Siehe auch

Verweise

  1. ^ "Benutzerhandbuch für NVPTX Back-End-LLVM 7 Dokumentation". llvm.org.
  2. ^ "Cuda -Binärversorger". docs.nvidia.com. Abgerufen 2019-10-19.{{}}: CS1 Wartung: URL-Status (Link)
  3. ^ "nvptx". GCC Wiki.
  4. ^ "Inline -PTX -Baugruppe in Cuda". docs.nvidia.com. Abgerufen 2019-11-03.
  5. ^ a b "PTX ISA Version 2.3" (PDF).
  6. ^ "GPUocelot: Ein dynamisches Kompilierungsrahmen für PTX". github.com.{{}}: CS1 Wartung: URL-Status (Link)

Externe Links