Skip to content

Commit 1b012db

Browse files
oehmkebena-nasa
authored andcommitted
Add more regridding trace events.
1 parent ec9a9f1 commit 1b012db

File tree

2 files changed

+124
-12
lines changed

2 files changed

+124
-12
lines changed

src/Infrastructure/Mesh/src/ESMCI_Mesh_Regrid_Glue.C

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -111,13 +111,15 @@ void ESMCI_regrid_create(
111111
#define ESMC_METHOD "ESMCI_regrid_create()"
112112
Trace __trace(" FTN_X(regrid_test)(ESMCI::Grid **gridsrcpp, ESMCI::Grid **griddstcpp, int*rc");
113113

114-
114+
// Create string describing regrid case
115115
std::string ristr;
116116
create_regrid_info_str(arraysrcpp, arraydstpp, regridMethod, ristr);
117117

118-
std::cout<<"Regrid Info Str: "<<ristr<<"\n";
119-
118+
// Trace around whole regrid create
119+
ESMCI::TraceEventRegionEnter(ristr, NULL);
120120

121+
122+
// Dereference input variables
121123
ESMCI::Array &srcarray = **arraysrcpp;
122124
ESMCI::Array &dstarray = **arraydstpp;
123125

@@ -328,9 +330,10 @@ void ESMCI_regrid_create(
328330

329331

330332

331-
332-
333-
333+
// Trace around weight generation
334+
ESMCI::TraceEventRegionEnter("Weight generation", &localrc);
335+
if (ESMC_LogDefault.MsgFoundError(localrc,ESMCI_ERR_PASSTHRU,ESMC_CONTEXT,NULL)) throw localrc;
336+
334337

335338
#ifdef PROGRESSLOG_on
336339
ESMC_LogDefault.Write("c_esmc_regrid_create(): Entering weight generation.", ESMC_LOGMSG_INFO);
@@ -394,6 +397,11 @@ void ESMCI_regrid_create(
394397
}
395398
}
396399

400+
// Trace around weight generation
401+
ESMCI::TraceEventRegionExit("Weight generation", &localrc);
402+
if (ESMC_LogDefault.MsgFoundError(localrc,ESMCI_ERR_PASSTHRU,ESMC_CONTEXT,NULL)) throw localrc;
403+
404+
397405
ESMCI_REGRID_TRACE_EXIT("NativeMesh Weight Generation");
398406

399407
#ifdef PROGRESSLOG_on
@@ -636,6 +644,11 @@ void ESMCI_regrid_create(
636644
// Build the RouteHandle using ArraySMMStore()
637645
if (*has_rh) {
638646

647+
// Trace around routehandle creation
648+
ESMCI::TraceEventRegionEnter("RouteHandle creation", &localrc);
649+
if (ESMC_LogDefault.MsgFoundError(localrc,ESMCI_ERR_PASSTHRU,ESMC_CONTEXT,NULL)) throw localrc;
650+
651+
639652
// Set some flags
640653
enum ESMC_TypeKind_Flag tk = ESMC_TYPEKIND_R8;
641654
ESMC_Logical ignoreUnmatched = ESMF_FALSE;
@@ -651,6 +664,12 @@ void ESMCI_regrid_create(
651664
pipelineDepth, &localrc);
652665
if (ESMC_LogDefault.MsgFoundError(localrc, ESMCI_ERR_PASSTHRU,
653666
ESMC_CONTEXT, NULL)) throw localrc; // bail out with exception
667+
668+
669+
// Trace around routehandle creation
670+
ESMCI::TraceEventRegionExit("RouteHandle creation", &localrc);
671+
if (ESMC_LogDefault.MsgFoundError(localrc,ESMCI_ERR_PASSTHRU,ESMC_CONTEXT,NULL)) throw localrc;
672+
654673
}
655674

656675
ESMCI_REGRID_TRACE_EXIT("NativeMesh ArraySMMStore");
@@ -732,7 +751,7 @@ void ESMCI_regrid_create(
732751
// Get rid of transposed factor index list
733752
delete [] transpose_iientries;
734753

735-
ESMCI_REGRID_TRACE_EXIT("NativeMesh Transpose ArraySMMStore");
754+
ESMCI_REGRID_TRACE_EXIT("NativeMesh Transpose ArraySMMStore");
736755

737756
#ifdef PROGRESSLOG_on
738757
ESMC_LogDefault.Write("c_esmc_regrid_create(): Returned from transpose ArraySMMStore().", ESMC_LOGMSG_INFO);
@@ -825,6 +844,9 @@ void ESMCI_regrid_create(
825844
ESMC_LogDefault.Write("c_esmc_regrid_create(): Final return.", ESMC_LOGMSG_INFO);
826845
#endif
827846

847+
// Trace around whole regrid create
848+
ESMCI::TraceEventRegionExit(ristr, NULL);
849+
828850
// Set return code
829851
if (rc!=NULL) *rc = ESMF_SUCCESS;
830852
}

src/Infrastructure/Mesh/src/Regridding/ESMCI_Interp.C

Lines changed: 95 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828
#include <Mesh/include/ESMCI_XGridUtil.h>
2929
#include "PointList/include/ESMCI_PointList.h"
3030

31+
#include "ESMCI_TraceMacros.h" // for profiling
32+
3133
#include <iostream>
3234
#include <fstream>
3335
#include <cmath>
@@ -2901,6 +2903,8 @@ Interp::Interp(Mesh *src, PointList *srcplist, Mesh *dest, PointList *dstplist,
29012903
bool set_dst_status, WMat &dst_status,
29022904
MAP_TYPE mtype, int unmappedaction, bool checkFlag,
29032905
int _num_src_pnts, ESMC_R8 _dist_exponent):
2906+
#undef ESMC_METHOD
2907+
#define ESMC_METHOD "Interp::Interp()"
29042908

29052909
sres(),
29062910
grend(src, srcplist, dest, dstplist, get_dst_config(imethod), freeze_src_, (mtype==MAP_TYPE_GREAT_CIRCLE)),
@@ -2946,14 +2950,20 @@ interp_method(imethod)
29462950
}
29472951

29482952
if (is_parallel) {
2949-
2953+
int localrc;
2954+
ESMCI::TraceEventRegionEnter("Regrid geometry redist", &localrc);
2955+
if (ESMC_LogDefault.MsgFoundError(localrc,ESMCI_ERR_PASSTHRU,ESMC_CONTEXT,NULL)) throw localrc;
2956+
29502957
// Form the parallel rendezvous meshes/specs
29512958
// if (Par::Rank() == 0)
29522959
//std::cout << "Building rendezvous..." << std::endl;
29532960
grend.Build(srcF.size(), (srcF.size()>0)?(&srcF[0]):NULL,
29542961
dstF.size(), (dstF.size()>0)?(&dstF[0]):NULL,
29552962
&zz, midmesh==0? true:false);
29562963

2964+
ESMCI::TraceEventRegionExit("Regrid geometry redist", &localrc);
2965+
if (ESMC_LogDefault.MsgFoundError(localrc,ESMCI_ERR_PASSTHRU,ESMC_CONTEXT,NULL)) throw localrc;
2966+
29572967
// Check grend status, if it's not complete
29582968
if (grend.status != GEOMREND_STATUS_COMPLETE) {
29592969
if (grend.status == GEOMREND_STATUS_NO_DST) {
@@ -2976,30 +2986,52 @@ interp_method(imethod)
29762986
}
29772987

29782988

2979-
2989+
29802990
if (has_nearest_dst_to_src) {
29812991
Throw() << "unable to proceed with interpolation method dst_to_src";
29822992

29832993
} else if (has_nearest_src_to_dst) {
2984-
ParSearchNearestSrcToDst(grend.GetSrcPlistRend(), grend.GetDstPlistRend(), unmappedaction, sres, set_dst_status, dst_status);
2994+
int localrc;
2995+
ESMCI::TraceEventRegionEnter("Search", &localrc);
2996+
if (ESMC_LogDefault.MsgFoundError(localrc,ESMCI_ERR_PASSTHRU,ESMC_CONTEXT,NULL)) throw localrc;
29852997

2998+
// Do search
2999+
ParSearchNearestSrcToDst(grend.GetSrcPlistRend(), grend.GetDstPlistRend(), unmappedaction, sres, set_dst_status, dst_status);
3000+
3001+
ESMCI::TraceEventRegionExit("Search", &localrc);
3002+
if (ESMC_LogDefault.MsgFoundError(localrc,ESMCI_ERR_PASSTHRU,ESMC_CONTEXT,NULL)) throw localrc;
3003+
29863004
// Redistribute regrid status
29873005
if (set_dst_status) {
29883006
dst_status.Migrate(*dstplist);
29893007
}
29903008
} else if (has_nearest_idavg) {
3009+
int localrc;
3010+
ESMCI::TraceEventRegionEnter("Search", &localrc);
3011+
if (ESMC_LogDefault.MsgFoundError(localrc,ESMCI_ERR_PASSTHRU,ESMC_CONTEXT,NULL)) throw localrc;
3012+
29913013
ParSearchNearestSrcToDstNPnts(grend.GetSrcPlistRend(), grend.GetDstPlistRend(), num_src_pnts, unmappedaction, sres, set_dst_status, dst_status);
29923014

3015+
ESMCI::TraceEventRegionExit("Search", &localrc);
3016+
if (ESMC_LogDefault.MsgFoundError(localrc,ESMCI_ERR_PASSTHRU,ESMC_CONTEXT,NULL)) throw localrc;
3017+
29933018
// Redistribute regrid status
29943019
if (set_dst_status) {
29953020
dst_status.Migrate(*dstplist);
29963021
}
29973022
} else {
29983023
if (search_obj_type == MeshObj::NODE) {
2999-
3024+
int localrc;
3025+
ESMCI::TraceEventRegionEnter("Search", &localrc);
3026+
if (ESMC_LogDefault.MsgFoundError(localrc,ESMCI_ERR_PASSTHRU,ESMC_CONTEXT,NULL)) throw localrc;
3027+
30003028
// Search
30013029
OctSearch(grend.GetSrcRend(), grend.GetDstPlistRend(), mtype, search_obj_type,
30023030
unmappedaction, sres, set_dst_status, dst_status, 1e-8);
3031+
3032+
ESMCI::TraceEventRegionExit("Search", &localrc);
3033+
if (ESMC_LogDefault.MsgFoundError(localrc,ESMCI_ERR_PASSTHRU,ESMC_CONTEXT,NULL)) throw localrc;
3034+
30033035
// Redistribute regrid status
30043036
if (set_dst_status) {
30053037
dst_status.Migrate(*dstplist);
@@ -3015,20 +3047,36 @@ interp_method(imethod)
30153047
// Search
30163048
// OctSearchElems(grend.GetDstRend(), unmappedaction, grend.GetSrcRend(), ESMCI_UNMAPPEDACTION_IGNORE, 1e-8, sres);
30173049
if(freeze_src_) {
3050+
int localrc;
3051+
ESMCI::TraceEventRegionEnter("Search", &localrc);
3052+
if (ESMC_LogDefault.MsgFoundError(localrc,ESMCI_ERR_PASSTHRU,ESMC_CONTEXT,NULL)) throw localrc;
3053+
30183054
OctSearchElems(*src, ESMCI_UNMAPPEDACTION_IGNORE, grend.GetDstRend(), unmappedaction, 1e-8, sres);
3055+
3056+
ESMCI::TraceEventRegionExit("Search", &localrc);
3057+
if (ESMC_LogDefault.MsgFoundError(localrc,ESMCI_ERR_PASSTHRU,ESMC_CONTEXT,NULL)) throw localrc;
3058+
30193059
} else {
3060+
ESMCI::TraceEventRegionEnter("Search", &localrc);
3061+
if (ESMC_LogDefault.MsgFoundError(localrc,ESMCI_ERR_PASSTHRU,ESMC_CONTEXT,NULL)) throw localrc;
3062+
30203063
// If 2nd order see if it's an XGrid and then use that
30213064
if (interp_method == Interp::INTERP_CONSERVE_2ND) {
30223065

30233066
// If an XGrid isn't involved, then do a search using regular method
30243067
if (detect_xgrid_regrid_info_type(grend.GetSrcRend(), grend.GetDstRend()) == XGRID_USE_NONE) {
3068+
int localrc;
30253069
OctSearchElems(grend.GetSrcRend(), ESMCI_UNMAPPEDACTION_IGNORE, grend.GetDstRend(), unmappedaction, 1e-8, sres);
30263070
} else { // ...otherwise use XGrid information
30273071
XGridGatherOverlappingElems(grend.GetSrcRend(), grend.GetDstRend(), sres);
30283072
}
30293073
} else { // ...otherwise just use the regular search
30303074
OctSearchElems(grend.GetSrcRend(), ESMCI_UNMAPPEDACTION_IGNORE, grend.GetDstRend(), unmappedaction, 1e-8, sres);
30313075
}
3076+
3077+
ESMCI::TraceEventRegionExit("Search", &localrc);
3078+
if (ESMC_LogDefault.MsgFoundError(localrc,ESMCI_ERR_PASSTHRU,ESMC_CONTEXT,NULL)) throw localrc;
3079+
30323080
}
30333081
}
30343082
}
@@ -3043,25 +3091,53 @@ interp_method(imethod)
30433091
} else {
30443092
// Serial track. Meshes already in geometric rendezvous. (Perhaps get
30453093
// the subset of the mesh for interpolating??)
3094+
int localrc;
30463095

30473096
if (has_nearest_dst_to_src) {
30483097
Throw() << "unable to proceed with interpolation method dst_to_src";
30493098
} else if (has_nearest_src_to_dst) {
3099+
3100+
ESMCI::TraceEventRegionEnter("Search", &localrc);
3101+
if (ESMC_LogDefault.MsgFoundError(localrc,ESMCI_ERR_PASSTHRU,ESMC_CONTEXT,NULL)) throw localrc;
3102+
30503103
SearchNearestSrcToDst(*srcpointlist, *dstpointlist, unmappedaction, sres, set_dst_status, dst_status);
3104+
3105+
ESMCI::TraceEventRegionExit("Search", &localrc);
3106+
if (ESMC_LogDefault.MsgFoundError(localrc,ESMCI_ERR_PASSTHRU,ESMC_CONTEXT,NULL)) throw localrc;
3107+
3108+
30513109
} else if (has_nearest_idavg) {
3110+
3111+
ESMCI::TraceEventRegionEnter("Search", &localrc);
3112+
if (ESMC_LogDefault.MsgFoundError(localrc,ESMCI_ERR_PASSTHRU,ESMC_CONTEXT,NULL)) throw localrc;
3113+
30523114
SearchNearestSrcToDstNPnts(*srcpointlist, *dstpointlist, num_src_pnts, unmappedaction, sres, set_dst_status, dst_status);
3115+
3116+
ESMCI::TraceEventRegionExit("Search", &localrc);
3117+
if (ESMC_LogDefault.MsgFoundError(localrc,ESMCI_ERR_PASSTHRU,ESMC_CONTEXT,NULL)) throw localrc;
3118+
30533119
} else {
30543120

30553121
if (search_obj_type == MeshObj::NODE) {
3122+
ESMCI::TraceEventRegionEnter("Search", &localrc);
3123+
if (ESMC_LogDefault.MsgFoundError(localrc,ESMCI_ERR_PASSTHRU,ESMC_CONTEXT,NULL)) throw localrc;
3124+
30563125
OctSearch(*src, *dstpointlist, mtype, search_obj_type,
30573126
unmappedaction, sres, set_dst_status, dst_status, 1e-8);
3127+
3128+
ESMCI::TraceEventRegionExit("Search", &localrc);
3129+
if (ESMC_LogDefault.MsgFoundError(localrc,ESMCI_ERR_PASSTHRU,ESMC_CONTEXT,NULL)) throw localrc;
30583130
//OctSearch(src, dest, mtype, search_obj_type, unmappedaction, sres, 1e-8);
30593131
} else if (search_obj_type == MeshObj::ELEMENT) {
30603132
// Check grids
30613133
if (checkFlag) {
30623134
_check_mesh(*src, "source");
30633135
_check_mesh(*dest, "destination");
30643136
}
3137+
3138+
ESMCI::TraceEventRegionEnter("Search", &localrc);
3139+
if (ESMC_LogDefault.MsgFoundError(localrc,ESMCI_ERR_PASSTHRU,ESMC_CONTEXT,NULL)) throw localrc;
3140+
30653141

30663142
// If 2nd order see if it's an XGrid and then use that
30673143
if (interp_method == Interp::INTERP_CONSERVE_2ND) {
@@ -3074,7 +3150,10 @@ interp_method(imethod)
30743150
}
30753151
} else { // ...otherwise just use the regular search
30763152
OctSearchElems(*src, ESMCI_UNMAPPEDACTION_IGNORE, *dest, unmappedaction, 1e-8, sres);
3077-
}
3153+
}
3154+
3155+
ESMCI::TraceEventRegionExit("Search", &localrc);
3156+
if (ESMC_LogDefault.MsgFoundError(localrc,ESMCI_ERR_PASSTHRU,ESMC_CONTEXT,NULL)) throw localrc;
30783157
}
30793158
}
30803159

@@ -3128,6 +3207,9 @@ static void _set_mesh_masked_elem_status(Mesh &mesh, WMat &status) {
31283207
* There is an ASSUMPTION here that the field is nodal, both sides
31293208
*/
31303209
void Interp::operator()(int fpair_num, IWeights &iw, bool set_dst_status, WMat &dst_status) {
3210+
#undef ESMC_METHOD
3211+
#define ESMC_METHOD "Interp::operator()"
3212+
31313213
Trace __trace("Interp::operator()(int fpair_num, IWeights &iw)");
31323214

31333215
IWeights src_frac,dst_frac; // Use IW to get out source and dst frac and to migrate it to the correct procs
@@ -3193,9 +3275,17 @@ void Interp::operator()(int fpair_num, IWeights &iw, bool set_dst_status, WMat &
31933275
}
31943276

31953277
// Calculate weights
3278+
// Trace around weight generation
3279+
int localrc;
3280+
ESMCI::TraceEventRegionEnter("Weight calculation", &localrc);
3281+
if (ESMC_LogDefault.MsgFoundError(localrc,ESMCI_ERR_PASSTHRU,ESMC_CONTEXT,NULL)) throw localrc;
3282+
31963283
if (is_parallel) mat_transfer_parallel(fpair_num, iw, src_frac, dst_frac, set_dst_status, dst_status);
31973284
else mat_transfer_serial(fpair_num, iw, src_frac, dst_frac, set_dst_status, dst_status);
31983285

3286+
ESMCI::TraceEventRegionExit("Weight calculation", &localrc);
3287+
if (ESMC_LogDefault.MsgFoundError(localrc,ESMCI_ERR_PASSTHRU,ESMC_CONTEXT,NULL)) throw localrc;
3288+
31993289
#if 0
32003290
{
32013291
WMat::WeightMap::iterator wi = iw.begin_row(), we = iw.end_row();

0 commit comments

Comments
 (0)