ΠΡΡΠΏΠ° ΠΈΠ·ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΠΎΡ Π’Π΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡΠ½ΠΈΡ ΠΈΠ½ΡΡΠΈΡΡΡ Π½Π° ΠΠΆΠΎΡΠ΄ΠΆΠΈΡ ΡΠ°Π·Π²ΠΈΠ²Π° ΠΈΠ·ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠΊΠΈ ΠΏΡΠΎΠ΅ΠΊΡ Vortex, ΠΏΡΠ΅Π΄Π»Π°Π³Π°Ρ ΠΎΡΠ²ΠΎΡΠ΅Π½ GPGPU Π½Π° Π±Π°Π·Π°ΡΠ° Π½Π° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°ΡΠ° Π½Π° Π½Π°Π±ΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° RISC-V, ΡΠ΅Π»ΡΡ ΡΠ΅ Π² ΠΈΠ·Π²ΡΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΈ ΠΈΠ·ΡΠΈΡΠ»Π΅Π½ΠΈΡ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ API OpenCL ΠΈ ΠΌΠΎΠ΄Π΅Π»Π° Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ SIMT (Single Instruction, Multiple Threads), ΠΊΠ°ΠΊΡΠΎ ΠΈ Π² ΠΏΡΠΎΠ²Π΅ΠΆΠ΄Π°Π½Π΅ΡΠΎ Π½Π° ΠΈΠ·ΡΠ»Π΅Π΄Π²Π°Π½ΠΈΡ Π² ΠΎΠ±Π»Π°ΡΡΡΠ° Π½Π° 3D Π³ΡΠ°ΡΠΈΠΊΠ°ΡΠ° ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° Π½ΠΎΠ²ΠΈ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠΈ Π½Π° GPU. ΠΡΠΎΠ΅ΠΊΡΡΡ Π²ΡΠ΅ ΠΎΡΠ΅ Π΅ Π½Π° Π΅ΡΠ°ΠΏΠ° Π½Π° ΠΏΡΠΎΡΠΎΡΠΈΠΏ, ΡΠ°Π±ΠΎΡΠ΅Ρ Ρ FPGA. Π‘Ρ Π΅ΠΌΠΈΡΠ΅, ΠΎΠΏΠΈΡΠ°Π½ΠΈΡΡΠ° Π½Π° Ρ Π°ΡΠ΄ΡΠ΅ΡΠ½ΠΈΡΠ΅ Π±Π»ΠΎΠΊΠΎΠ²Π΅ Π½Π° Verilog, ΡΠΈΠΌΡΠ»Π°ΡΠΎΡΡΡ, Π΄ΡΠ°ΠΉΠ²Π΅ΡΠΈΡΠ΅ ΠΈ ΡΠ²ΡΡΠ·Π°Π½Π°ΡΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΡΠ΅ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½ΡΠ²Π°Ρ ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½ΡΠΈΡ BSD.
Π ΡΠ΅ΠΊΡΡΠΈΡ ΡΠΈ Π²ΠΈΠ΄ ΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ ΡΠΈΠΏΠΎΠ²ΠΈ ISA RISC-V, ΡΠ°Π·ΡΠΈΡΠ΅Π½ Ρ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈ Π·Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Π½Π΅ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π° GPU ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΡΠΎΠΊΠΎΠ²Π΅. ΠΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π°Π²ΡΠΎΡΠΈΡΠ΅ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° ΡΠ΅ ΠΎΠΏΠΈΡΠ²Π°Ρ Π΄Π° ΡΠ²Π΅Π΄Π°Ρ Π΄ΠΎ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π² Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°ΡΠ° Π½Π° Π½Π°Π±ΠΎΡΠ° ΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ RISC-V, ΠΊΠΎΠ»ΠΊΠΎΡΠΎ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ Π²Π΅ΡΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠΈΡΠ΅ Π²Π΅ΠΊΡΠΎΡΠ½ΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ. ΠΠΎΠ΄ΠΎΠ±Π΅Π½ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΡΠ΅ ΠΏΡΠΈΠ»Π°Π³Π° ΠΈ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ° RV64X, ΠΊΠΎΠΉΡΠΎ ΡΡΡΠΎ ΡΠ°Π·Π²ΠΈΠ²Π° ΠΎΡΠ²ΠΎΡΠ΅Π½ GPU Π½Π° Π±Π°Π·Π°ΡΠ° Π½Π° ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ RISC-V.

ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈΡΠ΅ Π½Π° Vortex Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π³ΡΠ°ΡΠΈΠΊΠ° Π²ΡΠ΅ ΠΎΡΠ΅ ΡΠ° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈ. ΠΠ±ΡΠ²Π΅Π½ΠΎ Π΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΡΠ° Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° OpenGL ES Π½Π° Π±Π°Π·Π°ΡΠ° Π½Π° Vortex, Π½ΠΎ Π² ΡΠ°ΠΌΠΈΡ GPU Π²ΡΠ΅ ΠΎΡΠ΅ Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π° ΡΠ°ΠΌΠΎ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΡΠ° βtexβ Π·Π° ΡΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° ΡΠ΅ΠΊΡΡΡΡΠΈ, ΠΊΠΎΡΡΠΎ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° Π½Π° Π½ΠΈΠ²ΠΎ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ΅Π½ ΡΠ΅ΠΉΠ΄Π΅Ρ. ΠΠ³ΡΠ°Π΄Π΅Π½ ΡΠ°ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΎΡ Π»ΠΈΠΏΡΠ²Π° β Π²ΡΠΈΡΠΊΠΈΡΠ΅ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΡΠ½ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π°Ρ ΠΎΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈΡ CPU, Π° ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΠ΅ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²ΠΈ Π·Π° ΡΠΎΡΠΊΠΈ, Π»ΠΈΠ½ΠΈΠΈ ΠΈ ΡΡΠΈΡΠ³ΡΠ»Π½ΠΈΡΠΈ, ΠΊΠ°ΠΊΡΠΎ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΈ, Π΄ΡΠ»Π±ΠΎΡΠΈΠ½Π° ΠΈ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎΡΡ, ΡΠ° ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° OpenCL.

