Skip to content

Commit 46fee45

Browse files
committed
Trim runtime trace plumbing
1 parent 3d51db6 commit 46fee45

3 files changed

Lines changed: 29 additions & 87 deletions

File tree

src/common/m_trace.f90

Lines changed: 21 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,19 @@
55
!> @brief Simple runtime call tracing helpers.
66
module m_trace
77

8-
use iso_fortran_env, only: output_unit
9-
108
implicit none
119

1210
private
13-
public :: s_trace_enter, s_trace_call, s_trace_global_call, s_trace_point_begin, s_trace_point_end
14-
15-
logical, private :: trace_initialized = .false.
16-
logical, private :: trace_enabled = .false.
17-
logical, private :: trace_point_enabled = .false.
18-
logical, private :: trace_point_middle = .false.
19-
integer, private :: trace_j = 0
20-
integer, private :: trace_k = 0
21-
integer, private :: trace_l = 0
22-
integer, private :: trace_point_depth = 0
23-
character(len=64), private :: trace_point_vars = ''
11+
public :: s_trace_point_begin, s_trace_point_end
12+
13+
logical, private :: trace_initialized = .false.
14+
logical, private :: trace_enabled = .false.
15+
logical, private :: trace_point_enabled = .false.
16+
logical, private :: trace_point_middle = .false.
17+
integer, private :: trace_j = 0
18+
integer, private :: trace_k = 0
19+
integer, private :: trace_l = 0
20+
integer, private :: trace_point_depth = 0
2421

2522
interface
2623
subroutine c_trace_point_begin() bind(C, name="mfc_trace_point_begin")
@@ -70,78 +67,27 @@ subroutine s_initialize_trace
7067
end if
7168
end if
7269

73-
call get_environment_variable('MFC_TRACE_POINT_VARS', env_value, length=env_len)
74-
if (env_len > 0) trace_point_vars = trim(env_value(:env_len))
75-
7670
trace_initialized = .true.
7771

7872
end subroutine s_initialize_trace
7973

80-
!> Emit a live call-trace line when MFC_TRACE is enabled.
81-
subroutine s_trace_enter(name)
82-
83-
character(len=*), intent(in) :: name
84-
85-
call s_initialize_trace()
86-
87-
if (.not. trace_enabled) return
88-
if (trace_point_enabled .and. trace_point_depth <= 0) return
89-
90-
write (output_unit, '(A,A)') 'TRACE ', trim(name)
91-
call flush (output_unit)
92-
93-
end subroutine s_trace_enter
94-
95-
!> Emit a live call-site trace when the current trace scope is active.
96-
subroutine s_trace_call(name)
97-
98-
character(len=*), intent(in) :: name
99-
100-
call s_initialize_trace()
101-
102-
if (.not. trace_enabled) return
103-
if (trace_point_enabled .and. trace_point_depth <= 0) return
104-
105-
write (output_unit, '(A,A)') 'TRACE ', trim(name)
106-
call flush (output_unit)
107-
108-
end subroutine s_trace_call
109-
110-
!> Emit a call-site trace even when point tracing has not entered a cell loop yet.
111-
subroutine s_trace_global_call(name)
112-
113-
character(len=*), intent(in) :: name
114-
115-
call s_initialize_trace()
116-
117-
if (.not. trace_enabled) return
118-
119-
write (output_unit, '(A,A)') 'TRACE ', trim(name)
120-
call flush (output_unit)
121-
122-
end subroutine s_trace_global_call
123-
12474
!> Enable nested routine-entry tracing while a call at MFC_TRACE_POINT executes.
125-
subroutine s_trace_point_begin(j, k, l, vars, mid_j, mid_k, mid_l)
126-
127-
integer, intent(in) :: j
128-
integer, intent(in) :: k
129-
integer, intent(in) :: l
130-
character(len=*), intent(in) :: vars
131-
integer, intent(in) :: mid_j
132-
integer, intent(in) :: mid_k
133-
integer, intent(in) :: mid_l
134-
integer :: target_j
135-
integer :: target_k
136-
integer :: target_l
75+
subroutine s_trace_point_begin(j, k, l, mid_j, mid_k, mid_l)
76+
77+
integer, intent(in) :: j
78+
integer, intent(in) :: k
79+
integer, intent(in) :: l
80+
integer, intent(in) :: mid_j
81+
integer, intent(in) :: mid_k
82+
integer, intent(in) :: mid_l
83+
integer :: target_j
84+
integer :: target_k
85+
integer :: target_l
13786

