Foi lançado o projeto Vortex 2.2, que desenvolve GPGPU baseado na arquitetura de conjunto de instruções RISC-V, projetado para realizar cálculos paralelos usando a API OpenCL e o modelo de execução SIMT (Single Instruction, Multiple Threads). O projeto também pode ser utilizado em pesquisas na área de gráficos 3D e no desenvolvimento de novas arquiteturas de GPU. Diagramas, descrições de blocos de hardware em Verilog, simulador, drivers e documentação do projeto são distribuídos sob a licença Apache 2.0.
A base do GPGPU é um ISA RISC-V padrão, expandido com algumas instruções adicionais necessárias para suportar as funções da GPU e o gerenciamento de fluxos. As mudanças na arquitetura do conjunto de instruções RISC-V são minimizadas, utilizando sempre que possível as instruções vetoriais já existentes. Entre as instruções adicionais estão: 'tex' para acelerar o processamento de texturas, vx_rast para controle de rasterização, vx_rop para processamento de fragmentos, profundidade e transparência, vx_imadd para a operação 'multiplicar e somar', vx_wspawn, vx_tmc e vx_bar para ativação de frentes de instruções e fluxos neles (wavefront, conjunto de fios executados em paralelo pelo SIMD Engine), vx_split e vx_join.

O GPGPU em desenvolvimento suporta arquiteturas de 32 e 64 bits do conjunto de instruções RISC-V RV32IMF e RV64IMAFD, e pode incluir memória compartilhada opcional, caches de níveis L1, L2 e L3, além de um número configurável de núcleos, blocos de tarefas (warps) e fluxos. Para cada núcleo, há a possibilidade de habilitar um número configurável de ALU, FPU, LSU e SFU. Para a criação de protótipos, podem ser utilizados FPGA Altera Arria 10, Altera Stratix 10, Xilinx Alveo U50, U250, U280 e Xilinx Versal VCK5000. Para simular o funcionamento do chip, podem ser utilizados Verilator (simulador Verilog), RTLSIM (simulação RTL) e SimX (simulação software).
Para o desenvolvimento de aplicações, é oferecido um conjunto de ferramentas que inclui versões adaptadas para trabalhar com Vortex de PoCL (compilador e runtime OpenCL), LLVM/Clang, GCC e Binutils. O projeto suporta a especificação OpenCL 1.2 e, através da tradução para OpenCL, implementou o suporte para a representação intermediária de shaders SPIR-V. Para gráficos nas tecnologias Vortex, está em desenvolvimento o GPU Skybox, que suporta a API gráfica Vulkan. O protótipo do Skybox, criado com base no FPGA Altera Stratix 10 e composto por 32 núcleos (512 threads), conseguiu alcançar um desempenho de preenchimento de 3.7 gigapixels por segundo (29.4 giga-transações por segundo) a uma frequência de 230 MHz.
Entre as mudanças na versão Vortex 2.2:
- Adicionado o API vx_spawn_taskgroups para iniciar núcleos que suportam a execução segmentada de tarefas 3D.
- Suporte adicionado para ZICOND, uma extensão da arquitetura do conjunto de instruções RISC-V, que fornece execução condicional de operações sem ramificações.
- O compilador OpenCL foi alterado para o agendamento de execução em nível de threads individuais (thread-level, onde cada thread executa sua própria tarefa independentemente das outras), em vez de grupos de tarefas (warp-level), como era antes.
- O OpenCL agora suporta compilação JIT e núcleos de 64 bits.
- Implementado suporte para carregamento dinâmico do ambiente de execução Vortex.
- Nova documentação sobre a configuração do FPGA Xilinx foi proposta.
- Incluído teste de síntese de lógica usando a ferramenta Yosys.
- Em operações hierárquicas flush e no modo write-back, o suporte à cache foi implementado.
- Otimização da velocidade de verificação de scoreboard e do trabalho com operandos em nível de transferências de registro (RTL, Register Transfer Level) foi realizada.
- Adicionado suporte para o simulador de memória DRAM Ramulator 2.0.
- Transição realizada para usar novas versões do Verilator 5.0 (simulador SystemVerilog) e LLVM 18.0, além de atualização das ferramentas baseadas em CentOS 7.9.
- O serviço GitHub CI foi utilizado em vez do sistema de integração contínua Travis CI.
Fonte: opennet.ru
