Хабарламаларды беруді программалау
Жұмыстың мақсаты: 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);
Достарыңызбен бөлісу: