diff --git a/.github/workflows/run.yml b/.github/workflows/run.yml index e95b8ec1d..b5617ebcb 100644 --- a/.github/workflows/run.yml +++ b/.github/workflows/run.yml @@ -298,6 +298,7 @@ jobs: --disable-progress-bar \ --disable-logger \ workspace setup --dry-run + dynamicdryrunexperiments: runs-on: ubuntu-22.04 steps: @@ -731,6 +732,33 @@ jobs: system_name: tioga system_spec: llnl-elcapitan rocm=5.5.1 compiler=cce +gtl + - name: gpcNet/mpi ruby llnl-cluster cluster=ruby compiler=intel + uses: ./.github/actions/dynamic-dry-run + with: + benchmark_name: gpcnet + benchmark_mode: mpi + benchmark_spec: gpcnet + system_name: ruby + system_spec: llnl-cluster cluster=ruby compiler=intel + + - name: gpcNet/mpi lassen llnl-sierra cuda=11-8-0 compiler=clang-ibm + uses: ./.github/actions/dynamic-dry-run + with: + benchmark_name: gpcnet + benchmark_mode: mpi + benchmark_spec: gpcnet + system_name: lassen + system_spec: llnl-sierra cuda=11-8-0 compiler=clang-ibm + + - name: gpcNet/mpi tioga llnl-elcapitan rocm=5.5.1 compiler=cce +gtl + uses: ./.github/actions/dynamic-dry-run + with: + benchmark_name: gpcnet + benchmark_mode: mpi + benchmark_spec: gpcnet + system_name: tioga + system_spec: llnl-elcapitan rocm=5.5.1 compiler=cce +gtl + - name: hpl/mpi caliper=mpi,time tioga llnl-elcapitan rocm=5.5.1 compiler=cce +gtl blas=intel-oneapi-mkl uses: ./.github/actions/dynamic-dry-run with: @@ -783,4 +811,4 @@ jobs: benchmark_mode: mpi benchmark_spec: stream caliper=mpi,time system_name: tioga - system_spec: llnl-elcapitan rocm=5.5.1 compiler=cce + system_spec: llnl-elcapitan rocm=5.5.1 compiler=cce \ No newline at end of file diff --git a/experiments/gpcnet/experiment.py b/experiments/gpcnet/experiment.py new file mode 100644 index 000000000..4df49b45e --- /dev/null +++ b/experiments/gpcnet/experiment.py @@ -0,0 +1,50 @@ +# 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 + + +class Gpcnet(Experiment, StrongScaling): + variant( + "workload", + default="network_test", + values=("network_test", "network_load_test"), + description="network_test or network_load_test", + ) + + variant( + "version", + default="master", + description="app version", + ) + + def compute_applications_section(self): + # TODO: Replace with conflicts clause + self.add_experiment_variable( + "n_ranks", "{n_nodes}*{sys_cores_per_node}//2", True + ) + if self.spec.satisfies("workload=network_test"): + self.add_experiment_variable("n_nodes", ["2", "4"]) + elif self.spec.satisfies("workload=network_load_test"): + self.add_experiment_variable("n_nodes", "10") + + def compute_spack_section(self): + # get package version + app_version = self.spec.variants["version"][0] + + # get system config options + # TODO: Get compiler/mpi/package handles directly from system.py + system_specs = {} + system_specs["compiler"] = "default-compiler" + system_specs["mpi"] = "default-mpi" + + # empty package_specs value implies external package + self.add_spack_spec(system_specs["mpi"]) + + self.add_spack_spec( + self.name, [f"gpcnet@{app_version} +mpi", system_specs["compiler"]] + ) diff --git a/repo/gpcnet/application.py b/repo/gpcnet/application.py new file mode 100644 index 000000000..6c705c22d --- /dev/null +++ b/repo/gpcnet/application.py @@ -0,0 +1,32 @@ +# 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 + +import sys + +from ramble.appkit import * + + +class Gpcnet(ExecutableApplication): + """GPCNet benchmark""" + name = "GPCNet" + + executable('p1', 'network_test', use_mpi=True) + executable('p2', 'network_load_test', use_mpi=True) + workload('network_test', executables=['p1']) + workload('network_load_test', executables=['p2']) + + figure_of_merit('Avg Multiple Allreduce', + log_file='{experiment_run_dir}/{experiment_name}.out', + fom_regex=r'\|\s+Multiple Allreduce \([0-9]* B\)\s+\|\s+(?P[0-9]+\.[0-9]*)', + group_name='fom', units='MiB/sec') + figure_of_merit('Avg RR Two-sided Lat', + log_file='{experiment_run_dir}/{experiment_name}.out', + fom_regex=r'\|\s+RR Two-sided Lat \([0-9]* B\)\s+\|\s+(?P[0-9]+\.[0-9]*)', + group_name='fom', units='MiB/sec') + figure_of_merit('Avg RR Get Lat', + log_file='{experiment_run_dir}/{experiment_name}.out', + fom_regex=r'\|\s+RR Get Lat \([0-9]* B\)\s+\|\s+(?P[0-9]+\.[0-9]*)', + group_name='fom', units='MiB/sec') + success_criteria('pass', mode='string', match=r'.*', file='{experiment_run_dir}/{experiment_name}.out') diff --git a/repo/gpcnet/package.py b/repo/gpcnet/package.py new file mode 100644 index 000000000..62267da9f --- /dev/null +++ b/repo/gpcnet/package.py @@ -0,0 +1,41 @@ +# 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 spack.package import * + +class Gpcnet(MakefilePackage): + + + tags = ["proxy-app"] + + homepage = "https://codesign.llnl.gov/quicksilver.php" + url = "https://github.com/netbench/GPCNET/archive/refs/tags/1.2.tar.gz" + git = "https://github.com/netbench/GPCNET" + + maintainers("knox10") + + version("master", branch="master") + + variant("mpi", default=False, description="Build with MPI support") + + depends_on("mpi", when="+mpi") + + @property + def build_targets(self): + targets = ["all"] + return targets + + def edit(self, spec, prefix): + makefile = FileFilter("Makefile") + makefile.filter('CC = cc', "CC = {0}".format(spec["mpi"].mpicc)) + + + def install(self, spec, prefix): + mkdir(prefix.bin) + mkdir(prefix.doc) + install("network_test", prefix.bin) + install("network_load_test", prefix.bin) + install("LICENSE", prefix.doc) + install("README.md", prefix.doc)