Skip to content

Commit fc51109

Browse files
authored
Merge pull request #656 from kraushm/enhancement/new_syntax
[test] Port remaining tests to the new syntax
2 parents 676c076 + 1d187c6 commit fc51109

File tree

5 files changed

+140
-212
lines changed

5 files changed

+140
-212
lines changed
Lines changed: 61 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,28 @@
11
import os
22

3+
import reframe as rfm
34
import reframe.utility.sanity as sn
4-
from reframe.core.pipeline import RunOnlyRegressionTest
55

66

7-
class AmberBaseCheck(RunOnlyRegressionTest):
8-
def __init__(self, name, input_file, output_file, **kwargs):
9-
super().__init__(name, os.path.dirname(__file__), **kwargs)
10-
11-
self.valid_prog_environs = ['PrgEnv-gnu']
12-
13-
self.modules = ['Amber']
7+
class AmberBaseCheck(rfm.RunOnlyRegressionTest):
8+
def __init__(self, input_file, output_file):
9+
super().__init__()
1410

1511
self.sourcesdir = os.path.join(self.current_system.resourcesdir,
1612
'Amber')
17-
self.executable_opts = \
18-
('-O -i %s -o %s' % (input_file, output_file)).split()
13+
14+
self.valid_prog_environs = ['PrgEnv-gnu']
15+
self.modules = ['Amber']
16+
self.num_tasks = 1
17+
self.num_tasks_per_node = 1
18+
self.num_gpus_per_node = 1
19+
self.executable_opts = ['-O', '-i', input_file, '-o', output_file]
1920
self.keep_files = [output_file]
21+
self.extra_resources = {
22+
'switches': {
23+
'num_switches': 1
24+
}
25+
}
2026

2127
energy = sn.extractsingle(r' Etot\s+=\s+(?P<energy>\S+)',
2228
output_file, 'energy', float, item=-2)
@@ -31,84 +37,53 @@ def __init__(self, name, input_file, output_file, **kwargs):
3137
'perf': sn.extractsingle(r'ns/day =\s+(?P<perf>\S+)',
3238
output_file, 'perf', float, item=1)
3339
}
34-
3540
self.maintainers = ['SO', 'VH']
3641
self.tags = {'scs'}
37-
self.extra_resources = {
38-
'switches': {
39-
'num_switches': 1
40-
}
41-
}
42-
43-
44-
class AmberGPUCheck(AmberBaseCheck):
45-
def __init__(self, version, **kwargs):
46-
super().__init__('amber_gpu_%s_check' % version, 'mdin.GPU',
47-
'amber.out', **kwargs)
48-
self.valid_systems = ['daint:gpu', 'dom:gpu']
49-
self.executable = 'pmemd.cuda.MPI'
50-
self.num_tasks = 1
51-
self.num_tasks_per_node = 1
52-
self.num_gpus_per_node = 1
53-
54-
55-
class AmberGPUProdCheck(AmberGPUCheck):
56-
def __init__(self, **kwargs):
57-
super().__init__('prod', **kwargs)
58-
self.descr = 'Amber parallel GPU production check'
59-
self.tags |= {'production'}
60-
self.reference = {
61-
'dom:gpu': {
62-
'perf': (22.2, -0.05, None)
63-
},
64-
'daint:gpu': {
65-
'perf': (21.7, -0.05, None)
66-
},
67-
}
6842

6943

