void BDFReportResults(params_t *params, bigraph_t *bigraph) { gk_startcputimer(params->reporttimer); gk_stopcputimer(params->reporttimer); printf("\nTiming Information ----------------------------------------------------------\n"); printf(" I/O: \t\t %7.3"PRREAL" sec\n", gk_getcputimer(params->iotimer)); printf(" Ordering: \t\t %7.3"PRREAL" sec (METIS time)\n", gk_getcputimer(params->parttimer)); printf(" Reporting: \t\t %7.3"PRREAL" sec\n", gk_getcputimer(params->reporttimer)); printf(" Partitioning: \t\t %7.3"PRREAL" sec\n", gk_getcputimer(_parttimer)); printf(" NZStating: \t\t %7.3"PRREAL" sec\n", gk_getcputimer(_nztimer)); printf("\nMemory Information ----------------------------------------------------------\n"); printf(" Max memory used:\t\t %7.3"PRREAL" MB\n", (real_t)(params->maxmemory/(1024.0*1024.0))); printf("\nHeuristic Information -------------------------------------------------------\n"); printf(" TotalCheck: \t\t %"PRIDX"\n", _totalcheck); printf(" FirstHit: \t\t %"PRIDX"\n", _firsthit); printf(" FirstHitRate: \t\t %7.3"PRREAL"\n", (_totalcheck == 0 ? 1 : (real_t)1.0*_firsthit/_totalcheck)); printf(" MaxArea: \t\t %"PRIDX"\n", _maxarea); printf(" MaxNonZeros: \t\t %"PRIDX"\n", _maxnz); printf(" MinArea: \t\t %"PRIDX"\n", _minarea); printf(" MinNonZeors: \t\t %"PRIDX"\n", _minnz); printf(" AvgArea: \t\t %7.3"PRREAL"\n", _avgarea); printf(" AvgNz: \t\t %7.3"PRREAL"\n", _avgnz); printf(" MaxDense: \t\t %7.6"PRREAL"\n", _maxdense); printf(" MinDense: \t\t %7.6"PRREAL"\n", _mindense); printf("******************************************************************************\n"); }
void GPReportResults(params_t *params, graph_t *graph, idx_t *part, idx_t objval) { gk_startcputimer(params->reporttimer); ComputePartitionInfo(params, graph, part); gk_stopcputimer(params->reporttimer); FILE *fp; fp = fopen( "metis.log", "a" ); fprintf( fp,"\nTiming Information ----------------------------------------------------------\n"); fprintf( fp," I/O: \t\t %7.3"PRREAL" sec\n", gk_getcputimer(params->iotimer)); fprintf( fp," Partitioning: \t\t %7.3"PRREAL" sec (METIS time)\n", gk_getcputimer(params->parttimer)); fprintf( fp," Reporting: \t\t %7.3"PRREAL" sec\n", gk_getcputimer(params->reporttimer)); fprintf( fp,"\nMemory Information ----------------------------------------------------------\n"); fprintf( fp," Max memory used:\t\t %7.3"PRREAL" MB\n", (real_t)(params->maxmemory/(1024.0*1024.0))); fprintf( fp,"******************************************************************************\n"); fclose( fp ); }
/************************************************************************* * Let the game begin **************************************************************************/ int main(int argc, char *argv[]) { idxtype i, j, ne, nn, etype, mtype, numflag=0, nparts, edgecut; idxtype *elmnts, *epart, *npart, *metype, *weights; double IOTmr, DUALTmr; char etypestr[5][5] = {"TRI", "TET", "HEX", "QUAD", "LINE"}; GraphType graph; if (argc != 3) { mprintf("Usage: %s <meshfile> <nparts>\n",argv[0]); exit(0); } nparts = atoi(argv[2]); if (nparts < 2) { mprintf("nparts must be greater than one.\n"); exit(0); } gk_clearcputimer(IOTmr); gk_clearcputimer(DUALTmr); mtype=MeshType(argv[1]); ne=MixedElements(argv[1]); metype = idxmalloc(ne, "main: metype"); weights = idxmalloc(ne, "main: weights"); gk_startcputimer(IOTmr); if(mtype==1) elmnts = ReadMesh(argv[1], &ne, &nn, &etype); else if(mtype==3) elmnts = ReadMeshWgt(argv[1], &ne, &nn, &etype, weights); else if(mtype==0) elmnts = ReadMixedMesh(argv[1], &ne, &nn, metype); else elmnts = ReadMixedMeshWgt(argv[1], &ne, &nn, metype, weights); gk_stopcputimer(IOTmr); epart = idxmalloc(ne, "main: epart"); npart = idxmalloc(nn, "main: npart"); mprintf("**********************************************************************\n"); mprintf("%s", METISTITLE); mprintf("Mesh Information ----------------------------------------------------\n"); if (mtype==1) mprintf(" Name: %s, #Elements: %D, #Nodes: %D, Etype: %s\n\n", argv[1], ne, nn, etypestr[etype-1]); else mprintf(" Name: %s, #Elements: %D, #Nodes: %D, Etype: %s\n\n", argv[1], ne, nn, "Mixed"); mprintf("Partitioning Nodal Graph... -----------------------------------------\n"); gk_startcputimer(DUALTmr); if (mtype==1 || mtype==3) METIS_PartMeshNodal(&ne, &nn, elmnts, &etype, &numflag, &nparts, &edgecut, epart, npart); else METIS_PartMixedMeshNodal(&ne, &nn, elmnts, metype, &numflag, &nparts, &edgecut, epart, npart); gk_stopcputimer(DUALTmr); mprintf(" %D-way Edge-Cut: %7D, Balance: %5.2f\n", nparts, edgecut, ComputeElementBalance(ne, nparts, epart)); gk_startcputimer(IOTmr); WriteMeshPartition(argv[1], nparts, ne, epart, nn, npart); gk_stopcputimer(IOTmr); mprintf("\nTiming Information --------------------------------------------------\n"); mprintf(" I/O: \t\t %7.3f\n", gk_getcputimer(IOTmr)); mprintf(" Partitioning: \t\t %7.3f\n", gk_getcputimer(DUALTmr)); mprintf("**********************************************************************\n"); /* graph.nvtxs = ne; graph.xadj = idxmalloc(ne+1, "xadj"); graph.vwgt = idxsmalloc(ne, 1, "vwgt"); graph.adjncy = idxmalloc(10*ne, "adjncy"); graph.adjwgt = idxsmalloc(10*ne, 1, "adjncy"); METIS_MeshToDual(&ne, &nn, elmnts, &etype, &numflag, graph.xadj, graph.adjncy); ComputePartitionInfo(&graph, nparts, epart); gk_free((void **)&graph.xadj, &graph.adjncy, &graph.vwgt, &graph.adjwgt, LTERM); */ gk_free((void **)&elmnts, &epart, &npart, &metype, &weights, LTERM); }
/************************************************************************* * Let the game begin **************************************************************************/ int main(int argc, char *argv[]) { idxtype i, options[10]; idxtype *perm, *iperm; GraphType graph; char filename[256]; idxtype numflag = 0, wgtflag; double TOTALTmr, METISTmr, IOTmr, SMBTmr; if (argc != 2) { mprintf("Usage: %s <GraphFile>\n",argv[0]); exit(0); } strcpy(filename, argv[1]); gk_clearcputimer(TOTALTmr); gk_clearcputimer(METISTmr); gk_clearcputimer(IOTmr); gk_clearcputimer(SMBTmr); gk_startcputimer(TOTALTmr); gk_startcputimer(IOTmr); ReadGraph(&graph, filename, &wgtflag); if (graph.nvtxs <= 0) { mprintf("Empty graph. Nothing to do.\n"); exit(0); } if (graph.ncon != 1) { mprintf("Ordering can only be applied to graphs with one constraint.\n"); exit(0); } gk_stopcputimer(IOTmr); /* Ordering does not use weights! */ gk_free((void **)&graph.vwgt, &graph.adjwgt, LTERM); mprintf("**********************************************************************\n"); mprintf("%s", METISTITLE); mprintf("Graph Information ---------------------------------------------------\n"); mprintf(" Name: %s, #Vertices: %D, #Edges: %D\n\n", filename, graph.nvtxs, graph.nedges/2); mprintf("Node-Based Ordering... ----------------------------------------------\n"); perm = idxmalloc(graph.nvtxs, "main: perm"); iperm = idxmalloc(graph.nvtxs, "main: iperm"); options[0] = 0; gk_startcputimer(METISTmr); METIS_NodeND(&graph.nvtxs, graph.xadj, graph.adjncy, &numflag, options, perm, iperm); gk_stopcputimer(METISTmr); gk_startcputimer(IOTmr); WritePermutation(filename, iperm, graph.nvtxs); gk_stopcputimer(IOTmr); gk_startcputimer(SMBTmr); ComputeFillIn(&graph, iperm); gk_stopcputimer(SMBTmr); gk_stopcputimer(TOTALTmr); mprintf("\nTiming Information --------------------------------------------------\n"); mprintf(" I/O: \t %7.3f\n", gk_getcputimer(IOTmr)); mprintf(" Ordering: \t %7.3f (ONMETIS time)\n", gk_getcputimer(METISTmr)); mprintf(" Symbolic Factorization: \t %7.3f\n", gk_getcputimer(SMBTmr)); mprintf(" Total: \t %7.3f\n", gk_getcputimer(TOTALTmr)); mprintf("**********************************************************************\n"); gk_free((void **)&graph.xadj, &graph.adjncy, &perm, &iperm, LTERM); }