ДоступСн Vortex 2.2, ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ GPGPU Π½Π° Π±Π°Π·Π΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ RISC-V

ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ выпуск ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Vortex 2.2, Ρ€Π°Π·Π²ΠΈΠ²Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ GPGPU Π½Π° Π±Π°Π·Π΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ Π½Π°Π±ΠΎΡ€Π° ΠΊΠΎΠΌΠ°Π½Π΄ RISC-V, рассчитанный Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… вычислСний с использованиСм API OpenCL ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ выполнСния SIMT (Single Instruction, Multiple Threads). ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использован ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ исслСдований Π² области 3D-Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ ΠΈ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π½ΠΎΠ²Ρ‹Ρ… Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ GPU. Π‘Ρ…Π΅ΠΌΡ‹, описания Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ² Π½Π° языкС Verilog, симулятор, Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹ ΠΈ ΡΠΎΠΏΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ проСктная докумСнтация Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡŽΡ‚ΡΡ ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ Apache 2.0.

ΠžΡΠ½ΠΎΠ²Ρƒ GPGPU составляСт Ρ‚ΠΈΠΏΠΎΠ²ΠΎΠΉ ISA RISC-V, Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΉ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ инструкциями, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌΠΈ для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ GPU ΠΈ управлСния ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ. ΠŸΡ€ΠΈ этом измСнСния Π² Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ Π½Π°Π±ΠΎΡ€Π° ΠΊΠΎΠΌΠ°Π½Π΄ RISC-V свСдСны ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΡƒ ΠΈ ΠΏΠΎ возмоТности ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡƒΠΆΠ΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ΡΡ Π²Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹Π΅ инструкции. Π‘Ρ€Π΅Π΄ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… инструкций ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ: «tex» для ускорСния ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ тСкстур, vx_rast для управлСния растСризациСй, vx_rop для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠ², Π³Π»ΡƒΠ±ΠΈΠ½Ρ‹ ΠΈ прозрачности, vx_imadd для выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ «ΡƒΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ ΠΈ ΡΠ»ΠΎΠΆΠΈΡ‚ΡŒ», vx_wspawn, vx_tmc ΠΈ vx_bar для Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ Ρ„Ρ€ΠΎΠ½Ρ‚ΠΎΠ² инструкций ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π² Π½ΠΈΡ… (wavefront, Π½Π°Π±ΠΎΡ€ Π½ΠΈΡ‚Π΅ΠΉ, ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ выполняСмых SIMD Engine), vx_split ΠΈ vx_join.

ДоступСн Vortex 2.2, ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ GPGPU Π½Π° Π±Π°Π·Π΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ RISC-V

Π Π°Π·Π²ΠΈΠ²Π°Π΅ΠΌΡ‹ΠΉ GPGPU ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ 32- ΠΈ 64-разрядныС Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ Π½Π°Π±ΠΎΡ€Π° ΠΊΠΎΠΌΠ°Π½Π΄ RISC-V RV32IMF ΠΈ RV64IMAFD, ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΡƒΡŽ Ρ€Π°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ, кэши ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ L1, L2 ΠΈ L3, Π° Ρ‚Π°ΠΊΠΆΠ΅ настраиваСмоС число ядСр, Π±Π»ΠΎΠΊΠΎΠ² Π·Π°Π΄Π°Ρ‡ (warps) ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². Π’ свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ядра прСдусмотрСна Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ настраиваСмого числа ALU, FPU, LSU ΠΈ SFU. Для создания ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΎΠ² ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ FPGA Altera Arria 10, Altera Stratix 10, Xilinx Alveo U50, U250, U280 ΠΈ Xilinx Versal VCK5000. Для симуляции Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ‡ΠΈΠΏΠ° ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Verilator (Verilog-симулятор), RTLSIM (симуляция RTL) ΠΈ SimX (программная симуляция).

Для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ прСдлагаСтся инструмСнтарий, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΉ Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Vortex Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ PoCL (компилятор ΠΈ runtime OpenCL), LLVM/Clang, GCC ΠΈ Binutils. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ поддСрТиваСтся спСцификация OpenCL 1.2 ΠΈ Ρ‡Π΅Ρ€Π΅Π· Ρ‚Ρ€Π°Π½ΡΠ»ΡΡ†ΠΈΡŽ Π² OpenCL Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ прСдставлСния ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ² SPIR-V. Для Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ Π½Π° тСхнологиях Vortex развиваСтся ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ GPU Skybox, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ графичСский API Vulkan. ΠŸΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ Skybox, созданный Π½Π° Π±Π°Π·Π΅ FPGA Altera Stratix 10 ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΉ 32 ядра (512 ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²), ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ» ΠΏΡ€ΠΈ частотС 230 MHz Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π·Π°Π»ΠΈΠ²ΠΊΠΈ Π² 3.7 гигапиксСлСй Π² сСкунду (29.4 Π³ΠΈΠ³Π°Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π² сСкунду).

Π‘Ρ€Π΅Π΄ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² вСрсии Vortex 2.2:

  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½ API vx_spawn_taskgroups для запуска ядСр, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… сСгмСнтированноС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ 3D-Π·Π°Π΄Π°Ρ‡.
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ZICOND, Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ Π½Π°Π±ΠΎΡ€Π° ΠΊΠΎΠΌΠ°Π½Π΄ RISC-V, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰Π΅Π΅ условноС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π±Π΅Π· вСтвлСния.
  • ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ OpenCL ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Ρ‘Π½ Π½Π° ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ выполнСния Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² (thread-level, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ выполняСт свою Π·Π°Π΄Π°Ρ‡Ρƒ нСзависимо ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²), Π° Π½Π΅ Π³Ρ€ΡƒΠΏΠΏ Π·Π°Π΄Π°Ρ‡ (warp-level), ΠΊΠ°ΠΊ Π±Ρ‹Π»ΠΎ Ρ€Π°Π½ΡŒΡˆΠ΅.
  • Π’ OpenCL Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° JIT-компиляции ΠΈ 64-разрядных ядСр.
  • Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° динамичСской Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Vortex runtime.
  • ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π° новая докумСнтация ΠΏΠΎ настройкС FPGA Xilinx.
  • Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ тСстированиС синтСза Π»ΠΎΠ³ΠΈΠΊΠΈ с использованиСм инструмСнтария Yosys.
  • Π’ иСрархичСских опСрациях flush ΠΈ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ write-back обСспСчСна ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° кэша.
  • ΠŸΡ€ΠΎΠ²Π΅Π΄Π΅Π½Π° оптимизация скорости scoreboard-Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π°ΠΌΠΈ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ рСгистровых ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ (RTL, Register Transfer Level).
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° симулятора DRAM-памяти Ramulator 2.0.
  • ΠžΡΡƒΡ‰Π΅ΡΡ‚Π²Π»Ρ‘Π½ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° использованиС Π½ΠΎΠ²Ρ‹Ρ… вСрсий Verilator 5.0 (симулятор SystemVerilog) ΠΈ LLVM 18.0, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Ρ‘Π½ инструмСнтарий Π½Π° Π±Π°Π·Π΅ CentOS 7.9.
  • ВмСсто систСмы Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ Travis CI задСйствован сСрвис GitHub CI.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru