ΠΡΠΎΠ΅ΠΊΡΠΎΡ VeriGPU Π΅ Π½Π°ΡΠΎΡΠ΅Π½ ΠΊΠΎΠ½ ΡΠΎΠ·Π΄Π°Π²Π°ΡΠ΅ ΠΎΡΠ²ΠΎΡΠ΅Π½ Π³ΡΠ°ΡΠΈΡΠΊΠΈ ΠΏΡΠΎΡΠ΅ΡΠΎΡ ΡΠ°Π·Π²ΠΈΠ΅Π½ Π½Π° ΡΠ°Π·ΠΈΠΊΠΎΡ Verilog Π·Π° ΠΎΠΏΠΈΡΡΠ²Π°ΡΠ΅ ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠ°ΡΠ΅ Π½Π° Π΅Π»Π΅ΠΊΡΡΠΎΠ½ΡΠΊΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ. ΠΡΠ²ΠΈΡΠ½ΠΎ, ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ ΡΠ΅ ΡΠ°Π·Π²ΠΈΠ²Π° ΡΠΎ ΠΏΠΎΠΌΠΎΡ Π½Π° Verilog ΡΠΈΠΌΡΠ»Π°ΡΠΎΡ, Π½ΠΎ ΠΎΡΠΊΠ°ΠΊΠΎ ΡΠ΅ ΡΠ΅ Π·Π°Π²ΡΡΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π·Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²ΠΎ Π½Π° Π²ΠΈΡΡΠΈΠ½ΡΠΊΠΈ ΡΠΈΠΏΠΎΠ²ΠΈ. Π Π°Π·Π²ΠΎΡΠΎΡ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ ΡΠ΅ Π΄ΠΈΡΡΡΠΈΠ±ΡΠΈΡΠ° ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½ΡΠ°ΡΠ° ΠΠΠ’.
VeriGPU Π΅ ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½ΠΈΡΠ°Π½ ΠΊΠ°ΠΊΠΎ ΠΏΡΠΎΡΠ΅ΡΠΎΡ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅Π½ Π·Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° (ASIC) ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½ Π·Π° Π·Π°Π±ΡΠ·ΡΠ²Π°ΡΠ΅ Π½Π° ΠΏΡΠ΅ΡΠΌΠ΅ΡΠΊΠΈΡΠ΅ ΠΏΠΎΠ²ΡΠ·Π°Π½ΠΈ ΡΠΎ ΡΠΈΡΡΠ΅ΠΌΠΈΡΠ΅ Π·Π° ΠΌΠ°ΡΠΈΠ½ΡΠΊΠΎ ΡΡΠ΅ΡΠ΅. ΠΠ»Π°Π½ΠΎΠ²ΠΈΡΠ΅ Π²ΠΊΠ»ΡΡΡΠ²Π°Π°Ρ ΠΊΠΎΠΌΠΏΠ°ΡΠΈΠ±ΠΈΠ»Π½ΠΎΡΡ ΡΠΎ ΡΠ°ΠΌΠΊΠ°ΡΠ° Π·Π° Π΄Π»Π°Π±ΠΎΠΊΠΎ ΠΌΠ°ΡΠΈΠ½ΡΠΊΠΎ ΡΡΠ΅ΡΠ΅ Π½Π° PyTorch ΠΈ ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΡΠ°Π·Π²ΠΎΡ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ Π·Π° VeriGPU ΡΠΎ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° HIP (Ρ Π΅ΡΠ΅ΡΠΎΠ³Π΅Π½-ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΡΠΊΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡ) API. ΠΠΎ ΠΈΠ΄Π½ΠΈΠ½Π°, ΠΌΠΎΠΆΠ½ΠΎ Π΅ Π΄Π° ΡΠ΅ Π΄ΠΎΠ΄Π°Π΄Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Π·Π° Π΄ΡΡΠ³ΠΈ API, ΠΊΠ°ΠΊΠΎ ΡΡΠΎ ΡΠ΅ SYCL ΠΈ NVIDIA CUDA.
ΠΡΠ°ΡΠΈΡΠΊΠΈΠΎΡ ΠΏΡΠΎΡΠ΅ΡΠΎΡ Π΅Π²ΠΎΠ»ΡΠΈΡΠ° ΠΎΠ΄ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎΡΠΎ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ RISC-V, Π½ΠΎ Π΄ΠΎΠ±ΠΈΠ΅Π½Π°ΡΠ° Π²Π½Π°ΡΡΠ΅ΡΠ½Π° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° Π½Π° ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎΡΠΎ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π½Π° Π³ΡΠ°ΡΠΈΡΠΊΠΈΠΎΡ ΠΏΡΠΎΡΠ΅ΡΠΎΡ Π΅ ΡΠ»Π°Π±ΠΎ ΠΊΠΎΠΌΠΏΠ°ΡΠΈΠ±ΠΈΠ»Π½Π° ΡΠΎ RISC-V ISA, Π±ΠΈΠ΄Π΅ΡΡΠΈ Π²ΠΎ ΡΠΈΡΡΠ°ΡΠΈΠΈ ΠΊΠΎΠ³Π° Π΄ΠΈΠ·Π°ΡΠ½ΠΎΡ Π½Π° Π³ΡΠ°ΡΠΈΡΠΊΠΈΠΎΡ ΠΏΡΠΎΡΠ΅ΡΠΎΡ Π½Π΅ ΡΠ΅ Π²ΠΊΠ»ΠΎΠΏΡΠ²Π° Π²ΠΎ ΠΏΡΠ΅ΡΡΡΠ°Π²Π°ΡΠ° RISC-V, ΡΠΎΡ Π΅ Π½Π΅ Π΅ Π½Π°ΠΌΠ΅Π½Π΅Ρ Π·Π° ΠΎΠ΄ΡΠΆΡΠ²Π°ΡΠ΅ Π½Π° RISC-V ΠΊΠΎΠΌΠΏΠ°ΡΠΈΠ±ΠΈΠ»Π½ΠΎΡΡ. Π Π°Π·Π²ΠΎΡΠΎΡ Π΅ ΡΠΎΠΊΡΡΠΈΡΠ°Π½ Π½Π° ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΈ Π·Π° ΡΠΈΡΡΠ΅ΠΌΠΈΡΠ΅ Π·Π° ΠΌΠ°ΡΠΈΠ½ΡΠΊΠΎ ΡΡΠ΅ΡΠ΅, ΡΠ°ΠΊΠ° ΡΡΠΎ Π·Π° Π΄Π° ΡΠ΅ Π½Π°ΠΌΠ°Π»ΠΈ Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°ΡΠ° ΠΈ ΡΠ»ΠΎΠΆΠ΅Π½ΠΎΡΡΠ° Π½Π° ΠΌΠ°ΡΡΠΈΡΠ°ΡΠ° Π½Π° ΡΠΈΠΏΠΎΠ²ΠΈΡΠ΅, ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ ΡΠ°ΠΌΠΎ ΡΠΎΡΠΌΠ°ΡΠΎΡ ΡΠΎ ΠΏΠΎΠ΄Π²ΠΈΠΆΠ½Π° Π·Π°ΠΏΠΈΡΠΊΠ° BF16 ΠΈ ΡΠ°ΠΌΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈΡΠ΅ ΡΠΎ ΠΏΠΎΠ΄Π²ΠΈΠΆΠ½Π° Π·Π°ΠΏΠΈΡΠΊΠ° ΠΏΠΎΡΡΠ΅Π±Π½ΠΈ Π·Π° ΠΌΠ°ΡΠΈΠ½ΡΠΊΠΎ ΡΡΠ΅ΡΠ΅, ΠΊΠ°ΠΊΠΎ ΡΡΠΎ ΡΠ΅ exp, log, tanh ΠΈ sqrt, ΡΠ΅ Π΄ΠΎΡΡΠ°ΠΏΠ½ΠΈ.
ΠΠ΅ΡΡ Π²Π΅ΡΠ΅ Π΄ΠΎΡΡΠ°ΠΏΠ½ΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ ΡΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΡΠΎΡ Π½Π° Π³ΡΠ°ΡΠΈΡΠΊΠΈΠΎΡ ΠΏΡΠΎΡΠ΅ΡΠΎΡ, APU (ΠΠ΄ΠΈΠ½ΠΈΡΠ° Π·Π° Π·Π°Π±ΡΠ·Π°Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°) Π·Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΠΎ ΡΠ΅Π»ΠΈ Π±ΡΠΎΠ΅Π²ΠΈ (β+β,β-β,β/,β*β) ΠΈ Π΅Π΄ΠΈΠ½ΠΈΡΠ° Π·Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΠΎ ΠΏΠΎΠ΄Π²ΠΈΠΆΠ½Π° Π·Π°ΠΏΠΈΡΠΊΠ° (β+,β ,β*β) ΠΈ Π±Π»ΠΎΠΊ Π½Π° ΡΠ°Π·Π³ΡΠ°Π½ΡΠ²Π°ΡΠ΅. ΠΠ° ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ, ΡΠΎΡ Π½ΡΠ΄ΠΈ Π°ΡΠ΅ΠΌΠ±Π»Π΅Ρ ΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Π·Π° ΠΊΠΎΠΌΠΏΠ°ΡΠ»ΠΈΡΠ°ΡΠ΅ Π½Π° C++ ΠΊΠΎΠ΄ Π±Π°Π·ΠΈΡΠ°Π½ Π½Π° LLVM. ΠΠΎΠΌΠ΅ΡΡ ΠΏΠ»Π°Π½ΠΈΡΠ°Π½ΠΈΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠ΅ ΠΈΡΡΠ°ΠΊΠ½ΡΠ²Π°Π°Ρ ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΎ ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅ Π½Π° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, ΠΊΠ΅ΡΠΈΡΠ°ΡΠ΅ Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΠΊΠ° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ° ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ SIMT (Single instruction multiple thread).
ΠΠ·Π²ΠΎΡ: opennet.ru