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/src/FacePair2d.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/src/FacePair2d.c')
| -rw-r--r-- | benchmarks/CUDA/DG/src/FacePair2d.c | 154 |
1 files changed, 0 insertions, 154 deletions
diff --git a/benchmarks/CUDA/DG/src/FacePair2d.c b/benchmarks/CUDA/DG/src/FacePair2d.c deleted file mode 100644 index 92e47f5..0000000 --- a/benchmarks/CUDA/DG/src/FacePair2d.c +++ /dev/null @@ -1,154 +0,0 @@ -#include "mpi.h" -#include "fem.h" - -typedef struct foob { - int p1, k1, f1, p2, k2, f2, va, vb, g; -}face; - -int compare_pairs(const void *obj1, const void *obj2){ - - face *e1 = (face*) obj1; - face *e2 = (face*) obj2; - - int a1 = e1->va, b1 = e1->vb; - int a2 = e2->va, b2 = e2->vb; - - int va1, vb1, va2, vb2; - - va1 = min(a1, b1); - vb1 = max(a1, b1); - - va2 = min(a2, b2); - vb2 = max(a2, b2); - - if(vb1<vb2) - return -1; - else if(vb1>vb2) - return 1; - else if(va1<va2) - return -1; - else if(va1>va2) - return 1; - - return 0; -} - -int pairprocget(const void *obj1){ - face *e1 = (face*) obj1; - return (e1->p1); -} - - -int pairnumget(const void *obj1){ - face *e1 = (face*) obj1; - return (e1->g); -} - -void pairnumset(const void *obj1, int g){ - face *e1 = (face*) obj1; - e1->g = g; -} - -void pairmarry(const void *obj1, const void *obj2){ - - face *e1 = (face*) obj1; - face *e2 = (face*) obj2; - e1->p2 = e2->p1; e1->k2 = e2->k1; e1->f2 = e2->f1; - e2->p2 = e1->p1; e2->k2 = e1->k1; e2->f2 = e1->f1; -} - -void FacePair2d(Mesh *mesh, int *maxNv){ - - int procid = mesh->procid; - int nprocs = mesh->nprocs; - - int Klocal = mesh->K; - int Nfaces = mesh->Nfaces; - int Nverts = mesh->Nverts; - - int **EToV = mesh->EToV; - - const int vnum[3][2] = { {0,1}, {1,2}, {2,0} }; - - int n, k, e, sk, v; - - face *myfaces = (face*) calloc(Klocal*Nfaces, sizeof(face)); - - /* find maximum local vertex number */ - int localmaxgnum = 0; - for(k=0;k<Klocal;++k) - for(v=0;v<Nverts;++v) - localmaxgnum = max(localmaxgnum, EToV[k][v]); - ++localmaxgnum; - - int maxgnum; - MPI_Allreduce(&localmaxgnum, &maxgnum, 1, MPI_INT, MPI_MAX, MPI_COMM_WORLD); - *maxNv = maxgnum; - - sk = 0; - for(k=0;k<Klocal;++k){ - for(e=0;e<Nfaces;++e){ - int n1 = EToV[k][vnum[e][0]]; - int n2 = EToV[k][vnum[e][1]]; - - myfaces[sk].p1 = procid; myfaces[sk].k1 = k; myfaces[sk].f1 = e; - myfaces[sk].p2 = procid; myfaces[sk].k2 = k; myfaces[sk].f2 = e; - - myfaces[sk].va = max(n1,n2); - myfaces[sk].vb = min(n1,n2); - myfaces[sk].g = max(n1,n2); /* marker for sorting into bins */ - ++sk; - } - } - - ParallelPairs(myfaces, Klocal*Nfaces, sizeof(face), - pairnumget, pairnumset, pairprocget, - pairmarry, compare_pairs); - - mesh->Npar = BuildIntVector(nprocs); - - mesh->EToE = BuildIntMatrix(Klocal, Nfaces); - mesh->EToF = BuildIntMatrix(Klocal, Nfaces); - mesh->EToP = BuildIntMatrix(Klocal, Nfaces); - - int id, k1, k2, f1, f2, p1, p2; - sk = 0; - - for(n=0;n<Klocal*Nfaces;++n){ - - k1 = myfaces[n].k1; f1 = myfaces[n].f1; p1 = myfaces[n].p1; - k2 = myfaces[n].k2; f2 = myfaces[n].f2; p2 = myfaces[n].p2; - - if(p1!=procid) - fprintf(stderr, "WARNING WRONG proc\n"); - - mesh->EToE[k1][f1] = k2; - mesh->EToF[k1][f1] = f2; - mesh->EToP[k1][f1] = p2; - - if(p1!=p2){ - /* increment number of links */ - ++mesh->Npar[p2]; - } - } - - mesh->parK = (int**) calloc(nprocs, sizeof(int*)); - mesh->parF = (int**) calloc(nprocs, sizeof(int*)); - for(p2=0;p2<nprocs;++p2){ - mesh->parK[p2] = BuildIntVector(mesh->Npar[p2]); - mesh->parF[p2] = BuildIntVector(mesh->Npar[p2]); - mesh->Npar[p2] = 0; - for(n=0;n<Klocal*Nfaces;++n){ - if(myfaces[n].p2==p2 && p2!=procid){ - int k1 = myfaces[n].k1, f1 = myfaces[n].f1; - int k2 = myfaces[n].k2, f2 = myfaces[n].f2; - mesh->parK[p2][mesh->Npar[p2] ] = k1; - mesh->parF[p2][mesh->Npar[p2]++] = f1; - } - } - } - - free(myfaces); -} - - |
