diff options
| author | Tor Aamodt <[email protected]> | 2010-10-01 08:55:28 -0800 |
|---|---|---|
| committer | Tor Aamodt <[email protected]> | 2010-10-01 08:55:28 -0800 |
| commit | 11b308e7363e937966b035b4891db32b4eece3bf (patch) | |
| tree | 50ca4c9ad6f163ac4acb2bf505e64dfebed66947 /benchmarks/CUDA/DG/3rdParty/ParMetis-3.1/ParMETISLib/ometis.c | |
| parent | bb820c116764d7a1b8e071137d32b74e7f34dd2f (diff) | |
integrating recent changes from fermi-test into fermi
(i'll use "fermi" for more disruptive changes to the pipeline model such
as updating the MSHRs and getting rid of the warp tracker, ripping out DWF, etc...)
[git-p4: depot-paths = "//depot/gpgpu_sim_research/fermi/distribution/": change = 7805]
Diffstat (limited to 'benchmarks/CUDA/DG/3rdParty/ParMetis-3.1/ParMETISLib/ometis.c')
| -rw-r--r-- | benchmarks/CUDA/DG/3rdParty/ParMetis-3.1/ParMETISLib/ometis.c | 188 |
1 files changed, 0 insertions, 188 deletions
diff --git a/benchmarks/CUDA/DG/3rdParty/ParMetis-3.1/ParMETISLib/ometis.c b/benchmarks/CUDA/DG/3rdParty/ParMetis-3.1/ParMETISLib/ometis.c deleted file mode 100644 index 1a461f1..0000000 --- a/benchmarks/CUDA/DG/3rdParty/ParMetis-3.1/ParMETISLib/ometis.c +++ /dev/null @@ -1,188 +0,0 @@ -/* - * Copyright 1997, Regents of the University of Minnesota - * - * ometis.c - * - * This is the entry point of parallel ordering - * - * Started 10/19/96 - * George - * - * $Id: ometis.c,v 1.4 2003/07/25 04:01:04 karypis Exp $ - * - */ - -#include <parmetislib.h> - - - - -/*********************************************************************************** -* This function is the entry point of the parallel ordering algorithm. -* This function assumes that the graph is already nice partitioned among the -* processors and then proceeds to perform recursive bisection. -************************************************************************************/ -void ParMETIS_V3_NodeND(idxtype *vtxdist, idxtype *xadj, idxtype *adjncy, int *numflag, - int *options, idxtype *order, idxtype *sizes, MPI_Comm *comm) -{ - int i, j; - int ltvwgts[MAXNCON]; - int nparts, npes, mype, wgtflag = 0, seed = GLOBAL_SEED; - CtrlType ctrl; - WorkSpaceType wspace; - GraphType *graph, *mgraph; - idxtype *morder; - int minnvtxs; - - MPI_Comm_size(*comm, &npes); - MPI_Comm_rank(*comm, &mype); - nparts = npes; - - if (!ispow2(npes)) { - if (mype == 0) - printf("Error: The number of processors must be a power of 2!\n"); - return; - } - - if (vtxdist[npes] < (int)((float)(npes*npes)*1.2)) { - if (mype == 0) - printf("Error: Too many processors for this many vertices.\n"); - return; - } - - minnvtxs = vtxdist[1]-vtxdist[0]; - for (i=0; i<npes; i++) - minnvtxs = (minnvtxs < vtxdist[i+1]-vtxdist[i]) ? minnvtxs : vtxdist[i+1]-vtxdist[i]; - - if (minnvtxs < (int)((float)npes*1.1)) { - if (mype == 0) - printf("Error: vertices are not distributed equally.\n"); - return; - } - - - if (*numflag == 1) - ChangeNumbering(vtxdist, xadj, adjncy, order, npes, mype, 1); - - SetUpCtrl(&ctrl, nparts, options[PMV3_OPTION_DBGLVL], *comm); - ctrl.CoarsenTo = amin(vtxdist[npes]+1, 25*npes); - - ctrl.CoarsenTo = amin(vtxdist[npes]+1, 25*amax(npes, nparts)); - ctrl.seed = mype; - ctrl.sync = seed; - ctrl.partType = STATIC_PARTITION; - ctrl.ps_relation = -1; - ctrl.tpwgts = fsmalloc(nparts, 1.0/(float)(nparts), "tpwgts"); - ctrl.ubvec[0] = 1.03; - - graph = Moc_SetUpGraph(&ctrl, 1, vtxdist, xadj, NULL, adjncy, NULL, &wgtflag); - - PreAllocateMemory(&ctrl, graph, &wspace); - - /*======================================================= - * Compute the initial k-way partitioning - =======================================================*/ - IFSET(ctrl.dbglvl, DBG_TIME, InitTimers(&ctrl)); - IFSET(ctrl.dbglvl, DBG_TIME, MPI_Barrier(ctrl.gcomm)); - IFSET(ctrl.dbglvl, DBG_TIME, starttimer(ctrl.TotalTmr)); - - Moc_Global_Partition(&ctrl, graph, &wspace); - - IFSET(ctrl.dbglvl, DBG_TIME, MPI_Barrier(ctrl.gcomm)); - IFSET(ctrl.dbglvl, DBG_TIME, stoptimer(ctrl.TotalTmr)); - IFSET(ctrl.dbglvl, DBG_TIME, PrintTimingInfo(&ctrl)); - - /*======================================================= - * Move the graph according to the partitioning - =======================================================*/ - IFSET(ctrl.dbglvl, DBG_TIME, MPI_Barrier(ctrl.gcomm)); - IFSET(ctrl.dbglvl, DBG_TIME, starttimer(ctrl.MoveTmr)); - - MALLOC_CHECK(NULL); - graph->ncon = 1; - mgraph = Moc_MoveGraph(&ctrl, graph, &wspace); - MALLOC_CHECK(NULL); - - IFSET(ctrl.dbglvl, DBG_TIME, MPI_Barrier(ctrl.gcomm)); - IFSET(ctrl.dbglvl, DBG_TIME, stoptimer(ctrl.MoveTmr)); - - /*======================================================= - * Now compute an ordering of the moved graph - =======================================================*/ - IFSET(ctrl.dbglvl, DBG_TIME, MPI_Barrier(ctrl.gcomm)); - IFSET(ctrl.dbglvl, DBG_TIME, starttimer(ctrl.TotalTmr)); - - FreeWSpace(&wspace); - PreAllocateMemory(&ctrl, mgraph, &wspace); - - ctrl.ipart = ISEP_NODE; - ctrl.CoarsenTo = amin(vtxdist[npes]+1, amax(20*npes, 1000)); - - /* compute tvwgts */ - for (j=0; j<mgraph->ncon; j++) - ltvwgts[j] = 0; - - for (i=0; i<mgraph->nvtxs; i++) - for (j=0; j<mgraph->ncon; j++) - ltvwgts[j] += mgraph->vwgt[i*mgraph->ncon+j]; - - for (j=0; j<mgraph->ncon; j++) - ctrl.tvwgts[j] = GlobalSESum(&ctrl, ltvwgts[j]); - - mgraph->nvwgt = fmalloc(mgraph->nvtxs*mgraph->ncon, "mgraph->nvwgt"); - for (i=0; i<mgraph->nvtxs; i++) - for (j=0; j<mgraph->ncon; j++) - mgraph->nvwgt[i*mgraph->ncon+j] = (float)(mgraph->vwgt[i*mgraph->ncon+j]) / (float)(ctrl.tvwgts[j]); - - - morder = idxmalloc(mgraph->nvtxs, "PAROMETIS: morder"); - MultilevelOrder(&ctrl, mgraph, morder, sizes, &wspace); - - MALLOC_CHECK(NULL); - - /* Invert the ordering back to the original graph */ - ProjectInfoBack(&ctrl, graph, order, morder, &wspace); - - MALLOC_CHECK(NULL); - - IFSET(ctrl.dbglvl, DBG_TIME, MPI_Barrier(ctrl.gcomm)); - IFSET(ctrl.dbglvl, DBG_TIME, stoptimer(ctrl.TotalTmr)); - IFSET(ctrl.dbglvl, DBG_TIME, PrintTimingInfo(&ctrl)); - IFSET(ctrl.dbglvl, DBG_TIME, MPI_Barrier(ctrl.gcomm)); - - free(ctrl.tpwgts); - free(morder); - FreeGraph(mgraph); - FreeInitialGraphAndRemap(graph, 0); - FreeWSpace(&wspace); - FreeCtrl(&ctrl); - - if (*numflag == 1) - ChangeNumbering(vtxdist, xadj, adjncy, order, npes, mype, 0); - - MALLOC_CHECK(NULL); -} - - -/*********************************************************************************** -* This function is the entry point of the parallel ordering algorithm. -* This function assumes that the graph is already nice partitioned among the -* processors and then proceeds to perform recursive bisection. -************************************************************************************/ -void PAROMETIS(idxtype *vtxdist, idxtype *xadj, idxtype *vwgt, idxtype *adjncy, idxtype *adjwgt, - idxtype *order, idxtype *sizes, int *options, MPI_Comm comm) -{ - int numflag, newoptions[5]; - - newoptions[0] = 1; - newoptions[PMV3_OPTION_DBGLVL] = options[4]; - newoptions[PMV3_OPTION_SEED] = GLOBAL_SEED; - - numflag = options[3]; - - ParMETIS_V3_NodeND(vtxdist, xadj, adjncy, &numflag, newoptions, order, sizes, &comm); - - options[0] = -1; - -} - |
