From f03af539c9d624d0263ebba0114592ef3d906ff0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Jul 2024 16:54:15 +0000 Subject: [PATCH 001/128] Bump setuptools from 59.6.0 to 70.0.0 Bumps [setuptools](https://github.com/pypa/setuptools) from 59.6.0 to 70.0.0. - [Release notes](https://github.com/pypa/setuptools/releases) - [Changelog](https://github.com/pypa/setuptools/blob/main/NEWS.rst) - [Commits](https://github.com/pypa/setuptools/compare/v59.6.0...v70.0.0) --- updated-dependencies: - dependency-name: setuptools dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 6d4b5c79dd..ef8bade305 100644 --- a/requirements.txt +++ b/requirements.txt @@ -21,6 +21,6 @@ semver==2.13.0; python_version == '3.6' semver==3.0.2; python_version >= '3.7' setuptools==59.6.0; python_version == '3.6' setuptools==68.0.0; python_version == '3.7' -setuptools==70.1.1; python_version >= '3.8' +setuptools==70.0.0; python_version >= '3.8' wcwidth==0.2.13 #+pygelf%pygelf==0.4.0 From 0b3df639c5c4cea9da1d66134f8c006112288817 Mon Sep 17 00:00:00 2001 From: Vasileios Karakasis Date: Tue, 16 Jul 2024 10:20:59 +0200 Subject: [PATCH 002/128] Revert "Bump setuptools from 70.1.1 to 70.0.0" --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index ef8bade305..6d4b5c79dd 100644 --- a/requirements.txt +++ b/requirements.txt @@ -21,6 +21,6 @@ semver==2.13.0; python_version == '3.6' semver==3.0.2; python_version >= '3.7' setuptools==59.6.0; python_version == '3.6' setuptools==68.0.0; python_version == '3.7' -setuptools==70.0.0; python_version >= '3.8' +setuptools==70.1.1; python_version >= '3.8' wcwidth==0.2.13 #+pygelf%pygelf==0.4.0 From d85f5471e2ecbc8b988779ceb4a73a77bcc37304 Mon Sep 17 00:00:00 2001 From: Vasileios Karakasis Date: Tue, 16 Jul 2024 11:59:32 +0300 Subject: [PATCH 003/128] Update disclaimer on the support of EOL Python versions --- docs/started.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/started.rst b/docs/started.rst index ccfc1f57ba..3ab07c0295 100644 --- a/docs/started.rst +++ b/docs/started.rst @@ -20,8 +20,8 @@ Requirements .. warning:: - Although ReFrame supports Python 3.6, you should note that Python 3.6 has reached its end-of-life and you are advised to use a newer Python version. - ReFrame installations on Python 3.6 may use out-of-date dependencies due to incompatibilities of their newer versions with Python 3.6. + Although ReFrame supports Python 3.6 and 3.7, you should note that these Python versions have reached end-of-life and you are strongly advised to use a newer version. + ReFrame installations on these Python versions may use out-of-date dependencies due to incompatibilities. Getting the Framework From 16ea44250248e5ae900c25089f9a24d38b0cfd20 Mon Sep 17 00:00:00 2001 From: crivella Date: Fri, 12 Jul 2024 16:08:17 +0200 Subject: [PATCH 004/128] Added benchmark tests for MetalWalls --- hpctestlib/sciapps/metalwalls/benchmarks.py | 267 ++++++++++++++++++++ 1 file changed, 267 insertions(+) create mode 100644 hpctestlib/sciapps/metalwalls/benchmarks.py diff --git a/hpctestlib/sciapps/metalwalls/benchmarks.py b/hpctestlib/sciapps/metalwalls/benchmarks.py new file mode 100644 index 0000000000..450a06d877 --- /dev/null +++ b/hpctestlib/sciapps/metalwalls/benchmarks.py @@ -0,0 +1,267 @@ +"""ReFrame benchmark for MetalWalls""" +import re +from typing import TypeVar + +import reframe as rfm +import reframe.utility.sanity as sn +from reframe.core.builtins import (performance_function, run_after, run_before, + sanity_function) +from reframe.core.parameters import TestParam as parameter +from reframe.core.variables import TestVar as variable + +R = TypeVar('R') + +address_tpl = ( + 'https://gitlab.com/ampere2/metalwalls/-/raw/{version}/{bench}/{file}' + '?ref_type=tags\&inline=false' +) + +extract_fields = [ + ####### + ('Ions->Atoms Coulomb potential', 'long range', 'I->A Cpot'), + ('Ions->Atoms Coulomb potential', 'k==0', 'I->A Cpot'), + ('Ions->Atoms Coulomb potential', 'short range', 'I->A Cpot'), + + ####### + ('Atoms->Atoms Coulomb potential', 'long range', 'A->A Cpot'), + ('Atoms->Atoms Coulomb potential', 'k==0', 'A->A Cpot'), + ('Atoms->Atoms Coulomb potential', 'short range', 'A->A Cpot'), + ('Atoms->Atoms Coulomb potential', 'self', 'A->A Cpot'), + + ####### + ('Atoms->Atoms Coulomb grad Q', 'long range', 'A->A gradQ'), + ('Atoms->Atoms Coulomb grad Q', 'k==0', 'A->A gradQ'), + ('Atoms->Atoms Coulomb grad Q', 'short range', 'A->A gradQ'), + ('Atoms->Atoms Coulomb grad Q', 'self', 'A->A gradQ'), + + ####### + ('Ions Coulomb forces', 'long range', 'Ions Cfrc'), + ('Ions Coulomb forces', 'k==0', 'Ions Cfrc'), + ('Ions Coulomb forces', 'short range', 'Ions Cfrc'), + ('Ions Coulomb forces', 'intramolecular', 'Ions Cfrc'), + + ####### + ('Ions Coulomb potential', 'long range', 'Ions Cpot'), + ('Ions Coulomb potential', 'k==0', 'Ions Cpot'), + ('Ions Coulomb potential', 'short range', 'Ions Cpot'), + ('Ions Coulomb potential', 'intramolecular', 'Ions Cpot'), + ('Ions Coulomb potential', 'self', 'Ions Cpot'), + + ####### + ( + 'Ions Coulomb electric field (due to charges)', + 'long range', + 'Ions Cfield(charges)' + ), + ( + 'Ions Coulomb electric field (due to charges)', + 'k==0', + 'Ions Cfield(charges)' + ), + ( + 'Ions Coulomb electric field (due to charges)', + 'short range', + 'Ions Cfield(charges)' + ), + ( + 'Ions Coulomb electric field (due to charges)', + 'intramolecular', + 'Ions Cfield(charges)' + ), + + ####### + ( + 'Ions Coulomb electric field (due to dipoles)', + 'long range', + 'Ions Cfield(dipoles)' + ), + ( + 'Ions Coulomb electric field (due to dipoles)', + 'k==0', + 'Ions Cfield(dipoles)' + ), + ( + 'Ions Coulomb electric field (due to dipoles)', + 'short range', + 'Ions Cfield(dipoles)' + ), + ( + 'Ions Coulomb electric field (due to dipoles)', + 'intramolecular', + 'Ions Cfield(dipoles)' + ), + ( + 'Ions Coulomb electric field (due to dipoles)', + 'self', + 'Ions Cfield(dipoles)' + ), + + ####### + ('Ions Coulomb electric field gradient', 'long range', 'Ions Cfield grad'), + ('Ions Coulomb electric field gradient', 'short range', 'Ions Cfield grad'), + ('Ions Coulomb electric field gradient', 'self', 'Ions Cfield grad'), + + ####### + ('Ions Coulomb gradient mu', 'long range', 'Ions C mu_grad'), + ('Ions Coulomb gradient mu', 'k==0', 'Ions C mu_grad'), + ('Ions Coulomb gradient mu', 'short range', 'Ions C mu_grad'), + ('Ions Coulomb gradient mu', 'self', 'Ions C mu_grad'), + + ####### + ('Rattle', 'positions', 'Rattle'), + ('Rattle', 'velocities', 'Rattle'), + + ####### + ('van der Waals', 'vdW forces', 'van der Waals'), + ('van der Waals', 'vdW potential', 'van der Waals'), + + ####### + ('Intramolecular', 'Intramolecular forces', 'Intramolecular'), + ('Intramolecular', 'Intramolecular potential', 'Intramolecular'), + + ####### + ('Additional degrees', 'Electrode charge computation', 'Deg of freedom'), + ('Additional degrees', 'Inversion of the matrix', 'Deg of freedom'), + ('Additional degrees', 'One matrix-vector product', 'Deg of freedom'), + ('Additional degrees', 'Melt dipoles computation', 'Deg of freedom'), + ('Additional degrees', 'Inversion of the matrix', 'Deg of freedom'), + ('Additional degrees', 'One matrix-vector product', 'Deg of freedom'), + ('Additional degrees', 'AIM DOFs computation', 'Deg of freedom'), + + ####### + ('Diagnostics', 'diagnostics computations', 'Diagnostics'), + ('Diagnostics', 'IO', 'Diagnostics'), +] + +@rfm.simple_test +class MetalWallsCheck(rfm.RunOnlyRegressionTest): + """MetalWalls benchmark test. + + `MetalWalls `__ is a molecular + dynamics code dedicated to the modelling of electrochemical systems. + Its main originality is the inclusion of a series of methods allowing to + apply a constant potential within the electrode materials. + + The benchmarks consist of a set of different inputs files that vary in the + number of atoms and the type of simulation performed. + They can be found in the following repository, which is also versioned: + https://gitlab.com/ampere2/metalwalls/. + + """ + + #: The name of the output files to keep. + #: + #: :type: :class:`List[str]` + #: :default: ``'run.out'`` + keep_files = ['run.out', ] + + #: The version of the benchmark suite to use. + #: + #: :type: :class:`str` + #: :default: ``'21.06.1'`` + benchmark_version = variable(str, value='21.06.1', loggable=True) + + #: Collect and report detailed performance metrics. + #: + #: :type: :class:`bool` + #: :default: ``False`` + debug_metrics = variable(bool, value=False, loggable=True) + + #: Parameter pack encoding the benchmark information. + #: + #: The first element of the tuple refers to the benchmark name, + #: + #: :type: `Tuple[str,]` + #: :values: + benchmark_info = parameter([ + ('hackathonGPU/benchmark',), + ('hackathonGPU/benchmark2',), + ('hackathonGPU/benchmark3',), + ('hackathonGPU/benchmark4',), + ('hackathonGPU/benchmark5',), + ('hackathonGPU/benchmark6',), + ], fmt=lambda x: x[0], loggable=True) + + @run_after('init') + def prepare_test(self): + """Hook to the set the downloading of the pseudo-potentials""" + self.__bench, = self.benchmark_info + self.descr = f'MetalWalls {self.__bench} benchmark' + files_addresses = [ + address_tpl.format( + version=self.benchmark_version, + bench=self.__bench, + file=_ + ) for _ in ['data.inpt', 'runtime.inpt'] + ] + self.prerun_cmds += [ + f"curl -LJO '{_}'" for _ in files_addresses + ] + + @performance_function('s') + def total_elapsed_time(self): + """Extract the total elapsed time from the output file""" + return sn.extractsingle( + r'Total elapsed time:\s+(?P