Мегаобучалка Главная | О нас | Обратная связь


Богатство возможностей



2015-11-27 536 Обсуждений (0)
Богатство возможностей 0.00 из 5.00 0 оценок




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

 

Имеющиеся в настоящее время реализации включают

 

MPICH: реализация Argonne National Lab и Mississippi State University

LAM: реализация Ohio Supercomputer Center

MPI/Pro: реализация MPI Software Technology

IBM MPI: реализация фирмы IBM для кластерных рабочих станций SP и RS/6000

CHIMP: реализация Edinburgh Parallel Computing Centre

UNIFY: реализация Mississippi State University

MPI имеется в наличии на многих массивно параллельных системах.

 

ВЦ РАН и МСЦ используют MPICH-реализацию MPI, последнюю версию которой можно свободно скачать с сайта Argonne National Lab

 

 

Как использовать MPI

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

 

Если Вы пишете программу MPI с чистого листа, и написать сначала последовательную программу (без вызовов MPI) не составляет большого труда, сделайте это. Повторим, идентификация и удаление непараллельных ошибок вначале намного облегчит отлаживание параллельной программы. Проектируйте ваш параллельный алгоритм, используя в своих интересах любой параллелизм, свойственный вашему последовательному коду, например, большие массивы которые можно разбить на подзадачи и обрабатывать независимо.

 

Перед тем как произвести отладку параллельной версии, удостоверьтесь сначала, что запуски вашей программы успешны на минимальном количестве узлов, т.е. начните с последовательной версии. Затем постепенно увеличивайте число узлов, например, от 2 до 4, затем 8, и т.д. Таким путем вы не будете тратить впустую много машинного времени на поиск и устранение дополнительных ошибок.

 

 

Программы MPI

 

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

как выглядит список параметров?

 

Программа сама по себе не преставляет собой ничего более, чем широко известную программу Hello, world, поэтому мы не будем касаться понимания цели алгоритма -- лучше мы сфокусируемся полностью на механизме осуществления параллельной версии этой чрезвычайно простой задачи

 

Формат функций MPI

 

Во-первых, рассмотрим форматы фактических вызовов, используемых MPI.

Привязка к языку C

Для C, общий формат имеет вид

rc = MPI_Xxxxx(parameter, ... )

Заметим, что регистр здесь важен. Например, MPI должно быть заглавным, так же как и первая буква после подчеркивания. Все последующие символы долны быть в нижнем регистре. Переменная rc --- есть некий код возврата, имеющий целый тип. В случае успеха, он устанавливается в MPI_SUCCESS.

 

Программа на C должна включать файл "mpi.h". Он содержит определения для констант и функций MPI.

Привязка к языку Фортран

В случае языка Фортран общая форма выглядит так

Call MPI_XXXXX(parameter,..., ierror)

Заметим, что здесь регистр не важен. Поэтому, эквивалентной формой будет

call mpi_xxxxx(parameter,..., ierror)

В отличие от С, в которой функции MPI возвращают код ошибки, Фортран-версия подпрогамм MPI обычно имеет один дополнителный параметр в списке вызова, ierror, котрый равен коду возврата. В случае успешного вызова, ierror устанавливается в значение MPI_SUCCESS.

 

Программы Фортран должны обычно включать 'mpif.h' (для компилятора Compaq 'mpif90.h') Этот файл определения для констант и функций MPI.

Для обеих привязок и C, и Фортрана

 

исключением к вышеприведенным функциям есть функции времени (MPI_Wtime и MPI_Wtick), которые являются функциями как C, так и Фортрана, и возвращают действительные числа с двойной точностью.

 

В дальнейшем изложении мы ограничимся привязкой только к языку С. Изучив привязку MPI к С, желающие, как уже говорилось, могут самостоятельно освоить соответствующие подпрограммы Фортрана.

 

 

Еще о функциях MPI

 

Основная схема программы MPI подчиняется следующим общим шагам:

Инициализация для коммуникаций

Коммуникации распределения данных по процессам

Выход "чистым" способом из системы передачи сообщений по завершении коммуникаций

MPI имеет свыше 125 функций. Тем не менее, начинающий программист обычно может иметь дело только с шестью функциями, которые иллюстрируют нашу простейшую программу и обсуждаются ниже:

 

