From 32d34d1f3133ca6dbe10636c69304e5c9d396ce9 Mon Sep 17 00:00:00 2001 From: Peter Scheibel Date: Tue, 21 Jan 2025 16:48:58 -0800 Subject: [PATCH 1/2] llnl-sierra system config: pkg_spec needs to be a compiler name spack recognizes (#555) * pkg_spec needs to be a compiler name spack recognizes * fix similar problem for xl-gcc --- systems/llnl-sierra/system.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/systems/llnl-sierra/system.py b/systems/llnl-sierra/system.py index 2af361714..31ee689a8 100644 --- a/systems/llnl-sierra/system.py +++ b/systems/llnl-sierra/system.py @@ -298,11 +298,17 @@ def sw_description(self): will fail if these variables are not defined though, so for now they are still generated (but with more-generic values). """ + compiler_id = self.spec.variants["compiler"][0] + if compiler_id == "clang-ibm": + compiler_id = "clang" + elif compiler_id == "xl-gcc": + compiler_id = "xl" + return f"""\ software: packages: default-compiler: - pkg_spec: "{self.spec.variants["compiler"][0]}" + pkg_spec: "{compiler_id}" default-mpi: pkg_spec: spectrum-mpi compiler-xl: From 9c72b1f95a8b35fdfb73221b42c04286df2a4c98 Mon Sep 17 00:00:00 2001 From: august-knox <112430443+august-knox@users.noreply.github.com> Date: Wed, 22 Jan 2025 09:50:38 -0800 Subject: [PATCH 2/2] RAJAPerf experiment class (#524) * initial progress on raja-perf * adding complete experiment.py class * adding dryrun * lint * lint * Fix caliper * adding tioga and ruby dryruns --------- Co-authored-by: august-knox Co-authored-by: Riyaz Haque --- .github/workflows/run.yml | 37 ++++++++++++++ experiments/raja-perf/experiment.py | 77 +++++++++++++++++++++++++++++ repo/raja-perf/package.py | 9 ++-- systems/llnl-elcapitan/system.py | 2 +- 4 files changed, 119 insertions(+), 6 deletions(-) create mode 100644 experiments/raja-perf/experiment.py diff --git a/.github/workflows/run.yml b/.github/workflows/run.yml index 2616e1618..c1e8a2f76 100644 --- a/.github/workflows/run.yml +++ b/.github/workflows/run.yml @@ -598,6 +598,43 @@ jobs: --disable-logger \ workspace setup --dry-run + - name: Dry run dynamic raja-perf/mpi with dynamic CTS ruby + run: | + ./bin/benchpark experiment init --dest=raja-perf raja-perf + ./bin/benchpark setup ./raja-perf ./ruby-system workspace/ + system_id=$(./bin/benchpark system id ./ruby-system) + . workspace/setup.sh + ramble \ + --workspace-dir "workspace/raja-perf/$system_id/workspace" \ + --disable-progress-bar \ + --disable-logger \ + workspace setup --dry-run + + - name: Dry run dynamic raja-perf/mpi with dynamic CTS tioga + run: | + ./bin/benchpark experiment init --dest=raja-perf-tioga raja-perf + ./bin/benchpark setup ./raja-perf-tioga ./tioga-system workspace/ + system_id=$(./bin/benchpark system id ./tioga-system) + . workspace/setup.sh + ramble \ + --workspace-dir "workspace/raja-perf-tioga/$system_id/workspace" \ + --disable-progress-bar \ + --disable-logger \ + workspace setup --dry-run + + - name: Dry run dynamic raja-perf/mpi with dynamic CTS lassen + run: | + ./bin/benchpark experiment init --dest=raja-perf-lassen raja-perf + ./bin/benchpark system init --dest=lassen-clang llnl-sierra compiler=clang + ./bin/benchpark setup ./raja-perf-lassen ./lassen-clang workspace/ + system_id=$(./bin/benchpark system id ./lassen-clang) + . workspace/setup.sh + ramble \ + --workspace-dir "workspace/raja-perf-lassen/$system_id/workspace" \ + --disable-progress-bar \ + --disable-logger \ + workspace setup --dry-run + - name: Dry run dynamic genesis/openmp with dynamic CTS ruby run: | system_id=$(./bin/benchpark system id ./ruby-system) diff --git a/experiments/raja-perf/experiment.py b/experiments/raja-perf/experiment.py new file mode 100644 index 000000000..3861a3750 --- /dev/null +++ b/experiments/raja-perf/experiment.py @@ -0,0 +1,77 @@ +# Copyright 2023 Lawrence Livermore National Security, LLC and other +# Benchpark Project Developers. See the top-level COPYRIGHT file for details. +# +# SPDX-License-Identifier: Apache-2.0 + +from benchpark.directives import variant +from benchpark.experiment import Experiment +from benchpark.scaling import StrongScaling +from benchpark.openmp import OpenMPExperiment +from benchpark.cuda import CudaExperiment +from benchpark.rocm import ROCmExperiment +from benchpark.expr.builtin.caliper import Caliper + + +class RajaPerf( + Experiment, + StrongScaling, + CudaExperiment, + ROCmExperiment, + OpenMPExperiment, + Caliper, +): + variant( + "workload", + default="suite", + description="base Rajaperf suite or other problem", + ) + + variant( + "version", + default="develop", + description="app version", + ) + + def compute_applications_section(self): + + n_resources = {"n_ranks": 1} + + if self.spec.satisfies("+single_node"): + for pk, pv in n_resources.items(): + n_resources = pv + + elif self.spec.satisfies("+strong"): + scaled_variables = self.generate_strong_scaling_params( + {tuple(n_resources.keys()): list(n_resources.values())}, + int(self.spec.variants["scaling-factor"][0]), + int(self.spec.variants["scaling-iterations"][0]), + ) + n_resources = scaled_variables["n_ranks"] + + if self.spec.satisfies("+cuda") or self.spec.satisfies("+rocm"): + self.add_experiment_variable("n_gpus", n_resources, True) + elif self.spec.satisfies("+openmp"): + self.add_experiment_variable("n_ranks", n_resources, True) + self.add_experiment_variable("n_threads_per_proc", 1, True) + else: + self.add_experiment_variable("n_ranks", n_resources, True) + + def compute_spack_section(self): + # get package version + app_version = self.spec.variants["version"][0] + + system_specs = {} + system_specs["compiler"] = "default-compiler" + system_specs["mpi"] = "default-mpi" + + if self.spec.satisfies("+cuda"): + system_specs["cuda_version"] = "{default_cuda_version}" + system_specs["cuda_arch"] = "{cuda_arch}" + if self.spec.satisfies("+rocm"): + system_specs["rocm_arch"] = "{rocm_arch}" + + self.add_spack_spec(system_specs["mpi"]) + + self.add_spack_spec( + self.name, [f"raja-perf@{app_version}", system_specs["compiler"]] + ) diff --git a/repo/raja-perf/package.py b/repo/raja-perf/package.py index 8558b47bd..a3353a3b3 100644 --- a/repo/raja-perf/package.py +++ b/repo/raja-perf/package.py @@ -171,9 +171,8 @@ class RajaPerf(CachedCMakePackage, CudaPackage, ROCmPackage): conflicts("~openmp", when="+openmp_target", msg="OpenMP target requires OpenMP") conflicts("+cuda", when="+openmp_target", msg="Cuda may not be activated when openmp_target is ON") - depends_on("caliper@master",when="+caliper") - depends_on("caliper@master +cuda",when="+caliper +cuda") - depends_on("caliper@master +rocm",when="+caliper +rocm") + depends_on("caliper", when="+caliper") + depends_on("adiak@0.4:", when="+caliper") depends_on("mpi", when="+mpi") @@ -352,12 +351,12 @@ def initconfig_package_entries(self): entries.append(cmake_cache_option("ENABLE_TESTS", not "tests=none" in spec or self.run_tests)) entries.append(cmake_cache_option("RAJA_PERFSUITE_USE_CALIPER","+caliper" in spec)) - if "caliper" in self.spec: + if "+caliper" in self.spec: entries.append(cmake_cache_path("caliper_DIR", spec["caliper"].prefix+"/share/cmake/caliper/")) entries.append(cmake_cache_path("adiak_DIR", spec["adiak"].prefix+"/lib/cmake/adiak/")) return entries def cmake_args(self): - options = [] + options = [f"-DMPI_CXX_LINK_FLAGS='{self.spec['mpi'].libs.ld_flags}'"] return options diff --git a/systems/llnl-elcapitan/system.py b/systems/llnl-elcapitan/system.py index e19ed9484..1f4b4fb30 100644 --- a/systems/llnl-elcapitan/system.py +++ b/systems/llnl-elcapitan/system.py @@ -120,7 +120,7 @@ def compiler_weighting_cfg(self): packages: all: require: - - one_of: ["%cce", "@:"] + - one_of: ["%cce", "%gcc"] """ elif compiler == "gcc": return """\