root/ompi/mca/io/romio321/romio/test/aggregation2.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. handle_error
  2. main

   1 /* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
   2 /*  
   3  *  (C) 2007 by Argonne National Laboratory.
   4  *      See COPYRIGHT in top-level directory.
   5  */
   6 
   7 /* Look for regressions in aggregator code.  A more simple access pattern than
   8  * aggregation1 */
   9 
  10 #include <mpi.h>
  11 
  12 #include <stdlib.h>
  13 #include <stdio.h>
  14 #include <time.h>
  15 
  16 #include <sys/types.h>
  17 #include <unistd.h>
  18 
  19 #include <string.h>
  20 
  21 #define BUFSIZE 512
  22 
  23 static void handle_error(int errcode, const char *str)
  24 {
  25         char msg[MPI_MAX_ERROR_STRING];
  26         int resultlen;
  27         MPI_Error_string(errcode, msg, &resultlen);
  28         fprintf(stderr, "%s: %s\n", str, msg);
  29         MPI_Abort(MPI_COMM_WORLD, 1);
  30 }
  31 
  32 int main(int argc, char ** argv) 
  33 {
  34     MPI_Info info = MPI_INFO_NULL;
  35     MPI_File fh;
  36     MPI_Offset off=0;
  37     MPI_Status status;
  38     int errcode;
  39     int i, rank, errs=0, toterrs, buffer[BUFSIZE], buf2[BUFSIZE];
  40 
  41     MPI_Init(&argc, &argv);
  42 
  43     MPI_Comm_rank(MPI_COMM_WORLD, &rank);
  44 
  45     MPI_Info_create(&info);
  46     MPI_Info_set(info, "romio_cb_write", "enable");
  47     MPI_Info_set(info, "cb_nodes", "1");
  48 
  49     for (i=0; i<BUFSIZE; i++) {
  50         buffer[i] = 10000+rank;
  51     }
  52     off = rank*sizeof(buffer);
  53 
  54     errcode = MPI_File_open(MPI_COMM_WORLD, argv[1], 
  55                 MPI_MODE_WRONLY|MPI_MODE_CREATE, info, &fh);
  56     if (errcode != MPI_SUCCESS) handle_error(errcode, "MPI_File_open");
  57     errcode = MPI_File_write_at_all(fh, off, buffer, BUFSIZE, 
  58                 MPI_INT,  &status);
  59     if (errcode != MPI_SUCCESS) handle_error(errcode, "MPI_File_write_at_all");
  60     errcode = MPI_File_close(&fh);
  61     if (errcode != MPI_SUCCESS) handle_error(errcode, "MPI_File_close");
  62 
  63     errcode = MPI_File_open(MPI_COMM_WORLD, argv[1], 
  64                 MPI_MODE_RDONLY, info, &fh);
  65     if (errcode != MPI_SUCCESS) handle_error(errcode, "MPI_File_open");
  66     errcode = MPI_File_read_at_all(fh, off, buf2, BUFSIZE, 
  67                 MPI_INT,  &status);
  68     if (errcode != MPI_SUCCESS) handle_error(errcode, "MPI_File_read_at_all");
  69     errcode = MPI_File_close(&fh);
  70     if (errcode != MPI_SUCCESS) handle_error(errcode, "MPI_File_close");
  71 
  72     for (i=0; i<BUFSIZE; i++) {
  73         if (buf2[i] != 10000+rank)
  74             errs++;
  75     }
  76     MPI_Allreduce( &errs, &toterrs, 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD );
  77     if (rank == 0) {
  78         if( toterrs > 0) {
  79             fprintf( stderr, "Found %d errors\n", toterrs );
  80         }
  81         else {
  82             fprintf( stdout, " No Errors\n" );
  83         }
  84     }
  85     MPI_Info_free(&info);
  86     MPI_Finalize();
  87 
  88     return 0;
  89 }

/* [<][>][^][v][top][bottom][index][help] */