Инициализация для коммуникаций

MPI_Init инициализирует окружение MPI

MPI_Comm_size возвращает число процессов

MPI_Comm_rank возвращает номер текущего процесса (ранг = номер по-порядку)

 

Коммуникации распределения данных по процессами

MPI_Send отправляет сообщение

MPI_Recv получает сообщение

 

Выход из системы передачи сообщений

MPI_Finalize

 

 

Пример MPI-программы

 

Покажем эти шесть базовых вызовов функций MPI в следующем коде на языке C. Нажав на название каждой функции MPI можно прочесть детальное описание ее предназначения и синтаксиса.

 

#include <stddef.h>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include "mpi.h"

main(int argc, char **argv)

{

char message[20];

int i, rank, size, type = 99;

MPI_Status status;

MPI_Init(&argc, &argv);

MPI_Comm_size(MPI_COMM_WORLD, &size);

MPI_Comm_rank(MPI_COMM_WORLD, &rank);

if (rank == 0)

{

strcpy(message, "Hello, world!");

for (i = 1; i < size; i++)

MPI_Send(message, 14, MPI_CHAR, i, type, MPI_COMM_WORLD);

}

Else

MPI_Recv(message, 20, MPI_CHAR, 0, type, MPI_COMM_WORLD, &status);

printf( "Message from process = %d : %.14s\n", rank,message);

MPI_Finalize();

}

Резюмируя эту программу можно сказать: это код SPMD, так что копии этой программы выполняются на множестве процессоров. Каждый процесс инициализирует себя в MPI (MPI_Init), определяет число процессов (MPI_Comm_size) и узнает его ранг (MPI_Comm_rank). Затем одни процесс (с рангом 0) посылает сообщения в цикле (MPI_Send), устанавливает целевой аргумент (предназначения) в индекс цикла, чтобы быть уверенным, что в каждый из оставшихся процессов посылается одно сообщение. Оставшиеся процессы получают одно сообщение (MPI_Recv). Затем все процессы печатают сообщение и выходят из MPI (MPI_FInalize).

 

Здесь нет заботы о том, что не произойдет в этой программе. Нет функций, которые вызывают дополнительные копии программы на выполнение. Для запуска программы на выполнение на суперкомпьютере используют команду mpirun.

 

Сообщения MPI

Сообщения MPI состоят из двух основных частей: отправляемые/получаемые данные, и сопроводительная информация (записи на конверте /оболочке/), которая помогает отправить данные по определенному маршруту. Обычно существуют три вызываемых параметра в вызовах передачи сообщений MPI, которые описывают данные и три других параметра, которые определяют маршрут:

Сообщение = данные (3 параметра) + оболочка (3 параметра)старт буфера, число, тип данных цель, тег, коммуникатор

 

 

Данные

Буфер в вызовах MPI есть место в компьютерной памяти, из которого сообщения должны быть посланы или где они накапливаются. В этом смысле буфер -- это просто память, которую компилятор выделил для переменной (часто массива) в вашей программе. Следующие три параметра вызова MPI необходимы, чтобы определить буфер:

Старт буфера

 

Адрес, где данные начинаются. Например, начало массива в вашей программе.

Число

 

Число элементов (пунктов) данных в сообщении. Заметим, что это элементы, а не байты. Это делается для переносимости кода, ибо нет необходимости беспокоиться о различных представлениях типов данных на различных компьютерах. Реализация матобеспечения MPI определяет число байт автоматически. Число, определенное при получении должно быть больше чем или равно числу, определенному при отправке. Если посылается больше данных, чем имеется в хранилище принимающего буфера, то произойдет ошибка.

Тип данных

 

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

Типы данных уже определенные для вас называются "основными типами данных" и перечислены ниже



2015-11-27 536 Обсуждений (0)
Богатство возможностей 0.00 из 5.00 0 оценок









Обсуждение в статье: Богатство возможностей

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Организация как механизм и форма жизни коллектива: Организация не сможет достичь поставленных целей без соответствующей внутренней...
Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас...
Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение...
Модели организации как закрытой, открытой, частично открытой системы: Закрытая система имеет жесткие фиксированные границы, ее действия относительно независимы...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (536)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.006 сек.)