Projekt Vortex 3.0, który rozwija procesor GPGPU typu open source oparty na architekturze zestawu instrukcji RISC-V i przeznaczony do obliczeń równoległych z wykorzystaniem interfejsu API OpenCL oraz modelu wykonania SIMT (Single Instruction, Multiple Threads), jest już dostępny. Projekt może być również wykorzystywany do badań nad grafiką 3D i rozwoju nowych architektur GPU. Schematy, opisy bloków sprzętowych w języku Verilog, symulator, sterowniki i towarzysząca dokumentacja projektowa są rozpowszechniane na licencji Apache 2.0.
GPGPU opiera się na standardowym ISA RISC-V, rozszerzonym o dodatkowe instrukcje obsługujące funkcje GPU i zarządzanie wątkami. Zmiany w architekturze zestawu instrukcji RISC-V są ograniczone do minimum, a istniejące instrukcje wektorowe są wykorzystywane, gdy tylko jest to możliwe. Dodatkowe instrukcje obejmują: „tex” do przyspieszania przetwarzania tekstur; vx_rast do sterowania rasteryzacją; vx_rop do przetwarzania fragmentów, głębi i przezroczystości; vx_imadd do operacji mnożenia i dodawania; vx_wspawn, vx_split, vx_join, vx_tmc i vx_bar do aktywowania grup wątków (frontów fali) wykonywanych równolegle przez silnik SIMD.

Opracowywany układ GPGPU obsługuje 32- i 64-bitowe architektury zestawów instrukcji RISC-V RV32IMF i RV64IMAFD i może zawierać opcjonalną pamięć współdzieloną, pamięci podręczne L1, L2 i L3 oraz konfigurowalną liczbę rdzeni, rdzeni warp i wątków. Każdy rdzeń może również zawierać konfigurowalną liczbę jednostek ALU, FPU, LSU i SFU. Do prototypowania można użyć układów FPGA Xilinx i Altera, a do symulacji układów scalonych – Verilator (symulator Verilog), RTLSIM (symulacja RTL) i SimX (symulacja programowa).
Do tworzenia aplikacji oferowany jest zestaw narzędzi, w tym wersje PoCL (kompilator i środowisko uruchomieniowe OpenCL) dostosowane do Vortex, LLVM/Clang, GCC i Binutils. Projekt obsługuje specyfikację OpenCL 1.2 i implementuje obsługę pośredniej reprezentacji shaderów SPIR-V poprzez translację do OpenCL.
Zmiany w Vortex 3.0 obejmują:
- Dodano sprzętowy stos graficzny, obejmujący bloki do rasteryzacji, mapowania tekstur i scalania danych wyjściowych (OM). Sterownik Vulkan, vortexpipe, został opracowany dla Mesa w oparciu o zaimplementowany stos graficzny i programowy rasteryzator lavapipe.
- Rozszerzono możliwości rdzenia Tensor Core, zaprojektowanego w celu przyspieszenia wykonywania modeli uczenia maszynowego, poprzez wprowadzenie obsługi strukturalnej rzadkości w celu kompresji macierzy wag.
- Operacja WGMMA (mnożenie macierzy na poziomie grupy warp) została zaimplementowana w celu mnożenia macierzy w trybie asynchronicznym.
- Dodano silnik DXA (Data Transfer Acceleration) w celu przyspieszenia transferu danych z pamięci globalnej do lokalnej.
- Zastosowano nową architekturę opartą na procesorze poleceń (CP) i sprzętowym harmonogramie rdzeni obliczeniowych (KMU - Kernel Management Unit), co pozwala na wysyłanie wątków obliczeniowych do układu scalonego.
- Zaproponowano nową bibliotekę środowiska uruchomieniowego, która działa w trybie nieblokującym i udostępnia abstrakcje, które przekładają się na asynchronicznie wykonywane polecenia sprzętowe. Obsługiwane są kolejki, zdarzenia, moduły i synchronizacja oparta na asynchronicznych barierach z semantyką przybycia/oczekiwania/zdarzenia.
- Dodano obsługę skróconych instrukcji RISC-V (RVC).
- Wprowadzono sprzętowe wsparcie dla operacji atomowych (Hardware Atomics).
- Jednostka FPU została całkowicie przeprojektowana i wprowadzono nowe bloki mnożnika (Wallace-tree, Folded-radix) oraz sumatora (Kogge-Stone).
- Dodano wirtualny stos pamięci oparty na jednostce zarządzania pamięcią (MMU) ze wsparciem dla 32-bitowej architektury adresowania wirtualnego SV32.
- Wsparcie dla rozszerzenia RISC-V Zicond z implementacją operacji warunkowych.
- Zintegrowane bramkowanie zegara.
- Obsługa języka HIP (Heterogeneous Interface for Portability) została wdrożona za pośrednictwem frameworka chipStar, który tłumaczy HIP na SPIR-V.
- Zapewniono pełną integrację z symulatorem GEM5 i dodano obsługę symulatora SimX w architekturze TLM (Transaction-Level Modeling).
- Dodano obsługę zestawów narzędzi Synopsys i Yosys do syntezy logiki na potrzeby produkcji układów scalonych, a także obsługę korzystania ze standardowych bibliotek elementów ASAP7 (7 nm), SAED14 (14 nm) i NanGate (15 nm).
- Zestaw narzędzi referencyjnych został zaktualizowany do wersji LLVM 20 i POCL 7.0.
Źródło: opennet.ru
