ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ Vortex 2.1, ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ GPGPU Π½Π° Π±Π°Π·Π΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ RISC-V

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

ΠžΡΠ½ΠΎΠ²Ρƒ GPGPU составляСт Ρ‚ΠΈΠΏΠΎΠ²ΠΎΠΉ ISA RISC-V, Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΉ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ инструкциями, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌΠΈ для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ GPU ΠΈ управлСния ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ. ΠŸΡ€ΠΈ этом измСнСния Π² Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ Π½Π°Π±ΠΎΡ€Π° ΠΊΠΎΠΌΠ°Π½Π΄ RISC-V свСдСны ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΡƒ ΠΈ ΠΏΠΎ возмоТности ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡƒΠΆΠ΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ΡΡ Π²Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹Π΅ инструкции. ΠŸΠΎΡ…ΠΎΠΆΠΈΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ примСняСтся Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ RV64X, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π·Π²ΠΈΠ²Π°Π΅Ρ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ GPU Π½Π° Π±Π°Π·Π΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ RISC-V.

ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ Vortex 2.1, ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ GPGPU Π½Π° Π±Π°Π·Π΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ RISC-V

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ особСнности Vortex:

  • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° 32- ΠΈ 64-разрядных Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ Π½Π°Π±ΠΎΡ€Π° ΠΊΠΎΠΌΠ°Π½Π΄ RISC-V RV32IMF ΠΈ RV64IMAFD.
  • НастраиваСмоС число ядСр, Π±Π»ΠΎΠΊΠΎΠ² Π·Π°Π΄Π°Ρ‡ (warps) ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².
  • НастраиваСмоС число ALU, FPU, LSU ΠΈ SFU для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ядра.
  • НастраиваСмая ΡˆΠΈΡ€ΠΈΠ½Π° Π²Ρ‹Π΄Π°Ρ‡ΠΈ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π° (pipeline issue width).
  • ΠžΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Π°Ρ раздСляСмая ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈ кэши ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ L1, L2 ΠΈ L3.
  • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° спСцификации OpenCL 1.2.
  • Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° Π±Π°Π·Π΅ FPGA Altera Arria 10, Altera Stratix 10, Xilinx Alveo U50, U250, U280 ΠΈ Xilinx Versal VCK5000.
  • Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ инструкции: «tex» для ускорСния ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ тСкстур, vx_rast для управлСния растСризациСй, vx_rop для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠ², Π³Π»ΡƒΠ±ΠΈΠ½Ρ‹ ΠΈ прозрачности, vx_imadd для выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ «ΡƒΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ ΠΈ ΡΠ»ΠΎΠΆΠΈΡ‚ΡŒ», vx_wspawn, vx_tmc ΠΈ vx_bar для Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ Ρ„Ρ€ΠΎΠ½Ρ‚ΠΎΠ² инструкций ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π² Π½ΠΈΡ… (wavefront, Π½Π°Π±ΠΎΡ€ Π½ΠΈΡ‚Π΅ΠΉ, ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ выполняСмых SIMD Engine), vx_split ΠΈ vx_join.
  • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ прСдставлСния ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ² SPIR-V Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Ρ‡Π΅Ρ€Π΅Π· Ρ‚Ρ€Π°Π½ΡΠ»ΡΡ†ΠΈΡŽ Π² OpenCL.
  • Для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ прСдлагаСтся инструмСнтарий, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΉ Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Vortex Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ PoCL (компилятор ΠΈ runtime OpenCL), LLVM/Clang, GCC ΠΈ Binutils.
  • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ΡΡ симуляция Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ‡ΠΈΠΏΠ° с использованиСм Verilator (Verilog-симулятор), RTLSIM (симуляция RTL) ΠΈ SimX (программная симуляция).

Для Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ Π½Π° тСхнологиях Vortex развиваСтся ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ GPU Skybox, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ графичСский API Vulkan. ΠŸΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ Skybox, созданный Π½Π° Π±Π°Π·Π΅ FPGA Altera Stratix 10 ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΉ 32 ядра (512 ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²), ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ» ΠΏΡ€ΠΈ частотС 230 MHz Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π·Π°Π»ΠΈΠ²ΠΊΠΈ Π² 3.7 гигапиксСлСй Π² сСкунду (29.4 Π³ΠΈΠ³Π°Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π² сСкунду). ΠžΡ‚ΠΌΠ΅Ρ‡Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ это ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ GPU с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ ΠΈ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ Vulkan.

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

  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½ API spawn_taskgroups для запуска ядСр, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… выставлСниС Π±Π°Ρ€ΡŒΠ΅Ρ€ΠΎΠ² Π½Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ.
  • ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎ Π½ΠΎΠ²ΠΎΠ΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ для создания ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌΡ‹Ρ… (relocatable) Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… ядСр.
  • Π’ API управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π²Ρ‹Π·ΠΎΠ²Ρ‹ vx_mem_reserve, vx_mem_access ΠΈ vx_mem_address.
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½ Π½ΠΎΠ²Ρ‹ΠΉ runtime API vx_check_occupancy.
  • Π’ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ для GPU Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° опция для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ OpenCL-тСстов Π½Π° локальном GPU.
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ тСсты OpenCL, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ (psum, sgemm2, sgemm3).
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ для Vortex Ρ€Π΅Π΄Π°ΠΊΡ†ΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ libc ΠΈ librt.
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° слияния сосСдних свободных Π±Π»ΠΎΠΊΠΎΠ² памяти (memory coalescing).
  • ΠŸΡ€ΠΎΠ²Π΅Π΄Π΅Π½Π° оптимизация ΠΌΠΈΠΊΡ€ΠΎΠ°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹.
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½ Π½ΠΎΠ²Ρ‹ΠΉ сборочный скрипт, ΠΎΡ‚Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ исходныС Ρ„Π°ΠΉΠ»Ρ‹ ΠΎΡ‚ сборочного ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°.

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