Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/develop' into pearce8-patch-3
Browse files Browse the repository at this point in the history
  • Loading branch information
Riyaz Haque committed Jan 24, 2025
2 parents 3fc6ef7 + cbe1579 commit 82b78a0
Show file tree
Hide file tree
Showing 8 changed files with 758 additions and 24 deletions.
82 changes: 77 additions & 5 deletions .github/workflows/run.yml
Original file line number Diff line number Diff line change
Expand Up @@ -663,6 +663,18 @@ jobs:
--disable-logger \
workspace setup --dry-run
- name: Dry run dynamic genesis/openmp with dynamic fugaku
run: |
system_id=$(./bin/benchpark system id ./fugaku-system)
./bin/benchpark experiment init --dest=genesis-openmp-fugaku genesis+openmp
./bin/benchpark setup ./genesis-openmp-fugaku ./fugaku-system workspace/
. workspace/setup.sh
ramble \
--workspace-dir workspace/genesis-openmp-fugaku/$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)
Expand All @@ -675,14 +687,74 @@ jobs:
--disable-logger \
workspace setup --dry-run
- name: Dry run dynamic genesis/openmp with dynamic fugaku
- name: Dry run dynamic babelstream/openmp with dynamic CTS tioga
run: |
system_id=$(./bin/benchpark system id ./fugaku-system)
./bin/benchpark experiment init --dest=genesis-openmp-fugaku genesis+openmp
./bin/benchpark setup ./genesis-openmp-fugaku ./fugaku-system workspace/
./bin/benchpark experiment init --dest=babelstream-tioga babelstream +openmp
./bin/benchpark setup ./babelstream-tioga ./tioga-system workspace/
system_id=$(./bin/benchpark system id ./tioga-system)
. workspace/setup.sh
ramble \
--workspace-dir workspace/genesis-openmp-fugaku/$system_id/workspace \
--workspace-dir "workspace/babelstream-tioga/$system_id/workspace" \
--disable-progress-bar \
--disable-logger \
workspace setup --dry-run
- name: Dry run dynamic babelstream/openmp with dynamic CTS sierra
run: |
./bin/benchpark experiment init --dest=babelstream-sierra babelstream +openmp
./bin/benchpark setup ./babelstream-sierra ./sierra-system1 workspace/
system_id=$(./bin/benchpark system id ./sierra-system1)
. workspace/setup.sh
ramble \
--workspace-dir "workspace/babelstream-sierra/$system_id/workspace" \
--disable-progress-bar \
--disable-logger \
workspace setup --dry-run
- name: Dry run dynamic babelstream/openmp with dynamic CTS ruby
run: |
./bin/benchpark experiment init --dest=babelstream babelstream +openmp
./bin/benchpark setup ./babelstream ./ruby-system workspace/
system_id=$(./bin/benchpark system id ./ruby-system)
. workspace/setup.sh
ramble \
--workspace-dir "workspace/babelstream/$system_id/workspace" \
--disable-progress-bar \
--disable-logger \
workspace setup --dry-run
- name: Dry run dynamic lammps/openmp with dynamic tioga
run: |
system_id=$(./bin/benchpark system id ./tioga-system1)
./bin/benchpark experiment init --dest=lammps-openmp-tioga lammps+openmp
./bin/benchpark setup ./lammps-openmp-tioga ./tioga-system1 workspace/
. workspace/setup.sh
ramble \
--workspace-dir workspace/lammps-openmp-tioga/$system_id/workspace \
--disable-progress-bar \
--disable-logger \
workspace setup --dry-run
- name: Dry run dynamic lammps/openmp with dynamic sierra
run: |
system_id=$(./bin/benchpark system id ./sierra-system1)
./bin/benchpark experiment init --dest=lammps-openmp-sierra lammps+openmp
./bin/benchpark setup ./lammps-openmp-sierra ./sierra-system1 workspace/
. workspace/setup.sh
ramble \
--workspace-dir workspace/lammps-openmp-sierra/$system_id/workspace \
--disable-progress-bar \
--disable-logger \
workspace setup --dry-run
- name: Dry run dynamic lammps/openmp with dynamic ruby
run: |
system_id=$(./bin/benchpark system id ./ruby-system)
./bin/benchpark experiment init --dest=lammps-openmp-ruby lammps+openmp
./bin/benchpark setup ./lammps-openmp-ruby ./ruby-system workspace/
. workspace/setup.sh
ramble \
--workspace-dir workspace/lammps-openmp-ruby/$system_id/workspace \
--disable-progress-bar \
--disable-logger \
workspace setup --dry-run
73 changes: 73 additions & 0 deletions experiments/babelstream/experiment.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
# 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.expr.builtin.caliper import Caliper
from benchpark.cuda import CudaExperiment
from benchpark.rocm import ROCmExperiment
from benchpark.openmp import OpenMPExperiment


