Opublikowana została druga edycja projektu Vortex, rozwijającego otwarty GPGPU oparty na architekturze zestawu instrukcji RISC-V, zaprojektowany do wykonywania obliczeń równoległych z wykorzystaniem API OpenCL i modelu wykonywania SIMT (Single Instruction, Multiple Threads). Projekt może być także wykorzystywany w badaniach z zakresu grafiki 3D oraz w opracowywaniu nowych architektur GPU. Schematy, opisy bloków sprzętowych w języku Verilog, symulator, sterowniki oraz dokumentacja projektowa są udostępniane na licencji Apache 2.0.
Podstawą GPGPU jest typowy ISA RISC-V, rozszerzony o dodatkowe instrukcje, które są niezbędne do wsparcia funkcji GPU i zarządzania strumieniami. Zmiany w architekturze zestawu instrukcji RISC-V są minimalne, a w miarę możliwości wykorzystywane są już istniejące instrukcje wektorowe. Podobne podejście stosowane jest w projekcie RV64X, który także rozwija otwarty GPU oparty na technologiach RISC-V.

Dla grafiki w technologiach Vortex rozwijany jest otwarty GPU Skybox, wspierający graficzne API Vulkan. Prototyp Skybox, wykonany na bazie FPGA Altera Stratix 10 i zawierający 32 rdzenie (512 wątków), osiągnął przy częstotliwości 230 MHz wydajność na poziomie 3.7 gigapikseli na sekundę (29.4 gigatransakcji na sekundę). Zauważono, że jest to pierwszy otwarty GPU z programową i sprzętową realizacją, który wspiera Vulkan.
Główne cechy Vortex:
- Wsparcie dla 32- i 64-bitowych architektur zestawu instrukcji RISC-V RV32IMF i RV64IMAFD.
- Konfigurowalna liczba rdzeni, bloków zadań (warps) i wątków.
- Konfigurowalna liczba ALU, FPU, LSU i SFU dla każdego rdzenia.
- Konfigurowana szerokość wydania potoku (pipeline issue width).
- Opcjonalna pamięć dzielona oraz pamięci podręczne poziomów L1, L2 i L3.
- Wsparcie dla specyfikacji OpenCL 1.2.
- Możliwość realizacji na bazie FPGA Altera Arria 10, Altera Stratix 10, Xilinx Alveo U50, U250, U280 oraz Xilinx Versal VCK5000.
- Rozszerzone instrukcje: «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.
- Wsparcie dla pośredniej reprezentacji shadery SPIR-V realizowane jest poprzez translację do OpenCL.
- Do tworzenia aplikacji dostępne są narzędzia, w tym dostosowane do pracy z Vortex wersje PoCL (kompilator i runtime OpenCL), LLVM/Clang, GCC i Binutils.
- Obsługiwana jest symulacja działania układu przy użyciu Verilator (symulator Verilog), RTLSIM (symulacja RTL) i SimX (symulacja programowa).
Wśród zmian w wersji Vortex 2.0:
- Przeprowadzono optymalizację mikroarchitektury.
- Dodano wsparcie dla 64-bitowej architektury zestawu instrukcji RISC-V RV64IMAFD.
- Dodano możliwość implementacji na podstawie FPGA Xilinx.
- Dodano wsparcie dla LLVM 16 i Ubuntu 20.04.
- Przeprowadzono refaktoryzację i wprowadzono poprawki niedoróbek wykrytych podczas oceny jakości.
Źródło: opennet.ru