Π Π±ΡΠ΄Π΅ΡΠ΅ ΡΠ΅ ΠΏΠ»Π°Π½ΠΈΡΠ° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΈ Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π³ΡΠ°ΡΠΈΠΊΠ° ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΡ Π½Π° ISA, Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° API CUDA ΠΈ Vulkan, ΠΊΠ°ΠΊΡΠΎ ΠΈ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΡ Π·Π° ΡΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠΈ Π·Π° ΠΌΠ°ΡΠΈΠ½Π½ΠΎ ΠΎΠ±ΡΡΠ΅Π½ΠΈΠ΅ ΠΈ Π°Π½Π°Π»ΠΈΠ· Π½Π° Π΄Π°Π½Π½ΠΈ. ΠΠ° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ΅ ΠΏΡΠ΅Π΄Π»Π°Π³Π° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠΌ, Π²ΠΊΠ»ΡΡΠ²Π°Ρ Π°Π΄Π°ΠΏΡΠΈΡΠ°Π½ΠΈ Π·Π° ΡΠ°Π±ΠΎΡΠ° Ρ Vortex Π²Π°ΡΠΈΠ°Π½ΡΠΈ PoCL (ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡ ΠΈ runtime Π½Π° OpenCL), LLVM/Clang, GCC ΠΈ Binutils. ΠΠΎΠ΄Π΄ΡΡΠΆΠ° ΡΠ΅ ΡΠΈΠΌΡΠ»Π°ΡΠΈΡ Π½Π° ΡΠ°Π±ΠΎΡΠ° Π½Π° ΡΠΈΠΏΠ° Ρ Verilator (Verilog ΡΠΈΠΌΡΠ»Π°ΡΠΎΡ) ΠΈ SimX (ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ½Π° ΡΠΈΠΌΡΠ»Π°ΡΠΈΡ).

ΠΡΠ½ΠΎΠ²Π½ΠΈ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ Π½Π° Vortex:
- ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°ΡΠ° Π½Π° Π½Π°Π±ΠΎΡΠ° ΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ RISC-V RV32IMF.
- ΠΠ°ΡΠ°Π±ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠΈΠΏΠ° Π΄ΠΎ 64 ΡΠ΄ΡΠ° Ρ ΠΎΠΏΡΠΈΠΎΠ½Π°Π»Π½ΠΈ ΠΊΠ΅ΡΠΎΠ²Π΅ L2 ΠΈ L3.
- ΠΡΡΠΊΠΎ ΡΠ΄ΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° 1024 ΠΏΠΎΡΠΎΠΊΠ° ΠΈ Π΄Π° ΡΠ°Π±ΠΎΡΠΈ Ρ ΡΠ΅ΡΡΠΎΡΠ° 250 MHz.
- ΠΠ°ΠΊΡΠΈΠΌΠ°Π»Π½Π°ΡΠ° ΠΈΠ·ΡΠΈΡΠ»ΠΈΡΠ΅Π»Π½Π° ΠΌΠΎΡΠ½ΠΎΡΡ Π΅ ΠΎΡΠ΅Π½Π΅Π½Π° Π½Π° 128 Gflops, Π° ΠΏΡΠΎΠΏΡΡΠΊΠ½Π°ΡΠ° ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ° Π΅ 16 GB/s. 32-ΡΠ΄ΡΠ΅Π½Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ, ΡΠ°Π±ΠΎΡΠ΅ΡΠ° Ρ ΡΠ΅ΡΡΠΎΡΠ° 200 MHz, Π±Π°Π·ΠΈΡΠ°Π½Π° Π½Π° FPGA Altera Stratix 10, ΠΏΠΎΠΊΠ°Π·Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ ΠΎΡ 25.6 GFlops.
- ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ° OpenCL 1.2.
- ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° Π±Π°Π·Π°ΡΠ° Π½Π° FPGA Intel Arria 10 ΠΈ Intel Stratix 10.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
