Die Veröffentlichung des Projekts Vortex 3.0 ist verfügbar, das eine Open-Source GPGPU auf der Grundlage der RISC-V Befehlssatzarchitektur entwickelt. Dieses Projekt ist für die Durchführung paralleler Berechnungen unter Verwendung der OpenCL-API und des SIMT (Single Instruction, Multiple Threads) Ausführungsmodells ausgelegt. Es kann auch für Forschungsarbeiten im Bereich 3D-Grafik und die Entwicklung neuer GPU-Architekturen verwendet werden. Die Schaltpläne, Beschreibungen der Hardwarekomponenten in Verilog, Simulatoren, Treiber und begleitende Projektdokumentation werden unter der Lizenz Apache 2.0 veröffentlicht.
Die Basis der GPGPU bildet ein typischer ISA RISC-V, der um zusätzliche Befehle zur Unterstützung von GPU-Funktionen und zur Steuerung von Threads erweitert wird. Änderungen in der RISC-V Befehlssatzarchitektur sind minimal und nutzen, wo möglich, bereits vorhandene Vektorbefehle. Zu den zusätzlichen Befehlen gehören: „tex“ zur Beschleunigung der Texturverarbeitung; vx_rast zur Rastersteuerung, vx_rop zur Verarbeitung von Fragmenten, Tiefe und Transparenz; vx_imadd für die Durchführung der Operation „multiplizieren und addieren“; sowie vx_wspawn, vx_split, vx_join, vx_tmc und vx_bar zur Aktivierung von Thread-Gruppen (Wavefront), die parallel durch den SIMD-Engine ausgeführt werden.

Der entwickelte GPGPU unterstützt 32- und 64-Bit-RISC-V-Befehlssatzarchitekturen (RV32IMF und RV64IMAFD) und kann optional geteilten Speicher, L1-, L2- und L3-Caches sowie anpassbare Anzahl an Kernen, Task-Blöcken (warps) und Threads beinhalten. Für jeden Kern besteht die Möglichkeit, eine anpassbare Anzahl an ALUs, FPUs, LSUs und SFUs zu aktivieren. Zum Prototyping können Xilinx- und Altera-FPGAs verwendet werden, und zur Simulation des Chips kommen Verilator (Verilog-Simulator), RTLSIM (RTL-Simulation) und SimX (Software-Simulation) zum Einsatz.
Für die Anwendungsentwicklung steht ein Toolkit zur Verfügung, das angepasste PoCL-Varianten (Compiler und Runtime für OpenCL) für die Arbeit mit Vortex, LLVM/Clang, GCC und Binutils umfasst. Das Projekt unterstützt die OpenCL 1.2-Spezifikation, und die Unterstützung für die Zwischenrepräsentation der Shader SPIR-V wird durch die Übersetzung in OpenCL realisiert.
Unter den Änderungen in Vortex 3.0:
- Ein hardwarebasierter Grafik-Stapel wurde hinzugefügt, der Blöcke für Rasterisierung, Texturüberlagerung und Ausgabe-Mischung (OM - Output Merger) umfasst. Für Mesa basierend auf dem implementierten Grafikstapel und dem Software-Rasterizer lavapipe wurde ein Vulkan-Treiber namens vortexpipe vorbereitet.
- Die Möglichkeiten des Tensor-Kerns wurden erweitert, um die Ausführung von Modellen des maschinellen Lernens zu beschleunigen, wobei Unterstützung für strukturierte Sparsamkeit zur Komprimierung von Gewichtsmatrizen implementiert wurde.
- Die WGMMA-Operation (Warpgroup-Level-Matrixmultiplikation) für die asynchrone Matrizenmultiplikation wurde implementiert.
- Eine DXA-Engine (Data Transfer Acceleration) wurde hinzugefügt, um den Datentransfer von globalem in lokalen Speicher zu beschleunigen.
- Eine neue Architektur basierend auf einem Befehlssatzprozessor (CP, Command Processor) und einem Hardware-Scheduler für Rechenkerne (KMU – Kernel Management Unit) wurde umgesetzt, die es ermöglicht, die Dispatcher-Operationen für Rechenströme auf dem Chip auszulagern.
- Eine neue Runtime-Bibliothek, die im nicht-blockierenden Modus arbeitet und Abstraktionen bereitstellt, die in hardwareseitig asynchron ausgeführte Befehle übersetzt werden. Warteschlangen, Ereignisse, Module und Synchronisation auf Basis von asynchronen Barrieren mit der Semantik ankommen/warten/ereignis werden unterstützt.
- Die Unterstützung für verkürzte RISC-V-Anweisungen (RVC) wurde hinzugefügt.
- Die hardwareseitige Unterstützung für atomare Operationen (Hardware Atomics) wurde implementiert.
- Das FPU wurde komplett überarbeitet und bietet neue Multiplikatorblöcke (Wallace-tree, Folded-radix) sowie Summierer (Kogge-Stone).
- Ein Stack für virtuellen Speicher basierend auf dem Speicherverwaltungseinheit (MMU) wurde hinzugefügt, mit Unterstützung für die 32-Bit-Architektur der virtuellen Adressierung SV32.
- Unterstützung für die RISC-V Erweiterung Zicond mit der Implementierung bedingter Operationen.
- Integrierte Taktfrequenzsteuerung (clock gating).
- Unterstützung der HIP-Sprache (Heterogeneous Interface for Portability) über das chipStar-Framework, das HIP in SPIR-V übersetzt.
- Vollständige Integration mit dem GEM5-Simulator und Unterstützung für den SimX-Simulator auf der TLM-Architektur (Transaction-Level Modeling).
- Unterstützung von Synopsys- und Yosys-Werkzeugen für die Logiksynthese zur Chipproduktion sowie die Nutzung von Standardelementbibliotheken ASAP7 (7nm), SAED14 (14nm) und NanGate (15nm).
- Das Referenzwerkzeug wurde auf LLVM 20 und POCL 7.0 aktualisiert.
Quelle: opennet.ru
