in var/ramble/repos/builtin/modifiers/intel-aps/modifier.py [0:0]
def aps_summary(self, executable_name, executable, app_inst=None):
from ramble.util.executable import CommandExecutable
pre_exec = []
post_exec = []
exe_regex = self.expander.expand_var_name("apply_aps_exe_regex")
applicable = exe_regex and re.match(exe_regex, executable_name)
if applicable or executable.mpi:
env_var_name = self.expander.expand_var_name(
"external_aps_env_var"
)
pre_cmds = [
"export APS_STAT_LEVEL={aps_stat_level}",
"spack load intel-oneapi-vtune",
# Clean up previous aps logs to avoid the potential
# of out-dated reports.
"rm -rf {aps_log_dir}",
f"rm -f {{experiment_run_dir}}/{_REPORT_PREFIX}*",
]
if env_var_name:
pre_cmds.append(f"export {env_var_name}='aps {{aps_flags}}'")
pre_exec.append(
CommandExecutable(
f"load-aps-{executable_name}",
template=pre_cmds,
)
)
post_exec.append(
CommandExecutable(
f"unload-aps-{executable_name}",
template=["spack unload intel-oneapi-vtune"],
)
)
post_exec.append(
CommandExecutable(
f"gen-aps-{executable_name}",
template=[
'echo "APS Results for executable {executable_name}"',
# Prints text summary as well as generating an html report
"aps-report -D {aps_log_dir}",
],
mpi=False,
redirect="{log_file}",
)
)
extra_reports = self.expander.expand_var_name("aps_extra_reports")
if extra_reports:
predefined_reports = _PREDEFINED_REPORTS[self._usage_mode]
specs = [item.strip() for item in extra_reports.split(",")]
stat_level = self.expander.expand_var_name(
"aps_stat_level", typed=True
)
cmds = set()
def _add_cmd(report, opts, min_level=0):
if stat_level < min_level:
logger.warn(
f"Report {report} is skipped as APS_STAT_LEVEL"
f" {stat_level} is less than {min_level}"
)
else:
report_path = f'"{{experiment_run_dir}}/{_REPORT_PREFIX}{report}.txt"'
cmds.add(
f"aps-report {opts} {{aps_log_dir}} > {report_path} 2>&1"
)
for spec in specs:
if spec.startswith(_CUSTOM_PREFIX):
custom = spec[len(_CUSTOM_PREFIX) :]
_add_cmd(
f"custom_{custom.replace('-', '').replace(' ', '_')}",
custom,
)
elif spec == "all":
for report, (
opts,
min_level,
) in predefined_reports.items():
_add_cmd(report, opts, min_level)
else:
if spec not in predefined_reports:
logger.warn(f"Report {spec} is not defined")
else:
opts, min_level = predefined_reports[spec]
_add_cmd(spec, opts, min_level)
for i, cmd in enumerate(cmds):
post_exec.append(
CommandExecutable(
f"gen-report{i}",
template=cmd,
mpi=False,
output_capture="",
redirect="",
)
)
return pre_exec, post_exec