ΠΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½ Π΅ Π½ΠΎΠ²ΠΈΡΡ Π±ΡΠΎΠΉ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° 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.

Π Π°Π·Π²ΠΈΠ²Π°Π½ΠΈΡΡ 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 ΠΏΠΎΡΠΎΠΊΠ°), ΡΡΠΏΡ Π΄Π° ΠΏΠΎΡΡΠΈΠ³Π½Π΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ Π½Π° Π·Π°Π»ΠΈΠ²ΠΊΠ° ΠΎΡ 3.7 Π³ΠΈΠ³Π°ΠΏΠΈΠΊΡΠ΅Π»Π° Π² ΡΠ΅ΠΊΡΠ½Π΄Π° (29.4 Π³ΠΈΠ³Π°ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ Π² ΡΠ΅ΠΊΡΠ½Π΄Π°) ΠΏΡΠΈ ΡΠ°ΡΡΠΎΡΠ° ΠΎΡ 230 MHz.
Π‘ΡΠ΅Π΄ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π² Π²Π΅ΡΡΠΈΡ 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
