Changeset 20637


Ignore:
Timestamp:
05/23/16 11:36:11 (9 years ago)
Author:
Mathieu Morlighem
Message:

CHG: profilers are now 3 static arrays rather than parameters

Location:
issm/trunk-jpl/src/c/classes
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/classes/Dakota/IssmParallelDirectApplicInterface.cpp

    r19652 r20637  
    2424                if(world_rank!=0){
    2525                        femmodel_init= new FemModel(argc,argv,evaluation_comm);
    26                         femmodel_init->profiler->Tag(StartCore);
     26                        femmodel_init->profiler->Tag(STARTCORE);
    2727                }
    2828
     
    3737
    3838                        /*Wrap up: */
    39                         femmodel_init->profiler->Tag(FinishCore);
     39                        femmodel_init->profiler->Tag(FINISHCORE);
    4040                        femmodel_init->CleanUp(); //only close file pointers on rank 0 of slave 1!
    4141
  • issm/trunk-jpl/src/c/classes/FemModel.cpp

    r20635 r20637  
    6868        /*Start profiler: */
    6969        this->profiler=new Profiler();
    70         profiler->Tag(Start);
     70        profiler->Tag(START);
    7171
    7272        /*From command line arguments, retrieve different filenames needed to create the FemModel: */
     
    7474
    7575        /*Create femmodel from input files: */
    76         profiler->Tag(StartInit);
     76        profiler->Tag(STARTINIT);
    7777        this->InitFromFiles(rootpath,binfilename,outbinfilename,petscfilename,lockfilename,restartfilename, solution_type,trace,NULL);
    78         profiler->Tag(FinishInit);
     78        profiler->Tag(FINISHINIT);
    7979
    8080        /*Save communicator in the parameters dataset: */
     
    249249
    250250        /*Before we delete the profiler, report statistics for this run: */
    251         profiler->Tag(Finish);  //final tagging
     251        profiler->Tag(FINISH);  //final tagging
    252252        _printf0_("\n");
    253         _printf0_("   "<<setw(40)<<left<<"FemModel initialization elapsed time:"<<profiler->DeltaTime(StartInit,FinishInit) << "\n");
    254         _printf0_("   "<<setw(40)<<left<<"Core solution elapsed time:"<<profiler->DeltaTime(StartCore,FinishCore) << "\n");
     253        _printf0_("   "<<setw(40)<<left<<"FemModel initialization elapsed time:"<<profiler->DeltaTime(STARTINIT,FINISHINIT) << "\n");
     254        _printf0_("   "<<setw(40)<<left<<"Core solution elapsed time:"<<profiler->DeltaTime(STARTCORE,FINISHCORE) << "\n");
    255255        _printf0_("\n");
    256256        _printf0_("   Total elapsed time: "
    257                                 <<profiler->DeltaTimeModHour(Start,Finish)<<" hrs "
    258                                 <<profiler->DeltaTimeModMin(Start,Finish)<<" min "
    259                                 <<profiler->DeltaTimeModSec(Start,Finish)<<" sec"
     257                                <<profiler->DeltaTimeModHour(START,FINISH)<<" hrs "
     258                                <<profiler->DeltaTimeModMin(START,FINISH)<<" min "
     259                                <<profiler->DeltaTimeModSec(START,FINISH)<<" sec"
    260260                                );
    261261        _printf0_("\n");
     
    332332
    333333        /*run solution core: */
    334         profiler->Tag(StartCore);   
     334        profiler->Tag(STARTCORE);   
    335335        solutioncore(this);
    336         profiler->Tag(FinishCore);
     336        profiler->Tag(FINISHCORE);
    337337
    338338        /*run AD core if needed: */
    339         profiler->Tag(StartAdCore);
     339        profiler->Tag(STARTADCORE);
    340340        ad_core(this);     
    341         profiler->Tag(FinishAdCore);
     341        profiler->Tag(FINISHADCORE);
    342342
    343343        /*some profiling results for the core: */
     
    345345        if(profiling){
    346346
    347                 solution_time=profiler->DeltaTime(StartCore,FinishCore);
    348                 solution_flops=profiler->DeltaFlops(StartCore,FinishCore);
    349                 solution_memory=profiler->Memory(FinishCore);
     347                solution_time=profiler->DeltaTime(STARTCORE,FINISHCORE);
     348                solution_flops=profiler->DeltaFlops(STARTCORE,FINISHCORE);
     349                solution_memory=profiler->Memory(FINISHCORE);
    350350
    351351                _printf0_("Core solution elapsed time    : " << solution_time   << " Seconds\n");
     
    359359
    360360                #ifdef _HAVE_ADOLC_
    361                 solution_time=profiler->DeltaTime(StartAdCore,FinishAdCore);
    362                 solution_flops=profiler->DeltaFlops(StartAdCore,FinishAdCore);
    363                 solution_memory=profiler->Memory(FinishAdCore);
     361                solution_time=profiler->DeltaTime(STARTADCORE,FINISHADCORE);
     362                solution_flops=profiler->DeltaFlops(STARTADCORE,FINISHADCORE);
     363                solution_memory=profiler->Memory(FINISHADCORE);
    364364
    365365                _printf0_("AD Solution elapsed time    : " << solution_time   << " Seconds\n");
     
    25912591        /*Start profiler: */
    25922592        this->profiler=new Profiler();
    2593         profiler->Tag(Start);
     2593        profiler->Tag(START);
    25942594
    25952595        /*From command line arguments, retrieve different filenames needed to create the FemModel: */
     
    25972597       
    25982598        /*Create femmodel from input files: */
    2599         profiler->Tag(StartInit);
     2599        profiler->Tag(STARTINIT);
    26002600        this->InitFromBuffers((char*)buffer,buffersize,toolkits, solution_type,trace,NULL);
    2601         profiler->Tag(FinishInit);
     2601        profiler->Tag(FINISHINIT);
    26022602       
    26032603        /*Save communicator in the parameters dataset: */
     
    26872687       
    26882688        /*Before we delete the profiler, report statistics for this run: */
    2689         profiler->Tag(Finish);  //final tagging
     2689        profiler->Tag(FINISH);  //final tagging
    26902690        _printf0_("\n");
    2691         _printf0_("   "<<setw(40)<<left<<"FemModel initialization elapsed time:"<<profiler->DeltaTime(StartInit,FinishInit) << "\n");
    2692         _printf0_("   "<<setw(40)<<left<<"Core solution elapsed time:"<<profiler->DeltaTime(StartCore,FinishCore) << "\n");
     2691        _printf0_("   "<<setw(40)<<left<<"FemModel initialization elapsed time:"<<profiler->DeltaTime(STARTINIT,FINISHINIT) << "\n");
     2692        _printf0_("   "<<setw(40)<<left<<"Core solution elapsed time:"<<profiler->DeltaTime(STARTCORE,FINISHCORE) << "\n");
    26932693        _printf0_("\n");
    26942694        _printf0_("   Total elapsed time: "
    2695                                 <<profiler->DeltaTimeModHour(Start,Finish)<<" hrs "
    2696                                 <<profiler->DeltaTimeModMin(Start,Finish)<<" min "
    2697                                 <<profiler->DeltaTimeModSec(Start,Finish)<<" sec"
     2695                                <<profiler->DeltaTimeModHour(START,FINISH)<<" hrs "
     2696                                <<profiler->DeltaTimeModMin(START,FINISH)<<" min "
     2697                                <<profiler->DeltaTimeModSec(START,FINISH)<<" sec"
    26982698                                );
    26992699        _printf0_("\n");
  • issm/trunk-jpl/src/c/classes/Profiler.cpp

    r19239 r20637  
    1111
    1212#include "./Profiler.h"
    13 #include "./Params/Parameters.h"
    1413#include "./Params/DoubleParam.h"
    1514#include "../toolkits/toolkits.h"
     
    1817/*Profiler constructors and destructors:*/
    1918Profiler::Profiler(){/*{{{*/
    20                  this->time=new Parameters();
    21                  this->flops=new Parameters();
    22                  this->memory=new Parameters();
    23 }
    24 /*}}}*/
     19        for(int i=0;i<MAXIMUMSIZE;i++){
     20                this->time[i]  =NAN;
     21                this->flops[i] =NAN;
     22                this->memory[i]=NAN;
     23        }
     24} /*}}}*/
    2525Profiler::~Profiler(){/*{{{*/
    26         delete time;
    27         delete flops;
    28         delete memory;
    29 }
    30 /*}}}*/
     26        /*Nothing to delete, everything is statically allocated*/
     27} /*}}}*/
    3128Object* Profiler::copy(){/*{{{*/
    3229        /*First do simple copy: */
    3330        Profiler* output=new Profiler();
    34         delete output->time;
    35         delete output->flops;
    36         delete output->memory;
    3731
    38         /*Now for deep copy: */
    39         output->time=(Parameters*)this->time->Copy();
    40         output->flops=(Parameters*)this->flops->Copy();
    41         output->memory=(Parameters*)this->memory->Copy();
     32        for(int i=0;i<MAXIMUMSIZE;i++){
     33                output->time[i]  =this->time[i];
     34                output->flops[i] =this->flops[i];
     35                output->memory[i]=this->memory[i];
     36        }
    4237
    4338        return (Object*)output;
     
    5045        _printf_("Profiler:\n");
    5146        _printf_("   time tags: \n");
    52         this->time->Echo();
     47        _error_("not implemented yet");
    5348
    5449}
     
    5651void Profiler::DeepEcho(void){/*{{{*/
    5752
    58         _printf_("Profiler:\n");
    59         _printf_("   time tags: \n");
    60         this->time->DeepEcho();
     53        this->Echo();
    6154
    6255}
     
    7265void Profiler::Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){ /*{{{*/
    7366
     67        IssmDouble* pointer = NULL;
     68
    7469        MARSHALLING_ENUM(ProfilerEnum);
     70        pointer = &this->time[0];
     71        MARSHALLING_DYNAMIC(pointer,IssmDouble,MAXIMUMSIZE);
     72        pointer = &this->flops[0];
     73        MARSHALLING_DYNAMIC(pointer,IssmDouble,MAXIMUMSIZE);
     74        pointer = &this->memory[0];
     75        MARSHALLING_DYNAMIC(pointer,IssmDouble,MAXIMUMSIZE);
    7576
    76         time->Marshall(pmarshalled_data,pmarshalled_data_size,marshall_direction);
    77         flops->Marshall(pmarshalled_data,pmarshalled_data_size,marshall_direction);
    78         memory->Marshall(pmarshalled_data,pmarshalled_data_size,marshall_direction);
    79 
    80 }
    81 /*}}}*/
     77} /*}}}*/
    8278
    8379/*Profiler routines:*/
     
    110106
    111107        /*Plug into this->time: */
    112         this->time->AddObject(new DoubleParam(tagenum,t));
    113         this->flops->AddObject(new DoubleParam(tagenum,f));
    114         this->memory->AddObject(new DoubleParam(tagenum,m));
     108        _assert_(tagenum>=0);
     109        _assert_(tagenum<MAXIMUMSIZE);
     110        if(!xIsNan<IssmDouble>(this->time[tagenum])) _error_("Tag already exists");
     111        this->time[tagenum]  = t;
     112        if(!xIsNan<IssmDouble>(this->flops[tagenum])) _error_("Tag already exists");
     113        this->flops[tagenum] = f;
     114        if(!xIsNan<IssmDouble>(this->memory[tagenum])) _error_("Tag already exists");
     115        this->memory[tagenum]= m;
    115116
    116117}
     
    118119IssmDouble  Profiler::DeltaTime(int inittag, int finaltag){/*{{{*/
    119120
    120         IssmDouble init, final;
    121         this->time->FindParam(&init,inittag);
    122         this->time->FindParam(&final,finaltag);
     121        /*Get initial time*/
     122        _assert_(inittag>=0);
     123        _assert_(inittag<MAXIMUMSIZE);
     124        if(xIsNan<IssmDouble>(this->time[inittag])) _error_("Tag not set");
     125        IssmDouble init = this->time[inittag];
     126
     127        /*Get final time*/
     128        _assert_(finaltag>=0);
     129        _assert_(finaltag<MAXIMUMSIZE);
     130        if(xIsNan<IssmDouble>(this->time[finaltag])) _error_("Tag not set");
     131        IssmDouble final = this->time[finaltag];
    123132
    124133        #ifdef _HAVE_MPI_
     
    131140IssmDouble  Profiler::DeltaFlops(int inittag, int finaltag){/*{{{*/
    132141
    133         IssmDouble init, final;
    134         this->flops->FindParam(&init,inittag);
    135         this->flops->FindParam(&final,finaltag);
     142        /*Get initial flops*/
     143        _assert_(inittag>=0);
     144        _assert_(inittag<MAXIMUMSIZE);
     145        if(xIsNan<IssmDouble>(this->flops[inittag])) _error_("Tag not set");
     146        IssmDouble init = this->flops[inittag];
     147
     148        /*Get final flops*/
     149        _assert_(finaltag>=0);
     150        _assert_(finaltag<MAXIMUMSIZE);
     151        if(xIsNan<IssmDouble>(this->flops[finaltag])) _error_("Tag not set");
     152        IssmDouble final = this->flops[finaltag];
    136153
    137154        return final-init;
     
    140157int Profiler::DeltaTimeModHour(int inittag, int finishtag){/*{{{*/
    141158
    142         IssmDouble init, finish;
    143         this->time->FindParam(&init,inittag);
    144         this->time->FindParam(&finish,finishtag);
    145 
    146         #ifdef _HAVE_MPI_
    147         return int((reCast<int,IssmDouble>(finish-init))/3600);
    148         #else
    149         return int((reCast<int,IssmDouble>(finish-init))/CLOCKS_PER_SEC/3600);
    150         #endif
     159        IssmDouble delta = this->DeltaTime(inittag,finishtag);
     160        return int((reCast<int,IssmDouble>(delta))/3600);
    151161
    152162}
     
    154164int Profiler::DeltaTimeModMin(int inittag, int finishtag){/*{{{*/
    155165
    156         IssmDouble init, finish;
    157         this->time->FindParam(&init,inittag);
    158         this->time->FindParam(&finish,finishtag);
    159 
    160         #ifdef _HAVE_MPI_
    161         return int(int(reCast<int,IssmDouble>(finish-init))%3600/60);
    162         #else
    163         return int(int(reCast<int,IssmDouble>(finish-init))/CLOCKS_PER_SEC%3600/60);
    164         #endif
     166        IssmDouble delta = this->DeltaTime(inittag,finishtag);
     167        return int(int(reCast<int,IssmDouble>(delta))%3600/60);
    165168}
    166169/*}}}*/
    167170int Profiler::DeltaTimeModSec(int inittag, int finishtag){/*{{{*/
    168171
    169         IssmDouble init, finish;
    170         this->time->FindParam(&init,inittag);
    171         this->time->FindParam(&finish,finishtag);
    172 
    173         #ifdef _HAVE_MPI_
    174         return int(reCast<int,IssmDouble>(finish-init))%60;
    175         #else
    176         return int(reCast<int,IssmDouble>(finish-init))/CLOCKS_PER_SEC%60;
    177         #endif
     172        IssmDouble delta = this->DeltaTime(inittag,finishtag);
     173        return int(reCast<int,IssmDouble>(delta)%60);
    178174}
    179175/*}}}*/
    180176IssmDouble  Profiler::Memory(int tag){/*{{{*/
    181177
    182         IssmDouble m;
    183         this->memory->FindParam(&m,tag);
    184 
    185         return m;
     178        /*Get initial flops*/
     179        _assert_(tag>=0);
     180        _assert_(tag<MAXIMUMSIZE);
     181        if(xIsNan<IssmDouble>(this->flops[tag])) _error_("Tag not set");
     182        return this->memory[tag];
    186183}
    187184/*}}}*/
  • issm/trunk-jpl/src/c/classes/Profiler.h

    r20635 r20637  
    1212/*}}}*/
    1313
    14 class DataSet;
    15 class Parameters;
     14class DoubleParam;
    1615
    17 enum ProfilerEnums {
    18         Start=ParametersSTARTEnum+1,//FIXME
    19         StartInit,
    20         FinishInit,
    21         StartCore,
    22         FinishCore,
    23         StartAdCore,
    24         FinishAdCore,
    25         Finish
    26 };
     16#define START 0
     17#define STARTINIT 1
     18#define FINISHINIT 2
     19#define STARTCORE 3
     20#define FINISHCORE 4
     21#define STARTADCORE 5
     22#define FINISHADCORE 6
     23#define FINISH 7
     24#define MAXIMUMSIZE 8
    2725
    2826class Profiler: public Object{
    2927
    3028        public:
    31                 Parameters*  time;
    32                 Parameters*  flops;
    33                 Parameters*  memory;
     29                IssmDouble time[MAXIMUMSIZE];
     30                IssmDouble flops[MAXIMUMSIZE];
     31                IssmDouble memory[MAXIMUMSIZE];
    3432
    3533                /*Profiler constructors, destructors {{{*/
Note: See TracChangeset for help on using the changeset viewer.