Log In | Get Help   
Home My Page Projects Code Snippets Project Openings Mareframe
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files
[mareframe] Diff of /trunk/gadget/hooke.cc
[mareframe] / trunk / gadget / hooke.cc Repository:
ViewVC logotype

Diff of /trunk/gadget/hooke.cc

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 16, Tue Oct 13 11:29:01 2015 UTC revision 19, Wed May 25 16:36:33 2016 UTC
# Line 209  Line 209 
209            return -1;            return -1;
210    }    }
211    
212    omp_set_dynamic(0);  //  omp_set_dynamic(0);
213    omp_set_nested(1); //permit the nested parallelization  //  omp_set_nested(1); //permit the nested parallelization
214    while ( i < nvars) {    while ( i < nvars) {
215            if ((i + paral_tokens -1) >= nvars)            if ((i + paral_tokens -1) >= nvars)
216                    paral_tokens = nvars - i;                    paral_tokens = nvars - i;
217  #pragma omp parallel for num_threads(paral_tokens) private(k) //parallelize the parameters (numThr/2)  #pragma omp parallel for num_threads(paral_tokens*2) private(k) //parallelize the parameters (numThr)
218            for (j = 0; j < paral_tokens; ++j) {            for (j = 0; j < (paral_tokens*2); ++j) {
219                    storage[j].z = z;                    storage[j].z = z;
220                    storage[j].delta = delta;                    storage[j].delta = delta;
221                    DoubleVector v1(z);                    DoubleVector v(z);
                   DoubleVector v2(z);  
                   k = param[i+j];  
                   v1[k] +=  delta[k];  
                   v2[k] -=  delta[k];  
222    
223  #pragma omp parallel sections num_threads(2) //parrallelize the +/- delta simulation for each parameter                    if (j<paral_tokens) {
224                    {                            k = param[i+j];
225          #pragma omp section                            v[k] +=  delta[k];
                           {  
                   storage[j].ftmp = EcoSystems[j]->SimulateAndUpdate(v1);  
                           }  
         #pragma omp section  
                           {  
                   storage[j+paral_tokens].ftmp = EcoSystems[j+paral_tokens]->SimulateAndUpdate(v2);  
226                            }                            }
227                      else {
228                              k = param[i+j-paral_tokens];
229                              v[k] -=  delta[k];
230                    }                    }
231    
232                      storage[j].ftmp = EcoSystems[j]->SimulateAndUpdate(v);
233                      storage[j].z[k] = v[k];
234              }
235              for (j = 0; j < paral_tokens; ++j) {
236                      k = param[i+j];
237                    if (storage[j].ftmp < minf) {                    if (storage[j].ftmp < minf) {
238                            storage[j].iters = 1;                            storage[j].iters = 1;
239                            storage[j].z[k] = v1[k];  //                        storage[j].z[k] = v1[k];
240                    } else {                    } else {
241                            storage[j].iters = 2;                            storage[j].iters = 2;
242                            storage[j].delta[k] = 0.0 - delta[k];                            storage[j].delta[k] = 0.0 - delta[k];
243                            if (storage[j+paral_tokens].ftmp < minf) {                            if (storage[j+paral_tokens].ftmp < minf) {
244                                    storage[j].ftmp = storage[j+paral_tokens].ftmp;                                    storage[j].ftmp = storage[j+paral_tokens].ftmp;
245                                    storage[j].z[k] = v2[k];                                    storage[j].z[k] = storage[j+paral_tokens].z[k];;
246                            }                            }
247                    }                    }
248            }            }
# Line 549  Line 547 
547            return -1;            return -1;
548    }    }
549    
550    omp_set_dynamic(0);  //  omp_set_dynamic(0);
551    omp_set_nested(1); //permit the nested parallelization  //  omp_set_nested(1); //permit the nested parallelization
552    for (ii=0; ii< paral_tokens; ii++) {    for (ii=0; ii< paral_tokens; ii++) {
553            i = 0;            i = 0;
554            while ( i < nvars) {            while ( i < nvars) {
555                    if ((i + paral_tokens -1) >= nvars)                    if ((i + paral_tokens -1) >= nvars)
556                            paral_tokens = nvars - i;                            paral_tokens = nvars - i;
557          #pragma omp parallel for num_threads(paral_tokens) private(k)          #pragma omp parallel for num_threads(paral_tokens*2) private(k)
558                    for (j = 0; j < paral_tokens; ++j) {                    for (j = 0; j < (paral_tokens*2); ++j) {
559                            storage[j].z = z;                            storage[j].z = z;
560                            storage[j].delta = delta;                            storage[j].delta = delta;
561                            DoubleVector v1(z);                            DoubleVector v(z);
                           DoubleVector v2(z);  
                           k = param[i+j];  
                           v1[k] +=  delta[k];  
                           v2[k] -=  delta[k];  
562    
563  #pragma omp parallel sections num_threads(2)                            if (j<paral_tokens) {
564                            {                                    k = param[i+j];
565            #pragma omp section                                    v[k] +=  delta[k];
566                                    {                            }
567                            storage[j].ftmp = EcoSystems[j]->SimulateAndUpdate(v1);                            else {
568                                    }                                    k = param[i+j-paral_tokens];
569            #pragma omp section                                    v[k] -=  delta[k];
                                   {  
                           storage[j+paral_tokens].ftmp = EcoSystems[j+paral_tokens]->SimulateAndUpdate(v2);  
570                                    }                                    }
571    
572                              storage[j].ftmp = EcoSystems[j]->SimulateAndUpdate(v);
573                              storage[j].z[k] = v[k];
574                            }                            }
575    
576                      for (j = 0; j < paral_tokens; ++j) {
577                              k = param[i+j];
578                            if (storage[j].ftmp < minf) {                            if (storage[j].ftmp < minf) {
579                                    storage[j].iters = 1;                                    storage[j].iters = 1;
580                                    storage[j].z[k] = v1[k];  //                                storage[j].z[k] = v1[k];
581                            } else {                            } else {
582                                    storage[j].iters = 2;                                    storage[j].iters = 2;
583                                    storage[j].delta[k] = 0.0 - delta[k];                                    storage[j].delta[k] = 0.0 - delta[k];
584                                    if (storage[j+paral_tokens].ftmp < minf) {                                    if (storage[j+paral_tokens].ftmp < minf) {
585                                            storage[j].ftmp = storage[j+paral_tokens].ftmp;                                            storage[j].ftmp = storage[j+paral_tokens].ftmp;
586                                            storage[j].z[k] = v2[k];                                            storage[j].z[k] = storage[j+paral_tokens].z[k];
587                                    }                                    }
588                                    else iters += 2;                                    else iters += 2;
589                            }                            }
# Line 605  Line 603 
603    
604                    i += paral_tokens;                    i += paral_tokens;
605            }            }
606              paral_tokens = numThr / 2;
607          }          }
608    
609    delete[] storage;    delete[] storage;

Legend:
Removed from v.16  
changed lines
  Added in v.19

root@forge.cesga.es
ViewVC Help
Powered by ViewVC 1.0.0  

Powered By FusionForge