ΠΠ΅ΡΠ΅ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½Π° Π²Π΅ΡΡΠΈΡΡΠ° Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° PoCL 5.0 (Portable Computing Language OpenCL), ΠΊΠΎΠΉΡΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ²Π° Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ° OpenCL, ΠΊΠΎΠ΅ΡΠΎ Π΅ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΠΈΡΠ΅ Π½Π° Π³ΡΠ°ΡΠΈΡΠ½ΠΈ ΡΡΠΊΠΎΡΠΈΡΠ΅Π»ΠΈ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π±Π΅ΠΊΠ΅Π½Π΄ΠΎΠ²Π΅ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° OpenCL ΡΠ΄ΡΠ° Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠΈΠΏΠΎΠ²Π΅ Π³ΡΠ°ΡΠΈΠΊΠΈ ΠΈ ΡΠ΅Π½ΡΡΠ°Π»Π½ΠΈ ΠΏΡΠΎΡΠ΅ΡΠΎΡΠΈ . ΠΠΎΠ΄ΡΡ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° ΡΠ΅ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½ΡΠ²Π° ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·Π° Π½Π° MIT. ΠΠΎΠ΄Π΄ΡΡΠΆΠ° ΡΠ°Π±ΠΎΡΠ° Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΈ X86_64, MIPS32, ARM v7, AMD HSA APU, NVIDIA GPU ΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΠΏΡΠΎΡΠ΅ΡΠΎΡΠΈ ASIP (Application-Specific Instruction-set Processor) ΠΈ TTA (Transport Triggered Architecture) Ρ VLIW Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°.
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΡΠ° Π½Π° ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡ Π½Π° OpenCL Π΅ Π±Π°Π·ΠΈΡΠ°Π½Π° Π½Π° LLVM, Π° Clang ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠ°ΡΠΎ ΠΏΡΠ΅Π΄Π΅Π½ ΠΊΡΠ°ΠΉ Π·Π° OpenCL C. ΠΠ° Π΄Π° ΠΎΡΠΈΠ³ΡΡΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠ° ΠΏΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΡΡ ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ, ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΡΡ Π½Π° ΡΠ΄ΡΠΎΡΠΎ Π½Π° OpenCL ΠΌΠΎΠΆΠ΅ Π΄Π° Π³Π΅Π½Π΅ΡΠΈΡΠ° ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Ρ Π°ΡΠ΄ΡΠ΅ΡΠ½ΠΈ ΡΠ΅ΡΡΡΡΠΈ Π·Π° ΠΏΠ°ΡΠ°Π»Π΅Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠΎΠ΄, ΠΊΠ°ΡΠΎ VLIW, ΡΡΠΏΠ΅ΡΡΠΊΠ°Π»Π°ΡΠ΅Π½, SIMD, SIMT, ΠΌΠ½ΠΎΠ³ΠΎΡΠ΄ΡΠ΅Π½ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ½ΠΈΡΠΊΠΎΠ². ΠΠΌΠ° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ICD Π΄ΡΠ°ΠΉΠ²Π΅ΡΠΈ (Installable Client Driver). ΠΠΌΠ° Π±Π΅ΠΊΠ΅Π½Π΄ Π·Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΡΠ°Π±ΠΎΡΠ° ΡΡΠ΅Π· CPU, ASIP (TCE/TTA), GPU, Π±Π°Π·ΠΈΡΠ°Π½ Π½Π° HSA Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° ΠΈ NVIDIA GPU (ΡΡΠ΅Π· libcuda).
Π Π½ΠΎΠ²Π°ΡΠ° Π²Π΅ΡΡΠΈΡ:
- ΠΡΠ²Π΅Π΄Π΅Π½ Π΅ Π½ΠΎΠ² βΠΡΠ΄Π°Π»Π΅ΡΠ΅Π½β Π±Π΅ΠΊΠ΅Π½Π΄, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π° ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ° ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΈΠ·ΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΡΠ΅Π· ΠΏΡΠ΅Ρ Π²ΡΡΠ»ΡΠ½Π΅ Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° OpenCL ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ ΠΊΡΠΌ Π΄ΡΡΠ³ΠΈ Ρ ΠΎΡΡΠΎΠ²Π΅ Π² ΠΌΡΠ΅ΠΆΠ°ΡΠ°, ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°ΡΠΈ ΡΠΎΠ½ΠΎΠ²ΠΈΡ pocld ΠΏΡΠΎΡΠ΅Ρ.
- ΠΡΠ°ΠΉΠ²Π΅ΡΡΡ CUDA Π²Π½Π΅Π΄ΡΡΠ²Π° Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΡ Π½Π° OpenCL 3.0 ΠΊΠ°ΡΠΎ Π°ΡΠΎΠΌΠ°ΡΠ½ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Ρ ΠΎΠ±Ρ Π²Π°Ρ, intel_sub_group_shuffle, intel_sub_group_shuffle_xor, get_sub_group_local_id, sub_group_barrier ΠΈ sub_group_ballot.
- ΠΠΎΠ΄ΠΎΠ±ΡΠ΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡΠΈ, Π±Π°Π·ΠΈΡΠ°Π½ΠΈ Π½Π° RISC-V Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°. Π Π°Π±ΠΎΡΠ°ΡΠ° Π½Π° PoCL Π±Π΅ΡΠ΅ ΡΠ΅ΡΡΠ²Π°Π½Π° Π½Π° ΠΏΠ»Π°ΡΠΊΠ°ΡΠ° Starfive VisionFive 2, Π·Π°ΡΠ΅Π΄Π΅Π½Π° Ρ Ubuntu 23.10 ΡΡΠ΅Π΄Π° Ρ LLVM 17 ΠΈ GCC 13.2.
- Π Π°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ cl_ext_float_atomics Π΅ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΎ Ρ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° FP32 ΠΈ FP64.
- ΠΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ cl_khr_command_buffer Π΅ Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΎ Π΄ΠΎ Π²Π΅ΡΡΠΈΡ 0.9.4.
- ΠΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ Π΅ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»Π΅Π½ Π±Π΅ΠΊΠ΅Π½Π΄ Π½Π° AlmaIF Π·Π° FPGA.
- ΠΡΠ΅ΠΌΠ°Ρ Π½Π°ΡΠ° Π΅ Π½Π΅ΠΏΡΠ»Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅ Π½Π° ΡΠ΅ΠΉΠ΄ΡΡΠΈ SPIR 1.x/2.0. SPIR-V Π΅ Π΄Π΅ΠΊΠ»Π°ΡΠΈΡΠ°Π½ ΠΊΠ°ΡΠΎ ΠΏΡΠ΅ΠΏΠΎΡΡΡΠΈΡΠ΅Π»Π΅Π½ ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π΅Π½ Π΅Π·ΠΈΠΊ Π·Π° ΡΠ΅ΠΉΠ΄ΡΡΠΈ.
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° Clang/LLVM 17.0. ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π·Π° Clang/LLVM 10-13 Π΅ ΠΎΡΡ Π²ΡΡΠ»Π΅Π½Π°.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru