1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
/*
* Copyright (C) by Argonne National Laboratory
* See COPYRIGHT in top-level directory
*/
#include "../adio/include/adio.h"
#include "../adio/include/adio_extern.h"
#include "mpi.h"
int main(int argc, char **argv)
{
int i;
ADIO_File fd;
ADIO_Offset min_st_offset, max_end_offset;
int rank;
int nprocs_for_coll;
int lb;
MPI_Count size, extent;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
if (argc != 4) {
if (!rank)
printf("Usage: file_realms_test <number of aggregators> <lower bound> <upper bound>\n"
" simulates file_realm calculation\n");
MPI_Finalize();
return 1;
}
nprocs_for_coll = atoi(argv[1]);
min_st_offset = atoi(argv[2]);
max_end_offset = atoi(argv[3]);
if (max_end_offset < min_st_offset) {
if (!rank)
printf("end offset %lld is less then start offset %lld\n",
max_end_offset, min_st_offset);
MPI_Finalize();
return 1;
}
printf("min_st_offset = %lld\nmax_end_offset = %lld\n", min_st_offset, max_end_offset);
fd = (ADIO_File) ADIOI_Malloc(sizeof(struct ADIOI_FileD));
fd->hints = (ADIOI_Hints *)
ADIOI_Malloc(sizeof(struct ADIOI_Hints_struct));
fd->hints->cb_nodes = nprocs_for_coll;
ADIOI_Calc_file_realms(fd, min_st_offset, max_end_offset);
for (i = 0; i < nprocs_for_coll; i++) {
printf("file_realm_st_offs[%d] = %lld\n", i, fd->file_realm_st_offs[i]);
}
for (i = 0; i < nprocs_for_coll; i++) {
MPI_Type_size_x(fd->file_realm_types[i], &size);
printf("file_realm [%d] size = %d\n", i, size);
}
for (i = 0; i < nprocs_for_coll; i++) {
MPI_Type_get_extent(fd->file_realm_types[i], &lb, &extent);
printf("file_realm [%d] extent = %d\n", i, extent);
}
for (i = 0; i < nprocs_for_coll; i++)
MPI_Type_free(&fd->file_realm_types[i]);
ADIOI_Free(fd->file_realm_st_offs);
ADIOI_Free(fd->file_realm_types);
ADIOI_Free(fd->hints);
ADIOI_Free(fd);
MPI_Finalize();
return 0;
}
|