Die zweite Version des Vortex-Projekts wurde veröffentlicht, das eine Open-Source-GPGPU auf der Grundlage der RISC-V-Befehlssatzarchitektur entwickelt, die für die Durchführung paralleler Berechnungen unter Verwendung der OpenCL-API und des SIMT-Modells (Single Instruction, Multiple Threads) ausgelegt ist. Das Projekt kann auch bei der Forschung im Bereich 3D-Grafik und der Entwicklung neuer GPU-Architekturen verwendet werden. Schaltpläne, Beschreibungen von Hardwaremodulen in Verilog, ein Simulator, Treiber und begleitende Projektdokumentation werden unter der Apache 2.0-Lizenz veröffentlicht.
Die Grundlage des GPGPU bildet ein typisches ISA RISC-V, das um einige zusätzliche Befehle erweitert wurde, die zur Unterstützung von GPU-Funktionen und zur Verwaltung von Streams erforderlich sind. Dabei sind die Änderungen in der RISC-V-Befehlssatzarchitektur minimiert und es werden nach Möglichkeit bereits vorhandene Vektorbefehle genutzt. Ein ähnlicher Ansatz wird im Projekt RV64X verfolgt, das ebenfalls ein offenes GPU auf Basis von RISC-V-Technologien entwickelt.

Für die Vortex-Technologien wird ein offenes GPU Skybox entwickelt, das die Grafik-API Vulkan unterstützt. Der Prototyp Skybox, der auf einem Altera Stratix 10 FPGA basiert und 32 Kerne (512 Threads) umfasst, erreichte bei einer Frequenz von 230 MHz eine Füllrate von 3,7 Gigapixeln pro Sekunde (29,4 Gigatransaktionen pro Sekunde). Es ist bemerkenswert, dass dies die erste offene GPU mit Software- und Hardware-Implementierung ist, die Vulkan unterstützt.
Hauptmerkmale von Vortex:
- Unterstützung von 32- und 64-Bit-Architekturen der RISC-V-Befehlssätze RV32IMF und RV64IMAFD.
- Konfigurierbare Anzahl an Kernen, Taskblocks (warps) und Threads.
- Anpassbare Anzahl von ALU, FPU, LSU und SFU für jeden Kern.
- Einstellbare Breite der Pipeline-Ausgabe.
- Optionale gemeinsame Speicherkapazität sowie Caches der Ebenen L1, L2 und L3.
- Unterstützung der OpenCL-Spezifikation 1.2.
- Möglichkeit zur Realisierung auf Basis von FPGA Altera Arria 10, Altera Stratix 10, Xilinx Alveo U50, U250, U280 und Xilinx Versal VCK5000.
- Erweiterte Instruktionen: „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 von „multiplizieren und addieren“, vx_wspawn, vx_tmc und vx_bar zur Aktivierung von Instruktionsfronten und darin enthaltenen Threads (Wavefront, Thread-Gruppe, parallel ausgeführt durch SIMD Engine), vx_split und vx_join.
- Die Unterstützung für die Zwischenrepräsentation von Shaders SPIR-V erfolgt durch Übersetzung in OpenCL.
- Für die Anwendungsentwicklung steht ein Toolkit zur Verfügung, das angepasste Varianten von PoCL (OpenCL-Compiler und -Laufzeit), LLVM/Clang, GCC und Binutils umfasst.
- Die Simulation des Chipbetriebs wird durch Verilator (Verilog-Simulator), RTLSIM (RTL-Simulation) und SimX (Software-Simulation) unterstützt.
Änderungen in Version Vortex 2.0:
- Die Mikroarchitektur wurde optimiert.
- Unterstützung für die 64-Bit-RISC-V-Befehlssatzarchitektur RV64IMAFD hinzugefügt.
- Möglichkeit zur Implementierung auf Basis von Xilinx-FPGAs hinzugefügt.
- Unterstützung für LLVM 16 und Ubuntu 20.04 hinzugefügt.
- Refactoring durchgeführt und Fehlerbehebungen vorgenommen, die bei der Qualitätsbewertung festgestellt wurden.
Quelle: opennet.ru
