Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 24 additions & 9 deletions tests/apps/lammps/ethanol.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
"""ReFrame script for LAMMPS ethanol test"""

import os

import reframe as rfm
import reframe.utility.sanity as sn

from lammps_base import LAMMPSBase
from lammps_base import BuildLAMMPS, LAMMPSBase


class LAMMPSBaseEthanol(LAMMPSBase):
Expand All @@ -22,39 +25,51 @@ class LAMMPSBaseEthanol(LAMMPSBase):
value={
"archer2:compute": 128,
"archer2-tds:compute": 128,
"cirrus:compute": 36,
"cirrus:compute-gpu": 40,
},
)

ethanol_energy_reference = 537394.35

reference = {
"cirrus:compute": {"energy": (ethanol_energy_reference, -0.01, 0.01, "kJ/mol")},
"cirrus:compute-gpu": {"energy": (ethanol_energy_reference, -0.01, 0.01, "kJ/mol")},
"archer2:compute": {"energy": (ethanol_energy_reference, -0.01, 0.01, "kJ/mol")},
"archer2-tds:compute": {"energy": (ethanol_energy_reference, -0.01, 0.01, "kJ/mol")},
}

@performance_function("kJ/mol", perf_key="energy")
def extract_energy(self):
"""Extract value of system energy for performance check"""
return sn.extractsingle(
r"\s+11000\s+\S+\s+\S+\s+(?P<energy>\S+)",
self.keep_files[0],
"energy",
float,
item=-1,
)


@rfm.simple_test
class LAMMPSEthanolCPU(LAMMPSBaseEthanol):
"""ReFrame LAMMPS Ethanol test for performance checks"""

valid_systems = ["archer2:compute", "cirrus:compute"]
valid_systems = ["archer2:compute"]
descr = LAMMPSBaseEthanol.descr + " -- CPU"
stream_binary = fixture(BuildLAMMPS, scope="environment")

reference["archer2:compute"]["performance"] = (16.800, -0.05, None, "ns/day")
reference["archer2-tds:compute"]["performance"] = (16.800, -0.05, None, "ns/day")
reference["cirrus:compute"]["performance"] = (4.8, -0.05, None, "ns/day")
reference["archer2:compute"]["performance"] = (11.250, -0.05, None, "ns/day")
reference["archer2-tds:compute"]["performance"] = (11.250, -0.05, None, "ns/day")

@run_after("init")
def setup_nnodes(self):
"""sets up number of tasks per node"""
if self.current_system.name in ["archer2"]:
self.num_tasks_per_node = 128
elif self.current_system.name in ["cirrus"]:
self.num_tasks_per_node = 36

@run_after("setup")
def set_executable(self):
"""sets up executable"""
self.executable = os.path.join(self.stream_binary.build_system.builddir, "lmp")

@run_before("run")
def setup_resources(self):
Expand Down
97 changes: 97 additions & 0 deletions tests/apps/lammps/exaalt.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
"""ReFrame script for lammps dipole test"""

import os

import reframe as rfm
import reframe.utility.sanity as sn

from lammps_base import BuildLAMMPS, LAMMPSBase


class LAMMPSBaseExaalt(LAMMPSBase):
"""ReFrame LAMMPS Base class for Exaalt tests"""

valid_systems = ["archer2:compute"]
stream_binary = fixture(BuildLAMMPS, scope="environment")
num_cpus_per_task = 1
env_vars = {"OMP_NUM_THREADS": str(num_cpus_per_task)}

cores = variable(
dict,
value={
"archer2:compute": 128,
},
)

reference = {
"archer2:compute": {
"energy": (-8.7467248, -0.001, 0.001, "kJ/mol"),
"performance": (0.007, -0.1, None, "ns/day"),
},
}

@run_after("init")
def setup_nnodes(self):
"""sets up number of nodes"""
if self.current_system.name in ["archer2"]:
self.num_tasks_per_node = 128

@run_after("setup")
def set_executable(self):
"""sets up executable"""
self.executable = os.path.join(self.stream_binary.build_system.builddir, "lmp")

@run_before("run")
def setup_resources(self):
"""sets up number of tasks"""
self.num_tasks = self.n_nodes * self.cores.get(self.current_partition.fullname, 1)

@performance_function("kJ/mol", perf_key="energy")
def extract_energy(self):
"""Extract value of system energy for performance check"""
return sn.extractsingle(
r"^\s+100\s+\S+\s+\S+\s+\S+\s+(?P<energy>\S+)\s+\S+\s+$",
self.keep_files[0],
"energy",
float,
item=-1,
)


@rfm.simple_test
class LAMMPSExaaltSmall(LAMMPSBaseExaalt):
"""ReFrame LAMMPS small test based on NERSC-10 Exaalt benchmark"""

