00001 #include "TopoManager.h" 00002 #include <stdio.h> 00003 #include <mpi.h> 00004 00005 int main(int argc, char *argv[]) { 00006 int numranks, myrank; 00007 MPI_Init(&argc, &argv); 00008 MPI_Comm_size(MPI_COMM_WORLD, &numranks); 00009 MPI_Comm_rank(MPI_COMM_WORLD, &myrank); 00010 int i, ndims=0, *dims; 00011 00012 TopoManager_init(numranks); 00013 TopoManager_getDimCount(&ndims); 00014 if (ndims <= 0) { 00015 printf("ERROR: Rank %d got negative number of dimensions\n", myrank); 00016 MPI_Finalize(); 00017 return 0; 00018 } 00019 dims = (int*)malloc(sizeof(int)*(ndims+1)); 00020 00021 if (myrank == 0) { 00022 printf("Testing TopoManager...\n"); 00023 printf("MPI Job Size: %d ranks\n\n", numranks); 00024 printf("Machine topology has %d dimensions\n", ndims); 00025 00026 TopoManager_getDims(dims); 00027 printf("Torus Size "); 00028 for (i=0; i < ndims; i++) printf("[%d] ", dims[i]); 00029 printf("\n\n"); 00030 00031 FILE *out = fopen("allocationC.txt","w"); 00032 TopoManager_printAllocation(out); 00033 fclose(out); 00034 printf("Dumped allocation to allocationC.txt\n"); 00035 } 00036 00037 TopoManager_getPeCoordinates(myrank, dims); 00038 printf("---- Rank %d coordinates ---> (", myrank); 00039 for (i=0; i < ndims-1; i++) printf("%d,", dims[i]); 00040 printf("%d)\n", dims[ndims-1]); 00041 int obtained; 00042 TopoManager_getPeRank(&obtained, dims); 00043 if (obtained != myrank) 00044 printf("ERROR: Failure to obtain rank from my coordinates at rank %d!!!\n", myrank); 00045 00046 free(dims); 00047 TopoManager_free(); 00048 00049 MPI_Finalize(); 00050 return 0; 00051 }