A new edition of the Vortex project has been released, developing an open GPGPU based on the RISC-V instruction set architecture, designed for performing parallel computations using the OpenCL API and the SIMT (Single Instruction, Multiple Threads) execution model. The project can also be used for research in the field of 3D graphics and for developing new GPU architectures. Schematics, descriptions of hardware blocks in Verilog, simulator, drivers, and related project documentation are distributed under the Apache 2.0 license.
The core of GPGPU is a typical RISC-V ISA, extended by some additional instructions necessary to support GPU functions and manage threads. At the same time, changes to the RISC-V instruction set architecture are minimized, and existing vector instructions are used wherever possible. A similar approach is applied in the RV64X project, which also develops an open GPU based on RISC-V technologies.

Key features of Vortex:
- Support for 32-bit and 64-bit RISC-V instruction set architectures RV32IMF and RV64IMAFD.
- Customizable number of cores, task blocks (warps), and threads.
- Customizable number of ALUs, FPUs, LSUs, and SFUs for each core.
- Customizable pipeline issue width.
- Optional shared memory and caches at levels L1, L2, and L3.
- Support for OpenCL 1.2 specification.
- Ability to implement on Altera Arria 10, Altera Stratix 10, Xilinx Alveo U50, U250, U280, and Xilinx Versal VCK5000 FPGA.
- Extended instructions: 'tex' for enhanced texture processing, vx_rast for rasterization management, vx_rop for fragment, depth, and transparency handling, vx_imadd for multiply-and-add operations, vx_wspawn, vx_tmc, and vx_bar for activating instruction and thread fronts (wavefront, a set of threads executed in parallel by SIMD Engine), vx_split and vx_join.
- Support for intermediate shader representation SPIR-V is implemented through translation to OpenCL.
- For application development, a toolkit is offered, including adapted versions of PoCL (OpenCL compiler and runtime), LLVM/Clang, GCC, and Binutils for working with Vortex.
- Chip operation simulation is supported using Verilator (Verilog simulator), RTLSIM (RTL simulation), and SimX (software simulation).
For graphics, the open GPU Skybox is being developed on Vortex technologies, supporting the Vulkan graphics API. The Skybox prototype, created on the Altera Stratix 10 FPGA and including 32 cores (512 threads), achieved a fill rate of 3.7 gigapixels per second (29.4 gigatransactions per second) at a frequency of 230 MHz. It is noted that this is the first open GPU with both software and hardware implementation supporting Vulkan.
Changes in version Vortex 2.1 include:
- The addition of the spawn_taskgroups API for launching kernels using local memory and supporting memory barrier setting.
- A new extension for creating relocatable binary kernels has been proposed.
- Calls vx_mem_reserve, vx_mem_access, and vx_mem_address have been added to the memory management API.
- A new runtime API vx_check_occupancy has been introduced.
- The GPU driver has been updated with an option to check OpenCL tests on the local GPU.
- OpenCL tests utilizing local memory (psum, sgemm2, sgemm3) have been added.
- Library adaptations of libc and librt specifically tailored for Vortex have been introduced.
- Support for merging adjacent free memory blocks (memory coalescing) has been added.
- Microarchitecture optimizations have been conducted.
- A new build script has been added that separates source files from the build directory.
Source: opennet.ru
