Está disponível a versão do projeto Vortex 3.0, que desenvolve um GPGPU baseado na arquitetura do conjunto de instruções RISC-V, projetado para realizar 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 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, simuladores, 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, ampliado com instruções adicionais 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, quando possível, utilizam 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 realizar a operação «multiplicar e somar»; vx_wspawn, vx_split, vx_join, vx_tmc e vx_bar para ativar grupos de fluxos (wavefront) executados em paralelo pelos SIMD Engines.

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, assim como um número configurável de núcleos, blocos de tarefas (warps) e fluxos. Para cada núcleo, há a opção de ativar um número configurável de ALU, FPU, LSU e SFU. Para criação de protótipos, podem ser utilizados FPGAs da Xilinx e Altera, e para simulação do funcionamento do chip, Verilator (simulador Verilog), RTLSIM (simulação RTL) e SimX (simulação de software) podem ser aplicados.
Para o desenvolvimento de aplicações, é oferecido um conjunto de ferramentas, incluindo versões adaptadas do PoCL (compilador e runtime OpenCL) para trabalhar com o Vortex, LLVM/Clang, GCC e Binutils. O projeto suporta a especificação OpenCL 1.2 e, através da tradução para OpenCL, implementa suporte para a representação intermediária de shaders SPIR-V.
Entre as mudanças no Vortex 3.0:
- Adicionado um stack gráfico de hardware, incluindo blocos para rasterização, sobreposição de texturas e mesclagem de saída (OM - Output Merger). Para o Mesa, com base no stack gráfico implementado e no rasterizador de software lavapipe, um driver Vulkan vortexpipe foi preparado.
- As capacidades do núcleo tensor foram ampliadas para acelerar a execução de modelos de aprendizado de máquina, com suporte à esparsidade estruturada para compactação de matrizes de pesos.
- Foi implementada a operação WGMMA (multiplicação de matrizes em nível de grupo de warps) para multiplicação de matrizes em modo assíncrono.
- Adicionado o mecanismo DXA (Aceleração de Transferência de Dados) para agilizar a transferência de dados da memória global para a memória local.
- Uma nova arquitetura baseada em processador de comandos (CP, Command Processor) e um planejador de hardware para núcleos computacionais (KMU — Kernel Management Unit) foi implementada, permitindo a execução de operações de despacho de fluxos computacionais fora do chip.
- Uma nova biblioteca runtime foi proposta, operando em modo não bloqueante e fornecendo abstrações que se traduzem em comandos executáveis assíncronamente no hardware. Suporte a filas, eventos, módulos e sincronização baseada em barreiras assíncronas com semântica de chegada/espera/evento.
- Suporte adicionado para instruções encurtadas RISC-V (RVC).
- Suporte de hardware para operações atômicas foi implementado.
- O FPU foi completamente redesenhado e novos blocos de multiplicadores (Wallace-tree, Folded-radix) e somadores (Kogge-Stone) foram propostos.
- Adicionado um sistema de empilhamento de memória virtual baseado em uma unidade de gerenciamento de memória (MMU) com suporte para arquitetura de endereçamento virtual de 32 bits SV32.
- Suporte à extensão RISC-V Zicond com implementação de operações condicionais.
- Integração do controle de frequência (clock gating).
- Suporte foi adicionado para a linguagem HIP (Heterogeneous Interface for Portability) através da estrutura chipStar, que traduz HIP para SPIR-V.
- Uma integração completa com o simulador GEM5 foi assegurada, e suporte ao simulador SimX na arquitetura TLM (Modelagem em Nível de Transação) foi adicionado.
- Suporte para ferramentas Synopsys e Yosys para síntese de lógica para fabricação de chips, além do suporte ao uso de bibliotecas de elementos padrão ASAP7 (7nm), SAED14 (14nm) e NanGate (15nm) foi adicionado.
- A ferramenta de referência foi atualizada para LLVM 20 e POCL 7.0.
Fonte: opennet.ru
