|
From: Gordon K. <kin...@us...> - 2004-03-23 01:29:02
|
Update of /cvsroot/teem/teem/src/coil In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv17006 Modified Files: coreCoil.c methodsCoil.c realmethods.c Log Message: we now have a revolutionary new way to do isotropic blurring! Index: realmethods.c =================================================================== RCS file: /cvsroot/teem/teem/src/coil/realmethods.c,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** realmethods.c 22 Mar 2004 21:40:11 -0000 1.1 --- realmethods.c 23 Mar 2004 01:18:40 -0000 1.2 *************** *** 34,38 **** "isotropic", coilMethodTypeIsotropic, ! 0 }; const coilMethod* --- 34,38 ---- "isotropic", coilMethodTypeIsotropic, ! 1 }; const coilMethod* Index: coreCoil.c =================================================================== RCS file: /cvsroot/teem/teem/src/coil/coreCoil.c,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** coreCoil.c 22 Mar 2004 21:40:11 -0000 1.1 --- coreCoil.c 23 Mar 2004 01:18:40 -0000 1.2 *************** *** 35,46 **** diam = 1 + 2*radius; for (zni=0; zni<diam; zni++) { ! zvi = AIR_CLAMP(0, zni-radius+z0, sizeZ-1); for (yni=0; yni<diam; yni++) { ! yvi = AIR_CLAMP(0, yni-radius+y0, sizeY-1); for (xni=0; xni<diam; xni++) { ! xvi = AIR_CLAMP(0, xni-radius+x0, sizeX-1); for (vi=0; vi<valLen; vi++) { iv3[xni + diam*(yni + diam*(zni + diam*vi))] = ! here[vi + valLen*(xvi + sizeX*(yvi + sizeY*zvi))]; } } --- 35,46 ---- diam = 1 + 2*radius; for (zni=0; zni<diam; zni++) { ! zvi = AIR_CLAMP(0, zni-radius+z0, sizeZ-1) - z0; for (yni=0; yni<diam; yni++) { ! yvi = AIR_CLAMP(0, yni-radius+y0, sizeY-1) - y0; for (xni=0; xni<diam; xni++) { ! xvi = AIR_CLAMP(0, xni-radius+x0, sizeX-1) - x0; for (vi=0; vi<valLen; vi++) { iv3[xni + diam*(yni + diam*(zni + diam*vi))] = ! here[vi + valLen*(0 + 2*(xvi + sizeX*(yvi + sizeY*zvi)))]; } } *************** *** 51,57 **** void ! _coilProcess(coilTask *task, int filter) { int xi, yi, zi, sizeX, sizeY, sizeZ, valLen, radius; coil_t *here; sizeX = task->cctx->size[0]; --- 51,60 ---- void ! _coilProcess(coilTask *task, int doFilter) { int xi, yi, zi, sizeX, sizeY, sizeZ, valLen, radius; coil_t *here; + void (*filter)(coil_t *delta, coil_t *iv3, + double spacing[3], + double parm[COIL_PARMS_NUM]); sizeX = task->cctx->size[0]; *************** *** 60,72 **** valLen = task->cctx->kind->valLen; radius = task->cctx->radius; here = (coil_t*)(task->cctx->nvol->data); here += 2*valLen*sizeX*sizeY*task->startZ; ! if (filter) { for (zi=task->startZ; zi<=task->endZ; zi++) { for (yi=0; yi<sizeY; yi++) { for (xi=0; xi<sizeX; xi++) { ! _coilIv3Fill(task->iv3, here, radius, valLen, xi, yi, zi, sizeX, sizeY, sizeZ); ! /* filter */ here += 2*valLen; } --- 63,76 ---- valLen = task->cctx->kind->valLen; radius = task->cctx->radius; + filter = task->cctx->kind->filter[task->cctx->method->type]; here = (coil_t*)(task->cctx->nvol->data); here += 2*valLen*sizeX*sizeY*task->startZ; ! if (doFilter) { for (zi=task->startZ; zi<=task->endZ; zi++) { for (yi=0; yi<sizeY; yi++) { for (xi=0; xi<sizeX; xi++) { ! _coilIv3Fill(task->iv3, here + 0*valLen, radius, valLen, xi, yi, zi, sizeX, sizeY, sizeZ); ! filter(here + 1*valLen, task->iv3, task->cctx->spacing, task->cctx->parm); here += 2*valLen; } *************** *** 186,192 **** cctx->finished = AIR_FALSE; ! cctx->finishBarrier = airThreadBarrierNew(cctx->numThreads); ! cctx->filterBarrier = airThreadBarrierNew(cctx->numThreads); ! cctx->updateBarrier = airThreadBarrierNew(cctx->numThreads); /* start threads 1 and up running (they won't get far) */ --- 190,198 ---- cctx->finished = AIR_FALSE; ! if (cctx->numThreads > 1) { ! cctx->finishBarrier = airThreadBarrierNew(cctx->numThreads); ! cctx->filterBarrier = airThreadBarrierNew(cctx->numThreads); ! cctx->updateBarrier = airThreadBarrierNew(cctx->numThreads); ! } /* start threads 1 and up running (they won't get far) */ *************** *** 258,262 **** } cctx->finished = AIR_FALSE; ! airThreadBarrierWait(cctx->finishBarrier); /* first: filter */ --- 264,270 ---- } cctx->finished = AIR_FALSE; ! if (cctx->numThreads > 1) { ! airThreadBarrierWait(cctx->finishBarrier); ! } /* first: filter */ *************** *** 265,269 **** } _coilProcess(cctx->task[0], AIR_TRUE); ! airThreadBarrierWait(cctx->filterBarrier); /* second: update */ --- 273,279 ---- } _coilProcess(cctx->task[0], AIR_TRUE); ! if (cctx->numThreads > 1) { ! airThreadBarrierWait(cctx->filterBarrier); ! } /* second: update */ *************** *** 272,276 **** } _coilProcess(cctx->task[0], AIR_FALSE); ! airThreadBarrierWait(cctx->updateBarrier); } return 0; --- 282,288 ---- } _coilProcess(cctx->task[0], AIR_FALSE); ! if (cctx->numThreads > 1) { ! airThreadBarrierWait(cctx->updateBarrier); ! } } return 0; *************** *** 291,300 **** } cctx->finished = AIR_TRUE; ! airThreadBarrierWait(cctx->finishBarrier); for (tidx=1; tidx<cctx->numThreads; tidx++) { airThreadJoin(cctx->task[tidx]->thread, &(cctx->task[tidx]->returnPtr)); cctx->task[tidx]->thread = airThreadNix(cctx->task[tidx]->thread); } cctx->task[0]->thread = airThreadNix(cctx->task[0]->thread); return 0; --- 303,317 ---- } cctx->finished = AIR_TRUE; ! if (cctx->numThreads > 1) { ! airThreadBarrierWait(cctx->finishBarrier); ! } for (tidx=1; tidx<cctx->numThreads; tidx++) { airThreadJoin(cctx->task[tidx]->thread, &(cctx->task[tidx]->returnPtr)); cctx->task[tidx]->thread = airThreadNix(cctx->task[tidx]->thread); + cctx->task[tidx] = _coilTaskNix(cctx->task[tidx]); } cctx->task[0]->thread = airThreadNix(cctx->task[0]->thread); + cctx->task[0] = _coilTaskNix(cctx->task[0]); + cctx->task = airFree(cctx->task); return 0; Index: methodsCoil.c =================================================================== RCS file: /cvsroot/teem/teem/src/coil/methodsCoil.c,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** methodsCoil.c 22 Mar 2004 21:40:11 -0000 1.1 --- methodsCoil.c 23 Mar 2004 01:18:40 -0000 1.2 *************** *** 74,77 **** --- 74,78 ---- airArray *mop; + cctx->verbose = verbose; if (!( cctx && nin && kind && method )) { sprintf(err, "%s: got NULL pointer", me); *************** *** 147,150 **** --- 148,155 ---- } ELL_3V_SET(cctx->spacing, xsp, ysp, zsp); + if (cctx->verbose) { + fprintf(stderr, "%s: spacings: %g %g %g\n", me, + cctx->spacing[0], cctx->spacing[1], cctx->spacing[2]); + } /* allocate nvol */ *************** *** 166,170 **** cctx->radius = radius; cctx->numThreads = numThreads; - cctx->verbose = verbose; airMopOkay(mop); --- 171,174 ---- |