70-
class AmberGPUMaintCheck(AmberGPUCheck):
71-
def __init__(self, **kwargs):
72-
super().__init__('maint', **kwargs)
73-
self.descr = 'Amber parallel GPU maintenance check'
74-
self.tags |= {'maintenance'}
75-
self.reference = {
76-
'dom:gpu': {
77-
'perf': (22.2, -0.05, None)
78-
},
79-
'daint:gpu': {
80-
'perf': (21.7, -0.05, None)
81-
},
82-
}
83-
84-
85-
class AmberCPUCheck(AmberBaseCheck):
86-
def __init__(self, **kwargs):
87-
super().__init__('amber_cpu_check', 'mdin.CPU', 'amber.out', **kwargs)
88-
self.descr = 'Amber parallel CPU check'
89-
self.tags |= {'production'}
90-
self.executable = 'pmemd.MPI'
91-
self.strict_check = False
92-
self.valid_systems = ['daint:mc', 'dom:mc']
93-
self.modules = ['Amber']
94-
95-
self.reference = {
96-
'dom:mc': {
97-
'perf': (8.0, -0.05, None)
98-
},
99-
'daint:mc': {
100-
'perf': (10.7, -0.25, None)
101-
},
102-
}
103-
104-
if self.current_system.name == 'dom':
105-
self.num_tasks = 216
106-
self.num_tasks_per_node = 36
107-
else:
108-
self.num_tasks = 576
109-
self.num_tasks_per_node = 36
110-
44+
@rfm.parameterized_test(*([variant, arch]
45+
for variant in ['prod', 'maint']
46+
for arch in ['CPU', 'GPU']))
47+
class AmberCheck(AmberBaseCheck):
48+
def __init__(self, variant, arch):
49+
super().__init__('mdin.%s' % arch, 'amber.out')
50+
if arch == 'GPU':
51+
self.valid_systems = ['daint:gpu', 'dom:gpu']
52+
self.executable = 'pmemd.cuda.MPI'
53+
self.reference = {
54+
'dom:gpu': {
55+
'perf': (30.0, -0.05, None)
56+
},
57+
'daint:gpu': {
58+
'perf': (30.0, -0.05, None)
59+
},
60+
}
61+
if variant == 'prod':
62+
self.descr = 'Amber parallel GPU production check'
63+
self.tags |= {'production'}
64+
elif variant == 'maint':
65+
self.descr = 'Amber parallel GPU maintenance check'
66+
self.tags |= {'maintenance'}
67+
elif arch == 'CPU':
68+
self.valid_systems = ['daint:mc', 'dom:mc']
69+
if variant == 'prod':
70+
self.descr = 'Amber parallel CPU production check'
71+
self.tags |= {'production'}
72+
self.executable = 'pmemd.MPI'
73+
self.strict_check = False
74+
if self.current_system.name == 'dom':
75+
self.num_tasks = 216
76+
self.num_tasks_per_node = 36
77+
else:
78+
self.num_tasks = 576
79+
self.num_tasks_per_node = 36
80+
81+
self.reference = {
82+
'dom:mc': {
83+
'perf': (8.0, -0.05, None)
84+
},
85+
'daint:mc': {
86+
'perf': (10.7, -0.25, None)
87+
},
88+
}
11189

112-
def _get_checks(**kwargs):
113-
return [AmberGPUProdCheck(**kwargs), AmberGPUMaintCheck(**kwargs),
114-
AmberCPUCheck(**kwargs)]
Lines changed: 18 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,37 @@
11
import os
22

3+
import reframe as rfm
34
import reframe.utility.sanity as sn
4-
from reframe.core.pipeline import RunOnlyRegressionTest
55

66

7-
class CPMDCheck(RunOnlyRegressionTest):
8-
def __init__(self, **kwargs):
9-
super().__init__('cpmd_cpu_check', os.path.dirname(__file__), **kwargs)
7+
@rfm.simple_test
8+
class CPMDCheck(rfm.RunOnlyRegressionTest):
9+
def __init__(self):
10+
super().__init__()
1011
self.descr = 'CPMD check (C4H6 metadynamics)'
12+
self.maintainers = ['AJ', 'LM']
13+
self.tags = {'production'}
14+
1115
self.valid_systems = ['daint:gpu', 'dom:gpu']
1216
self.valid_prog_environs = ['PrgEnv-intel']
17+
self.modules = ['CPMD']
1318
self.executable = 'cpmd.x'
1419
self.executable_opts = ['ana_c4h6.in > stdout.txt']
20+
self.readonly_files = ['ana_c4h6.in', 'C_MT_BLYP', 'H_MT_BLYP']
1521
if self.current_system.name == 'dom':
1622
self.num_tasks = 9
1723
else:
1824
self.num_tasks = 16
19-
2025
self.num_tasks_per_node = 1
2126
self.use_multithreading = True
22-
27+
self.strict_check = False
28+
self.extra_resources = {
29+
'switches': {
30+
'num_switches': 1
31+
}
32+
}
33+
# OpenMP version of CPMD segfaults
34+
# self.variables = { 'OMP_NUM_THREADS' : '8' }
2335
energy = sn.extractsingle(
2436
r'CLASSICAL ENERGY\s+-(?P<result>\S+)',
2537
'stdout.txt', 'result', float)
@@ -40,20 +52,3 @@ def __init__(self, **kwargs):
4052
},
4153
}
4254

43-
self.modules = ['CPMD']
44-
self.readonly_files = ['ana_c4h6.in', 'C_MT_BLYP', 'H_MT_BLYP']
45-
# OpenMP version of CPMD segfaults
46-
# self.variables = { 'OMP_NUM_THREADS' : '8' }
47-
48-
self.maintainers = ['AJ', 'LM']
49-
self.tags = {'production'}
50-
self.strict_check = False
51-
self.extra_resources = {
52-
'switches': {
53-
'num_switches': 1
54-
}
55-
}
56-
57-
58-
def _get_checks(**kwargs):
59-
return [CPMDCheck(**kwargs)]
Lines changed: 25 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,49 @@
11
import os
22

