ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

ДинамичСский ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ коррСктности OpenMP-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ

Π”ΠΈΠΏΠ»ΠΎΠΌΠ½Π°ΡΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

ΠŸΡƒΡΡ‚ΡŒ context — это контСкст Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π½ΠΈΡ‚ΠΈ; parent — контСкст, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΉΡΡ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ для context Π² Π΄Π΅Ρ€Π΅Π²Π΅. ΠŸΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ опрСдСляСтся Π΅Π΅ Ρ‚ΠΈΠΏ Π² ΠΊΠΎΠ½Ρ‚СкстС context. Если пСрСмСнная общая, Ρ‚ΠΎ Π² ΠΊΠΎΠ½Ρ‚СкстС parent ΠΏΠΎ Π΅Π΅ Π°Π΄Ρ€Π΅ΡΡƒ выбираСтся структура VarInfo. И Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° обращСния ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² ΡΠΏΠΈΡΠΎΠΊ WriteList ΠΈΠ»ΠΈ ReadList добавляСтся элСмСнт, содСрТащий: Π½ΠΎΠΌΠ΅Ρ€ Π½ΠΈΡ‚ΠΈ (thread_id… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

ДинамичСский ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ коррСктности OpenMP-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

Аннотация

Π’Π°ΠΆΠ½Ρ‹ΠΌ этапом процСсса создания любого ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° являСтся Π΅Π³ΠΎ ΠΎΡ‚Π»Π°Π΄ΠΊΠ°. ΠŸΡ€ΠΈ Ρ‡Π΅ΠΌ Π΄Π°Π½Π½Ρ‹ΠΉ этап ΠΏΠΎ ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²Ρƒ Π·Π°Ρ‚Ρ€Π°Ρ‡Π΅Π½Π½Ρ‹Ρ… Π½Π° Π½Π΅Π³ΠΎ срСдств Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ сопоставим со Π²ΡΠ΅ΠΌΠΈ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ стадиями Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°. ОсобСнно сильно возрастаСт Ρ‚Ρ€ΡƒΠ΄ΠΎΠ΅ΠΌΠΊΠΎΡΡ‚ΡŒ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ Π² ΡΠ»ΡƒΡ‡Π°Π΅, Ссли ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±Ρ‹Π»Π° написана с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… вычислСний. Данная Ρ€Π°Π±ΠΎΡ‚Π° посвящСна автоматичСскому Π½Π°Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΡŽ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнных ошибок, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈ использовании OpenMP конструкций Π² Fortran-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…. Π’ Ρ…ΠΎΠ΄Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±Ρ‹Π»ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ нахоТдСния Ρ‚Π°ΠΊΠΈΡ… ошибок, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΎ сравнСниС ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ инструмСнта с ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ Π°Π½Π°Π»ΠΎΠ³Π°ΠΌΠΈ.

  • 1 Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ 3
    • 1.1 ВСхнология OpenMP 3
    • 1.2 Ошибки, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΈ использовании OpenMP 4
    • 1.3 ΠžΡ‚Π»Π°Π΄ΠΊΠ° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ 8
    • 1.4 ЦСль Ρ€Π°Π±ΠΎΡ‚Ρ‹ 9
  • 2 ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ 10
  • 3 ΠžΠ±Π·ΠΎΡ€ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠΎΠ² 11
    • 3.1 Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠΎΠ² 12
    • 3.2 Π’Ρ‹Π²ΠΎΠ΄Ρ‹ 13
  • 4 ДинамичСский ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ коррСктности 14
    • 4.1 Π‘Ρ…Π΅ΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ° 14
    • 4.2 ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ Π΄Π΅Ρ€Π΅Π²Π° контСкстов 15
    • 4.3 ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ошибок ΠΎΠ±Ρ‰Π΅ΠΉ памяти 18
      • 4.3.1 ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ критичСских областСй 18
      • 4.3.2 ОписаниС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° 20
    • 4.4 Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ контСкстов 23
    • 4.5 ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ошибок ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ 24
  • 5 ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠ°Ρ рСализация 27
    • 5.1 Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ° 27
    • 5.2 ОбъСдинСниС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² 28
    • 5.3 ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ° 30
    • 5.4 Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ тСстирования 31
  • Π›ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π° 38

1 Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

1.1 ВСхнология OpenMP

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ OpenMP[1] создавался для упрощСния Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ для Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… систСм с ΠΎΠ±Ρ‰Π΅ΠΉ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ для распараллСливания ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ (ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ прСпроцСссору для C/C++) — Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ компилятору, нСпосрСдствСнно ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹, ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π½Π° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния, ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ процСссом выполнСния ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… областСй.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π°Ρ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ OpenMP, состоит ΠΈΠ· ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… участков. Π’ Π½Π°Ρ‡Π°Π»Π΅ Π΅Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ создаСтся ΠΎΠ΄Π½Π° Π½ΠΈΡ‚ΡŒ, которая сущСствуСт Π½Π° ΠΏΡ€ΠΎΡ‚яТСнии всСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Когда какая-Π»ΠΈΠ±ΠΎ Π½ΠΈΡ‚ΡŒ Π΄ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Π΄ΠΎ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ участка, Ρ‚ΠΎ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°ΡŽΡ‚ся Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π½ΠΈΡ‚ΠΈ, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠ΅ вмСстС с Π½Π΅ΠΉ этот участок. Π“Ρ€ΡƒΠΏΠΏΠΎΠΉ Π½ΠΈΡ‚Π΅ΠΉ называСтся мноТСство Π½ΠΈΡ‚Π΅ΠΉ, созданных ΠΏΡ€ΠΈ Π²Ρ…ΠΎΠ΄Π΅ Π² Π΄Π°Π½Π½ΡƒΡŽ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΏΠΎΡ€ΠΎΠ΄ΠΈΠ²ΡˆΡƒΡŽ ΠΈΡ… Π½ΠΈΡ‚ΡŒ, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ Π³Π»Π°Π²Π½ΠΎΠΉ. ΠΠΈΡ‚ΡŒ, Π΄ΠΎΡΡ‚ΠΈΠ³ΡˆΠ°Ρ ΠΊΠΎΠ½Ρ†Π° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΉ области, доТидаСтся всю Π³Ρ€ΡƒΠΏΠΏΡƒ. Когда всС Π½ΠΈΡ‚ΠΈ ΠΎΠ΄Π½ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΡ‹ Π΄ΠΎΠΉΠ΄ΡƒΡ‚ Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ участка, всС Π½ΠΈΡ‚ΠΈ ΠΊΡ€ΠΎΠΌΠ΅ Π³Π»Π°Π²Π½ΠΎΠΉ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡŽΡ‚ΡΡ, Π° Π³Π»Π°Π²Π½Π°Ρ Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. На Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 1 ΠΏΠΎΠΊΠ°Π·Π°Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ создания ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ Π½ΠΈΡ‚Π΅ΠΉ Π² ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… областях Π² ΡΠ»ΡƒΡ‡Π°Π΅ наличия Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… участков.

Рисунок 1: ΠŸΡ€ΠΈΠΌΠ΅Ρ€ выполнСния ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ участка

Π’ OpenMP ΠΏΠ°ΠΌΡΡ‚ΡŒ подраздСляСтся Π½Π° 2 Π²ΠΈΠ΄Π°: общая ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Π°Ρ ΠΏΠ°ΠΌΡΡ‚ΡŒ.

ΠžΠ±Ρ‰Π°Ρ ΠΏΠ°ΠΌΡΡ‚ΡŒ доступна нСскольким нитям ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. Однако, для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½Π΅ΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ конструкции, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π½Π΅Π΄Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΠ·ΠΌΠ°.

Π›ΠΎΠΊΠ°Π»ΡŒΠ½Π°Ρ ΠΏΠ°ΠΌΡΡ‚ΡŒ доступна Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠΉ Π½ΠΈΡ‚ΠΈ.

1.2 Ошибки, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΈ использовании OpenMP

Π’ 2004;2005 Π³ΠΎΠ΄Π°Ρ… Π² University of Kassel (ГСрмания) ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ исслСдованиС, Ρ†Π΅Π»ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±Ρ‹Π»ΠΎ выявлСниС Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ часто ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Π΅ΠΌΡ‹Ρ… ошибок, обусловлСнных Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ использованиСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² OpenMP, ΠΈ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΡΡ‰ΠΈΡ… ΠΊ Π½Π΅Π²Π΅Ρ€Π½ΠΎΠΌΡƒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ЭкспСримСнт проводился Π½Π° ΡΡ‚ΡƒΠ΄Π΅Π½Ρ‚Π°Ρ… этого унивСрситСта, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Π»ΠΈ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ OpenMP вСрсии 2.5 ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½Π΅ΠΉ. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ испытуСмых Ρ€Π°Π½Π΅Π΅ Π½Π΅ ΠΈΠΌΠ΅Π»ΠΈ ΠΎΠΏΡ‹Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ с OpenMP, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ Π²Ρ‹ΡΠ²ΠΈΡ‚ΡŒ ошибки, допускаСмыС Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΌΠΈ программистами. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π±Ρ‹Π»ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ошибки [3]:

1) НСзащищСнный доступ ΠΊ ΠΎΠ±Ρ‰ΠΈΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ.

Данная ошибка Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° нСсколько Π½ΠΈΡ‚Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с ΠΎΠ±Ρ‰Π΅ΠΉ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π±Π΅Π· ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ синхронизации. Π’ ΡΡ‚ΠΎΠΌ случаС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ситуации:

— Π²ΡΠ΅ Π½ΠΈΡ‚ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, Ρ‚ΠΎΠ³Π΄Π° ошибки Π½Π΅Ρ‚, Ρ‚.ΠΊ. Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² Π»ΡŽΠ±ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ остаСтся Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹ΠΌ.

— Π²ΡΠ΅ Π½ΠΈΡ‚ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΈΡˆΡƒΡ‚ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ это Π΄Π΅Π»Π°ΡŽΡ‚ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, Ρ‚ΠΎ Π½Π΅Π»ΡŒΠ·Ρ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ пСрСмСнная послС выполнСния всСх ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ записи. И Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ запускС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ.

— Ρ‡Π°ΡΡ‚ΡŒ Π½ΠΈΡ‚Π΅ΠΉ Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, Π° Ρ‡Π°ΡΡ‚ΡŒ ΠΏΠΈΡˆΡƒΡ‚ Π² Π½Π΅Π΅. Π—Π΄Π΅ΡΡŒ ΠΏΠΎΠΌΠΈΠΌΠΎ эффСкта ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ случая, Π½Π°Π±Π»ΡŽΠ΄Π°Π΅Ρ‚ΡΡ аналогичная Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΡΡ‚ΡŒ. Когда какая-Π»ΠΈΠ±ΠΎ Π½ΠΈΡ‚ΡŒ пытаСтся ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Ρ‚ΠΎ Π½Π΅ΠΈΠ·Π²Π΅ΡΡ‚Π½ΠΎ, ΠΊΠ°ΠΊΠΎΠ΅ ΠΈΠΌΠ΅Π½Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ.

2) ИспользованиС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° Π·Π°ΠΌΠΊΠΎΠ² Π±Π΅Π· Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ flush.

Π­Ρ‚ΠΎΡ‚ ΠΏΡƒΠ½ΠΊΡ‚ являСтся ошибкой Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ€Π°Π½Π½ΠΈΡ… вСрсий OpenMP (Π΄ΠΎ Π²Π΅Ρ€ΡΠΈΠΈ 2.5).

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΎΠ±Ρ‰ΠΈΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ прСдполагаСтся, Ρ‡Ρ‚ΠΎ каТдая Π½ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с ΠΊΠΎΠΏΠΈΠ΅ΠΉ этой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, располоТСнной Π² ΠΊΡΡˆΠ΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ процСссора. Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° flush обновляСт Π²ΠΎ Π²ΡΠ΅Ρ… нитях значСния ΠΎΠ±Ρ‰ΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Ρ‚. Π΅. всС Π½ΠΈΡ‚ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ послСдниС измСнСния. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°ΠΌΠΊΠΈ Π±Π΅Π· Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ flush, Ρ‚ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° ситуация, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄Π½Π° Π½ΠΈΡ‚ΡŒ Π·Π°ΠΌΠΎΠΊ поставит, Π° Π΄Ρ€ΡƒΠ³Π°Ρ Π½Π΅ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ рСсурс свободСн, ΠΈ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π±ΡƒΠ΄Π΅Ρ‚ нСкоррСктная ситуация, ΠΊΠΎΠ³Π΄Π° сразу нСсколько Π½ΠΈΡ‚Π΅ΠΉ установили ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Π·Π°ΠΌΠΎΠΊ. Начиная с Π²Π΅Ρ€ΡΠΈΠΉ OpenMP 2.5, Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° flush Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² ΡΠΎΡΡ‚Π°Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π·Π°ΠΌΠΊΠ°ΠΌΠΈ.

