Le projet VeriGPU vise à créer un GPU ouvert, développé dans le langage de description et de modélisation des systèmes électroniques Verilog. Initialement, le projet est développé à l'aide d'un simulateur Verilog, mais une fois prêt, il pourra être utilisé pour la fabrication de puces réelles. Les contributions du projet sont diffusées sous licence MIT.
VeriGPU est positionné comme un processeur spécialisé (ASIC), optimisé pour accélérer les calculs liés aux systèmes d'apprentissage automatique. Les plans mentionnent d'assurer la compatibilité avec le cadre d'apprentissage automatique profond PyTorch et la mise en œuvre d'applications pour VeriGPU en utilisant l'API HIP (Heterogeneous-Compute Interface). À l'avenir, l'ajout de support pour d'autres API, telles que SYCL et NVIDIA CUDA, n'est pas exclu.
Le GPU est développé sur la base d'un ensemble d'instructions RISC-V, mais l'architecture interne finale de l'ensemble d'instructions GPU est faiblement compatible avec RISC-V ISA, car dans les situations où la conception du GPU ne tient pas compte de la représentation RISC-V, il n'est pas prévu de maintenir la compatibilité avec RISC-V. Le développement est axé sur les capacités nécessaires pour les systèmes d'apprentissage automatique, donc pour réduire la taille et la complexité de la matrice de puce, seul le format de calcul à virgule flottante BF16 est utilisé et seules les opérations à virgule flottante requises pour l'apprentissage automatique, telles que exp, log, tanh et sqrt, sont disponibles.
Parmi les composants déjà disponibles figurent le contrôleur GPU, l'APU (Accelerated Processing Unit) pour les opérations entières (« + », « - », « / », « * »), un bloc pour les opérations à virgule flottante (« + », « * ») et un bloc d'assistance aux branchements. Pour la création d'applications, un assembleur et le support de la compilation de code en C++ basé sur LLVM sont proposés. Parmi les fonctionnalités prévues, on note l'exécution parallèle des instructions, la mise en cache de la mémoire des données et des instructions, et les opérations SIMT (Single instruction multiple thread).

Source : opennet.ru
