Виконання формального аналiзу iнформацiйної незалежності операторiв, страница 3

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ншим блокам