13887
call s_initialize_trace()
13988

14089
if (.not. trace_enabled) return
14190
if (.not. trace_point_enabled) return
142-
if (len_trim(trace_point_vars) > 0 .and. trim(trace_point_vars) /= 'any') then
143-
if (trim(vars) /= trim(trace_point_vars)) return
144-
end if
14591
if (trace_point_middle) then
14692
target_j = mid_j
14793
target_k = mid_k

toolchain/instrument_fortran_trace.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -205,8 +205,7 @@ def point_begin_line(indent: str, point_vars: tuple[str, str, str], loop_stack:
205205
for var in point_vars:
206206
entry = active[var]
207207
midpoint_args.append(f"int(({entry['lower']}) + ({entry['upper']}))/2")
208-
point_names = ",".join(point_vars)
209-
return f"{indent}call s_trace_point_begin({point_args}, '{point_names}', {', '.join(midpoint_args)})\n"
208+
return f"{indent}call s_trace_point_begin({point_args}, {', '.join(midpoint_args)})\n"
210209

211210

212211
def instrument(lines: list[str], point_traces: bool = True) -> list[str]:

toolchain/mfc/run/run.py

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ def __profiler_prepend() -> typing.List[str]:
6464
def __runner_prepend() -> typing.List[str]:
6565
profiler = __profiler_prepend()
6666

67-
if __runtime_trace_requested() and ARG("gpu") in (gpuConfigOptions.ACC.value, gpuConfigOptions.MP.value):
67+
if ARG("runtime_trace", False) and ARG("gpu") != gpuConfigOptions.NONE.value:
6868
return ["python3", os.path.join(MFC_ROOT_DIR, "toolchain", "mfc", "run", "trace.py")] + profiler
6969

7070
return profiler
@@ -74,10 +74,6 @@ def get_baked_templates() -> dict:
7474
return {os.path.splitext(os.path.basename(f))[0]: file_read(f) for f in glob(os.path.join(MFC_TEMPLATE_DIR, "*.mako"))}
7575

7676

77-
def __runtime_trace_requested() -> bool:
78-
return ARG("runtime_trace", False)
79-
80-
8177
def __job_script_filepath() -> str:
8278
return os.path.abspath(os.sep.join([os.path.dirname(ARG("input")), f"{ARG('name')}.{'bat' if os.name == 'nt' else 'sh'}"]))
8379

@@ -99,6 +95,11 @@ def __get_template() -> Template:
9995

10096

10197
def __generate_job_script(targets, case: input.MFCInputFile):
98+
env = {}
99+
if ARG("gpus") is not None:
100+
gpu_ids = ",".join([str(_) for _ in ARG("gpus")])
101+
env.update({"CUDA_VISIBLE_DEVICES": gpu_ids, "HIP_VISIBLE_DEVICES": gpu_ids})
102+
102103
# Compute GPU mode booleans for templates
103104
gpu_mode = ARG("gpu")
104105

@@ -111,11 +112,7 @@ def __generate_job_script(targets, case: input.MFCInputFile):
111112
gpu_acc = gpu_mode == gpuConfigOptions.ACC.value
112113
gpu_mp = gpu_mode == gpuConfigOptions.MP.value
113114

114-
env = {}
115-
if ARG("gpus") is not None:
116-
gpu_ids = ",".join([str(_) for _ in ARG("gpus")])
117-
env.update({"CUDA_VISIBLE_DEVICES": gpu_ids, "HIP_VISIBLE_DEVICES": gpu_ids})
118-
if __runtime_trace_requested():
115+
if ARG("runtime_trace", False):
119116
trace_file = os.path.abspath(os.path.join(os.path.dirname(ARG("input")), "trace.log"))
120117
with open(trace_file, "w", encoding="utf-8"):
121118
pass

0 commit comments

Comments
 (0)