ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½Π° спСцификация OpenCL 3.0

ΠšΠΎΠ½Ρ†Π΅Ρ€Π½ Khronos, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ спСцификаций сСмСйства OpenGL, Vulkan ΠΈ OpenCL, объявил ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ спСцификаций OpenCL 3.0, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΡ… API ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ языка Π‘ для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ кросс-ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… вычислСний с использованиСм многоядСрных CPU, GPU, FPGA, DSP ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… спСциализированных Ρ‡ΠΈΠΏΠΎΠ², ΠΎΡ‚ Ρ‚Π΅Ρ…, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π² ΡΡƒΠΏΠ΅Ρ€ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ… ΠΈ ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹Ρ… сСрвСрах, Π΄ΠΎ Ρ‡ΠΈΠΏΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚ΡŒ Π² ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… устройствах ΠΈ встраиваСмой Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ΅. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ OpenCL ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ ΠΈ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΎΠ½Π½Ρ‹Ρ… отчислСний. Π’ Ρ€Π°Π±ΠΎΡ‚Π΅ Π½Π°Π΄ стандартом приняли участиС Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, ΠΊΠ°ΠΊ IBM, NVIDIA, Intel, AMD, Apple, ARM, Electronic Arts, Qualcomm, Texas Instruments ΠΈ Toshiba.

На Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ стадии спСцификации присвоСн статус ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ (provisional), Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΄ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π° основС ΠΎΡ‚Π·Ρ‹Π²ΠΎΠ², ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… Ρ‡Π΅Ρ€Π΅Π· GitHub. ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ замСчания Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΡ‡Ρ‚Π΅Π½Ρ‹, спСцификация ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ статус Ρ„ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΉ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ ΠΈΡ‚ΠΎΠ³ΠΎΠ²Ρ‹ΠΉ тСстовый Π½Π°Π±ΠΎΡ€ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ совмСстимости ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ…ΡΡ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½Π° спСцификация OpenCL 3.0

НаиболСС Π·Π°ΠΌΠ΅Ρ‚Π½Ρ‹Π΅ особСнности OpenCL 3.0:

  • API OpenCL 3.0 Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ всС вСрсии 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 для Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ядСр Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с ΠΏΠΎΠ΄Π³Ρ€ΡƒΠΏΠΏΠ°ΠΌΠΈ.
    ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½Π° спСцификация OpenCL 3.0

  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ для выполнСния асинхронных DMA-ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ (Asynchronous DMA), ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ Π² DSP-ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… Ρ‡ΠΈΠΏΠ°Ρ… с прямым доступом ΠΊ памяти. Asynchronous DMA Π΄Π°Ρ‘Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ DMA для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ глобальной ΠΈ локальной ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π² асинхронном Ρ€Π΅ΠΆΠΈΠΌΠ΅, ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΡ‹ΠΌΠΈ вычислСниям ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ опСрациями ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ….
  • БпСцификация Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования для языка Π‘ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π° Π΄ΠΎ вСрсии 3.0, Π° Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ языковых Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ OpenCL для C++ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π΅Π½ΠΎ Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° «C++ for OpenCL». C++ for OpenCL прСдставляСт собой компилятор, основанный Π½Π° Clang/LLVM ΠΈ Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ядра Π½Π° C++ ΠΈ OpenCL C Π² ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ΅ прСдставлСниС SPIR-V ΠΈΠ»ΠΈ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΉ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π§Π΅Ρ€Π΅Π· Ρ‚Ρ€Π°Π½ΡΠ»ΡΡ†ΠΈΡŽ Π² SPIR-V Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π° сборка Π‘++ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ шаблонов SYCL, ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‰ΡƒΡŽ созданиС ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

    ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½Π° спСцификация OpenCL 3.0

  • Для трансляции OpenCL Ρ‡Π΅Ρ€Π΅Π· API Vulkan ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Ρ‹ компилятор clspv, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‰ΠΈΠΉ ядра OpenCL Π² прСдставлСниС Vulkan SPIR-V, ΠΈ прослойка clvk для обСспСчСния Ρ€Π°Π±ΠΎΡ‚Ρ‹ API OpenCL ΠΏΠΎΠ²Π΅Ρ€Ρ… Vulkan.

    ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½Π° спСцификация OpenCL 3.0

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