3) Π§Ρ‚Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ‰ΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π±Π΅Π· Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ flush.

Битуация аналогичная ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌΡƒ ΡΠ»ΡƒΡ‡Π°ΡŽ. Если Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ flush ΠΏΠ΅Ρ€Π΅Π΄ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Ρ‚ΠΎ Π½ΠΈΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ послСднСС ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Π’ΠΎΠΎΠ±Ρ‰Π΅, Π² ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ… вСрсиях OpenMP flush нСявно Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹, Π² ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ Π² ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅, Ρ‡Ρ‚ΠΎ позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… случаях Π΄Π°Π½Π½ΠΎΠΉ ошибки.

4) ИспользованиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹Ρ…, хотя Ρ‚Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ ΠΎΠ½ΠΈ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ся.

Π­Ρ‚Π° ошибка Π²Ρ‹Π·Π²Π°Π½Π° Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ программист Π·Π°Π±Ρ‹Π» ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ пСрСмСнная являСтся ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½ΠΎΠΉ. Π’ΠΎ Π²Ρ€Π΅ΠΌΡ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π΄Π°Π½Π½ΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΎΡ‚ ΠΎΡˆΠΈΠ±ΠΊΠΈ, описанной Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΡƒΠ½ΠΊΡ‚Π΅.

5) ИспользованиС прСдлоТСния ordered Π±Π΅Π· конструкции ordered.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ Ссли Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π΅ распараллСливания Ρ†ΠΈΠΊΠ»Π° ΡƒΠΊΠ°Π·Π°Π½ΠΎ условиС ordered, Ρ‚ΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ этого Ρ†ΠΈΠΊΠ»Π° Π΄ΠΎΠ»ΠΆΠ½Π° Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ, помСчСнная ΠΊΠ°ΠΊ ordered. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ указанная ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ порядкС (ΠΏΠΎ ΠΈΡ‚Срациям Ρ†ΠΈΠΊΠ»Π°), Ρ‡Ρ‚ΠΎ ΠΈ Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ Ρ‚Π°ΠΊΠΎΠΉ области Π² Ρ‚Π΅Π»Π΅ Ρ†ΠΈΠΊΠ»Π°, ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ условия ordered считаСтся ошибкой.

6) ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ распараллСливаСмого Ρ†ΠΈΠΊΠ»Π° объявлСна ΠΊΠ°ΠΊ общая.

Вакая пСрСмСнная Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Ρ‰Π΅ΠΉ, Ρ‚.ΠΊ. Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½ΠΈΡ‚ΠΈ ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ своС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. МногиС компиляторы просто ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ указания ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰Π΅ΠΉ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ†ΠΈΠΊΠ»Π°.

7) ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ слова for Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π΅ parallel for

Π˜Ρ‚ΠΎΠ³ΠΎΠΌ этой ошибки Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ†ΠΈΠΊΠ»Π° ΠΌΠ΅ΠΆΠ΄Ρƒ нитями, Π° ΠΊΠ°ΠΆΠ΄Π°Ρ Π½ΠΈΡ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π΅Π³ΠΎ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΎΡˆΠΈΠ±ΠΊΠ΅ ΠΎΠ±Ρ‰Π΅ΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

8) ИзмСнСниС числа Π½ΠΈΡ‚Π΅ΠΉ Π² ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΉ области ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π’ OpenMP ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ число Π½ΠΈΡ‚Π΅ΠΉ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ΄Π΅Π»Π΅Π½Π°, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌ участкС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

9) БнятиС Π·Π°ΠΌΠΊΠ° Π½ΠΈΡ‚ΡŒΡŽ, которая Π΅Π³ΠΎ Π½Π΅ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Π»Π°.

Π—Π°ΠΌΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ снят Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½ΠΈΡ‚ΡŒΡŽ, ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΠ²ΡˆΠ΅ΠΉ Π΅Π³ΠΎ.

10) ИзмСнСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ распараллСлСнного Ρ†ΠΈΠΊΠ»Π° Π²Π½ΡƒΡ‚Ρ€ΠΈ Π½Π΅Π³ΠΎ.

ИзмСнСниС ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π½Π΅ΠΏΡ€Π΅Π΄ΡΠΊΠ°Π·ΡƒΠ΅ΠΌΡ‹ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ, Ρ‚.ΠΊ. Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΎ распрСдСлСниС ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ Ρ†ΠΈΠΊΠ»Π° ΠΌΠ΅ΠΆΠ΄Ρƒ нитями.

Из ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½Π½Ρ‹Ρ… ошибок Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ частыми ΠΈ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ отслСТиваСмыми ΡΠ²Π»ΡΡŽΡ‚ΡΡ ошибки 1 ΠΈ 4. Но ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΈΡ… Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° Π²ΠΎ Π²Ρ€Π΅ΠΌΡ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‚ΠΎ ΡΠ»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΈΡ… ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π² ΠΎΠ΄Π½Ρƒ Π³Ρ€ΡƒΠΏΠΏΡƒ. НазовСм Π΅Π΅ ΠΎΡˆΠΈΠ±ΠΊΠ°ΠΌΠΈ ΠΎΠ±Ρ‰Π΅ΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ список ошибок Π½Π΅ ΡΠ²Π»ΡΠ΅Ρ‚ся ΠΏΠΎΠ»Π½Ρ‹ΠΌ ΠΈ ΠΏΠΎΡΡ‚ΠΎΠΌΡƒ слСдуСт ΡΠΊΠ°Π·Π°Ρ‚ΡŒ Π΅Ρ‰Π΅ ΠΎ ΠΏΠ°Ρ€Π΅ ошибок, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ Π² OpenMP-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅:

Β· Ошибка ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π‘ΡƒΡ‚ΡŒ этой ошибки Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ситуация, ΠΊΠΎΠ³Π΄Π° происходит Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π΅Ρ‰Π΅ Π½Π΅ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΠ»ΠΈ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ВСхнология OpenMP Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ число Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΡ‡ΠΈΠ½ этой ошибки. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ. ΠžΠ±Ρ‹Ρ‡Π½Π°Ρ приватная пСрСмСнная (private) ΠΏΡ€ΠΈ Π²Ρ…ΠΎΠ΄Π΅ Π² ΠΎΠ±Π»Π°ΡΡ‚ΡŒ, Π³Π΄Π΅ ΠΎΠ½Π°, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π°, Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ значСния. Однако, Ссли ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π΅ firstprivate, Ρ‚ΠΎ ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° становится ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½ΠΎΠΉ, Ρ‚Π°ΠΊ Π΅ΠΉ Π΅Ρ‰Π΅ Π±ΡƒΠ΄Π΅Ρ‚ присвоСно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ пСрСмСнная ΠΈΠΌΠ΅Π»Π° Π΄ΠΎ Π΄Π°Π½Π½ΠΎΠΉ области. Π’ OpenMP ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΎΡ‚ ΠΈΡΡ…ΠΎΠ΄Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ ΠΈ ΠΎΡ‚ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹Ρ… исходным ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ссли программист Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π·Π°Π΄Π°Π» Ρ‚ΠΈΠΏ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Ρ‚ΠΎ, скорСС всСго, проявится ΠΈΠΌΠ΅Π½Π½ΠΎ эта ошибка.

Β· Ошибка Π²Π·Π°ΠΈΠΌΠ½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ (deadlock). Π­Ρ‚ΠΎ классичСская ошибка, которая Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° нСсколько Π½ΠΈΡ‚Π΅ΠΉ сначала Π·Π°Ρ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ Π² ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΠΎΠ΅ пользованиС Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ рСсурсы, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ Π·Π°Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ рСсурсы, Π·Π°Ρ…Π²Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ нитями. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ всС Π½ΠΈΡ‚ΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° виснСт. ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ Π²Π·Π°ΠΈΠΌΠ½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π² OpenMP являСтся случай, ΠΊΠΎΠ³Π΄Π° Π² ΠΎΠ΄Π½ΠΎΠΉ критичСской сСкции находится другая, Π½ΠΎ Ρ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ. Π’ ΡΡ‚ΠΎΠΌ случаС Π½ΠΈΡ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° Π΄ΠΎΠΉΠ΄Π΅Ρ‚ Π΄ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ критичСской сСкции, Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ сама сСбя. Π­Ρ‚ΠΎΡ‚ Π²ΠΈΠ΄ ошибок ΠΈΡΠΊΠ°Ρ‚ΡŒ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ слоТно, Ρ‚.ΠΊ. Π½Π°ΠΉΡ‚ΠΈ мСсто зависания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ ΡΠΎΡΡ‚авляСт особого Ρ‚Ρ€ΡƒΠ΄Π°.

1.3 ΠžΡ‚Π»Π°Π΄ΠΊΠ° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ

ΠŸΡ€ΠΎΡ†Π΅ΡΡ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΌΠΎΠΆΠ½ΠΎ условно ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΡƒΡŽ ΠΈ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ.

Π’ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ отлаТиваСмая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° запускаСтся ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² Π»ΡŽΠ±ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ Π²Ρ‹Π΄Π°Ρ‚ΡŒ Π΅Π΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ состояниС. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ содСрТимоС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΈΡΡ…ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅, выполняя ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΏΠΎ ΡˆΠ°Π³Π°ΠΌ ΠΈΠ»ΠΈ расставляя ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ. И Π½Π° ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρƒ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Π°Ρ Ρ€Π°Π±ΠΎΡ‚Π° модСлируСтся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ достиТСнии ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ любой Π½ΠΈΡ‚ΡŒΡŽ всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π½ΠΈΡ‚ΠΈ Ρ‚Π°ΠΊ ΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² ΡΡ‚ΠΎ врСмя Π² Π»ΡŽΠ±ΠΎΠΌ мСстС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΡ€ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… запусках, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄Π½Π° Π½ΠΈΡ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π΄ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ, Ρ‚ΠΎ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ Π΅ΠΉ Π½ΠΈΡ‚ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· Π² Ρ€Π°Π·Π½Ρ‹Ρ… мСстах, Π° ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ‚ΠΎΠΆΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ, Ρ‡Ρ‚ΠΎ Π² Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ стСпСни ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ обнаруТСния ошибок.

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

1.4 ЦСль Ρ€Π°Π±ΠΎΡ‚Ρ‹

ЦСль Π΄ΠΈΠΏΠ»ΠΎΠΌΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ — Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ динамичСского контроля коррСктности использования Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² OpenMP Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…, написанных Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ Fortran. И ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ количСство потрСбляСмых рСсурсов ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ°.

2 ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ

Π—Π°Π΄Π°Ρ‡Π° инструмСнта, проводящСго динамичСский ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ коррСктности OpenMP ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π² ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ΅ использованиС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ², ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌΡƒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρƒ Π΅Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹. Π’Π΅ΠΌ самым Ρ‚Π°ΠΊΠΎΠΉ инструмСнт Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ ΠΈ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ вСсь процСсс ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ, благодаря Π½Π°Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΡŽ самых распространСнных ΠΈ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… ошибок. Из ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½Π½ΠΎΠ³ΠΎ Π²ΠΎ Π²Π²Π΅Π΄Π΅Π½ΠΈΠΈ списка ошибок Ρ‚Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π΄Π²Π° Π²ΠΈΠ΄Π°: ошибки ΠΎΠ±Ρ‰Π΅ΠΉ памяти ΠΈ ΠΎΡˆΠΈΠ±ΠΊΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

