Beispiel #1
0
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");

}
Beispiel #2
0
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 );

}
Beispiel #3
0
/*************************************************************************
* 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);

}
Beispiel #4
0
/*************************************************************************
* 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);
}