Changeset 14237


Ignore:
Timestamp:
01/11/13 14:16:09 (12 years ago)
Author:
Mathieu Morlighem
Message:

NEW: multithreading of distances output

Location:
issm/trunk-jpl/src/c/modules/Krigingx
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/modules/Krigingx/Krigingx.cpp

    r14226 r14237  
    5959        }
    6060        else if(strcmp(output,"distance")==0){
    61                 observations->Distances(predictions,x_interp,y_interp,n_interp,radius);
     61                /*initialize thread parameters: */
     62                gate.n_interp     = n_interp;
     63                gate.x_interp     = x_interp;
     64                gate.y_interp     = y_interp;
     65                gate.radius       = radius;
     66                gate.mindata      = mindata;
     67                gate.maxdata      = maxdata;
     68                gate.variogram    = variogram;
     69                gate.observations = observations;
     70                gate.predictions  = predictions;
     71                gate.error        = error;
     72                gate.numdone      = xNewZeroInit<int>(num);
     73
     74                /*launch the thread manager with Krigingxt as a core: */
     75                LaunchThread(Distancest,(void*)&gate,num);
     76                xDelete<int>(gate.numdone);
    6277        }
    6378        else if(strcmp(output,"delaunay")==0){
     
    363378        return NULL;
    364379}/*}}}*/
     380/*FUNCTION Distancest{{{*/
     381void* Distancest(void* vpthread_handle){
     382
     383        /*gate variables :*/
     384        KrigingxThreadStruct *gate        = NULL;
     385        pthread_handle       *handle      = NULL;
     386        int my_thread;
     387        int num_threads;
     388        int i0,i1;
     389
     390        /*recover handle and gate: */
     391        handle      = (pthread_handle*)vpthread_handle;
     392        gate        = (KrigingxThreadStruct*)handle->gate;
     393        my_thread   = handle->id;
     394        num_threads = handle->num;
     395
     396        /*recover parameters :*/
     397        int           n_interp     = gate->n_interp;
     398        double       *x_interp     = gate->x_interp;
     399        double       *y_interp     = gate->y_interp;
     400        double        radius       = gate->radius;
     401        int           mindata      = gate->mindata;
     402        int           maxdata      = gate->maxdata;
     403        Variogram    *variogram    = gate->variogram;
     404        Observations *observations = gate->observations;
     405        double       *predictions  = gate->predictions;
     406        double       *error        = gate->error;
     407        int          *numdone      = gate->numdone;
     408
     409        /*partition loop across threads: */
     410        PartitionRange(&i0,&i1,n_interp,num_threads,my_thread);
     411        observations->Distances(&predictions[i0],&x_interp[i0],&y_interp[i0],i1-i0,radius);
     412        return NULL;
     413}/*}}}*/
    365414
    366415void ProcessVariogram(Variogram **pvariogram,Options* options){/*{{{*/
  • issm/trunk-jpl/src/c/modules/Krigingx/Krigingx.h

    r14051 r14237  
    3636void* idwt(void*);
    3737void* v4t(void*);
     38void* Distancest(void*);
    3839#endif /* _KRIGINGX_H */
Note: See TracChangeset for help on using the changeset viewer.