Foi publicada a segunda edição do projeto Vortex, que desenvolve um GPGPU aberto baseado na arquitetura do conjunto de instruções RISC-V, projetado para executar cálculos paralelos utilizando a API OpenCL e o modelo de execução SIMT (Single Instruction, Multiple Threads). O projeto também pode ser utilizado para pesquisas em gráficos 3D e no desenvolvimento de novas arquiteturas de GPU. Esquemas, descrições de blocos de hardware em Verilog, simuladores, drivers e documentação de projeto relacionada são distribuídos sob a licença Apache 2.0.
A base do GPGPU é o ISA típico RISC-V, expandido com algumas instruções adicionais necessárias para suportar funções de GPU e gerenciamento de fluxos. As alterações na arquitetura do conjunto de instruções RISC-V foram minimizadas e, sempre que possível, utiliza-se as instruções vetoriais já existentes. Uma abordagem semelhante é aplicada no projeto RV64X, que também desenvolve uma GPU aberta baseada em tecnologias RISC-V.

Para gráficos com tecnologias Vortex, está sendo desenvolvido o GPU Skybox aberto, que suporta a API gráfica Vulkan. O protótipo do Skybox, criado com a FPGA Altera Stratix 10 e incluindo 32 núcleos (512 threads), permitiu alcançar uma taxa de preenchimento de 3,7 gigapixels por segundo (29,4 gigatransações por segundo) a uma frequência de 230 MHz. Ressalta-se que este é o primeiro GPU aberto com implementação de software e hardware que suporta Vulkan.
Principais características do Vortex:
- Suporte para arquiteturas de conjunto de instruções RISC-V de 32 e 64 bits RV32IMF e RV64IMAFD.
- Número configurável de núcleos, blocos de tarefas (warps) e threads.
- Número configurável de ALU, FPU, LSU e SFU para cada núcleo.
- Largura de emissão do pipeline configurável.
- Memória compartilhada opcional e caches nos níveis L1, L2 e L3.
- Suporte para a especificação OpenCL 1.2.
- Possibilidade de implementação em FPGA Altera Arria 10, Altera Stratix 10, Xilinx Alveo U50, U250, U280 e Xilinx Versal VCK5000.
- Instruções extendidas: «tex» para acelerar o processamento de texturas, vx_rast para gerenciamento de rasterização, vx_rop para processamento de fragmentos, profundidade e transparência, vx_imadd para realizar a operação «multiplicar e somar», vx_wspawn, vx_tmc e vx_bar para ativar frentes de instrução e fluxos nelas (wavefront, conjunto de threads, executados paralelamente pelo SIMD Engine), vx_split e vx_join.
- Suporte para representação intermediária de shaders SPIR-V realizada através de tradução para OpenCL.
- Para o desenvolvimento de aplicações, está disponível um conjunto de ferramentas que inclui versões adaptadas para trabalhar com Vortex do PoCL (compilador e runtime OpenCL), LLVM/Clang, GCC e Binutils.
- Suporte para simulação do funcionamento do chip utilizando Verilator (simulador Verilog), RTLSIM (simulação RTL) e SimX (simulação em software).
Entre as mudanças na versão Vortex 2.0:
- Otimização da microarquitetura realizada.
- Suporte adicionado para a arquitetura de conjunto de instruções RISC-V 64 bits RV64IMAFD.
- Possibilidade de implementação em FPGA Xilinx adicionada.
- Suporte adicionado para LLVM 16 e Ubuntu 20.04.
- Refatoração realizada e correções de falhas identificadas na avaliação de qualidade.
Fonte: opennet.ru
