La deuxième édition du projet Vortex, qui développe un GPGPU ouvert basé sur l'architecture de jeu d'instructions RISC-V, est publiée. Ce projet est conçu pour exécuter des calculs parallèles en utilisant l'API OpenCL et le modèle d'exécution SIMT (Single Instruction, Multiple Threads). Il peut également être utilisé pour mener des recherches dans le domaine de la 3D et pour le développement de nouvelles architectures GPU. Les schémas, descriptions des blocs matériels en Verilog, simulateur, pilotes et documentation de projet associée sont distribués sous licence Apache 2.0.
Le GPGPU repose sur un ISA RISC-V standard, enrichi de certaines instructions supplémentaires nécessaires pour le support des fonctions GPU et la gestion des flux. Les modifications de l'architecture du jeu d'instructions RISC-V sont minimisées et utilisent autant que possible les instructions vectorielles existantes. Une approche similaire est appliquée dans le projet RV64X, qui développe également un GPU ouvert basé sur les technologies RISC-V.

Pour les graphiques basés sur la technologie Vortex, un GPU Skybox ouvert est en cours de développement, prenant en charge l'API graphique Vulkan. Le prototype Skybox, construit sur une base FPGA Altera Stratix 10 et intégrant 32 cœurs (512 threads), a permis d'atteindre une performance de remplissage de 3,7 gigapixels par seconde (29,4 gigatransactions par seconde) à une fréquence de 230 MHz. Il est à noter qu'il s'agit du premier GPU ouvert avec une mise en œuvre matérielle et logicielle prenant en charge Vulkan.
Caractéristiques principales de Vortex :
- Support des architectures de jeu d'instructions RISC-V 32 et 64 bits, RV32IMF et RV64IMAFD.
- Nombre de cœurs, de blocs de tâches (warps) et de threads réglable.
- Nombre configurable d'ALU, de FPU, de LSU et de SFU pour chaque cœur.
- Largeur de sortie de pipeline configurable.
- Mémoire partagée et caches optionnels de niveaux L1, L2 et L3.
- Support de la spécification OpenCL 1.2.
- Possibilité d'implémentation sur FPGA Altera Arria 10, Altera Stratix 10, Xilinx Alveo U50, U250, U280 et Xilinx Versal VCK5000.
- Instructions avancées : «tex» pour accélérer le traitement des textures, vx_rast pour la gestion du raster, vx_rop pour le traitement des fragments, de la profondeur et de la transparence, vx_imadd pour exécuter l'opération «multiplier et additionner», vx_wspawn, vx_tmc et vx_bar pour activer les fronts d'instructions et les threads associés (wavefront, ensemble de threads exécutés simultanément par SIMD Engine), vx_split et vx_join.
- Le support de la représentation intermédiaire des shaders SPIR-V est réalisé via la traduction en OpenCL.
- Pour le développement d'applications, un ensemble d'outils est proposé, incluant des variantes PoCL adaptées pour travailler avec Vortex (compilateur et runtime OpenCL), LLVM/Clang, GCC et Binutils.
- La simulation du fonctionnement de la puce est supportée à l'aide de Verilator (simulateur Verilog), RTLSIM (simulation RTL) et SimX (simulation logicielle).
Parmi les changements dans la version Vortex 2.0 :
- Optimisation de l'architecture micro.
- Ajout de la prise en charge de l'architecture 64 bits du jeu d'instructions RISC-V RV64IMAFD.
- Ajout de la possibilité de mise en œuvre sur des FPGA Xilinx.
- Ajout du support de LLVM 16 et Ubuntu 20.04.
- Refactoring effectué et corrections des défauts identifiés lors de l'évaluation de la qualité.
Source : opennet.ru
