diff options
Diffstat (limited to 'benchmarks/CUDA/DG/3rdParty/ParMetis-3.1/ParMETISLib/memory.c')
| -rw-r--r-- | benchmarks/CUDA/DG/3rdParty/ParMetis-3.1/ParMETISLib/memory.c | 216 |
1 files changed, 216 insertions, 0 deletions
diff --git a/benchmarks/CUDA/DG/3rdParty/ParMetis-3.1/ParMETISLib/memory.c b/benchmarks/CUDA/DG/3rdParty/ParMetis-3.1/ParMETISLib/memory.c new file mode 100644 index 0000000..a8eeaff --- /dev/null +++ b/benchmarks/CUDA/DG/3rdParty/ParMetis-3.1/ParMETISLib/memory.c @@ -0,0 +1,216 @@ +/* + * Copyright 1997, Regents of the University of Minnesota + * + * memory.c + * + * This file contains routines that deal with memory allocation + * + * Started 2/24/96 + * George + * + * $Id: memory.c,v 1.3 2003/07/30 18:37:59 karypis Exp $ + * + */ + +#include <parmetislib.h> + + +/************************************************************************* +* This function allocate various pools of memory +**************************************************************************/ +void PreAllocateMemory(CtrlType *ctrl, GraphType *graph, WorkSpaceType *wspace) +{ + wspace->nlarge = 2*graph->nedges; + + wspace->maxcore = 8*graph->nedges+1; + wspace->core = idxmalloc(wspace->maxcore, "PreAllocateMemory: wspace->core"); + + wspace->pairs = (KeyValueType *)wspace->core; + wspace->indices = (idxtype *)(wspace->pairs + wspace->nlarge); + wspace->degrees = (EdgeType *)(wspace->indices + wspace->nlarge); + + + wspace->pv1 = idxmalloc(ctrl->nparts+ctrl->npes+1, "PreAllocateMemory: wspace->pv?"); + wspace->pv2 = idxmalloc(ctrl->nparts+ctrl->npes+1, "PreAllocateMemory: wspace->pv?"); + wspace->pv3 = idxmalloc(ctrl->nparts+ctrl->npes+1, "PreAllocateMemory: wspace->pv?"); + wspace->pv4 = idxmalloc(ctrl->nparts+ctrl->npes+1, "PreAllocateMemory: wspace->pv?"); + + wspace->pepairs1 = (KeyValueType *)GKmalloc(sizeof(KeyValueType)*(ctrl->nparts+ctrl->npes+1), "PreAllocateMemory: wspace->pepairs?"); + wspace->pepairs2 = (KeyValueType *)GKmalloc(sizeof(KeyValueType)*(ctrl->nparts+ctrl->npes+1), "PreAllocateMemory: wspace->pepairs?"); + +} + + +/************************************************************************* +* This function de-allocate various pools of memory +**************************************************************************/ +void FreeWSpace(WorkSpaceType *wspace) +{ + + GKfree((void **)&wspace->core, + (void **)&wspace->pv1, + (void **)&wspace->pv2, + (void **)&wspace->pv3, + (void **)&wspace->pv4, + (void **)&wspace->pepairs1, + (void **)&wspace->pepairs2, + LTERM); +} + + +/************************************************************************* +* This function de-allocates memory allocated for the control structures +**************************************************************************/ +void FreeCtrl(CtrlType *ctrl) +{ + MPI_Comm_free(&(ctrl->gcomm)); +} + + +/************************************************************************* +* This function creates a CoarseGraphType data structure and initializes +* the various fields +**************************************************************************/ +GraphType *CreateGraph(void) +{ + GraphType *graph; + + graph = (GraphType *)GKmalloc(sizeof(GraphType), "CreateCoarseGraph: graph"); + + InitGraph(graph); + + return graph; +} + + +/************************************************************************* +* This function creates a CoarseGraphType data structure and initializes +* the various fields +**************************************************************************/ +void InitGraph(GraphType *graph) +{ + graph->gnvtxs = graph->nvtxs = graph->nedges = graph->nsep = -1; + graph->nnbrs = graph->nrecv = graph->nsend = graph->nlocal = -1; + graph->xadj = graph->vwgt = graph->vsize = graph->adjncy = graph->adjwgt = NULL; + graph->nvwgt = NULL; + graph->vtxdist = NULL; + graph->match = graph->cmap = NULL; + graph->label = NULL; + + graph->peind = NULL; + graph->sendptr = graph->sendind = graph->recvptr = graph->recvind = NULL; + graph->imap = NULL; + graph->pexadj = graph->peadjncy = graph->peadjloc = NULL; + graph->lperm = NULL; + + graph->slens = graph->rlens = NULL; + graph->rcand = NULL; + + graph->where = graph->home = graph->lpwgts = graph->gpwgts = NULL; + graph->lnpwgts = graph->gnpwgts = NULL; + graph->rinfo = NULL; + + graph->nrinfo = NULL; + graph->sepind = NULL; + + graph->coarser = graph->finer = NULL; + +} + +/************************************************************************* +* This function deallocates any memory stored in a graph +**************************************************************************/ +void FreeGraph(GraphType *graph) +{ + + GKfree((void **)&graph->xadj, + (void **)&graph->vwgt, + (void **)&graph->nvwgt, + (void **)&graph->vsize, + (void **)&graph->adjncy, + (void **)&graph->adjwgt, + (void **)&graph->vtxdist, + (void **)&graph->match, + (void **)&graph->cmap, + (void **)&graph->lperm, + (void **)&graph->label, + (void **)&graph->where, + (void **)&graph->home, + (void **)&graph->rinfo, + (void **)&graph->nrinfo, + (void **)&graph->sepind, + (void **)&graph->lpwgts, + (void **)&graph->gpwgts, + (void **)&graph->lnpwgts, + (void **)&graph->gnpwgts, + (void **)&graph->peind, + (void **)&graph->sendptr, + (void **)&graph->sendind, + (void **)&graph->recvptr, + (void **)&graph->recvind, + (void **)&graph->imap, + (void **)&graph->rlens, + (void **)&graph->slens, + (void **)&graph->rcand, + (void **)&graph->pexadj, + (void **)&graph->peadjncy, + (void **)&graph->peadjloc, + LTERM); + + free(graph); +} + + + +/************************************************************************* +* This function deallocates any memory stored in a graph +**************************************************************************/ +void FreeInitialGraphAndRemap(GraphType *graph, int wgtflag) +{ + int i, nedges; + idxtype *adjncy, *imap; + + nedges = graph->nedges; + adjncy = graph->adjncy; + imap = graph->imap; + + if (imap != NULL) { + for (i=0; i<nedges; i++) + adjncy[i] = imap[adjncy[i]]; /* Apply local to global transformation */ + } + + /* Free Metis's things */ + GKfree((void **)&graph->match, + (void **)&graph->cmap, + (void **)&graph->lperm, + (void **)&graph->where, + (void **)&graph->label, + (void **)&graph->rinfo, + (void **)&graph->nrinfo, + (void **)&graph->nvwgt, + (void **)&graph->lpwgts, + (void **)&graph->gpwgts, + (void **)&graph->lnpwgts, + (void **)&graph->gnpwgts, + (void **)&graph->sepind, + (void **)&graph->peind, + (void **)&graph->sendptr, + (void **)&graph->sendind, + (void **)&graph->recvptr, + (void **)&graph->recvind, + (void **)&graph->imap, + (void **)&graph->rlens, + (void **)&graph->slens, + (void **)&graph->rcand, + (void **)&graph->pexadj, + (void **)&graph->peadjncy, + (void **)&graph->peadjloc, + LTERM); + + if ((wgtflag&2) == 0) + GKfree((void **)&graph->vwgt, (void **)&graph->vsize, LTERM); + if ((wgtflag&1) == 0) + GKfree((void **)&graph->adjwgt, LTERM); + + free(graph); +} |