Ошибки ΠΎΠ±Ρ‰Π΅ΠΉ памяти Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚, ΠΊΠΎΠ³Π΄Π° нСсколько Π½ΠΈΡ‚Π΅ΠΉ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ памяти, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ хотя Π±Ρ‹ ΠΎΠ΄Π½Π° ΠΈΠ· Π½ΠΈΡ‚Π΅ΠΉ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ содСрТимоС этой области.

Ошибки ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½Π΅ ΠΏΡ€ΠΈΡΠ²ΠΎΠ΅Π½ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΎΠ΅ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Если ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° обусловлСна использованиСм Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² OpenMP, Ρ‚ΠΎ Ρ‚Ρ€ΡƒΠ΄ΠΎΠ΅ΠΌΠΊΠΎΡΡ‚ΡŒ Π΅Π΅ Π½Π°Ρ…оТдСния Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ сравнима с Π½Π°Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ ошибки ΠΎΠ±Ρ‰Π΅ΠΉ памяти. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π΄Π°Π½Π½Ρ‹ΠΉ Π²ΠΈΠ΄ ошибки ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΠΏΡ€ΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ машинС, Π½ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ…, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… компиляторов ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ OpenMP.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, трСбуСтся Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ нахоТдСния ошибок ΠΎΠ±Ρ‰Π΅ΠΉ памяти ΠΈ ΠΎΡˆΠΈΠ±ΠΎΠΊ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² OpenMP ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…, написанных Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ Fortran 77.

3 ΠžΠ±Π·ΠΎΡ€ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠΎΠ²

На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ нСсколько коммСрчСских инструмСнтов, ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‰ΠΈΡ… динамичСский ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ коррСктности OpenMP ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Рассмотрим ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠΈ Intel Thread Checker[5] ΠΈ Sun Thread Analyzer[4]. Оба инструмСнта способны Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ошибки ΠΎΠ±Ρ‰Π΅ΠΉ памяти ΠΈ Π²Π·Π°ΠΈΠΌΠ½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ OpenMP, Π½ΠΎ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ разновидности ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ° с ΠΎΠ±Ρ‰Π΅ΠΉ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½ΠΈΡ‚ΠΈ POSIX.

Intel Thread Checker ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π° Ρ€Π΅ΠΆΠΈΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹: зависимый ΠΎΡ‚ Ρ‡ΠΈΡΠ»Π° Π½ΠΈΡ‚Π΅ΠΉ ΠΈ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡ‹ΠΉ.

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Π΅ΠΌΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ссли ΠΎΠ½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π»Π°ΡΡŒ с Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. Π’ ΡΡ‚ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ запуск ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒΡΡ ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ°. Для обнаруТСния ошибок ΠΎΠ±Ρ‰Π΅ΠΉ памяти Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ ΠΎΠ΄Π½ΠΎΠΉ Π½ΠΈΡ‚ΠΈ, ΠΏΡ€ΠΈ этом Π² ΡΠ»ΡƒΡ‡Π°Π΅ нахоТдСния ошибки Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π΄Π°Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΈΡΡ…ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅, Π° ΠΈΠΌΡ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ связана эта ошибка, останСтся нСизвСстным.

НСзависимый ΠΎΡ‚ Ρ‡ΠΈΡΠ»Π° Π½ΠΈΡ‚Π΅ΠΉ Ρ€Π΅ΠΆΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡ€ΠΈ компиляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ компилятора Intel ΠΎΠΏΡ†ΠΈΠΈtcheck. ΠŸΡ€ΠΈ этом Π² ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ‡ΠΈΡΠ»ΠΎΠΌ Π½ΠΈΡ‚Π΅ΠΉ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ omp_set_num_threads (), omp_get_num_threads (), omp_get_max_threads (), omp_get_thread_num (), ΠΈ omp_get_num_procs (). Π’ ΡΡ‚ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π° Π½Π° ΠΎΠ΄Π½ΠΎΠΉ Π½ΠΈΡ‚ΠΈ. Π’ ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ смодСлирован ΠΈ, Π½Π΅ ΡΠΌΠΎΡ‚ря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ошибки Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΈ, ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π½Π°ΠΉΠ΄Π΅Π½Ρ‹, ΠΊΠ°ΠΊ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅. Π’Π°ΠΊ ΠΆΠ΅ этот Ρ€Π΅ΠΆΠΈΠΌ позволяСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ΅.

Sun Thread Analyzer Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±Ρ‹Π»Π° скомпилирована с ΠΊΠ»ΡŽΡ‡ΠΎΠΌxinstrument=datarace. Π’Π°ΠΊ ΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° отладочная информация для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ ΠΌΠΎΠ³ Π²Ρ‹Π΄Π°Ρ‚ΡŒ диагностику с ΠΏΡ€ΠΈΠ²ΡΠ·ΠΊΠΎΠΉ ΠΊ ΠΈΡΡ…ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΊΠΎΠ΄Ρƒ. Для обнаруТСния ошибок, запуск ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… нитях.

3.1 Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠΎΠ²

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠΎΠ² Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΎ Π² Center for Computing and Communication RWTH Aachen University Π² Π“Π΅Ρ€ΠΌΠ°Π½ΠΈΠΈ[2]. Intel Thread Checker ΠΈ Sun Thread Analyzer Π·Π°ΠΏΡƒΡΠΊΠ°Π»ΠΈΡΡŒ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ, для опрСдСлСния достоинств ΠΈ Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΠΊΠΎΠ² этих инструмСнтов. Наибольший интСрСс ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π·Π°ΠΌΠ΅Ρ€ΠΎΠ² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π΄Π°Π½Π½Ρ‹Ρ… инструмСнтов ΠΈ Π±Π΅Π· Π½ΠΈΡ…, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ количСство потрСбляСмой памяти. ΠžΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠΈ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Π»ΠΈΡΡŒ Π½Π° 3 ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…:

— Jacobi. ΠŸΡ€ΠΈΠ±Π»ΠΈΠΆΠ΅Π½Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ уравнСния ΠŸΡƒΠ°ΡΡΠΎΠ½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Π―ΠΊΠΎΠ±ΠΈ.

— SMXV. Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π½Π° Π²Π΅ΠΊΡ‚ΠΎΡ€ Π² ΡΠ»ΡƒΡ‡Π°Π΅, ΠΊΠΎΠ³Π΄Π° Π² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ имССтся большоС количСство Π½ΡƒΠ»Π΅Π²Ρ‹Ρ… элСмСнтов.

— AIC. ВычислСниС ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Π»Π° Π°Π΄Π°ΠΏΡ‚ΠΈΠ²Π½Ρ‹ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ.

Π’ Π’Π°Π±Π»ΠΈΡ†Π΅ 1 ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ ΠΏΠΎΡ‚рСбляСмой памяти (Π² ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ‚Π°Ρ…) ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠŸΡ€ΠΈ этом инструмСнты Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Π»ΠΈΡΡŒ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… ΠΌΠ°ΡˆΠΈΠ½Π°Ρ… с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Ρ€Π°Π·Π½Ρ‹Ρ… компиляторов:

Intel — запуск ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, скомпилированной компилятором Intel, Π±Π΅Π· ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ° Π½Π° 2 нитях.

Intel Thread Checker — запуск ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° 2 нитях ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ этого инструмСнта Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΠΌ ΠΎΡ‚ Ρ‡ΠΈΡΠ»Π° Π½ΠΈΡ‚Π΅ΠΉ Ρ€Π΅ΠΆΠΈΠΌΠ΅, Ρ‚.ΠΊ. Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ SMXV ΠΈ AIC ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ‡ΠΈΡΠ»ΠΎΠΌ Π½ΠΈΡ‚Π΅ΠΉ.

Sun — Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° 2 нитях Π±Π΅Π· Ρ€Π΅ΠΆΠΈΠΌΠ° ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ, с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ компилятора Ρ„ΠΈΡ€ΠΌΡ‹ Sun.

Sun Thread Analyzer — ΠΎΡ‚Π»Π°Π΄ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° 2 нитях с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Sun Thread Analyzer.

Π’Π°Π±Π»ΠΈΡ†Π° 1: Π₯арактСристики выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ

Jacobi

SMXV

AIC

MByte

MFLOP/s

MByte

MFLOP/s

MByte

врСмя

Intel

5,0 сСк

Intel Thread Checker

0,9

3,5

9,5 сСк

Sun

8,4 сСк

Sun Thread Analyzer

1,1

0,8

8,5 сСк

Из ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π·Π°ΠΌΠ΅Π΄Π»Π΅Π½ΠΈΠ΅ Π²ΠΎ Π²Ρ€Π΅ΠΌΡ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΡΡ‚ΠΈΠ³Π°Ρ‚ΡŒ сотСн Ρ€Π°Π·, Π² Ρ‚ΠΎ Π²Ρ€Π΅ΠΌΡ ΠΊΠ°ΠΊ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ памяти Ρ‚Π°ΠΊ ΠΆΠ΅ увСличиваСтся Π² Π΄Π΅ΡΡΡ‚ΠΊΠΈ Ρ€Π°Π·.

К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ тСстирования Π±Ρ‹Π»ΠΎ Π·Π°ΠΌΠ΅Ρ‡Π΅Π½ΠΎ, Ρ‡Ρ‚ΠΎ Intel Thread Checker Ρ€Π°Π±ΠΎΡ‚Π°Π» Π½Π° 4-Ρ… нитях с Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ, Ρ‡Ρ‚ΠΎ ΠΈ Π½Π° 2-Ρ….

3.2 Π’Ρ‹Π²ΠΎΠ΄Ρ‹

РассмотрСнныС инструмСнты ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Intel Thread Checker ΠΈ Sun Thread Analyzer, с ΡƒΡΠΏΠ΅Ρ…ΠΎΠΌ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Однако, ΠΈΠ·-Π·Π° Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ увСличСния объСма потрСбляСмых рСсурсов Π²ΠΎ Π²Ρ€Π΅ΠΌΡ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΎΠ½ΠΈ становятся Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹ΠΌΠΈ для Π·Π°Π΄Π°Ρ‡, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… с Π±ΠΎΠ»ΡŒΡˆΠΈΠΌΠΈ объСмами Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ‰ΠΈΠΌΠΈ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ вычислСния. Для Ρ‚Π°ΠΊΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ трСбуСтся ΠΏΠΎΠ΄Π±ΠΈΡ€Π°Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ потрСбляСмыС рСсурсы. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях Ρ‚Π°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ³Π΄Π° объСм Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠΉ памяти Π½Π΅ ΡΠΈΠ»ΡŒΠ½ΠΎ зависит ΠΎΡ‚ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΠ»ΠΈ Ссли ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π½Π° Π²Ρ…ΠΎΠ΄ Π΄Π°Π½Π½Ρ‹Π΅ нСпосрСдствСнно ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ прилоТСния.

4 ДинамичСский ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ коррСктности

4.1 Π‘Ρ…Π΅ΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ°

Π’ ΡΡ‚ΠΎΠΉ Π³Π»Π°Π²Π΅ описана схСма Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ°, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ динамичСский ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ коррСктности OpenMP ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ имССтся исходный ΠΊΠΎΠ΄ Fortran ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ со Π²ΡΡ‚Π°Π²Π»Π΅Π½Π½Ρ‹ΠΌΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°ΠΌΠΈ OpenMP. ΠžΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ скомпилирован Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ интСрфСйс Π² Π²ΠΈΠ΄Π΅ Π½Π°Π±ΠΎΡ€Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Ρ‹ Π² ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΏΡ€ΠΈ наступлСнии ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… событий, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ ΠΏΠ°ΠΌΡΡ‚ΠΈ. ΠŸΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ — инструмСнтатора, Π² ΠΈΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π²ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ Π²Ρ‹Π·ΠΎΠ²Ρ‹ интСрфСйсных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ°. Π”Π°Π»Π΅Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ скомпилирован вмСстС с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΌ Ρ„Π°ΠΉΠ»ΠΎΠΌ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ° Π² Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π½Π° Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ систСмС с ΠΎΠ±Ρ‰Π΅ΠΉ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π΄Π°Π½Π° информация ΠΎΠ± ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…. На Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 2 прСдставлСна описанная схСма.

