Вычисление определенных интегралов методом прямоугольников с помощью MPI

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

I. В этом случае вам хотелось бы быть уверенными, что отправленные вами сообщения придут к вашим процессам и не будут смешаны с сообщениями, отправленными между процессами изнутри библиотечных функций.

В этом примере мы имеем три процесса, взаимодействующих друг с другом. Каждый процесс также вызывает библиотечную функцию и три параллельные части библиотеки взаимодействуют друг с другом. Нам хочется иметь два различных "пространства" сообщений, одни для наших сообщений и один для библиотечных сообщений. Нам бы не хотелось получить какое-либо перемешивание этих сообщений.

Блоки представляют части параллельных процессов. Время растет сверху вниз на каждой диаграмме. Цифры в круглых скобках НЕ параметры, а номера процессов. Например, send (1) означает отправку сообщения процессу 1. Recv (any) означает получение сообщения от любого процесора. Пользовательский (вызывающий) код находится в белом (незатененном) блоке. Затененный блок (вызываемый) представляет собой пакет (параллельной) библиотеки, вызванной пользователем. Наконец, стрелки представляют собой перемещение сообщения от отправителя получателю.

Нижеприведенная диаграмма показывает то, что бы произошло, если бы случилось то, что мы хотели. В этом случае все работает, как намечено.

 

 

Тем не менее, нет никакой гарантии, что события произойдут в этом порядке, так как относительное расписание процессов на различных узлах может меняться от выполнения к выполнению. Предположим, мы изменили третий процесс, добавив некоторые вычисления вначале. Последовательность событий может оказаться следующей:

 

 

В этом случае коммуникации не происходят как намечено. Первый "receive" в процессе 0 теперь получает "send" из библиотечной функции в процессе 1, а не намеченный (и теперь задержанный)"send" из процесса 2. В результате все три процесса подвисают.

Проблема решается за счет того, что разработчик библиотеки запрашивает новый и уникальный коммуникатор и определяет этот коммуникатор во всех вызовах отослать и получить, которые делаются библиотекой. Это создает библиотечное ("вызываемое") пространство сообщений отдельное от пользовательского ("вызывающего") пространства сообщений.

Можно ли использовать теги, чтобы осуществить отдельные пространства сообщений? Проблема с тегами состоит в том, что их значения задаются программистом и он (а) может использовать тот же тег, что и параллельная библиотека, использующая MPI. С коммуникаторами система, а не программист, назначает идентификацию - система назначает коммуникатор пользователю и она назначает отличный коммуникатор библиотеке - так что не возникает возможность перекрытия.

Группы коммуникаторов и процессов

В дополнение к разработке параллельных библиотек, коммуникаторы полезны также в организации коммуникаций внутри приложения. Мы описывали коммуникаторы, которые включают все процессы в приложении. Но программист может также определить подмножество процессов, называемое группой процессов, и прикрепить один или больше коммуникаторов к этой группе процессов. Коммуникация определяет, что коммуникатор будет теперь ограничиваться этими процессами.

В нижеприведенном примере коммуникационным шаблоном является 2-мерная решетка (2D-mesh). Каждый из шести блоков представляет процесс. Каждый процесс должен обменяться данными с соседями выше и ниже, справа и слева. Кодирование этой коммуникации проще если процессы группируются по столбцам (для коммуникаций выше/ниже) и строкам (для коммуникаций направо/налево). Итак, каждый процесс принадлежит трем коммуникаторам, что указывается словами в блоке этого процесса: один коммуникатор на все процессы (мировой коммуникатор по умолчанию), один коммуникатор на его строку и один коммуникатор на его столбец. Эти коммуникаторы указаны как следует ниже:

 

метод прямоугольник интеграл программирование

Это также прямо связано с использованием коллективных коммуникаторов.

Функции коллективной коммуникации: Функции обмена сообщениями, которые обмениваются данными среди всех процессов в группе. Эти функции обычно включают функцию барьера для синхронизации, функцию рассылки (broadcast) для отправки данных от одного процессора всем процессорам, и функции сборки/разброса (gather/scatter).

 

 

Заново напомним аналогию с выпуском исков: одно лицо может иметь счет от электрической и телефонной компаний (2 коммуникатора), но ни одного от водопроводной компании. Электрический коммуникатор может содержать людей, отличающихся от телефонного коммуникатора. Персональный ИН номер (ранг) может изменяться с потребностью (коммуникатором). Итак, критически важно заметить, что ранг, заданный как источник или назначение сообщения есть ранг в точно определенном коммуникаторе.

 

4. Запуск MPI программ

 

Компиляция

Компиляция и перенос приложений обсуждает различные способы исполнения выполнения на суперкомпьютере. Пожалуйста, обращайтесь к этому модулю для общих наставлений по созданию исполняемых программ. Для создания параллельной исполняемой программы вам следует включить директорию, содержащую MPI и библиотеки MPI, когда вы активизируете компилятор. Это подразумевает что компилятор и MPICH установлены на машине, где вы компилируете исполняющую программу.

MS Visual C/C++:

Добавьте MPICH. lib..

Из командной строки:Visual C/C++:prog. c (после активизации setup_visualc)

Настройки для сборки и счет