Den nye version af Vortex-projektet er offentliggjort, som udvikler en åben GPGPU baseret på RISC-V instruktionssættet, designet til parallelle beregninger ved hjælp af OpenCL API og SIMT (Single Instruction, Multiple Threads) udførelsesmodel. Projektet kan også anvendes til forskning inden for 3D-grafik og til udvikling af nye GPU-arkitekturer. Skemaer, beskrivelser af hardwareblokke i Verilog, simulator, drivere og tilhørende projektdokumentation distribueres under Apache 2.0 licensen.
GPGPU'en er baseret på en standard RISC-V ISA, udvidet med nogle ekstra instruktioner, der er nødvendige for at understøtte GPU-funktioner og trådadministration. Ændringer i RISC-V instruktionssættet er minimaliseret, og eksisterende vektorinstruktioner anvendes så vidt muligt. En lignende tilgang anvendes i projektet RV64X, som også udvikler en åben GPU baseret på RISC-V teknologier.

Hovedfunktioner i Vortex:
- Understøttelse af 32- og 64-bit RISC-V instruktionssæt arkitekturer RV32IMF og RV64IMAFD.
- Konfigurerbart antal kerner, opgaveblokke (warps) og tråde.
- Konfigurerbart antal ALU, FPU, LSU og SFU for hver kerne.
- Konfigurerbar udgivelsesbredde af pipelinen (pipeline issue width).
- Valgfri delt hukommelse og niveauerne L1, L2 og L3 caches.
- Understøttelse af OpenCL 1.2 specifikationen.
- Mulighed for implementering på Altera Arria 10, Altera Stratix 10, Xilinx Alveo U50, U250, U280 og Xilinx Versal VCK5000.
- Udvidede instruktioner: «tex» til at accelerere teksturbehandling, vx_rast til at styre rasterisering, vx_rop til fragmentbehandling, dybde og transparens, vx_imadd til at udføre operationen «multiplicer og læg sammen», vx_wspawn, vx_tmc og vx_bar til at aktivere fronten af instruktionerne og trådene i dem (wavefront, sæt af tråde, der udføres parallelt i SIMD Engine), vx_split og vx_join.
- Understøttelse af det mellemliggende shader repræsentation SPIR-V implementeres gennem oversættelse til OpenCL.
- Til udvikling af applikationer tilbydes et værktøjssæt, der inkluderer tilpassede versioner af PoCL (kompilator og runtime OpenCL), LLVM/Clang, GCC og Binutils til arbejde med Vortex.
- Der understøttes simulering af chipens drift ved hjælp af Verilator (Verilog-simulator), RTLSIM (RTL-simulering) og SimX (software-simulering).
Til grafik er Vortex ved at udvikle en åben GPU kaldet Skybox, som understøtter Vulkan grafik API'et. Prototypen Skybox, bygget på Altera Stratix 10 FPGA og omfatter 32 kerner (512 tråde), har opnået en fyldehastighed på 3,7 gigapixler per sekund (29,4 gigatransaktioner per sekund) ved en klokfrekvens på 230 MHz. Det bemærkes, at dette er den første åbne GPU med både software- og hardwareimplementering, der understøtter Vulkan.
Blandt ændringerne i Vortex 2.1:
- API'et spawn_taskgroups er tilføjet til at starte kerner, der bruger lokal hukommelse og understøtter hukommelsesbarrierer.
- Et nyt udvidelse til oprettelse af flytbare (relocatable) binære kerner er foreslået.
- I hukommelsesadministrations-API'et er der tilføjet opkald til vx_mem_reserve, vx_mem_access og vx_mem_address.
- Et nyt runtime API vx_check_occupancy er tilføjet.
- En mulighed for at kontrollere OpenCL-test på lokal GPU er tilføjet i GPU-driveren.
- OpenCL-test, der bruger lokal hukommelse (psum, sgemm2, sgemm3), er tilføjet.
- Bibliotekerne libc og librt er tilpasset specifikt til Vortex.
- Støtte til sammensmeltning af nærliggende frie hukommelsesblokke (memory coalescing) er tilføjet.
- Mikroarkitekturen er blevet optimeret.
- Et nyt bygge-script er tilføjet, som adskiller kildefiler fra bygge-mappen.
Kilde: opennet.ru
