From 926b563c40a33b7afe7122766f44a716e699e83d Mon Sep 17 00:00:00 2001 From: Eirini Koutsaniti Date: Tue, 24 Aug 2021 11:31:10 +0200 Subject: [PATCH 1/3] Modernize latency test --- .../microbenchmarks/cpu/latency/latency.py | 42 +++++++++++-------- 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/cscs-checks/microbenchmarks/cpu/latency/latency.py b/cscs-checks/microbenchmarks/cpu/latency/latency.py index fa02138a9b..3085f59914 100644 --- a/cscs-checks/microbenchmarks/cpu/latency/latency.py +++ b/cscs-checks/microbenchmarks/cpu/latency/latency.py @@ -9,28 +9,37 @@ @rfm.simple_test class CPULatencyTest(rfm.RegressionTest): - def __init__(self): - self.sourcepath = 'latency.cpp' - self.build_system = 'SingleSource' - self.valid_systems = ['daint:gpu', 'daint:mc', 'dom:gpu', 'dom:mc', - 'ault:intel', 'ault:amdvega', 'tave:compute'] - self.valid_prog_environs = ['PrgEnv-gnu'] - self.num_tasks = 0 - self.num_tasks_per_node = 1 - - self.build_system.cxxflags = ['-O3'] - - self.executable_opts = ['16000', '128000', '8000000', '500000000'] + sourcepath = 'latency.cpp' + build_system = 'SingleSource' + valid_systems = ['daint:gpu', 'daint:mc', 'dom:gpu', 'dom:mc', + 'ault:intel', 'ault:amdvega', 'tave:compute'] + valid_prog_environs = ['PrgEnv-gnu'] + num_tasks = 0 + num_tasks_per_node = 1 + executable_opts = ['16000', '128000', '8000000', '500000000'] + maintainers = ['SK'] + tags = {'benchmark', 'diagnostic'} + @run_after('init') + def set_modules(self): if self.current_system.name in {'daint', 'dom'}: self.modules = ['craype-hugepages1G'] if self.current_system.name in {'tave'}: self.modules = ['craype-hugepages512M'] - self.sanity_patterns = sn.assert_eq( + @run_before('compile') + def set_flags(self): + self.build_system.cxxflags = ['-O3'] + + @sanity_function + def assert_success(self): + return sn.assert_eq( sn.count(sn.findall(r'latency', self.stdout)), - self.num_tasks_assigned * len(self.executable_opts)) + self.num_tasks_assigned * len(self.executable_opts) + ) + @run_before('performance') + def set_performance(self): def lat_pattern(index): return sn.extractsingle( r'latency \(ns\) for input size %s: (?P\S+) clocks' % @@ -88,10 +97,7 @@ def lat_pattern(index): }, } - self.maintainers = ['SK'] - self.tags = {'benchmark', 'diagnostic'} - @property - @sn.sanity_function + @sn.deferrable def num_tasks_assigned(self): return self.job.num_tasks From 4f603a405bcbce04b408eae72f2a106d8a49f3ac Mon Sep 17 00:00:00 2001 From: Eirini Koutsaniti Date: Wed, 25 Aug 2021 12:08:13 +0200 Subject: [PATCH 2/3] Update performance --- .../microbenchmarks/cpu/latency/latency.py | 120 +++++++++--------- 1 file changed, 63 insertions(+), 57 deletions(-) diff --git a/cscs-checks/microbenchmarks/cpu/latency/latency.py b/cscs-checks/microbenchmarks/cpu/latency/latency.py index 3085f59914..20287a3d49 100644 --- a/cscs-checks/microbenchmarks/cpu/latency/latency.py +++ b/cscs-checks/microbenchmarks/cpu/latency/latency.py @@ -12,11 +12,55 @@ class CPULatencyTest(rfm.RegressionTest): sourcepath = 'latency.cpp' build_system = 'SingleSource' valid_systems = ['daint:gpu', 'daint:mc', 'dom:gpu', 'dom:mc', - 'ault:intel', 'ault:amdvega', 'tave:compute'] + 'ault:intel', 'ault:amdvega', 'tave:compute'] valid_prog_environs = ['PrgEnv-gnu'] num_tasks = 0 num_tasks_per_node = 1 executable_opts = ['16000', '128000', '8000000', '500000000'] + reference = { + 'dom:mc': { + 'latencyL1': (1.21, -0.01, 0.26, 'ns'), + 'latencyL2': (3.65, -0.01, 0.26, 'ns'), + 'latencyL3': (18.83, -0.01, 0.05, 'ns'), + 'latencyMem': (76.6, -0.01, 0.05, 'ns') + }, + 'dom:gpu': { + 'latencyL1': (1.14, -0.01, 0.26, 'ns'), + 'latencyL2': (3.44, -0.01, 0.26, 'ns'), + 'latencyL3': (15.65, -0.01, 0.05, 'ns'), + 'latencyMem': (71.7, -0.01, 0.05, 'ns') + }, + 'daint:mc': { + 'latencyL1': (1.21, -0.01, 0.26, 'ns'), + 'latencyL2': (3.65, -0.01, 0.26, 'ns'), + 'latencyL3': (18.83, -0.01, 0.05, 'ns'), + 'latencyMem': (76.6, -0.01, 0.05, 'ns') + }, + 'daint:gpu': { + 'latencyL1': (1.14, -0.01, 0.26, 'ns'), + 'latencyL2': (3.44, -0.01, 0.26, 'ns'), + 'latencyL3': (15.65, -0.01, 0.05, 'ns'), + 'latencyMem': (71.7, -0.01, 0.05, 'ns') + }, + 'ault:intel': { + 'latencyL1': (1.08, -0.01, 0.26, 'ns'), + 'latencyL2': (3.8, -0.01, 0.26, 'ns'), + 'latencyL3': (21.5, -0.01, 0.05, 'ns'), + 'latencyMem': (86.5, -0.01, 0.05, 'ns') + }, + 'ault:amdvega': { + 'latencyL1': (1.32, -0.01, 0.26, 'ns'), + 'latencyL2': (4.02, -0.01, 0.26, 'ns'), + 'latencyL3': (14.4, -0.01, 0.26, 'ns'), + 'latencyMem': (90.0, -0.01, 0.05, 'ns') + }, + 'tave:compute': { + 'latencyL1': (2.86, -0.01, 0.05, 'ns'), + 'latencyL2': (12.15, -0.01, 0.05, 'ns'), + 'latencyL3': (137, -0.01, 0.05, 'ns'), + 'latencyMem': (150, -0.05, 0.05, 'ns') + }, + } maintainers = ['SK'] tags = {'benchmark', 'diagnostic'} @@ -38,64 +82,26 @@ def assert_success(self): self.num_tasks_assigned * len(self.executable_opts) ) - @run_before('performance') - def set_performance(self): - def lat_pattern(index): - return sn.extractsingle( - r'latency \(ns\) for input size %s: (?P\S+) clocks' % - self.executable_opts[index], self.stdout, 'bw', float) + def lat_pattern(self, index): + return sn.extractsingle( + r'latency \(ns\) for input size %s: (?P\S+) clocks' % + self.executable_opts[index], self.stdout, 'bw', float) - self.perf_patterns = { - 'latencyL1': lat_pattern(0), - 'latencyL2': lat_pattern(1), - 'latencyL3': lat_pattern(2), - 'latencyMem': lat_pattern(3), - } + @performance_function('ns') + def latencyL1(self): + return self.lat_pattern(0) - self.reference = { - 'dom:mc': { - 'latencyL1': (1.21, -0.01, 0.26, 'ns'), - 'latencyL2': (3.65, -0.01, 0.26, 'ns'), - 'latencyL3': (18.83, -0.01, 0.05, 'ns'), - 'latencyMem': (76.6, -0.01, 0.05, 'ns') - }, - 'dom:gpu': { - 'latencyL1': (1.14, -0.01, 0.26, 'ns'), - 'latencyL2': (3.44, -0.01, 0.26, 'ns'), - 'latencyL3': (15.65, -0.01, 0.05, 'ns'), - 'latencyMem': (71.7, -0.01, 0.05, 'ns') - }, - 'daint:mc': { - 'latencyL1': (1.21, -0.01, 0.26, 'ns'), - 'latencyL2': (3.65, -0.01, 0.26, 'ns'), - 'latencyL3': (18.83, -0.01, 0.05, 'ns'), - 'latencyMem': (76.6, -0.01, 0.05, 'ns') - }, - 'daint:gpu': { - 'latencyL1': (1.14, -0.01, 0.26, 'ns'), - 'latencyL2': (3.44, -0.01, 0.26, 'ns'), - 'latencyL3': (15.65, -0.01, 0.05, 'ns'), - 'latencyMem': (71.7, -0.01, 0.05, 'ns') - }, - 'ault:intel': { - 'latencyL1': (1.08, -0.01, 0.26, 'ns'), - 'latencyL2': (3.8, -0.01, 0.26, 'ns'), - 'latencyL3': (21.5, -0.01, 0.05, 'ns'), - 'latencyMem': (86.5, -0.01, 0.05, 'ns') - }, - 'ault:amdvega': { - 'latencyL1': (1.32, -0.01, 0.26, 'ns'), - 'latencyL2': (4.02, -0.01, 0.26, 'ns'), - 'latencyL3': (14.4, -0.01, 0.26, 'ns'), - 'latencyMem': (90.0, -0.01, 0.05, 'ns') - }, - 'tave:compute': { - 'latencyL1': (2.86, -0.01, 0.05, 'ns'), - 'latencyL2': (12.15, -0.01, 0.05, 'ns'), - 'latencyL3': (137, -0.01, 0.05, 'ns'), - 'latencyMem': (150, -0.05, 0.05, 'ns') - }, - } + @performance_function('ns') + def latencyL2(self): + return self.lat_pattern(1) + + @performance_function('ns') + def latencyL3(self): + return self.lat_pattern(2) + + @performance_function('ns') + def latencyMem(self): + return self.lat_pattern(3) @property @sn.deferrable From 08fc91f16798dfba2c5bb0bef94e5bc4f3810721 Mon Sep 17 00:00:00 2001 From: Vasileios Karakasis Date: Tue, 31 Aug 2021 00:25:02 +0200 Subject: [PATCH 3/3] Simplify test --- cscs-checks/microbenchmarks/cpu/latency/latency.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/cscs-checks/microbenchmarks/cpu/latency/latency.py b/cscs-checks/microbenchmarks/cpu/latency/latency.py index 20287a3d49..a766ee4554 100644 --- a/cscs-checks/microbenchmarks/cpu/latency/latency.py +++ b/cscs-checks/microbenchmarks/cpu/latency/latency.py @@ -79,7 +79,7 @@ def set_flags(self): def assert_success(self): return sn.assert_eq( sn.count(sn.findall(r'latency', self.stdout)), - self.num_tasks_assigned * len(self.executable_opts) + self.num_tasks * len(self.executable_opts) ) def lat_pattern(self, index): @@ -102,8 +102,3 @@ def latencyL3(self): @performance_function('ns') def latencyMem(self): return self.lat_pattern(3) - - @property - @sn.deferrable - def num_tasks_assigned(self): - return self.job.num_tasks