Skip to content

Commit 0aeb454

Browse files
oehmkebena-nasa
authored andcommitted
Move top level regrid profiling to ESMF_FieldRegridStore().
1 parent 4eb79be commit 0aeb454

File tree

4 files changed

+153
-61
lines changed

4 files changed

+153
-61
lines changed

src/Infrastructure/Field/src/ESMF_FieldRegrid.F90

Lines changed: 88 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -347,11 +347,74 @@ subroutine ESMF_FieldRegridRelease(routehandle, keywordEnforcer, &
347347
end subroutine ESMF_FieldRegridRelease
348348
!------------------------------------------------------------------------------
349349

350+
#undef ESMF_METHOD
351+
#define ESMF_METHOD "fillProfileStr"
352+
subroutine fillProfileStr(srcField, dstField, regridmethod, profileStr, rc)
353+
type(ESMF_Field), intent(in) :: srcField
354+
type(ESMF_Field), intent(inout) :: dstField
355+
type(ESMF_RegridMethod_Flag), intent(in),optional :: regridmethod
356+
character (len=*), intent(out) :: profileStr
357+
integer, intent(out), optional :: rc
350358

359+
integer :: localrc
360+
character (len=ESMF_MAXSTR) :: tmpStr
351361

362+
363+
! Set string
364+
profileStr="ESMF_FieldRegridStore("
352365

353-
#ifndef FRS_OLDWAY
366+
! Get srcField name
367+
call ESMF_FieldGet(srcField, name=tmpStr, rc=localrc)
368+
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, &
369+
ESMF_CONTEXT, rcToReturn=rc)) return
354370

371+
! Add to profileStr
372+
profileStr=trim(profileStr)//"src="//trim(tmpStr)
373+
374+
375+
! Get dstField name
376+
call ESMF_FieldGet(dstField, name=tmpStr, rc=localrc)
377+
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, &
378+
ESMF_CONTEXT, rcToReturn=rc)) return
379+
380+
! Add to profileStr
381+
profileStr=trim(profileStr)//" dst="//trim(tmpStr)
382+
383+
! Get method name
384+
if (present(regridmethod)) then
385+
if (regridMethod == ESMF_REGRIDMETHOD_BILINEAR) then
386+
tmpStr="bilinear"
387+
else if (regridMethod == ESMF_REGRIDMETHOD_CONSERVE) then
388+
tmpStr="conserve"
389+
else if (regridMethod == ESMF_REGRIDMETHOD_CONSERVE_2ND) then
390+
tmpStr="conserve2nd"
391+
else if (regridMethod == ESMF_REGRIDMETHOD_PATCH) then
392+
tmpStr="patch"
393+
else if (regridMethod == ESMF_REGRIDMETHOD_NEAREST_STOD) then
394+
tmpStr="neareststod"
395+
else if (regridMethod == ESMF_REGRIDMETHOD_NEAREST_DTOS) then
396+
tmpStr="nearestdtos"
397+
else
398+
tmpStr="unknown"
399+
endif
400+
else
401+
tmpStr="bilinear" ! Default to bilinear if not present
402+
endif
403+
404+
! Add to profileStr
405+
profileStr=trim(profileStr)//" method="//trim(tmpStr)
406+
407+
! end it
408+
profileStr=trim(profileStr)//")"
409+
410+
! Return success !
411+
if(present(rc)) rc = ESMF_SUCCESS
412+
413+
end subroutine fillProfileStr
414+
415+
416+
417+
#ifndef FRS_OLDWAY
355418

