static void switchToAll() { MPI_Comm prevComm = PCU_Get_Comm(); PCU_Switch_Comm(MPI_COMM_WORLD); MPI_Comm_free(&prevComm); PCU_Barrier(); }
int main(int argc, char* argv[]) { MPI_Init(&argc,&argv); PCU_Comm_Init(); PCU_Debug_Open(); if ( argc != 2&&argc!=3 ) { if ( !PCU_Comm_Self() ) printf("Usage: %s <binary_graph_file> [vertex_partition_file]",argv[0]); PCU_Comm_Free(); MPI_Finalize(); assert(false); } agi::binGraph* g; zagi::ZoltanCutVertex* ptn; int self = PCU_Comm_Self(); int num_parts = PCU_Comm_Peers(); PCU_Switch_Comm(MPI_COMM_SELF); if (!self) { g = new agi::binGraph(argv[1]); ptn = new zagi::ZoltanCutVertex(g,num_parts); ptn->run(); } else g = new agi::binGraph(); agi::EdgePartitionMap map; if (!self) { ptn->createPtn(map); delete ptn; } PCU_Switch_Comm(MPI_COMM_WORLD); g->migrate(map); partitionInfo(g); delete g; if (!PCU_Comm_Self()) printf("Block Partitioning\n"); g = new agi::binGraph(argv[1]); partitionInfo(g); delete g; if (argc==3) { if (!PCU_Comm_Self()) printf("Partitioned: %s\n",argv[2]); g = new agi::binGraph(argv[1],argv[2]); partitionInfo(g); delete g; } PCU_Barrier(); if (!PCU_Comm_Self()) printf("\nAll tests passed\n"); PCU_Comm_Free(); MPI_Finalize(); }