Рисунок 2: ΠžΠ±Ρ‰Π°Ρ схСма Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ°.

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π΄Π°Π½Π½ΠΎΠΉ схСмС Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ Π½Π°ΠΉΠ΄Π΅Π½Ρ‹ ошибки Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚Π΅Ρ… участках ΠΊΠΎΠ΄Π°, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π² ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±Ρ‹Π»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ°. Из ΡΡ‚ΠΎΠ³ΠΎ слСдуСт, Ρ‡Ρ‚ΠΎ для исслСдования всСго ΠΊΠΎΠ΄Π° Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ошибок Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒ Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅. Но Π² Π»ΡŽΠ±ΠΎΠΌ случаС нСдостиТимый ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ вставлСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ° Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ нСдостиТимы.

Благодаря Ρ‚Π°ΠΊΠΎΠΉ схСмС ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ошибок Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ всю ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ, Π½ΠΎ ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅Π΅ ΡƒΡ‡Π°ΡΡ‚ΠΊΠΈ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Ссли ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ количСство рСсурсов, ΠΈ ΠΏΡ€ΠΈ этом ошибка Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π΅Π΅ Ρ‡Π°ΡΡ‚ΠΈ. Π’ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Π΄Π°Π½Π½Ρ‹ΠΉ участок ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π² ΠΌΠ΅ΡΡ‚Π°, содСрТащиС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Π½Π°Ρ‡Π°Π»ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, описаниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, массивов ΠΈ Ρ‚. Π΄.

4.2 ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ Π΄Π΅Ρ€Π΅Π²Π° контСкстов

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π²ΠΎ Π²Ρ€Π΅ΠΌΡ выполнСния ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ нСсколько ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… Π½ΠΈΡ‚Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Ρ‹ Π² Π³Ρ€ΡƒΠΏΠΏΡ‹, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΌ областям, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ, Ρ‚ΠΎ Π΄Π»Ρ Π°Π½Π°Π»ΠΈΠ·Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ состояния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π΄Π΅Ρ€Π΅Π²ΠΎ, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‰Π΅Π΅ взаимосвязь Π½ΠΈΡ‚Π΅ΠΉ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² Π²Π΅Ρ€ΡˆΠΈΠ½Π°Ρ… этого Π΄Π΅Ρ€Π΅Π²Π°.

Π’ ΠΏΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ трСбуСтся Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π΄Π²Π° Π²ΠΈΠ΄Π° ошибок: ΠΎΠ±Ρ‰Π΅ΠΉ памяти ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π°, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, основным ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ исслСдований ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ ΠΌΠ°ΡΡΠΈΠ²Ρ‹, Π° Ρ‚ΠΎΡ‡Π½Π΅Π΅ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΠΏΠ°ΠΌΡΡ‚ΠΈ. Но, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ Π·Π°ΠΏΠΈΡΡŒ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ связано с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ ΠΈ ΠΌΠ°ΡΡΠΈΠ²Π°ΠΌΠΈ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΠ± ΡΡ‚ΠΈΡ… опСрациях ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² ΠΎΠ΄Π½Ρƒ структуру, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½Π°Π·ΠΎΠ²Π΅ΠΌ VarInfo. И Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ такая структура становится основным ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ.

Π’ ΡΡ‚ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ описываСтся идСя Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ², ΠΈ ΠΏΠΎΡΡ‚ΠΎΠΌΡƒ Π² ΠΈΡ… ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ Π»ΡƒΡ‡ΡˆΠ΅ всСго Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ. Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ сами Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹, оставив Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΡ… ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€Π°Π±ΠΎΡ‚Ρ‹. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ для общности ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ массивы состоят ΠΈΠ· Π½Π°Π±ΠΎΡ€Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ элСмСнту массива, ΠΈ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ… ΠΈΠΌΠ΅Π½Π°, составлСнныС ΠΈΠ· ΠΈΠΌΠ΅Π½ΠΈ самого массива ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠ°, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ элСмСнта. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, дальшС Ρ€Π΅Ρ‡ΡŒ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ.

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ структуру, которая Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ состоянии Π½ΠΈΡ‚ΠΈ, ΠΈ Π½Π°Π·ΠΎΠ²Π΅ΠΌ Π΅Π΅ контСкстом (Context). Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½ΠΈΡ‚ΠΈ Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ доступСн Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ, ΠΏΡ€ΠΈ этом Ρƒ Ρ€Π°Π·Π½Ρ‹Ρ… Π½ΠΈΡ‚Π΅ΠΉ эти Π½Π°Π±ΠΎΡ€Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ€Π°Π·Π½Ρ‹Π΅, Ρ‚.ΠΊ. ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Π»Π°Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ ΠΈ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² Ρ€Π°Π·Π½Ρ‹Ρ… частях ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠŸΡƒΡΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ контСкст Π½ΠΈΡ‚ΠΈ содСрТит структуры Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, (VarInfo) ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±Ρ‹Π»ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° сущСствования этого контСкста. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° VarInfo ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ взята ΠΈΠ· Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ контСкста Π½ΠΈΡ‚ΠΈ ΠΏΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΊΠ»ΡŽΡ‡Ρƒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎ Π°Π΄Ρ€Π΅ΡΡƒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ ΠΊΠ»ΡŽΡ‡ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π΄Π°Π»Π΅Π΅ ΠΏΡ€ΠΈ описании Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² обнаруТСния ошибок, Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΡ‚ΠΎΡ‡Π½Π΅Π½ΠΎ содСрТимоС самой структуры Context.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ для ΠΏΠΎΠ»Π½ΠΎΡ‚Ρ‹ описания состояния всСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ слСдуСт ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹ΡˆΠ΅ Π΄Π΅Ρ€Π΅Π²Π°, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ связи ΠΌΠ΅ΠΆΠ΄Ρƒ нитями, структуры ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ состояния самих Π½ΠΈΡ‚Π΅ΠΉ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ структуры Context. Π’Π°ΠΊΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ Π½Π°Π·ΠΎΠ²Π΅ΠΌ Π΄Π΅Ρ€Π΅Π²ΠΎΠΌ контСкстов.

ΠŸΡ€Π°Π²ΠΈΠ»Π° построСния Π΄Π΅Ρ€Π΅Π²Π° контСкстов выглядят ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Β· Π’ Π½Π°Ρ‡Π°Π»Π΅ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ сущСствуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Π° Π½ΠΈΡ‚ΡŒ, Π° ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄Π΅Ρ€Π΅Π²ΠΎ контСкстов Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Π΄Π°Π½Π½ΠΎΠΉ Π½ΠΈΡ‚ΠΈ.

Β· ΠŸΡ€ΠΈ Π²Ρ…ΠΎΠ΄Π΅ Π² ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ создаСтся Π³Ρ€ΡƒΠΏΠΏΠ° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… Π½ΠΈΡ‚Π΅ΠΉ, которая Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΏΠΎΡ€ΠΎΠ΄ΠΈΠ²ΡˆΡƒΡŽ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π½ΠΈΡ‚ΠΈ (Π³Π»Π°Π²Π½ΡƒΡŽ Π½ΠΈΡ‚ΡŒ). Π’ ΡΡ‚ΠΎΠΌ случаС Π² Π΄Π΅Ρ€Π΅Π²Π΅ контСкстов ΠΊ Π²Π΅Ρ€ΡˆΠΈΠ½Π΅, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Π³Π»Π°Π²Π½ΠΎΠΉ Π½ΠΈΡ‚ΠΈ Π΄ΠΎ ΡΡ‚ΠΎΠΉ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΉ области, Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹-ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΈ, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½ΠΈΡ‚ΠΈ ΠΈΠ· ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΡ‹.

Β· ΠŸΡ€ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΈΠ· ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΉ области Π³Ρ€ΡƒΠΏΠΏΠ° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… Π½ΠΈΡ‚Π΅ΠΉ освобоТдаСтся, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Π³Π»Π°Π²Π½ΠΎΠΉ Π½ΠΈΡ‚ΠΈ, которая ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ. Π’ ΡΡ‚ΠΎΠΌ случаС Π² Π΄Π΅Ρ€Π΅Π²Π΅ ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ всС Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½ΠΈΡ‚ΠΈ ΠΈΠ· ΡƒΠ΄Π°Π»ΡΠ΅ΠΌΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΡ‹, ΠΈ ΠΈΡ… Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠ°Ρ Π²Π΅Ρ€ΡˆΠΈΠ½Π° становится Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ для Π³Π»Π°Π²Π½ΠΎΠΉ Π½ΠΈΡ‚ΠΈ.

Β· ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ проинструмСнтированной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚. Π΅. Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ содСрТащСй обращСния ΠΊ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΡƒ, ΠΊ Π²Π΅Ρ€ΡˆΠΈΠ½Π΅ Π΄Π°Π½Π½ΠΎΠΉ Π½ΠΈΡ‚ΠΈ добавляСтся Π²Π΅Ρ€ΡˆΠΈΠ½Π°-ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ, которая становится Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ для этой Π½ΠΈΡ‚ΠΈ.

Β· ΠŸΡ€ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ тСкущая Π²Π΅Ρ€ΡˆΠΈΠ½Π° Π½ΠΈΡ‚ΠΈ удаляСтся, ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ становится Π΅Π΅ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠ°Ρ Π²Π΅Ρ€ΡˆΠΈΠ½Π°.

На Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 3 ΠΏΠΎΠΊΠ°Π·Π°Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΄Π΅Ρ€Π΅Π²Π° контСкстов. Π’ Π²Π΅Ρ€ΡˆΠΈΠ½Π°Ρ… этого Π΄Π΅Ρ€Π΅Π²Π° ΡƒΠΊΠ°Π·Π°Π½ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π½ΠΎΠΌΠ΅Ρ€ Π½ΠΈΡ‚Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² OpenMP Ρƒ Π»ΡŽΠ±Ρ‹Ρ… Π΄Π²ΡƒΡ… Π½ΠΈΡ‚Π΅ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ.

Рисунок 3: ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π΄Π΅Ρ€Π΅Π²Π° контСкстов

ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½Π½ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ дальнСйшСм описании Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ², поэтому для удобства описания ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ понятия, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚ΡŒΡΡ. ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚ ΠΈΠ»ΠΈ структура Context соотвСтствуСт Π²Π΅Ρ€ΡˆΠΈΠ½Π΅ Π΄Π΅Ρ€Π΅Π²Π°. Π’Π΅ΠΊΡƒΡ‰ΠΈΠΌ контСкстом для Π΄Π°Π½Π½ΠΎΠΉ Π½ΠΈΡ‚ΠΈ называСтся листовая Π²Π΅Ρ€ΡˆΠΈΠ½Π° Π΄Π΅Ρ€Π΅Π²Π°, которая соотвСтствуСт этой Π½ΠΈΡ‚ΠΈ. Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½ΠΈΡ‚ΠΈ сущСствуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ контСкст. Π ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½ΠΎΠΉ называСтся Π²Π΅Ρ€ΡˆΠΈΠ½Π°, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ присоСдинСна данная, ΠΈ Ρ€Π°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½Π°Ρ нСпосрСдствСнно Π½Π°Π΄ Π΄Π°Π½Π½ΠΎΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½ΠΎΠΉ.

4.3 ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ошибок ΠΎΠ±Ρ‰Π΅ΠΉ памяти

Ошибки ΠΎΠ±Ρ‰Π΅ΠΉ памяти Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚, ΠΊΠΎΠ³Π΄Π° нСсколько Π½ΠΈΡ‚Π΅ΠΉ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с ΠΎΠ΄Π½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ памяти, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ хотя Π±Ρ‹ ΠΎΠ΄Π½Π° Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ запись Π² ΡΡ‚Ρƒ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ. Под Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒΡŽ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… OpenMP понимаСтся отсутствиС ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ конструкций синхронизации Π½ΠΈΡ‚Π΅ΠΉ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π΅ Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ ΠΏΠ°ΠΌΡΡ‚ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ….

Π’ OpenMP ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ конструкции синхронизации:

Β· ΠšΡ€ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ сСкции.

Β· АтомарныС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹. Π”Π°Π½Π½ΡƒΡŽ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π° ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΡΠ΅ΠΊΡ†ΠΈΡŽ с ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ.

