ΠΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½Π° Π²ΡΠΎΡΠ° ΡΠ΅Π΄Π°ΠΊΡΠΈΡ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° 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 ΡΠ΅ ΡΠ°Π·Π²ΠΈΠ²Π° ΠΎΡΠ²ΠΎΡΠ΅Π½ GPU Skybox, ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ Π³ΡΠ°ΡΠΈΡΠ½ΠΈΡ API Vulkan. ΠΡΠΎΡΠΎΡΠΈΠΏΡΡ Skybox, ΡΡΠ·Π΄Π°Π΄Π΅Π½ Π½Π° Π±Π°Π·Π°ΡΠ° Π½Π° FPGA Altera Stratix 10 ΠΈ Π²ΠΊΠ»ΡΡΠ²Π°Ρ 32 ΡΠ΄ΡΠ° (512 ΠΏΠΎΡΠΎΠΊΠ°), ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ ΠΏΡΠΈ ΡΠ΅ΡΡΠΎΡΠ° 230 MHz Π΄Π° ΠΏΠΎΡΡΠΈΠ³Π½Π΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ Π½Π° Π·Π°ΠΏΡΠ»Π²Π°Π½Π΅ ΠΎΡ 3.7 Π³ΠΈΠ³Π°ΠΏΠΈΠΊΡΠ΅Π»Π° Π² ΡΠ΅ΠΊΡΠ½Π΄Π° (29.4 Π³ΠΈΠ³Π°ΡΡΠ°Π½ΡΠ°ΠΊΡΠΈΠΈ Π² ΡΠ΅ΠΊΡΠ½Π΄Π°). ΠΡΠ±Π΅Π»ΡΠ·Π²Π° ΡΠ΅, ΡΠ΅ ΡΠΎΠ²Π° Π΅ ΠΏΡΡΠ²ΠΈΡΡ ΠΎΡΠ²ΠΎΡΠ΅Π½ GPU Ρ ΡΠΎΡΡΡΠ΅ΡΠ½Π° ΠΈ Ρ Π°ΡΠ΄ΡΠ΅ΡΠ½Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ, ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ Vulkan.
ΠΡΠ½ΠΎΠ²Π½ΠΈ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ Π½Π° 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 2.0:
- ΠΡΠΎΠ²Π΅Π΄Π΅Π½Π° Π΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΌΠΈΠΊΡΠΎΠ°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°ΡΠ°.
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° 64-Π±ΠΈΡΠΎΠ²Π° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° Π½Π° Π½Π°Π±ΠΎΡΠ° ΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ RISC-V RV64IMAFD.
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° Π±Π°Π·Π°ΡΠ° Π½Π° FPGA Xilinx.
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° LLVM 16 ΠΈ Ubuntu 20.04.
- ΠΠ·Π²ΡΡΡΠ΅Π½ Π΅ ΡΠ΅ΡΠ°ΠΊΡΠΎΡΠΈΠ½Π³ ΠΈ ΡΠ° Π½Π°ΠΏΡΠ°Π²Π΅Π½ΠΈ ΠΊΠΎΡΠ΅ΠΊΡΠΈΠΈ Π½Π° Π½Π΅Π΄ΠΎΡΡΠ°ΡΡΡΠΈ, ΠΎΡΠΊΡΠΈΡΠΈ ΠΏΡΠΈ ΠΎΡΠ΅Π½ΠΊΠ° Π½Π° ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎΡΠΎ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
