Blame src/mpi/debugger/qdemo.c

Packit Service c5cf8c
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
Packit Service c5cf8c
/*
Packit Service c5cf8c
 *  (C) 2005 by Argonne National Laboratory.
Packit Service c5cf8c
 *      See COPYRIGHT in top-level directory.
Packit Service c5cf8c
 */
Packit Service c5cf8c
Packit Service c5cf8c
#include <stdio.h>
Packit Service c5cf8c
#include "mpi.h"
Packit Service c5cf8c
Packit Service c5cf8c
/* This is a program to enable testing and demonstration of the debugger
Packit Service c5cf8c
   interface, particularly in terms of showing message queues.  To use
Packit Service c5cf8c
   this, run with a few processes and attach with the debugger when the
Packit Service c5cf8c
   program stops.  You can change the variable "hold" to 0 to allow the
Packit Service c5cf8c
   program to complete. */
Packit Service c5cf8c
int main(int argc, char *argv[])
Packit Service c5cf8c
{
Packit Service c5cf8c
    int wsize, wrank;
Packit Service c5cf8c
    int source, dest, i;
Packit Service c5cf8c
    int buf1[10], buf2[10], buf3[10];
Packit Service c5cf8c
    MPI_Request r[3];
Packit Service c5cf8c
    volatile int hold = 1;
Packit Service c5cf8c
    MPI_Comm dupcomm;
Packit Service c5cf8c
    MPI_Status status;
Packit Service c5cf8c
Packit Service c5cf8c
    MPI_Init(&argc, &argv);
Packit Service c5cf8c
Packit Service c5cf8c
    MPI_Comm_size(MPI_COMM_WORLD, &wsize);
Packit Service c5cf8c
    MPI_Comm_rank(MPI_COMM_WORLD, &wrank);
Packit Service c5cf8c
Packit Service c5cf8c
    /* Set the source and dest in a ring */
Packit Service c5cf8c
    source = (wrank + 1) % wsize;
Packit Service c5cf8c
    dest = (wrank + wsize - 1) % wsize;
Packit Service c5cf8c
Packit Service c5cf8c
    MPI_Comm_dup(MPI_COMM_WORLD, &dupcomm);
Packit Service c5cf8c
    MPI_Comm_set_name(dupcomm, "Dup of comm world");
Packit Service c5cf8c
Packit Service c5cf8c
    for (i = 0; i < 3; i++) {
Packit Service c5cf8c
        MPI_Irecv(MPI_BOTTOM, 0, MPI_INT, source, i + 100, MPI_COMM_WORLD, &r[i]);
Packit Service c5cf8c
    }
Packit Service c5cf8c
Packit Service c5cf8c
    MPI_Send(buf2, 8, MPI_INT, dest, 1, MPI_COMM_WORLD);
Packit Service c5cf8c
    MPI_Send(buf3, 4, MPI_INT, dest, 2, dupcomm);
Packit Service c5cf8c
Packit Service c5cf8c
    while (hold);
Packit Service c5cf8c
Packit Service c5cf8c
    MPI_Recv(buf1, 10, MPI_INT, source, 1, MPI_COMM_WORLD, &status);
Packit Service c5cf8c
    MPI_Recv(buf1, 10, MPI_INT, source, 1, dupcomm, &status);
Packit Service c5cf8c
Packit Service c5cf8c
    for (i = 0; i < 3; i++) {
Packit Service c5cf8c
        MPI_Cancel(&r[i]);
Packit Service c5cf8c
    }
Packit Service c5cf8c
Packit Service c5cf8c
    MPI_Comm_free(&dupcomm);
Packit Service c5cf8c
Packit Service c5cf8c
Packit Service c5cf8c
    MPI_Finalize();
Packit Service c5cf8c
Packit Service c5cf8c
    return 0;
Packit Service c5cf8c
}