Die Veröffentlichung des Vortex 3.0-Projekts ist verfügbar, das ein offenes GPGPU auf Basis der RISC-V-Befehlssatzarchitektur entwickelt, das für die Ausführung paralleler Berechnungen unter Verwendung der OpenCL-API und des SIMT-Modells (Single Instruction, Multiple Threads) ausgelegt ist. Das Projekt kann auch für Forschungen im Bereich der 3D-Grafik und für die Entwicklung neuer GPU-Architekturen verwendet werden. Die Schaltpläne, Beschreibungen der Hardwareblöcke in Verilog, der Simulator, Treiber und begleitende Projektdokumentationen werden unter der Apache 2.0-Lizenz veröffentlicht.
Die Grundlage des GPGPU bildet der typische ISA RISC-V, der durch zusätzliche Anweisungen zur Unterstützung von GPU-Funktionen und zur Steuerung von Strömen erweitert wird. Änderungen in der RISC-V-Befehlssatzarchitektur sind auf ein Minimum beschränkt und nutzen nach Möglichkeit bereits vorhandene Vektoranweisungen. Zu den zusätzlichen Anweisungen gehören: „tex“ zur Beschleunigung der Texturverarbeitung; vx_rast zur Steuerung der Rasterisierung, vx_rop zur Verarbeitung von Fragmenten, Tiefe und Transparenz; vx_imadd zur Durchführung der Operation „multiplizieren und addieren“; vx_wspawn, vx_split, vx_join, vx_tmc und vx_bar zur Aktivierung von Gruppen von Strömen (wavefront), die parallel im SIMD Engine ausgeführt werden.

Das entwickelte GPGPU unterstützt die 32- und 64-Bit-Befehlssatzarchitekturen RISC-V RV32IMF und RV64IMAFD und kann optionale gemeinsame Speicher, Caches der Ebenen L1, L2 und L3 sowie eine anpassbare Anzahl von Kernen, Warplätzen (warps) und Strömen beinhalten. Für jeden Kern besteht die Möglichkeit, eine anpassbare Anzahl von ALUs, FPUs, LSUs und SFUs zu aktivieren. Zur Erstellung von Prototypen können Xilinx- und Altera-FPGAs verwendet werden, während zur Simulation des Chipbetriebs Verilator (Verilog-Simulator), RTLSIM (RTL-Simulation) und SimX (softwarebasierte Simulation) eingesetzt werden können.
Für die Anwendungsentwicklung steht ein Toolkit zur Verfügung, das angepasste Versionen von PoCL (Compiler und Runtime für OpenCL), LLVM/Clang, GCC und Binutils umfasst. Das Projekt unterstützt die Spezifikation OpenCL 1.2 und durch die Übersetzung in OpenCL wurde die Unterstützung für die Zwischendarstellung von Shadern SPIR-V realisiert.
Unter den Änderungen in Vortex 3.0:
- Ein hardwarebasierter Grafik-Stack wurde hinzugefügt, der Blöcke für Rasterisierung, Texturüberlagerung und Ausgabeverschmelzung (OM – Output Merger) umfasst. Für Mesa auf Basis des implementierten Grafik-Stacks und des Software-Rasterisierers lavapipe wurde ein Vulkan-Treiber vortexpipe vorbereitet.
- Die Möglichkeiten des Tensor-Kerns, der zur Beschleunigung der Ausführung von Maschinenlernmodellen vorgesehen ist, wurden erweitert und unterstützt jetzt strukturelle Sparsamkeit (structured sparsity) zur Kompression von Gewichtsmatrizen.
- Die Operation WGMMA (warpgroup-level matrix multiplication) wurde für die asynchrone Matrixmultiplikation implementiert.
- Ein DXA (Data Transfer Acceleration)-Engine wurde hinzugefügt, um die Datenübertragung vom globalen zum lokalen Speicher zu beschleunigen.
- Eine neue Architektur auf der Grundlage des Command Processors (CP) und eines Hardware-Schedulers für Rechenkernels (KMU - Kernel Management Unit) wurde realisiert, die das Auslagern von Dispatching-Operationen für Rechenströme ermöglicht.
- Eine neue Laufzeitbibliothek wurde vorgeschlagen, die im nicht blockierenden Modus arbeitet und Abstraktionen bereitstellt, die in hardwareseitig asynchron ausführbare Befehle übersetzt werden. Unterstützt werden Warteschlangen, Ereignisse, Module und Synchronisation auf der Grundlage von asynchronen Barrieren mit der Semantik ankommen/warten/Ereignis.
- Unterstützung für verkürzte RISC-V-Anweisungen (RVC) hinzugefügt.
- Hardwareunterstützung für atomare Operationen (Hardware Atomics) wurde implementiert.
- Die FPU wurde vollständig überarbeitet, und es wurden neue Multiplikationsblöcke (Wallace-tree, Folded-radix) und Addierer (Kogge-Stone) angeboten.
- Ein virtueller Speicherspeicher auf der Basis des Speicherverwaltungseinheit (MMU) mit Unterstützung für die 32-Bit-Architektur der virtuellen Adressierung SV32 wurde hinzugefügt.
- Unterstützung für die RISC-V-Erweiterung Zicond mit der Implementierung bedingter Operationen.
- Die Steuerung der Taktfrequenz (clock gating) wurde integriert.
- Unterstützung für die HIP-Sprache (Heterogeneous Interface for Portability) über das Framework chipStar, das HIP in SPIR-V übersetzt, wurde implementiert.
- Vollständige Integration mit dem Simulator GEM5 und Unterstützung für den Simulator SimX auf TLM-Architektur (Transaction-Level Modeling) hinzugefügt.
- Unterstützung für die Synopsys- und Yosys-Toolkits für die Logiksynthese für die Chipproduktion sowie Unterstützung für die Verwendung von Standardbibliotheken ASAP7 (7nm), SAED14 (14nm) und NanGate (15nm) hinzugefügt.
- Das Referenztool wurde auf LLVM 20 und POCL 7.0 aktualisiert.
Quelle: opennet.ru