class Babelstream(
Experiment,
Caliper,
CudaExperiment,
ROCmExperiment,
OpenMPExperiment,
):
variant(
"workload",
default="babelstream",
description="babelstream",
)

variant(
"version",
default="caliper",
values=("4.0", "develop", "caliper"),
description="app version",
)

def compute_applications_section(self):

self.add_experiment_variable("processes_per_node", "1", True)
self.add_experiment_variable("n", "35", False)
self.add_experiment_variable("o", "0", False)
n_resources = 1

if self.spec.satisfies("+cuda"):
self.add_experiment_variable("execute", "cuda-stream", False)

elif self.spec.satisfies("+rocm"):
self.add_experiment_variable("execute", "hip-stream", False)

else:
self.add_experiment_variable("n_ranks", n_resources, True)
self.add_experiment_variable("execute", "omp-stream", False)

if self.spec.satisfies("+cuda") or self.spec.satisfies("+rocm"):
self.add_experiment_variable("n_gpus", n_resources, True)

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"
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}"

# set package spack specs
self.add_spack_spec(system_specs["mpi"])
self.add_spack_spec(
self.name, [f"babelstream@{app_version}", system_specs["compiler"]]
)
50 changes: 41 additions & 9 deletions experiments/lammps/experiment.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,14 @@
from benchpark.directives import variant
from benchpark.experiment import Experiment
from benchpark.openmp import OpenMPExperiment
from benchpark.cuda import CudaExperiment
from benchpark.rocm import ROCmExperiment