descr = "Small performance test using NERSC-10 Exaalt LAMMPS benchmark reference run"
tags = {"applications", "performance"}
executable_opts = [
"-in in.snap.test",
"-var snapdir 2J8_W.SNAP",
"-var nx 256",
"-var ny 256",
"-var nz 256",
"-var nsteps 100",
]

n_nodes = 16
time_limit = "30m"


@rfm.simple_test
class LAMMPSExaaltRef(LAMMPSBaseExaalt):
"""ReFrame LAMMPS largescale test based on NERSC-10 Exaalt benchmark"""

descr = "Largescale performance test using NERSC-10 Exaalt LAMMPS benchmark reference run"
tags = {"largescale", "applications", "performance"}

executable_opts = [
"-in in.snap.test",
"-var snapdir 2J8_W.SNAP",
"-var nx 1024",
"-var ny 1024",
"-var nz 1024",
"-var nsteps 100",
]

n_nodes = 1024
time_limit = "30m"
54 changes: 0 additions & 54 deletions tests/apps/lammps/exaalt_ref.py

This file was deleted.

51 changes: 0 additions & 51 deletions tests/apps/lammps/exaalt_small.py

This file was deleted.

57 changes: 45 additions & 12 deletions tests/apps/lammps/lammps_base.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,56 @@
"""ReFrame base module for LAMMPS tests"""

import os

import reframe as rfm
import reframe.utility.sanity as sn


class BuildLAMMPS(rfm.CompileOnlyRegressionTest):
"""Compile LAMMPS"""

build_system = "CMake"
modules = ["cpe", "cray-fftw", "cmake", "eigen"]
sourcesdir = "https://github.com/lammps/lammps.git"
sourcepath = "src"
prebuild_cmds = ["git checkout stable_29Aug2024_update2"]
local = True
build_locally = False

@run_before("compile")
def prepare_build(self):
"""Prepare build"""
self.build_system.max_concurrency = 8
self.build_system.builddir = f"{self.stagedir}/lammps_build"
# Equivalent to:
# export LD_LIBRARY_PATH=$CRAY_LD_LIBRARY_PATH:$LD_LIBRARY_PATH
self.env_vars["LD_LIBRARY_PATH"] = os.getenv("CRAY_LD_LIBRARY_PATH") + ":" + os.getenv("LD_LIBRARY_PATH")
self.build_system.config_opts = [
f"-C {self.stagedir}/cmake/presets/most.cmake",
"-D BUILD_MPI=on",
"-D BUILD_SHARED_LIBS=yes",
"-D CMAKE_CXX_COMPILER=CC",
'-D CMAKE_CXX_FLAGS="-O2" ',
f"-D CMAKE_INSTALL_PREFIX={self.stagedir}/install",
"-D EIGEN3_INCLUDE_DIR=/work/y07/shared/libs/core/eigen/3.4.0/include",
"-D FFT=FFTW3",
"-D FFTW3_INCLUDE_DIR=${FFTW_INC}",
"-D FFTW3_LIBRARY=${FFTW_DIR}/libfftw3_mpi.so",
"-D LAMMPS_SIZES=bigbig",
f"{self.stagedir}/cmake",
]

@sanity_function
def sanity_executable_exists(self):
"""Check that the executable was created"""
build_dir = f"{self.stagedir}/lammps_build"
return sn.path_exists(os.path.join(build_dir, "lmp"))


class LAMMPSBase(rfm.RunOnlyRegressionTest):
"""ReFrame base class for LAMMPS tests"""

valid_prog_environs = ["PrgEnv-gnu", "intel", "nvidia-mpi", "rocm-PrgEnv-cray"]
valid_prog_environs = ["PrgEnv-cray", "intel", "nvidia-mpi", "rocm-PrgEnv-cray"]
executable = "lmp"
extra_resources = {"qos": {"qos": "standard"}}

Expand All @@ -22,17 +65,6 @@ def assert_finished(self):
"""Sanity check that simulation finished successfully"""
return sn.assert_found(r"Total wall time", self.keep_files[0])

@performance_function("kJ/mol", perf_key="energy")
def extract_energy(self):
"""Extract value of system energy for performance check"""
return sn.extractsingle(
r"\s+11000\s+\S+\s+\S+\s+(?P<energy>\S+)",
self.keep_files[0],
"energy",
float,
item=-1,
)

@performance_function("ns/day", perf_key="performance")
def extract_perf(self):
"""Extract performance value to compare with reference value"""
Expand All @@ -41,4 +73,5 @@ def extract_perf(self):
self.keep_files[0],
"perf",
float,
-1,
)