356419
!------------------------------------------------------------------------------
357420
#undef ESMF_METHOD
@@ -739,17 +802,31 @@ subroutine ESMF_FieldRegridStoreNX(srcField, dstField, keywordEnforcer, &
739802
real(ESMF_KIND_R8), pointer :: tmp_weights(:)
740803
real(ESMF_KIND_R8) :: beg_time, end_time
741804
logical :: addOrigCoordsToPointList
742-
805+
character (len=ESMF_MAXSTR) :: profileStr="<Not Set>"
806+
743807
! Debug Timing stuff
744808
! call ESMF_VMWtime(beg_time)
745809
! ESMF_METHOD_ENTER(localrc)
746810

747-
748811
! Initialize return code; assume failure until success is certain
749812
localrc = ESMF_SUCCESS
750813
if (present(rc)) rc = ESMF_RC_NOT_IMPL
751814

752815

816+
! Profiling
817+
if (ESMF_TraceGetProfileTypeInfo(ESMF_PROFILETYPE_REGRID) > 0) then
818+
! Fill profile string
819+
call fillProfileStr(srcField, dstField, regridMethod, profileStr, localrc)
820+
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, &
821+
ESMF_CONTEXT, rcToReturn=rc)) return
822+
823+
! Start profile region
824+
call ESMF_TraceRegionEnter(profileStr, localrc)
825+
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, &
826+
ESMF_CONTEXT, rcToReturn=rc)) return
827+
endif
828+
829+
753830

754831
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
755832
!!!! Warnings for deprecated arguments !!!!
@@ -1344,6 +1421,14 @@ subroutine ESMF_FieldRegridStoreNX(srcField, dstField, keywordEnforcer, &
13441421
ESMF_CONTEXT, rcToReturn=rc)) return
13451422
endif
13461423

1424+
1425+
! Profiling
1426+
if (ESMF_TraceGetProfileTypeInfo(ESMF_PROFILETYPE_REGRID) > 0) then
1427+
call ESMF_TraceRegionExit(profileStr, localrc)
1428+
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, &
1429+
ESMF_CONTEXT, rcToReturn=rc)) return
1430+
endif
1431+
13471432

13481433
!!!!!!!!!!!!!!!!!!
13491434
! Return success !

src/Infrastructure/Mesh/src/ESMCI_Mesh_Regrid_Glue.C

