ПредишенСледващото

3.2 Основи на програмирането в стандарта MPI

Всеки процес на паралелната програма се генерира въз основа на копие от същия програмен код (SPMP модел - Единични ПРОГРАМА множество процеси). Този код се представи под формата на изпълнима програма, трябва да е налице към момента на стартирането на паралелна програма на всички процесори използват. Сорс кодът за изпълнима програма е разработена на алгоритмична C или Fortran език, с помощта на специално изпълнение на библиотеката MPI.

Броят на процесите и на броя на процесорите, използвани се определя по време на изпълнение с помощта на паралелен среда на изпълнението на програмата, както и на MPI-програмите по време на изчисления не могат да се променят (стандартно MPI-2 дава възможност за динамично променя броя на процесите). Всички процеси на програмата са номерирани последователно от 0 до п-1, където р е общият брой на процесите. брой процес се нарича ранг на процеса.

В този случай, за да се избегнат изчисления за самоличност на различни процесори, възможно е, първо, да замества различни данни за различни процесори, софтуер, и второ, чрез средство за идентифициране на процеса, който се изпълнява програмата, и по този начин се даде възможност да организиране на разликите в изчислението в зависимост от процесора, използван от програмата.

Тя ви позволява да качвате даден под-задача, в зависимост от "номера" на процесора. В този начален проблем е разделен на подпроблеми (разлагане). Често срещана техника е, както следва: всяка от подзадачи се издава под формата на самостоятелна структурна единица (функция модул) за всички процесори работят на същата програма "зареждане", която, според "номера" на процесора зарежда специално подзадача.

Тук са необходимия минимум набор от функции MPI, достатъчна, за да се развива относително прости паралелни програми.

А просто програма MPI.

Вземем примера на паралелна версия на широко използваният демото "Здравей, свят" програма. В допълнение към нормалната пост всеки процес ще отпечата номера му и общия брой на процеси.

# включват
# Включете "MPI. Н"
Int основна (междинно argc. знак * argv [])
<
вътр procs_rank. procs_count;
MPI_Init ( argc. argv);
// инициализира MPI-библиотека
MPI_Comm_size (MPI_COMM_WORLD. procs_count);
// определи броя на процесите
MPI_Comm_rank (MPI_COMM_WORLD. procs_rank);
// намерите процеса на ранг
ФОРМАТ ( "\ н Hello World от процеса% 3 3 г от% г." procs_rank procs_count ..);
MPI_Finalize ();
// близо MPI-библиотека
връщане 0;
>

Нека разгледаме по-подробно един пример:

Първо свържете заглавния файл библиотека "MPI. H". съдържа дефиниции на функции, видове, константи MPI. Този файл трябва да бъдат включени във всички модули, които използват MPI.

Първо във всяка програма MPI трябва да се обадите MPI_Init. което трябва да присъства във всяка програма MPI и предхожда всички останали MPI повиквания. Той определя "Околна среда" (околна среда) MPI. Само едно обаждане до MPI_Init позволено от програмата. Неговите аргументи са редица аргументи за обработване на командния ред и самия процес на командния ред.

вътр MPI_Init (инт * argc. Чар *** argv)

  • argc - указател към броя на опции за командния ред;
  • argv - параметри на командния ред.

MPI_Comm_size функция procs_count връща броя на стартираните процеси за тази програма. Кой начин потребителят стартира тези процеси - е изпълнение зависи, но всяка програма може да определи броя на стартираните процеси с помощта на тази покана. Значение procs_count - е, в действителност, размерът на групата, свързана с MPI_COMM_WORLD на комуникатор. Обработва всяка група номерирани с числа, започващи с 0. наречени звания (ранг). Всеки процес определя номера му в групата, свързана с комуникатор, използвайки MPI_Comm_rank. По този начин, всеки процес получава един и същ номер в procs_count. но различен брой в ранг. Всеки процес отпечатва ранг и общият брой на стартираните процеси, след което всички процеси, извършвани MPI_Finalize. Тази функция трябва да се извърши от всеки MPI процес и води до елиминирането на "носител" MPI. Не MPI повиквания не могат да бъдат изпълнени след процес MPI_Finalize повикване (пре MPI_Init също така е невъзможно).

Функцията на определяне на броя на процесите в областта на комуникацията MPI_Comm_size.

Int MPI_Comm_size (MPI_Comm Comm. Int * размер)

където кому - комуникатора, размер - броят на процесите в областта на комуникацията комуникатор комитет.

Откриване зали MPI_Comm_rank процес.

вътр MPI_Comm_rank (MPI_Comm комитет. вътр * ранг)

където кому - комуникатор, ранг на - процес брой vyzvavschego функция.

MPI функция програми MPI_Finalize завършване не е включена лампа.

вътр MPI_Finalize (свободен)

Помислете за резултатите от тази програма за двата процеса.

2 варианта, получени от факта, че от порядъка на външния вид на текстови съобщения се определя от кой от процесите, използвани за изпълнение на отчета за печат, който най-общо казано, това е трудно да се предскаже предварително. Едно възможно решение на този проблем, който ще бъде обсъден по-късно, е да се съберат данни за един от процесите, а след това произвежда своята продукция.

Определяне на времето за изпълнение на програмата за MPI

Почти веднага след първата развитието на паралелни програми е необходимо да се определи по време на извършване изчисления за оценка на постижими ускоряването на процесите на решаване на проблеми чрез използване на паралелизъм. Често използваните средства за измерване на времето за работа на програмите зависи обикновено на хардуерната платформа, операционна система, алгоритмичен език и т.н. MPI стандарт включва определение на специфични функции за измерване на време, използването на което премахва зависимостта от средата на изпълнението на програмата за паралелно. Получаване на текущото време, предоставена от функция:

двойно MPI_Wtime (свободен);

в резултат на призива й, това е броя на секунди изтекли от определен момент от време в миналото. Този момент, от който броенето секунди, може да зависи от изпълнението на библиотека среда MPI, и по този начин да избягат от тази зависимост MPI_Wtime функция трябва да се използва само за определяне на продължителността на изпълнението на някои кодови фрагменти паралелни програми. Възможни функции MPI_Wtime схема заявление може да бъде, както следва:

<
двойно StartTime. ENDTIME;
StartTime = MPI_Wtime ();
// Някои операции
ENDTIME = MPI_Wtime ();
ФОРМАТ ( "Работа време% е сек \ п" ENDTIME - StartTime.);
>

Точност на измерване на времето, може да зависи и от среден паралелно изпълнение на програмата. функция може да се използва за определяне на точността на текущата стойност:

двойно MPI_Wtick (свободен);

което позволява да се определи времето, в секунди между последователни заявление индекси време хардуер таймер на компютърни системи.

Подкрепете проекта - споделете линка, благодаря!