ΠΡΡΠΏΠΏΠ° ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΈΠ· Π’Π΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΡΠΈΡΡΡΠ° ΠΠΆΠΎΡΠ΄ΠΆΠΈΠΈ ΡΠ°Π·Π²ΠΈΠ²Π°Π΅Ρ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΏΡΠΎΠ΅ΠΊΡ 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