Lines changed: 14 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -83,9 +83,6 @@ void CpMeshDataToArray(Grid &grid, int staggerLoc, ESMCI::Mesh &mesh, ESMCI::Arr
8383
void CpMeshElemDataToArray(Grid &grid, int staggerloc, ESMCI::Mesh &mesh, ESMCI::Array &array, MEField<> *dataToArray);
8484
void PutElemAreaIntoArray(Grid &grid, int staggerLoc, ESMCI::Mesh &mesh, ESMCI::Array &array);
8585

86-
void create_regrid_info_str(Array **_src_array,Array **_dst_array, int *regridMethod,
87-
std::string &ristr);
88-
8986
void ESMCI_regrid_create(
9087
Mesh **meshsrcpp, ESMCI::Array **arraysrcpp, ESMCI::PointList **plsrcpp,
9188
Mesh **meshdstpp, ESMCI::Array **arraydstpp, ESMCI::PointList **pldstpp,
@@ -115,17 +112,7 @@ void ESMCI_regrid_create(
115112
// Declare local return code
116113
int localrc;
117114

118-
// Enter profile around whole regrid create
119-
std::string ristr;
120-
if (TraceGetProfileTypeInfo(ESMC_PROFILETYPE_REGRID) > 0) {
121-
// Create string describing regrid case
122-
create_regrid_info_str(arraysrcpp, arraydstpp, regridMethod, ristr);
123-
124-
// Trace around whole regrid create
125-
ESMCI::TraceEventRegionEnter(ristr, &localrc);
126-
if (ESMC_LogDefault.MsgFoundError(localrc, ESMCI_ERR_PASSTHRU, ESMC_CONTEXT, rc)) return;
127-
}
128-
115+
129116
// Dereference input variables
130117
ESMCI::Array &srcarray = **arraysrcpp;
131118
ESMCI::Array &dstarray = **arraydstpp;
@@ -139,8 +126,6 @@ void ESMCI_regrid_create(
139126
int has_statusArray=*_has_statusArray;
140127
ESMCI::Array *statusArray=*_statusArray;
141128

142-
143-
144129

145130
#define PROGRESSLOG_off
146131
#define MEMLOG_off
@@ -699,6 +684,12 @@ void ESMCI_regrid_create(
699684

700685
ESMCI_REGRID_TRACE_ENTER("NativeMesh Transpose ArraySMMStore");
701686

687+
// Enter profile around routehandle creation
688+
if (TraceGetProfileTypeInfo(ESMC_PROFILETYPE_REGRID) > 1) {
689+
ESMCI::TraceEventRegionEnter("Transpose RouteHandle creation", &localrc);
690+
if (ESMC_LogDefault.MsgFoundError(localrc,ESMCI_ERR_PASSTHRU,ESMC_CONTEXT,NULL)) throw localrc;
691+
}
692+
702693
// Allocate transpose matrix
703694
int *transpose_iientries = new int[iientries_entry_size*num_entries];
704695

@@ -758,7 +749,13 @@ void ESMCI_regrid_create(
758749
// Get rid of transposed factor index list
759750
delete [] transpose_iientries;
760751

761-
ESMCI_REGRID_TRACE_EXIT("NativeMesh Transpose ArraySMMStore");
752+
// Exit profile around routehandle creation
753+
if (TraceGetProfileTypeInfo(ESMC_PROFILETYPE_REGRID) > 1) {
754+
ESMCI::TraceEventRegionExit("Transpose RouteHandle creation", &localrc);
755+
if (ESMC_LogDefault.MsgFoundError(localrc,ESMCI_ERR_PASSTHRU,ESMC_CONTEXT,NULL)) throw localrc;
756+
}
757+
758+
ESMCI_REGRID_TRACE_EXIT("NativeMesh Transpose ArraySMMStore");
762759

763760
#ifdef PROGRESSLOG_on
764761
ESMC_LogDefault.Write("c_esmc_regrid_create(): Returned from transpose ArraySMMStore().", ESMC_LOGMSG_INFO);
@@ -851,52 +848,11 @@ void ESMCI_regrid_create(
851848
ESMC_LogDefault.Write("c_esmc_regrid_create(): Final return.", ESMC_LOGMSG_INFO);
852849
#endif
853850

854-
855-
// Exit profile around whole regrid create
856-
if (TraceGetProfileTypeInfo(ESMC_PROFILETYPE_REGRID) > 0) {
857-
ESMCI::TraceEventRegionExit(ristr, &localrc);
858-
if (ESMC_LogDefault.MsgFoundError(localrc, ESMCI_ERR_PASSTHRU, ESMC_CONTEXT, rc)) return;
859-
}
860851

861852
// Set return code
862853
if (rc!=NULL) *rc = ESMF_SUCCESS;
863854
}
864855

865-
866-
/* XMRKX */
867-
void create_regrid_info_str(Array **_src_array,Array **_dst_array, int *regridMethod,
868-
std::string &ristr) {
869-
870-
Array *src_array=*_src_array;
871-
Array *dst_array=*_dst_array;
872-
873-
// Add beginning part
874-
ristr="ESMCI_regrid_create(";
875-
876-
// Add src
877-
ristr=ristr+"src="+src_array->getName()+" ";
878-
879-
// Add dst
880-
ristr=ristr+"dst="+dst_array->getName()+" ";
881-
882-
// Add method
883-
ristr=ristr+"method=";
884-
885-
// Add method name
886-
if (*regridMethod==ESMC_REGRID_METHOD_BILINEAR) ristr=ristr+"bilinear";
887-
else if (*regridMethod==ESMC_REGRID_METHOD_CONSERVE) ristr=ristr+"conserve";
888-
else if (*regridMethod==ESMC_REGRID_METHOD_CONSERVE_2ND) ristr=ristr+"conserve2nd";
889-
else if (*regridMethod==ESMC_REGRID_METHOD_PATCH) ristr=ristr+"patch";
890-
else if (*regridMethod==ESMC_REGRID_METHOD_NEAREST_SRC_TO_DST) ristr=ristr+"neareststod";
891-
else if (*regridMethod==ESMC_REGRID_METHOD_NEAREST_DST_TO_SRC) ristr=ristr+"nearestdtos";
892-
else ristr=ristr+"unknown";
893-
894-
// Add end
895-
ristr=ristr+")";
896-
}
897-
898-
899-
900856
void ESMCI_regrid_getiwts(Grid **gridpp,
901857
Mesh **meshpp, ESMCI::Array **arraypp, int *staggerLoc,
902858
int *rc) {

src/Infrastructure/Trace/interface/ESMCI_Trace_F.C

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,14 @@ extern "C" {
3636
ESMCI::TraceClose(rc);
3737
}
3838

39+
#undef ESMC_METHOD
40+
#define ESMC_METHOD "c_esmftrace_getprofiletypeinfo()"
41+
void FTN_X(c_esmftrace_getprofiletypeinfo)(int *type, int *profileTypeInfo)
42+
{
43+
*profileTypeInfo=TraceGetProfileTypeInfo(static_cast<ESMCI::ESMC_ProfileType>(*type));
44+
}
45+
46+
3947
#undef ESMC_METHOD
4048
#define ESMC_METHOD "c_esmftrace_mapvmpid()"
4149
void FTN_X(c_esmftrace_mapvmid)(ESMCI::VMId **vmid, int *mappedId, int *rc)

src/Infrastructure/Trace/interface/ESMF_Trace.F90

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,23 +36,40 @@ module ESMF_TraceMod
3636
! !PRIVATE TYPES:
3737
private
3838

39+
type ESMF_ProfileType
40+
integer :: profiletype
41+
end type ESMF_ProfileType
42+
43+
! WARNING: THESE NEED TO MATCH ESMC_ProfileType IN ESMCI_TraceRegion.h
44+
type (ESMF_ProfileType), parameter :: &
45+
ESMF_PROFILETYPE_REGRID=ESMF_ProfileType(0)
46+
3947
!------------------------------------------------------------------------------
4048
! !PUBLIC MEMBER FUNCTIONS:
4149
public ESMF_TraceRegionEnter
4250
public ESMF_TraceRegionExit
51+
4352

53+
54+
4455
! - ESMF-internal methods:
4556
public ESMF_TraceOpen
4657
public ESMF_TraceClose
4758
public ESMF_TraceMemInfo
59+
public ESMF_TraceGetProfileTypeInfo
4860

61+
! - ESMF-internal methods:
62+
public ESMF_ProfileType, ESMF_PROFILETYPE_REGRID
63+
64+
4965
! - ESMF-internal - only for unit tests
5066
public ESMF_TraceTest_GetMPIWaitStats
5167
public ESMF_TraceTest_CheckMPIRegion
5268
!EOPI
5369

5470
contains
5571

72+
5673
#undef ESMF_METHOD
5774
#define ESMF_METHOD "ESMF_TraceOpen()"
5875
!BOPI
@@ -102,6 +119,32 @@ subroutine ESMF_TraceClose(rc)
102119
ESMF_CONTEXT, rcToReturn=rc)) return
103120
end subroutine ESMF_TraceClose
104121

122+
123+
#undef ESMF_METHOD
124+
#define ESMF_METHOD "ESMF_TraceGetProfileTypeInfo()"
125+
!BOPI
126+
! !IROUTINE: ESMF_TraceGetProfileTypeInfo - Get information about a particular type of profile
127+
!
128+
! !INTERFACE:
129+
function ESMF_TraceGetProfileTypeInfo(type)
130+
131+
! ! Return value
132+
integer :: ESMF_TraceGetProfileTypeInfo
133+
134+
! !ARGUMENTS:
135+
type(ESMF_PROFILETYPE), intent(in) :: type
136+
!
137+
! !DESCRIPTION:
138+
! Get information about a particular type of profile
139+
!
140+
!EOPI
141+
!-------------------------------------------------------------------------------
142+
143+
call c_esmftrace_getprofiletypeinfo(type, ESMF_TraceGetProfileTypeInfo)
144+
145+
end function ESMF_TraceGetProfileTypeInfo
146+
147+
105148
#undef ESMF_METHOD
106149
#define ESMF_METHOD "ESMF_TraceRegionEnter()"
107150
!BOP

0 commit comments

Comments
 (0)