Source code for reframechecks.common.sphexa.sanity_vtune

# Copyright 2019-2020 Swiss National Supercomputing Centre (CSCS/ETH Zurich)
# HPCTools Project Developers. See the top-level LICENSE file for details.
#
# SPDX-License-Identifier: BSD-3-Clause

import os
import reframe as rfm
import reframe.utility.sanity as sn
from reframe.core.fields import ScopedDict
import sphexa.sanity as sphs
import sphexa.sanity_intel as sphsintel


[docs]class VtuneBaseTest(rfm.RegressionTest): def __init__(self): x = 0 # {{{ others @rfm.run_before('performance') def get_vtune_num_result_path(self): regex = r'^vtune: Using result path .(?P<paths>\S+).$' rpt = os.path.join(self.stagedir, self.dir_rpt) self.vtune_paths = sn.evaluate(sn.count(sn.findall(regex, rpt))) # }}} # {{{ patterns # --- 1 @rfm.run_before('performance') def set_basic_perf_patterns(self): '''A set of basic perf_patterns shared between the tests ''' self.perf_patterns = sn.evaluate(sphs.basic_perf_patterns(self)) # --- 2 @rfm.run_before('performance') def set_vtune_perf_patterns_stdout(self): res = sn.evaluate(sphsintel.vtune_perf_patterns(self)) if self.perf_patterns: self.perf_patterns = {**self.perf_patterns, **res} else: self.perf_patterns = res # --- 3 @rfm.run_before('performance') def set_vtune_perf_patterns_rpt(self): '''More perf_patterns for the tool Typical performance reporting: .. literalinclude:: ../../reframechecks/intel/intel_vtune.res :lines: 117-127 ''' regex_l = r'^vtune: Using result path .(?P<paths>\S+).$' paths_l = sn.extractall(regex_l, self.dir_rpt, 'paths') regex = (r'(?P<funcname>.*);(?P<cput>\d+.\d+);(?P<cput_efft>\S+);' r'(?P<cput_spint>\S+);(?P<cput_overhead>\S+)') res = {} res2 = {} for ii in range(self.vtune_paths): rpt = paths_l[ii] + '.csv' # rpt.nid00034.csv kk = 'vtune_cput_cn%s' % ii res[kk] = sn.round(sn.sum(sn.extractall(regex, rpt, 'cput', float)), 2) kk = 'vtune_cput_cn%s_efft' % ii res2[kk] = sn.round(sn.sum(sn.extractall(regex, rpt, 'cput_efft', float)), 2) kk = 'vtune_cput_cn%s_spint' % ii res2[kk] = sn.round(sn.sum(sn.extractall(regex, rpt, 'cput_spint', float)), 2) kk = '%svtune_cput_cn%s_efft' % ('%', ii) res[kk] = sn.round(res2['vtune_cput_cn%s_efft' % ii] / res['vtune_cput_cn%s' % ii] * 100, 1) kk = '%svtune_cput_cn%s_spint' % ('%', ii) res[kk] = sn.round(res2['vtune_cput_cn%s_spint' % ii] / res['vtune_cput_cn%s' % ii] * 100, 1) if self.perf_patterns: self.perf_patterns = {**self.perf_patterns, **res} else: self.perf_patterns = res # }}} # {{{ reference # --- 1 @rfm.run_before('performance') def set_basic_reference(self): self.reference = sn.evaluate(sphs.basic_reference_scoped_d(self)) # --- 2 @rfm.run_before('performance') def set_tool_reference_stdout(self): self.reference = sn.evaluate(sphsintel.vtune_tool_reference(self)) # --- 3 @rfm.run_before('performance') def set_tool_reference_rpt(self): ref = ScopedDict() # first, copy the existing self.reference (if any): if self.reference: for kk in self.reference: ref[kk] = self.reference['*:%s' % kk] # then add more: myzero_s = (0, None, None, 's') myzero_p = (0, None, None, '%') for ii in range(self.vtune_paths): kk = '*:vtune_cput_cn%s' % ii ref[kk] = myzero_s # ok for ii in range(self.vtune_paths): # ok kk = '*:vtune_cput_cn%s_efft' % ii # ok ref[kk] = myzero_s # ok for ii in range(self.vtune_paths): # ok kk = '*:vtune_cput_cn%s_spint' % ii # ok ref[kk] = myzero_s for ii in range(self.vtune_paths): kk = '*:%svtune_cput_cn%s_efft' % ('%', ii) ref[kk] = myzero_p # ref['%vtune_cput_cn0_efft'] = myzero_p for ii in range(self.vtune_paths): kk = '*:%svtune_cput_cn%s_spint' % ('%', ii) ref[kk] = myzero_p # final reference: self.reference = ref
# }}}