Changeset 20637
- Timestamp:
- 05/23/16 11:36:11 (9 years ago)
- 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 24 24 if(world_rank!=0){ 25 25 femmodel_init= new FemModel(argc,argv,evaluation_comm); 26 femmodel_init->profiler->Tag(S tartCore);26 femmodel_init->profiler->Tag(STARTCORE); 27 27 } 28 28 … … 37 37 38 38 /*Wrap up: */ 39 femmodel_init->profiler->Tag(F inishCore);39 femmodel_init->profiler->Tag(FINISHCORE); 40 40 femmodel_init->CleanUp(); //only close file pointers on rank 0 of slave 1! 41 41 -
issm/trunk-jpl/src/c/classes/FemModel.cpp
r20635 r20637 68 68 /*Start profiler: */ 69 69 this->profiler=new Profiler(); 70 profiler->Tag(S tart);70 profiler->Tag(START); 71 71 72 72 /*From command line arguments, retrieve different filenames needed to create the FemModel: */ … … 74 74 75 75 /*Create femmodel from input files: */ 76 profiler->Tag(S tartInit);76 profiler->Tag(STARTINIT); 77 77 this->InitFromFiles(rootpath,binfilename,outbinfilename,petscfilename,lockfilename,restartfilename, solution_type,trace,NULL); 78 profiler->Tag(F inishInit);78 profiler->Tag(FINISHINIT); 79 79 80 80 /*Save communicator in the parameters dataset: */ … … 249 249 250 250 /*Before we delete the profiler, report statistics for this run: */ 251 profiler->Tag(F inish); //final tagging251 profiler->Tag(FINISH); //final tagging 252 252 _printf0_("\n"); 253 _printf0_(" "<<setw(40)<<left<<"FemModel initialization elapsed time:"<<profiler->DeltaTime(S tartInit,FinishInit) << "\n");254 _printf0_(" "<<setw(40)<<left<<"Core solution elapsed time:"<<profiler->DeltaTime(S tartCore,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"); 255 255 _printf0_("\n"); 256 256 _printf0_(" Total elapsed time: " 257 <<profiler->DeltaTimeModHour(S tart,Finish)<<" hrs "258 <<profiler->DeltaTimeModMin(S tart,Finish)<<" min "259 <<profiler->DeltaTimeModSec(S tart,Finish)<<" sec"257 <<profiler->DeltaTimeModHour(START,FINISH)<<" hrs " 258 <<profiler->DeltaTimeModMin(START,FINISH)<<" min " 259 <<profiler->DeltaTimeModSec(START,FINISH)<<" sec" 260 260 ); 261 261 _printf0_("\n"); … … 332 332 333 333 /*run solution core: */ 334 profiler->Tag(S tartCore);334 profiler->Tag(STARTCORE); 335 335 solutioncore(this); 336 profiler->Tag(F inishCore);336 profiler->Tag(FINISHCORE); 337 337 338 338 /*run AD core if needed: */ 339 profiler->Tag(S tartAdCore);339 profiler->Tag(STARTADCORE); 340 340 ad_core(this); 341 profiler->Tag(F inishAdCore);341 profiler->Tag(FINISHADCORE); 342 342 343 343 /*some profiling results for the core: */ … … 345 345 if(profiling){ 346 346 347 solution_time=profiler->DeltaTime(S tartCore,FinishCore);348 solution_flops=profiler->DeltaFlops(S tartCore,FinishCore);349 solution_memory=profiler->Memory(F inishCore);347 solution_time=profiler->DeltaTime(STARTCORE,FINISHCORE); 348 solution_flops=profiler->DeltaFlops(STARTCORE,FINISHCORE); 349 solution_memory=profiler->Memory(FINISHCORE); 350 350 351 351 _printf0_("Core solution elapsed time : " << solution_time << " Seconds\n"); … … 359 359 360 360 #ifdef _HAVE_ADOLC_ 361 solution_time=profiler->DeltaTime(S tartAdCore,FinishAdCore);362 solution_flops=profiler->DeltaFlops(S tartAdCore,FinishAdCore);363 solution_memory=profiler->Memory(F inishAdCore);361 solution_time=profiler->DeltaTime(STARTADCORE,FINISHADCORE); 362 solution_flops=profiler->DeltaFlops(STARTADCORE,FINISHADCORE); 363 solution_memory=profiler->Memory(FINISHADCORE); 364 364 365 365 _printf0_("AD Solution elapsed time : " << solution_time << " Seconds\n"); … … 2591 2591 /*Start profiler: */ 2592 2592 this->profiler=new Profiler(); 2593 profiler->Tag(S tart);2593 profiler->Tag(START); 2594 2594 2595 2595 /*From command line arguments, retrieve different filenames needed to create the FemModel: */ … … 2597 2597 2598 2598 /*Create femmodel from input files: */ 2599 profiler->Tag(S tartInit);2599 profiler->Tag(STARTINIT); 2600 2600 this->InitFromBuffers((char*)buffer,buffersize,toolkits, solution_type,trace,NULL); 2601 profiler->Tag(F inishInit);2601 profiler->Tag(FINISHINIT); 2602 2602 2603 2603 /*Save communicator in the parameters dataset: */ … … 2687 2687 2688 2688 /*Before we delete the profiler, report statistics for this run: */ 2689 profiler->Tag(F inish); //final tagging2689 profiler->Tag(FINISH); //final tagging 2690 2690 _printf0_("\n"); 2691 _printf0_(" "<<setw(40)<<left<<"FemModel initialization elapsed time:"<<profiler->DeltaTime(S tartInit,FinishInit) << "\n");2692 _printf0_(" "<<setw(40)<<left<<"Core solution elapsed time:"<<profiler->DeltaTime(S tartCore,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"); 2693 2693 _printf0_("\n"); 2694 2694 _printf0_(" Total elapsed time: " 2695 <<profiler->DeltaTimeModHour(S tart,Finish)<<" hrs "2696 <<profiler->DeltaTimeModMin(S tart,Finish)<<" min "2697 <<profiler->DeltaTimeModSec(S tart,Finish)<<" sec"2695 <<profiler->DeltaTimeModHour(START,FINISH)<<" hrs " 2696 <<profiler->DeltaTimeModMin(START,FINISH)<<" min " 2697 <<profiler->DeltaTimeModSec(START,FINISH)<<" sec" 2698 2698 ); 2699 2699 _printf0_("\n"); -
issm/trunk-jpl/src/c/classes/Profiler.cpp
r19239 r20637 11 11 12 12 #include "./Profiler.h" 13 #include "./Params/Parameters.h"14 13 #include "./Params/DoubleParam.h" 15 14 #include "../toolkits/toolkits.h" … … 18 17 /*Profiler constructors and destructors:*/ 19 18 Profiler::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 } /*}}}*/ 25 25 Profiler::~Profiler(){/*{{{*/ 26 delete time; 27 delete flops; 28 delete memory; 29 } 30 /*}}}*/ 26 /*Nothing to delete, everything is statically allocated*/ 27 } /*}}}*/ 31 28 Object* Profiler::copy(){/*{{{*/ 32 29 /*First do simple copy: */ 33 30 Profiler* output=new Profiler(); 34 delete output->time;35 delete output->flops;36 delete output->memory;37 31 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 } 42 37 43 38 return (Object*)output; … … 50 45 _printf_("Profiler:\n"); 51 46 _printf_(" time tags: \n"); 52 this->time->Echo();47 _error_("not implemented yet"); 53 48 54 49 } … … 56 51 void Profiler::DeepEcho(void){/*{{{*/ 57 52 58 _printf_("Profiler:\n"); 59 _printf_(" time tags: \n"); 60 this->time->DeepEcho(); 53 this->Echo(); 61 54 62 55 } … … 72 65 void Profiler::Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){ /*{{{*/ 73 66 67 IssmDouble* pointer = NULL; 68 74 69 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); 75 76 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 } /*}}}*/ 82 78 83 79 /*Profiler routines:*/ … … 110 106 111 107 /*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; 115 116 116 117 } … … 118 119 IssmDouble Profiler::DeltaTime(int inittag, int finaltag){/*{{{*/ 119 120 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]; 123 132 124 133 #ifdef _HAVE_MPI_ … … 131 140 IssmDouble Profiler::DeltaFlops(int inittag, int finaltag){/*{{{*/ 132 141 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]; 136 153 137 154 return final-init; … … 140 157 int Profiler::DeltaTimeModHour(int inittag, int finishtag){/*{{{*/ 141 158 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); 151 161 152 162 } … … 154 164 int Profiler::DeltaTimeModMin(int inittag, int finishtag){/*{{{*/ 155 165 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); 165 168 } 166 169 /*}}}*/ 167 170 int Profiler::DeltaTimeModSec(int inittag, int finishtag){/*{{{*/ 168 171 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); 178 174 } 179 175 /*}}}*/ 180 176 IssmDouble Profiler::Memory(int tag){/*{{{*/ 181 177 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]; 186 183 } 187 184 /*}}}*/ -
issm/trunk-jpl/src/c/classes/Profiler.h
r20635 r20637 12 12 /*}}}*/ 13 13 14 class DataSet; 15 class Parameters; 14 class DoubleParam; 16 15 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 27 25 28 26 class Profiler: public Object{ 29 27 30 28 public: 31 Parameters* time;32 Parameters* flops;33 Parameters* memory;29 IssmDouble time[MAXIMUMSIZE]; 30 IssmDouble flops[MAXIMUMSIZE]; 31 IssmDouble memory[MAXIMUMSIZE]; 34 32 35 33 /*Profiler constructors, destructors {{{*/
Note:
See TracChangeset
for help on using the changeset viewer.