Opublikowano wersję projektu Vortex 2.2, rozwijającego otwarte GPGPU oparte na architekturze zestawu instrukcji RISC-V, zaprojektowanej do wykonywania obliczeń równoległych przy użyciu API OpenCL oraz modelu wykonania SIMT (Single Instruction, Multiple Threads). Projekt może być również wykorzystany w badaniach dotyczących grafiki 3D oraz przy opracowywaniu nowych architektur GPU. Schematy, opisy bloków sprzętowych w języku Verilog, symulator, sterowniki oraz towarzysząca dokumentacja projektowa są udostępniane na licencji Apache 2.0.
Podstawą GPGPU jest typowy ISA RISC-V, rozszerzony o dodatkowe instrukcje niezbędne do wsparcia funkcji GPU oraz zarządzania wątkami. Zmiany w architekturze zestawu instrukcji RISC-V są zminimalizowane, a jeśli to możliwe, wykorzystywane są istniejące instrukcje wektorowe. Wśród dodatkowych instrukcji można wymienić: „tex” do przyspieszenia przetwarzania tekstur, vx_rast do zarządzania rastrowaniem, vx_rop do przetwarzania fragmentów, głębokości i przezroczystości, vx_imadd do wykonywania operacji „mnożenie i dodawanie”, vx_wspawn, vx_tmc i vx_bar do aktywacji frontów instrukcji i wątków w nich (wavefront, zestaw wątków wykonywanych równolegle przez SIMD Engine), vx_split i vx_join.

Rozwijane GPGPU wspiera 32- i 64-bitowe architektury zestawu instrukcji RISC-V RV32IMF i RV64IMAFD, i może obejmować opcjonalną pamięć dzieloną, pamięci podręczne poziomów L1, L2 i L3, a także konfigurowaną liczbę rdzeni, bloków zadań (warps) i wątków. Dla każdego rdzenia przewidziano możliwość włączenia konfigurowanej liczby ALU, FPU, LSU i SFU. Do tworzenia prototypów można wykorzystać FPGA Altera Arria 10, Altera Stratix 10, Xilinx Alveo U50, U250, U280 oraz Xilinx Versal VCK5000. Do symulacji działania chipu mogą być zastosowane Verilator (symulator Verilog), RTLSIM (symulacja RTL) oraz SimX (symulacja programowa).
Dla rozwoju aplikacji dostępny jest zestaw narzędzi, obejmujący wersje PoCL (kompilator i runtime OpenCL) dostosowane do pracy z Vortex, LLVM/Clang, GCC i Binutils. Projekt wspiera specyfikację OpenCL 1.2, a przez translację do OpenCL zrealizowano wsparcie dla pośredniego przedstawienia shaderów SPIR-V. Dla grafiki w technologiach Vortex rozwijany jest otwarty GPU Skybox, wspierający graficzny API Vulkan. Prototyp Skybox, stworzony na bazie FPGA Altera Stratix 10 i obejmujący 32 rdzenie (512 wątków), osiągnął przy częstotliwości 230 MHz wydajność rysowania na poziomie 3,7 gigapikseli na sekundę (29,4 gigatransakcji na sekundę).
Wśród zmian w wersji Vortex 2.2:
- Dodano API vx_spawn_taskgroups do uruchamiania rdzeni wspierających segmentowane wykonanie zadań 3D.
- Dodano wsparcie dla ZICOND, rozszerzenia architektury zestawu instrukcji RISC-V, które umożliwia warunkowe wykonanie operacji bez rozgałęziania.
- Kompilator OpenCL został przeniesiony na planowanie wykonania na poziomie pojedynczych wątków (thread-level, każdy wątek wykonuje swoją zadanie niezależnie od innych wątków), a nie grup zadań (warp-level), jak to było wcześniej.
- W OpenCL dodano wsparcie dla JIT-kompilacji oraz 64-bitowych rdzeni.
- Zrealizowano wsparcie dla dynamicznego ładowania Vortex runtime.
- Proponowana jest nowa dokumentacja dotycząca konfiguracji FPGA Xilinx.
- Włączono testowanie syntezy logiki z wykorzystaniem narzędzi Yosys.
- W hierarchicznych operacjach flush i w trybie write-back zapewniono wsparcie dla pamięci podręcznej.
- Przeprowadzono optymalizację prędkości weryfikacji scoreboard oraz operacji na poziomie rejestrów transferów (RTL, Register Transfer Level).
- Dodano wsparcie dla symulatora pamięci DRAM Ramulator 2.0.
- Zrealizowano przejście na nowe wersje Verilator 5.0 (symulator SystemVerilog) oraz LLVM 18.0, a także zaktualizowano narzędzia oparte na CentOS 7.9.
- Zamiast systemu ciągłej integracji Travis CI wykorzystano usługę GitHub CI.
Źródło: opennet.ru
