Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΈ распрСдСлСнноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Π‘++Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 89

Автор Π₯ьюз ΠšΠ°ΠΌΠ΅Ρ€ΠΎΠ½

ΠŸΠΎΠ½ΡΡ‚ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования поддСрТиваСтся шаблонами. Основная идСя ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования β€” ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ максимально благоприятныС условия для ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠ³ΠΎ использования ПО ΠΏΡƒΡ‚Π΅ΠΌ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΅Π³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Π² максимально Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ ΠΎΠ±Ρ‰Π΅ΠΉ Ρ„ΠΎΡ€ΠΌΠ΅. Π¨Π°Π±Π»ΠΎΠ½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Π΅ абстракции ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€, Π° ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ классов β€” ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Π΅ абстракции Π΄Π°Π½Π½Ρ‹Ρ…. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΡƒΠΆΠ΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, которая суммируСт Π΄Π²Π° числа, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ рассчитана Π½Π° слоТСниС Π»ΡŽΠ±Ρ‹Ρ…Π΄Π²ΡƒΡ… чисСл. Но Ссли ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° выполняСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ слоТСния, Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ, Β«Π½Π°ΡƒΡ‡ΠΈΠ²Β» Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΈΠ΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ двумя Π»ΡŽΠ±Ρ‹ΠΌΠΈ числами. Если ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΡΠ°ΠΌΡƒΡŽ ΠΎΠ±Ρ‰ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΌΠΎΠΆΠ΅ΠΌ Π»ΠΈ ΠΌΡ‹ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ лишь Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π°Π΄ двумя числами? А Ρ‡Ρ‚ΠΎ Ссли эти числа Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹, Ρ‚.Π΅. комплСксныС ΠΈ вСщСствСнныС? МоТно Π·Π°Π»ΠΎΠΆΠΈΡ‚ΡŒ Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Π΄ Π»ΡŽΠ±Ρ‹ΠΌΠΈ двумя числами, Π½ΠΎ ΠΈ Π½Π°Π΄ значСниями Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΈΠ»ΠΈ классов чисСл (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, значСниями Ρ‚ΠΈΠΏΠ° int, float, double ΠΈΠ»ΠΈ комплСксными). ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΡ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π±Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ наша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° выполняла Π»ΡŽΠ±ΡƒΡŽ Π±ΠΈΠ½Π°Ρ€Π½ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ Π½Π° любой ΠΏΠ°Ρ€Π΅ чисСл β€” Π³Π»Π°Π²Π½ΠΎΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ эта опСрация Π±Ρ‹Π»Π° лСгальна для этих Π΄Π²ΡƒΡ… чисСл. Если ΠΌΡ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ Ρ‚Π°ΠΊΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π΅Π΅ возмоТности Π² ΠΏΠ»Π°Π½Π΅ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠ³ΠΎ использования Π±ΡƒΠ΄ΡƒΡ‚ просто Π³Ρ€Π°Π½Π΄ΠΈΠΎΠ·Π½Ρ‹ΠΌΠΈ. Π­Ρ‚Ρƒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π‘++-программисту ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ классов. Π’Π°ΠΊΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° обобщСния ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования.

ΠŸΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования, ΠΏΠΎΠ»Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΠ°Π» срСдствами Π‘++, Π² сочСтании с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠΎΠΉ, Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠΉ срСдствами Π‘++, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ MPI-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ. Как ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ Π² Π³Π»Π°Π²Π΅ 1, MPI (Message Passing Interface β€” интСрфСйс ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ сооб Ρ‰ Π΅Π½ΠΈΠΉ) β€” это стандарт срСдств ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΏΡ€ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΡ… ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ°. MPI-интСрфСйс рСализуСтся ΠΊΠ°ΠΊ коллСкция, состоя Ρ‰ Π°Π» Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ ΠΈΠ· 300 Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. МРI-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ большой Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½: ΠΎΡ‚ пороТдСния Π·Π°Π΄Π°Ρ‡ Π΄ΠΎ Π±Π°Ρ€ΡŒΠ΅Ρ€ Π½ ΠΎΠΉ синхронизации ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ установки. БущСствуСт Ρ‚Π°ΠΊΠΆΠ΅ Π‘++-прСдставлСниС для MPI-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΠΈΡ€ΡƒΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ MPI-интСрфСйса Π² Π½Π°Π±ΠΎΡ€Π΅ классов. Однако Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ MPI Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ прСимущСства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΡ‹. ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Π³Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования Π² Π½Π΅ΠΉ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅Ρ‚. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, нСсмогря Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ MPI-интСрфСйс вСсьма Π²Π°ΠΆΠ΅Π½ ΠΊΠ°ΠΊ стандарт, Π΅Π³ΠΎ «мощности» Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. Π”Π°, ΠΎΠ½ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ освобоТдаСт программиста ΠΎΡ‚ программирования сокСтов ΠΈ позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π»ΠΎΠ²ΡƒΡˆΠ΅ΠΊ сСтСвого программирования. Но этого нСдостаточно. Π—Π΄Π΅ΡΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ³ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ кластСрноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π° ΠΌΠΌ ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ SMP-ΠΈ МРР-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π¨Π°Π±Π»ΠΎΠ½Π½Ρ‹Π΅ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ срСдства программирования Π‘++ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ вСсьма ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌΠΈ для достиТСния этой Ρ†Π΅Π»ΠΈ. Π’ этой Π³Π»Π°Π²Π΅ для упрощСния Π±Π°Π·ΠΎΠ²Ρ‹Ρ… SPMD- ΠΈ MPMD-ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² вмСстС с МРI-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования.

ДСкомпозиция Ρ€Π°Π±ΠΎΡ‚ для MPI-интСрфСйса

Одним ΠΈΠ· прСимущСств использования MPI-интСрфСйса ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΌΠΈ UNIX/Linux-процСссами ΠΈ сокСтами являСтся ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ MPI-срСды Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ нСсколько выполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ². MPI-рСализация ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ нСсколько выполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ², ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ выполняСмый Ρ„Π°ΠΉΠ». Π’ этой ΠΊΠ½ΠΈΠ³Π΅ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ MPICH-Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ MPI-интСрфСйса [17]1. ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ $ mpirun -np 16 /tmp/mpi_example1 Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡ‰Π΅Π½ΠΎ 16 процСссов. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ процСсс Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ с ΠΈΠΌΠ΅Π½Π΅ΠΌ mpi_example1. ВсС процСссы ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ доступныС процСссоры. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ процСсс ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅, Ссли MPI Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² срСдС кластСрного Ρ‚ΠΈΠΏΠ°. ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹ ΠΏΡ€ΠΈ этом Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ. Команда mpirun прСдставляСт собой основной сцСнарий, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° запуск MPI-Π·Π°Π΄Π°Π½ΠΈΠΉ Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΌ количСствС процСссоров. Π­Ρ‚ΠΎΡ‚ сцСнарий ΠΈΠ·ΠΎΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΎΡ‚ подробностСй запуска ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… процСссов Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ…. Π—Π΄Π΅ΡΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡ‰Π΅Π½ΠΎ 16 ΠΊΠΎΠΏΠΈΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ mpi_examplel. НСсмотря Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ стандарт MPI-2 опрСдСляСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ пороТдСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для динамичСского добавлСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΊ выполняСмому MPI-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ, этот ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π΅ популярСн. Π’ ΠΎΠ±Ρ‰Π΅ΠΌ случаС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ количСство процСссов создаСтся ΠΏΡ€ΠΈ запускС MPI-прилоТСния. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π²ΠΎ врСмя старта этот ΠΊΠΎΠ΄ тираТируСтся N Ρ€Π°Π·. Описаннал схСма Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ модСль ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ° SPMD (SIMD), ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ΄Π½Π° ΠΈ Ρ‚Π° ΠΆΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° запускаСтся ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… процСссорах. Π”Π°Π½Π½Ρ‹Π΅, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ послС запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ старта ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… процСссорах ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π²ΠΈΡ‚ΡŒ, Ссли Π½ΡƒΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ модСль MPMD. Вся Ρ€Π°Π±ΠΎΡ‚Π° MPI-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ дСлится ΠΌΠ΅ΠΆΠ΄Ρƒ нСсколькими процСссами, запускаСмыми Π½Π° стартС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ распрСдСлСнии «обязанностСй» (Ρ‚.Π΅. ΠΊΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ процСссы Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с ΠΊΠ°ΠΊΠΈΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ) содСрТится Π² самой выполняСмой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. ΠšΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρ‹, задСйствованныС Π² этой Ρ€Π°Π±ΠΎΡ‚Π΅, пСрСчис Π» ΡΡŽΡ‚ΡΡ Π² Ρ„Π°ΠΉΠ»Π΅ machines.arch (machines.Linux Π² Π΄Π°Π½Π½ΠΎ ΠΌ случаС) с использованиС ΠΌ ΠΈ ΠΌ Π΅Π½ΠΈ ΠΊΠΎ ΠΌ ΠΏΡŒΡŽΡ‚Π΅Ρ€Π°. ΠœΠ΅ΡΡ‚ΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ это Π³ ΠΎ Ρ„Π°ΠΉΠ»Π° зависит ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π’ зависи ΠΌ ости ΠΎΡ‚ инсталляции, Π²Π·Π°ΠΈ ΠΌ одСйствиС ΠΊΠΎ ΠΌ ΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ², пСрСчислСнных Π² это ΠΌ Ρ„Π°ΠΉΠ»Π΅, Π±ΡƒΠ΄Π΅Ρ‚ обСспСчСно Π»ΠΈΠ±ΠΎ ΠΊΠΎ ΠΌ Π°Π½Π΄ΠΎΠΉ ssh, Π»ΠΈΠ±ΠΎ UNIX/Linux-ΠΊΠΎ ΠΌ Π°Π½Π΄ΠΎΠΉ ' r'.

ДиффСрСнциация Π·Π°Π΄Π°Ρ‡ ΠΏΠΎ Ρ€Π°Π½Π³Ρƒ

Π’ΠΎ врСмя старта процСссов, Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Ρ… Π² MPI-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, МРI-срСда Π½Π°Π·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ процСссу Ρ€Π°Π½Π³ ΠΈ Π³Ρ€ΡƒΠΏΠΏΡƒ ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΈ. Π Π°Π½Π³ хранится ΠΊΠ°ΠΊ int-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ слуТит Π² качСствС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° процСсса для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ MPI-Π·Π°Π΄Π°Ρ‡ΠΈ. Π“Ρ€ΡƒΠΏΠΏΠ° ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΈ опрСдСляСт, ΠΊΠ°ΠΊΠΈΠ΅ процСссы ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π²ΠΎ взаимодСйствиС Ρ‚ΠΈΠΏΠ° Β«Ρ‚ΠΎΡ‡ΠΊΠ°-Ρ‚ΠΎΡ‡ΠΊΠ°Β». Π‘Π½Π°Ρ‡Π°Π»Π° всС MPI-процСссы относят ΠΊ Π³Ρ€ΡƒΠΏΠΏΠ΅, Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‡Π»Π΅Π½ΠΎΠ² Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ, запустив прилоТСния. ПослС старта ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ процСсса Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Ρ€Π°Π½Π³ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ MPI_Comm_rank (). Ѐункция MPI_Comm_rank () Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π°Π½Π³ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ процСсса. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π΅, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ процСсс опрСдСляСт, с ΠΊΠ°ΠΊΠΈΠΌ ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ связываСтся, Π° Π΅Π³ΠΎ Ρ€Π°Π½Π³ возвращаСтся Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π΅. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ MPI_Comm_rank () ΠΏΠΎΠΊΠ°Π·Π°Π½ Π² листингС 9.1.

// Листинг 9.1. ИспользованиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ MPI_Comm_rank() //.. .

int Tag = 33;

int WorldSize;

int TaskRank;

MPI_Status Status;

MPI_Init (&argc, &argv) ;

MPI_Comm_rank(MPI_COMM_WORLD, &TaskRank) ; MPI_Comm_size(MPI_COMM_WORLD, &WorldSize) ; //.. .

ΠšΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρƒ MPI_COMM_WORLD ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΡ€ΠΈ запускС Π½Π°Π·Π½Π°Ρ‡Π°ΡŽΡ‚ΡΡ всС MPI-Π·Π°Π΄Π°Ρ‡ΠΈ. MPI-Π·Π°Π΄Π°Ρ‡ΠΈ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΠΎ ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ Π³Ρ€ΡƒΠΏΠΏΡƒ ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΈ. Π’ листингС 9.1 Ρ€Π°Π½Π³ возвращаСтся Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ TaskRank. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ процСсс Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π½Π³. ПослС опрСдСлСния Ρ€Π°Π½Π³Π° Π·Π°Π΄Π°Ρ‡Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ Π»ΠΈΠ±ΠΎ опрСдСляСтся ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΅ΠΉ Π½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ. Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹.

Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ 1. ΠŸΡ€ΠΎΡΡ‚Π°Ρ MPMD-модСль Β  Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ 2. ΠŸΡ€ΠΎΡΡ‚Π°Ρ SIMD-модСль

if(TaskRank == 1){ Β  if(TaskRank == 1){

// НСкоторыС дСйствия. Β  // Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΎΠ΄Π½ΠΈ Π΄Π°Π½Π½Ρ‹Π΅.

} Β  }

if (TaskRank == 2){ Β  if(TaskRank == 2){

// Π”Ρ€ΡƒΠ³ΠΈΠ΅ дСйствия. Β  // Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅.

} Β  }

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ Ρ€Π°Π½Π³ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для разграничСния ΠΌΠ΅ΠΆΠ΄Ρƒ процСссами выполняСмой Ρ€Π°Π±ΠΎΡ‚Ρ‹, Π° Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ β€” для разграничСния Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ. НСсмотря Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ выполняСмый MPI-Ρ„Π°ΠΉΠ» стартуСт с ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΊΠΎΠ΄ΠΎΠΌ, модСль MPMD (MIMD) ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ€Π°Π½Π³ΠΎΠ² ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ вСтвлСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Аналогично послС опрСдСлСния Ρ€Π°Π½Π³Π° Π΄Π°Π½Π½Ρ‹ΠΌ процСсса ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚ΠΈΠΏ, Ρ‚Π΅ΠΌ самым ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚-Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ процСсс. Π Π°Π½Π³ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ сообщСний. MPI-Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‚ ΠΎΠ΄Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΏΡ€ΠΈ ΠΎΠ±ΠΌΠ΅Π½Π΅ сообщСниями ΠΏΠΎ Ρ€Π°Π½Π³Π°ΠΌ ΠΈ ΠΊΠΎ ΠΌΠΌ ΡƒΠ½ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° ΠΌ. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ MPI_Send () | MPI_Recv() ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ€Π°Π½Π³ Π² качСствС указания ΠΏΡƒΠ½ΠΊΡ‚ΠΎΠ² назначСния ΠΈ отправлСния соотвСтствСнно. ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π²Ρ‹Π·ΠΎΠ²Π°