ΠΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½ Π΅ ΡΠ΅Π»ΠΈΠ· Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° PoCL 6.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, Π° ΠΊΠ°ΡΠΎ ΡΡΠΎΠ½ΡΠ΅Π½Π΄ Π·Π° OpenCL C ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Clang. ΠΠ° ΠΎΡΠΈΠ³ΡΡΡΠ²Π°Π½Π΅ Π½Π° Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠ°ΡΠ° ΠΏΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΡΡ ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΡΡ Π½Π° OpenCL ΡΠ΄ΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° Π³Π΅Π½Π΅ΡΠΈΡΠ° ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Ρ
Π°ΡΠ΄ΡΠ΅ΡΠ½ΠΈ ΡΠ΅ΡΡΡΡΠΈ Π·Π° ΡΠ°Π·ΠΏΠ°ΡΠ°Π»Π΅Π»ΡΠ²Π°Π½Π΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠΎΠ΄Π°, ΠΊΠ°ΡΠΎ VLIW, ΡΡΠΏΠ΅ΡΡΠΊΠ°Π»ΡΡΠ½ΠΎΡΡ, SIMD, SIMT, ΠΌΠ½ΠΎΠ³ΠΎΡΠ΄ΡΠ΅Π½ΠΎΡΡ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡ. ΠΠΌΠ° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ICD Π΄ΡΠ°ΠΉΠ²Π΅ΡΠΈ
(Installable Client Driver). ΠΠ°Π»ΠΈΡΠ½ΠΈ ΡΠ° Π±Π΅ΠΊΠ΅Π½Π΄ΠΈ Π·Π° ΠΎΡΠΈΠ³ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΡΠ°Π±ΠΎΡΠ° ΡΡΠ΅Π· CPU, ASIP (TCE/TTA), GPU Π½Π° Π±Π°Π·Π°ΡΠ° Π½Π° Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ° HSA ΠΈ GPU NVIDIA (ΡΡΠ΅Π· libcuda).
Π Π½ΠΎΠ²Π°ΡΠ° Π²Π΅ΡΡΠΈΡ:
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° Clang/LLVM 18.0, ΡΠΏΡΡΠ½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π½Π° LLVM 10, 11, 12 ΠΈ 13.
- Π Π΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ Π΅ Π½ΠΎΠ² Π±Π΅ΠΊΠ΅Π½Π΄ cpu-tbb, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π·Π° ΡΠ°Π·ΠΏΠ°ΡΠ°Π»Π΅Π»ΡΠ²Π°Π½Π΅ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΈ ΠΏΠ»Π°Π½ΠΈΡΠ°Π½Π΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Π·Π°Π΄Π°ΡΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° OneTBB, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ²Π°Π½Π° ΠΎΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ Intel.
- Π Π±Π΅ΠΊΠ΅Π½Π΄Π° cpu, ΠΎΡΠΈΠ³ΡΡΡΠ²Π°Ρ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° OpenCL ΡΠ΄ΡΠ° Π½Π° CPU, Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ° Π·Π° ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ OpenMP, Π΄ΠΎΠ±Π°Π²Π΅Π½ Π΅ ΠΌΠ΅ΡΠΎΠ΄ΡΡ clGetDeviceAndHostTimer(), ΠΊΠ°ΠΊΡΠΎ ΠΈ ΡΠ° ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»Π½ΠΈ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΡ cl_pocl_svm_rect, cl_pocl_command_buffer_svm ΠΈ cl_pocl_command_buffer_host_buffer.
- Π Π±Π΅ΠΊΠ΅Π½Π΄Π° Β«RemoteΒ», ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π·Π° ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΈΠ·ΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΡΠ΅Π· ΠΈΠ·Π½Π°ΡΡΠ½Π΅ Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ OpenCL Π½Π° Π΄ΡΡΠ³ΠΈ Ρ ΠΎΡΡΠΎΠ²Π΅ Π² ΠΌΡΠ΅ΠΆΠ°ΡΠ°, Π½Π° ΠΊΠΎΠΈΡΠΎ ΡΠ°Π±ΠΎΡΠΈ ΡΠΎΠ½ΠΎΠ² ΠΏΡΠΎΡΠ΅Ρ pocld, Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° CG SVM (Coarse-Grain Shared Virtual Memory), Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ Π±Π΅ΠΊΠ΅Π½Π΄Π° Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΠΎΠ½Π΅Π½ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» Vsock ΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ ΠΈ ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈΡΠ΅ clCompileProgram() ΠΈ clLinkProgram().
- Π Π±Π΅ΠΊΠ΅Π½Π΄Π° LevelZero, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ API Level Zero, Π΅ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΎ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° Π±ΡΡΠ΅ΡΠΈ Ρ ΡΠ°Π·ΠΌΠ΅Ρ Π½Π°Π΄ 4ΠΠ, ΠΈ ΡΠ° ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΈΡΠ΅ Π½Π° ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ.
- Π Π±Π΅ΠΊΠ΅Π½Π΄Π° CUDA ΡΠ° ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ sub_group_shuffle ΠΈ sub_group_shuffle_xor, Π° ΡΡΡΠΎ ΡΠ°ΠΊΠ° Π΅ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ Π»ΠΈΠΌΠΈΡΡΡ CL_DEVICE_MAX_MEM_ALLOC_SIZE.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
