ΠΠΎΠ½ΡΠ΅ΡΠ½ΠΎΡ Khronos, ΠΎΠ΄Π³ΠΎΠ²ΠΎΡΠ΅Π½ Π·Π° ΡΠ°Π·Π²ΠΎΡ Π½Π° ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈΡΠ΅ Π½Π° ΡΠ΅ΠΌΠ΅ΡΡΡΠ²ΠΎΡΠΎ OpenGL, Vulkan ΠΈ OpenCL,
ΠΠΎ ΡΠ΅Π³Π°ΡΠ½Π°ΡΠ° ΡΠ°Π·Π°, Π½Π° ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° ΠΈ Π΅ Π΄ΠΎΠ΄Π΅Π»Π΅Π½ ΠΏΡΠΎΠ²ΠΈΠ·ΠΎΡΠ΅Π½ ΡΡΠ°ΡΡΡ, ΡΡΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ° ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΏΡΠ΅ΡΠΈΠ½Π΅ΡΠΎΡΡ Π²ΡΠ· ΠΎΡΠ½ΠΎΠ²Π° Π½Π° ΠΏΠΎΠ²ΡΠ°ΡΠ½ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΈΡΠΏΡΠ°ΡΠ΅Π½ΠΈ ΠΏΡΠ΅ΠΊΡ
ΠΠ°ΡΠ·Π°Π±Π΅Π»Π΅ΠΆΠΈΡΠ΅Π»Π½ΠΈ
- OpenCL 3.0 API ΡΠ΅Π³Π° Π³ΠΈ ΠΏΠΎΠΊΡΠΈΠ²Π° ΡΠΈΡΠ΅ Π²Π΅ΡΠ·ΠΈΠΈ Π½Π° OpenCL (1.2, 2.x), Π±Π΅Π· Π΄Π° Π΄Π°Π²Π° ΠΏΠΎΡΠ΅Π±Π½ΠΈ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π·Π° ΡΠ΅ΠΊΠΎΡΠ° Π²Π΅ΡΠ·ΠΈΡΠ°. OpenCL 3.0 ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡΠ²Π° ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΏΡΠΎΡΠΈΡΡΠ²Π°ΡΠ΅ Π½Π° ΠΎΡΠ½ΠΎΠ²Π½Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ ΠΏΡΠ΅ΠΊΡ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡΠ° Π½Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΊΠΎΠΈ ΡΠ΅ Π±ΠΈΠ΄Π°Ρ ΡΠ»ΠΎΠ΅Π²ΠΈΡΠΈ Π²ΠΎ ΡΠΎΡΠΌΠ° Π½Π° ΠΎΠΏΡΠΈΠΈ Π±Π΅Π· Π±Π»ΠΎΠΊΠΈΡΠ°ΡΠ΅ Π½Π° ΠΌΠΎΠ½ΠΎΠ»ΠΈΡΠ½Π°ΡΠ° ΠΏΡΠΈΡΠΎΠ΄Π° Π½Π° OpenCL 1.2/2.X.
- Π‘Π°ΠΌΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡΠ° ΡΡΠΎ Π΅ Π²ΠΎ ΡΠΎΠ³Π»Π°ΡΠ½ΠΎΡΡ ΡΠΎ OpenCL 1.2 Π΅ ΠΏΡΠΎΠ³Π»Π°ΡΠ΅Π½Π° Π·Π° Π·Π°Π΄ΠΎΠ»ΠΆΠΈΡΠ΅Π»Π½Π°, Π° ΡΠΈΡΠ΅ ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈ Π²ΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈΡΠ΅ OpenCL 2.x ΡΠ΅ ΠΊΠ»Π°ΡΠΈΡΠΈΡΠΈΡΠ°Π½ΠΈ ΠΊΠ°ΠΊΠΎ ΠΎΠΏΡΠΈΠΎΠ½Π°Π»Π½ΠΈ. ΠΠ²ΠΎΡ ΠΏΡΠΈΡΡΠ°ΠΏ ΡΠ΅ Π³ΠΎ ΠΎΠ»Π΅ΡΠ½ΠΈ ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ΡΠΎ Π½Π° ΡΠΎΠΏΡΡΠ²Π΅Π½ΠΈ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΊΠΎΠΈ ΡΠ΅ ΠΊΠΎΠΌΠΏΠ°ΡΠΈΠ±ΠΈΠ»Π½ΠΈ ΡΠΎ OpenCL 3.0 ΠΈ ΡΠ΅ Π³ΠΎ ΠΏΡΠΎΡΠΈΡΠΈ ΠΎΠΏΡΠ΅Π³ΠΎΡ Π½Π° ΡΡΠ΅Π΄ΠΈ Π½Π° ΠΊΠΎΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ OpenCL 3.0. ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΠΈΡΠ΅ ΠΌΠΎΠΆΠ°Ρ Π΄Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ°Π°Ρ ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Π·Π° OpenCL 3.0 Π±Π΅Π· Π΄Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ°Π°Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΈ ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ Π½Π° OpenCL 2.x. ΠΠ° Π΄Π° ΠΏΡΠΈΡΡΠ°ΠΏΠΈΡΠ΅ Π΄ΠΎ ΠΈΠ·Π±ΠΎΡΠ½ΠΈΡΠ΅ ΡΠ°Π·ΠΈΡΠ½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, OpenCL 3.0 Π΄ΠΎΠ΄Π°Π΄Π΅ ΡΠΈΡΡΠ΅ΠΌ Π½Π° ΠΏΡΠ°ΡΠ°ΡΠ° Π·Π° ΡΠ΅ΡΡΠΈΡΠ°ΡΠ΅ ΡΡΠΎ Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° Π΄Π° ΡΠ° ΠΎΡΠ΅Π½ΠΈΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ°ΡΠ° Π½Π° ΠΏΠΎΠ΅Π΄ΠΈΠ½Π΅ΡΠ½ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈ Π½Π° API, ΠΊΠ°ΠΊΠΎ ΠΈ ΡΠΏΠ΅ΡΠΈΡΠ°Π»Π½ΠΈ ΠΌΠ°ΠΊΡΠΎΠ°.
- ΠΠ±Π΅Π΄ΠΈΠ½ΡΠ²Π°ΡΠ΅ΡΠΎ ΡΠΎ ΠΏΡΠ΅ΡΡ ΠΎΠ΄Π½ΠΎ ΠΎΠ±ΡΠ°Π²Π΅Π½ΠΈΡΠ΅ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π³ΠΎ ΠΎΠ»Π΅ΡΠ½ΡΠ²Π° ΠΌΠΈΠ³ΡΠΈΡΠ°ΡΠ΅ΡΠΎ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈΡΠ΅ Π½Π° OpenCL 3.0. ΠΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈΡΠ΅ OpenCL 1.2 ΡΠ΅ ΠΌΠΎΠΆΠ°Ρ Π΄Π° ΡΠ°Π±ΠΎΡΠ°Ρ Π½Π° ΡΡΠ΅Π΄ΠΈ ΠΊΠΎΠΈ ΠΏΠΎΠ΄Π΄ΡΠΆΡΠ²Π°Π°Ρ OpenCL 3.0 Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π°. ΠΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈΡΠ΅ OpenCL 2.x, ΠΈΡΡΠΎ ΡΠ°ΠΊΠ°, Π½Π΅ΠΌΠ° Π΄Π° Π±Π°ΡΠ°Π°Ρ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π½Π° ΠΊΠΎΠ΄ΠΎΡ, ΡΓ¨ Π΄ΠΎΠ΄Π΅ΠΊΠ° ΠΎΠΊΠΎΠ»ΠΈΠ½Π°ΡΠ° OpenCL 3.0 ΡΠ° ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡΠ²Π° ΠΏΠΎΡΡΠ΅Π±Π½Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ (Π·Π° Π΄Π° ΡΠ΅ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈ ΠΈΠ΄Π½Π° ΠΏΡΠ΅Π½ΠΎΡΠ»ΠΈΠ²ΠΎΡΡ, Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈΡΠ΅ OpenCL 2.x ΡΠ΅ ΠΏΡΠ΅ΠΏΠΎΡΠ°ΡΡΠ²Π°Π°Ρ Π΄Π° Π΄ΠΎΠ΄Π°Π²Π°Π°Ρ ΠΏΡΠ°ΡΠ°ΡΠ° Π·Π° ΡΠ΅ΡΡΠΈΡΠ°ΡΠ΅ Π·Π° Π΄Π° ΡΠ΅ ΠΎΡΠ΅Π½ΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ°ΡΠ° Π·Π° ΡΡΠ½ΠΊΡΠΈΠΈΡΠ΅ OpenCL 2.x ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ). ΠΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠΈΡΠ΅ Π½Π° Π΄ΡΠ°ΡΠ²Π΅ΡΠΈ ΡΠΎ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π½Π° OpenCL ΠΌΠΎΠΆΠ°Ρ Π»Π΅ΡΠ½ΠΎ Π΄Π° Π³ΠΈ Π½Π°Π΄Π³ΡΠ°Π΄Π°Ρ ΡΠ²ΠΎΠΈΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈ Π½Π° OpenCL 3.0, Π΄ΠΎΠ΄Π°Π²Π°ΡΡΠΈ ΡΠ°ΠΌΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π±Π°ΡΠ°ΡΠ° Π·Π° ΠΎΠ΄ΡΠ΅Π΄Π΅Π½ΠΈ ΠΏΠΎΠ²ΠΈΡΠΈ Π½Π° API ΠΈ ΠΏΠΎΡΡΠ΅ΠΏΠ΅Π½ΠΎ Π΄Π° ΡΠ° Π·Π³ΠΎΠ»Π΅ΠΌΡΠ²Π°Π°Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡΠ° ΡΠΎ ΡΠ΅ΠΊΠΎΡ Π½Π° Π²ΡΠ΅ΠΌΠ΅ΡΠΎ.
- Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° OpenCL 3.0 Π΅ ΡΡΠΎΠ³Π»Π°ΡΠ΅Π½Π° ΡΠΎ ΠΎΠΊΠΎΠ»ΠΈΠ½Π°ΡΠ°, Π΅ΠΊΡΡΠ΅Π½Π·ΠΈΠΈ ΠΈ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π½Π° Π³Π΅Π½Π΅ΡΠΈΡΠΊΠΎΡΠΎ ΡΡΠ΅Π΄Π½ΠΎ ΠΏΡΠ΅ΡΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ SPIR-V, ΠΊΠΎΠ΅ ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ ΠΎΠ΄ Vulkan API. ΠΠΎΠ΄Π΄ΡΡΠΊΠ°ΡΠ° Π·Π° ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° SPIR-V 1.3 Π΅ Π²ΠΊΠ»ΡΡΠ΅Π½Π° Π²ΠΎ ΡΠ°Π΄ΡΠΎΡΠΎ OpenCL 3.0 ΠΊΠ°ΠΊΠΎ ΠΎΠΏΡΠΈΠΎΠ½Π°Π»Π½Π° ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ°. ΠΡΠ΅ΠΊΡ ΡΠΏΠΎΡΡΠ΅Π±Π° Π½Π° ΡΡΠ΅Π΄Π½Π° ΡΠ΅ΠΏΡΠ΅Π·Π΅Π½ΡΠ°ΡΠΈΡΠ°
SPIR-V Π΄ΠΎΠ΄Π°Π΄Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Π·Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΠΎ ΠΏΠΎΠ΄Π³ΡΡΠΏΠΈ Π·Π° ΠΏΡΠ΅ΡΠΌΠ΅ΡΠΊΠΎΠ²Π½ΠΈ ΡΠ°Π΄ΡΠ°.
- ΠΠΎΠ΄Π°Π΄Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Π·Π° Π΅ΠΊΡΡΠ΅Π½Π·ΠΈΡΠ° Π·Π° ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅ Π½Π° Π°ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈ DMA ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ (Asynchronous DMA), ΠΏΠΎΠ΄Π΄ΡΠΆΠ°Π½Π° Π²ΠΎ ΡΠΈΠΏΠΎΠ²ΠΈ ΡΠ»ΠΈΡΠ½ΠΈ Π½Π° DSP ΡΠΎ Π΄ΠΈΡΠ΅ΠΊΡΠ΅Π½ ΠΏΡΠΈΡΡΠ°ΠΏ Π΄ΠΎ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°ΡΠ°. ΠΡΠΈΠ½Ρ ΡΠΎΠ½Π°ΡΠ° DMA ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° DMA ΡΡΠ°Π½ΡΠ°ΠΊΡΠΈΠΈ Π·Π° ΠΏΡΠ΅Π½ΠΎΡ Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΠΏΠΎΠΌΠ΅ΡΡ Π³Π»ΠΎΠ±Π°Π»Π½Π°ΡΠ° ΠΈ Π»ΠΎΠΊΠ°Π»Π½Π°ΡΠ° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ° Π°ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΎ, ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΎ ΡΠΎ ΠΏΡΠ΅ΡΠΌΠ΅ΡΠΊΠΈΡΠ΅ ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π·Π° ΠΏΡΠ΅Π½ΠΎΡ Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ.
- Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° Π·Π° Π½Π°ΡΡΠ°Π²ΠΊΠΈ Π·Π° ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°ΡΠ΅ C Π΅ Π°ΠΆΡΡΠΈΡΠ°Π½Π° Π½Π°
Π²Π΅ΡΠ·ΠΈΡΠ° 3.0 , Π° ΡΠ°Π·Π²ΠΎΡΠΎΡ Π½Π° ΡΠ°Π·ΠΈΡΠ½ΠΈΡΠ΅ Π΅ΠΊΡΡΠ΅Π½Π·ΠΈΠΈ Π½Π° OpenCL Π·Π° C++ Π±Π΅ΡΠ΅ ΠΏΡΠ΅ΠΊΠΈΠ½Π°Ρ Π²ΠΎ ΠΊΠΎΡΠΈΡΡ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ βC++ Π·Π° OpenCLβ. C++ Π·Π° OpenCL Π΅ ΠΊΠΎΠΌΠΏΠ°ΡΠ»Π΅Ρ Π±Π°Π·ΠΈΡΠ°Π½ Π½Π° Clang/LLVM ΠΈΠ΅ΠΌΠΈΡΡΠ²Π°ΡΠ΅ C++ ΠΈ OpenCL C ΠΊΠ΅ΡΠ½Π΅Π»ΠΈ Π²ΠΎ SPIR-V ΡΡΠ΅Π΄Π½ΠΎ ΠΏΡΠ΅ΡΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ ΠΈΠ»ΠΈ ΠΌΠ°ΡΠΈΠ½ΡΠΊΠΈ ΠΊΠΎΠ΄ Π½Π° Π½ΠΈΡΠΊΠΎ Π½ΠΈΠ²ΠΎ. ΠΡΠ΅ΠΊΡ Π΅ΠΌΠΈΡΡΠ²Π°ΡΠ΅, SPIR-V ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ° ΠΈ ΡΠΊΠ»ΠΎΠΏΡΠ²Π°ΡΠ΅ Π½Π° C++ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° Π·Π° ΡΠ°Π±Π»ΠΎΠ½ΠΈ SYCL, ΡΡΠΎ Π³ΠΎ ΠΏΠΎΠ΅Π΄Π½ΠΎΡΡΠ°Π²ΡΠ²Π° ΡΠΎΠ·Π΄Π°Π²Π°ΡΠ΅ΡΠΎ Π½Π° ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ. - ΠΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ Π΅ ΠΊΠΎΠΌΠΏΠ°ΡΠ»Π΅Ρ Π·Π° Π΅ΠΌΠΈΡΡΠ²Π°ΡΠ΅ OpenCL ΠΏΡΠ΅ΠΊΡ Vulkan API
clspv , ΠΊΠΎΡ Π³ΠΈ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠ° OpenCL ΠΊΠ΅ΡΠ½Π΅Π»ΠΈΡΠ΅ Π²ΠΎ Vulkan SPIR-V ΠΏΡΠ΅ΡΡΡΠ°Π²Π° ΠΈ ΡΠ»ΠΎΡclvk Π·Π° Π΄Π° ΡΠ΅ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈ OpenCL API Π΄Π° ΡΠ°Π±ΠΎΡΠΈ Π½Π° Π²ΡΠ²ΠΎΡ Π½Π° Vulkan.
ΠΠ·Π²ΠΎΡ: opennet.ru