Vortex 2.1 veröffentlicht, offenes GPGPU auf Basis der RISC-V-Architektur

Eine neue Version des Vortex-Projekts wurde veröffentlicht, das ein offenes GPGPU auf Basis der RISC-V-Befehlssatzarchitektur entwickelt, das für die Durchführung von parallelen Berechnungen mit der OpenCL-API und dem SIMT-Modell (Single Instruction, Multiple Threads) ausgelegt ist. Das Projekt kann auch für Forschungsarbeiten im Bereich 3D-Grafik und für die Entwicklung neuer GPU-Architekturen verwendet werden. Schaltpläne, Beschreibungen von Hardwaremodulen in Verilog, Simulatoren, Treiber und begleitende Projektdokumentation werden unter der Apache 2.0-Lizenz verteilt.

Die Grundlage des GPGPU bildet das standardmäßige ISA RISC-V, das um einige zusätzliche Instruktionen erweitert wurde, die erforderlich sind, um GPU-Funktionen und das Thread-Management zu unterstützen. Dabei wurden Änderungen an der RISC-V-Befehlsarchitektur auf ein Minimum beschränkt und vorhandene Vektorinstruktionen nach Möglichkeit verwendet. Ein ähnlicher Ansatz wird im Projekt RV64X verfolgt, das ebenfalls ein offenes GPU auf Basis der RISC-V-Technologien entwickelt.

Vortex 2.1 veröffentlicht, offenes GPGPU auf Basis der RISC-V-Architektur

Haupmerkmale von Vortex:

  • Unterstützung von 32- und 64-Bit-Befehlsarchitekturen RISC-V RV32IMF und RV64IMAFD.
  • Anpassbare Anzahl von Kernen, Aufgabenblöcken (warps) und Threads.
  • Anpassbare Anzahl von ALUs, FPUs, LSUs und SFUs für jeden Kern.
  • Anpassbare Breite der Pipeline-Ausgabe (pipeline issue width).
  • Optionale gemeinsame Speicher und Caches der Ebenen L1, L2 und L3.
  • Unterstützung der OpenCL 1.2-Spezifikation.
  • Implementierungsmöglichkeiten auf FPGA Altera Arria 10, Altera Stratix 10, Xilinx Alveo U50, U250, U280 und Xilinx Versal VCK5000.
  • Erweiterte Anweisungen: „tex“ zur Beschleunigung der Texturverarbeitung, vx_rast zur Steuerung der Rasterisierung, vx_rop zur Verarbeitung von Fragmenten, Tiefe und Transparenz, vx_imadd zur Ausführung der Operation „multiplizieren und addieren“, vx_wspawn, vx_tmc und vx_bar zur Aktivierung von Fronten von Anweisungen und Threads in diesen (Wavefront, Gruppe von Threads, die parallel im SIMD-Engine ausgeführt werden), vx_split und vx_join.
  • Die Unterstützung der Zwischendarstellung von Shadern SPIR-V wird durch Übersetzung in OpenCL realisiert.
  • Für die Anwendungsentwicklung steht ein Toolkit zur Verfügung, das angepasste PoCL-Varianten (Compiler und Runtime OpenCL) für die Arbeit mit Vortex, LLVM/Clang, GCC und Binutils umfasst.
  • Die Simulation des Chips wird mit Verilator (Verilog-Simulator), RTLSIM (RTL-Simulation) und SimX (Software-Simulation) unterstützt.

Für die Grafik wird auf den Vortex-Technologien das offene GPU Skybox entwickelt, das die Grafik-API Vulkan unterstützt. Der auf der FPGA Altera Stratix 10 basierende Prototyp von Skybox, der 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. Es wird darauf hingewiesen, dass dies das erste offene GPU mit Software- und Hardware-Implementierung ist, das Vulkan unterstützt.

Zu den Änderungen in Version Vortex 2.1 gehören:

  • Die API spawn_taskgroups wurde hinzugefügt, um Kerne zu starten, die lokalen Speicher nutzen und die Sperren im Speicher unterstützen.
  • Ein neues Erweiterung zur Erstellung von umschaltbaren (relocatable) Binärkernen wurde vorgeschlagen.
  • Die Speicherverwaltungs-API wurde um die Aufrufe vx_mem_reserve, vx_mem_access und vx_mem_address erweitert.
  • Eine neue Runtime-API vx_check_occupancy wurde hinzugefügt.
  • Im Treiber für die GPU wurde eine Option zur Überprüfung von OpenCL-Tests auf der lokalen GPU hinzugefügt.
  • OpenCL-Tests, die lokalen Speicher nutzen (psum, sgemm2, sgemm3), wurden hinzugefügt.
  • Spezifisch für Vortex angepasste Versionen der Bibliotheken libc und librt wurden hinzugefügt.
  • Unterstützung für die Zusammenführung benachbarter freier Speicherblöcke (memory coalescing) wurde hinzugefügt.
  • Die Mikroarchitektur wurde optimiert.
  • Ein neues Build-Skript wurde hinzugefügt, das die Quellcodedateien vom Build-Verzeichnis trennt.

Quelle: opennet.ru

60GB SSD 8Gb DDR4