Die Version 2.2 des Projekts Vortex wurde veröffentlicht. Dieses entwickelt eine offene GPGPU auf Basis der RISC-V-Befehlsarchitektur, 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 für Forschung in der 3D-Grafik und für die Entwicklung neuer GPU-Architekturen eingesetzt werden. Schaltungen, Beschreibungen der Hardware-Blocks in Verilog, Simulatoren, Treiber und begleitende Projektdokumentation werden unter der Apache 2.0-Lizenz verbreitet.
Die Basis von GPGPU bildet der typische ISA RISC-V, der durch einige zusätzliche Instruktionen erweitert wird, die zur Unterstützung von GPU-Funktionen und zur Steuerung von Strömen erforderlich sind. Dabei sind die Änderungen an der Architektur des RISC-V-Befehlssatzes auf ein Minimum beschränkt und es werden nach Möglichkeit bereits vorhandene Vektor-Instruktionen genutzt. Zu den zusätzlichen Instruktionen 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_tmc und vx_bar zur Aktivierung von Instruktionsfronten und Strömen darin (wavefront, Bündel von Threads, die parallel von einem SIMD-Engine ausgeführt werden), vx_split und vx_join.

Die entwickelte GPGPU unterstützt 32- und 64-Bit RISC-V Befehlssatzarchitekturen RV32IMF und RV64IMAFD und kann optional gemeinsamen Speicher, Level-1-, Level-2- und Level-3-Caches sowie eine anpassbare Anzahl von Kernen, Warp-Units und Threads beinhalten. Für jeden Kern besteht die Möglichkeit, eine konfigurierbare Anzahl von ALU, FPU, LSU und SFU zu aktivieren. Zur Prototypenerstellung können FPGA-Modelle wie Altera Arria 10, Altera Stratix 10, Xilinx Alveo U50, U250, U280 und Xilinx Versal VCK5000 verwendet werden. Zur Simulation des Chipbetriebs können Verilator (Verilog-Simulator), RTLSIM (RTL-Simulation) und SimX (Software-Simulation) eingesetzt werden.
Für die Anwendungsentwicklung steht ein Toolkit zur Verfügung, das angepasste Varianten von PoCL (Compiler und Runtime für OpenCL), LLVM/Clang, GCC und Binutils umfasst. Das Projekt unterstützt die Spezifikation von OpenCL 1.2 und ermöglicht über eine Übersetzung in OpenCL die Unterstützung des Zwischenformats für Shader SPIR-V. Für die Grafiktechnologien von Vortex wird die offene GPU Skybox entwickelt, die das Grafik-API Vulkan unterstützt. Der Prototyp von Skybox, der auf dem FPGA Altera Stratix 10 basiert und 32 Kerne (512 Threads) umfasst, konnte bei einer Frequenz von 230 MHz eine Füllrate von 3,7 Gigapixel pro Sekunde (29,4 Gigatransaktionen pro Sekunde) erreichen.
Zu den Änderungen in der Version Vortex 2.2:
- Die API vx_spawn_taskgroups wurde hinzugefügt, um Kerne zu starten, die segmentierte 3D-Aufgaben ausführen.
- Es wurde Unterstützung für ZICOND hinzugefügt, eine Erweiterung der RISC-V-Befehlssatzarchitektur, die bedingte Ausführung von Operationen ohne Verzweigung ermöglicht.
- Der OpenCL-Compiler wurde auf die Ausführungsplanung auf der Ebene einzelner Threads (thread-level, jeder Thread führt seine Aufgabe unabhängig von anderen Threads aus) umgestellt, anstelle der Aufgabengruppen (warp-level), wie es zuvor der Fall war.
- In OpenCL wurde JIT-Kompilierung und Unterstützung für 64-Bit-Kerne hinzugefügt.
- Die Unterstützung für das dynamische Laden der Vortex-Laufzeitumgebung wurde implementiert.
- Eine neue Dokumentation zur Konfiguration von Xilinx FPGA wurde bereitgestellt.
- Das Testen der Logik-Synthese mit dem Yosys-Toolkit wurde aktiviert.
- In den hierarchischen Flush-Operationen und im Write-Back-Modus wird Cache-Unterstützung gewährleistet.
- Die Geschwindigkeit der Scoreboard-Verifikation und der Verarbeitung von Operanden auf Registerübertragungsebene (RTL, Register Transfer Level) wurde optimiert.
- Die Unterstützung des DRAM-Simulators Ramulator 2.0 wurde hinzugefügt.
- Der Wechsel zu den neuen Versionen Verilator 5.0 (SystemVerilog-Simulator) und LLVM 18.0 wurde vollzogen, und das Toolkit auf CentOS 7.9 wurde aktualisiert.
- Anstelle des kontinuierlichen Integrationssystems Travis CI wurde der Dienst GitHub CI eingesetzt.
Quelle: opennet.ru
