diff --git a/cscs-checks/apps/quantumespresso/quantumespresso_check.py b/cscs-checks/apps/quantumespresso/quantumespresso_check.py index 56265d7210..fa7a047823 100644 --- a/cscs-checks/apps/quantumespresso/quantumespresso_check.py +++ b/cscs-checks/apps/quantumespresso/quantumespresso_check.py @@ -39,17 +39,43 @@ class QuantumESPRESSOCpuCheck(QuantumESPRESSOCheck): def __init__(self, scale, variant): super().__init__() self.descr = f'QuantumESPRESSO CPU check (version: {scale}, {variant})' - self.valid_systems = ['daint:mc'] + self.valid_systems = ['daint:mc', 'eiger:mc'] self.modules = ['QuantumESPRESSO'] if scale == 'small': self.valid_systems += ['dom:mc'] - self.num_tasks = 216 energy_reference = -11427.09017218 + if self.current_system.name in ['daint', 'dom']: + self.num_tasks = 216 + self.num_tasks_per_node = 36 + elif self.current_system.name == 'eiger': + self.num_tasks = 96 + self.num_tasks_per_node = 16 + self.num_cpus_per_task = 16 + self.num_tasks_per_core = 1 + self.use_multithreading = False + self.variables = { + 'MPICH_OFI_STARTUP_CONNECT': '1', + 'OMP_NUM_THREADS': '8', + 'OMP_PLACES': 'cores', + 'OMP_PROC_BIND': 'close' + } else: - self.num_tasks = 576 energy_reference = -11427.09017152 - - self.num_tasks_per_node = 36 + if self.current_system.name in ['daint']: + self.num_tasks = 576 + self.num_tasks_per_node = 36 + elif self.current_system.name in ['eiger']: + self.num_tasks = 256 + self.num_tasks_per_node = 16 + self.num_cpus_per_task = 16 + self.num_tasks_per_core = 1 + self.use_multithreading = False + self.variables = { + 'MPICH_OFI_STARTUP_CONNECT': '1', + 'OMP_NUM_THREADS': '8', + 'OMP_PLACES': 'cores', + 'OMP_PROC_BIND': 'close' + } energy = sn.extractsingle(r'!\s+total energy\s+=\s+(?P\S+) Ry', self.stdout, 'energy', float) @@ -65,19 +91,23 @@ def __init__(self, scale, variant): 'maint': { 'small': { 'dom:mc': {'time': (115.0, None, 0.05, 's')}, - 'daint:mc': {'time': (115.0, None, 0.10, 's')} + 'daint:mc': {'time': (115.0, None, 0.10, 's')}, + 'eiger:mc': {'time': (66.0, None, 0.10, 's')} }, 'large': { - 'daint:mc': {'time': (115.0, None, 0.10, 's')} + 'daint:mc': {'time': (115.0, None, 0.10, 's')}, + 'eiger:mc': {'time': (53.0, None, 0.10, 's')} } }, 'prod': { 'small': { 'dom:mc': {'time': (115.0, None, 0.05, 's')}, - 'daint:mc': {'time': (115.0, None, 0.10, 's')} + 'daint:mc': {'time': (115.0, None, 0.10, 's')}, + 'eiger:mc': {'time': (66.0, None, 0.10, 's')} }, 'large': { - 'daint:mc': {'time': (115.0, None, 0.10, 's')} + 'daint:mc': {'time': (115.0, None, 0.10, 's')}, + 'eiger:mc': {'time': (53.0, None, 0.10, 's')} } } } @@ -85,6 +115,13 @@ def __init__(self, scale, variant): self.reference = references[variant][scale] self.tags |= {'maintenance' if variant == 'maint' else 'production'} + @rfm.run_before('run') + def set_task_distribution(self): + self.job.options = ['--distribution=block:block'] + + @rfm.run_before('run') + def set_cpu_binding(self): + self.job.launcher.options = ['--cpu-bind=cores'] @rfm.parameterized_test(*([s, v] for s in ['small', 'large']