Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМКД_параллель есептеулер.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
4.82 Mб
Скачать

Хабарламаларды беруді программалау

Жұмыстың мақсаты: MPI - параллельді программалау құралымен жұмыс жасау принципімен танысу.

Материалдар және жабдықтар: ДК, параллельді есептеулер программалау ортасы, MPI кітапханасы.

Жұмыстың мазмұны және орындалу тәртібі:

  1. MPI_Send және MPI_Recv процедураларын қарастырайық:

int MPI_Send (void* buf, int count,

MPI_Datatype dataType,

int dest, int tag,

MPI_Comm_comm)

Мұндағы: buf - буфер адресінің басы;

count – міндетті түрде жіберілетін элементтер саны;

dataType – әрбір элементтің типі, мысалы: MPI_INT, MPI_DOUBLE, MPI_CHAR, және т.с.с.;

dest - адресат рангісі (процесс идентификаторы);

tag – хабарлама тэгі;

comm - коммуникатор.

int MPI_Recv (void* buf, int count,

MPI_Datatype dataType, int source, int tag,

MPI_Comm comm, MPI_Status* status)

Мұндағы: status – кері қайту жағдайын қайтарады,

source – MPI_Send процедурасындағыдай берілу идентификаторы.

MPI программасында белгілі бір ережелерді қатаң сақтау керек, онсыз жұмыс жүруі мүмкін емес. Алдымен, программының басталуында, оның тақырыбынан кейін сәйкес тақырыптық файлды іске қосу керек. С тіліндегі программада бұл - mpi.h. Программада MPI кітапханалық процедурасының алғашқы шақырылымы MPI_Init инициализациясының ішкі программасын шақыру болып табылады. С тілінде инициализация функциясының параметрі негізгі программа қосылған жағдайда оның аргументінің адресін алады: MPI_Init(&argc, &argv);

_

  1. MPI кітапханасының көмегімен екі процесс арасындағы мәндермен алмасу программасын қарастырайық:

#include <mpi.h>

#include <mpi.h>

Main(int argc, char *argv[])

{int myid, otherid, size;

Int length=1, tag=1;

Int myvalue, othervalue;

MPI_Status status;

MPI_Init(&argc, &argv);

MPI_Comm_size(MPI_COMM_WORLD, &size);

MPI_Comm_rank(MPI_COMM_WORLD, &myid);

if (myid==0) (otherid=1; myvalue=14;}

else

{otherid=0; myvalue=25;}

MPI_Send(&myvalue, length, MPI_INT, otherid,

tag, MPI COMM_WORLD, &status);

MPI_Recv(&othervalue, length, MPI_INT, MPI_ANY_SOURCE,

tag, MPI COMM_WORLD, &status);

printf("npoцecc номер %d алынды %d\n", myid, othervalue);

MPl_Finalize();}

  1. Әрбіреуі стандартты құрылғыға процесс номерін және іске қосылған процесстердің саны туралы хабарлама шығаратын бірнеше поцессті іске қосатын қарапайым программаны келтірейік:

#include <mpi.h>

#include <stdio.h>

int main(int argc,char *argv[])

{

int myid, numprocs;

MPI_Init(&argc, &argv);

MPI_Comm_size(MPI_COMM_WORLD, &numprocs);

MPI_Comm_rank(MPI_COMM_WORLD, &myid);

printf(stdout,"Process %d of %d\n", myid, numprocs)

MPI_Finalize();

return 0;

}

  1. Келесі программа жұп және тақ рангілі процесстер арасындағы хабарламалар алмасуға мысал болады, size мәні жұп болсын делік:

#include <mpi.h>

#include <stdio.h>

int main(int argc,char *argv[])

{

int myrank, size, message;

int TAG = 0;

MPI_Status status;

MPI_ Init(&argc, &argv);

MPI_Comm_rank(MPI_COMM_WORLD, &myrank);

MPl_Comm_size(MPI_COMM_WORLD, &size);

message=myrank; if((myrank%2)-0)

{

If((myrank+1)1-size)

MPI

{

if((myrank+ 1)1- size)

MPI_Send(&message, 1, MPI_INT, myrank+1, TAG,

MPI_COMM_WORLD); else {if (myrank !- 0)

{ MPI__Recv(&message, 1, MPI_INT, myrank-1, TAG, MPI_COMM_WORLD, &status);

printf("I am %i received :%i \n", rank, message);

return 0;

}

Өз бетімен орындауға арналған тапсырмалардың нұсқалары:

  1. MPI программасын қондыру және күйін келтіру.

  2. Процессорлардың жалпы санын анықтау (MPI_Comm_Size).

  3. Процесстердің жеке номерін анықтау (MPI_Comm_Rank).

  4. “Нүкте-Нүкте” типті блокталынған коммуникациялық функция көмегімен мәліметті жіберуді ұйымдастыру (MPI_Send, MPI_Recv).

  5. Бірмезгілде мәліметті жіберуді ұйымдастыру (MPI_Sendrecv)

Лабораториялық жұмыстың орындалуы туралы есебінің формасы:

1. Берілген есептердің қойылымын талдау, қолданылатын процедураны түсіндіру.

2. Берілген есептерді шешудің параллельді алгоритмін түсіндіру.

3. Орындалған жұмыстың программасын ЭЕМ –де көрсетіп, есебін рәсімдеп, тапсыру.

Блиц-тест:

1. MPI_Comm_size сұранысының қызметі :

А) процесстер санын анықтайды;

В) процесс рангісін анықтайды;

С) MPI кітапханасын инициализациялайды;

Д) басқа процеске хабарлама жібереді.

2. MPI_Comm_rank сұранысының қызметі :

А) процесстер санын анықтайды;

В) процесс рангісін анықтайды;

С) MPI кітапханасын инициализациялайды;

Д) басқа процеске хабарлама жібереді.

3. MPI_Init сұранысының қызметі :

А) процесстер санын анықтайды;

В) процесс рангісін анықтайды;

С) MPI кітапханасын инициализациялайды;

Д) басқа процеске хабарлама жібереді.

4. MPI_Send сұранысының қызметі :

А) процесстер санын анықтайды;

В) процесс рангісін анықтайды;

С) MPI кітапханасын инициализациялайды;

Д) басқа процеске хабарлама жібереді.

5. MPI_Recv сұранысының қызметі :

А) басқа процесстен хабарлама алады;

В) процесс рангісін анықтайды;

С) MPI кітапханасын инициализациялайды;

Д) басқа процеске хабарлама жібереді.

Бақылау сұрақтары.

  1. Хабарламаларды беруді программалауды түсіндір.

  2. MPI (Message Passing Interface ) программалау құралы не үшін қажет?

  3. MPI функционалдық сұраныстарын ата.

  4. MPI_Send процедурасын түсіндір.

  5. MPI_Recv процедурасын түсіндір.

Глоссарий.

MPI(Message Passing Interface ) – хабарламаларды беру интерфейсі.

MPI_Send – хабарламаның блокталынып берілуі.

MPI_Recv – хабарламаның блокталынып алынуы.

MPI_Comm_size - процесстер санын анықтайды.

MPI_Comm_rank – процесстер рангісін анықтайды.

Әдебиеттер

  1. А. Ж. Акжалова. Параллельные вычисления. Учебное пособие. – Алматы: Издательство ТОО «Print S»,- 2004

  2. Грегори Р. Эндрюс. Основы многопоточного, параллельного и распределенного программирования. Пер. с англ.-М.: Издательский дом «Вильямс», 2003.

  3. Воеводин Вл. Параллельная обработка данных. Санкт-Петербург, 2002.

  4. Немнюгин С.А., Стесик О.Л. Параллельное программирование для высокопроизводительных многопроцессорных систем. Санкт-Петербург, 2002.

13-15 лабораториялық жұмыс

PVM-де жұмыс. Ағындарды құру және PVM-де мәліметтерді параллель өңдеу.

Жұмыстың мақсаты: PVM - параллельді виртуальді машинасының жұмыс жасау принципімен танысу, хабарламаларды беру және процессті синхронизациялауға арналған кітапханалармен жұмыс жасау.

Материалдар және жабдықтар: ДК, параллельді есептеулер программалау ортасы, PVM кітапханасы.

Жұмыстың мазмұны және орындалу тәртібі: