阅读背景:

在MPI_Waitsome中发生错误

来源:互联网 
#include <mpi.h>
#include <stdlib.h>
#include <stdio.h>

int main(int argc, char *argv[])
{
    int myid, numprocs, number_of_completed_operation;

    char message = 'a';


    MPI_Init(&argc, &argv);
    MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
    MPI_Comm_rank(MPI_COMM_WORLD, &myid);

    MPI_Request* requests = (MPI_Request*)malloc((numprocs - 1)*sizeof(MPI_Request));
    MPI_Status* statuses = (MPI_Status*)malloc(sizeof(MPI_Status)*(numprocs - 1));
    int* indices = (int *)malloc((numprocs - 1)*sizeof(int));
    char* buf = (char *)malloc((numprocs - 1)*sizeof(char));

    if (myid != numprocs - 1)
    {//worker

        printf("***this is sender %d\n", myid);
        MPI_Send(&message, 1, MPI_CHAR, numprocs - 1, 110, MPI_COMM_WORLD);
        printf("*.*sender %d is done\n", myid);



    }
    else if (myid == numprocs - 1)
    {
        //master
        int number_of_left_messages = numprocs - 1;//有numprocs-1个信息到来
        int i;
        for (i = 0; i < numprocs - 1; i++)
        {
            MPI_Irecv(&buf+i, 1, MPI_CHAR,i, 110, MPI_COMM_WORLD, &requests[i]);
        }

        MPI_Waitsome(numprocs - 1, requests, &number_of_completed_operation, indices, statuses);


        number_of_left_messages = number_of_left_messages - number_of_completed_operation;
        printf("number of completed operation is %d\n", number_of_left_messages);
        printf("left message amount is %d\n", number_of_left_messages);

        int j;
        for (j = 0; j <numprocs - 1; j++)
        {
            printf("-------------\n");
            printf("index is %d\n",indices[j]);
            printf("source is %d\n", statuses[j].MPI_SOURCE);
            //printf("good\n");
            printf("--------====\n");

        }

        while (number_of_left_messages > 0)
        {
            MPI_Waitsome(numprocs - 1, requests, &number_of_completed_operation, indices, statuses);

            printf("number of completed operation is %d\n", number_of_completed_operation);
            for (j = 0; j <numprocs - 1; j++)
            {
                printf("-------------\n");
                printf("index is %d\n", indices[j]);
                printf("source is %d\n", statuses[j].MPI_SOURCE);
                printf("--------====\n");
            }
            number_of_left_messages = number_of_left_messages - number_of_completed_operation;
            printf("left message amount is %d\n", number_of_left_messages);
#include <mpi.h>
#include <stdlib.h>
#include <



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: