Қазақстан респудликасы білім және ғылым министрлігі


№11-12  лабораториялық жұмыс



Pdf көрінісі
бет47/57
Дата06.01.2022
өлшемі1,9 Mb.
#14410
1   ...   43   44   45   46   47   48   49   50   ...   57
№11-12  лабораториялық жұмыс


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

Жұмыстың мақсаты: 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);

_

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



программасын қарастырайық:

#include

#include

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);



Достарыңызбен бөлісу:
1   ...   43   44   45   46   47   48   49   50   ...   57




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет