ΠΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ ΡΠ΅Π»ΠΈΠ· ΠΏΡΠΎΠ΅ΠΊΡΠ° PoCL 3.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) c Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠΎΠΉ VLIW.
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΡΠ° Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ° Π·Π° OpenCL ΡΠ΄ΡΠ° Π΅ Π±Π°Π·ΠΈΡΠ°Π½Π° Π½Π° LLVM, Π° ΠΊΠ°ΡΠΎ ΡΡΠΎΠ½ΡΠ΅Π½Π΄ Π·Π° OpenCL C ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Clang. ΠΠ° ΠΎΡΠΈΠ³ΡΡΡΠ²Π°Π½Π΅ Π½Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ°ΡΠ° ΠΏΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΡΡ ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ, ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΡΡ Π½Π° OpenCL ΡΠ΄ΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° Π³Π΅Π½Π΅ΡΠΈΡΠ° ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Ρ Π°ΡΠ΄ΡΠ΅ΡΠ½ΠΈ ΡΠ΅ΡΡΡΡΠΈ Π·Π° ΠΏΠ°ΡΠ°Π»Π΅Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠΎΠ΄Π°, ΠΊΠ°ΡΠΎ VLIW, ΡΡΠΏΠ΅ΡΡΠΊΠ°Π»ΡΡΠ½ΠΎΡΡ, SIMD, SIMT, ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΡΠ΄ΡΠ΅Π½ΠΈ. ΠΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ ΡΠ΅ ICD Π΄ΡΠ°ΠΉΠ²Π΅ΡΠΈ (Installable Client Driver). ΠΠΌΠ° Π±Π΅ΠΊΠ΅Π½Π΄ΠΈ Π·Π° ΡΠ°Π±ΠΎΡΠ° ΡΡΠ΅Π· CPU, ASIP (TCE/TTA), GPU Π½Π° Π±Π°Π·Π°ΡΠ° Π½Π° HSA Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° ΠΈ NVIDIA GPU (ΡΡΠ΅Π· libcuda).
Π Π½ΠΎΠ²Π°ΡΠ° Π²Π΅ΡΡΠΈΡ:
- Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ Π½Π°Π±ΠΎΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ, ΡΡΠ΅Π±ΡΠ΅ΠΌΡΠΉ Π΄Π»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ OpenCL 3.0. ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° OpenCL 3.0 ΠΏΠΎΠΊΠ° Π΄ΠΎΡΡΡΠΏΠ½Π° ΡΠΎΠ»ΡΠΊΠΎ Π² Π±ΡΠΊΠ΅Π½Π΄Π΅ Π½Π° Π±Π°Π·Π΅ CPU ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ LLVM 14 (Π² Π΄ΡΡΠ³ΠΈΡ Π±ΡΠΊΠ΅Π½Π΄Π°Ρ ΠΈ ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ ΡΡΠ°ΡΡΡ Π²Π΅ΡΡΠΈΠΉ LLVM ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° OpenCL 1.2).
- ΠΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Clang/LLVM 14.
- Π£Π»ΡΡΡΠ΅Π½Π° ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ° ΠΈ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ.
- ΠΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π³ΡΡΠΏΠΏ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΡ Π² ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠ΅ ΡΠ°ΠΉΠ»Ρ Ρ ΡΠ΄ΡΠ°ΠΌΠΈ OpenCL.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
