Blame test/mpi/pt2pt/bsend3.c

Packit 0848f5
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
Packit 0848f5
/*
Packit 0848f5
 *  (C) 2001 by Argonne National Laboratory.
Packit 0848f5
 *      See COPYRIGHT in top-level directory.
Packit 0848f5
 */
Packit 0848f5
#include <stdio.h>
Packit 0848f5
#include "mpi.h"
Packit 0848f5
#include "mpitest.h"
Packit 0848f5
Packit 0848f5
#define BUFSIZE 2000
Packit 0848f5
int main(int argc, char *argv[])
Packit 0848f5
{
Packit 0848f5
    MPI_Status status;
Packit 0848f5
    MPI_Request request;
Packit 0848f5
    int a[10], b[10];
Packit 0848f5
    int buf[BUFSIZE], *bptr, bl, i, j, rank, size;
Packit 0848f5
    int errs = 0;
Packit 0848f5
Packit 0848f5
    MTest_Init(0, 0);
Packit 0848f5
    MPI_Comm_rank(MPI_COMM_WORLD, &rank;;
Packit 0848f5
    MPI_Comm_size(MPI_COMM_WORLD, &size);
Packit 0848f5
    MPI_Buffer_attach(buf, BUFSIZE);
Packit 0848f5
Packit 0848f5
    for (j = 0; j < 10; j++) {
Packit 0848f5
        MPI_Bsend_init(a, 10, MPI_INT, 0, 27 + j, MPI_COMM_WORLD, &request);
Packit 0848f5
        for (i = 0; i < 10; i++) {
Packit 0848f5
            a[i] = (rank + 10 * j) * size + i;
Packit 0848f5
        }
Packit 0848f5
        MPI_Start(&request);
Packit 0848f5
        MPI_Wait(&request, &status);
Packit 0848f5
        MPI_Request_free(&request);
Packit 0848f5
    }
Packit 0848f5
    if (rank == 0) {
Packit 0848f5
Packit 0848f5
        for (i = 0; i < size; i++) {
Packit 0848f5
            for (j = 0; j < 10; j++) {
Packit 0848f5
                int k;
Packit 0848f5
                status.MPI_TAG = -10;
Packit 0848f5
                status.MPI_SOURCE = -20;
Packit 0848f5
                MPI_Recv(b, 10, MPI_INT, i, 27 + j, MPI_COMM_WORLD, &status);
Packit 0848f5
Packit 0848f5
                if (status.MPI_TAG != 27 + j) {
Packit 0848f5
                    errs++;
Packit 0848f5
                    printf("Wrong tag = %d\n", status.MPI_TAG);
Packit 0848f5
                }
Packit 0848f5
                if (status.MPI_SOURCE != i) {
Packit 0848f5
                    errs++;
Packit 0848f5
                    printf("Wrong source = %d\n", status.MPI_SOURCE);
Packit 0848f5
                }
Packit 0848f5
                for (k = 0; k < 10; k++) {
Packit 0848f5
                    if (b[k] != (i + 10 * j) * size + k) {
Packit 0848f5
                        errs++;
Packit 0848f5
                        printf("received b[%d] = %d from %d tag %d\n", k, b[k], i, 27 + j);
Packit 0848f5
                    }
Packit 0848f5
                }
Packit 0848f5
            }
Packit 0848f5
        }
Packit 0848f5
    }
Packit 0848f5
    MPI_Buffer_detach(&bptr, &bl);
Packit 0848f5
Packit 0848f5
    MTest_Finalize(errs);
Packit 0848f5
    MPI_Finalize();
Packit 0848f5
    return 0;
Packit 0848f5
}