ΠΠΎΠ½ΡΠ΅ΡΠ½ΡΡ 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, ΠΊΠΎΠ΅ΡΠΎ ΡΡΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΎΡ API Π½Π° Vulkan. ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π½Π° ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΡΠ° 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 ΡΡΠ΅Π· API Π½Π° Vulkan
clspv , ΠΊΠΎΠΉΡΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π° OpenCL ΡΠ΄ΡΠ° Π² ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅ Π½Π° Vulkan SPIR-V ΠΈ ΡΠ»ΠΎΠΉclvk Π·Π° Π΄Π° Π°ΠΊΡΠΈΠ²ΠΈΡΠ°ΡΠ΅ OpenCL API Π΄Π° ΡΠ°Π±ΠΎΡΠΈ Π²ΡΡΡ Ρ Vulkan.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru