MPI_Comm_size(MPI_COMM_WORLD, &Size);
MPI_Get_processor_name(processor_name, &namelen);
MPI_Comm_group(processor_name, group1);
MPI_Group_incl(group1,1, proc1, Nproc);
MPI_Comm_group(processor_name, group2);
MPI_Group_incl (group1,1, Nproc);
MPI_Group_union(group1, group2);
//головний процес передає файл іншим процесам широковешающою посилкою
if(Nproc==2)
{
MPI_Bcast("ststus.sts",11,MPI_CHAR, 0,MPI_COMM_WORLD)
}
//відкриваємо файл
MPI_File_open(MPI_COMM_WORLD,"ststus.sts",
MPI_MODE_CREATE|MPI_MODE_RDWR,MPI_INFO_NULL,&fh);
// Повiдомлення мiстить поточний номер Nproc
int message=Nproc;
// ****** Нумерацiя з 0 ********
switch (Nproc)
{
case 7:
{
// Виведення часов. мiтки
curtime=MPI_Wtime();
printf("7) Start time: %d\n",curtime);
wait(2); // Очiкування, що iмiтуе роботу
// Передача даних iншим блокам
printf("7) Send '%i' for 3\n", message);
MPI_Send(&message, 1, MPI_INT, 2, TAG, MPI_COMM_WORLD);
// Надрукувати даннi, що передаються
printf("7) Send '%i' for 4\n", message);
MPI_Send(&message, 1, MPI_INT, 3, TAG, MPI_COMM_WORLD);
// Надрукувати даннi, що передаються
printf("7) Send '%i' for 5\n", message);
MPI_Send(&message, 1, MPI_INT, 4, TAG, MPI_COMM_WORLD);
// Виведення часов. мiтки кiнця
curtime=MPI_Wtime();
printf("7) End time: %d\n",curtime);
MPI_File_iwrite(fh,&message,1,MPI_INT,&req);
}
break;
case 2:
{
// Виведення часов. мiтки
curtime=MPI_Wtime();
printf("2) Start time: %d\n",curtime);
// Отримання даних, запис у локальнi зміннi та виведення на екран
MPI_Recv(&message, 1 ,MPI_INT,7, TAG, MPI_COMM_WORLD, &status);
v1 = message;
wait(2); // Очiкування, що iмiтуе роботу
// Передача даних iншим блокам
printf("2) Send '%i' for 6\n", message);
MPI_Send(&message, 1, MPI_INT, 5, TAG, MPI_COMM_WORLD);
// Надрукувати даннi, що передаються
printf("2) Send '%i' for 7\n", message);
MPI_Send(&message, 1, MPI_INT, 6, TAG, MPI_COMM_WORLD);
// Виведення часов. мiтки кiнця
curtime=MPI_Wtime();
printf("2) End time: %d\n",curtime);
MPI_File_iwrite(fh,&message,1,MPI_INT,&req);
}
break;
case 3:
{
// Виведення часов. мiтки
curtime=MPI_Wtime();
printf("3) Start time: %d\n",curtime);
// Отримання даних, запис у локальнi зміннi та виведення на екран
MPI_Recv(&message, 1 ,MPI_INT,0, TAG, MPI_COMM_WORLD, &status);
v1 = message;
MPI_Recv(&message, 1 ,MPI_INT, 7,TAG, MPI_COMM_WORLD, &status);
v2 = message;
printf("3) Recieved: %i\n",v1,v2);
wait(4); // Очiкування, що iмiтуе роботу
// Надрукувати даннi, що передаються
printf("3) Send '%i' for 2\n", message);
MPI_Send(&message, 1, MPI_INT, 1, TAG, MPI_COMM_WORLD);
// Виведення часов. мiтки кiнця
curtime=MPI_Wtime();
printf("3) End time: %d\n",curtime);
MPI_File_iwrite(fh,&message,1,MPI_INT,&req);
}
break;
case 5:
{
// Виведення часов. мiтки
curtime=MPI_Wtime();
printf("5) Start time: %d",curtime);
// Отримання даних, запис у локальнi змыннi та виведення на екран
MPI_Recv(&message, 1 ,MPI_INT, 2, TAG, MPI_COMM_WORLD, &status);
v1 = message;
printf("5) Recieved: %i \n",v1);
wait(3); // Очiкування, що iмiтуе роботу
// Надрукувати даннi, що передаються
printf("5) Send '%i' for 2\n", message);
// Передача даних iншим блокам
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.