Β· Π‘Π°Ρ€ΡŒΠ΅Ρ€Π½Π°Ρ синхронизация.

Β· ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠ° Π² Ρ†ΠΈΠΊΠ»Π΅ (ordered).

Β· ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π·Π°ΠΌΠΊΠΎΠ².

4.3.1 ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ критичСских областСй

Под критичСской ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ (сСкциСй) понимаСтся участок ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΉ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ OpenMP-ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ, которая Π½Π΅ Π΄ΠΎΠΏΡƒΡΠΊΠ°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ нСсколькими нитями. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ Π΄Π°Π½Π½Ρ‹Π΅ области ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊ статичСскими (critical, ordered, atomic), Ρ‚Π°ΠΊ ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠΈΠΌΠΈ (ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π·Π°ΠΌΠΊΠΎΠ²).

Для удобства Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±ΡƒΠ΄Π΅ΠΌ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ областСй ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ динамичСски, Ρ‚. Π΅. Π½Π°Ρ‡Π°Π»ΠΎ области опрСдСляСтся ΠΏΡ€ΠΈ Π²Ρ…ΠΎΠ΄Π΅ Π² Π½Π΅Π΅, Π° ΠΊΠΎΠ½Π΅Ρ† — ΠΏΡ€ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅.

ΠŸΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ критичСских сСкций (critical) ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ имя. Π’ ΡΡ‚ΠΎΠΌ случаС критичСскиС области с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ, Π° Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ OpenMP позволяСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ критичСскиС области нСсколькими способами, Π½ΠΎ Π΄Π»Ρ обобщСния достаточно ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΈΠΌΠ΅Π½Π° критичСских областСй для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ случая:

Β· каТдая ΠΎΠ±Π»Π°ΡΡ‚ΡŒ, помСчСнная ΠΊΠ°ΠΊ ordered, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ имя

Β· каТдая Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° atomic ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ имя

Β· имя критичСской сСкции (critical) ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π΅

Β· для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π·Π°ΠΌΠΊΠΎΠ² заводится своС ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ имя Иногда Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ситуации, ΠΊΠΎΠ³Π΄Π° критичСскиС области с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ. Π’ ΡΡ‚ΠΎΠΌ случаС ΠΈΡ… ΠΏΠ΅Ρ€Π΅ΡΠ΅Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ Π½ΠΈ Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΎΠ±Π»Π°ΡΡ‚Π΅ΠΉ входящих Π² ΠΈΡ… Ρ‡ΠΈΡΠ»ΠΎ. Π’ΠΎΠ³Π΄Π° для опрСдСлСния вхоТдСния Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ участка ΠΊΠΎΠ΄Π° Π²ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎ критичСских областСй, Π½ΡƒΠΆΠ½ΠΎ ввСсти понятиС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° критичСской области.

Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ критичСской области для Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° называСтся мноТСство ΠΈΠΌΠ΅Π½ критичСских областСй, ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… этот участок. Π”Π°Π»Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ сравнСниС этих ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ². Π”Π²Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° критичСских областСй Ρ€Π°Π²Π½Ρ‹, Ссли пСрСсСчСниС ΠΈΡ… ΠΌΠ½ΠΎΠΆΠ΅ΡΡ‚Π² ΠΈΠΌΠ΅Π½ критичСских областСй Π½Π΅ ΠΏΡƒΡΡ‚ΠΎ, Ρ‚. Π΅. найдСтся такая критичСская ΠΎΠ±Π»Π°ΡΡ‚ΡŒ, имя ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² ΠΎΠ±Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°. И, соотвСтствСнно ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ Π½Π΅ Ρ€Π°Π²Π½Ρ‹, Ссли пСрСсСчСниС ΠΈΡ… ΠΌΠ½ΠΎΠΆΠ΅ΡΡ‚Π² пусто.

Π˜ΡΡ…ΠΎΠ΄Ρ ΠΈΠ· ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ, слСдуСт, Ρ‡Ρ‚ΠΎ Π»ΡŽΠ±Ρ‹Π΅ Π΄Π²Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ, Ссли ΠΈΡ… ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ критичСской области Π½Π΅ Ρ€Π°Π²Π½Ρ‹.

4.3.2 ОписаниС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°

Для обнаруТСния ошибки ΠΎΠ±Ρ‰Π΅ΠΉ памяти Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΠ±Ρ‰Π΅ΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, ΠΎΠ± ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΡΡ… ΠΊ Π½Π΅ΠΉ. ΠŸΡƒΡΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ всС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΡƒΡŽΡ‚ ΠΌΠ΅ΠΆΠ΄Ρƒ собой Π·Π° Π΄ΠΎΡΡ‚ΡƒΠΏ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Π’ΠΎΠ³Π΄Π° для ΠΈΡ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ достаточно ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρƒ, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΡƒΡŽ ΠΎΠ±Ρ‰ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ (VarInfo):

Β· список ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½Π° Π·Π°ΠΏΠΈΡΡŒ (WriteList). ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт Π΄Π°Π½Π½ΠΎΠ³ΠΎ списка Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² ΡΠ΅Π±Ρ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ:

§ Π½ΠΎΠΌΠ΅Ρ€ Π½ΠΈΡ‚ΠΈ, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠ²ΡˆΠ΅ΠΉΡΡ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ

§ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ критичСской сСкции

§ ссылка Π½Π° ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ мСста Π² ΠΈΡΡ…ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ

Β· список ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ (ReadList). Бписок состоит ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… ΠΆΠ΅ элСмСнтов, Ρ‡Ρ‚ΠΎ ΠΈ WriteList.

Β· имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

Β· адрСс ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° VarInfo ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ±Ρ‰Π΅ΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π° ΠΈΠ· Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ контСкста Π½ΠΈΡ‚ΠΈ ΠΏΠΎ Π°Π΄Ρ€Π΅ΡΡƒ этой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΊΠ»ΡŽΡ‡Π° поиска.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Context ΠΈΠ· Π΄Π΅Ρ€Π΅Π²Π° контСкстов Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅:

Β· мноТСство структур VarInfo для ΠΎΠ±Ρ‰ΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. ΠŸΡ€ΠΈ создании контСкста это мноТСство Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ пустым. Π›ΡŽΠ±Π°Ρ структура ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π±Ρ€Π°Π½Π° ΠΈΠ· ΡΡ‚ΠΎΠ³ΠΎ мноТСства ΠΏΠΎ Π°Π΄Ρ€Π΅ΡΡƒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Π΅ΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Если ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ Ρ‚Π°ΠΊΠΎΠΉ структуры Π½Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚ся, Ρ‚ΠΎ ΠΎΠ½Π° создаСтся для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰Π΅ΠΉ этому адрСсу.

Β· ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π½ΠΈΡ‚ΠΈ, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π΄Π°Π½Π½Ρ‹ΠΉ контСкст являСтся Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ. Π­Ρ‚ΠΎΡ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π½Π΅ ΠΌΠ΅Π½ΡΠ΅Ρ‚ся Π½Π° ΠΏΡ€ΠΎΡ‚яТСнии всСго Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ сущСствования Π΄Π°Π½Π½ΠΎΠ³ΠΎ контСкста.

Β· ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ критичСской области (critical_id).

Β· список ΠΈΠΌΠ΅Π½ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΡΠ²Π»ΡΡŽΡ‰ΠΈΡ…ΡΡ ΠΎΠ±Ρ‰ΠΈΠΌΠΈ для Π΄Π°Π½Π½ΠΎΠ³ΠΎ контСкста. На ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ это Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ список, Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ для Π΄Π°Π½Π½ΠΎΠ³ΠΎ контСкста, Ρ‚. Π΅. описана Π»ΠΈ пСрСмСнная ΠΊΠ°ΠΊ общая ΠΈΠ»ΠΈ Π½Π΅Ρ‚. Π’ OpenMP сущСствуСт ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ умолчания, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ опрСдСляСт класс ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Ссли послСдняя Π½Π΅ Π±Ρ‹Π»Π° явно ΡƒΠΊΠ°Π·Π°Π½Π° Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π΅ OpenMP. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π° всСх ΠΎΠ±Ρ‰ΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² Π΄Π°Π½Π½Ρ‹ΠΉ список, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ-ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΌ Ρ‚ΠΈΠΏΠ°. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ для ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ³ΠΎ контСкста всС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΌΠΈ, Π° Π΄Π»Ρ контСкста, созданного ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±Ρ‰ΠΈΠΌΠΈ, Π° Π²ΡΠ΅ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΌΠΈ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ сам Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ. Он ΡΠΎΡΡ‚ΠΎΠΈΡ‚ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€Π°Π²ΠΈΠ»:

Β· Π”Π΅Ρ€Π΅Π²ΠΎ контСкстов строится Π² ΡΠΎΠΎΡ‚вСтствии с ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΌΠΈ Ρ€Π°Π½Π΅Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ.

Β· ΠŸΡƒΡΡ‚ΡŒ context — это контСкст Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π½ΠΈΡ‚ΠΈ; parent - контСкст, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΉΡΡ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ для context Π² Π΄Π΅Ρ€Π΅Π²Π΅. ΠŸΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ опрСдСляСтся Π΅Π΅ Ρ‚ΠΈΠΏ Π² ΠΊΠΎΠ½Ρ‚СкстС context. Если пСрСмСнная общая, Ρ‚ΠΎ Π² ΠΊΠΎΠ½Ρ‚СкстС parent ΠΏΠΎ Π΅Π΅ Π°Π΄Ρ€Π΅ΡΡƒ выбираСтся структура VarInfo. И Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° обращСния ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² ΡΠΏΠΈΡΠΎΠΊ WriteList ΠΈΠ»ΠΈ ReadList добавляСтся элСмСнт, содСрТащий: Π½ΠΎΠΌΠ΅Ρ€ Π½ΠΈΡ‚ΠΈ (thread_id), хранящийся Π² context, Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ критичСской области (critical_id), ссылку Π½Π° ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΈΡΡ…ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ этого обращСния ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Π”Π°Π»Π΅Π΅ происходит исслСдованиС структуры VarInfo Π½Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π° Π½ΠΎΠ²ΠΎΠΉ записи с Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹ΠΌΠΈ Ρ€Π°Π½Π΅Π΅. ΠŸΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ производится ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ всСх записСй ΠΈΠ· ΡΠΏΠΈΡΠΊΠ° WriteList с Π½ΠΎΠΌΠ΅Ρ€Π°ΠΌΠΈ Π½ΠΈΡ‚Π΅ΠΉ, ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΎΡ‚ thread_id. Ошибка Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΉΠ΄Π΅Π½Π°, Ссли найдСтся запись, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ критичСской области Π½Π΅ Ρ€Π°Π²Π΅Π½ critical_id. ΠŸΡ€ΠΈ записи Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ производится ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ ΡΠΏΠΈΡΠΊΡƒ WriteList, Π½ΠΎ ΠΈ ΠΏΠΎ списку ReadList. ПослС окончания ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ошибок, опрСдСляСтся Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡƒΠΆΠ΅ Π² ΠΊΠΎΠ½Ρ‚СкстС parent ΠΈ, Ссли ΠΎΠ½Π° являСтся ΠΎΠ±Ρ‰Π΅ΠΉ, Ρ‚ΠΎ Π΄Π°Π½Π½ΠΎΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ повторяСтся снова, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ context бСрСтся parent, Π° Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ parent выступаСт Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ контСкст Π½ΠΎΠ²ΠΎΠ³ΠΎ context. ΠŸΡ€ΠΈ этом critical_id остаСтся Ρ‚Π΅ΠΌ ΠΆΠ΅ самым. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, происходит подъСм ΠΏΠΎ Π΄Π΅Ρ€Π΅Π²Ρƒ контСкстов Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ Π½Π°ΠΉΠ΄Π΅Ρ‚ся Π²Π΅Ρ€ΡˆΠΈΠ½Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ данная пСрСмСнная Π½Π΅ ΡΠ²Π»ΡΠ΅Ρ‚ся ΠΎΠ±Ρ‰Π΅ΠΉ. На Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 4 ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° схСма, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ Π΄Π°Π½Π½ΠΎΠΌΡƒ ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ.

Рисунок 4: схСма Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ

Β· ΠΏΡ€ΠΈ Π²Ρ…ΠΎΠ΄Π΅ Π² ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ контСкстС ΠΏΠΎΠ»Π΅ critical_id модифицируСтся, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΈΠΌΠ΅Π½ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ области.

Β· ΠΏΡ€ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΈΠ· ΠΊΡ€ΠΈΡ‚ичСской области Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ контСкстС ΠΈΠ· ΠΏΠΎΠ»Ρ critical_id ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ имя этой области.

Β· ΠΏΡ€ΠΈ любой (явной ΠΈΠ»ΠΈ нСявной) Π±Π°Ρ€ΡŒΠ΅Ρ€Π½ΠΎΠΉ синхронизации трСбуСтся для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½ΠΈΡ‚ΠΈ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΉ области ΡΠ±Ρ€ΠΎΡΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ±ΠΎ всСх ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ контСкстС. Π’. Π΅. Π²ΠΎ Π²ΡΠ΅Ρ… Π²Π΅Ρ€ΡˆΠΈΠ½Π°Ρ…, располоТСнных ΠΏΠΎΠ΄ Π²Π΅Ρ€ΡˆΠΈΠ½ΠΎΠΉ, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰Π΅ΠΉ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅Π±Ρ€Π°Ρ‚ΡŒ всС структуры VarInfo ΠΈ ΠΎΡ‡ΠΈΡΡ‚ΡŒ ΠΈΡ… ΡΠΏΠΈΡΠΊΠΈ ReadList ΠΈ WriteList. Π’ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹, ΠΌΠΎΠΆΠ½ΠΎ просто ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ всС эти структуры VarInfo.

ИдСя Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Π°Ρ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π° ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌΠΈ Π±Π°Ρ€ΡŒΠ΅Ρ€Π°ΠΌΠΈ Π½Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ располоТСнныС участки. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, располоТСнныС Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ участка ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ, Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, располоТСнныС Π² Ρ€Π°Π·Π½Ρ‹Ρ… участках всСгда Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π² Ρ€Π°Π·Π½ΠΎΠ΅ врСмя. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ участка. Π­Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ сущСствуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ°, Π° Π² ΡΠ»ΡƒΡ‡Π°Π΅ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ° Π½Π° ΠΏΠΎΠΌΠΎΡ‰ΡŒ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ Π΄Π΅Ρ€Π΅Π²ΠΎ контСкстов, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ позволяСт Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ… участках всСх ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… областСй.

4.4 Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ контСкстов

Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ контСкстов отличаСтся ΠΎΡ‚ ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π½Π΅Π΅ Π΄Π΅Ρ€Π΅Π²Π° контСкстов Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π΅Π³ΠΎ построСнии ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°:

Β· ΠΏΡ€ΠΈ Π²Ρ…ΠΎΠ΄Π΅ Π½ΠΈΡ‚ΠΈ Π² Π»ΡŽΠ±ΡƒΡŽ ΠΈΠ· ΠΎΠ±Π»Π°ΡΡ‚Π΅ΠΉ SINGLE, DO ΠΈΠ»ΠΈ SECTIONS ΠΊ Π²Π΅Ρ€ΡˆΠΈΠ½Π΅, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰Π΅ΠΉ Π΄Π°Π½Π½ΠΎΠΉ Π½ΠΈΡ‚ΠΈ, добавляСтся Π²Π΅Ρ€ΡˆΠΈΠ½Π°-ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ, ΠΈ ΠΎΠ½Π° становится Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ для Π½ΠΈΡ‚ΠΈ.

Β· ΠΏΡ€ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΈΠ· Π»ΡŽΠ±ΠΎΠΉ ΠΈΠ· ΠΎΠ±Π»Π°ΡΡ‚Π΅ΠΉ SINGLE, DO ΠΈΠ»ΠΈ SECTIONS тСкущая Π²Π΅Ρ€ΡˆΠΈΠ½Π° Π½ΠΈΡ‚ΠΈ удаляСтся ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ становится Π΅Π΅ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠ°Ρ Π²Π΅Ρ€ΡˆΠΈΠ½Π°.

ΠŸΡ€ΠΈ создании любой Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ Π² ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρƒ Context, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽΡΡ Π² Π½Π΅ΠΉ, добавляСтся информация, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² Π΄Π°Π½Π½ΠΎΠΌ контСкстС ΠΏΠΎ Π΅Π΅ ΠΈΠΌΠ΅Π½ΠΈ. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ, для Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² SINGLE, DO ΠΈΠ»ΠΈ SECTIONS, Ссли Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΈ ΠΎΠ½Π° Π½Π΅ ΡΠ²Π»ΡΠ΅Ρ‚ся THREADPRIVATE, Ρ‚ΠΎ ΠΎΠ½Π° считаСтся Ρ‚ΠΈΠΏΠ° SHARED. Π’ ΠΊΠΎΠ½Ρ‚Скстах, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π²Ρ‹Π·ΠΎΠ²Π°ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, имССтся информация ΠΎ ΡΠ²ΡΠ·ΠΈ фактичСских ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Для фактичСских ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Π° Π½Π΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡ, Ρ‚ΠΈΠΏ опрСдСляСтся ΠΊΠ°ΠΊ SHARED.

4.5 ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ошибок ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ

Ошибки ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠ΅-Π»ΠΈΠ±ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ΠŸΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ошибка Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠΈΠ»ΠΈ ΠΆΠ΅ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ΅ использованиС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² OpenMP.

ΠŸΡ€ΠΈ использовании Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² OpenMP пСрСмСнная ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Π΅Ρ€ΡΡ‚ΡŒ своС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… случаях:

Β· ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ объявлСна ΠΊΠ°ΠΊ PRIVATE, Ρ‚ΠΎΠ³Π΄Π° ΠΎΠ½Π° тСряСт своС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ Π²Ρ…ΠΎΠ΄Π΅ Π² ΡΡ‚Ρƒ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ ΠΈ ΠΏΡ€ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΈΠ· Π½Π΅Π΅.

Β· FIRSTPRIVATE пСрСмСнная тСряСт своС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΈΠ· ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΉ конструкции.

Β· LASTPRIVATE пСрСмСнная Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ значСния.

Β· THREADPRIVATE ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ссли ΠΎΠ½ΠΈ Π½Π΅ Π±Ρ‹Π»ΠΈ ΠΏΡ€ΠΎΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΠΈΠ»ΠΈ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π΅ COPYIN.

Для обнаруТСния ошибок этого Π²ΠΈΠ΄Π° достаточно ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ обращСния ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ ΠΈ ΠΈΠΌΠ΅Ρ‚ΡŒ построСнноС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ контСкстов.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° VarInfo для Ρ€Π°Π±ΠΎΡ‚Ρ‹ описываСмого Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΏΠΎΠ»Π΅ init, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π΅Π΅, присвоСно Π»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΊΠ°ΠΊΠΎΠ΅-Π»ΠΈΠ±ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ имя этой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Context Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅:

Β· мноТСство структур VarInfo для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. ΠŸΡ€ΠΈ создании контСкста это мноТСство пусто. Π›ΡŽΠ±Π°Ρ структура ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π±Ρ€Π°Π½Π° ΠΈΠ· ΡΡ‚ΠΎΠ³ΠΎ мноТСства ΠΏΠΎ Π°Π΄Ρ€Π΅ΡΡƒ ΠΈΠ»ΠΈ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Π΅ΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ структура, получаСмая ΠΏΠΎ Π°Π΄Ρ€Π΅ΡΡƒ ΠΈ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ для ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄Π½Π° ΠΈ Ρ‚Π° ΠΆΠ΅.

Β· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π΅ OpenMP.

Π”Π°Π»Π΅Π΅ описан Π½Π°Π±ΠΎΡ€ ΠΏΡ€Π°Π²ΠΈΠ», ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ:

Β· Если пСрСмСнная ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° ΠΊΠ°ΠΊ THREADPRIVATE, Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π½Π΅ΠΉ приходится ΠΈΠ½Π°Ρ‡Π΅, Ρ‡Π΅ΠΌ с ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ. Для Ρ‚Π°ΠΊΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… каТдая Π½ΠΈΡ‚ΡŒ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ контСкст (Π½Π°Π·ΠΎΠ²Π΅ΠΌ Π΅Π³ΠΎ thread_context), Π½Π΅ Π²Ρ…одящий Π² Π΄Π΅Ρ€Π΅Π²ΠΎ контСкстов. Из ΡΡ‚ΠΎΠ³ΠΎ контСкста структуры VarInfo ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Ρ‹ ΠΏΠΎ Π°Π΄Ρ€Π΅ΡΡƒ THREADPRIVATE-ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. ΠŸΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ для Π½Π΅Π΅ заводится Π² ΠΊΠΎΠ½Ρ‚СкстС thread_context своя структура VarInfo, ΠΏΠΎΠ»Π΅ init ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ false. ΠŸΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ структура VarInfo Ρ‚Π°ΠΊ ΠΆΠ΅ бСрСтся ΠΈΠ· ΠΊΠΎΠ½Ρ‚Скста thread_context. Если пСрСмСнная появляСтся Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π΅ COPYIN, Ρ‚ΠΎ Π²ΡΠ΅ Π½ΠΈΡ‚ΠΈ этой Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‚ сСбС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ поля init ΠΈΠ· ΠΊΠΎΠ½Ρ‚Скста thread_context Π³Π»Π°Π²Π½ΠΎΠΉ Π½ΠΈΡ‚ΠΈ. Π’ ΡΠ»ΡƒΡ‡Π°Π΅, появлСния THREADPRIVATE-ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π΅ COPYPRIVATE, Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ поля init пСрСдаСтся всСм нитям Π³Ρ€ΡƒΠΏΠΏΡ‹.

Β· ΠŸΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ контСкстС Π΄Π°Π½Π½ΠΎΠΉ Π½ΠΈΡ‚ΠΈ ищСтся структура VarInfo ΠΏΠΎ Π°Π΄Ρ€Π΅ΡΡƒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Если такая структура Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½Π°, Ρ‚ΠΎ ΠΎΠ½Π° добавляСтся ΠΈ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° устанавливаСтся Π΅Π΅ ΠΏΠΎΠ»Π΅ init (ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡ΠΈΠΌ Π΅Π³ΠΎ new_init):

o ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° ΠΊΠ°ΠΊ SHARED, Ρ‚ΠΎΠ³Π΄Π° ΠΏΠΎ Π°Π΄Ρ€Π΅ΡΡƒ ищСтся структура VarInfo Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ для Π΄Π°Π½Π½ΠΎΠ³ΠΎ контСкстС. Если Ρ‚Π°ΠΊΠΎΠΉ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ, Ρ‚ΠΎ ΠΎΠ½Π° создаСтся ΠΏΠΎ Ρ‚Π°ΠΊΠΎΠΌΡƒ ΠΆΠ΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ. А Π·Π°Ρ‚Π΅ΠΌ полю new_init присваиваСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ init, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΉ структуры.

o ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° ΠΊΠ°ΠΊ FIRSTPRIVATE ΠΈΠ»ΠΈ REDUCTION. Π­Ρ‚ΠΎΡ‚ случай Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌΡƒ, Π·Π° Ρ‚Π΅ΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ, Ρ‡Ρ‚ΠΎ поиск вСдСтся Π½Π΅ ΠΏΠΎ Π°Π΄Ρ€Π΅ΡΡƒ, Π° ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

o ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° ΠΊΠ°ΠΊ PRIVATE ΠΈΠ»ΠΈ LASTPRIVATE. Π’ ΡΡ‚ΠΎΠΌ случаС записываСтся new_init = false.

Если ΠΏΠΎΠ»Π΅ init = false, Ρ‚ΠΎ Π²Ρ‹Π΄Π°Π΅Ρ‚ся ошибка.

На Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 5 ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° схСма, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰Π°Ρ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΡƒΠ½ΠΊΡ‚ ΠΏΡ€Π°Π²ΠΈΠ».

Рисунок 5: схСма Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ

Β· ΠŸΡ€ΠΈ записи ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ контСкстС Π΄Π°Π½Π½ΠΎΠΉ Π½ΠΈΡ‚ΠΈ ищСтся структура VarInfo ΠΏΠΎ Π°Π΄Ρ€Π΅ΡΡƒ. Если такая структура Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½Π°, Ρ‚ΠΎ ΠΎΠ½Π° добавляСтся. ПолС init Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠΉ структуры ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true. Если пСрСмСнная Ρ‚ΠΈΠΏΠ° SHARED, Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΡƒΠ½ΠΊΡ‚ повторяСтся для Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ контСкста.

Β· ΠŸΡ€ΠΈ освобоТдСнии контСкста для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ° LASTPRIVATE пСрСносятся значСния ΠΏΠΎΠ»Π΅ΠΉ init Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ контСкст. Для COPYPRIVATE ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… находится блиТайшая Π²Π²Π΅Ρ€Ρ… ΠΏΠΎ Π΄Π΅Ρ€Π΅Π²Ρƒ Π²Π΅Ρ€ΡˆΠΈΠ½Π°, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΉ области, ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ ΠΏΠΎΠ»Π΅ΠΉ init ΠΈΠ· ΡƒΠ΄Π°Π»ΡΠ΅ΠΌΠΎΠ³ΠΎ контСкста пСрСносятся Π² ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ VarInfo, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ ΠΏΠΎ ΠΈΠΌΠ΅Π½Π°ΠΌ этих ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Π²ΠΎ Π²ΡΠ΅Ρ… нСпосрСдствСнных ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°Ρ… Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹.

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° основаны Π½Π° ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ пСрСноса Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² OpenMP Π½Π° Π΄Π΅Ρ€Π΅Π²ΠΎ контСкстов. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ структуры VarInfo Π°Π΄Π΅ΠΊΠ²Π°Ρ‚Π½ΠΎ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΈΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Ρ‚. Π΅. поля init согласованы с Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ значСниями ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. Π§Ρ‚ΠΎ позволяСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠΎ ΠΏΠΎΠ»ΡŽ init, ΠΈΠΌΠ΅Π΅Ρ‚ пСрСмСнная Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π½Π΅Ρ‚.

5 ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠ°Ρ рСализация

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Ρ€Π°Π½Π΅Π΅ описании Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ основныС ΠΈΠ΄Π΅ΠΈ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ искомыС ошибки. На ΠΎΡΠ½ΠΎΠ²Π΅ этих ΠΈΠ΄Π΅ΠΉ Π±Ρ‹Π»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ Π² Π²ΠΈΠ΄Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ динамичСского ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ°. А Ρ‚Π°ΠΊ ΠΆΠ΅ Π±Ρ‹Π»ΠΈ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² для увСличСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ°.

ΠžΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ разрабатывался Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ стандарта OpenMP вСрсии 2.5.

Π’ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ языка программирования для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ° Π±Ρ‹Π» Π²Ρ‹Π±Ρ€Π°Π½ язык C++. Благодаря своСй Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ мощности, высокой скорости Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈ ΡƒΠ΄ΠΎΠ±ΡΡ‚Π²Ρƒ использования этот язык подошСл ΠΊΠ°ΠΊ нСльзя Π»ΡƒΡ‡ΡˆΠ΅ для поставлСнной Π·Π°Π΄Π°Ρ‡ΠΈ. К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ Π½Π΅ ΠΌΠ°Π»ΡƒΡŽ Ρ€ΠΎΠ»ΡŒ ΠΈΠ³Ρ€Π°Π΅Ρ‚ Π΅Π³ΠΎ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с ΡΠ·Ρ‹ΠΊΠΎΠΌ Fortran, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ написаны ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, нСпосрСдствСнно ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ°.

5.1 Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ°

Одно ΠΈΠ· Π²Π°ΠΆΠ½Π΅ΠΉΡˆΠΈΡ… условий для Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ° являСтся ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ использованиС Π΅Π³ΠΎ интСрфСйсных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Ρ‹ ΠΈΠ· ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π—Π° Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ этих Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° — инструмСнтатор.

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

Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ для ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ осущСствлСния ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ инструмСнтации:

Β· Π’ Π½Π°Ρ‡Π°Π»Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Π° функция ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ° DBG_Init, Π΄ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π΅Π³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

Β· Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠ΅ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ областСй PARALLEL, SINGLE, CRITICAL, DO, SECTIONS, ORDERED. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΈ Π²Ρ…ΠΎΠ΄Π΅ Π² ΠΎΠ±Π»Π°ΡΡ‚ΡŒ PARALLEL Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Π° функция DBG_ParallelEvent.

Β· послС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ BARRIER — Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ DBG_Barrier

Β· любоС ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ ΠΈΠ»ΠΈ массивам Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΎ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Β· Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΠΌΠ°ΡΡΠΈΠ²Ρƒ, информация ΠΎ Π½Π΅ΠΌ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π° ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΡƒ. Π­Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€.

Β· Π½Π°Ρ‡Π°Π»ΠΎ ΠΈ ΠΊΠΎΠ½Π΅Ρ† Π²Ρ‹Π·ΠΎΠ²Π° любой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π΅ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰Π΅ΠΉ интСрфСйсу ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ°, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ обращСниями ΠΊ Π½Π΅ΠΌΡƒ. Π’Π°ΠΊ ΠΆΠ΅ трСбуСтся ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎΠ± Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ….

Β· Π’Π΅Π»ΠΎ проинструмСнтированной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΈ ΠΊΠΎΠ½Ρ†Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ обращСния ΠΊ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΡƒ. Π€ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π΄Π΅Π»Π΅Π½Ρ‹ срСди ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….

Β· ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ threadprivate-ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ common-Π±Π»ΠΎΠΊΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ΠΎ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΡƒ.

5.2 ОбъСдинСниС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ²

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ поиска ошибок ΠΎΠ±Ρ‰Π΅ΠΉ памяти ΠΈ ΠΎΡˆΠΈΠ±ΠΎΠΊ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π»ΠΈΡΡŒ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ ΠΈΠΌΠ΅Π»ΠΈ ΠΎΠ±Ρ‰ΡƒΡŽ основу, которая Π±Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»Π° ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ°. Π’Π°ΠΊΠΎΠΉ основой являСтся Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ контСкстов, Ρ‚.ΠΊ. ΠΏΡ€ΠΈ поискС ошибок ΠΎΠ±Ρ‰Π΅ΠΉ памяти Π±Π΅Π· ΡƒΡ‰Π΅Ρ€Π±Π° для Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ Π΅Π³ΠΎ.

Π‘Ρ‚Ρ€ΡƒΠΊΡƒΡ‚ΡƒΡ€Π° Context Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅ обнаруТСния ошибок ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ содСрТит поля, ΠΎΠ±ΠΎΠ±Ρ‰Π°ΡŽΡ‰ΠΈΠ΅ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ поля структуры Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅. Но ΠΎΠ½Π° содСрТит Π½Π΅ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ поля. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ объСдинСнная структура Context Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² ΡΠ΅Π±Ρ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

Β· Π½ΠΎΠΌΠ΅Ρ€ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ контСксту Π½ΠΈΡ‚ΠΈ

Β· ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ критичСской области

Β· мноТСство структур VarInfo, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎ Π°Π΄Ρ€Π΅ΡΡƒ ΠΈΠ»ΠΈ ΠΈΠΌΠ΅Π½ΠΈ, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΊΠ»ΡŽΡ‡Π°.

Β· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ Ρ‚ΠΈΠΏ любой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² Π΄Π°Π½Π½ΠΎΠΌ контСкстС.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° VarInfo Π²Π½Π΅ зависимости ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ содСрТит ΠΏΠΎΠ»Π΅ init ΠΈ ΠΈΠΌΡ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Однако, Π²ΠΎ Π²Ρ€Π΅ΠΌΡ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ VarInfo ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒΡΡ информация ΠΎ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ ΠΈ Π·Π°ΠΏΠΈΡΠΈ, нСобходимая для нахоТдСния ошибок ΠΎΠ±Ρ‰Π΅ΠΉ памяти.

ΠŸΡ€Π°Π²ΠΈΠ»Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ° состоят ΠΈΠ· ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€Π°Π²ΠΈΠ» Π΄Π²ΡƒΡ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ².

Π’ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠ΄Π½ΠΎ Π΄Π΅Ρ€Π΅Π²ΠΎ контСкстов для всСх Π½ΠΈΡ‚Π΅ΠΉ, ΠΈ ΠΊΠ°ΠΆΠ΄Π°Ρ Π½ΠΈΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π΅Π³ΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Π² ΡΠΎΠΎΡ‚вСтствии с Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°ΠΌΠΈ Π½ΠΈΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ Π»ΡŽΠ±ΠΎΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½Π΅, располоТСнной Π²Π²Π΅Ρ€Ρ… ΠΏΠΎ Π΄Π΅Ρ€Π΅Π²Ρƒ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ появлСния ошибки ΠΎΠ±Ρ‰Π΅ΠΉ памяти Π² ΡΠ°ΠΌΠΎΠΌ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ΅, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ обращСния ΠΊ Π΄Π΅Ρ€Π΅Π²Ρƒ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² ΠΊΡ€ΠΈΡ‚ичСскиС сСкции. Но ΠΎΠΏΠΈΡΠ°Π½Π½Ρ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°ΡŽΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ с Π΄Π΅Ρ€Π΅Π²ΠΎΠΌ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡŽ ΠΎΡ‡Π΅Π½ΡŒ большого числа критичСских сСкций, Π°, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹Ρ… Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Ρ… расходов. Π­Ρ‚ΠΎ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΠ»ΠΎΡΡŒ ΠΏΡ€ΠΈ тСстировании, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ°, ΠΊΠΎΠ³Π΄Π° Π²ΠΎ Π²Ρ€Π΅ΠΌΡ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° замСдлилась Π² ΡΠΎΡ‚Π½ΠΈ тысяч Ρ€Π°Π· ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Π½Π΅ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ.

ВСстированиС ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΎ, Ρ‡Ρ‚ΠΎ для достиТСния ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎΠΉ скорости Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ Π»ΡŽΠ±Ρ‹Ρ… конструкций синхронизации Π² ΠΌΠ΅ΡΡ‚Π°Ρ…, ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΡ‚ ΠΌΠ΅ΡΡ‚ синхронизации Π² ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ дальнСйшиС Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±Ρ‹Π»ΠΈ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Ρ‹ Π½Π° ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² с Ρ†Π΅Π»ΡŒΡŽ увСличСния скорости Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

5.3 ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ°

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠΌ Π² ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ° Π±Ρ‹Π»ΠΎ устранСниС критичСских сСкций Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°Ρ… чтСния ΠΈ Π·Π°ΠΏΠΈΡΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. Для этого Π±Ρ‹Π»Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½Π° какая-Π»ΠΈΠ±ΠΎ модификация Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΡ… ΠΈ Ρ€Π°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π²Ρ‹ΡˆΠ΅ ΠΏΠΎ Π΄Π΅Ρ€Π΅Π²Ρƒ Π²Π΅Ρ€ΡˆΠΈΠ½. Для выполнСния Π΄Π°Π½Π½ΠΎΠ³ΠΎ ограничСния, ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ произвСсти ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ измСнСния Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°Ρ…:

Β· ΠŸΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ каТдая Π½ΠΈΡ‚ΡŒ для обнаруТСния ошибок ΠΎΠ±Ρ‰Π΅ΠΉ памяти Π΄ΠΎΠ»ΠΆΠ½Π° Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ измСнСния Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΡΠ²ΠΎΠΉ контСкст. Π’Π°ΠΊ ΠΆΠ΅ ΠΏΠΎΠ»Π΅ init ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΡΠ²ΠΎΠ΅ΠΌ контСкстС.

Β· Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ мСстС, Π³Π΄Π΅ располагаСтся явная ΠΈΠ»ΠΈ нСявная Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° barrier, главная Π½ΠΈΡ‚ΡŒ Π³Ρ€ΡƒΠΏΠΏΡ‹ собираСт Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½ΠΈΡ‚ΡŒΡŽ Π²ΠΎ Π²ΡΠ΅Ρ… Π²Π΅Ρ€ΡˆΠΈΠ½Π°Ρ… ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°Ρ… Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹, Ρ‚. Π΅. Π² ΡΠΎΡΠ΅Π΄Π½ΠΈΡ… Π²Π΅Ρ€ΡˆΠΈΠ½Π°Ρ…. ПослС Ρ‡Π΅Π³ΠΎ происходит Π°Π½Π°Π»ΠΈΠ· собранных Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ наличия ошибок ΠΎΠ±Ρ‰Π΅ΠΉ памяти ΠΈ ΡΠΎΡ…раняСт ΡΠΎΠ±Ρ€Π°Π½Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ контСкст, ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ замСняя Π² ΡΡ‚ΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ… Π½ΠΎΠΌΠ΅Ρ€Π° сосСдних Π½ΠΈΡ‚Π΅ΠΉ Π½Π° ΡΠ²ΠΎΠΉ. Π”Π°Π½Π½Ρ‹Π΅ Π² Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ… контСкстах Π½ΠΈΡ‚Π΅ΠΉ Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΎΠ±Π½ΡƒΠ»ΡΡŽΡ‚ΡΡ. Для ошибок ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ производится сбор ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ΠΏΠΎΠ»ΡΡ… init со Π²ΡΠ΅Ρ… сосСдних контСкстах Π΄Π°Π½Π½ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΡ‹. Если для ΠΎΠ±Ρ‰Π΅ΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ находится Ρ…ΠΎΡ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΏΠΎΠ»Π΅ init со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ true, Ρ‚ΠΎ ΡΡ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ устанавливаСтся Π²ΠΎ Π²ΡΠ΅Ρ… сосСдних контСкстах, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ контСкстС.

Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ всСх ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½ΠΈΡ‚ΡŒΡŽ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π·Π°Ρ‚Ρ€Π°Ρ‚ памяти, поэтому Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ Ρ…Ρ€Π°Π½ΠΈΡ‚ Π² ΡΠΏΠΈΡΠΊΠ°Ρ… ReadList ΠΈ WriteList Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠ²ΡˆΠΈΠΉΡΡ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² Π΄Π°Π½Π½ΠΎΠΌ контСкстС. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ достигаСтся Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ экономия памяти, Π½ΠΎ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΉ области обнаруТиваСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ пСрвая ΠΏΠ°Ρ€Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², ΡΠΎΠ·Π΄Π°ΡŽΡ‰ΠΈΡ… ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΎΠ±Ρ‰Π΅ΠΉ памяти ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΡΡ‚ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

Π’ Ρ†Π΅Π»ΡΡ… увСличСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ массивы прСдставлСны Π½Π΅ Π² Π²ΠΈΠ΄Π΅ Π½Π°Π±ΠΎΡ€Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Π° ΠΊΠ°ΠΊ Π΅Π΄ΠΈΠ½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰Π°Ρ массив содСрТит имя массива, Π΅Π³ΠΎ Π΄Π»ΠΈΠ½Ρƒ ΠΈ Π½Π°Π±ΠΎΡ€ структур, состоящих ΠΈΠ· Ρ‚Π΅Ρ… ΠΆΠ΅ ΠΏΠΎΠ»Π΅ΠΉ, Ρ‡Ρ‚ΠΎ ΠΈ VarInfo, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ поля ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ количСство структур Π² Π½Π°Π±ΠΎΡ€Π΅ Ρ€Π°Π²Π½ΠΎ Π΄Π»ΠΈΠ½Π΅ массива.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΆΠ΅ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ элСмСнту массива Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ для Π΄Π°Π½Π½Ρ‹Ρ… сразу ΠΏΠΎ Π²ΡΠ΅ΠΌ элСмСнтам. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ ΠΏΠΎ ΠΏΠ°ΠΌΡΡ‚ΠΈ, Π·Π°Ρ‚ΠΎ сокращаСт врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π₯отя Π² ΡΠ»ΡƒΡ‡Π°ΡΡ…, ΠΊΠΎΠ³Π΄Π° Π½ΠΈΡ‚ΡŒ Π² ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΊΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ синхронизациями ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΡ‚ массив Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ, Ρ‚ΠΎ Ρ€Π°ΡΡ…ΠΎΠ΄ памяти ΠΏΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΉ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ мСньшС Π·Π° ΡΡ‡Π΅Ρ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ имя массива ΠΎΠ±Ρ‰Π΅Π΅ для всСх элСмСнтов.

5.4 Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ тСстирования

Для нахоТдСния ошибок ΠΎΠ±Ρ‰Π΅ΠΉ памяти, ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΡƒ трСбуСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ сущСствовало, ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, Π΄Π²Π΅ Π½ΠΈΡ‚ΠΈ Π² ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΉ области. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ тСстированиС ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π½ΠΎΠΉ систСмС с ΠΎΠ±Ρ‰Π΅ΠΉ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ IBM eServer pSeries 690 (Regatta). Для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ Π±Ρ‹Π»Π° взята ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Jacobi, находящая ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ΅Π½Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ уравнСния ΠŸΡƒΠ°ΡΡΠΎΠ½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Π―ΠΊΠΎΠ±ΠΈ Π² Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠΌ случаС.

Jacobi_org — ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±Π΅Π· инструмСнтации

Jacobi_dbg — ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° с Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ°

Π’Π°Π±Π»ΠΈΡ†Π° 2: врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ

ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°

2 Π½ΠΈΡ‚ΠΈ

4 Π½ΠΈΡ‚ΠΈ

8 Π½ΠΈΡ‚Π΅ΠΉ

Jacobi_org

5.748

2.958

1.496

Jacobi_dbg

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ Π½Π΅ ΠΏΠΎΠ»Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ, Ρ‚. Π΅. Π½Π΅ Π±Ρ‹Π»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ части Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ², Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° common-Π±Π»ΠΎΠΊΠΎΠ², Ρ€Π°Π±ΠΎΡ‚Π° с threadprivate-ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ ORDERED ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° Π·Π°ΠΌΠΊΠΎΠ². ВсС ΠΆΠ΅, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±Π»ΠΈΠ·ΠΊΠΎ ΠΊ ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ этих случаСв Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ сильно ΠΏΠΎΠ²Π»ΠΈΡΡ‚ΡŒ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

Из Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° замСдляСтся ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π² 900 Ρ€Π°Π· ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ Π½Π° 2-Ρ… ΠΈ 4-Ρ… нитях. Π­Ρ‚ΠΎ, нСсомнСнно, сильноС Π·Π°ΠΌΠ΅Π΄Π»Π΅Π½ΠΈΠ΅, ΠΎΠ΄Π½Π°ΠΊΠΎ, ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ возмоТности сущСствСнного сниТСния Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Ρ… расходов, Π·Π° ΡΡ‡Π΅Ρ‚ сокращСния ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.

Для дСмонстрации Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ° ΠΈ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡ Π΅Π³ΠΎ с Intel Thread Checker`ΠΎΠΌ Π±Ρ‹Π»Π° взята Ρ‚Π° ΠΆΠ΅ ΡΠ°ΠΌΠ°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Jacobi. Запуск производился Π½Π° ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ машинС, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰Π΅ΠΉ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° 2 нитях.

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ листинг ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Jacobi. ΠžΠ±ΠΎΠ·Π½Π°Ρ‡ΠΈΠΌ Π΅Π³ΠΎ ΠΊΠ°ΠΊ Jacobi_correct.

1: PROGRAM JAC

2: PARAMETER (L=100)

3: REAL A (L, L), EPS, MAXEPS, B (L, L)

4: external omp_get_wtime;

5: double precision omp_get_wtime;

6: DOUBLE PRECISION sTime, eTime, dTime, st, et, dt;

7: INTEGER ITMAX

8:

9: sTime = omp_get_wtime ();

10:

11: ITMAX=1000

12:

13: !$OMP PARALLEL

14: !$OMP DO

15: DO 1 J = 1, L

16: DO 1 I = 1, L

17: A (I, J) = 0.

18: IF(I.EQ.1 .OR. J.EQ.1 .OR. I.EQ.L .OR. J.EQ.L) THEN

19: B (I, J) = 0.

20: ELSE

21: B (I, J) = (1. + I + J)

22: ENDIF

23: 1 CONTINUE

24: !$OMP END PARALLEL

25:

26: st = omp_get_wtime ();

27: DO 2 IT = 1, ITMAX

28: EPS = 0.

29: !$OMP PARALLEL DEFAULT (SHARED) PRIVATE (I, J) REDUCTION (MAX:EPS)

30: !$OMP DO

31: DO 21 J = 2, L-1

32: DO 21 I = 2, L-1

33: EPS = MAX (EPS, ABS (B (I, J) — A (I, J)))

34: A (I, J) = B (I, J)

35: 21 CONTINUE

36: !$OMP DO

37: DO 22 J = 2, L-1

38: DO 22 I = 2, L-1

39: B (I, J) = (A (I-1, J) + A (I, J-1) + A (I+1, J)+

40: * A (I, J+1)) / 4

41: 22 CONTINUE

42: !$OMP END PARALLEL

43:

44: et = omp_get_wtime ();

45: dt = et — st;

46: st = et;

47: PRINT 200, IT, EPS, dt

48: 200 FORMAT('IT = ', I4, ' EPS = ', E14.7,' time = ', F14.6)

49: 2 CONTINUE

50:

51: eTime = omp_get_wtime ();

52: dTime = eTime-sTime;

53: print *, 'time = ', dTime

54:

55: C 3 OPEN (3, FILE='JAC.DAT', FORM='FORMATTED', STATUS='UNKNOWN')

56: C WRITE (3,*) B

57: C CLOSE (3)

58: END

59:

Π”Π°Π»Π΅Π΅ описана измСнСнная Ρ‡Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Jacobi, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π±Ρ‹Π»ΠΈ внСсСны ошибки для дСмонстрации Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠΎΠ². ΠžΠ±ΠΎΠ·Π½Π°Ρ‡ΠΈΠΌ Π΄Π°Π½Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΊΠ°ΠΊ Jacobi_error.

30: init = 0

31:

32: !$OMP PARALLEL DEFAULT (SHARED) PRIVATE (I, J, i_test)

33: C REDUCTION (MAX:EPS)

34: !$OMP DO

35: DO 21 J = 2, L-1

36: DO 21 I = 2, L-1

37: EPS = MAX (EPS, ABS (B (I, J) — A (I, J)))

38: A (I, J) = B (I, J)

39: B (J, I)=A (J, I)

40: 21 CONTINUE

41:

42: i_test = init

43:

44: !$OMP DO PRIVATE (init)

45: DO 22 J = 2, L-1

46: DO 22 I = 2, L-1

47: B (I, J) = (A (I-1, J) + A (I, J-1) + A (I+1, J)+

48: * A (I, J+1)) / 4

49: i_test = init

50: 22 CONTINUE

51: !$OMP END PARALLEL

ΠŸΡ€ΠΈ запускС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Jacobi_correct ΠΎΠ±Π° ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ° Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π½Π°ΡˆΠ»ΠΈ.

Для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Jacobi_error ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ Inte Thread Checker (ITC) Π²Ρ‹Π΄Π°Π» диагностику, ΠΎΠΏΠΈΡΠ°Π½Π½ΡƒΡŽ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 3.

Π’Π°Π±Π»ΠΈΡ†Π° 3: диагностика ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Jacobi_error ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠΎΠΌ Intel Thread Checker

Short description

description

count

Write -> Read data-race

Memory read at «Jacobi_err.F90» :37 conflicts with a prior memory write at «Jacobi_err.F90» :37 (flow dependence)

Write -> Write data-race

Memory write at «Jacobi_err.F90» :37 conflicts with a prior memory write at «Jacobi_err.F90» :37 (output dependence)

Read -> Write data-race

Memory write at «Jacobi_err.F90» :37 conflicts with a prior memory read at «Jacobi_err.F90» :37 (anti dependence)

Write -> Read data-race

Memory read at «Jacobi_err.F90» :37 conflicts with a prior memory write at «Jacobi_err.F90» :39 (flow dependence)

Write -> Read data-race

Memory read at «Jacobi_err.F90» :38 conflicts with a prior memory write at «Jacobi_err.F90» :39 (flow dependence)

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