class Lammps(
Experiment,
OpenMPExperiment,
CudaExperiment,
ROCmExperiment,
):
variant(
Expand All @@ -27,17 +29,35 @@ class Lammps(
description="app version",
)

variant(
"gpu-aware-mpi",
default=True,
values=(True, False),
when=("+cuda" or "+rocm"),
description="Enable GPU-aware MPI",
)

def compute_applications_section(self):
if self.spec.satisfies("+openmp"):
problem_sizes = {"x": 8, "y": 8, "z": 8}
kokkos_mode = "t {n_threads_per_proc}"
kokkos_gpu_aware = "off"
kokkos_comm = "host"
elif self.spec.satisfies("+rocm"):
elif self.spec.satisfies("+rocm") or self.spec.satisfies("+cuda"):
problem_sizes = {"x": 20, "y": 40, "z": 32}
kokkos_mode = "g 1"
kokkos_gpu_aware = "on"
kokkos_gpu_aware = "on" if self.spec.satisfies("+rocm") else "off"
kokkos_comm = "device"
elif self.spec.satisfies("+cuda"):
problem_sizes = {"x": 20, "y": 20, "z": 16}
kokkos_mode = "g 1"
kokkos_gpu_aware = "on" if self.spec.satisfies("+cuda") else "off"
kokkos_comm = "device"
else:
problem_sizes = {"x": 8, "y": 8, "z": 8}
kokkos_mode = "t {n_threads_per_proc}"
kokkos_gpu_aware = "off"
kokkos_comm = "host"

for nk, nv in problem_sizes.items():
self.add_experiment_variable(nk, nv, True)
Expand All @@ -52,6 +72,14 @@ def compute_applications_section(self):
self.add_experiment_variable("n_nodes", 8, True)
self.add_experiment_variable("n_ranks_per_node", 8, True)
self.add_experiment_variable("n_gpus", 64, True)
elif self.spec.satisfies("+cuda"):
self.add_experiment_variable("n_nodes", 4, True)
self.add_experiment_variable("n_ranks_per_node", 4, True)
self.add_experiment_variable("n_gpus", 16, True)
else:
self.add_experiment_variable("n_nodes", 1, True)
self.add_experiment_variable("n_ranks_per_node", 36, True)
self.add_experiment_variable("n_threads_per_proc", 1, True)

self.add_experiment_variable("timesteps", 100, False)
self.add_experiment_variable("input_file", "{input_path}/in.reaxc.hns", False)
Expand All @@ -70,21 +98,25 @@ def compute_spack_section(self):
system_specs = {}
system_specs["compiler"] = "default-compiler"
system_specs["mpi"] = "default-mpi"
if self.spec.satisfies("+rocm"):
system_specs["rocm_arch"] = "{rocm_arch}"
system_specs["blas"] = "blas-rocm"
system_specs["blas"] = "blas"

# set package spack specs
if self.spec.satisfies("+rocm"):
# empty package_specs value implies external package
self.add_spack_spec(system_specs["blas"])
# empty package_specs value implies external package
self.add_spack_spec(system_specs["mpi"])

if self.spec.satisfies("+cuda"):
system_specs["cuda_version"] = "{default_cuda_version}"
system_specs["cuda_arch"] = "{cuda_arch}"
elif self.spec.satisfies("+rocm"):
system_specs["rocm_arch"] = "{rocm_arch}"

# empty package_specs value implies external package
self.add_spack_spec(system_specs["blas"])

self.add_spack_spec(
self.name,
[
f"lammps@{app_version} +opt+manybody+molecule+kspace+rigid+kokkos+asphere+dpd-basic+dpd-meso+dpd-react+dpd-smooth+reaxff lammps_sizes=bigbig ",
f"lammps@{app_version} +mpi+opt+manybody+molecule+kspace+rigid+kokkos+asphere+dpd-basic+dpd-meso+dpd-react+dpd-smooth+reaxff lammps_sizes=bigbig ",
system_specs["compiler"],
],
)
97 changes: 97 additions & 0 deletions repo/babelstream/application.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
# 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 *
from ramble.expander import Expander

class Babelstream(ExecutableApplication):
"""Babelstream benchmark"""
name = "babelstream"

tags('memorybenchmark', 'microbenchmark', 'memory-benchmark', 'micro-benchmark')

tags = ['synthetic',
'large-scale','multi-node','single-node','sub-node',
'high-memory-bandwidth','regular-memory-access',
'mpi','c','fortran','openmp']


executable('execute', '{execute} -n {n} -s {s}', use_mpi=True)

workload('babelstream', executable='execute')

workload_variable('execute', default='openmp-stream', description='executable to run', workloads=['babelstream'])
workload_variable('n', default='10', description='NTIMES', workloads=['babelstream'])
workload_variable('s', default='10240000', description='STREAM_ARRAY_SIZE', workloads=['babelstream'])

log_file = os.path.join(Expander.expansion_str('experiment_run_dir'),
Expander.expansion_str('experiment_name') + '.out')


figure_of_merit("Array size",
log_file=log_file,
fom_regex=r'Array size\s+\:\s+(?P<array_size>[0-9]+)',
group_name='array_size',
units='elements')

figure_of_merit("Array memory",
log_file=log_file,
fom_regex=r'Memory per array\s+\=\s+(?P<array_mem>[0-9]+)\.*[0-9]*',
group_name='array_mem',
units='MiB')

figure_of_merit("Total memory",
log_file=log_file,
fom_regex=r'Total memory required\s+\=\s+(?P<total_mem>[0-9]+\.*[0-9]*)',
group_name='total_mem',
units='MiB')

figure_of_merit("Number of iterations per thread",
log_file=log_file,
fom_regex=r'Each kernel will be executed\s+(?P<n_times>[0-9]+)',
group_name='n_times',
units='')

figure_of_merit("Number of threads",
log_file=log_file,
fom_regex=r'Number of Threads counted\s+\=\s+(?P<n_threads>[0-9]+\.*[0-9]*)',
group_name='n_threads',
units='')

for opName in ['Copy', 'Mul', 'Add', 'Triad', 'Dot']:

opname = opName.lower()

opregex = (opName + r'\s*' +
r'\s+(?P<' + opname + r'_top_rate>[0-9]+\.[0-9]*)' +
r'\s+(?P<' + opname + r'_min_time>[0-9]+\.[0-9]*)' +
r'\s+(?P<' + opname + r'_max_time>[0-9]+\.[0-9]*)' +
r'\s+(?P<' + opname + r'_avg_time>[0-9]+\.[0-9]*)')

figure_of_merit(opName + ' top rate',
log_file=log_file,
fom_regex=opregex,
group_name=(opname + '_top_rate'),
units='MB/s')

figure_of_merit(opName + ' min time',
log_file=log_file,
fom_regex=opregex,
group_name=(opname + '_min_time'),
units='s')

figure_of_merit(opName + ' max time',
log_file=log_file,
fom_regex=opregex,
group_name=(opname + '_max_time'),
units='s')

figure_of_merit(opName + ' average time',
log_file=log_file,
fom_regex=opregex,
group_name=(opname + '_avg_time'),
units='s')
Loading

0 comments on commit 82b78a0

Please sign in to comment.