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


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



Pdf көрінісі
бет58/82
Дата06.01.2022
өлшемі11,68 Mb.
#15553
1   ...   54   55   56   57   58   59   60   61   ...   82
№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   ...   54   55   56   57   58   59   60   61   ...   82




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

    Басты бет