Opublikowano nową wersję projektu Vortex, rozwijającego otwartą architekturę GPGPU opartą na zestawie instrukcji RISC-V, zaprojektowaną do wykonywania obliczeń równoległych przy użyciu API OpenCL i modelu wykonawczego SIMT (Single Instruction, Multiple Threads). Projekt może być również wykorzystany w badaniach z zakresu grafiki 3D oraz przy tworzeniu nowych architektur GPU. Schematy, opisy bloków sprzętowych w języku Verilog, symulator, sterowniki i towarzysząca dokumentacja projektowa są dostępne 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.

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).
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.
Wśród zmian w wersji Vortex 2.1:
- Dodano API spawn_taskgroups do uruchamiania rdzeni korzystających z lokalnej pamięci i wspierających ustawianie barier dla pamięci.
- Zaproponowano nowe rozszerzenie do tworzenia przenośnych (relocatable) binarnych rdzeni.
- W API zarządzania pamięcią dodano wywołania vx_mem_reserve, vx_mem_access oraz vx_mem_address.
- Dodano nowe API runtime vx_check_occupancy.
- Do sterownika GPU dodano opcję do sprawdzania testów OpenCL na lokalnym GPU.
- Dodano testy OpenCL korzystające z lokalnej pamięci (psum, sgemm2, sgemm3).
- Dodano specjalnie dostosowane dla Vortex edycje bibliotek libc i librt.
- Dodano wsparcie dla łączenia sąsiednich wolnych bloków pamięci (memory coalescing).
- Przeprowadzono optymalizację mikroarchitektury.
- Dodano nowy skrypt kompilacyjny, oddzielający pliki źródłowe od katalogu kompilacji.
Źródło: opennet.ru
