Publicada uma nova edição do projeto Vortex, que desenvolve um GPGPU aberto 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. Esquemas, descrições de blocos de hardware em linguagem Verilog, simulador, drivers e documentação de projeto correspondente são distribuídos sob a licença Apache 2.0.
A base do GPGPU é um ISA típico RISC-V, 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 e, sempre que possível, utiliza-se instruções vetoriais já existentes. Uma abordagem semelhante é aplicada no projeto RV64X, que também desenvolve uma GPU aberta baseada em tecnologias RISC-V.

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 (pipeline issue width) configurável.
- Memória compartilhada opcional e caches de níveis L1, L2 e L3.
- Suporte para a especificação OpenCL 1.2.
- Possibilidade de implementação baseada em FPGA Altera Arria 10, Altera Stratix 10, Xilinx Alveo U50, U250, U280 e Xilinx Versal VCK5000.
- Instruções avançadas: «tex» para acelerar o processamento de texturas, vx_rast para gerenciar a rasterização, vx_rop para processar fragmentos, profundidade e transparência, vx_imadd para a operação «multiplicar e somar», vx_wspawn, vx_tmc e vx_bar para ativar os frentes de instruções e os fluxos dentro delas (wavefront, conjunto de threads, executadas paralelamente por SIMD Engine), vx_split e vx_join.
- Suporte à representação intermediária de shaders SPIR-V é implementado através da translação para OpenCL.
- Para desenvolvimento de aplicações, é oferecida uma ferramenta que inclui variantes adaptadas do PoCL (compilador e runtime OpenCL), LLVM/Clang, GCC e Binutils para trabalhar com Vortex.
- É suportada a simulação de funcionamento do chip utilizando Verilator (simulador Verilog), RTLSIM (simulação RTL) e SimX (simulação de software).
Para gráficos baseados em tecnologia Vortex, está em desenvolvimento a GPU Skybox aberta, que suporta a API gráfica Vulkan. O protótipo Skybox, criado com FPGA Altera Stratix 10 e contendo 32 núcleos (512 threads), conseguiu, a uma frequência de 230 MHz, alcançar um desempenho de preenchimento de 3,7 gigapixels por segundo (29,4 gigatransações por segundo). Vale ressaltar que esta é a primeira GPU aberta com implementação de software e hardware que suporta Vulkan.
Entre as mudanças na versão Vortex 2.1:
- Adicionado o API spawn_taskgroups para iniciar núcleos que usam memória local e suportam a definição de barreiras na memória.
- Proposto uma nova extensão para criação de núcleos binários relocáveis.
- Adicionados chamados vx_mem_reserve, vx_mem_access e vx_mem_address na API de gerenciamento de memória.
- Adicionado um novo API de runtime vx_check_occupancy.
- Adicionada uma opção ao driver da GPU para verificar testes OpenCL na GPU local.
- Adicionados testes OpenCL que utilizam memória local (psum, sgemm2, sgemm3).
- Foram incluídas edições da biblioteca libc e librt adaptadas especialmente para Vortex.
- Adicionado suporte para fusão de blocos livres de memória adjacentes (memory coalescing).
- Realizada a otimização da microarquitetura.
- Adicionado um novo script de build que separa os arquivos fonte do diretório de build.
Fonte: opennet.ru
