diff --git a/.gitlab/tests/shared_flux_clusters.yml b/.gitlab/tests/shared_flux_clusters.yml index bae567185..e07ab97f2 100644 --- a/.gitlab/tests/shared_flux_clusters.yml +++ b/.gitlab/tests/shared_flux_clusters.yml @@ -88,6 +88,7 @@ run_tests_flux_tuolumne: ARCHCONFIG: llnl-elcapitan BENCHMARK: - amg2023 + - branson - kripke - laghos - lammps diff --git a/.gitlab/tests/shared_slurm_clusters.yml b/.gitlab/tests/shared_slurm_clusters.yml index cb810c3bc..5934fcd2b 100644 --- a/.gitlab/tests/shared_slurm_clusters.yml +++ b/.gitlab/tests/shared_slurm_clusters.yml @@ -94,7 +94,7 @@ run_tests_slurm_dane: VARIANT: [+openmp, ''] - HOST: dane ARCHCONFIG: llnl-cluster - BENCHMARK: [laghos, lammps, raja-perf, remhos, phloem] + BENCHMARK: [branson, laghos, lammps, raja-perf, remhos, phloem] # Strong scaling runs for "benchpark analyze" test - HOST: dane ARCHCONFIG: llnl-cluster diff --git a/experiments/branson/experiment.py b/experiments/branson/experiment.py index 88c56c3a9..d3ff2bb67 100644 --- a/experiments/branson/experiment.py +++ b/experiments/branson/experiment.py @@ -94,6 +94,8 @@ def compute_applications_section(self): photons = 800000000 self.add_experiment_variable("num_particles", photons, True) self.add_experiment_variable("resource_count", 4, False) + if self.spec.satisfies("+cuda") or self.spec.satisfies("+rocm"): + self.add_experiment_variable("pool", 64, False) self.register_scaling_config( { @@ -141,9 +143,13 @@ def compute_applications_section(self): def compute_package_section(self): # get package version app_version = self.spec.variants["version"][0] + if self.spec.satisfies("+cuda") or self.spec.satisfies("+rocm"): + umpire = "+umpire" + else: + umpire = "~umpire" self.add_package_spec( self.name, [ - f"branson@{app_version} n_groups={self.spec.variants['n_groups'][0]} ", + f"branson@{app_version}{umpire} n_groups={self.spec.variants['n_groups'][0]} ", ], ) diff --git a/repos/ramble_applications/branson/application.py b/repos/ramble_applications/branson/application.py index 8cb12db6a..0439e95ca 100644 --- a/repos/ramble_applications/branson/application.py +++ b/repos/ramble_applications/branson/application.py @@ -29,6 +29,8 @@ class Branson(ExecutableApplication): 'grep -q "" {experiment_run_dir}/{input_file} || sed -i "/<\/common>/ i \ {layout}<\/particle_storage>" {experiment_run_dir}/{input_file}', 'sed -i "s|.*|{algorithm}|g" {experiment_run_dir}/{input_file}', 'grep -q "" {experiment_run_dir}/{input_file} || sed -i "/<\/common>/ i \ {algorithm}<\/particle_algorithm>" {experiment_run_dir}/{input_file}', + 'sed -i "s|.*|{pool}|g" {experiment_run_dir}/{input_file}', + 'grep -q "" {experiment_run_dir}/{input_file} || sed -i "/<\/common>/ i \ {pool}<\/umpire_device_pool_size>" {experiment_run_dir}/{input_file}', ]) executable('p', '{branson}/bin/BRANSON {experiment_run_dir}/{input_file}', use_mpi=True) @@ -59,6 +61,10 @@ class Branson(ExecutableApplication): description='particle transport algorithm (EVENT|HISTORY)', workloads=['branson']) + workload_variable('pool', default='4', + description='Device pool size in GB', + workloads=['branson']) + figure_of_merit('Photons per Second', log_file='{experiment_run_dir}/{experiment_name}.out', fom_regex=r'Photons Per Second \(FOM\):\s+(?P[0-9]+\.[0-9]*([0-9]*)?e\+[0-9]*)', diff --git a/repos/spack_repo/benchpark/packages/branson/package.py b/repos/spack_repo/benchpark/packages/branson/package.py index 5cdd78620..eddb1bd3a 100644 --- a/repos/spack_repo/benchpark/packages/branson/package.py +++ b/repos/spack_repo/benchpark/packages/branson/package.py @@ -15,7 +15,7 @@ class Branson(CMakePackage, CudaPackage, ROCmPackage): methods for domain decomposition.""" homepage = "https://github.com/lanl/branson" - git = "https://github.com/lanl/branson.git" + git = "https://github.com/LANL/branson.git" tags = ["proxy-app"] @@ -38,6 +38,18 @@ class Branson(CMakePackage, CudaPackage, ROCmPackage): variant("openmp", default=False, description="Enable OpenMP support") variant("caliper", default=False, description="Enable Caliper monitoring") variant("n_groups", default=30, values=int, description="Number of groups") + variant("umpire", default=False, description="Use umpire memory pool") + + with when("+umpire"): + depends_on("umpire+cuda", when="+cuda") + for sm_ in CudaPackage.cuda_arch_values: + depends_on("umpire cuda_arch={0}".format(sm_), when="cuda_arch={0}".format(sm_)) + + depends_on("umpire+rocm", when="+rocm") + for arch in ROCmPackage.amdgpu_targets: + depends_on("umpire amdgpu_target={0}".format(arch), when="amdgpu_target={0}".format(arch)) + + conflicts("~cuda~rocm") depends_on("mpi@2:") @@ -99,6 +111,10 @@ def cmake_args(self): args.append("-DUSE_HIP=OFF") args.append("-DUSE_GPU=OFF") + if '+umpire' in spec: + args.append("-DUSE_UMPIRE=ON") + args.append(f"-Dumpire_DIR={spec['umpire'].prefix}") + args.append(self.define_from_variant("USE_OPENMP", "openmp")) if '+caliper' in spec: