ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ стандарт ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования OpenMP 6.0

ПослС Ρ‚Ρ€Ρ‘Ρ… Π»Π΅Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ Π½Π°Π±ΠΎΡ€ спСцификаций OpenMP 6.0 (Open Multi-Processing), ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΡ… API ΠΈ способы примСнСния ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования для языков Π‘ΠΈ, Π‘ΠΈ++ ΠΈ Π€ΠΎΡ€Ρ‚Ρ€Π°Π½ Π½Π° многоядСрных ΠΈ Π³ΠΈΠ±Ρ€ΠΈΠ΄Π½Ρ‹Ρ… (CPU+GPU/DSP) систСмах с ΠΎΠ±Ρ‰Π΅ΠΉ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ ΠΈ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ (SIMD). ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ Π½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… возмоТностСй OpenMP 6.0 Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° Π² состав выпусков LLVM/Clang 20 ΠΈ GCC 15.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ измСнСния Π² OpenMP 6.0:

  • Π£ΠΏΡ€ΠΎΡ‰Ρ‘Π½ процСсс программирования Π·Π°Π΄Π°Ρ‡ (task), ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΡ… нСзависимыС части ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ частями.
    • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ выполнСния Π·Π°Π΄Π°Ρ‡ Π² ΠΏΠΎΡ‚ΠΎΠΊΠ°Ρ… free-agent, Π½Π΅ привязанных ΠΊ Π³Ρ€ΡƒΠΏΠΏΠ°ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² (teams), Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ… ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π΅Π³ΠΈΠΎΠ½Ρ‹ (parallel region, Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π°, выполняСмый Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠ°Ρ…).
    • ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° сохранСния Π³Ρ€Π°Ρ„Π° Π·Π°Π΄Π°Ρ‡ (taskgraph), ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π΅Π³ΠΎ зависимости ΠΌΠ΅ΠΆΠ΄Ρƒ Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ ΠΈ порядок выполнСния Π·Π°Π΄Π°Ρ‡, для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ эффСктивности ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ воспроизвСдСния.
    • Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ («transparent tasks») для упрощСния управлСния зависимостями ΠΈ автоматичСского управлСния Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… Π·Π°Π΄Π°Ρ‡.
  • Π Π°ΡΡˆΠΈΡ€Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… устройств, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для выполнСния ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ (CPU, GPU, DSP ΠΈ Ρ‚.ΠΏ.).
    • Π”ΠΎΠ±Π°Π²Π»Π΅Π½ Π½ΠΎΠ²Ρ‹ΠΉ синтаксис массивов, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ «workdistribute» для раздСлСния ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ массивов ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Π΅Π΄ΠΈΠ½ΠΈΡ†Π°ΠΌΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹.
    • Π Π°ΡΡˆΠΈΡ€Π΅Π½Ρ‹ возмоТности управлСния Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ памяти, ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‰ΠΈΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠ°ΠΌΡΡ‚ΡŒ выдСляСтся динамичСски.
    • Π Π°ΡΡˆΠΈΡ€Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ², ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΡ… распрСдСлСниС Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ устройствами ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.
    • Π£ΠΏΡ€ΠΎΡ‰Π΅Π½ΠΎ написаниС ΠΊΠΎΠ΄Π° для асинхронной ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ устройствам (GPU).
    • Π£Π»ΡƒΡ‡ΡˆΠ΅Π½ΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ ΠΈ Π΅Ρ‘ привязкой ΠΊ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ устройствам.
    • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° «groupprivate» для закрСплСния памяти Π·Π° Π³Ρ€ΡƒΠΏΠΏΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², выполняСмых Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΌ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌ устройствС.
  • Π£ΠΏΡ€ΠΎΡ‰Π΅Π½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²ΠΈΠ΄ΠΎΠ² трансформации Ρ†ΠΈΠΊΠ»ΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ объСдинСниС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ†ΠΈΠΊΠ»ΠΎΠ², ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ порядка Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Ρ†ΠΈΠΊΠ»ΠΎΠ² ΠΈ рСвСрсия Ρ†ΠΈΠΊΠ»ΠΎΠ².
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° новая опСрация ΠΈΠ½Π΄ΡƒΠΊΡ†ΠΈΠΈ (induction) для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ распараллСливания Π² Ρ†ΠΈΠΊΠ»Π°Ρ… простых арифмСтичСских вычислСний ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, зависящих ΠΎΡ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° полная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° распараллСливания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, написанных с использованиСм стандартов C23 (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ синтаксис Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ²), Fortran 2023 ΠΈ C++23. Π”ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π½ΠΎΠ²Ρ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ для C/C++.
  • Π Π°ΡΡˆΠΈΡ€Π΅Π½Ρ‹ возмоТности управлСния Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ΠΌ ΠΈ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ. Π”ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π½ΠΎΠ²Ρ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ для контроля Π½Π°Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠ°ΠΌΡΡ‚ΡŒ. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ API для опрСдСлСния ΠΈ запроса пространств памяти (memory space).
  • Π£Π΄Π°Π»Π΅Π½Ρ‹ возмоТности, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΌΠΈ Π² спСцификациях OpenMP 5.0, 5.1 ΠΈ 5.2.

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