3+
import reframe as rfm
34
import reframe.utility.sanity as sn
4-
from reframe.core.pipeline import RunOnlyRegressionTest
55

66

7-
class EspressoBaseCheck(RunOnlyRegressionTest):
8-
def __init__(self, variant, **kwargs):
9-
super().__init__('quantum_espresso_%s_check' % variant,
10-
os.path.dirname(__file__), **kwargs)
11-
self.descr = 'Quantum Espresso check (%s)' % variant
12-
self.valid_prog_environs = ['PrgEnv-intel']
13-
self.modules = ['QuantumESPRESSO']
7+
@rfm.simple_test
8+
class QECheck(rfm.RunOnlyRegressionTest):
9+
def __init__(self):
10+
super().__init__()
11+
self.descr = 'Quantum Espresso CPU check'
12+
self.maintainers = ['AK', 'LM']
13+
self.tags = {'scs', 'production'}
1414
self.sourcesdir = os.path.join(self.current_system.resourcesdir,
1515
'Espresso')
16+
17+
self.valid_systems = ['daint:mc', 'dom:mc']
18+
self.valid_prog_environs = ['PrgEnv-intel']
19+
self.modules = ['QuantumESPRESSO']
1620
self.executable = 'pw.x'
17-
self.executable_opts = '-in ausurf.in'.split()
18-
energy = sn.extractsingle(r'!\s+total energy\s+=\s+(?P<energy>\S+) Ry',
19-
self.stdout, 'energy', float)
20-
self.sanity_patterns = sn.all([
21-
sn.assert_found(r'convergence has been achieved', self.stdout),
22-
sn.assert_reference(energy, -11427.09017162, -1e-10, 1e-10)])
23-
self.perf_patterns = {
24-
'sec': sn.extractsingle(r'electrons :\s+(?P<sec>\S+)s CPU ',
25-
self.stdout, 'sec', float)
26-
}
27-
self.use_multithreading = True
21+
self.executable_opts = ['-in', 'ausurf.in']
2822
if self.current_system.name == 'dom':
2923
self.num_tasks = 216
3024
self.num_tasks_per_node = 36
3125
else:
3226
self.num_tasks = 576
3327
self.num_tasks_per_node = 36
3428

35-
self.maintainers = ['AK', 'LM']
36-
self.strict_check = False
29+
self.use_multithreading = True
3730
self.extra_resources = {
3831
'switches': {
3932
'num_switches': 1
4033
}
4134
}
4235

43-
44-
class EspressoCPUProdCheck(EspressoBaseCheck):
45-
def __init__(self, **kwargs):
46-
super().__init__('cpu', **kwargs)
47-
self.valid_systems = ['daint:mc', 'dom:mc']
48-
self.tags = {'scs', 'production'}
49-
36+
self.strict_check = False
37+
energy = sn.extractsingle(r'!\s+total energy\s+=\s+(?P<energy>\S+) Ry',
38+
self.stdout, 'energy', float)
39+
self.sanity_patterns = sn.all([
40+
sn.assert_found(r'convergence has been achieved', self.stdout),
41+
sn.assert_reference(energy, -11427.09017162, -1e-10, 1e-10)
42+
])
43+
self.perf_patterns = {
44+
'sec': sn.extractsingle(r'electrons :\s+(?P<sec>\S+)s CPU ',
45+
self.stdout, 'sec', float)
46+
}
5047
self.reference = {
5148
'dom:mc': {
5249
'sec': (159.0, None, 0.05),
@@ -56,33 +53,3 @@ def __init__(self, **kwargs):
5653
},
5754
}
5855

59-
60-
class EspressoGPUCheck(EspressoBaseCheck):
61-
def __init__(self, **kwargs):
62-
super().__init__('gpu', **kwargs)
63-
64-
self.executable = 'pw-gpu.x'
65-
self.valid_systems = ['daint:gpu', 'dom:gpu']
66-
67-
self.use_multithreading = True
68-
if self.current_system.name == 'dom':
69-
self.num_tasks = 72
70-
self.num_tasks_per_node = 12
71-
else:
72-
self.num_tasks = 192
73-
self.num_tasks_per_node = 12
74-
75-
self.reference = {
76-
'dom:gpu': {
77-
# FIXME: Update this value as soon as GPU version is working
78-
'sec': (0.097, None, 0.15),
79-
},
80-
'daint:gpu': {
81-
# FIXME: Update this value as soon as GPU version is working
82-
'sec': (0.097, None, 0.15),
83-
},
84-
}
85-
86-
87-
def _get_checks(**kwargs):
88-
return [EspressoCPUProdCheck(**kwargs)]

0 commit comments

Comments
 (0)