Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекция по ПП 3.pdf
Скачиваний:
12
Добавлен:
02.06.2015
Размер:
4.72 Mб
Скачать

Терминология

Особенность MPI:понятиеобластисвязи

(communicationdomains).Призапуске приложениявсепроцессыпомещаютсяв создаваемуюдляприложенияобщую область связи.

Принеобходимости онимогутсоздавать новыеобласти связинабазе существующих.Всеобластисвязиимеют независимуюдруготдруганумерацию процессов.

245

Терминология

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

246

Терминология

Для одной областисвязиможет существовать несколько коммуникаторов такимобразом,чтоприложениебудет работать снейкакснесколькимиразными областями.

247

Терминология

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

MPI_COMM_WORLD. Это название коммуникатора, создаваемого библиотекойавтоматически.Он описываетстартовую область связи, объединяющуювсепроцессыприложения.

248

КомандыMPI

MPI_Init(int *argc, char ***argv)

MPI_Finalize()

MPI_Comm_size(MPI_Comm comm, int

*size)

MPI_Comm_rank(MPI_Comm comm, int *rank)

MPI_Get_processor_name(char *name, int

*resultlen)

249

КомандыMPI

MPI_Send(void* buf, int count,

MPI_Datatype datatype, int dest, int tag, MPI_Comm comm)

MPI Recv(void* buf, int count,

MPI_Datatype datatype, int source, int tag,

MPI_Comm comm, MPI_Status *status)

250

КомандыMPI

MPI_Send(void* buf, int count,

MPI_Datatype datatype, int dest, int tag, MPI_Comm comm)

MPI Recv(void* buf, int count,

MPI_Datatype datatype, int source, int tag,

MPI_Comm comm, MPI_Status *status)

251

КомандыMPI

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

252

КомандыMPI

Инициализациябиблиотеки.Однаиз первыхинструкцийвфункцииmain (главной функцииприложения):

MPI_Init( &argc,&argv);

Онаполучаетадресааргументов, стандартно получаемыхсамойmainот операционнойсистемыихранящих параметрыкомандной строки.

253

КомандыMPI

Вконецкомандной строки программы MPI-загрузчикmpirunдобавляетряд информационныхпараметров,которые требуютсяMPI_Init.Это показываетсяв примере0.

254

КомандыMPI

Аварийноезакрытиебиблиотеки. Вызывается,еслипользовательская программазавершаетсяпопричине ошибоквременивыполнения,связанныхс

MPI:

MPI_Abort(описатель областисвязи,код ошибкиMPI);

255

КомандыMPI

ВызовMPI_Abortизлюбойзадачи принудительнозавершаетработу ВСЕХ задач,подсоединенныхкзаданной области связи.

Еслиуказанописатель MPI_COMM_WORLD, будетзавершеновсе приложение(всеегозадачи)целиком.

256

КомандыMPI

Нормальное закрытиебиблиотеки: MPI_Finalize();

Настоятельно рекомендуетсянезабывать вписыватьэтуинструкциюперед возвращениемизпрограммы,тоесть:

передвызовомстандартной функцииСи exit;

передкаждым послеMPI_Init оператором returnвфункцииmain.

257

КомандыMPI

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

intsize,rank;

MPI_Comm_size(MPI_COMM_WORLD, &size);

MPI_Comm_rank( MPI_COMM_WORLD, &rank);

258

КомандыMPI

*Началоизавершение: * MPI_Init,MPI_Finalize

* Определениеколичествазадачв приложениииисвоегопорядкового номера:

*MPI_Comm_size, MPI_Comm_rank

*/

259

КомандыMPI

#include <mpi.h> #include <stdio.h>

int main( int argc, char **argv )

{

int size, rank, i;

/* Инициализируем библиотеку */

MPI_Init( &argc, &argv );

260

КомандыMPI

/*Узнаемколичествозадачв запущенномприложении*/

MPI_Comm_size( MPI_COMM_WORLD, &size );

/*... исвойсобственныйномер:от0до

(size-1)*/

MPI_Comm_rank( MPI_COMM_WORLD, &rank );

261

КомандыMPI

/*задачасномером0 сообщает пользователюразмергруппы,

*ккоторой прикрепленаобласть связи,

*сописателем(коммуникатором)

MPI_COMM_WORLD,

*т.е.числопроцессоввприложении!!

*/

 

if( rank==0 )

 

printf("Total processes count = %d\n",

 

size );

262

КомандыMPI

/*Каждая задачавыводитпользователю свойномер*/

printf("Hello! My rank in MPI_COMM_WORLD = %d\n", rank );

263

КомандыMPI

/*Точкасинхронизации,затемзадача0 печатает*аргументыкомандной строки.

*Вкомандной строке могутбыть

*параметры,добавляемыезагрузчиком

MPIRUN.

*/

264

КомандыMPI

MPI_Barrier( MPI_COMM_WORLD ); if( rank == 0 )

for( puts("Command line of process 0:"), i=0; i<argc; i++ )

printf( "%d: \"%s\"\n", i, argv[i] );

265

КомандыMPI

/*Всезадачизавершаютвыполнение

*/

MPI_Finalize(); return 0;

}

266

КомандыMPI

Связь"точка-точка".

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

267

КомандыMPI

Задача1передает: int buf[10];

MPI_Send( buf, 5, MPI_INT, 1, 0,

MPI_COMM_WORLD );

Задача2принимает: int buf[10];

MPI_Status status;

MPI_Recv( buf, 10, MPI_INT, 0, 0, MPI_COMM_WORLD, &status );

268

Коллективныефункции

Подтермином"коллективные"вMPI подразумеваютсятригруппыфункций:

функцииколлективного обмена данными;

точкисинхронизации,илибарьеры;

функцииподдержкираспределенных операций.

269

Коллективныефункции

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

270

Коллективныефункции

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

271

Коллективныефункции

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

272

Точкисинхронизации,илибарьеры

Этимзанимаетсявсегооднафункция: intMPI_Barrier(MPI_Comm comm);

MPI_Barrierостанавливаетвыполнение вызвавшейеезадачидотехпор,покане будетвызванаизовсехостальных задач, подсоединенныхкуказываемому коммуникатору.

273

Точкисинхронизации,илибарьеры

Гарантируется,чтоквыполнению следующейзаMPI_Barrierинструкции каждая задачаприступитодновременнос остальными.

274

Точкисинхронизации,или барьеры

Это единственнаявMPIфункция, вызовамикоторой гарантированно синхронизируетсявовременивыполнение различныхветвей!

275

Точкисинхронизации,или барьеры

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

276

Функцииколлективногообмена данными

Основныеособенности иотличияот коммуникацийтипа"точка-точка":

наприеми/илипередачуработают одновременноВСЕзадачи-абоненты указываемогокоммуникатора;

277

Функцииколлективногообмена данными

Основныеособенности иотличияот коммуникацийтипа"точка-точка":

коллективная функциявыполняет одновременноиприем,ипередачу;она имеетбольшое количествопараметров, частькоторых нужнадля приема,ачасть дляпередачи;вразныхзадачахтаили инаячастьигнорируется;

278

Функцииколлективногообмена данными

Основныеособенности иотличияот коммуникацийтипа"точка-точка":

как правило,значенияВСЕХпараметров (заисключениемадресовбуферов) должныбытьидентичнымивовсех задачах;

".

279

Функцииколлективногообмена данными

Основныеособенности иотличияот коммуникацийтипа"точка-точка":

MPIназначаетидентификатордля сообщенийавтоматически;

280

Функцииколлективногообмена данными

Основныеособенности иотличияот коммуникацийтипа"точка-точка":

крометого, сообщенияпередаютсянепо указываемомукоммуникатору, апо временномукоммуникатору-дупликату;

темсамымпотоки данныхколлективных функцийнадежноизолируютсядруг от другаиотпотоков, созданных функциями"точка-точка".

281

Коммуникаторы,группыи областисвязи

Группаэтонекоемножествоветвей.Одна ветвьможетбытьчленомнескольких групп.Враспоряжениепрограммиста предоставлентипMPI_Group инабор функций,работающихспеременнымии константами этого типа.

282

Коммуникаторы,группыи областисвязи

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

283

Коммуникаторы,группыи областисвязи

Областьсвязи("communicationdomain")-

этонечтоабстрактное: враспоряжении программистанеттипаданных, описывающегонепосредственнообласти связи,какнетифункцийпоуправлению ими.Областисвязиавтоматически создаются иуничтожаются вместес коммуникаторами.Абонентамиодной области связиявляютсяВСЕзадачилибо одной,либодвухгрупп.

284

Коммуникаторы,группыи областисвязи

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

285

Коммуникаторы,группыи областисвязи

Однойобластисвязимогут соответствовать несколько коммуникаторов.

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

286

Умножениематриц

ДаныдвепрямоугольныематрицыAи B размерностиm*nиn*q соответственно (рисунок1),тогда матрицаC (рисунок2)называетсяих произведением,гдекаждыйеё элементвычисляетсявсоответствии с формулой(1).

287

Умножениематриц

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

Последовательныйалгоритмумноженияматриц for(i=0;i<NUM_ROW_A; i++)//циклпострокам A for(j=0;j<NUM_COL_B;j++)//циклпостолбцамB for(r =0;r <NUM_ROW_B; r++)//цикл построкам B с[i][j] +=(a[i][r] *b[r][j]);

288

Умножениематриц

Третийциклданного алгоритма(по строкам B)вычисляетодинэлемент результирующейматрицы,второй – отдельную строку,апервый– всю матрицу.

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

289

Умножениематриц

Приразработке параллельного алгоритма длярешенияданнойзадачибыласначала проанализированазависимостькаждой итерациипоследовательного алгоритмаот данных.

Прианализебыловыяснено,что

длявыполненияоднойизитераций третьегоцикла(вычисленияодного элементарезультирующейматрицы)

необходимыодинэлементматрицыA и одинэлементматрицыB.

290

Умножениематриц

Прианализебыловыяснено,что

длявыполненияоднойитерациивторого цикланужнавсяматрицаоднастрока матрицыA иодинстолбецматрицыB.

длявыполненияодной итерации верхнего,основного циклаженужныодна строка матрицыA ивсяматрицаB.Таким образом,параллелизмвозможенпри разделениивсегопроцессапострокам матрицыA,гдекаждому изпотоков выделяетсякакое-то количествострок.

291

Умножениематриц

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

Программасостоитизтрёхосновныхчастей –

впервойчастиглавнымпотокомпередаётсявся информацияосновнымпотокамдлявыполнения,

вовторойпроизводятсявычисления,

втретьейпроизводитсясборвсейинформации обратно.

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

показателейвэксперименте.

292

Умножениематриц

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

293

Умножениематриц

294

Умножениематриц

Испытаниянавычислительномкластере былипроведеныкакдляразногоразмера матриц,такидляразногочислапотоков.

295

Умножениематриц

296

Умножениематриц

297

Умножениематриц

Сравнениерезультатов, полученныхна вычислительномкластереикомпьютере сдвухъядернымпроцессоромIntel

298

Умножениематриц

299

Умножениематриц

Использование вычислительногокластера являетсяоченьвыгоднымприумножении матрицбольшого размер,таккак применениекластераприумножении матрицразмером2000*2000 даётускорение примернов5раз.

300

Умножениематриц

Умножение же матриц малого размера (500*500 и меньше) занимает практически одинаковое время при использовании как кластера, так и компьютерас двухъядерным процессором.

301

Умножениематриц

Это обуславливается затратами на накладные расходы (пересылки данных и т. п.), которыепо своему объёму становятся соизмеримыми с вычислениями, и поэтому особенного ускорения не наблюдается.

302

Умножениематриц

Наибольшее быстродействие достигается при решении задачи на вычислительном кластере при использовании 14 (13 рабочих и 1 главного) потоков.

303

Умножениематриц

Также стоит отметить, что при 12 потоках на кластере по сравнению с 9, 10 и 11наблюдается упадок быстродействия. Это связано, в первуюочередь, с нерегулярностью организации оборудованиякластера (кластер состоит из отдельных блейдов по 8 процессоров, соединённых вычислительной сетью).

304

Умножениематриц

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

305

Обе данные технологии применяются на практике – OpenMP для отдельно взятых машин, а MPI для вычислений на кластерах. Существуют также гибридные технологии.

306