From dda306c50f21d7b200ac0b9a58accda953a1d056 Mon Sep 17 00:00:00 2001 From: Michael McKinsey Date: Mon, 7 Apr 2025 13:32:43 -0700 Subject: [PATCH 01/53] Initial template --- experiments/mpi-pingpong/experiment.py | 31 ++++++++++++++++++++++++++ repo/mpi-pingpong/application.py | 18 +++++++++++++++ repo/mpi-pingpong/package.py | 22 ++++++++++++++++++ 3 files changed, 71 insertions(+) create mode 100644 experiments/mpi-pingpong/experiment.py create mode 100644 repo/mpi-pingpong/application.py create mode 100644 repo/mpi-pingpong/package.py diff --git a/experiments/mpi-pingpong/experiment.py b/experiments/mpi-pingpong/experiment.py new file mode 100644 index 000000000..46bc8b6d9 --- /dev/null +++ b/experiments/mpi-pingpong/experiment.py @@ -0,0 +1,31 @@ +# 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, maintainers +from benchpark.experiment import Experiment + + +class MpiPingpong(Experiment): + + variant( + "workload", + default="pingpong", + ) + + maintainers("michaelmckinsey1") + + def compute_applications_section(self): + + expr_vars = { + "n_ranks": 2, + "iterations": 10 + # TODO: other expr vars? + } + + for pk, pv in expr_vars.items(): + self.add_experiment_variable(pk, pv, True) + + def compute_package_section(self): + self.add_package_spec(self.name, ["mpipingpong"]) diff --git a/repo/mpi-pingpong/application.py b/repo/mpi-pingpong/application.py new file mode 100644 index 000000000..9683b9697 --- /dev/null +++ b/repo/mpi-pingpong/application.py @@ -0,0 +1,18 @@ +# 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 MpiPingpong(ExecutableApplication): + name = "mpi-pingpong" + + tags = ['single-node'] + + executable("pingpong", "pingpong -i {iterations}", use_mpi=True) + + workload("run", executables=["pingpong"]) \ No newline at end of file diff --git a/repo/mpi-pingpong/package.py b/repo/mpi-pingpong/package.py new file mode 100644 index 000000000..956836cab --- /dev/null +++ b/repo/mpi-pingpong/package.py @@ -0,0 +1,22 @@ +# 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 MpiPingpong(CMakePackage): + + git = "https://github.com/stephanielam3211/benchmark.git" + + variant("caliper", default=False, description="Enable Caliper/Adiak support") + + depends_on("caliper", when="+caliper") + depends_on("adiak", when="+caliper") + + def cmake_args(self): + args = [ + "-DUSE_CALIPER" + ] + return args \ No newline at end of file From 9546b0aed0819096989c75a4ba06d58266ddfefb Mon Sep 17 00:00:00 2001 From: Stephanie Christine Lam Date: Mon, 7 Apr 2025 13:39:19 -0700 Subject: [PATCH 02/53] update maintainer --- experiments/mpi-pingpong/experiment.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/experiments/mpi-pingpong/experiment.py b/experiments/mpi-pingpong/experiment.py index 46bc8b6d9..9f9a0e469 100644 --- a/experiments/mpi-pingpong/experiment.py +++ b/experiments/mpi-pingpong/experiment.py @@ -14,7 +14,7 @@ class MpiPingpong(Experiment): default="pingpong", ) - maintainers("michaelmckinsey1") + maintainers("stephanielam3211") def compute_applications_section(self): From 31ed182f9a8502b91cc6fa77bf3aabb35568450c Mon Sep 17 00:00:00 2001 From: Michael McKinsey Date: Mon, 7 Apr 2025 14:48:49 -0700 Subject: [PATCH 03/53] Fix bugs --- experiments/mpi-pingpong/experiment.py | 4 ++-- repo/mpi-pingpong/package.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/experiments/mpi-pingpong/experiment.py b/experiments/mpi-pingpong/experiment.py index 9f9a0e469..a8c0ccffb 100644 --- a/experiments/mpi-pingpong/experiment.py +++ b/experiments/mpi-pingpong/experiment.py @@ -11,7 +11,7 @@ class MpiPingpong(Experiment): variant( "workload", - default="pingpong", + default="run", ) maintainers("stephanielam3211") @@ -28,4 +28,4 @@ def compute_applications_section(self): self.add_experiment_variable(pk, pv, True) def compute_package_section(self): - self.add_package_spec(self.name, ["mpipingpong"]) + self.add_package_spec(self.name, ["mpi-pingpong@main"]) diff --git a/repo/mpi-pingpong/package.py b/repo/mpi-pingpong/package.py index 956836cab..a03977fac 100644 --- a/repo/mpi-pingpong/package.py +++ b/repo/mpi-pingpong/package.py @@ -8,7 +8,7 @@ class MpiPingpong(CMakePackage): - git = "https://github.com/stephanielam3211/benchmark.git" + version("main", branch="main", submodules="True") variant("caliper", default=False, description="Enable Caliper/Adiak support") From 81f5d96851ca7f42efe632d5431c8b5a9178d421 Mon Sep 17 00:00:00 2001 From: Michael McKinsey Date: Mon, 7 Apr 2025 20:03:03 -0700 Subject: [PATCH 04/53] Working local repo --- experiments/mpi-pingpong/experiment.py | 3 ++- repo/mpi-pingpong/package.py | 21 ++++++++++++++++----- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/experiments/mpi-pingpong/experiment.py b/experiments/mpi-pingpong/experiment.py index a8c0ccffb..40a0b12a2 100644 --- a/experiments/mpi-pingpong/experiment.py +++ b/experiments/mpi-pingpong/experiment.py @@ -5,9 +5,10 @@ from benchpark.directives import variant, maintainers from benchpark.experiment import Experiment +from benchpark.caliper import Caliper -class MpiPingpong(Experiment): +class MpiPingpong(Experiment, Caliper): variant( "workload", diff --git a/repo/mpi-pingpong/package.py b/repo/mpi-pingpong/package.py index a03977fac..bfa9fec03 100644 --- a/repo/mpi-pingpong/package.py +++ b/repo/mpi-pingpong/package.py @@ -8,7 +8,9 @@ class MpiPingpong(CMakePackage): - version("main", branch="main", submodules="True") + git = "/usr/WS1/mckinsey/benchpark/mpi-pingpong/" + + version("main", branch="main") variant("caliper", default=False, description="Enable Caliper/Adiak support") @@ -16,7 +18,16 @@ class MpiPingpong(CMakePackage): depends_on("adiak", when="+caliper") def cmake_args(self): - args = [ - "-DUSE_CALIPER" - ] - return args \ No newline at end of file + if self.spec.satisfies("+caliper"): + args = [ + "-DUSE_CALIPER=ON" + ] + else: + args = [ + "-DUSE_CALIPER=OFF" + ] + return args + + def install(self, spec, prefix): + mkdirp(prefix.bin) + install(join_path(self.build_directory, "pingpong"), prefix.bin) \ No newline at end of file From d70d33545dcb722c49077a3035215d94774e3287 Mon Sep 17 00:00:00 2001 From: Michael McKinsey Date: Mon, 7 Apr 2025 20:04:09 -0700 Subject: [PATCH 05/53] Add newline --- repo/mpi-pingpong/application.py | 2 +- repo/mpi-pingpong/package.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/repo/mpi-pingpong/application.py b/repo/mpi-pingpong/application.py index 9683b9697..c20a6e5fe 100644 --- a/repo/mpi-pingpong/application.py +++ b/repo/mpi-pingpong/application.py @@ -15,4 +15,4 @@ class MpiPingpong(ExecutableApplication): executable("pingpong", "pingpong -i {iterations}", use_mpi=True) - workload("run", executables=["pingpong"]) \ No newline at end of file + workload("run", executables=["pingpong"]) diff --git a/repo/mpi-pingpong/package.py b/repo/mpi-pingpong/package.py index bfa9fec03..359c011be 100644 --- a/repo/mpi-pingpong/package.py +++ b/repo/mpi-pingpong/package.py @@ -30,4 +30,4 @@ def cmake_args(self): def install(self, spec, prefix): mkdirp(prefix.bin) - install(join_path(self.build_directory, "pingpong"), prefix.bin) \ No newline at end of file + install(join_path(self.build_directory, "pingpong"), prefix.bin) From 7192655f59c2caf1235cd53fb71158f755b62875 Mon Sep 17 00:00:00 2001 From: Stephanie Christine Lam Date: Tue, 8 Apr 2025 15:39:10 -0700 Subject: [PATCH 06/53] added message size --- experiments/mpi-pingpong/experiment.py | 3 ++- repo/mpi-pingpong/application.py | 2 +- repo/mpi-pingpong/package.py | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/experiments/mpi-pingpong/experiment.py b/experiments/mpi-pingpong/experiment.py index 40a0b12a2..4dd3249bf 100644 --- a/experiments/mpi-pingpong/experiment.py +++ b/experiments/mpi-pingpong/experiment.py @@ -21,7 +21,8 @@ def compute_applications_section(self): expr_vars = { "n_ranks": 2, - "iterations": 10 + "iterations": 10, + "msg_size": 10 # TODO: other expr vars? } diff --git a/repo/mpi-pingpong/application.py b/repo/mpi-pingpong/application.py index c20a6e5fe..65eb151ec 100644 --- a/repo/mpi-pingpong/application.py +++ b/repo/mpi-pingpong/application.py @@ -13,6 +13,6 @@ class MpiPingpong(ExecutableApplication): tags = ['single-node'] - executable("pingpong", "pingpong -i {iterations}", use_mpi=True) + executable("pingpong", "pingpong -i {iterations} -m {msg_size}", use_mpi=True) workload("run", executables=["pingpong"]) diff --git a/repo/mpi-pingpong/package.py b/repo/mpi-pingpong/package.py index 359c011be..73ec1d57f 100644 --- a/repo/mpi-pingpong/package.py +++ b/repo/mpi-pingpong/package.py @@ -8,7 +8,7 @@ class MpiPingpong(CMakePackage): - git = "/usr/WS1/mckinsey/benchpark/mpi-pingpong/" + git = "/g/g16/lam44/Documents/pingpong/benchmark/" version("main", branch="main") From 978409128161f6d29bfcbc8d3cc63a585d186d6d Mon Sep 17 00:00:00 2001 From: Michael McKinsey Date: Tue, 8 Apr 2025 15:58:28 -0700 Subject: [PATCH 07/53] Add more parameters --- experiments/mpi-pingpong/experiment.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/experiments/mpi-pingpong/experiment.py b/experiments/mpi-pingpong/experiment.py index 4dd3249bf..236814f1a 100644 --- a/experiments/mpi-pingpong/experiment.py +++ b/experiments/mpi-pingpong/experiment.py @@ -21,8 +21,8 @@ def compute_applications_section(self): expr_vars = { "n_ranks": 2, - "iterations": 10, - "msg_size": 10 + "iterations": [10,100,1000,10000,100000], + "msg_size": [16,256,4096,65536,1048576] # TODO: other expr vars? } From 900fe1a299ba1edb72313984e472211231329f38 Mon Sep 17 00:00:00 2001 From: Michael McKinsey Date: Tue, 8 Apr 2025 16:10:28 -0700 Subject: [PATCH 08/53] more experiments --- experiments/mpi-pingpong/experiment.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/experiments/mpi-pingpong/experiment.py b/experiments/mpi-pingpong/experiment.py index 236814f1a..b43bf1b3f 100644 --- a/experiments/mpi-pingpong/experiment.py +++ b/experiments/mpi-pingpong/experiment.py @@ -21,8 +21,8 @@ def compute_applications_section(self): expr_vars = { "n_ranks": 2, - "iterations": [10,100,1000,10000,100000], - "msg_size": [16,256,4096,65536,1048576] + "iterations": [10]*5+[10000]*5+[100000]*5, + "msg_size": [16,256,4096,65536,1048576]*3 # TODO: other expr vars? } From 3280fc7031319d2337b579ff1a5641094c877e52 Mon Sep 17 00:00:00 2001 From: Stephanie Christine Lam Date: Thu, 24 Apr 2025 10:28:37 -0700 Subject: [PATCH 09/53] ran with more ranks --- experiments/mpi-pingpong/experiment.py | 12 ++++++++---- repo/mpi-pingpong/application.py | 5 ++++- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/experiments/mpi-pingpong/experiment.py b/experiments/mpi-pingpong/experiment.py index b43bf1b3f..3818aa200 100644 --- a/experiments/mpi-pingpong/experiment.py +++ b/experiments/mpi-pingpong/experiment.py @@ -6,9 +6,10 @@ from benchpark.directives import variant, maintainers from benchpark.experiment import Experiment from benchpark.caliper import Caliper +from benchpark.affinity import Affinity -class MpiPingpong(Experiment, Caliper): +class MpiPingpong(Experiment, Caliper, Affinity): variant( "workload", @@ -20,10 +21,13 @@ class MpiPingpong(Experiment, Caliper): def compute_applications_section(self): expr_vars = { - "n_ranks": 2, - "iterations": [10]*5+[10000]*5+[100000]*5, - "msg_size": [16,256,4096,65536,1048576]*3 + "n_ranks": [112]*5, #[113]*5, + #"n_nodes" : 2, + #"iterations": [10]*5+[10000]*5+[100000]*5, + #"msg_size": [16,256,4096,65536,1048576]*3 # TODO: other expr vars? + "iterations" : [1000000]*5, #[1000000]*5, + "msg_size" : [16000, 32000, 64000, 128000, 256000]*1 #[16,256,4096,65536,1048576]*1 } for pk, pv in expr_vars.items(): diff --git a/repo/mpi-pingpong/application.py b/repo/mpi-pingpong/application.py index 65eb151ec..e7621609e 100644 --- a/repo/mpi-pingpong/application.py +++ b/repo/mpi-pingpong/application.py @@ -13,6 +13,9 @@ class MpiPingpong(ExecutableApplication): tags = ['single-node'] - executable("pingpong", "pingpong -i {iterations} -m {msg_size}", use_mpi=True) + executable("pingpong", "pingpong -i {iterations} -m {msg_size} -p 0,56", use_mpi=True) + #executable("pingpong1", "pingpong -i {iterations} -m {msg_size} -p 0,56", use_mpi=True) + #executable("pingpong2", "pingpong -i {iterations} -m {msg_size} -p 0,112", use_mpi=True) workload("run", executables=["pingpong"]) + From 2b3f8cf3cb9f281f3d918afe23938db2f03efbbe Mon Sep 17 00:00:00 2001 From: Stephanie Christine Lam Date: Thu, 24 Apr 2025 14:06:42 -0700 Subject: [PATCH 10/53] kind of run on multiple systems --- experiments/mpi-pingpong/experiment.py | 10 ++++++---- repo/mpi-pingpong/application.py | 4 +++- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/experiments/mpi-pingpong/experiment.py b/experiments/mpi-pingpong/experiment.py index 3818aa200..6bee46fa1 100644 --- a/experiments/mpi-pingpong/experiment.py +++ b/experiments/mpi-pingpong/experiment.py @@ -19,19 +19,21 @@ class MpiPingpong(Experiment, Caliper, Affinity): maintainers("stephanielam3211") def compute_applications_section(self): - + n_ranks = 352 #dane:896, ruby:448, tioga:512, lassen:352, tuolumne:768 expr_vars = { - "n_ranks": [112]*5, #[113]*5, + "n_ranks": [n_ranks]*5, #[113]*5, #"n_nodes" : 2, #"iterations": [10]*5+[10000]*5+[100000]*5, #"msg_size": [16,256,4096,65536,1048576]*3 # TODO: other expr vars? - "iterations" : [1000000]*5, #[1000000]*5, - "msg_size" : [16000, 32000, 64000, 128000, 256000]*1 #[16,256,4096,65536,1048576]*1 + "iterations" : [1000000]*5, #1000000, + "msg_size" : [16384, 32768, 65536, 131072, 262144]*1 #[16,256,4096,65536,1048576]*1 } for pk, pv in expr_vars.items(): self.add_experiment_variable(pk, pv, True) + self.add_experiment_variable("partner_rank", n_ranks-1) + def compute_package_section(self): self.add_package_spec(self.name, ["mpi-pingpong@main"]) diff --git a/repo/mpi-pingpong/application.py b/repo/mpi-pingpong/application.py index e7621609e..479cb41d0 100644 --- a/repo/mpi-pingpong/application.py +++ b/repo/mpi-pingpong/application.py @@ -13,9 +13,11 @@ class MpiPingpong(ExecutableApplication): tags = ['single-node'] - executable("pingpong", "pingpong -i {iterations} -m {msg_size} -p 0,56", use_mpi=True) + + executable("pingpong", "pingpong -i {iterations} -m {msg_size} -p 0,{partner_rank}", use_mpi=True) #executable("pingpong1", "pingpong -i {iterations} -m {msg_size} -p 0,56", use_mpi=True) #executable("pingpong2", "pingpong -i {iterations} -m {msg_size} -p 0,112", use_mpi=True) workload("run", executables=["pingpong"]) + From 72323517a0a5595af07278c5cbdaa5abaa839c4a Mon Sep 17 00:00:00 2001 From: Stephanie Christine Lam Date: Wed, 30 Apr 2025 15:22:57 -0700 Subject: [PATCH 11/53] changed sys_cores_per_node to 40 for lassen --- systems/llnl-sierra/system.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/systems/llnl-sierra/system.py b/systems/llnl-sierra/system.py index 23f2cea33..b3aff3e70 100644 --- a/systems/llnl-sierra/system.py +++ b/systems/llnl-sierra/system.py @@ -15,7 +15,7 @@ class LlnlSierra(System): id_to_resources = { "lassen": { - "sys_cores_per_node": 44, + "sys_cores_per_node": 40, "sys_gpus_per_node": 4, "system_site": "llnl", "hardware_key": str(hardware_descriptions) From 1d1dea03a2b2f6071a03018007db39f2b885576d Mon Sep 17 00:00:00 2001 From: Michael McKinsey Date: Fri, 2 May 2025 09:07:11 -0700 Subject: [PATCH 12/53] Add comment --- systems/llnl-sierra/system.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/systems/llnl-sierra/system.py b/systems/llnl-sierra/system.py index b3aff3e70..e2420a710 100644 --- a/systems/llnl-sierra/system.py +++ b/systems/llnl-sierra/system.py @@ -15,7 +15,7 @@ class LlnlSierra(System): id_to_resources = { "lassen": { - "sys_cores_per_node": 40, + "sys_cores_per_node": 40, # 40/44 (4 reserved by OS) "sys_gpus_per_node": 4, "system_site": "llnl", "hardware_key": str(hardware_descriptions) From fc4f6bec936c170c8bc7d3f69dde4cd6a7164a6f Mon Sep 17 00:00:00 2001 From: Stephanie Christine Lam Date: Fri, 2 May 2025 09:10:05 -0700 Subject: [PATCH 13/53] tioga core changes from 64 to 56 --- systems/llnl-elcapitan/system.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/systems/llnl-elcapitan/system.py b/systems/llnl-elcapitan/system.py index 69bc8666e..11158a2be 100644 --- a/systems/llnl-elcapitan/system.py +++ b/systems/llnl-elcapitan/system.py @@ -17,7 +17,7 @@ class LlnlElcapitan(System): id_to_resources = { "tioga": { "rocm_arch": "gfx90a", - "sys_cores_per_node": 64, + "sys_cores_per_node": 56, "sys_gpus_per_node": 8, "system_site": "llnl", "hardware_key": str(hardware_descriptions) From f560015b67589560f16ebf793ca7f033cd3ad16e Mon Sep 17 00:00:00 2001 From: Stephanie Christine Lam Date: Fri, 2 May 2025 09:19:29 -0700 Subject: [PATCH 14/53] tioga 56 core experiment --- experiments/mpi-pingpong/experiment.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/experiments/mpi-pingpong/experiment.py b/experiments/mpi-pingpong/experiment.py index 6bee46fa1..e1b81d1e2 100644 --- a/experiments/mpi-pingpong/experiment.py +++ b/experiments/mpi-pingpong/experiment.py @@ -19,7 +19,7 @@ class MpiPingpong(Experiment, Caliper, Affinity): maintainers("stephanielam3211") def compute_applications_section(self): - n_ranks = 352 #dane:896, ruby:448, tioga:512, lassen:352, tuolumne:768 + n_ranks = 448 #dane:896, ruby:448, tioga:512, lassen:352, tuolumne:768 expr_vars = { "n_ranks": [n_ranks]*5, #[113]*5, #"n_nodes" : 2, From cdfb1521bffeb954792090ab68784113b99a8e75 Mon Sep 17 00:00:00 2001 From: Michael McKinsey Date: Fri, 2 May 2025 09:37:36 -0700 Subject: [PATCH 15/53] Add comment --- systems/llnl-elcapitan/system.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/systems/llnl-elcapitan/system.py b/systems/llnl-elcapitan/system.py index 11158a2be..168a2348d 100644 --- a/systems/llnl-elcapitan/system.py +++ b/systems/llnl-elcapitan/system.py @@ -17,7 +17,7 @@ class LlnlElcapitan(System): id_to_resources = { "tioga": { "rocm_arch": "gfx90a", - "sys_cores_per_node": 56, + "sys_cores_per_node": 56, # 56/64 (8 reserved by OS) "sys_gpus_per_node": 8, "system_site": "llnl", "hardware_key": str(hardware_descriptions) From be21b42914d9d7697146078e3a6601363741cec0 Mon Sep 17 00:00:00 2001 From: Michael McKinsey Date: Fri, 6 Jun 2025 09:42:53 -0700 Subject: [PATCH 16/53] Try automatically naming caliper file --- modifiers/caliper/modifier.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modifiers/caliper/modifier.py b/modifiers/caliper/modifier.py index 13f3854d9..a6bffdd10 100644 --- a/modifiers/caliper/modifier.py +++ b/modifiers/caliper/modifier.py @@ -32,7 +32,7 @@ class Caliper(BasicModifier): maintainers("pearce8") # The filename for Caliper output data - _cali_datafile = "{experiment_run_dir}/{experiment_name}.cali" + _cali_datafile = "{experiment_run_dir}/" # The filename for metadata forwarded from Benchpark to Caliper _caliper_metadata_file = "{experiment_run_dir}/{experiment_name}_metadata.json" From 195c79c2afc067b709bedb09425f17059c83e4a9 Mon Sep 17 00:00:00 2001 From: Michael McKinsey Date: Fri, 6 Jun 2025 16:18:50 -0700 Subject: [PATCH 17/53] Undo change --- modifiers/caliper/modifier.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modifiers/caliper/modifier.py b/modifiers/caliper/modifier.py index 46692990d..0884e187c 100644 --- a/modifiers/caliper/modifier.py +++ b/modifiers/caliper/modifier.py @@ -32,7 +32,7 @@ class Caliper(BasicModifier): maintainers("pearce8") # The filename for Caliper output data - _cali_datafile = "{experiment_run_dir}/" + _cali_datafile = "{experiment_run_dir}/{experiment_name}.cali" # The filename for metadata forwarded from Benchpark to Caliper _caliper_metadata_file = "{experiment_run_dir}/{experiment_name}_metadata.json" From ff29022678aa6eb63385099b579cebfebabd31d5 Mon Sep 17 00:00:00 2001 From: Stephanie Christine Lam Date: Mon, 9 Jun 2025 15:16:42 -0700 Subject: [PATCH 18/53] loops through message sizes and also gets multiple cali files with 1 experiment --- experiments/mpi-pingpong/experiment.py | 27 ++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/experiments/mpi-pingpong/experiment.py b/experiments/mpi-pingpong/experiment.py index e1b81d1e2..ea3bf8588 100644 --- a/experiments/mpi-pingpong/experiment.py +++ b/experiments/mpi-pingpong/experiment.py @@ -6,10 +6,10 @@ from benchpark.directives import variant, maintainers from benchpark.experiment import Experiment from benchpark.caliper import Caliper -from benchpark.affinity import Affinity +#from benchpark.affinity import Affinity -class MpiPingpong(Experiment, Caliper, Affinity): +class MpiPingpong(Experiment, Caliper): variant( "workload", @@ -19,21 +19,32 @@ class MpiPingpong(Experiment, Caliper, Affinity): maintainers("stephanielam3211") def compute_applications_section(self): - n_ranks = 448 #dane:896, ruby:448, tioga:512, lassen:352, tuolumne:768 + n_ranks = 1 #dane:896, ruby:448, tioga:512, lassen:352, tuolumne:768 + n_nodes = 8 #max number of nodes expr_vars = { - "n_ranks": [n_ranks]*5, #[113]*5, - #"n_nodes" : 2, + "n_ranks": n_ranks, #[113]*5, + "n_nodes": n_nodes, #"iterations": [10]*5+[10000]*5+[100000]*5, #"msg_size": [16,256,4096,65536,1048576]*3 # TODO: other expr vars? - "iterations" : [1000000]*5, #1000000, - "msg_size" : [16384, 32768, 65536, 131072, 262144]*1 #[16,256,4096,65536,1048576]*1 + "iterations" : 1000000, #1000000, + "msg_size" : 16384 #[16,256,4096,65536,1048576]*1 } for pk, pv in expr_vars.items(): self.add_experiment_variable(pk, pv, True) - self.add_experiment_variable("partner_rank", n_ranks-1) + self.add_experiment_variable( + "n_ranks", "{n_nodes}*{sys_cores_per_node}", True + ) + + self.add_experiment_variable("partner_rank", "{n_ranks}-1", True) + + self.set_required_variables( + n_resources="{n_ranks}", + process_problem_size="{msg_size}", + total_problem_size="{msg_size}", + ) def compute_package_section(self): self.add_package_spec(self.name, ["mpi-pingpong@main"]) From 1503c2e034501b1242007ea5e2253e7bc21eb730 Mon Sep 17 00:00:00 2001 From: Stephanie Christine Lam Date: Fri, 13 Jun 2025 10:46:27 -0700 Subject: [PATCH 19/53] metadata added --- experiments/mpi-pingpong/experiment.py | 6 ++++-- repo/mpi-pingpong/application.py | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/experiments/mpi-pingpong/experiment.py b/experiments/mpi-pingpong/experiment.py index ea3bf8588..e1a063544 100644 --- a/experiments/mpi-pingpong/experiment.py +++ b/experiments/mpi-pingpong/experiment.py @@ -19,10 +19,8 @@ class MpiPingpong(Experiment, Caliper): maintainers("stephanielam3211") def compute_applications_section(self): - n_ranks = 1 #dane:896, ruby:448, tioga:512, lassen:352, tuolumne:768 n_nodes = 8 #max number of nodes expr_vars = { - "n_ranks": n_ranks, #[113]*5, "n_nodes": n_nodes, #"iterations": [10]*5+[10000]*5+[100000]*5, #"msg_size": [16,256,4096,65536,1048576]*3 @@ -46,5 +44,9 @@ def compute_applications_section(self): total_problem_size="{msg_size}", ) + #self.set_environment_variable( + + #) + def compute_package_section(self): self.add_package_spec(self.name, ["mpi-pingpong@main"]) diff --git a/repo/mpi-pingpong/application.py b/repo/mpi-pingpong/application.py index 479cb41d0..ce80d87fe 100644 --- a/repo/mpi-pingpong/application.py +++ b/repo/mpi-pingpong/application.py @@ -14,7 +14,7 @@ class MpiPingpong(ExecutableApplication): tags = ['single-node'] - executable("pingpong", "pingpong -i {iterations} -m {msg_size} -p 0,{partner_rank}", use_mpi=True) + executable("pingpong", "pingpong -i {iterations} -m {msg_size} -p 0,{partner_rank} -n {experiment_run_dir}/{experiment_name}_metadata.json", use_mpi=True) #executable("pingpong1", "pingpong -i {iterations} -m {msg_size} -p 0,56", use_mpi=True) #executable("pingpong2", "pingpong -i {iterations} -m {msg_size} -p 0,112", use_mpi=True) From 558705fa041e0e16ff1c38b0c523a14c30419072 Mon Sep 17 00:00:00 2001 From: Michael McKinsey Date: Wed, 23 Jul 2025 16:57:23 -0700 Subject: [PATCH 20/53] Update application.py --- repo/mpi-pingpong/application.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo/mpi-pingpong/application.py b/repo/mpi-pingpong/application.py index ce80d87fe..c9d35bd0d 100644 --- a/repo/mpi-pingpong/application.py +++ b/repo/mpi-pingpong/application.py @@ -11,7 +11,7 @@ class MpiPingpong(ExecutableApplication): name = "mpi-pingpong" - tags = ['single-node'] + tags = ['single-node', 'builtin-caliper'] executable("pingpong", "pingpong -i {iterations} -m {msg_size} -p 0,{partner_rank} -n {experiment_run_dir}/{experiment_name}_metadata.json", use_mpi=True) From dd9f5aef556055fe97f97b739098767e2bbd53f3 Mon Sep 17 00:00:00 2001 From: Stephanie Christine Lam Date: Wed, 23 Jul 2025 17:03:59 -0700 Subject: [PATCH 21/53] added sockets per node in systems --- systems/llnl-cluster/system.py | 2 ++ systems/llnl-elcapitan/system.py | 2 ++ systems/llnl-sierra/system.py | 1 + 3 files changed, 5 insertions(+) diff --git a/systems/llnl-cluster/system.py b/systems/llnl-cluster/system.py index eec50708b..7efc32157 100644 --- a/systems/llnl-cluster/system.py +++ b/systems/llnl-cluster/system.py @@ -19,6 +19,7 @@ class LlnlCluster(System): "sys_cores_per_node": 56, "sys_cores_os_reserved_per_node": 0, # No core or thread reservation "sys_cores_os_reserved_per_node_list": None, + "sys_sockets_per_node": 2, "system_site": "llnl", "hardware_key": str(hardware_descriptions) + "/Supermicro-icelake-OmniPath/hardware_description.yaml", @@ -32,6 +33,7 @@ class LlnlCluster(System): "dane": { "sys_cores_per_node": 112, "sys_cores_os_reserved_per_node": 0, # No explicit core reservation, first thread on each core reserved (2 threads per core) + "sys_sockets_per_node": 2, "sys_cores_os_reserved_per_node_list": None, "system_site": "llnl", "hardware_key": str(hardware_descriptions) diff --git a/systems/llnl-elcapitan/system.py b/systems/llnl-elcapitan/system.py index 608a288ac..940a7833a 100644 --- a/systems/llnl-elcapitan/system.py +++ b/systems/llnl-elcapitan/system.py @@ -21,6 +21,7 @@ class LlnlElcapitan(System): "sys_cores_per_node": 56, "sys_cores_os_reserved_per_node": 8, "sys_cores_os_reserved_per_node_list": [0, 8, 16, 24, 32, 40, 48, 56], + "sys_sockets_per_node": 2, "sys_gpus_per_node": 8, "system_site": "llnl", "scheduler": "flux", @@ -46,6 +47,7 @@ class LlnlElcapitan(System): 88, ], # 3 cores reserved per socket "sys_gpus_per_node": None, # Determined by "gpumode" variant + "sys_sockets_per_node": 4, "system_site": "llnl", "scheduler": "flux", "hardware_key": str(hardware_descriptions) diff --git a/systems/llnl-sierra/system.py b/systems/llnl-sierra/system.py index 972502f4c..b99c9f508 100644 --- a/systems/llnl-sierra/system.py +++ b/systems/llnl-sierra/system.py @@ -25,6 +25,7 @@ class LlnlSierra(System): 22, 23, ], # First two cores on each socket reserved. + "sys_sockets_per_node": 2, "sys_gpus_per_node": 4, "system_site": "llnl", "hardware_key": str(hardware_descriptions) From ea4e874a4c385470b49af1024c6ae5a40ac2e627 Mon Sep 17 00:00:00 2001 From: Michael McKinsey Date: Mon, 28 Jul 2025 13:21:09 -0700 Subject: [PATCH 22/53] Update shared_slurm_clusters.yml --- .gitlab/tests/shared_slurm_clusters.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab/tests/shared_slurm_clusters.yml b/.gitlab/tests/shared_slurm_clusters.yml index 5bbcbdcfc..b7e12dddb 100644 --- a/.gitlab/tests/shared_slurm_clusters.yml +++ b/.gitlab/tests/shared_slurm_clusters.yml @@ -46,7 +46,7 @@ release_resources_dane: VARIANT: [+openmp, ''] - HOST: dane ARCHCONFIG: llnl-cluster - BENCHMARK: [laghos, raja-perf, phloem] + BENCHMARK: [laghos, raja-perf, phloem, mpi-pingpong] # Strong scaling runs for "benchpark analyze" test - HOST: dane ARCHCONFIG: llnl-cluster From 6b08ac5ed768fcb5ba3d3a89ed618abe029f2be1 Mon Sep 17 00:00:00 2001 From: Michael McKinsey Date: Mon, 28 Jul 2025 13:22:27 -0700 Subject: [PATCH 23/53] lint --- experiments/mpi-pingpong/experiment.py | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/experiments/mpi-pingpong/experiment.py b/experiments/mpi-pingpong/experiment.py index e1a063544..3f59e3924 100644 --- a/experiments/mpi-pingpong/experiment.py +++ b/experiments/mpi-pingpong/experiment.py @@ -6,7 +6,8 @@ from benchpark.directives import variant, maintainers from benchpark.experiment import Experiment from benchpark.caliper import Caliper -#from benchpark.affinity import Affinity + +# from benchpark.affinity import Affinity class MpiPingpong(Experiment, Caliper): @@ -19,22 +20,20 @@ class MpiPingpong(Experiment, Caliper): maintainers("stephanielam3211") def compute_applications_section(self): - n_nodes = 8 #max number of nodes + n_nodes = 8 # max number of nodes expr_vars = { "n_nodes": n_nodes, - #"iterations": [10]*5+[10000]*5+[100000]*5, - #"msg_size": [16,256,4096,65536,1048576]*3 + # "iterations": [10]*5+[10000]*5+[100000]*5, + # "msg_size": [16,256,4096,65536,1048576]*3 # TODO: other expr vars? - "iterations" : 1000000, #1000000, - "msg_size" : 16384 #[16,256,4096,65536,1048576]*1 + "iterations": 1000000, # 1000000, + "msg_size": 16384, # [16,256,4096,65536,1048576]*1 } for pk, pv in expr_vars.items(): self.add_experiment_variable(pk, pv, True) - self.add_experiment_variable( - "n_ranks", "{n_nodes}*{sys_cores_per_node}", True - ) + self.add_experiment_variable("n_ranks", "{n_nodes}*{sys_cores_per_node}", True) self.add_experiment_variable("partner_rank", "{n_ranks}-1", True) @@ -44,9 +43,9 @@ def compute_applications_section(self): total_problem_size="{msg_size}", ) - #self.set_environment_variable( - - #) + # self.set_environment_variable( + + # ) def compute_package_section(self): self.add_package_spec(self.name, ["mpi-pingpong@main"]) From dbb09cbc748c05849a86a727ae118a2308914b32 Mon Sep 17 00:00:00 2001 From: Michael McKinsey Date: Mon, 28 Jul 2025 13:24:51 -0700 Subject: [PATCH 24/53] Undo change because benchmark is private --- .gitlab/tests/shared_slurm_clusters.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab/tests/shared_slurm_clusters.yml b/.gitlab/tests/shared_slurm_clusters.yml index b7e12dddb..5bbcbdcfc 100644 --- a/.gitlab/tests/shared_slurm_clusters.yml +++ b/.gitlab/tests/shared_slurm_clusters.yml @@ -46,7 +46,7 @@ release_resources_dane: VARIANT: [+openmp, ''] - HOST: dane ARCHCONFIG: llnl-cluster - BENCHMARK: [laghos, raja-perf, phloem, mpi-pingpong] + BENCHMARK: [laghos, raja-perf, phloem] # Strong scaling runs for "benchpark analyze" test - HOST: dane ARCHCONFIG: llnl-cluster From 6bce99df10aee5cad0e11da8fdc523d792ed3e28 Mon Sep 17 00:00:00 2001 From: Stephanie Christine Lam Date: Thu, 31 Jul 2025 09:34:52 -0700 Subject: [PATCH 25/53] added system memory info --- systems/llnl-cluster/system.py | 10 ++++++++++ systems/llnl-elcapitan/system.py | 20 ++++++++++++++++++++ systems/llnl-sierra/system.py | 9 +++++++++ 3 files changed, 39 insertions(+) diff --git a/systems/llnl-cluster/system.py b/systems/llnl-cluster/system.py index 7efc32157..6475bfdeb 100644 --- a/systems/llnl-cluster/system.py +++ b/systems/llnl-cluster/system.py @@ -19,6 +19,11 @@ class LlnlCluster(System): "sys_cores_per_node": 56, "sys_cores_os_reserved_per_node": 0, # No core or thread reservation "sys_cores_os_reserved_per_node_list": None, + "sys_mem_per_node": 94, #either 94GB or ~94981-96752MB + "sys_cpu_mem_per_node": 94, + "sys_cpu_L1_size": 32, #32KB for L1d and 32KB for L1i + "sys_cpu_L2_size": 1024, + "sys_cpu_L3_size": 39, #105MB "sys_sockets_per_node": 2, "system_site": "llnl", "hardware_key": str(hardware_descriptions) @@ -35,6 +40,11 @@ class LlnlCluster(System): "sys_cores_os_reserved_per_node": 0, # No explicit core reservation, first thread on each core reserved (2 threads per core) "sys_sockets_per_node": 2, "sys_cores_os_reserved_per_node_list": None, + "sys_mem_per_node": 31, #either 31GB or ~32248MB + "sys_cpu_mem_per_node": 31, + "sys_cpu_L1_size": 48, #48KB for L1d and 32KB for L1i + "sys_cpu_L2_size": 2048, + "sys_cpu_L3_size": 105, #105MB "system_site": "llnl", "hardware_key": str(hardware_descriptions) + "/DELL-sapphirerapids-OmniPath/hardware_description.yaml", diff --git a/systems/llnl-elcapitan/system.py b/systems/llnl-elcapitan/system.py index 940a7833a..20e6218e0 100644 --- a/systems/llnl-elcapitan/system.py +++ b/systems/llnl-elcapitan/system.py @@ -23,6 +23,15 @@ class LlnlElcapitan(System): "sys_cores_os_reserved_per_node_list": [0, 8, 16, 24, 32, 40, 48, 56], "sys_sockets_per_node": 2, "sys_gpus_per_node": 8, + "sys_mem_per_node": 125, #either 125GB or ~128997MB + "sys_cpu_mem_per_node": 125, + "sys_gpu_mem_per_node": 68702699520, #in B + "sys_cpu_L1_size": 32, #32KB for L1d and 32KB for L1i + "sys_gpu_L1_size": 16, + "sys_gpu_num_L1": 1008, + "sys_cpu_L2_size": 512, #512 KB + "sys_gpu_L2_size": 8192, + "sys_cpu_L3_size": 32, #32MB "system_site": "llnl", "scheduler": "flux", "hardware_key": str(hardware_descriptions) @@ -48,6 +57,17 @@ class LlnlElcapitan(System): ], # 3 cores reserved per socket "sys_gpus_per_node": None, # Determined by "gpumode" variant "sys_sockets_per_node": 4, + "sys_mem_per_node": 1024, #either 125GB or ~128997MB + "sys_cpu_mem_per_node": 1024, + "sys_gpu_mem_per_node": 137438953472, #in B + "sys_cpu_L1_size": 32, #32KB for L1d and 32KB for L1i + "sys_gpu_L1_size": 32, + "sys_gpu_num_L1": 1104, + "sys_cpu_L2_size": 1024, #512 KB + "sys_gpu_L2_size": 4096, + "sys_cpu_L3_size": 32, #32MB + "sys_gpu_L3_size": 262144, #262144KB + "sys_gpu_num_L3": 4, "system_site": "llnl", "scheduler": "flux", "hardware_key": str(hardware_descriptions) diff --git a/systems/llnl-sierra/system.py b/systems/llnl-sierra/system.py index b99c9f508..30ab0d2f0 100644 --- a/systems/llnl-sierra/system.py +++ b/systems/llnl-sierra/system.py @@ -27,6 +27,15 @@ class LlnlSierra(System): ], # First two cores on each socket reserved. "sys_sockets_per_node": 2, "sys_gpus_per_node": 4, + "sys_mem_per_node": 256, #either 256GB or ~128997MB + "sys_cpu_mem_per_node": 256, + "sys_gpu_mem_per_node": 16384, #in MiB Fb Memory? + "sys_cpu_L1_size": 32, #32KB for L1d and 32KB for L1i + "sys_gpu_L1_size": 16, #not done + "sys_gpu_num_L1": 1008, #not done + "sys_cpu_L2_size": 512, #512 KB + "sys_gpu_L2_size": 8192, #not done + "sys_cpu_L3_size": 10, #10MB "system_site": "llnl", "hardware_key": str(hardware_descriptions) + "/IBM-power9-V100-Infiniband/hardware_description.yaml", From dbeae11e555214df8584468eaf6cf89e51f817f3 Mon Sep 17 00:00:00 2001 From: Stephanie Christine Lam Date: Thu, 31 Jul 2025 11:07:49 -0700 Subject: [PATCH 26/53] Revert "added system memory info" This reverts commit 6bce99df10aee5cad0e11da8fdc523d792ed3e28. --- systems/llnl-cluster/system.py | 10 ---------- systems/llnl-elcapitan/system.py | 20 -------------------- systems/llnl-sierra/system.py | 9 --------- 3 files changed, 39 deletions(-) diff --git a/systems/llnl-cluster/system.py b/systems/llnl-cluster/system.py index 6475bfdeb..7efc32157 100644 --- a/systems/llnl-cluster/system.py +++ b/systems/llnl-cluster/system.py @@ -19,11 +19,6 @@ class LlnlCluster(System): "sys_cores_per_node": 56, "sys_cores_os_reserved_per_node": 0, # No core or thread reservation "sys_cores_os_reserved_per_node_list": None, - "sys_mem_per_node": 94, #either 94GB or ~94981-96752MB - "sys_cpu_mem_per_node": 94, - "sys_cpu_L1_size": 32, #32KB for L1d and 32KB for L1i - "sys_cpu_L2_size": 1024, - "sys_cpu_L3_size": 39, #105MB "sys_sockets_per_node": 2, "system_site": "llnl", "hardware_key": str(hardware_descriptions) @@ -40,11 +35,6 @@ class LlnlCluster(System): "sys_cores_os_reserved_per_node": 0, # No explicit core reservation, first thread on each core reserved (2 threads per core) "sys_sockets_per_node": 2, "sys_cores_os_reserved_per_node_list": None, - "sys_mem_per_node": 31, #either 31GB or ~32248MB - "sys_cpu_mem_per_node": 31, - "sys_cpu_L1_size": 48, #48KB for L1d and 32KB for L1i - "sys_cpu_L2_size": 2048, - "sys_cpu_L3_size": 105, #105MB "system_site": "llnl", "hardware_key": str(hardware_descriptions) + "/DELL-sapphirerapids-OmniPath/hardware_description.yaml", diff --git a/systems/llnl-elcapitan/system.py b/systems/llnl-elcapitan/system.py index 20e6218e0..940a7833a 100644 --- a/systems/llnl-elcapitan/system.py +++ b/systems/llnl-elcapitan/system.py @@ -23,15 +23,6 @@ class LlnlElcapitan(System): "sys_cores_os_reserved_per_node_list": [0, 8, 16, 24, 32, 40, 48, 56], "sys_sockets_per_node": 2, "sys_gpus_per_node": 8, - "sys_mem_per_node": 125, #either 125GB or ~128997MB - "sys_cpu_mem_per_node": 125, - "sys_gpu_mem_per_node": 68702699520, #in B - "sys_cpu_L1_size": 32, #32KB for L1d and 32KB for L1i - "sys_gpu_L1_size": 16, - "sys_gpu_num_L1": 1008, - "sys_cpu_L2_size": 512, #512 KB - "sys_gpu_L2_size": 8192, - "sys_cpu_L3_size": 32, #32MB "system_site": "llnl", "scheduler": "flux", "hardware_key": str(hardware_descriptions) @@ -57,17 +48,6 @@ class LlnlElcapitan(System): ], # 3 cores reserved per socket "sys_gpus_per_node": None, # Determined by "gpumode" variant "sys_sockets_per_node": 4, - "sys_mem_per_node": 1024, #either 125GB or ~128997MB - "sys_cpu_mem_per_node": 1024, - "sys_gpu_mem_per_node": 137438953472, #in B - "sys_cpu_L1_size": 32, #32KB for L1d and 32KB for L1i - "sys_gpu_L1_size": 32, - "sys_gpu_num_L1": 1104, - "sys_cpu_L2_size": 1024, #512 KB - "sys_gpu_L2_size": 4096, - "sys_cpu_L3_size": 32, #32MB - "sys_gpu_L3_size": 262144, #262144KB - "sys_gpu_num_L3": 4, "system_site": "llnl", "scheduler": "flux", "hardware_key": str(hardware_descriptions) diff --git a/systems/llnl-sierra/system.py b/systems/llnl-sierra/system.py index 30ab0d2f0..b99c9f508 100644 --- a/systems/llnl-sierra/system.py +++ b/systems/llnl-sierra/system.py @@ -27,15 +27,6 @@ class LlnlSierra(System): ], # First two cores on each socket reserved. "sys_sockets_per_node": 2, "sys_gpus_per_node": 4, - "sys_mem_per_node": 256, #either 256GB or ~128997MB - "sys_cpu_mem_per_node": 256, - "sys_gpu_mem_per_node": 16384, #in MiB Fb Memory? - "sys_cpu_L1_size": 32, #32KB for L1d and 32KB for L1i - "sys_gpu_L1_size": 16, #not done - "sys_gpu_num_L1": 1008, #not done - "sys_cpu_L2_size": 512, #512 KB - "sys_gpu_L2_size": 8192, #not done - "sys_cpu_L3_size": 10, #10MB "system_site": "llnl", "hardware_key": str(hardware_descriptions) + "/IBM-power9-V100-Infiniband/hardware_description.yaml", From 1238ede1baf4596207dbedf84fbcaa4d945af075 Mon Sep 17 00:00:00 2001 From: Stephanie Brink Date: Fri, 1 Aug 2025 09:21:50 -0700 Subject: [PATCH 27/53] remove whitespace --- repo/mpi-pingpong/application.py | 3 --- repo/mpi-pingpong/package.py | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/repo/mpi-pingpong/application.py b/repo/mpi-pingpong/application.py index c9d35bd0d..dd41eea06 100644 --- a/repo/mpi-pingpong/application.py +++ b/repo/mpi-pingpong/application.py @@ -13,11 +13,8 @@ class MpiPingpong(ExecutableApplication): tags = ['single-node', 'builtin-caliper'] - executable("pingpong", "pingpong -i {iterations} -m {msg_size} -p 0,{partner_rank} -n {experiment_run_dir}/{experiment_name}_metadata.json", use_mpi=True) #executable("pingpong1", "pingpong -i {iterations} -m {msg_size} -p 0,56", use_mpi=True) #executable("pingpong2", "pingpong -i {iterations} -m {msg_size} -p 0,112", use_mpi=True) workload("run", executables=["pingpong"]) - - diff --git a/repo/mpi-pingpong/package.py b/repo/mpi-pingpong/package.py index 73ec1d57f..fe58f492e 100644 --- a/repo/mpi-pingpong/package.py +++ b/repo/mpi-pingpong/package.py @@ -15,7 +15,7 @@ class MpiPingpong(CMakePackage): variant("caliper", default=False, description="Enable Caliper/Adiak support") depends_on("caliper", when="+caliper") - depends_on("adiak", when="+caliper") + depends_on("adiak", when="+caliper") def cmake_args(self): if self.spec.satisfies("+caliper"): From e14db108c3e1d97127fda11e66c3f9a4c88c85c6 Mon Sep 17 00:00:00 2001 From: Stephanie Brink Date: Fri, 1 Aug 2025 09:22:55 -0700 Subject: [PATCH 28/53] update git url --- repo/mpi-pingpong/package.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo/mpi-pingpong/package.py b/repo/mpi-pingpong/package.py index fe58f492e..7a4066fd0 100644 --- a/repo/mpi-pingpong/package.py +++ b/repo/mpi-pingpong/package.py @@ -8,7 +8,7 @@ class MpiPingpong(CMakePackage): - git = "/g/g16/lam44/Documents/pingpong/benchmark/" + git = "https://github.com/LLNL/microbenchmarks.git" version("main", branch="main") From e0487324e6e0035c42260bbf45f2ea53aa82b36d Mon Sep 17 00:00:00 2001 From: Stephanie Christine Lam Date: Mon, 4 Aug 2025 09:51:19 -0700 Subject: [PATCH 29/53] fixed application.py to match source code --- repo/mpi-pingpong/application.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo/mpi-pingpong/application.py b/repo/mpi-pingpong/application.py index c9d35bd0d..6eb49071e 100644 --- a/repo/mpi-pingpong/application.py +++ b/repo/mpi-pingpong/application.py @@ -14,7 +14,7 @@ class MpiPingpong(ExecutableApplication): tags = ['single-node', 'builtin-caliper'] - executable("pingpong", "pingpong -i {iterations} -m {msg_size} -p 0,{partner_rank} -n {experiment_run_dir}/{experiment_name}_metadata.json", use_mpi=True) + executable("pingpong", "pingpong -i {iterations} -m {msg_size} -p 0,{partner_rank} -n {n_nodes} -s {sys_cores_per_node}//{sys_sockets_per_node} -c {sys_cores_per_node} -b {experiment_run_dir}/{experiment_name}_metadata.json", use_mpi=True) #executable("pingpong1", "pingpong -i {iterations} -m {msg_size} -p 0,56", use_mpi=True) #executable("pingpong2", "pingpong -i {iterations} -m {msg_size} -p 0,112", use_mpi=True) From ddcac9ce558dd59ecf8068c315250be41d68f2ba Mon Sep 17 00:00:00 2001 From: Stephanie Christine Lam Date: Mon, 4 Aug 2025 09:55:31 -0700 Subject: [PATCH 30/53] fixing executable so it matches source code --- repo/mpi-pingpong/application.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/repo/mpi-pingpong/application.py b/repo/mpi-pingpong/application.py index cf5e72f8e..2582a6a41 100644 --- a/repo/mpi-pingpong/application.py +++ b/repo/mpi-pingpong/application.py @@ -13,12 +13,8 @@ class MpiPingpong(ExecutableApplication): tags = ['single-node', 'builtin-caliper'] -<<<<<<< HEAD executable("pingpong", "pingpong -i {iterations} -m {msg_size} -p 0,{partner_rank} -n {n_nodes} -s {sys_cores_per_node}//{sys_sockets_per_node} -c {sys_cores_per_node} -b {experiment_run_dir}/{experiment_name}_metadata.json", use_mpi=True) -======= - executable("pingpong", "pingpong -i {iterations} -m {msg_size} -p 0,{partner_rank} -n {experiment_run_dir}/{experiment_name}_metadata.json", use_mpi=True) ->>>>>>> e14db108c3e1d97127fda11e66c3f9a4c88c85c6 #executable("pingpong1", "pingpong -i {iterations} -m {msg_size} -p 0,56", use_mpi=True) #executable("pingpong2", "pingpong -i {iterations} -m {msg_size} -p 0,112", use_mpi=True) From 12bb7f836a0df578153a9203283d0b4cd22aa311 Mon Sep 17 00:00:00 2001 From: Stephanie Christine Lam Date: Mon, 4 Aug 2025 12:36:57 -0700 Subject: [PATCH 31/53] updated package.py and experiment.py to point to the correct spot for mpi-pingpong --- experiments/mpi-pingpong/experiment.py | 4 ++-- repo/mpi-pingpong/package.py | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/experiments/mpi-pingpong/experiment.py b/experiments/mpi-pingpong/experiment.py index 3f59e3924..c14176859 100644 --- a/experiments/mpi-pingpong/experiment.py +++ b/experiments/mpi-pingpong/experiment.py @@ -20,7 +20,7 @@ class MpiPingpong(Experiment, Caliper): maintainers("stephanielam3211") def compute_applications_section(self): - n_nodes = 8 # max number of nodes + n_nodes = 16 # max number of nodes expr_vars = { "n_nodes": n_nodes, # "iterations": [10]*5+[10000]*5+[100000]*5, @@ -48,4 +48,4 @@ def compute_applications_section(self): # ) def compute_package_section(self): - self.add_package_spec(self.name, ["mpi-pingpong@main"]) + self.add_package_spec(self.name, ["mpi-pingpong@develop"]) diff --git a/repo/mpi-pingpong/package.py b/repo/mpi-pingpong/package.py index 7a4066fd0..004f89404 100644 --- a/repo/mpi-pingpong/package.py +++ b/repo/mpi-pingpong/package.py @@ -10,13 +10,15 @@ class MpiPingpong(CMakePackage): git = "https://github.com/LLNL/microbenchmarks.git" - version("main", branch="main") + version("develop", branch="develop") variant("caliper", default=False, description="Enable Caliper/Adiak support") depends_on("caliper", when="+caliper") depends_on("adiak", when="+caliper") + root_cmakelists_dir = "repo/pingpong" + def cmake_args(self): if self.spec.satisfies("+caliper"): args = [ From 716d8734b802caf34aae1b90c44c39367899127d Mon Sep 17 00:00:00 2001 From: Michael McKinsey Date: Mon, 4 Aug 2025 13:14:22 -0700 Subject: [PATCH 32/53] Update shared_slurm_clusters.yml --- .gitlab/tests/shared_slurm_clusters.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab/tests/shared_slurm_clusters.yml b/.gitlab/tests/shared_slurm_clusters.yml index 5bbcbdcfc..b7e12dddb 100644 --- a/.gitlab/tests/shared_slurm_clusters.yml +++ b/.gitlab/tests/shared_slurm_clusters.yml @@ -46,7 +46,7 @@ release_resources_dane: VARIANT: [+openmp, ''] - HOST: dane ARCHCONFIG: llnl-cluster - BENCHMARK: [laghos, raja-perf, phloem] + BENCHMARK: [laghos, raja-perf, phloem, mpi-pingpong] # Strong scaling runs for "benchpark analyze" test - HOST: dane ARCHCONFIG: llnl-cluster From 51d4c956aa44f999d3c6bf5e2135f6b458930599 Mon Sep 17 00:00:00 2001 From: Stephanie Christine Lam Date: Mon, 4 Aug 2025 14:59:27 -0700 Subject: [PATCH 33/53] clean-up, removing uneccessary comments --- experiments/mpi-pingpong/experiment.py | 13 ++----------- repo/mpi-pingpong/application.py | 2 -- 2 files changed, 2 insertions(+), 13 deletions(-) diff --git a/experiments/mpi-pingpong/experiment.py b/experiments/mpi-pingpong/experiment.py index c14176859..672ee3ca9 100644 --- a/experiments/mpi-pingpong/experiment.py +++ b/experiments/mpi-pingpong/experiment.py @@ -7,8 +7,6 @@ from benchpark.experiment import Experiment from benchpark.caliper import Caliper -# from benchpark.affinity import Affinity - class MpiPingpong(Experiment, Caliper): @@ -23,11 +21,8 @@ def compute_applications_section(self): n_nodes = 16 # max number of nodes expr_vars = { "n_nodes": n_nodes, - # "iterations": [10]*5+[10000]*5+[100000]*5, - # "msg_size": [16,256,4096,65536,1048576]*3 - # TODO: other expr vars? - "iterations": 1000000, # 1000000, - "msg_size": 16384, # [16,256,4096,65536,1048576]*1 + "iterations": 1000000, + "msg_size": 16, } for pk, pv in expr_vars.items(): @@ -43,9 +38,5 @@ def compute_applications_section(self): total_problem_size="{msg_size}", ) - # self.set_environment_variable( - - # ) - def compute_package_section(self): self.add_package_spec(self.name, ["mpi-pingpong@develop"]) diff --git a/repo/mpi-pingpong/application.py b/repo/mpi-pingpong/application.py index 2582a6a41..57fe15a56 100644 --- a/repo/mpi-pingpong/application.py +++ b/repo/mpi-pingpong/application.py @@ -15,7 +15,5 @@ class MpiPingpong(ExecutableApplication): executable("pingpong", "pingpong -i {iterations} -m {msg_size} -p 0,{partner_rank} -n {n_nodes} -s {sys_cores_per_node}//{sys_sockets_per_node} -c {sys_cores_per_node} -b {experiment_run_dir}/{experiment_name}_metadata.json", use_mpi=True) - #executable("pingpong1", "pingpong -i {iterations} -m {msg_size} -p 0,56", use_mpi=True) - #executable("pingpong2", "pingpong -i {iterations} -m {msg_size} -p 0,112", use_mpi=True) workload("run", executables=["pingpong"]) From 657dbbbd61e85baf1983a88f273235476c943fdd Mon Sep 17 00:00:00 2001 From: Michael McKinsey Date: Mon, 4 Aug 2025 15:16:02 -0700 Subject: [PATCH 34/53] Update experiment.py --- experiments/mpi-pingpong/experiment.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/experiments/mpi-pingpong/experiment.py b/experiments/mpi-pingpong/experiment.py index 672ee3ca9..5df6f07f7 100644 --- a/experiments/mpi-pingpong/experiment.py +++ b/experiments/mpi-pingpong/experiment.py @@ -5,10 +5,11 @@ from benchpark.directives import variant, maintainers from benchpark.experiment import Experiment +from benchpark.mpi import MpiOnlyExperiment from benchpark.caliper import Caliper -class MpiPingpong(Experiment, Caliper): +class MpiPingpong(MpiOnlyExperiment, Experiment, Caliper): variant( "workload", From 2c5f4cd190b9ff98e2eb0d498098cf88b115ae16 Mon Sep 17 00:00:00 2001 From: Michael McKinsey Date: Mon, 4 Aug 2025 15:48:20 -0700 Subject: [PATCH 35/53] Fix bug --- experiments/mpi-pingpong/experiment.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/experiments/mpi-pingpong/experiment.py b/experiments/mpi-pingpong/experiment.py index 5df6f07f7..357b223d2 100644 --- a/experiments/mpi-pingpong/experiment.py +++ b/experiments/mpi-pingpong/experiment.py @@ -9,7 +9,7 @@ from benchpark.caliper import Caliper -class MpiPingpong(MpiOnlyExperiment, Experiment, Caliper): +class MpiPingpong(Experiment, MpiOnlyExperiment, Caliper): variant( "workload", From 8bb4d7087345ab7f04100144162ec687639dfe29 Mon Sep 17 00:00:00 2001 From: Michael McKinsey Date: Wed, 6 Aug 2025 15:27:16 -0700 Subject: [PATCH 36/53] solution --- experiments/mpi-pingpong/experiment.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/experiments/mpi-pingpong/experiment.py b/experiments/mpi-pingpong/experiment.py index 357b223d2..bd4288ca4 100644 --- a/experiments/mpi-pingpong/experiment.py +++ b/experiments/mpi-pingpong/experiment.py @@ -29,12 +29,13 @@ def compute_applications_section(self): for pk, pv in expr_vars.items(): self.add_experiment_variable(pk, pv, True) - self.add_experiment_variable("n_ranks", "{n_nodes}*{sys_cores_per_node}", True) + # Intentionally do not use "n_ranks" as we are already setting n_nodes. Do not change this to n_ranks + self.add_experiment_variable("total_ranks", "{n_nodes}*{sys_cores_per_node}", True) - self.add_experiment_variable("partner_rank", "{n_ranks}-1", True) + self.add_experiment_variable("partner_rank", "{total_ranks}-1", True) self.set_required_variables( - n_resources="{n_ranks}", + n_resources="{total_ranks}", process_problem_size="{msg_size}", total_problem_size="{msg_size}", ) From 54f4c8b6dcc4e90ba0d37b7e8d2220f3e38c459c Mon Sep 17 00:00:00 2001 From: Michael McKinsey Date: Wed, 6 Aug 2025 16:27:27 -0700 Subject: [PATCH 37/53] Set n_ranks_per_node such that n_ranks is set in addition to n_nodes. Additionally disable limitation of max 1000 nodes --- experiments/mpi-pingpong/experiment.py | 8 ++++---- modifiers/allocation/modifier.py | 3 --- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/experiments/mpi-pingpong/experiment.py b/experiments/mpi-pingpong/experiment.py index bd4288ca4..11c1dfdde 100644 --- a/experiments/mpi-pingpong/experiment.py +++ b/experiments/mpi-pingpong/experiment.py @@ -29,13 +29,13 @@ def compute_applications_section(self): for pk, pv in expr_vars.items(): self.add_experiment_variable(pk, pv, True) - # Intentionally do not use "n_ranks" as we are already setting n_nodes. Do not change this to n_ranks - self.add_experiment_variable("total_ranks", "{n_nodes}*{sys_cores_per_node}", True) + # "n_ranks" will be computed from n_nodes and this variable in allocation modifier + self.add_experiment_variable("n_ranks_per_node", "{sys_cores_per_node}", True) - self.add_experiment_variable("partner_rank", "{total_ranks}-1", True) + self.add_experiment_variable("partner_rank", "{n_ranks}-1", True) self.set_required_variables( - n_resources="{total_ranks}", + n_resources="{n_ranks}", process_problem_size="{msg_size}", total_problem_size="{msg_size}", ) diff --git a/modifiers/allocation/modifier.py b/modifiers/allocation/modifier.py index 09982e634..fa32fa086 100644 --- a/modifiers/allocation/modifier.py +++ b/modifiers/allocation/modifier.py @@ -295,7 +295,6 @@ def determine_allocation(self, v): if not v.n_threads_per_proc: v.n_threads_per_proc = 1 - max_request = v.max_request or 1000 # Final check, make sure the above arithmetic didn't result in an # unreasonable allocation request. for var, val in v.defined(): @@ -303,8 +302,6 @@ def determine_allocation(self, v): int(val) except (ValueError, TypeError): continue - if val > max_request: - raise ValueError(f"Request exceeds maximum: {var}/{val}/{max_request}") def slurm_instructions(self, v): sbatch_opts, srun_opts = Allocation._init_batch_and_cmd_opts(v) From 862a1848ba7e5440f281b2b71c26c21b1f68d01b Mon Sep 17 00:00:00 2001 From: Michael McKinsey Date: Wed, 6 Aug 2025 19:45:31 -0700 Subject: [PATCH 38/53] Revert change and allow ranks greater than 1000 --- experiments/mpi-pingpong/experiment.py | 3 +-- modifiers/allocation/modifier.py | 2 -- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/experiments/mpi-pingpong/experiment.py b/experiments/mpi-pingpong/experiment.py index 11c1dfdde..357b223d2 100644 --- a/experiments/mpi-pingpong/experiment.py +++ b/experiments/mpi-pingpong/experiment.py @@ -29,8 +29,7 @@ def compute_applications_section(self): for pk, pv in expr_vars.items(): self.add_experiment_variable(pk, pv, True) - # "n_ranks" will be computed from n_nodes and this variable in allocation modifier - self.add_experiment_variable("n_ranks_per_node", "{sys_cores_per_node}", True) + self.add_experiment_variable("n_ranks", "{n_nodes}*{sys_cores_per_node}", True) self.add_experiment_variable("partner_rank", "{n_ranks}-1", True) diff --git a/modifiers/allocation/modifier.py b/modifiers/allocation/modifier.py index fa32fa086..868c174b3 100644 --- a/modifiers/allocation/modifier.py +++ b/modifiers/allocation/modifier.py @@ -103,9 +103,7 @@ def _nullify_placeholders(v): # user wants us to set it. # For integers, values exceeding max_request are presumed to be # placeholders. - max_request_int = v.max_request or 1000 placeholder_checks = { - int: lambda x: x > max_request_int, str: lambda x: x == SENTINEL_UNDEFINED_VALUE_STR, } for var, val in v.defined(): From b3e9848af7bb37ba3f120da1d9dcb4166c52d704 Mon Sep 17 00:00:00 2001 From: Michael McKinsey Date: Fri, 8 Aug 2025 11:53:54 -0700 Subject: [PATCH 39/53] Use different value for placeholder instead of relying on max value --- docs/add-a-system-config.rst | 5 ++--- lib/benchpark/system.py | 5 ++--- lib/benchpark/test/system.py | 5 ++--- modifiers/allocation/modifier.py | 9 ++------- 4 files changed, 8 insertions(+), 16 deletions(-) diff --git a/docs/add-a-system-config.rst b/docs/add-a-system-config.rst index 850d61796..b8c4e8bac 100644 --- a/docs/add-a-system-config.rst +++ b/docs/add-a-system-config.rst @@ -384,9 +384,8 @@ file sys_cores_per_node: "48" sys_gpus_per_node: 2 cuda_arch: 70 - max_request: "1000" # n_ranks/n_nodes cannot exceed this - n_ranks: '1000001' # placeholder value - n_nodes: '1000001' # placeholder value + n_ranks: -1 # placeholder value + n_nodes: -1 # placeholder value batch_submit: "placeholder" mpi_command: "placeholder" diff --git a/lib/benchpark/system.py b/lib/benchpark/system.py index 5b4c7b94a..06617fe3f 100644 --- a/lib/benchpark/system.py +++ b/lib/benchpark/system.py @@ -144,9 +144,8 @@ def compute_variables_section(self): "timeout": self.timeout, "scheduler": self.scheduler, "sys_cores_per_node": self.sys_cores_per_node, - "max_request": "1000", - "n_ranks": "1000001", - "n_nodes": "1000001", + "n_ranks": -1, + "n_nodes": -1, "batch_submit": "placeholder", "mpi_command": "placeholder", } diff --git a/lib/benchpark/test/system.py b/lib/benchpark/test/system.py index 4c1209092..4012c44e8 100644 --- a/lib/benchpark/test/system.py +++ b/lib/benchpark/test/system.py @@ -17,9 +17,8 @@ def test_system_compute_variables_section(monkeypatch): "timeout": "120", "scheduler": "flux", "sys_cores_per_node": 84, - "max_request": "1000", - "n_ranks": "1000001", - "n_nodes": "1000001", + "n_ranks": -1, + "n_nodes": -1, "batch_submit": "placeholder", "mpi_command": "placeholder", "sys_cores_os_reserved_per_node": 12, diff --git a/modifiers/allocation/modifier.py b/modifiers/allocation/modifier.py index 09982e634..bc48e1626 100644 --- a/modifiers/allocation/modifier.py +++ b/modifiers/allocation/modifier.py @@ -63,6 +63,7 @@ class AllocAlias: SENTINEL_UNDEFINED_VALUE_STR = "placeholder" +SENTINEL_UNDEFINED_VALUE_INT = -1 class AttrDict(dict): @@ -101,11 +102,8 @@ def defined(self): def _nullify_placeholders(v): # If we see a string variable set to "placeholder" we assume the # user wants us to set it. - # For integers, values exceeding max_request are presumed to be - # placeholders. - max_request_int = v.max_request or 1000 placeholder_checks = { - int: lambda x: x > max_request_int, + int: lambda x: x == SENTINEL_UNDEFINED_VALUE_INT, str: lambda x: x == SENTINEL_UNDEFINED_VALUE_STR, } for var, val in v.defined(): @@ -295,7 +293,6 @@ def determine_allocation(self, v): if not v.n_threads_per_proc: v.n_threads_per_proc = 1 - max_request = v.max_request or 1000 # Final check, make sure the above arithmetic didn't result in an # unreasonable allocation request. for var, val in v.defined(): @@ -303,8 +300,6 @@ def determine_allocation(self, v): int(val) except (ValueError, TypeError): continue - if val > max_request: - raise ValueError(f"Request exceeds maximum: {var}/{val}/{max_request}") def slurm_instructions(self, v): sbatch_opts, srun_opts = Allocation._init_batch_and_cmd_opts(v) From b9145c8ea93d1fdbb383d3cb9a1a9aaf4e564c22 Mon Sep 17 00:00:00 2001 From: Michael McKinsey Date: Fri, 8 Aug 2025 11:58:16 -0700 Subject: [PATCH 40/53] Move change to PR --- modifiers/allocation/modifier.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/modifiers/allocation/modifier.py b/modifiers/allocation/modifier.py index 868c174b3..09982e634 100644 --- a/modifiers/allocation/modifier.py +++ b/modifiers/allocation/modifier.py @@ -103,7 +103,9 @@ def _nullify_placeholders(v): # user wants us to set it. # For integers, values exceeding max_request are presumed to be # placeholders. + max_request_int = v.max_request or 1000 placeholder_checks = { + int: lambda x: x > max_request_int, str: lambda x: x == SENTINEL_UNDEFINED_VALUE_STR, } for var, val in v.defined(): @@ -293,6 +295,7 @@ def determine_allocation(self, v): if not v.n_threads_per_proc: v.n_threads_per_proc = 1 + max_request = v.max_request or 1000 # Final check, make sure the above arithmetic didn't result in an # unreasonable allocation request. for var, val in v.defined(): @@ -300,6 +303,8 @@ def determine_allocation(self, v): int(val) except (ValueError, TypeError): continue + if val > max_request: + raise ValueError(f"Request exceeds maximum: {var}/{val}/{max_request}") def slurm_instructions(self, v): sbatch_opts, srun_opts = Allocation._init_batch_and_cmd_opts(v) From 2ec6f487b32ce8143325b87bd50d11a52d754bf9 Mon Sep 17 00:00:00 2001 From: Stephanie Christine Lam Date: Tue, 12 Aug 2025 16:31:19 -0700 Subject: [PATCH 41/53] first test with openmp option --- repo/mpi-pingpong/package.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/repo/mpi-pingpong/package.py b/repo/mpi-pingpong/package.py index 004f89404..a414de3d7 100644 --- a/repo/mpi-pingpong/package.py +++ b/repo/mpi-pingpong/package.py @@ -10,9 +10,10 @@ class MpiPingpong(CMakePackage): git = "https://github.com/LLNL/microbenchmarks.git" - version("develop", branch="develop") + version("addHip", branch="addHip") variant("caliper", default=False, description="Enable Caliper/Adiak support") + variant("openmp", default=True, description="Enable OpenMP support") depends_on("caliper", when="+caliper") depends_on("adiak", when="+caliper") @@ -28,8 +29,12 @@ def cmake_args(self): args = [ "-DUSE_CALIPER=OFF" ] - return args + if '+openmp' in spec: + args.append('-DUSE_OPENMP=ON') + + return args + def install(self, spec, prefix): mkdirp(prefix.bin) install(join_path(self.build_directory, "pingpong"), prefix.bin) From 680afc491755ff7b047aae431eeb08bdb1e24d7e Mon Sep 17 00:00:00 2001 From: Stephanie Christine Lam Date: Fri, 22 Aug 2025 15:41:10 -0700 Subject: [PATCH 42/53] trying out rocm --- experiments/mpi-pingpong/experiment.py | 3 ++- repo/mpi-pingpong/package.py | 23 +++++++++++++++++------ 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/experiments/mpi-pingpong/experiment.py b/experiments/mpi-pingpong/experiment.py index 357b223d2..d63059ca5 100644 --- a/experiments/mpi-pingpong/experiment.py +++ b/experiments/mpi-pingpong/experiment.py @@ -7,9 +7,10 @@ from benchpark.experiment import Experiment from benchpark.mpi import MpiOnlyExperiment from benchpark.caliper import Caliper +from benchpark.rocm import ROCmExperiment -class MpiPingpong(Experiment, MpiOnlyExperiment, Caliper): +class MpiPingpong(Experiment, MpiOnlyExperiment, ROCmExperiment, Caliper): variant( "workload", diff --git a/repo/mpi-pingpong/package.py b/repo/mpi-pingpong/package.py index a414de3d7..f4aeafb59 100644 --- a/repo/mpi-pingpong/package.py +++ b/repo/mpi-pingpong/package.py @@ -6,17 +6,18 @@ from spack.package import * -class MpiPingpong(CMakePackage): +class MpiPingpong(CMakePackage, ROCmPackage): git = "https://github.com/LLNL/microbenchmarks.git" - version("addHip", branch="addHip") + version("develop", branch="addHip") variant("caliper", default=False, description="Enable Caliper/Adiak support") - variant("openmp", default=True, description="Enable OpenMP support") + variant("rocm", default=True, description="Enable Rocm support") depends_on("caliper", when="+caliper") depends_on("adiak", when="+caliper") + depends_on("hip", when="+rocm") root_cmakelists_dir = "repo/pingpong" @@ -30,9 +31,19 @@ def cmake_args(self): "-DUSE_CALIPER=OFF" ] - if '+openmp' in spec: - args.append('-DUSE_OPENMP=ON') - + if '+rocm' in self.spec: + args.append('-DUSE_ROCM=ON') + args.append(self.define("ROCM_PATH", self.spec["hip"].prefix)) + #rocm_arch_vals = self.spec.variants["amdgpu_target"].value + hip_vars = self.spec["hip"].variants + if "amdgpu_targets" in hip_vars: + vals = [t for t in hip_vars["amdgpu_targets"].value if t != "none"] + if vals: + archs = ",".join(vals) + args.append(self.define("CMAKE_HIP_ARCHITECTURES", archs)) + else: + args.append('-DUSE_ROCM=OFF') + return args def install(self, spec, prefix): From ffd06c0de6f1385311ff9dee7302fe1f401a8606 Mon Sep 17 00:00:00 2001 From: Stephanie Christine Lam Date: Mon, 25 Aug 2025 09:52:50 -0700 Subject: [PATCH 43/53] rocm added --- repo/mpi-pingpong/package.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/repo/mpi-pingpong/package.py b/repo/mpi-pingpong/package.py index f4aeafb59..582c40e2e 100644 --- a/repo/mpi-pingpong/package.py +++ b/repo/mpi-pingpong/package.py @@ -15,6 +15,7 @@ class MpiPingpong(CMakePackage, ROCmPackage): variant("caliper", default=False, description="Enable Caliper/Adiak support") variant("rocm", default=True, description="Enable Rocm support") + depends_on("mpi") depends_on("caliper", when="+caliper") depends_on("adiak", when="+caliper") depends_on("hip", when="+rocm") @@ -32,10 +33,11 @@ def cmake_args(self): ] if '+rocm' in self.spec: - args.append('-DUSE_ROCM=ON') - args.append(self.define("ROCM_PATH", self.spec["hip"].prefix)) - #rocm_arch_vals = self.spec.variants["amdgpu_target"].value - hip_vars = self.spec["hip"].variants + if self.spec.satisfies("+rocm"): + args.append(self.define("CMAKE_EXE_LINKER_FLAGS", self.spec['mpi'].libs.ld_flags)) + args.append('-DUSE_ROCM=ON') + args.append(self.define("ROCM_PATH", self.spec["hip"].prefix)) + hip_vars = self.spec["hip"].variants if "amdgpu_targets" in hip_vars: vals = [t for t in hip_vars["amdgpu_targets"].value if t != "none"] if vals: From c3396ecf9562d2a598185a2d26999401918ff3f0 Mon Sep 17 00:00:00 2001 From: Michael McKinsey Date: Mon, 25 Aug 2025 12:58:17 -0700 Subject: [PATCH 44/53] Update package.py --- repo/affinity/package.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/repo/affinity/package.py b/repo/affinity/package.py index 99cf3deed..b1426094a 100644 --- a/repo/affinity/package.py +++ b/repo/affinity/package.py @@ -6,7 +6,7 @@ from spack.package import * -class Affinity(CMakePackage, CudaPackage): +class Affinity(CMakePackage, CudaPackage, ROCmPackage): """Simple applications for determining Linux thread and gpu affinity.""" homepage = "https://github.com/bcumming/affinity" @@ -31,12 +31,15 @@ def cmake_args(self): if '+mpi' in spec: args.append('-DCMAKE_CXX_COMPILER={0}'.format(spec["mpi"].mpicxx)) args.append("-DMPI_CXX_LINK_FLAGS={0}".format(spec["mpi"].libs.ld_flags)) + args.append("-DAFFINITY_MPI=on") if '+cuda' in spec: args.append('-DCMAKE_CUDA_HOST_COMPILER={0}'.format(spec["mpi"].mpicxx)) args.append('-DCMAKE_CUDA_COMPILER={0}'.format(spec["cuda"].prefix + "/bin/nvcc")) + args.append("-DAFFINITY_GPU_BACKEND=cuda") if '+rocm' in spec: args.append("-DROCM_PATH={0}".format(spec['hip'].prefix)) + args.append("-DAFFINITY_GPU_BACKEND=rocm") return args From ee4754cdb331170de44c5706ff073bc3470db539 Mon Sep 17 00:00:00 2001 From: Michael McKinsey Date: Mon, 25 Aug 2025 13:52:15 -0700 Subject: [PATCH 45/53] amdgpu required --- lib/benchpark/experiment.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/benchpark/experiment.py b/lib/benchpark/experiment.py index 4e1385a62..df7379482 100644 --- a/lib/benchpark/experiment.py +++ b/lib/benchpark/experiment.py @@ -136,7 +136,7 @@ def compute_package_section(self): if self.spec.satisfies("+cuda"): package_specs["affinity"]["pkg_spec"] += "+cuda" elif self.spec.satisfies("+rocm"): - package_specs["affinity"]["pkg_spec"] += "+rocm" + package_specs["affinity"]["pkg_spec"] += "+rocm amdgpu_target={rocm_arch}" return { "packages": {k: v for k, v in package_specs.items() if v}, From 3e7816c0288ae3b264288ff38f8fb289f71c658a Mon Sep 17 00:00:00 2001 From: Michael McKinsey Date: Mon, 25 Aug 2025 13:53:00 -0700 Subject: [PATCH 46/53] amdgpu --- repo/affinity/package.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/repo/affinity/package.py b/repo/affinity/package.py index b1426094a..93a492ac0 100644 --- a/repo/affinity/package.py +++ b/repo/affinity/package.py @@ -41,5 +41,9 @@ def cmake_args(self): if '+rocm' in spec: args.append("-DROCM_PATH={0}".format(spec['hip'].prefix)) args.append("-DAFFINITY_GPU_BACKEND=rocm") + rocm_archs = spec.variants["amdgpu_target"].value + if "none" not in rocm_archs: + args.append("-DHIP_HIPCC_FLAGS=--amdgpu-target={0}".format(",".join(rocm_archs))) + args.append("-DCMAKE_HIP_ARCHITECTURES={0}".format(rocm_archs)) return args From e2b7332d71edc8056f172462ad589f7e5fd48abb Mon Sep 17 00:00:00 2001 From: Michael McKinsey Date: Mon, 25 Aug 2025 22:36:13 -0700 Subject: [PATCH 47/53] fix package --- repo/mpi-pingpong/package.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/repo/mpi-pingpong/package.py b/repo/mpi-pingpong/package.py index 582c40e2e..0bc09b644 100644 --- a/repo/mpi-pingpong/package.py +++ b/repo/mpi-pingpong/package.py @@ -14,8 +14,9 @@ class MpiPingpong(CMakePackage, ROCmPackage): variant("caliper", default=False, description="Enable Caliper/Adiak support") variant("rocm", default=True, description="Enable Rocm support") + variant("mpi", default=True, description="Enable MPI support") - depends_on("mpi") + depends_on("mpi", when="+mpi") depends_on("caliper", when="+caliper") depends_on("adiak", when="+caliper") depends_on("hip", when="+rocm") @@ -32,12 +33,11 @@ def cmake_args(self): "-DUSE_CALIPER=OFF" ] - if '+rocm' in self.spec: - if self.spec.satisfies("+rocm"): - args.append(self.define("CMAKE_EXE_LINKER_FLAGS", self.spec['mpi'].libs.ld_flags)) - args.append('-DUSE_ROCM=ON') - args.append(self.define("ROCM_PATH", self.spec["hip"].prefix)) - hip_vars = self.spec["hip"].variants + if self.spec.satisfies("+rocm"): + args.append(self.define("CMAKE_EXE_LINKER_FLAGS", self.spec['mpi'].libs.ld_flags)) + args.append('-DUSE_ROCM=ON') + args.append(self.define("ROCM_PATH", self.spec["hip"].prefix)) + hip_vars = self.spec["hip"].variants if "amdgpu_targets" in hip_vars: vals = [t for t in hip_vars["amdgpu_targets"].value if t != "none"] if vals: From f65b6641541b61e8c52e1bc920ee7ef99d5da021 Mon Sep 17 00:00:00 2001 From: Stephanie Christine Lam Date: Thu, 11 Sep 2025 18:26:52 -0700 Subject: [PATCH 48/53] added cuda variant --- experiments/mpi-pingpong/experiment.py | 7 ++++--- repo/mpi-pingpong/package.py | 20 +++++++++++++++++--- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/experiments/mpi-pingpong/experiment.py b/experiments/mpi-pingpong/experiment.py index d63059ca5..38709c65a 100644 --- a/experiments/mpi-pingpong/experiment.py +++ b/experiments/mpi-pingpong/experiment.py @@ -8,9 +8,10 @@ from benchpark.mpi import MpiOnlyExperiment from benchpark.caliper import Caliper from benchpark.rocm import ROCmExperiment +from benchpark.cuda import CudaExperiment -class MpiPingpong(Experiment, MpiOnlyExperiment, ROCmExperiment, Caliper): +class MpiPingpong(Experiment, MpiOnlyExperiment, ROCmExperiment, CudaExperiment, Caliper): variant( "workload", @@ -20,10 +21,10 @@ class MpiPingpong(Experiment, MpiOnlyExperiment, ROCmExperiment, Caliper): maintainers("stephanielam3211") def compute_applications_section(self): - n_nodes = 16 # max number of nodes + n_nodes = 32 # max number of nodes expr_vars = { "n_nodes": n_nodes, - "iterations": 1000000, + "iterations": 10000, "msg_size": 16, } diff --git a/repo/mpi-pingpong/package.py b/repo/mpi-pingpong/package.py index 0bc09b644..26d7ce26b 100644 --- a/repo/mpi-pingpong/package.py +++ b/repo/mpi-pingpong/package.py @@ -6,20 +6,24 @@ from spack.package import * -class MpiPingpong(CMakePackage, ROCmPackage): +class MpiPingpong(CMakePackage, ROCmPackage, CudaPackage): git = "https://github.com/LLNL/microbenchmarks.git" - version("develop", branch="addHip") + version("develop", branch="add-cuda") variant("caliper", default=False, description="Enable Caliper/Adiak support") - variant("rocm", default=True, description="Enable Rocm support") + variant("rocm", default=False, description="Enable Rocm support") + variant("cuda", default=False, description="Enable CUDA support") variant("mpi", default=True, description="Enable MPI support") depends_on("mpi", when="+mpi") depends_on("caliper", when="+caliper") depends_on("adiak", when="+caliper") depends_on("hip", when="+rocm") + depends_on("cuda", when="+cuda") + + conflicts("+cuda +rocm", msg="Enable only one of +cuda or +rocm") root_cmakelists_dir = "repo/pingpong" @@ -45,6 +49,16 @@ def cmake_args(self): args.append(self.define("CMAKE_HIP_ARCHITECTURES", archs)) else: args.append('-DUSE_ROCM=OFF') + + if self.spec.satisfies("+cuda"): + args.append(self.define("USE_CUDA", "ON")) + v = self.spec.variants.get("cuda_arch", None) + if v: + vals = [a for a in v.value if a != "none"] + if vals: + args.append(self.define("CMAKE_CUDA_ARCHITECTURES", ";".join(vals))) + else: + args.append(self.define("USE_CUDA", "OFF")) return args From ca27b96807e45484991765b5c901253aec006b81 Mon Sep 17 00:00:00 2001 From: Stephanie Christine Lam Date: Thu, 11 Sep 2025 19:47:01 -0700 Subject: [PATCH 49/53] Revert "Spack 1 update (#953)" This reverts commit 1f3e5e649f7929ce6c617d81c31a1974db7b55d6. --- .gitlab/tests/non_shared.yml | 2 +- .gitlab/utils/run-experiment.sh | 14 - checkout-versions.yaml | 3 +- experiments/amg2023/experiment.py | 1 - experiments/kripke/experiment.py | 2 +- experiments/laghos/experiment.py | 1 - experiments/raja-perf/experiment.py | 2 +- lib/benchpark/cmd/setup.py | 12 +- lib/benchpark/runtime.py | 43 +-- lib/benchpark/system.py | 98 +---- remote-urls.yaml | 1 - repo/ad/package.py | 4 - repo/affinity/package.py | 3 - repo/amg2023/package.py | 5 +- repo/babelstream/package.py | 5 - repo/blt/package.py | 3 +- repo/branson/package.py | 6 +- repo/caliper/package.py | 4 - repo/camp/package.py | 2 +- repo/chai/package.py | 2 +- repo/cray-mpich/package.py | 2 +- repo/cuda/package.py | 4 +- repo/enzyme/package.py | 4 - repo/essl/package.py | 2 +- repo/genesis/package.py | 5 - repo/gpcnet/package.py | 4 +- repo/gromacs/package.py | 8 +- repo/hipsycl/package.py | 3 - repo/hpcg/package.py | 7 +- repo/hpl/package.py | 8 +- repo/hypre/package.py | 13 +- repo/kokkos/package.py | 2 +- repo/kripke/package.py | 9 +- repo/laghos/package.py | 8 +- repo/lammps/package.py | 2 +- repo/mfem/package.py | 2 +- repo/osu-micro-benchmarks/package.py | 2 +- repo/phloem/package.py | 6 +- repo/quicksilver/package.py | 2 - repo/qws/package.py | 4 - repo/raja-perf/package.py | 6 +- repo/raja/package.py | 2 +- repo/remhos/package.py | 4 - repo/salmon-tddft/package.py | 4 - repo/saxpy/package.py | 2 - repo/smb/package.py | 4 - repo/spectrum-mpi/package.py | 2 +- repo/stream/package.py | 3 - repo/umpire/package.py | 2 +- systems/aws-pcluster/system.py | 34 +- systems/csc-lumi/system.py | 551 ++++++++++++++------------- systems/cscs-daint/system.py | 245 +++++++----- systems/cscs-eiger/system.py | 30 +- systems/jsc-juwels/system.py | 69 ++-- systems/lanl-venado/system.py | 71 ++-- systems/llnl-cluster/system.py | 162 ++++---- systems/llnl-elcapitan/system.py | 173 +++++---- systems/llnl-matrix/system.py | 148 ++++--- systems/llnl-sierra/system.py | 256 +++++++------ systems/riken-fugaku/system.py | 111 +++--- 60 files changed, 1136 insertions(+), 1053 deletions(-) diff --git a/.gitlab/tests/non_shared.yml b/.gitlab/tests/non_shared.yml index abdb92348..0689ce7c4 100644 --- a/.gitlab/tests/non_shared.yml +++ b/.gitlab/tests/non_shared.yml @@ -17,7 +17,7 @@ workflow: - HOST: lassen ARCHCONFIG: llnl-sierra SCHEDULER_PARAMETERS: -nnodes 1 -W 40 -q pci - BENCHMARK: [amg2023] + BENCHMARK: [amg2023, kripke] VARIANT: [+cuda, +openmp] run_tests_nonshared: resource_group: $HOST diff --git a/.gitlab/utils/run-experiment.sh b/.gitlab/utils/run-experiment.sh index f5be50942..8ab4468bf 100755 --- a/.gitlab/utils/run-experiment.sh +++ b/.gitlab/utils/run-experiment.sh @@ -4,20 +4,6 @@ set -e # Activate Virtual Environment . /usr/workspace/benchpark-dev/benchpark-venv/$SYS_TYPE/bin/activate - -if [ "$HOST" == "lassen" ]; then - echo "./bin/benchpark system init --dest=${HOST} ${ARCHCONFIG} $SYSTEM_ARGS" -else - echo "./bin/benchpark system init --dest=${HOST} ${ARCHCONFIG} cluster=$HOST $SYSTEM_ARGS" -fi -echo "./bin/benchpark experiment init --dest=${BENCHMARK} --system=${HOST} ${BENCHMARK} ${VARIANT}" -echo "./bin/benchpark setup ${BENCHMARK} wkp/" -echo ". wkp/setup.sh" -echo "cd ./wkp/${BENCHMARK}/${HOST}/workspace/" -echo "ramble --disable-logger --workspace-dir . workspace setup" -echo "ramble --disable-logger --workspace-dir . on --executor '{execute_experiment}' --where '{n_nodes} == 1'" -echo "ramble --disable-logger --workspace-dir . workspace analyze --format json yaml text" - # Initialize System if [ "$HOST" == "lassen" ]; then ./bin/benchpark system init --dest=${HOST} ${ARCHCONFIG} $SYSTEM_ARGS diff --git a/checkout-versions.yaml b/checkout-versions.yaml index f1fb4f775..851198578 100644 --- a/checkout-versions.yaml +++ b/checkout-versions.yaml @@ -4,5 +4,4 @@ # SPDX-License-Identifier: Apache-2.0 versions: ramble: 6b4ecac # develop on 5/06/2025 (newer than 0.6.0 release) - spack: 7eeef1f - spack-packages: a1941c9 + spack: 7e4b8aa # develop on 2/22/2025 (pre-breaking changes on 1.0) diff --git a/experiments/amg2023/experiment.py b/experiments/amg2023/experiment.py index 3cc8aa8de..51a9d0b54 100644 --- a/experiments/amg2023/experiment.py +++ b/experiments/amg2023/experiment.py @@ -115,4 +115,3 @@ def compute_applications_section(self): def compute_package_section(self): self.add_package_spec(self.name, [f"amg2023{self.determine_version()}"]) - self.add_package_spec("hypre", ["hypre+lapack"]) diff --git a/experiments/kripke/experiment.py b/experiments/kripke/experiment.py index a482cb95f..e4f1fc2c1 100644 --- a/experiments/kripke/experiment.py +++ b/experiments/kripke/experiment.py @@ -156,5 +156,5 @@ def compute_package_section(self): else "~single_memory" ) self.add_package_spec( - self.name, [f"kripke{self.determine_version()} {single_memory} +mpi"] + self.name, [f"kripke{self.determine_version()} {single_memory} "] ) diff --git a/experiments/laghos/experiment.py b/experiments/laghos/experiment.py index 838339c69..210cd72e6 100644 --- a/experiments/laghos/experiment.py +++ b/experiments/laghos/experiment.py @@ -75,4 +75,3 @@ def compute_applications_section(self): def compute_package_section(self): self.add_package_spec(self.name, [f"laghos{self.determine_version()} +metis"]) - self.add_package_spec("hypre", ["hypre@2.32.0: +lapack"]) diff --git a/experiments/raja-perf/experiment.py b/experiments/raja-perf/experiment.py index 4ea7474de..eb822d6b1 100644 --- a/experiments/raja-perf/experiment.py +++ b/experiments/raja-perf/experiment.py @@ -91,4 +91,4 @@ def compute_applications_section(self): self.add_experiment_variable("n_ranks", "{n_resources}", True) def compute_package_section(self): - self.add_package_spec(self.name, [f"raja-perf{self.determine_version()} +mpi"]) + self.add_package_spec(self.name, [f"raja-perf{self.determine_version()}"]) diff --git a/lib/benchpark/cmd/setup.py b/lib/benchpark/cmd/setup.py index 59fabcdc9..167cb7f45 100644 --- a/lib/benchpark/cmd/setup.py +++ b/lib/benchpark/cmd/setup.py @@ -173,17 +173,7 @@ def include_fn(fname): if pkg_manager == "spack": spack, first_time_spack = per_workspace_setup.spack_first_time_setup() if first_time_spack: - site_repos = ( - per_workspace_setup.spack_location / "etc" / "spack" / "repos.yaml" - ) - with open(site_repos, "w") as f: - f.write( - f"""\ -repos:: - benchpark: {source_dir}/repo - builtin: {per_workspace_setup.pkgs_location}/repos/spack_repo/builtin/ -""" - ) + spack("repo", "add", "--scope=site", f"{source_dir}/repo") pkg_str = f"""\ . {per_workspace_setup.spack_location}/share/spack/setup-env.sh diff --git a/lib/benchpark/runtime.py b/lib/benchpark/runtime.py index 9d601caec..39865bb50 100644 --- a/lib/benchpark/runtime.py +++ b/lib/benchpark/runtime.py @@ -68,43 +68,29 @@ def __init__(self, dest, upstream=None): self.dest = pathlib.Path(dest) self.upstream = upstream - self.ramble_location, self.spack_location, self.pkgs_location = ( + self.ramble_location, self.spack_location = ( self.dest / "ramble", self.dest / "spack", - self.dest / "spack-packages", ) # Read pinned versions of ramble and spack with open(benchpark.paths.checkout_versions, "r") as yaml_file: data = yaml.safe_load(yaml_file)["versions"] - self.ramble_commit, self.spack_commit, self.pkgs_commit = ( - data["ramble"], - data["spack"], - data["spack-packages"], - ) + self.ramble_commit, self.spack_commit = data["ramble"], data["spack"] # Read remote urls for ramble and spack with open(benchpark.paths.remote_urls, "r") as yaml_file: data = yaml.safe_load(yaml_file)["urls"] - remote_ramble_url, remote_spack_url, remote_pkgs_url = ( - data["ramble"], - data["spack"], - data["spack-packages"], - ) + remote_ramble_url, remote_spack_url = data["ramble"], data["spack"] # If this does not have an upstream, then we will be cloning from the URLs indicated in remote-urls.yaml if self.upstream is None: - self.ramble_url, self.spack_url, self.pkgs_url = ( - remote_ramble_url, - remote_spack_url, - remote_pkgs_url, - ) + self.ramble_url, self.spack_url = remote_ramble_url, remote_spack_url else: # Clone from local "upstream" repository - self.ramble_url, self.spack_url, self.pkgs_url = ( + self.ramble_url, self.spack_url = ( self.upstream.ramble_location, self.upstream.spack_location, - self.upstream.pkgs_location, ) def _check_and_update_bootstrap(self, desired_commit, location): @@ -131,11 +117,6 @@ def bootstrap(self): if internals not in sys.path: sys.path.insert(1, internals) - if not self.pkgs_location.exists(): - self._install_packages() - else: - self._check_and_update_bootstrap(self.pkgs_commit, self.pkgs_location) - # Spack does not go in sys.path, but we will manually access modules from it # The reason for this oddity is that spack modules will compete with the internal # spack modules from ramble @@ -162,15 +143,6 @@ def _install_spack(self): ) debug_print(f"Done cloning Spack ({self.spack_location})") - def _install_packages(self): - print(f"Cloning packages to {self.pkgs_location}") - git_clone_commit( - self.pkgs_url, - self.pkgs_commit, - self.pkgs_location, - ) - debug_print(f"Done cloning spack-packages ({self.pkgs_location})") - def _ramble(self): first_time = False if not self.ramble_location.exists(): @@ -179,13 +151,10 @@ def _ramble(self): return Command(self.ramble_location / "bin" / "ramble", env={}), first_time def _spack(self): - if not self.pkgs_location.exists(): - self._install_packages() - env = {"SPACK_DISABLE_LOCAL_CONFIG": "1"} spack = Command(self.spack_location / "bin" / "spack", env) spack_cache_location = self.spack_location / "misc-cache" - bootstrap_cache_location = self.dest / "sbc" + bootstrap_cache_location = self.spack_location / "b-c" first_time = False if not self.spack_location.exists(): first_time = True diff --git a/lib/benchpark/system.py b/lib/benchpark/system.py index bcd01c3b0..8bf7d3bf8 100644 --- a/lib/benchpark/system.py +++ b/lib/benchpark/system.py @@ -203,22 +203,20 @@ def compute_software_section(self): def compute_dict(self): # This can be overridden by any subclass that needs more flexibility - pkg_cfg = self.compute_packages_section() or {} - compiler_cfg = self.compute_compilers_section() - if compiler_cfg: - pkg_cfg = merge_dicts(pkg_cfg, compiler_cfg) - # "'packages:':" syntax is required to enforce spack to use benchpark-defined - # compilers instead of external compilers defined by spack compiler search (from ramble). - if pkg_cfg: - pkg_cfg = {"packages:": pkg_cfg["packages"]} - else: - pkg_cfg = {"packages": {}} + compilers = self.compute_compilers_section() return { "system_id": self.compute_system_id(), "variables": self.compute_variables_section(), "software": self.compute_software_section(), "auxiliary_software_files": { - "packages": pkg_cfg, + "compilers": ( + # "'compilers:':" syntax is required to enforce spack to use benchpark-defined + # compilers instead of external compilers defined by spack compiler search (from ramble). + {"compilers:": compilers["compilers"]} + if compilers + else None + ), + "packages": self.compute_packages_section(), }, } @@ -235,81 +233,3 @@ def _write_key_file(destdir, key, sys_dict): _write_key_file(destdir + "/" + key, k, system_dict[key]) else: _write_key_file(destdir, key, system_dict) - - -def merge_dicts(*dicts): - current = {} - for d in dicts: - if not d: - continue - current = _merge_dicts(current, d) - return current - - -def _merge_dicts(d1, d2): - result = dict(d1) - for k, v2 in d2.items(): - if k in result: - v1 = result[k] - if all(isinstance(x, dict) for x in (v1, v2)): - result[k] = _merge_dicts(v1, v2) - elif all(isinstance(x, list) for x in (v1, v2)): - result[k] = v1 + v2 - else: - raise ValueError(f"{k} merge mismatch: {v1}/{v2}") - else: - result[k] = v2 - return result - - -def hybrid_compiler_requirements(c_cmp, f_cmp): - return { - "packages": { - "all": { - "require": [ - { - "spec": rf"%[virtuals=c] {c_cmp}", - "when": r"%c", - }, - {"spec": rf"%[virtuals=cxx] {c_cmp}", "when": r"%cxx"}, - {"spec": rf"^[virtuals=fortran] {f_cmp}", "when": r"^fortran"}, - ] - } - } - } - - -def compiler_section_for(name, entries): - return {"packages": {name: {"externals": entries, "buildable": False}}} - - -def compiler_def( - spec, - prefix, - exes, - env=None, - extra_rpaths=None, - modules=None, - flags=None, - compilers_use_relative_paths=False, -): - lang_map = {} - for lang, exe in exes.items(): - if os.path.isabs(exe) or compilers_use_relative_paths: - lang_map[lang] = exe - else: - lang_map[lang] = os.path.join(prefix, "bin", exe) - entry = { - "spec": spec, - "prefix": prefix, - "extra_attributes": {"compilers": lang_map}, - } - if env: - entry["extra_attributes"]["environment"] = env - if extra_rpaths: - entry["extra_attributes"]["extra_rpaths"] = extra_rpaths - if modules: - entry["modules"] = modules - if flags: - entry["extra_attributes"]["flags"] = flags - return entry diff --git a/remote-urls.yaml b/remote-urls.yaml index 7221ad355..2dbc1050c 100644 --- a/remote-urls.yaml +++ b/remote-urls.yaml @@ -5,4 +5,3 @@ urls: ramble: https://github.com/GoogleCloudPlatform/ramble.git spack: https://github.com/spack/spack.git - spack-packages: https://github.com/spack/spack-packages.git diff --git a/repo/ad/package.py b/repo/ad/package.py index 83beb4f1c..87a0ad639 100644 --- a/repo/ad/package.py +++ b/repo/ad/package.py @@ -19,10 +19,6 @@ class Ad(CMakePackage): version("main", branch="main") - depends_on("c", type="build") - depends_on("cxx", type="build") - depends_on("fortran", type="build") - depends_on("enzyme") def cmake_args(self): diff --git a/repo/affinity/package.py b/repo/affinity/package.py index 27b6a6561..93a492ac0 100644 --- a/repo/affinity/package.py +++ b/repo/affinity/package.py @@ -20,9 +20,6 @@ class Affinity(CMakePackage, CudaPackage, ROCmPackage): variant("mpi", default=False, description="Build MPI support") variant("rocm", default=False, description="Build ROCm Support") - depends_on("c", type="build") - depends_on("cxx", type="build") - depends_on("mpi", when="+mpi") depends_on("hip", when="+rocm") depends_on("cuda", when="+cuda") diff --git a/repo/amg2023/package.py b/repo/amg2023/package.py index a876648c5..a8c3448a3 100644 --- a/repo/amg2023/package.py +++ b/repo/amg2023/package.py @@ -26,9 +26,6 @@ class Amg2023(CMakePackage, CudaPackage, ROCmPackage): variant("openmp", default=False, description="Enable OpenMP support") variant("caliper", default=False, description="Enable Caliper monitoring") - depends_on("c", type="build") - depends_on("cxx", type="build") - depends_on("mpi", when="+mpi") depends_on("hypre+mpi", when="+mpi") requires("+mpi", when="^hypre+mpi") @@ -39,12 +36,14 @@ class Amg2023(CMakePackage, CudaPackage, ROCmPackage): depends_on("hypre+mixedint~fortran") depends_on("hypre+cuda", when="+cuda") + depends_on("hypre+cublas", when="+cuda") depends_on("hypre+openmp", when="+openmp") requires("+cuda", when="^hypre+cuda") for arch in ("none", "50", "60", "70", "80", "90"): depends_on(f"hypre cuda_arch={arch}", when=f"cuda_arch={arch}") depends_on("hypre+rocm", when="+rocm") + depends_on("hypre+rocblas", when="+rocm") requires("+rocm", when="^hypre+rocm") for target in ("none", "gfx803", "gfx900", "gfx906", "gfx908", "gfx90a", "gfx942"): depends_on(f"hypre amdgpu_target={target}", when=f"amdgpu_target={target}") diff --git a/repo/babelstream/package.py b/repo/babelstream/package.py index f66aedaef..4e06c9164 100644 --- a/repo/babelstream/package.py +++ b/repo/babelstream/package.py @@ -87,11 +87,6 @@ class Babelstream(CMakePackage, CudaPackage, ROCmPackage): msg="RAJA implementation requires architecture to be specified by dir=", ) - # Confirmed c++ and Fortran - depends_on("c", type="build") - depends_on("cxx", type="build") - depends_on("fortran", type="build") - # Thrust Conflict # conflicts("~cuda", when="+thrust", msg="Thrust requires +cuda variant") depends_on("thrust", when="+thrust") diff --git a/repo/blt/package.py b/repo/blt/package.py index 0a9c0d2e4..5c396a714 100644 --- a/repo/blt/package.py +++ b/repo/blt/package.py @@ -7,8 +7,7 @@ import re from spack.package import * -from spack_repo.builtin.packages.blt.package import Blt as BuiltinBlt - +from spack.pkg.builtin.blt import Blt as BuiltinBlt class Blt(BuiltinBlt): diff --git a/repo/branson/package.py b/repo/branson/package.py index b8610b09a..14e31c343 100644 --- a/repo/branson/package.py +++ b/repo/branson/package.py @@ -4,7 +4,7 @@ # SPDX-License-Identifier: Apache-2.0 from spack.package import * -from spack_repo.builtin.packages.boost.package import Boost +from spack.pkg.builtin.boost import Boost class Branson(CMakePackage): @@ -30,10 +30,6 @@ class Branson(CMakePackage): ) version("0.81", sha256="493f720904791f06b49ff48c17a681532c6a4d9fa59636522cf3f9700e77efe4") version("0.8", sha256="85ffee110f89be00c37798700508b66b0d15de1d98c54328b6d02a9eb2cf1cb8") - - depends_on("c", type="build") - depends_on("cxx", type="build") - #depends_on("mpi") depends_on("mpi@2:") diff --git a/repo/caliper/package.py b/repo/caliper/package.py index 94744913a..1b13781bd 100644 --- a/repo/caliper/package.py +++ b/repo/caliper/package.py @@ -109,10 +109,6 @@ class Caliper(CachedCMakePackage, CudaPackage, ROCmPackage): variant("tools", default=True, description="Enable tools") variant("python", default=False, when="@v2.12:", description="Build Python bindings") - depends_on("c", type="build") - depends_on("cxx", type="build") - depends_on("fortran", type="build") - depends_on("adiak@0.1:0", when="@2.2:2.10 +adiak") depends_on("adiak@0.4:0", when="@2.11: +adiak") diff --git a/repo/camp/package.py b/repo/camp/package.py index c83189138..7450101ef 100644 --- a/repo/camp/package.py +++ b/repo/camp/package.py @@ -4,7 +4,7 @@ # SPDX-License-Identifier: Apache-2.0 from spack.package import * -from spack_repo.builtin.packages.camp.package import Camp as BuiltinCamp +from spack.pkg.builtin.camp import Camp as BuiltinCamp class Camp(BuiltinCamp): diff --git a/repo/chai/package.py b/repo/chai/package.py index 56d228c2f..fd89d4f84 100644 --- a/repo/chai/package.py +++ b/repo/chai/package.py @@ -4,7 +4,7 @@ # SPDX-License-Identifier: Apache-2.0 from spack.package import * -from spack_repo.builtin.packages.chai.package import Chai as BuiltinChai +from spack.pkg.builtin.chai import Chai as BuiltinChai class Chai(BuiltinChai): diff --git a/repo/cray-mpich/package.py b/repo/cray-mpich/package.py index cff4bf129..e6b3ec83c 100644 --- a/repo/cray-mpich/package.py +++ b/repo/cray-mpich/package.py @@ -4,7 +4,7 @@ # SPDX-License-Identifier: Apache-2.0 from spack.package import * -from spack_repo.builtin.packages.cray_mpich.package import CrayMpich as BuiltinCM +from spack.pkg.builtin.cray_mpich import CrayMpich as BuiltinCM class CrayMpich(BuiltinCM): diff --git a/repo/cuda/package.py b/repo/cuda/package.py index 51945ea5b..2011ea0f1 100644 --- a/repo/cuda/package.py +++ b/repo/cuda/package.py @@ -7,11 +7,11 @@ import llnl.util.tty as tty from spack.package import * -import spack_repo.builtin.packages.cuda.package +import spack.pkg.builtin.cuda from llnl.util.filesystem import find_headers -class Cuda(spack_repo.builtin.packages.cuda.package.Cuda): +class Cuda(spack.pkg.builtin.cuda.Cuda): # Layout of hpc-sdk puts some headers in sibling directories: # cuda compiler in /opt/nvidia/hpc_sdk/Linux_aarch64/24.7/cuda/12.5 # cufft in /opt/nvidia/hpc_sdk/Linux_aarch64/24.7/math_libs/12.5 diff --git a/repo/enzyme/package.py b/repo/enzyme/package.py index f99ee2b55..a2a6519fd 100644 --- a/repo/enzyme/package.py +++ b/repo/enzyme/package.py @@ -19,10 +19,6 @@ class Enzyme(CMakePackage): version("patch-1", branch="patch-1") - depends_on("c", type="build") - depends_on("cxx", type="build") - depends_on("fortran", type="build") - depends_on("llvm@18:") root_cmakelists_dir = "enzyme" diff --git a/repo/essl/package.py b/repo/essl/package.py index 1394c97b1..e8f433180 100644 --- a/repo/essl/package.py +++ b/repo/essl/package.py @@ -4,7 +4,7 @@ # SPDX-License-Identifier: Apache-2.0 from spack.package import * -from spack_repo.builtin.packages.essl.package import Essl as BuiltinEssl +from spack.pkg.builtin.essl import Essl as BuiltinEssl class Essl(BuiltinEssl): diff --git a/repo/genesis/package.py b/repo/genesis/package.py index b682ce331..62be4a495 100644 --- a/repo/genesis/package.py +++ b/repo/genesis/package.py @@ -39,11 +39,6 @@ class Genesis(AutotoolsPackage): variant("simd", description="Build with SIMD width.", default="auto", values=("auto", "MIC-AVX512", "CORE-AVX512", "CORE-AVX2"), multi=False) variant("debug", description="Set Debug level", default="0", values=("0", "1", "2", "3", "4"), multi=False) - # Has Fortran but I didn't see c/c++ code - depends_on("c", type="build") - depends_on("cxx", type="build") - depends_on("fortran", type="build") - depends_on("mpi", when="+mpi") depends_on("lapack", when="+lapack") depends_on("cuda", when="+gpu") diff --git a/repo/gpcnet/package.py b/repo/gpcnet/package.py index 5af600c4b..49caf2a36 100644 --- a/repo/gpcnet/package.py +++ b/repo/gpcnet/package.py @@ -20,9 +20,7 @@ class Gpcnet(MakefilePackage): version("1.2", tag="1.2") variant("mpi", default=False, description="Build with MPI support") - - depends_on("c", type="build") - + depends_on("mpi", when="+mpi") @property diff --git a/repo/gromacs/package.py b/repo/gromacs/package.py index abd6feeec..3234686ec 100644 --- a/repo/gromacs/package.py +++ b/repo/gromacs/package.py @@ -7,9 +7,7 @@ import llnl.util.filesystem as fs -from spack_repo.builtin.build_systems.cmake import CMakePackage, CMakeBuilder -from spack_repo.builtin.build_systems.cuda import CudaPackage -from spack_repo.builtin.build_systems.rocm import ROCmPackage +import spack.build_systems.cmake from spack.package import * @@ -205,8 +203,6 @@ class Gromacs(CMakePackage, CudaPackage, ROCmPackage): msg="GROMACS requires oneMKL 2021.3 or later since version 2023", ) - depends_on("c", type="build") - depends_on("mpi", when="+mpi") # Plumed 2.9.0 needs Gromacs 2023, 2022.5, 2021.7, 2020.7 @@ -430,7 +426,7 @@ def setup_build_environment(self, env): for rpath in self.compiler.extra_rpaths: env.prepend_path("LD_LIBRARY_PATH", rpath) -class CMakeBuilder(CMakeBuilder): +class CMakeBuilder(spack.build_systems.cmake.CMakeBuilder): @run_after("build") def build_test_binaries(self): """Build the test binaries. diff --git a/repo/hipsycl/package.py b/repo/hipsycl/package.py index 50660cf89..430cbe465 100644 --- a/repo/hipsycl/package.py +++ b/repo/hipsycl/package.py @@ -40,9 +40,6 @@ class Hipsycl(CMakePackage, CudaPackage, ROCmPackage): variant("sscp", default=False, description="Enable SSCP compiler") variant("intel", default=False, description="Enable Intel Level Zero backend for SYCL kernels") - depends_on("c", type="build") - depends_on("cxx", type="build") - depends_on("cmake@3.5:", type="build") depends_on("boost +filesystem", when="@:0.8") depends_on("boost@1.67.0:1.69.0 +filesystem +fiber +context cxxstd=17", when="@0.9.1:") diff --git a/repo/hpcg/package.py b/repo/hpcg/package.py index 33f39cb06..34e62c698 100644 --- a/repo/hpcg/package.py +++ b/repo/hpcg/package.py @@ -24,15 +24,12 @@ class Hpcg(CMakePackage): variant("openmp", default=True, description="Enable OpenMP support") variant("caliper", default=False, description="Enable Caliper support") - - depends_on("c", type="build") - depends_on("cxx", type="build") - depends_on("fortran", type="build") - + depends_on("mpi@1.1:") depends_on("caliper", when="+caliper") depends_on("adiak", when="+caliper") + def cmake_args(self): build_targets = ["all", "docs"] install_targets = ["install", "docs"] diff --git a/repo/hpl/package.py b/repo/hpl/package.py index 993124812..d6ea7c3c6 100644 --- a/repo/hpl/package.py +++ b/repo/hpl/package.py @@ -17,21 +17,17 @@ class Hpl(AutotoolsPackage): homepage = "https://www.netlib.org/benchmark/hpl/" url = "https://www.netlib.org/benchmark/hpl/hpl-2.2.tar.gz" - git = "https://github.com/daboehme/HPL-caliper.git" # Note: HPL uses autotools starting with 2.3 version("2.3", sha256="32c5c17d22330e6f2337b681aded51637fb6008d3f0eb7c277b163fadd612830") version("2.2", sha256="ac7534163a09e21a5fa763e4e16dfc119bc84043f6e6a807aba666518f8df440") - version("2.3-caliper", branch="master", preferred=False) + version("2.3-caliper", git="https://github.com/daboehme/HPL-caliper.git", branch="master", + preferred=False) variant("openmp", default=False, description="Enable OpenMP support") variant("caliper", default=False, description="Enable Caliper support") - depends_on("c", type="build") - depends_on("cxx", type="build") - depends_on("fortran", type="build") - depends_on("mpi@1.1:") depends_on("blas") diff --git a/repo/hypre/package.py b/repo/hypre/package.py index b38c99efd..fd2fa7a94 100644 --- a/repo/hypre/package.py +++ b/repo/hypre/package.py @@ -6,7 +6,7 @@ import os from spack.package import * -from spack_repo.builtin.packages.hypre.package import Hypre as BuiltinHypre +from spack.pkg.builtin.hypre import Hypre as BuiltinHypre class Hypre(BuiltinHypre): @@ -18,6 +18,17 @@ class Hypre(BuiltinHypre): "gcc": "gnu", } + def configure_args(self): + configure_args = super().configure_args() + + if (self.compiler.fc and 'xlf' in self.compiler.fc) or (self.compiler.f77 and 'xlf' in self.compiler.f77): + if not "+fortran" in self.spec: + configure_args.append("--with-fmangle=no-underscores") + configure_args.append("--with-fmangle-blas=no-underscores") + configure_args.append("--with-fmangle-lapack=no-underscores") + + return configure_args + def setup_build_environment(self, env): if self.spec.satisfies('%oneapi'): compiler_version = self.spec.compiler.version diff --git a/repo/kokkos/package.py b/repo/kokkos/package.py index fe1054438..9577eca43 100644 --- a/repo/kokkos/package.py +++ b/repo/kokkos/package.py @@ -4,7 +4,7 @@ # SPDX-License-Identifier: Apache-2.0 from spack.package import * -from spack_repo.builtin.packages.kokkos.package import Kokkos as BuiltinKokkos +from spack.pkg.builtin.kokkos import Kokkos as BuiltinKokkos class Kokkos(BuiltinKokkos): diff --git a/repo/kripke/package.py b/repo/kripke/package.py index f0cda3a90..345164243 100644 --- a/repo/kripke/package.py +++ b/repo/kripke/package.py @@ -58,10 +58,6 @@ class Kripke(CMakePackage, CudaPackage, ROCmPackage): conflicts("+single_memory", when="~rocm") depends_on("chai+single_memory", when="+single_memory") - depends_on("c", type="build") - depends_on("cxx", type="build") - depends_on("fortran", type="build") - depends_on("chai@2024.07.0+raja", when="@1.2.7.0:") depends_on("fmt@9.1", when=f"^chai@2024.07.0") @@ -132,9 +128,8 @@ def cmake_args(self): args.append("-DHIP_ROOT_DIR={0}".format(spec["hip"].prefix)) rocm_archs = spec.variants["amdgpu_target"].value if "none" not in rocm_archs: - arch_str = ",".join(rocm_archs) - args.append("-DHIP_HIPCC_FLAGS=--amdgpu-target={0}".format(arch_str)) - args.append("-DCMAKE_HIP_ARCHITECTURES={0}".format(arch_str)) + args.append("-DHIP_HIPCC_FLAGS=--amdgpu-target={0}".format(",".join(rocm_archs))) + args.append("-DCMAKE_HIP_ARCHITECTURES={0}".format(rocm_archs)) else: # Ensure build with hip is disabled args.append("-DENABLE_HIP=OFF") diff --git a/repo/laghos/package.py b/repo/laghos/package.py index 2adf767a1..46150fbfd 100644 --- a/repo/laghos/package.py +++ b/repo/laghos/package.py @@ -28,10 +28,6 @@ class Laghos(MakefilePackage, CudaPackage, ROCmPackage): variant("caliper", default=False, description="Enable/disable Caliper support") variant("ofast", default=False, description="Enable gcc optimization flags") - depends_on("c", type="build") - depends_on("cxx", type="build") - depends_on("fortran", type="build") - depends_on("mfem+mpi+metis", when="+metis") depends_on("mfem+mpi~metis", when="~metis") depends_on("caliper", when="+caliper") @@ -52,7 +48,7 @@ class Laghos(MakefilePackage, CudaPackage, ROCmPackage): depends_on("mpi") depends_on("hypre+mpi") - depends_on("hypre+cuda+mpi", when="+cuda") + depends_on("hypre+cuda+cublas+mpi", when="+cuda") depends_on("hypre+mixedint~fortran", when="@develop") depends_on("hypre+caliper", when="+caliper") @@ -63,7 +59,7 @@ class Laghos(MakefilePackage, CudaPackage, ROCmPackage): depends_on("mfem +cuda+mpi", when="+cuda") depends_on("mfem +rocm+mpi", when="+rocm") - depends_on("hypre +rocm+mpi", when="+rocm") + depends_on("hypre +rocm+rocblas +mpi", when="+rocm") requires("+rocm", when="^hypre+rocm") for target in ("none", "gfx803", "gfx900", "gfx906", "gfx908", "gfx90a", "gfx942"): depends_on(f"hypre amdgpu_target={target}", when=f"amdgpu_target={target}") diff --git a/repo/lammps/package.py b/repo/lammps/package.py index f02adcac6..d4190b5b5 100644 --- a/repo/lammps/package.py +++ b/repo/lammps/package.py @@ -4,7 +4,7 @@ # SPDX-License-Identifier: Apache-2.0 from spack.package import * -from spack_repo.builtin.packages.lammps.package import Lammps as BuiltinLammps +from spack.pkg.builtin.lammps import Lammps as BuiltinLammps class Lammps(BuiltinLammps): diff --git a/repo/mfem/package.py b/repo/mfem/package.py index db456df40..5121c50b4 100644 --- a/repo/mfem/package.py +++ b/repo/mfem/package.py @@ -8,7 +8,7 @@ import sys from spack.package import * -from spack_repo.builtin.packages.mfem.package import Mfem as BuiltinMfem +from spack.pkg.builtin.mfem import Mfem as BuiltinMfem class Mfem(BuiltinMfem): diff --git a/repo/osu-micro-benchmarks/package.py b/repo/osu-micro-benchmarks/package.py index 2196051cb..d94fd9731 100644 --- a/repo/osu-micro-benchmarks/package.py +++ b/repo/osu-micro-benchmarks/package.py @@ -4,7 +4,7 @@ # SPDX-License-Identifier: Apache-2.0 from spack.package import * -from spack_repo.builtin.packages.osu_micro_benchmarks.package import OsuMicroBenchmarks as BuiltinOsu +from spack.pkg.builtin.osu_micro_benchmarks import OsuMicroBenchmarks as BuiltinOsu class OsuMicroBenchmarks(BuiltinOsu, ROCmPackage): diff --git a/repo/phloem/package.py b/repo/phloem/package.py index 37992ac89..7fabb80a2 100644 --- a/repo/phloem/package.py +++ b/repo/phloem/package.py @@ -17,11 +17,7 @@ class Phloem(MakefilePackage): version("1.4.5", tag="v1.4.5") variant("mpi", default=False, description="Build with MPI support") - - depends_on("c", type="build") - depends_on("cxx", type="build") - depends_on("fortran", type="build") - + depends_on("mpi", when="+mpi") def install(self, spec, prefix): diff --git a/repo/quicksilver/package.py b/repo/quicksilver/package.py index e797ae5cc..1a18d1083 100644 --- a/repo/quicksilver/package.py +++ b/repo/quicksilver/package.py @@ -29,8 +29,6 @@ class Quicksilver(MakefilePackage): variant("cuda", default=False, description="Build with CUDA support") variant("caliper", default=False, description="Build with Caliper support") - depends_on("c", type="build") - depends_on("mpi", when="+mpi") depends_on("caliper", when="+caliper") depends_on("adiak", when="+caliper") diff --git a/repo/qws/package.py b/repo/qws/package.py index 0b7e5d2a8..c9403d050 100644 --- a/repo/qws/package.py +++ b/repo/qws/package.py @@ -19,10 +19,6 @@ class Qws(MakefilePackage): variant("openmp", default=True, description="Build with OpenMP enabled.") variant("caliper", default=False, description="Enable Caliper monitoring") - depends_on("c", type="build") - depends_on("cxx", type="build") - depends_on("fortran", type="build") - depends_on("mpi", when="+mpi") depends_on("caliper", when="+caliper") depends_on("adiak", when="+caliper") diff --git a/repo/raja-perf/package.py b/repo/raja-perf/package.py index 2ae7defdf..8bbba7561 100644 --- a/repo/raja-perf/package.py +++ b/repo/raja-perf/package.py @@ -35,7 +35,7 @@ def hip_repair_cache(options, spec): options.append( cmake_cache_path( "HIP_CLANG_INCLUDE_PATH", - glob.glob("{}/llvm/lib/clang/*/include".format(spec["llvm-amdgpu"].prefix))[0], + glob.glob("{}/lib/clang/*/include".format(spec["llvm-amdgpu"].prefix))[0], ) ) @@ -153,10 +153,6 @@ class RajaPerf(CachedCMakePackage, CudaPackage, ROCmPackage): variant("caliper",default=False, description="Build with support for Caliper based profiling") variant("kokkos", default=False, description="Include Kokkos implementations of the kernels in RAJAPerf") - depends_on("c", type="build") - depends_on("cxx", type="build") - depends_on("fortran", type="build") - depends_on("blt") depends_on("blt@0.7.0:", type="build", when="@2025.03.0:") depends_on("blt@0.5.2:", type="build", when="@2022.10.0:") diff --git a/repo/raja/package.py b/repo/raja/package.py index 028b12d30..8243ba748 100644 --- a/repo/raja/package.py +++ b/repo/raja/package.py @@ -4,7 +4,7 @@ # SPDX-License-Identifier: Apache-2.0 from spack.package import * -from spack_repo.builtin.packages.raja.package import Raja as BuiltinRaja +from spack.pkg.builtin.raja import Raja as BuiltinRaja class Raja(BuiltinRaja): diff --git a/repo/remhos/package.py b/repo/remhos/package.py index 8120ca172..663c359f8 100644 --- a/repo/remhos/package.py +++ b/repo/remhos/package.py @@ -31,10 +31,6 @@ class Remhos(MakefilePackage, CudaPackage, ROCmPackage): variant("metis", default=True, description="Enable/disable METIS support") variant("caliper", default=False, description="Enable/disable Caliper support") - depends_on("c", type="build") - depends_on("cxx", type="build") - depends_on("fortran", type="build") - depends_on("mfem+mpi+metis", when="+metis") depends_on("mfem+mpi~metis", when="~metis") depends_on("caliper", when="+caliper") diff --git a/repo/salmon-tddft/package.py b/repo/salmon-tddft/package.py index 0b0ea57c3..d0d028ebf 100644 --- a/repo/salmon-tddft/package.py +++ b/repo/salmon-tddft/package.py @@ -22,10 +22,6 @@ class SalmonTddft(CMakePackage): version("2.0.0", sha256="c3bb80bc5d338cba21cd8f345acbf2f2d81ef75af069a0a0ddbdc0acf358456c") version("1.2.1", sha256="a5045149e49abe9dd9edefe00cd1508a1323081bc3d034632176b728effdbaeb") - depends_on("c", type="build") - depends_on("cxx", type="build") - depends_on("fortran", type="build") - variant("mpi", default=False, description="Enable MPI") variant("openmp", default=False, description="Enable OpenMP") variant("libxc", default=False, description="Enable libxc") diff --git a/repo/saxpy/package.py b/repo/saxpy/package.py index 59d78e6ce..25dc76ce0 100644 --- a/repo/saxpy/package.py +++ b/repo/saxpy/package.py @@ -28,8 +28,6 @@ class Saxpy(CMakePackage, CudaPackage, ROCmPackage): conflicts("+rocm", when="+cuda+openmp") conflicts("+openmp", when="+rocm+cuda") - depends_on("c", type="build") - depends_on("cmake") depends_on("mpi") depends_on("caliper", when="+caliper") diff --git a/repo/smb/package.py b/repo/smb/package.py index 656d3ab53..0ae0f08e7 100644 --- a/repo/smb/package.py +++ b/repo/smb/package.py @@ -19,11 +19,7 @@ class Smb(MakefilePackage): variant("mpi", default=False, description="Build with MPI support") variant("rma", default=False, description="Build RMA-MT variant") - - depends_on("c", type="build") - depends_on("mpi", when="+mpi") - build_directory = ["src/mpi_overhead"] def edit(self, spec, prefix): diff --git a/repo/spectrum-mpi/package.py b/repo/spectrum-mpi/package.py index 41c2f3fe2..fba38532a 100644 --- a/repo/spectrum-mpi/package.py +++ b/repo/spectrum-mpi/package.py @@ -4,7 +4,7 @@ # SPDX-License-Identifier: Apache-2.0 from spack.package import * -from spack_repo.builtin.packages.spectrum_mpi.package import SpectrumMpi as BuiltinSM +from spack.pkg.builtin.spectrum_mpi import SpectrumMpi as BuiltinSM class SpectrumMpi(BuiltinSM): diff --git a/repo/stream/package.py b/repo/stream/package.py index d57a3069e..e047fd80f 100644 --- a/repo/stream/package.py +++ b/repo/stream/package.py @@ -24,9 +24,6 @@ class Stream(CMakePackage): requires("@5.10-caliper", when="+caliper") - depends_on("c", type="build") - depends_on("fortran", type="build") - depends_on("caliper", when="+caliper") depends_on("adiak@0.4:", when="+caliper") diff --git a/repo/umpire/package.py b/repo/umpire/package.py index ea3a4f171..f9f54f1de 100644 --- a/repo/umpire/package.py +++ b/repo/umpire/package.py @@ -4,7 +4,7 @@ # SPDX-License-Identifier: Apache-2.0 from spack.package import * -from spack_repo.builtin.packages.umpire.package import Umpire as BuiltinUmpire +from spack.pkg.builtin.umpire import Umpire as BuiltinUmpire class Umpire(BuiltinUmpire): diff --git a/systems/aws-pcluster/system.py b/systems/aws-pcluster/system.py index f94397fd2..a8fb23583 100644 --- a/systems/aws-pcluster/system.py +++ b/systems/aws-pcluster/system.py @@ -4,7 +4,7 @@ # SPDX-License-Identifier: Apache-2.0 -from benchpark.system import System, compiler_def, compiler_section_for +from benchpark.system import System from benchpark.directives import variant, maintainers from benchpark.openmpsystem import OpenMPCPUOnlySystem from benchpark.paths import hardware_descriptions @@ -101,16 +101,28 @@ def compute_packages_section(self): } def compute_compilers_section(self): - return compiler_section_for( - "gcc", - [ - compiler_def( - "gcc@7.3.1 languages=c,c++,fortran", - "/usr/", - {"c": "gcc", "cxx": "g++", "fortran": "gfortran"}, - ) - ], - ) + + return { + "compilers": [ + { + "compiler": { + "spec": "gcc@7.3.1", + "paths": { + "cc": "/usr/bin/gcc", + "cxx": "/usr/bin/g++", + "f77": "/usr/bin/gfortran", + "fc": "/usr/bin/gfortran", + }, + "flags": {}, + "operating_system": "alinux2", + "target": "x86_64", + "modules": [], + "environment": {}, + "extra_rpaths": [], + } + } + ] + } def compute_software_section(self): return { diff --git a/systems/csc-lumi/system.py b/systems/csc-lumi/system.py index 6ac7ce4d5..037f81247 100644 --- a/systems/csc-lumi/system.py +++ b/systems/csc-lumi/system.py @@ -7,7 +7,7 @@ from benchpark.directives import variant, maintainers from benchpark.paths import hardware_descriptions from benchpark.rocmsystem import ROCmSystem -from benchpark.system import System, compiler_def, compiler_section_for, merge_dicts +from benchpark.system import System from packaging.version import Version @@ -161,79 +161,107 @@ def compute_packages_section(self): return selections def compute_compilers_section(self): - chosen = [self.rocmcc_cfg()] + selections = self.rocmcc_cfg() if "cce" in self.spec.variants["compiler"][0]: - chosen.append(self.cce_compiler_cfg()) + selections["compilers"] += self.cce_compiler_cfg()["compilers"] else: - chosen.append(self.gcc_compiler_cfg()) + selections["compilers"] += self.gcc_compiler_cfg()["compilers"] - return merge_dicts(*chosen) + return selections def rocmcc_cfg(self): - return compiler_section_for( - "llvm-amdgpu", - [ - compiler_def( - f"llvm-amdgpu@{self.rocm_version}", - f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}/", - {"c": "amdclang", "cxx": "amdclang++", "fortran": "amdflang"}, - env={ - "set": {"RFE_811452_DISABLE": "1"}, - "append_path": {"LD_LIBRARY_PATH": "/opt/cray/pe/gcc-libs"}, - "prepend_path": { - "LD_LIBRARY_PATH": "/opt/cray/pe/pmi/6.1.12/lib", - "LIBRARY_PATH": f"/appl/lumi/SW/CrayEnv/EB/rocm/5.6.1/lib:/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}/lib64", + return { + "compilers": [ + { + "compiler": { + "spec": f"rocmcc@{self.rocm_version}", + "paths": { + "cc": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}/bin/amdclang", + "cxx": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}/bin/amdclang++", + "f77": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}/bin/amdflang", + "fc": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}/bin/amdflang", }, - }, - extra_rpaths=[ - f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}/lib", - f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}/lib64", - "/opt/cray/pe/gcc-libs", - ], - ) - ], - ) + # "flags": " ", # Uncomment if needed + "operating_system": "sles15", + "target": "any", + "modules": [], + "environment": { + "set": {"RFE_811452_DISABLE": "1"}, + "append_path": {"LD_LIBRARY_PATH": "/opt/cray/pe/gcc-libs"}, + "prepend_path": { + "LD_LIBRARY_PATH": "/opt/cray/pe/pmi/6.1.12/lib", + "LIBRARY_PATH": f"/appl/lumi/SW/CrayEnv/EB/rocm/5.6.1/lib:/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}/lib64", + }, + }, + "extra_rpaths": [ + f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}/lib", + f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}/lib64", + "/opt/cray/pe/gcc-libs", + ], + } + } + ] + } def cce_compiler_cfg(self): - return compiler_section_for( - "cce", - [ - compiler_def( - f"cce@{self.compiler_version}", - f"/opt/cray/pe/cce/{self.compiler_version}/", - {"c": "craycc", "cxx": "crayCC", "fortran": "crayftn"}, - env={ - "set": {"RFE_811452_DISABLE": "1"}, - "prepend_path": { - "LD_LIBRARY_PATH": "/opt/cray/pe/pmi/6.1.12/lib" + return { + "compilers": [ + { + "compiler": { + "spec": f"cce@{self.compiler_version}", + "paths": { + "cc": f"/opt/cray/pe/cce/{self.compiler_version}/bin/craycc", + "cxx": f"/opt/cray/pe/cce/{self.compiler_version}/bin/crayCC", + "f77": f"/opt/cray/pe/cce/{self.compiler_version}/bin/crayftn", + "fc": f"/opt/cray/pe/cce/{self.compiler_version}/bin/crayftn", }, - "append_path": { - "LD_LIBRARY_PATH": "/opt/cray/pe/gcc-libs", - "PKG_CONFIG_PATH": "/usr/lib64/pkgconfig", + # "flags": "", # Uncomment if needed + "operating_system": "sles15", + "target": "any", + "modules": [], + "environment": { + "set": {"RFE_811452_DISABLE": "1"}, + "prepend_path": { + "LD_LIBRARY_PATH": "/opt/cray/pe/pmi/6.1.12/lib" + }, + "append_path": { + "LD_LIBRARY_PATH": "/opt/cray/pe/gcc-libs", + "PKG_CONFIG_PATH": "/usr/lib64/pkgconfig", + }, }, - }, - extra_rpaths=["/opt/cray/pe/gcc-libs"], - ) - ], - ) + "extra_rpaths": ["/opt/cray/pe/gcc-libs"], + } + } + ] + } def gcc_compiler_cfg(self): - return compiler_section_for( - "gcc", - [ - compiler_def( - f"gcc@{self.compiler_version} languages:=c,c++,fortran", - f"/opt/cray/pe/gcc/{self.compiler_version}/", - {"c": "gcc", "cxx": "g++", "fortran": "gfortran"}, - env={ - "prepend_path": { - "LD_LIBRARY_PATH": "/opt/cray/pe/pmi/6.1.12/lib:/opt/cray/libfabric/1.15.2.0/lib64", - "PKG_CONFIG_PATH": "/usr/lib64/pkgconfig", - } - }, - ) - ], - ) + return { + "compilers": [ + { + "compiler": { + "spec": f"gcc@{self.compiler_version}", + "paths": { + "cc": f"/opt/cray/pe/gcc/{self.compiler_version}/bin/gcc", + "cxx": f"/opt/cray/pe/gcc/{self.compiler_version}/bin/g++", + "f77": f"/opt/cray/pe/gcc/{self.compiler_version}/bin/gfortran", + "fc": f"/opt/cray/pe/gcc/{self.compiler_version}/bin/gfortran", + }, + # "flags": "", # Uncomment if needed + "operating_system": "sles15", + "target": "any", + "modules": [], + "environment": { + "prepend_path": { + "LD_LIBRARY_PATH": "/opt/cray/pe/pmi/6.1.12/lib:/opt/cray/libfabric/1.15.2.0/lib64", + "PKG_CONFIG_PATH": "/usr/lib64/pkgconfig", + } + }, + "extra_rpaths": [], + } + } + ] + } def rocm_config(self): return { @@ -337,205 +365,206 @@ def rocm_config(self): } ], }, - # "llvm-amdgpu": { - # "buildable": False, - # "externals": [ - # { - # "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}/llvm", - # "spec": f"llvm-amdgpu@{self.rocm_version}", - # } - # ], - }, - "rccl": { - "buildable": False, - "externals": [ - { - "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", - "spec": f"rccl@{self.rocm_version}", - } - ], - }, - "rocalution": { - "buildable": False, - "externals": [ - { - "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", - "spec": f"rocalution@{self.rocm_version}", - } - ], - }, - "rocblas": { - "buildable": False, - "externals": [ - { - "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", - "spec": f"rocblas@{self.rocm_version}", - } - ], - }, - "rocfft": { - "buildable": False, - "externals": [ - { - "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", - "spec": f"rocfft@{self.rocm_version}", - } - ], - "variants": "amdgpu_target=auto amdgpu_target_sram_ecc=auto", - }, - "rocm-clang-ocl": { - "buildable": False, - "externals": [ - { - "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", - "spec": f"rocm-clang-ocl@{self.rocm_version}", - } - ], - }, - "rocm-cmake": { - "buildable": False, - "externals": [ - { - "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", - "spec": f"rocm-cmake@{self.rocm_version}", - } - ], - }, - "rocm-device-libs": { - "buildable": False, - "externals": [ - { - "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", - "spec": f"rocm-device-libs@{self.rocm_version}", - } - ], - }, - "rocm-gdb": { - "buildable": False, - "externals": [ - { - "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", - "spec": f"rocm-gdb@{self.rocm_version}", - } - ], - }, - "rocm-opencl": { - "buildable": False, - "externals": [ - { - "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}/opencl", - "spec": f"rocm-opencl@{self.rocm_version}", - } - ], - }, - "rocm-opencl-runtime": { - "buildable": False, - "externals": [ - { - "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}/opencl", - "spec": f"rocm-opencl-runtime@{self.rocm_version}", - } - ], - }, - "rocm-openmp-extras": { - "buildable": False, - "externals": [ - { - "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}/llvm", - "spec": f"rocm-openmp-extras@{self.rocm_version}", - } - ], - }, - "rocm-smi": { - "buildable": False, - "externals": [ - { - "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}/rocm_smi", - "spec": f"rocmsmi@{self.rocm_version}", - } - ], - }, - "rocm-smi-lib": { - "buildable": False, - "externals": [ - { - "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}/rocm_smi", - "spec": f"rocm-smi-lib@{self.rocm_version}", - } - ], - }, - "rocminfo": { - "buildable": False, - "externals": [ - { - "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", - "spec": f"rocminfo@{self.rocm_version}", - } - ], - }, - "rocprim": { - "buildable": False, - "externals": [ - { - "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", - "spec": f"rocprim@{self.rocm_version}", - } - ], - }, - "rocprofiler-dev": { - "buildable": False, - "externals": [ - { - "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", - "spec": f"rocprofiler-dev@{self.rocm_version}", - } - ], - }, - "rocrand": { - "buildable": False, - "externals": [ - { - "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", - "spec": f"rocrand@{self.rocm_version}", - } - ], - }, - "rocsolver": { - "buildable": False, - "externals": [ - { - "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", - "spec": f"rocsolver@{self.rocm_version}", - } - ], - }, - "rocsparse": { - "buildable": False, - "externals": [ - { - "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", - "spec": f"rocsparse@{self.rocm_version}", - } - ], - }, - "rocthrust": { - "buildable": False, - "externals": [ - { - "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", - "spec": f"rocthrust@{self.rocm_version}", - } - ], - }, - "roctracer-dev": { - "buildable": False, - "externals": [ - { - "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", - "spec": f"roctracer-dev@{self.rocm_version}", - } - ], - }, + "llvm-amdgpu": { + "buildable": False, + "externals": [ + { + "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}/llvm", + "spec": f"llvm-amdgpu@{self.rocm_version}", + } + ], + }, + "rccl": { + "buildable": False, + "externals": [ + { + "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", + "spec": f"rccl@{self.rocm_version}", + } + ], + }, + "rocalution": { + "buildable": False, + "externals": [ + { + "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", + "spec": f"rocalution@{self.rocm_version}", + } + ], + }, + "rocblas": { + "buildable": False, + "externals": [ + { + "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", + "spec": f"rocblas@{self.rocm_version}", + } + ], + }, + "rocfft": { + "buildable": False, + "externals": [ + { + "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", + "spec": f"rocfft@{self.rocm_version}", + } + ], + "variants": "amdgpu_target=auto amdgpu_target_sram_ecc=auto", + }, + "rocm-clang-ocl": { + "buildable": False, + "externals": [ + { + "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", + "spec": f"rocm-clang-ocl@{self.rocm_version}", + } + ], + }, + "rocm-cmake": { + "buildable": False, + "externals": [ + { + "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", + "spec": f"rocm-cmake@{self.rocm_version}", + } + ], + }, + "rocm-device-libs": { + "buildable": False, + "externals": [ + { + "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", + "spec": f"rocm-device-libs@{self.rocm_version}", + } + ], + }, + "rocm-gdb": { + "buildable": False, + "externals": [ + { + "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", + "spec": f"rocm-gdb@{self.rocm_version}", + } + ], + }, + "rocm-opencl": { + "buildable": False, + "externals": [ + { + "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}/opencl", + "spec": f"rocm-opencl@{self.rocm_version}", + } + ], + }, + "rocm-opencl-runtime": { + "buildable": False, + "externals": [ + { + "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}/opencl", + "spec": f"rocm-opencl-runtime@{self.rocm_version}", + } + ], + }, + "rocm-openmp-extras": { + "buildable": False, + "externals": [ + { + "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}/llvm", + "spec": f"rocm-openmp-extras@{self.rocm_version}", + } + ], + }, + "rocm-smi": { + "buildable": False, + "externals": [ + { + "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}/rocm_smi", + "spec": f"rocmsmi@{self.rocm_version}", + } + ], + }, + "rocm-smi-lib": { + "buildable": False, + "externals": [ + { + "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}/rocm_smi", + "spec": f"rocm-smi-lib@{self.rocm_version}", + } + ], + }, + "rocminfo": { + "buildable": False, + "externals": [ + { + "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", + "spec": f"rocminfo@{self.rocm_version}", + } + ], + }, + "rocprim": { + "buildable": False, + "externals": [ + { + "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", + "spec": f"rocprim@{self.rocm_version}", + } + ], + }, + "rocprofiler-dev": { + "buildable": False, + "externals": [ + { + "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", + "spec": f"rocprofiler-dev@{self.rocm_version}", + } + ], + }, + "rocrand": { + "buildable": False, + "externals": [ + { + "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", + "spec": f"rocrand@{self.rocm_version}", + } + ], + }, + "rocsolver": { + "buildable": False, + "externals": [ + { + "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", + "spec": f"rocsolver@{self.rocm_version}", + } + ], + }, + "rocsparse": { + "buildable": False, + "externals": [ + { + "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", + "spec": f"rocsparse@{self.rocm_version}", + } + ], + }, + "rocthrust": { + "buildable": False, + "externals": [ + { + "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", + "spec": f"rocthrust@{self.rocm_version}", + } + ], + }, + "roctracer-dev": { + "buildable": False, + "externals": [ + { + "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", + "spec": f"roctracer-dev@{self.rocm_version}", + } + ], + }, + } } def compute_software_section(self): diff --git a/systems/cscs-daint/system.py b/systems/cscs-daint/system.py index 669edf7e5..6416426ce 100644 --- a/systems/cscs-daint/system.py +++ b/systems/cscs-daint/system.py @@ -5,7 +5,7 @@ from benchpark.directives import variant, maintainers -from benchpark.system import System, compiler_def, compiler_section_for, merge_dicts +from benchpark.system import System from benchpark.cudasystem import CudaSystem from packaging.version import Version from benchpark.paths import hardware_descriptions @@ -142,98 +142,163 @@ def compute_packages_section(self): } def compute_compilers_section(self): - compiler_map = {} - compiler_map["cce"] = compiler_section_for( - "cce", - [ - compiler_def( - "cce@12.0.3", - "/path/is/now/needed/", # <-- TODO: this needs to be filled in - {"c": "cc", "cxx": "CC", "fortran": "ftn"}, - modules=["PrgEnv-cray", "cce/12.0.3"], - compilers_use_relative_paths=True, - ) - ], - ) - compiler_map["gcc9"] = compiler_section_for( - "gcc", - [ - compiler_def( - "gcc@9.3.0 languages:=c,c++,fortran", - "/path/is/now/needed/", # <-- TODO: this needs to be filled in - {"c": "cc", "cxx": "CC", "fortran": "ftn"}, - modules=["PrgEnv-gnu", "gcc/9.3.0"], - compilers_use_relative_paths=True, - ) - ], - ) - compiler_map["gcc10"] = compiler_section_for( - "gcc", - [ - compiler_def( - "gcc@10.3.0 languages:=c,c++,fortran", - "/path/is/now/needed/", # <-- TODO: this needs to be filled in - {"c": "cc", "cxx": "CC", "fortran": "ftn"}, - modules=["PrgEnv-gnu", "gcc/10.3.0"], - compilers_use_relative_paths=True, - ) - ], - ) - compiler_map["gcc11"] = compiler_section_for( - "gcc", - [ - compiler_def( - "gcc@11.2.0 languages:=c,c++,fortran", - "/path/is/now/needed/", # <-- TODO: this needs to be filled in - {"c": "cc", "cxx": "CC", "fortran": "ftn"}, - modules=["PrgEnv-gnu", "gcc/11.2.0"], - compilers_use_relative_paths=True, - ) - ], - ) - compiler_map["intel"] = compiler_section_for( - "intel-oneapi-compilers", - [ - compiler_def( - "intel-oneapi-compilers@2021.3.0", - "/path/is/now/needed/", # <-- TODO: this needs to be filled in - {"c": "cc", "cxx": "CC", "fortran": "ftn"}, - modules=["PrgEnv-intel", "intel/2021.3.0"], - compilers_use_relative_paths=True, - ) - ], - ) - compiler_map["pgi"] = compiler_section_for( - "pgi", - [ - compiler_def( - "pgi@20.1.1", - "/path/is/now/needed/", # <-- TODO: this needs to be filled in - {"c": "cc", "cxx": "CC", "fortran": "ftn"}, - modules=["PrgEnv-pgi", "pgi/20.1.1"], - compilers_use_relative_paths=True, - ) - ], - ) - compiler_map["nvhpc"] = compiler_section_for( - "nvhpc", - [ - compiler_def( - "nvhpc@21.3", - "/path/is/now/needed/", # <-- TODO: this needs to be filled in - {"c": "cc", "cxx": "CC", "fortran": "ftn"}, - modules=["PrgEnv-nvidia", "nvidia/21.3"], - compilers_use_relative_paths=True, - ) - ], - ) + compiler_map = { + "cce": { + "compilers": [ + { + "compiler": { + "spec": "cce@12.0.3", + "paths": { + "cc": "cc", + "cxx": "CC", + "f77": "ftn", + "fc": "ftn", + }, + "flags": {}, + "operating_system": "cnl7", + "target": "any", + "modules": ["PrgEnv-cray", "cce/12.0.3"], + "environment": {}, + "extra_rpaths": [], + } + } + ] + }, + "gcc9": { + "compilers": [ + { + "compiler": { + "spec": "gcc@9.3.0", + "paths": { + "cc": "cc", + "cxx": "CC", + "f77": "ftn", + "fc": "ftn", + }, + "flags": {}, + "operating_system": "cnl7", + "target": "any", + "modules": ["PrgEnv-gnu", "gcc/9.3.0"], + "environment": {}, + "extra_rpaths": [], + } + } + ] + }, + "gcc10": { + "compilers": [ + { + "compiler": { + "spec": "gcc@10.3.0", + "paths": { + "cc": "cc", + "cxx": "CC", + "f77": "ftn", + "fc": "ftn", + }, + "flags": {}, + "operating_system": "cnl7", + "target": "any", + "modules": ["PrgEnv-gnu", "gcc/10.3.0"], + "environment": {}, + "extra_rpaths": [], + } + } + ] + }, + "gcc11": { + "compilers": [ + { + "compiler": { + "spec": "gcc@11.2.0", + "paths": { + "cc": "cc", + "cxx": "CC", + "f77": "ftn", + "fc": "ftn", + }, + "flags": {}, + "operating_system": "cnl7", + "target": "any", + "modules": ["PrgEnv-gnu", "gcc/11.2.0"], + "environment": {}, + "extra_rpaths": [], + } + } + ] + }, + "intel": { + "compilers": [ + { + "compiler": { + "spec": "intel@2021.3.0", + "paths": { + "cc": "cc", + "cxx": "CC", + "f77": "ftn", + "fc": "ftn", + }, + "flags": {}, + "operating_system": "cnl7", + "target": "any", + "modules": ["PrgEnv-intel", "intel/2021.3.0"], + "environment": {}, + "extra_rpaths": [], + } + } + ] + }, + "pgi": { + "compilers": [ + { + "compiler": { + "spec": "pgi@20.1.1", + "paths": { + "cc": "cc", + "cxx": "CC", + "f77": "ftn", + "fc": "ftn", + }, + "flags": {}, + "operating_system": "cnl7", + "target": "any", + "modules": ["PrgEnv-pgi", "pgi/20.1.1"], + "environment": {}, + "extra_rpaths": [], + } + } + ] + }, + "nvhpc": { + "compilers": [ + { + "compiler": { + "spec": "nvhpc@21.3", + "paths": { + "cc": "cc", + "cxx": "CC", + "f77": "ftn", + "fc": "ftn", + }, + "flags": {}, + "operating_system": "cnl7", + "target": "any", + "modules": ["PrgEnv-nvidia", "nvidia/21.3"], + "environment": {}, + "extra_rpaths": [], + } + } + ] + }, + } - collected = list() compiler_variant = self.spec.variants["compiler"][0] - for key, cfg in compiler_map.items(): + selections = {"compilers": []} + for key, config in compiler_map.items(): if key in compiler_variant: - collected.append(cfg) - return merge_dicts(*collected) + selections["compilers"] += config["compilers"] + + return selections def cuda_config(self, cuda_version): if cuda_version == "10.2.89": diff --git a/systems/cscs-eiger/system.py b/systems/cscs-eiger/system.py index 8bb459906..f59115e92 100644 --- a/systems/cscs-eiger/system.py +++ b/systems/cscs-eiger/system.py @@ -4,7 +4,7 @@ # SPDX-License-Identifier: Apache-2.0 from benchpark.directives import variant, maintainers -from benchpark.system import System, compiler_def, compiler_section_for +from benchpark.system import System from benchpark.openmpsystem import OpenMPCPUOnlySystem from packaging.version import Version from benchpark.paths import hardware_descriptions @@ -42,18 +42,22 @@ def __init__(self, spec): setattr(self, k, v) def compute_compilers_section(self): - return compiler_section_for( - "gcc", - [ - compiler_def( - "gcc@12.3.0 languages:=c,c++,fortran", - "/path/is/now/needed/", # <-- TODO: this needs to be filled in - {"c": "cc", "cxx": "CC", "fortran": "ftn"}, - modules=["PrgEnv-gnu", "gcc/12.3.0"], - compilers_use_relative_paths=True, - ) - ], - ) + return { + "compilers": [ + { + "compiler": { + "spec": "gcc@12.3.0", + "paths": {"cc": "cc", "cxx": "CC", "f77": "ftn", "fc": "ftn"}, + "flags": {}, + "target": "any", + "operating_system": "HPECray", + "modules": ["PrgEnv-gnu", "gcc/12.3.0"], + "environment": {}, + "extra_rpaths": [], + } + } + ] + } def compute_packages_section(self): diff --git a/systems/jsc-juwels/system.py b/systems/jsc-juwels/system.py index 2832cb384..ff2773e96 100644 --- a/systems/jsc-juwels/system.py +++ b/systems/jsc-juwels/system.py @@ -4,7 +4,7 @@ # SPDX-License-Identifier: Apache-2.0 from benchpark.directives import variant, maintainers -from benchpark.system import System, compiler_def, compiler_section_for, merge_dicts +from benchpark.system import System from benchpark.cudasystem import CudaSystem from packaging.version import Version from benchpark.paths import hardware_descriptions @@ -60,35 +60,48 @@ def __init__(self, spec): setattr(self, k, v) def compute_compilers_section(self): - nvhpc_cfg = compiler_section_for( - "nvhpc", - [ - compiler_def( - "nvhpc@23.7", - "/p/software/juwelsbooster/stages/2024/software/NVHPC/23.7-CUDA-12/Linux_aarch64/23.7/compilers/", - {"c": "nvc", "cxx": "nvc++", "fortran": "nvfortran"}, - modules=["Stages/2024", "NVHPC/23.7"], - ) - ], - ) + selections = { + "compilers": [ + { + "compiler": { + "spec": "nvhpc@23.7", + "paths": { + "cc": "/p/software/juwelsbooster/stages/2024/software/NVHPC/23.7-CUDA-12/Linux_aarch64/23.7/compilers/bin/nvc", + "cxx": "/p/software/juwelsbooster/stages/2024/software/NVHPC/23.7-CUDA-12/Linux_aarch64/23.7/compilers/bin/nvc++", + "f77": "/p/software/juwelsbooster/stages/2024/software/NVHPC/23.7-CUDA-12/Linux_aarch64/23.7/compilers/bin/nvfortran", + "fc": "/p/software/juwelsbooster/stages/2024/software/NVHPC/23.7-CUDA-12/Linux_aarch64/23.7/compilers/bin/nvfortran", + }, + "operating_system": "rocky8", + "target": "x86_64", + "modules": ["Stages/2024", "NVHPC/23.7"], + "environment": {}, + "extra_rpaths": [], + } + } + ] + } if self.spec.satisfies("compiler=gcc"): - gcc_cfg = compiler_section_for( - "gcc", - [ - compiler_def( - "gcc@12.3.0 languages:=c,c++,fortran", - "/p/software/juwelsbooster/stages/2024/software/GCCcore/12.3.0/", - {"c": "gcc", "cxx": "g++", "fortran": "gfortran"}, - modules=["Stages/2024", "GCC/12.3.0"], - ) - ], - ) - cfg = merge_dicts(nvhpc_cfg, gcc_cfg) - else: - cfg = nvhpc_cfg - - return cfg + selections["compilers"] += [ + { + "compiler": { + "spec": "gcc@12.3.0", + "paths": { + "cc": "/p/software/juwelsbooster/stages/2024/software/GCCcore/12.3.0/bin/gcc", + "cxx": "/p/software/juwelsbooster/stages/2024/software/GCCcore/12.3.0/bin/g++", + "f77": "/p/software/juwelsbooster/stages/2024/software/GCCcore/12.3.0/bin/gfortran", + "fc": "/p/software/juwelsbooster/stages/2024/software/GCCcore/12.3.0/bin/gfortran", + }, + "operating_system": "rocky9", + "target": "aarch64", + "modules": ["Stages/2024", "GCC/12.3.0"], + "environment": {}, + "extra_rpaths": [], + } + } + ] + + return selections def compute_packages_section(self): diff --git a/systems/lanl-venado/system.py b/systems/lanl-venado/system.py index 8563053b2..0247d2564 100644 --- a/systems/lanl-venado/system.py +++ b/systems/lanl-venado/system.py @@ -6,7 +6,7 @@ from benchpark.directives import variant, maintainers from benchpark.cudasystem import CudaSystem -from benchpark.system import System, compiler_def, compiler_section_for, merge_dicts +from benchpark.system import System from benchpark.paths import hardware_descriptions from packaging.version import Version @@ -164,52 +164,65 @@ def compute_packages_section(self): return selections def compute_compilers_section(self): - gcc_cfg = compiler_section_for( - "gcc", - [ - compiler_def( - "gcc@12.3.0 languages:=c,c++,fortran", - "/usr/projects/hpcsoft/tce/24-07/cos3-aarch64-cc90/compilers/gcc/12.3.0/", - {"c": "gcc", "cxx": "g++", "fortran": "gfortran"}, - ) - ], - ) - + selections = { + "compilers": [ + { + "compiler": { + "spec": "gcc@12.3.0", + "paths": { + "cc": "/usr/projects/hpcsoft/tce/24-07/cos3-aarch64-cc90/compilers/gcc/12.3.0/bin/gcc", + "cxx": "/usr/projects/hpcsoft/tce/24-07/cos3-aarch64-cc90/compilers/gcc/12.3.0/bin/g++", + "f77": "/usr/projects/hpcsoft/tce/24-07/cos3-aarch64-cc90/compilers/gcc/12.3.0/bin/gfortran", + "fc": "/usr/projects/hpcsoft/tce/24-07/cos3-aarch64-cc90/compilers/gcc/12.3.0/bin/gfortran", + }, + "flags": {}, + "operating_system": "sles15", + "target": "aarch64", + "modules": [], + "environment": {}, + "extra_rpaths": [], + } + } + ] + } # TODO: Construct/extract/customize compiler information from the working set if self.spec.satisfies("compiler=cce"): - cce_cfg = compiler_section_for( - "cce", - [ - compiler_def( - "cce@18.0.0", - "/opt/cray/pe/cce/18.0.0/", - {"c": "cracc", "cxx": "crayCC", "fortran": "crayftn"}, - flags={ + selections["compilers"] += [ + { + "compiler": { + "spec": "cce@18.0.0", + "paths": { + "cc": "/opt/cray/pe/cce/18.0.0/bin/craycc", + "cxx": "/opt/cray/pe/cce/18.0.0/bin/crayCC", + "f77": "/opt/cray/pe/cce/18.0.0/bin/crayftn", + "fc": "/opt/cray/pe/cce/18.0.0/bin/crayftn", + }, + "flags": { "cflags": "-g -O2 --gcc-toolchain=/usr/projects/hpcsoft/tce/24-07/cos3-aarch64-cc90/compilers/gcc/12.3.0", "cxxflags": "-g -O2 --gcc-toolchain=/usr/projects/hpcsoft/tce/24-07/cos3-aarch64-cc90/compilers/gcc/12.3.0", "fflags": "-g -O2 -hnopattern", "ldflags": "-ldl", }, - env={ + "operating_system": "sles15", + "target": "aarch64", + "modules": [], + "environment": { "prepend_path": { "LD_LIBRARY_PATH": "/opt/cray/pe/cce/18.0.0/cce/aarch64/lib:/opt/cray/libfabric/1.20.1/lib64:/usr/projects/hpcsoft/tce/24-07/cos3-aarch64-cc90/compilers/gcc/12.3.0/lib:/usr/projects/hpcsoft/tce/24-07/cos3-aarch64-cc90/compilers/gcc/12.3.0/lib64:/opt/cray/pe/gcc-libs" } }, - extra_rpaths=[ + "extra_rpaths": [ "/opt/cray/pe/gcc-libs", "/opt/cray/pe/cce/18.0.0/cce/aarch64/lib", "/opt/cray/libfabric/1.20.1/lib64", "/usr/projects/hpcsoft/tce/24-07/cos3-aarch64-cc90/compilers/gcc/12.3.0/lib", "/usr/projects/hpcsoft/tce/24-07/cos3-aarch64-cc90/compilers/gcc/12.3.0/lib64", ], - ) - ], - ) - cfg = merge_dicts(gcc_cfg, cce_cfg) - else: - cfg = gcc_cfg + } + } + ] - return cfg + return selections def mpi_config(self): mpi_version = "8.1.30" diff --git a/systems/llnl-cluster/system.py b/systems/llnl-cluster/system.py index 7c1d08e44..d773b6f04 100644 --- a/systems/llnl-cluster/system.py +++ b/systems/llnl-cluster/system.py @@ -5,13 +5,7 @@ from benchpark.directives import variant, maintainers -from benchpark.system import ( - System, - JobQueue, - compiler_def, - compiler_section_for, - merge_dicts, -) +from benchpark.system import System, JobQueue from benchpark.openmpsystem import OpenMPCPUOnlySystem from benchpark.paths import hardware_descriptions @@ -203,8 +197,6 @@ def compute_packages_section(self): | { "mpi": { "buildable": False, - }, - "mvapich2": { "externals": [ { "spec": "mvapich2@2.3.7-gcc1211", @@ -214,7 +206,7 @@ def compute_packages_section(self): }, } ], - }, + } } } elif self.spec.satisfies("compiler=intel"): @@ -223,8 +215,6 @@ def compute_packages_section(self): | { "mpi": { "buildable": False, - }, - "mvapich2": { "externals": [ { "spec": "mvapich2@2.3.7-intel202160classic", @@ -234,7 +224,7 @@ def compute_packages_section(self): }, } ], - }, + } } } elif self.spec.satisfies("compiler=oneapi"): @@ -243,8 +233,6 @@ def compute_packages_section(self): | { "mpi": { "buildable": False, - }, - "mvapich2": { "externals": [ { "spec": "mvapich2@2.3.7-intel202321", @@ -254,73 +242,113 @@ def compute_packages_section(self): }, } ], - }, + } } } + selections["packages"] |= self.compiler_weighting_cfg()["packages"] + return selections + def compiler_weighting_cfg(self): + if self.spec.satisfies("compiler=oneapi"): + return {"packages": {"all": {"require": [{"one_of": ["%oneapi", "%gcc"]}]}}} + else: + return {"packages": {}} + def compute_compilers_section(self): + selections = {} if self.spec.satisfies("compiler=gcc"): - cfg = compiler_section_for( - "gcc", - [ - compiler_def( - "gcc@12.1.1 languages:=c,c++,fortran", - "/usr/tce/packages/gcc/gcc-12.1.1/", - {"c": "gcc", "cxx": "g++", "fortran": "gfortran"}, - ) - ], - ) + selections = { + "compilers": [ + { + "compiler": { + "spec": "gcc@12.1.1", + "paths": { + "cc": "/usr/tce/packages/gcc/gcc-12.1.1/bin/gcc", + "cxx": "/usr/tce/packages/gcc/gcc-12.1.1/bin/g++", + "f77": "/usr/tce/packages/gcc/gcc-12.1.1/bin/gfortran", + "fc": "/usr/tce/packages/gcc/gcc-12.1.1/bin/gfortran", + }, + "flags": {}, + "operating_system": "rhel8", + "target": "x86_64", + "modules": [], + "environment": {}, + "extra_rpaths": [], + } + } + ] + } elif self.spec.satisfies("compiler=intel"): - cfg = compiler_section_for( - "intel-oneapi-compilers-classic", - [ - compiler_def( - "intel-oneapi-compilers-classic@2021.6.0~envmods", - "/usr/tce/packages/intel-classic/intel-classic-2021.6.0/", - {"c": "icc", "cxx": "icpc", "fortran": "ifort"}, - ) - ], - ) + selections = { + "compilers": [ + { + "compiler": { + "spec": "intel@2021.6.0-classic", + "paths": { + "cc": "/usr/tce/packages/intel-classic/intel-classic-2021.6.0/bin/icc", + "cxx": "/usr/tce/packages/intel-classic/intel-classic-2021.6.0/bin/icpc", + "f77": "/usr/tce/packages/intel-classic/intel-classic-2021.6.0/bin/ifort", + "fc": "/usr/tce/packages/intel-classic/intel-classic-2021.6.0/bin/ifort", + }, + "flags": {}, + "operating_system": "rhel8", + "target": "x86_64", + "modules": [], + "environment": {}, + "extra_rpaths": [], + } + } + ] + } elif self.spec.satisfies("compiler=oneapi"): - gcc_cfg = compiler_section_for( - "gcc", - [ - compiler_def( - "gcc@12.1.1", - "/usr/tce/packages/gcc/gcc-12.1.1/", - {"c": "gcc", "cxx": "g++", "fortran": "gfortran"}, - ) - ], - ) - oneapi_cfg = compiler_section_for( - "intel-oneapi-compilers", - [ - compiler_def( - "intel-oneapi-compilers@2023.2.1~envmods", - "/usr/tce/packages/intel/intel-2023.2.1/compiler/2023.2.1/linux/", - {"c": "icx", "cxx": "icpx", "fortran": "ifx"}, - ) - ], - ) - prefs = {"one_of": ["%oneapi", "%gcc"], "when": "%c"} - weighting_cfg = {"packages": {"all": {"require": [prefs]}}} - cfg = merge_dicts(gcc_cfg, oneapi_cfg, weighting_cfg) + selections = { + "compilers": [ + { + "compiler": { + "spec": "gcc@12.1.1", + "paths": { + "cc": "/usr/tce/packages/gcc/gcc-12.1.1/bin/gcc", + "cxx": "/usr/tce/packages/gcc/gcc-12.1.1/bin/g++", + "f77": "/usr/tce/packages/gcc/gcc-12.1.1/bin/gfortran", + "fc": "/usr/tce/packages/gcc/gcc-12.1.1/bin/gfortran", + }, + "flags": {}, + "operating_system": "rhel8", + "target": "x86_64", + "modules": [], + "environment": {}, + "extra_rpaths": [], + } + }, + { + "compiler": { + "spec": "oneapi@2023.2.1", + "paths": { + "cc": "/usr/tce/packages/intel/intel-2023.2.1/compiler/2023.2.1/linux/bin/icx", + "cxx": "/usr/tce/packages/intel/intel-2023.2.1/compiler/2023.2.1/linux/bin/icpx", + "f77": "/usr/tce/packages/intel/intel-2023.2.1/compiler/2023.2.1/linux/bin/ifx", + "fc": "/usr/tce/packages/intel/intel-2023.2.1/compiler/2023.2.1/linux/bin/ifx", + }, + "flags": {}, + "operating_system": "rhel8", + "target": "x86_64", + "modules": [], + "environment": {}, + "extra_rpaths": [], + } + }, + ] + } - return cfg + return selections def compute_software_section(self): - default_compiler = "gcc" - if self.spec.satisfies("compiler=intel"): - default_compiler = "intel-oneapi-compilers-classic" - elif self.spec.satisfies("compiler=oneapi"): - default_compiler = "intel-oneapi-compilers" - return { "software": { "packages": { - "default-compiler": {"pkg_spec": default_compiler}, + "default-compiler": {"pkg_spec": self.spec.variants["compiler"][0]}, "default-mpi": {"pkg_spec": "mvapich2"}, "compiler-gcc": {"pkg_spec": "gcc"}, "compiler-intel": {"pkg_spec": "intel"}, diff --git a/systems/llnl-elcapitan/system.py b/systems/llnl-elcapitan/system.py index 4eacfafc6..8f528f198 100644 --- a/systems/llnl-elcapitan/system.py +++ b/systems/llnl-elcapitan/system.py @@ -7,13 +7,7 @@ from benchpark.directives import variant, maintainers from benchpark.paths import hardware_descriptions from benchpark.rocmsystem import ROCmSystem -from benchpark.system import ( - System, - JobQueue, - compiler_def, - compiler_section_for, - merge_dicts, -) +from benchpark.system import System, JobQueue from benchpark.openmpsystem import OpenMPCPUOnlySystem from packaging.version import Version @@ -208,7 +202,7 @@ def __init__(self, spec): def compute_packages_section(self): selections = { "packages": { - "all": {"require": [{"spec": "target=x86_64:"}]}, + "all": {"require": "target=x86_64:"}, "tar": {"externals": [{"spec": "tar@1.30", "prefix": "/usr"}]}, "coreutils": { "externals": [{"spec": "coreutils@8.30", "prefix": "/usr"}] @@ -351,40 +345,53 @@ def compute_packages_section(self): } } + selections["packages"] |= self.compiler_weighting_cfg()["packages"] + return selections def compiler_weighting_cfg(self): compiler = self.spec.variants["compiler"][0] if compiler == "cce": - prefs = {"one_of": ["%cce", "%gcc"], "when": "%c"} - return {"packages": {"all": {"require": [prefs]}}} + return {"packages": {"all": {"require": [{"one_of": ["%cce", "%gcc"]}]}}} elif compiler == "gcc": return {"packages": {}} elif compiler == "rocmcc": - prefs = {"one_of": ["%rocmcc", "%gcc"], "when": "%c"} - return {"packages": {"all": {"require": [prefs]}}} + return {"packages": {"all": {"require": [{"one_of": ["%rocmcc", "%gcc"]}]}}} else: raise ValueError(f"Unexpected value for compiler: {compiler}") def compute_compilers_section(self): - cfg = compiler_section_for( - "gcc", - [ - compiler_def( - "gcc@12.2.0 languages=c,c++,fortran", - "/opt/cray/pe/gcc/12.2.0/", - {"c": "gcc", "cxx": "g++", "fortran": "gfortran"}, - ) - ], - ) - + selections = { + "compilers": [ + { + "compiler": { + "spec": "gcc@12.2.0", + "paths": { + "cc": "/opt/cray/pe/gcc/12.2.0/bin/gcc", + "cxx": "/opt/cray/pe/gcc/12.2.0/bin/g++", + "f77": "/opt/cray/pe/gcc/12.2.0/bin/gfortran", + "fc": "/opt/cray/pe/gcc/12.2.0/bin/gfortran", + }, + "flags": {}, + "operating_system": "rhel8", + "target": "x86_64", + "modules": [], + "environment": {}, + "extra_rpaths": [], + } + } + ] + } if self.spec.satisfies("compiler=cce") or self.spec.satisfies( "compiler=rocmcc" ): - cfg = merge_dicts(cfg, self.rocm_cce_compiler_cfg()) + selections["compilers"] += self.rocm_cce_compiler_cfg()["compilers"] + + # Note: this is always included for some low-level dependencies + # that shouldn't build with %cce - return merge_dicts(cfg, self.compiler_weighting_cfg()) + return selections def mpi_config(self): gtl = self.spec.variants["gtl"][0] @@ -639,6 +646,15 @@ def rocm_config(self): ], "buildable": False, }, + "llvm-amdgpu": { + "externals": [ + { + "spec": f"llvm-amdgpu@{self.rocm_version}", + "prefix": f"/opt/rocm-{self.rocm_version}/llvm", + } + ], + "buildable": False, + }, "rocblas": { "externals": [ { @@ -667,50 +683,71 @@ def rocm_cce_compiler_cfg(self): f"/opt/cray/pe/cce/{self.cce_version}/cce/x86_64/lib", ] # Avoid libunwind.so.1 error on tioga - if self.spec.variants["cluster"][0] in ["tioga", "tuolumne"]: + if self.spec.variants["cluster"][0] == "tioga": rpaths.append(f"/opt/cray/pe/cce/{self.cce_version}/cce-clang/x86_64/lib/") - cfgs = [] - # Always need an instance of llvm-gpu as an external. Sometimes as a compiler - # and sometimes just for ROCm support - rocmcc_entry = compiler_def( - f"llvm-amdgpu@{self.rocm_version}", - f"/opt/rocm-{self.rocm_version}/", - {"c": "amdclang", "cxx": "amdclang++", "fortran": "amdflang"}, - modules=[f"cce/{self.cce_version}"], - flags={"cflags": "-g -O2", "cxxflags": "-g -O2"}, - extra_rpaths=list(rpaths), - env={ - "set": {"RFE_811452_DISABLE": "1"}, - "append_path": {"LD_LIBRARY_PATH": "/opt/cray/pe/gcc-libs"}, - "prepend_path": { - "LD_LIBRARY_PATH": f"/opt/cray/pe/cce/{self.cce_version}/cce/x86_64/lib:/opt/cray/pe/pmi/{self.pmi_version}/lib:/opt/cray/pe/pals/{self.pals_version}/lib", - "LIBRARY_PATH": f"/opt/rocm-{self.rocm_version}/lib", - }, - }, - ) - cfgs.append(compiler_section_for("llvm-amdgpu", [rocmcc_entry])) - if self.spec.satisfies("compiler=cce"): - cce_entry = compiler_def( - f"cce@{self.cce_version}-rocm{self.rocm_version}", - f"/opt/cray/pe/cce/{self.cce_version}/", - {"c": "craycc", "cxx": "crayCC", "fortran": "crayftn"}, - modules=[f"cce/{self.cce_version}"], - extra_rpaths=list(rpaths), - env={ - "prepend_path": { - "LD_LIBRARY_PATH": f"/opt/cray/pe/cce/{self.cce_version}/cce/x86_64/lib:/opt/rocm-{self.rocm_version}/lib:/opt/cray/pe/pmi/{self.pmi_version}/lib:/opt/cray/pe/pals/{self.pals_version}/lib" + if self.spec.satisfies("compiler=rocmcc"): + return { + "compilers": [ + { + "compiler": { + "spec": f"rocmcc@{self.rocm_version}", + "paths": { + "cc": f"/opt/rocm-{self.rocm_version}/bin/amdclang", + "cxx": f"/opt/rocm-{self.rocm_version}/bin/amdclang++", + "f77": f"/opt/rocm-{self.rocm_version}/bin/amdflang", + "fc": f"/opt/rocm-{self.rocm_version}/bin/amdflang", + }, + "flags": {"cflags": "-g -O2", "cxxflags": "-g -O2"}, + "operating_system": "rhel8", + "target": "x86_64", + "modules": [f"cce/{self.cce_version}"], + "environment": { + "set": {"RFE_811452_DISABLE": "1"}, + "append_path": { + "LD_LIBRARY_PATH": "/opt/cray/pe/gcc-libs" + }, + "prepend_path": { + "LD_LIBRARY_PATH": f"/opt/cray/pe/cce/{self.cce_version}/cce/x86_64/lib:/opt/cray/pe/pmi/{self.pmi_version}/lib:/opt/cray/pe/pals/{self.pals_version}/lib", + "LIBRARY_PATH": f"/opt/rocm-{self.rocm_version}/lib", + }, + }, + "extra_rpaths": rpaths, + } } - }, - flags={ - "cflags": "-g -O2", - "cxxflags": "-g -O2 -std=c++14", - "fflags": "-g -O2 -hnopattern", - "ldflags": "-ldl", - }, - ) - cfgs.append(compiler_section_for("cce", [cce_entry])) - return merge_dicts(*cfgs) + ] + } + else: + return { + "compilers": [ + { + "compiler": { + "spec": f"cce@{self.cce_version}-rocm{self.rocm_version}", + "paths": { + "cc": f"/opt/cray/pe/cce/{self.cce_version}/bin/craycc", + "cxx": f"/opt/cray/pe/cce/{self.cce_version}/bin/crayCC", + "f77": f"/opt/cray/pe/cce/{self.cce_version}/bin/crayftn", + "fc": f"/opt/cray/pe/cce/{self.cce_version}/bin/crayftn", + }, + "flags": { + "cflags": "-g -O2", + "cxxflags": "-g -O2 -std=c++14", + "fflags": "-g -O2 -hnopattern", + "ldflags": "-ldl", + }, + "operating_system": "rhel8", + "target": "x86_64", + "modules": [f"cce/{self.cce_version}"], + "environment": { + "prepend_path": { + "LD_LIBRARY_PATH": f"/opt/cray/pe/cce/{self.cce_version}/cce/x86_64/lib:/opt/rocm-{self.rocm_version}/lib:/opt/cray/pe/pmi/{self.pmi_version}/lib:/opt/cray/pe/pals/{self.pals_version}/lib" + } + }, + "extra_rpaths": rpaths, + } + } + ] + } def system_specific_variables(self): opts = super().system_specific_variables() @@ -743,7 +780,9 @@ def compute_software_section(self): return { "software": { "packages": { - "default-compiler": {"pkg_spec": "gcc"}, + "default-compiler": { + "pkg_spec": f"{self.spec.variants['compiler'][0]}" + }, "default-mpi": {"pkg_spec": "cray-mpich"}, "compiler-rocm": {"pkg_spec": "cce"}, "compiler-amdclang": {"pkg_spec": "clang"}, diff --git a/systems/llnl-matrix/system.py b/systems/llnl-matrix/system.py index 3f91dd4fa..49daed939 100644 --- a/systems/llnl-matrix/system.py +++ b/systems/llnl-matrix/system.py @@ -7,13 +7,7 @@ from benchpark.directives import variant, maintainers from benchpark.cudasystem import CudaSystem from benchpark.paths import hardware_descriptions -from benchpark.system import ( - System, - JobQueue, - compiler_def, - compiler_section_for, - merge_dicts, -) +from benchpark.system import System, JobQueue from benchpark.openmpsystem import OpenMPCPUOnlySystem from packaging.version import Version @@ -221,55 +215,111 @@ def compute_packages_section(self): } } + selections["packages"] |= self.compiler_weighting_cfg()["packages"] + selections["packages"] |= self.cuda_config(self.spec.variants["cuda"][0])[ "packages" ] return selections + def compiler_weighting_cfg(self): + compiler = self.spec.variants["compiler"][0] + + if compiler == "oneapi": + return {"packages": {"all": {"require": [{"one_of": ["%oneapi", "%gcc"]}]}}} + else: + return {"packages": {}} + def compute_compilers_section(self): - gcc_cfg = compiler_section_for( - "gcc", - [ - compiler_def( - "gcc@12.1.1 languages:=c,c++,fortran", - "/usr/tce/packages/gcc/gcc-12.1.1/", - {"c": "gcc", "cxx": "g++", "fortran": "gfortran"}, - ) - ], - ) + selections = {} if self.spec.satisfies("compiler=gcc"): - cfg = gcc_cfg + selections = { + "compilers": [ + { + "compiler": { + "spec": "gcc@12.1.1", + "paths": { + "cc": "/usr/tce/packages/gcc/gcc-12.1.1/bin/gcc", + "cxx": "/usr/tce/packages/gcc/gcc-12.1.1/bin/g++", + "f77": "/usr/tce/packages/gcc/gcc-12.1.1/bin/gfortran", + "fc": "/usr/tce/packages/gcc/gcc-12.1.1/bin/gfortran", + }, + "flags": {}, + "operating_system": "rhel8", + "target": "x86_64", + "modules": [], + "environment": {}, + "extra_rpaths": [], + } + } + ] + } elif self.spec.satisfies("compiler=intel"): - cfg = compiler_section_for( - "intel-oneapi-compilers-classic", - [ - compiler_def( - "intel-oneapi-compilers-classic@2021.6.0 ~envmods", - "/usr/tce/packages/intel-classic/intel-classic-2021.6.0/", - {"c": "icc", "cxx": "icpc", "fortran": "ifort"}, - ) - ], - ) + selections = { + "compilers": [ + { + "compiler": { + "spec": "intel@2021.6.0-classic", + "paths": { + "cc": "/usr/tce/packages/intel-classic/intel-classic-2021.6.0/bin/icc", + "cxx": "/usr/tce/packages/intel-classic/intel-classic-2021.6.0/bin/icpc", + "f77": "/usr/tce/packages/intel-classic/intel-classic-2021.6.0/bin/ifort", + "fc": "/usr/tce/packages/intel-classic/intel-classic-2021.6.0/bin/ifort", + }, + "flags": {}, + "operating_system": "rhel8", + "target": "x86_64", + "modules": [], + "environment": {}, + "extra_rpaths": [], + } + } + ] + } elif self.spec.satisfies("compiler=oneapi"): - oneapi_cfg = compiler_section_for( - "intel-oneapi-compilers", - [ - compiler_def( - "intel-oneapi-compilers@2023.2.1 ~envmods", - "/usr/tce/packages/intel/intel-2023.2.1/compiler/2023.2.1/linux/", - {"c": "icx", "cxx": "icpx", "fortran": "ifx"}, - modules=[ - f"cuda/{self.cuda_version}", - ], - ) - ], - ) - prefs = {"one_of": ["%oneapi", "%gcc"], "when": "%c"} - weighting_cfg = {"packages": {"all": {"require": [prefs]}}} - cfg = merge_dicts(gcc_cfg, oneapi_cfg, weighting_cfg) + selections = { + "compilers": [ + { + "compiler": { + "spec": "gcc@12.1.1", + "paths": { + "cc": "/usr/tce/packages/gcc/gcc-12.1.1/bin/gcc", + "cxx": "/usr/tce/packages/gcc/gcc-12.1.1/bin/g++", + "f77": "/usr/tce/packages/gcc/gcc-12.1.1/bin/gfortran", + "fc": "/usr/tce/packages/gcc/gcc-12.1.1/bin/gfortran", + }, + "flags": {}, + "operating_system": "rhel8", + "target": "x86_64", + "modules": [], + "environment": {}, + "extra_rpaths": [], + } + }, + { + "compiler": { + "spec": "oneapi@2023.2.1", + "paths": { + "cc": "/usr/tce/packages/intel/intel-2023.2.1/compiler/2023.2.1/linux/bin/icx", + "cxx": "/usr/tce/packages/intel/intel-2023.2.1/compiler/2023.2.1/linux/bin/icpx", + "f77": "/usr/tce/packages/intel/intel-2023.2.1/compiler/2023.2.1/linux/bin/ifx", + "fc": "/usr/tce/packages/intel/intel-2023.2.1/compiler/2023.2.1/linux/bin/ifx", + }, + "flags": {}, + "operating_system": "rhel8", + "target": "x86_64", + "modules": [ + f"cuda/{self.cuda_version}", + ], + "environment": {}, + "extra_rpaths": [], + } + }, + ] + } - return cfg + return selections def cuda_config(self, cuda_version): return { @@ -343,16 +393,10 @@ def cuda_config(self, cuda_version): } def compute_software_section(self): - default_compiler = "gcc" - if self.spec.satisfies("compiler=intel"): - default_compiler = "intel-oneapi-compilers-classic" - elif self.spec.satisfies("compiler=oneapi"): - default_compiler = "intel-oneapi-compilers" - return { "software": { "packages": { - "default-compiler": {"pkg_spec": default_compiler}, + "default-compiler": {"pkg_spec": self.spec.variants["compiler"][0]}, "default-mpi": {"pkg_spec": "mvapich2"}, "compiler-gcc": {"pkg_spec": "gcc"}, "compiler-intel": {"pkg_spec": "intel"}, diff --git a/systems/llnl-sierra/system.py b/systems/llnl-sierra/system.py index 406dcc685..cc035e22a 100644 --- a/systems/llnl-sierra/system.py +++ b/systems/llnl-sierra/system.py @@ -6,14 +6,7 @@ from benchpark.directives import variant, maintainers from benchpark.cudasystem import CudaSystem from benchpark.paths import hardware_descriptions -from benchpark.system import ( - System, - JobQueue, - compiler_def, - compiler_section_for, - merge_dicts, - hybrid_compiler_requirements, -) +from benchpark.system import System, JobQueue from benchpark.openmpsystem import OpenMPCPUOnlySystem from packaging.version import Version @@ -444,117 +437,150 @@ def compute_packages_section(self): def compute_compilers_section(self): # values=("clang-ibm", "xl", "xl-gcc", "clang"), - compiler = self.spec.variants["compiler"][0] # values=("11-8-0", "10-1-243"), - cuda_ver = self.spec.variants["cuda"][0].replace(".", "-") - - cuda_module_map = { - "11-8-0": ["cuda/11.8.0"], - "10-1-243": ["cuda/10.1.243"], - } - cuda_modules = cuda_module_map[cuda_ver] - - flags = { - "cflags": "-g -O2", - "cxxflags": "-g -O2", - "fflags": "-g -O2", - } - - if (compiler, cuda_ver) == ("clang-ibm", "11-8-0"): - cfg1 = compiler_section_for( - "llvm", - [ - compiler_def( - "llvm@16.0.6", - "/usr/tce/packages/clang/clang-ibm-16.0.6-cuda-11.8.0-gcc-11.2.1/", - {"c": "clang", "cxx": "clang++"}, - flags=flags, - modules=cuda_modules - + ["clang/ibm-16.0.6-cuda-11.8.0-gcc-11.2.1"], - ) - ], - ) - cfg2 = compiler_section_for( - "xl", - [ - compiler_def( - "xl@2023.06.28", - "/usr/tce/packages/xl/xl-2023.06.28-cuda-11.8.0-gcc-11.2.1/", - {"c": "xlc", "cxx": "xlC", "fortran": "xlf"}, - flags=flags, - ) - ], - ) - cfg = merge_dicts(cfg1, cfg2, hybrid_compiler_requirements("llvm", "xl")) - elif (compiler, cuda_ver) == ("xl-gcc", "11-8-0"): - cfg = compiler_section_for( - "xl", - [ - compiler_def( - "xl@2023.06.28", - "/usr/tce/packages/xl/xl-2023.06.28-cuda-11.8.0-gcc-11.2.1/", - {"c": "xlc", "cxx": "xlC", "fortran": "xlf"}, - flags=flags, - modules=cuda_modules + ["xl/2023.06.28-cuda-11.8.0-gcc-11.2.1"], - ) - ], - ) - elif (compiler, cuda_ver) == ("xl", "10-1-243"): - cfg = compiler_section_for( + compiler_cfgs = { + ( + "clang-ibm", + "11-8-0", + ): [ + { + "compiler": { + "spec": "clang@16.0.6-ibm-cuda-11.8.0-gcc-11.2.1", + "paths": { + "cc": "/usr/tce/packages/clang/clang-ibm-16.0.6-cuda-11.8.0-gcc-11.2.1/bin/clang", + "cxx": "/usr/tce/packages/clang/clang-ibm-16.0.6-cuda-11.8.0-gcc-11.2.1/bin/clang++", + "f77": "/usr/tce/packages/xl/xl-2023.06.28-cuda-11.8.0-gcc-11.2.1/bin/xlf_r", + "fc": "/usr/tce/packages/xl/xl-2023.06.28-cuda-11.8.0-gcc-11.2.1/bin/xlf_r", + }, + "flags": { + "cflags": "-g -O2", + "cxxflags": "-g -O2", + "fflags": "-g -O2", + }, + "operating_system": "rhel7", + "target": "ppc64le", + "modules": [ + "cuda/11.8.0", + "clang/ibm-16.0.6-cuda-11.8.0-gcc-11.2.1", + ], + "environment": {}, + "extra_rpaths": [], + } + } + ], + ( + "xl-gcc", + "11-8-0", + ): [ + { + "compiler": { + "spec": "xl@16.1.1-2023.06.28-cuda-11.8.0-gcc-11.2.1", + "paths": { + "cc": "/usr/tce/packages/xl/xl-2023.06.28-cuda-11.8.0-gcc-11.2.1/bin/xlc", + "cxx": "/usr/tce/packages/xl/xl-2023.06.28-cuda-11.8.0-gcc-11.2.1/bin/xlC", + "f77": "/usr/tce/packages/xl/xl-2023.06.28-cuda-11.8.0-gcc-11.2.1/bin/xlf", + "fc": "/usr/tce/packages/xl/xl-2023.06.28-cuda-11.8.0-gcc-11.2.1/bin/xlf", + }, + "flags": { + "cflags": "-g -O2", + "cxxflags": "-g -O2", + "fflags": "-g -O2", + }, + "operating_system": "rhel7", + "target": "ppc64le", + "modules": [ + "cuda/11.8.0", + "xl/2023.06.28-cuda-11.8.0-gcc-11.2.1", + ], + "environment": {}, + "extra_rpaths": [], + } + } + ], + ( "xl", - [ - compiler_def( - "xl@16.1.1-2022.08.19-cuda10.1.243", - "/usr/tce/packages/xl/xl-2022.08.19/", - {"c": "xlc", "cxx": "xlC", "fortran": "xlf"}, - flags=flags, - modules=cuda_modules + ["xl/2022.08.19"], - ) - ], - ) - elif (compiler, cuda_ver) == ("xl", "11-8-0"): - cfg = compiler_section_for( + "10-1-243", + ): [ + { + "compiler": { + "spec": "xl@16.1.1-2022.08.19-cuda10.1.243", + "paths": { + "cc": "/usr/tce/packages/xl/xl-2022.08.19/bin/xlc", + "cxx": "/usr/tce/packages/xl/xl-2022.08.19/bin/xlC", + "f77": "/usr/tce/packages/xl/xl-2022.08.19/bin/xlf", + "fc": "/usr/tce/packages/xl/xl-2022.08.19/bin/xlf", + }, + "flags": { + "cflags": "-g -O2", + "cxxflags": "-g -O2", + "fflags": "-g -O2", + }, + "operating_system": "rhel7", + "target": "ppc64le", + "modules": ["cuda/10.1.243", "xl/2022.08.19"], + "environment": {}, + "extra_rpaths": [], + } + } + ], + ( "xl", - [ - compiler_def( - "xl@16.1.1-2022.08.19-cuda11.8.0", - "/usr/tce/packages/xl/xl-2022.08.19-cuda-11.8.0/", - {"c": "xlc", "cxx": "xlC", "fortran": "xlf"}, - flags=flags, - modules=cuda_modules + ["xl/2022.08.19-cuda-11.8.0"], - ) - ], - ) - elif (compiler, cuda_ver) == ("clang", "11-8-0"): - custom_flags = { - "cflags": "-g -O2", - "cxxflags": "-g -O2", - } - cfg1 = compiler_section_for( - "llvm", - [ - compiler_def( - "llvm@16.0.6", - "/usr/tce/packages/clang/clang-ibm-16.0.6-cuda-11.8.0-gcc-11.2.1/", - {"c": "clang", "cxx": "clang++"}, - flags=custom_flags, - ) - ], - ) - cfg2 = compiler_section_for( - "gcc", - [ - compiler_def( - "gcc@11.2.1 languages:=c,c++,fortran", - "/usr/tce/packages/gcc/gcc-11.2.1/", - {"c": "gcc", "cxx": "g++", "fortran": "gfortran"}, - flags=custom_flags, - ) - ], - ) - cfg = merge_dicts(cfg1, cfg2, hybrid_compiler_requirements("llvm", "gcc")) + "11-8-0", + ): [ + { + "compiler": { + "spec": "xl@16.1.1-2022.08.19-cuda11.8.0", + "paths": { + "cc": "/usr/tce/packages/xl/xl-2022.08.19-cuda-11.8.0/bin/xlc", + "cxx": "/usr/tce/packages/xl/xl-2022.08.19-cuda-11.8.0/bin/xlC", + "f77": "/usr/tce/packages/xl/xl-2022.08.19-cuda-11.8.0/bin/xlf", + "fc": "/usr/tce/packages/xl/xl-2022.08.19-cuda-11.8.0/bin/xlf", + }, + "flags": { + "cflags": "-g -O2", + "cxxflags": "-g -O2", + "fflags": "-g -O2", + }, + "operating_system": "rhel7", + "target": "ppc64le", + "modules": ["cuda/11.8.0", "xl/2022.08.19-cuda-11.8.0"], + "environment": {}, + "extra_rpaths": [], + } + } + ], + ( + "clang", + "11-8-0", + ): [ + { + "compiler": { + "spec": "clang@16.0.6-cuda11.8.0", + "paths": { + "cc": "/usr/tce/packages/clang/clang-16.0.6-cuda-11.8.0-gcc-11.2.1/bin/clang", + "cxx": "/usr/tce/packages/clang/clang-16.0.6-cuda-11.8.0-gcc-11.2.1/bin/clang++", + "f77": "/usr/tce/packages/gcc/gcc-11.2.1/bin/gfortran", + "fc": "/usr/tce/packages/gcc/gcc-11.2.1/bin/gfortran", + }, + "flags": { + "cflags": "-g -O2", + "cxxflags": "-g -O2", + "fflags": "", + }, + "operating_system": "rhel7", + "target": "ppc64le", + "modules": [], + "environment": {}, + "extra_rpaths": [], + } + } + ], + } - return cfg + compiler = self.spec.variants["compiler"][0] + cuda_ver = self.spec.variants["cuda"][0].replace(".", "-") + cfg = compiler_cfgs[(compiler, cuda_ver)] + return {"compilers": cfg} def compute_software_section(self): """This is somewhat vestigial: for the Tioga config that is committed diff --git a/systems/riken-fugaku/system.py b/systems/riken-fugaku/system.py index 51f06078e..34a50f2ac 100644 --- a/systems/riken-fugaku/system.py +++ b/systems/riken-fugaku/system.py @@ -5,7 +5,7 @@ from benchpark.directives import variant, maintainers -from benchpark.system import System, compiler_def, compiler_section_for +from benchpark.system import System from benchpark.openmpsystem import OpenMPCPUOnlySystem from benchpark.paths import hardware_descriptions @@ -552,40 +552,54 @@ def compute_packages_section(self): return selections def compute_compilers_section(self): + compiler = self.spec.variants["compiler"][0] + selections = {"compilers": []} + if compiler == "clang": - # maybe_flags = { - # "cflags": {"-msve-vector-bits=scalable"}, - # "cxxflags": {"-msve-vector-bits=scalable"}, - # "fflags": {"-msve-vector-bits=scalable"}, - # "ldflags": {"-fuse-ld=lld"}, - # } - cfg = compiler_section_for( - "llvm", - [ - compiler_def( - "llvm@17.0.2", - "/vol0004/apps/oss/llvm-v17.0.2/compute_node/", - {"c": "clang", "cxx": "clang++", "fortran": "flang"}, - env={ + selections["compilers"] += [ + { + "compiler": { + "spec": "clang@17.0.2", + "paths": { + "cc": "/vol0004/apps/oss/llvm-v17.0.2/compute_node/bin/clang", + "cxx": "/vol0004/apps/oss/llvm-v17.0.2/compute_node/bin/clang++", + "f77": "/vol0004/apps/oss/llvm-v17.0.2/compute_node/bin/flang", + "fc": "/vol0004/apps/oss/llvm-v17.0.2/compute_node/bin/flang", + }, + # Uncomment and populate these if needed + # "flags": { + # "cflags": {"-msve-vector-bits=scalable"}, + # "cxxflags": {"-msve-vector-bits=scalable"}, + # "fflags": {"-msve-vector-bits=scalable"}, + # "ldflags": {"-fuse-ld=lld"}, + # }, + "environment": { "append_path": { "LD_LIBRARY_PATH": "/opt/FJSVxtclanga/tcsds-1.2.38/lib64" } }, - # flags = maybe_flags - ) - ], - ) + "operating_system": "rhel8", + "target": "aarch64", + "modules": [], + "extra_rpaths": [], + } + } + ] elif compiler == "gcc": - cfg = compiler_section_for( - "gcc", - [ - compiler_def( - "gcc@13.2.0 languages:=c,c++,fortran", - "/vol0004/apps/oss/spack-v0.21/opt/spack/linux-rhel8-a64fx/gcc-8.5.0/gcc-13.2.0-abihbe7ykvpedq54j6blfvfppy7ojbmd/", - {"c": "gcc", "cxx": "g++", "fortran": "gfortran"}, - env={ + selections["compilers"] += [ + { + "compiler": { + "spec": "gcc@13.2.0", + "paths": { + "cc": "/vol0004/apps/oss/spack-v0.21/opt/spack/linux-rhel8-a64fx/gcc-8.5.0/gcc-13.2.0-abihbe7ykvpedq54j6blfvfppy7ojbmd/bin/gcc", + "cxx": "/vol0004/apps/oss/spack-v0.21/opt/spack/linux-rhel8-a64fx/gcc-8.5.0/gcc-13.2.0-abihbe7ykvpedq54j6blfvfppy7ojbmd/bin/g++", + "f77": "/vol0004/apps/oss/spack-v0.21/opt/spack/linux-rhel8-a64fx/gcc-8.5.0/gcc-13.2.0-abihbe7ykvpedq54j6blfvfppy7ojbmd/bin/gfortran", + "fc": "/vol0004/apps/oss/spack-v0.21/opt/spack/linux-rhel8-a64fx/gcc-8.5.0/gcc-13.2.0-abihbe7ykvpedq54j6blfvfppy7ojbmd/bin/gfortran", + }, + "flags": {"ldflags": {"-lelf -ldl"}}, + "environment": { "set": { "OPAL_PREFIX": "/vol0004/apps/oss/mpigcc/fjmpi-gcc12" }, @@ -593,19 +607,29 @@ def compute_compilers_section(self): "LD_LIBRARY_PATH": "/opt/FJSVxtclanga/tcsds-1.2.38/lib64" }, }, - flags={"ldflags": {"-lelf -ldl"}}, - ) - ], - ) + "operating_system": "rhel8", + "target": "aarch64", + "modules": [], + "extra_rpaths": [], + } + } + ] elif compiler == "fj": - cfg = compiler_section_for( - "fj", - [ - compiler_def( - "fj@4.10.0", - "/opt/FJSVxtclanga/tcsds-1.2.38/", - {"c": "fcc", "cxx": "FCC", "fortran": "frt"}, - env={ + selections["compilers"] += [ + { + "compiler": { + "spec": "fj@4.10.0", + "modules": [], + "paths": { + "cc": "/opt/FJSVxtclanga/tcsds-1.2.38/bin/fcc", + "cxx": "/opt/FJSVxtclanga/tcsds-1.2.38/bin/FCC", + "f77": "/opt/FJSVxtclanga/tcsds-1.2.38/bin/frt", + "fc": "/opt/FJSVxtclanga/tcsds-1.2.38/bin/frt", + }, + "flags": {}, + "operating_system": "rhel8", + "target": "aarch64", + "environment": { "set": { "fcc_ENV": "-Nclang", "FCC_ENV": "-Nclang", @@ -615,11 +639,12 @@ def compute_compilers_section(self): "LD_LIBRARY_PATH": "/opt/FJSVxtclanga/tcsds-1.2.38/lib64", }, }, - ) - ], - ) + "extra_rpaths": [], + } + } + ] - return cfg + return selections def system_specific_variables(self): return { From 9e1318bb25114ed6fa354932d9a1cf44db36e475 Mon Sep 17 00:00:00 2001 From: stephanielam3211 Date: Mon, 6 Oct 2025 09:16:19 -0700 Subject: [PATCH 50/53] renamed USE_ROCM to USE_HIP --- experiments/mpi-pingpong/experiment.py | 2 +- repo/mpi-pingpong/package.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/experiments/mpi-pingpong/experiment.py b/experiments/mpi-pingpong/experiment.py index 38709c65a..86fb69e3f 100644 --- a/experiments/mpi-pingpong/experiment.py +++ b/experiments/mpi-pingpong/experiment.py @@ -21,7 +21,7 @@ class MpiPingpong(Experiment, MpiOnlyExperiment, ROCmExperiment, CudaExperiment, maintainers("stephanielam3211") def compute_applications_section(self): - n_nodes = 32 # max number of nodes + n_nodes = 64 # max number of nodes expr_vars = { "n_nodes": n_nodes, "iterations": 10000, diff --git a/repo/mpi-pingpong/package.py b/repo/mpi-pingpong/package.py index 26d7ce26b..41a005f7d 100644 --- a/repo/mpi-pingpong/package.py +++ b/repo/mpi-pingpong/package.py @@ -10,7 +10,7 @@ class MpiPingpong(CMakePackage, ROCmPackage, CudaPackage): git = "https://github.com/LLNL/microbenchmarks.git" - version("develop", branch="add-cuda") + version("develop", branch="develop") variant("caliper", default=False, description="Enable Caliper/Adiak support") variant("rocm", default=False, description="Enable Rocm support") @@ -39,7 +39,7 @@ def cmake_args(self): if self.spec.satisfies("+rocm"): args.append(self.define("CMAKE_EXE_LINKER_FLAGS", self.spec['mpi'].libs.ld_flags)) - args.append('-DUSE_ROCM=ON') + args.append('-DUSE_HIP=ON') args.append(self.define("ROCM_PATH", self.spec["hip"].prefix)) hip_vars = self.spec["hip"].variants if "amdgpu_targets" in hip_vars: @@ -48,7 +48,7 @@ def cmake_args(self): archs = ",".join(vals) args.append(self.define("CMAKE_HIP_ARCHITECTURES", archs)) else: - args.append('-DUSE_ROCM=OFF') + args.append('-DUSE_HIP=OFF') if self.spec.satisfies("+cuda"): args.append(self.define("USE_CUDA", "ON")) From 976db49f979555e9935ff6835e7b227c413d58be Mon Sep 17 00:00:00 2001 From: Michael McKinsey Date: Fri, 17 Oct 2025 09:33:11 -0700 Subject: [PATCH 51/53] Revert "Revert "Spack 1 update (#953)"" This reverts commit ca27b96807e45484991765b5c901253aec006b81. --- .gitlab/tests/non_shared.yml | 2 +- checkout-versions.yaml | 3 +- experiments/kripke/experiment.py | 2 +- experiments/laghos/experiment.py | 1 + experiments/raja-perf/experiment.py | 2 +- lib/benchpark/cmd/setup.py | 12 +- lib/benchpark/runtime.py | 43 ++- lib/benchpark/system.py | 98 ++++- remote-urls.yaml | 1 + repo/ad/package.py | 4 + repo/affinity/package.py | 3 + repo/amg2023/package.py | 5 +- repo/babelstream/package.py | 5 + repo/blt/package.py | 3 +- repo/branson/package.py | 6 +- repo/caliper/package.py | 4 + repo/camp/package.py | 2 +- repo/chai/package.py | 2 +- repo/cray-mpich/package.py | 2 +- repo/cuda/package.py | 4 +- repo/enzyme/package.py | 4 + repo/essl/package.py | 2 +- repo/genesis/package.py | 5 + repo/gpcnet/package.py | 4 +- repo/gromacs/package.py | 8 +- repo/hipsycl/package.py | 3 + repo/hpcg/package.py | 7 +- repo/hpl/package.py | 8 +- repo/hypre/package.py | 13 +- repo/kokkos/package.py | 2 +- repo/kripke/package.py | 9 +- repo/laghos/package.py | 8 +- repo/lammps/package.py | 2 +- repo/mfem/package.py | 2 +- repo/osu-micro-benchmarks/package.py | 2 +- repo/phloem/package.py | 6 +- repo/quicksilver/package.py | 2 + repo/qws/package.py | 4 + repo/raja-perf/package.py | 6 +- repo/raja/package.py | 2 +- repo/remhos/package.py | 4 + repo/salmon-tddft/package.py | 4 + repo/saxpy/package.py | 2 + repo/smb/package.py | 4 + repo/spectrum-mpi/package.py | 2 +- repo/stream/package.py | 3 + repo/umpire/package.py | 2 +- systems/aws-pcluster/system.py | 34 +- systems/csc-lumi/system.py | 551 +++++++++++++-------------- systems/cscs-daint/system.py | 245 +++++------- systems/cscs-eiger/system.py | 30 +- systems/jsc-juwels/system.py | 69 ++-- systems/lanl-venado/system.py | 71 ++-- systems/llnl-cluster/system.py | 162 ++++---- systems/llnl-elcapitan/system.py | 171 ++++----- systems/llnl-matrix/system.py | 148 +++---- systems/llnl-sierra/system.py | 256 ++++++------- systems/riken-fugaku/system.py | 111 +++--- 58 files changed, 1038 insertions(+), 1134 deletions(-) diff --git a/.gitlab/tests/non_shared.yml b/.gitlab/tests/non_shared.yml index 0689ce7c4..abdb92348 100644 --- a/.gitlab/tests/non_shared.yml +++ b/.gitlab/tests/non_shared.yml @@ -17,7 +17,7 @@ workflow: - HOST: lassen ARCHCONFIG: llnl-sierra SCHEDULER_PARAMETERS: -nnodes 1 -W 40 -q pci - BENCHMARK: [amg2023, kripke] + BENCHMARK: [amg2023] VARIANT: [+cuda, +openmp] run_tests_nonshared: resource_group: $HOST diff --git a/checkout-versions.yaml b/checkout-versions.yaml index 851198578..f1fb4f775 100644 --- a/checkout-versions.yaml +++ b/checkout-versions.yaml @@ -4,4 +4,5 @@ # SPDX-License-Identifier: Apache-2.0 versions: ramble: 6b4ecac # develop on 5/06/2025 (newer than 0.6.0 release) - spack: 7e4b8aa # develop on 2/22/2025 (pre-breaking changes on 1.0) + spack: 7eeef1f + spack-packages: a1941c9 diff --git a/experiments/kripke/experiment.py b/experiments/kripke/experiment.py index e4f1fc2c1..a482cb95f 100644 --- a/experiments/kripke/experiment.py +++ b/experiments/kripke/experiment.py @@ -156,5 +156,5 @@ def compute_package_section(self): else "~single_memory" ) self.add_package_spec( - self.name, [f"kripke{self.determine_version()} {single_memory} "] + self.name, [f"kripke{self.determine_version()} {single_memory} +mpi"] ) diff --git a/experiments/laghos/experiment.py b/experiments/laghos/experiment.py index 210cd72e6..838339c69 100644 --- a/experiments/laghos/experiment.py +++ b/experiments/laghos/experiment.py @@ -75,3 +75,4 @@ def compute_applications_section(self): def compute_package_section(self): self.add_package_spec(self.name, [f"laghos{self.determine_version()} +metis"]) + self.add_package_spec("hypre", ["hypre@2.32.0: +lapack"]) diff --git a/experiments/raja-perf/experiment.py b/experiments/raja-perf/experiment.py index eb822d6b1..4ea7474de 100644 --- a/experiments/raja-perf/experiment.py +++ b/experiments/raja-perf/experiment.py @@ -91,4 +91,4 @@ def compute_applications_section(self): self.add_experiment_variable("n_ranks", "{n_resources}", True) def compute_package_section(self): - self.add_package_spec(self.name, [f"raja-perf{self.determine_version()}"]) + self.add_package_spec(self.name, [f"raja-perf{self.determine_version()} +mpi"]) diff --git a/lib/benchpark/cmd/setup.py b/lib/benchpark/cmd/setup.py index 167cb7f45..59fabcdc9 100644 --- a/lib/benchpark/cmd/setup.py +++ b/lib/benchpark/cmd/setup.py @@ -173,7 +173,17 @@ def include_fn(fname): if pkg_manager == "spack": spack, first_time_spack = per_workspace_setup.spack_first_time_setup() if first_time_spack: - spack("repo", "add", "--scope=site", f"{source_dir}/repo") + site_repos = ( + per_workspace_setup.spack_location / "etc" / "spack" / "repos.yaml" + ) + with open(site_repos, "w") as f: + f.write( + f"""\ +repos:: + benchpark: {source_dir}/repo + builtin: {per_workspace_setup.pkgs_location}/repos/spack_repo/builtin/ +""" + ) pkg_str = f"""\ . {per_workspace_setup.spack_location}/share/spack/setup-env.sh diff --git a/lib/benchpark/runtime.py b/lib/benchpark/runtime.py index 39865bb50..9d601caec 100644 --- a/lib/benchpark/runtime.py +++ b/lib/benchpark/runtime.py @@ -68,29 +68,43 @@ def __init__(self, dest, upstream=None): self.dest = pathlib.Path(dest) self.upstream = upstream - self.ramble_location, self.spack_location = ( + self.ramble_location, self.spack_location, self.pkgs_location = ( self.dest / "ramble", self.dest / "spack", + self.dest / "spack-packages", ) # Read pinned versions of ramble and spack with open(benchpark.paths.checkout_versions, "r") as yaml_file: data = yaml.safe_load(yaml_file)["versions"] - self.ramble_commit, self.spack_commit = data["ramble"], data["spack"] + self.ramble_commit, self.spack_commit, self.pkgs_commit = ( + data["ramble"], + data["spack"], + data["spack-packages"], + ) # Read remote urls for ramble and spack with open(benchpark.paths.remote_urls, "r") as yaml_file: data = yaml.safe_load(yaml_file)["urls"] - remote_ramble_url, remote_spack_url = data["ramble"], data["spack"] + remote_ramble_url, remote_spack_url, remote_pkgs_url = ( + data["ramble"], + data["spack"], + data["spack-packages"], + ) # If this does not have an upstream, then we will be cloning from the URLs indicated in remote-urls.yaml if self.upstream is None: - self.ramble_url, self.spack_url = remote_ramble_url, remote_spack_url + self.ramble_url, self.spack_url, self.pkgs_url = ( + remote_ramble_url, + remote_spack_url, + remote_pkgs_url, + ) else: # Clone from local "upstream" repository - self.ramble_url, self.spack_url = ( + self.ramble_url, self.spack_url, self.pkgs_url = ( self.upstream.ramble_location, self.upstream.spack_location, + self.upstream.pkgs_location, ) def _check_and_update_bootstrap(self, desired_commit, location): @@ -117,6 +131,11 @@ def bootstrap(self): if internals not in sys.path: sys.path.insert(1, internals) + if not self.pkgs_location.exists(): + self._install_packages() + else: + self._check_and_update_bootstrap(self.pkgs_commit, self.pkgs_location) + # Spack does not go in sys.path, but we will manually access modules from it # The reason for this oddity is that spack modules will compete with the internal # spack modules from ramble @@ -143,6 +162,15 @@ def _install_spack(self): ) debug_print(f"Done cloning Spack ({self.spack_location})") + def _install_packages(self): + print(f"Cloning packages to {self.pkgs_location}") + git_clone_commit( + self.pkgs_url, + self.pkgs_commit, + self.pkgs_location, + ) + debug_print(f"Done cloning spack-packages ({self.pkgs_location})") + def _ramble(self): first_time = False if not self.ramble_location.exists(): @@ -151,10 +179,13 @@ def _ramble(self): return Command(self.ramble_location / "bin" / "ramble", env={}), first_time def _spack(self): + if not self.pkgs_location.exists(): + self._install_packages() + env = {"SPACK_DISABLE_LOCAL_CONFIG": "1"} spack = Command(self.spack_location / "bin" / "spack", env) spack_cache_location = self.spack_location / "misc-cache" - bootstrap_cache_location = self.spack_location / "b-c" + bootstrap_cache_location = self.dest / "sbc" first_time = False if not self.spack_location.exists(): first_time = True diff --git a/lib/benchpark/system.py b/lib/benchpark/system.py index 8bf7d3bf8..bcd01c3b0 100644 --- a/lib/benchpark/system.py +++ b/lib/benchpark/system.py @@ -203,20 +203,22 @@ def compute_software_section(self): def compute_dict(self): # This can be overridden by any subclass that needs more flexibility - compilers = self.compute_compilers_section() + pkg_cfg = self.compute_packages_section() or {} + compiler_cfg = self.compute_compilers_section() + if compiler_cfg: + pkg_cfg = merge_dicts(pkg_cfg, compiler_cfg) + # "'packages:':" syntax is required to enforce spack to use benchpark-defined + # compilers instead of external compilers defined by spack compiler search (from ramble). + if pkg_cfg: + pkg_cfg = {"packages:": pkg_cfg["packages"]} + else: + pkg_cfg = {"packages": {}} return { "system_id": self.compute_system_id(), "variables": self.compute_variables_section(), "software": self.compute_software_section(), "auxiliary_software_files": { - "compilers": ( - # "'compilers:':" syntax is required to enforce spack to use benchpark-defined - # compilers instead of external compilers defined by spack compiler search (from ramble). - {"compilers:": compilers["compilers"]} - if compilers - else None - ), - "packages": self.compute_packages_section(), + "packages": pkg_cfg, }, } @@ -233,3 +235,81 @@ def _write_key_file(destdir, key, sys_dict): _write_key_file(destdir + "/" + key, k, system_dict[key]) else: _write_key_file(destdir, key, system_dict) + + +def merge_dicts(*dicts): + current = {} + for d in dicts: + if not d: + continue + current = _merge_dicts(current, d) + return current + + +def _merge_dicts(d1, d2): + result = dict(d1) + for k, v2 in d2.items(): + if k in result: + v1 = result[k] + if all(isinstance(x, dict) for x in (v1, v2)): + result[k] = _merge_dicts(v1, v2) + elif all(isinstance(x, list) for x in (v1, v2)): + result[k] = v1 + v2 + else: + raise ValueError(f"{k} merge mismatch: {v1}/{v2}") + else: + result[k] = v2 + return result + + +def hybrid_compiler_requirements(c_cmp, f_cmp): + return { + "packages": { + "all": { + "require": [ + { + "spec": rf"%[virtuals=c] {c_cmp}", + "when": r"%c", + }, + {"spec": rf"%[virtuals=cxx] {c_cmp}", "when": r"%cxx"}, + {"spec": rf"^[virtuals=fortran] {f_cmp}", "when": r"^fortran"}, + ] + } + } + } + + +def compiler_section_for(name, entries): + return {"packages": {name: {"externals": entries, "buildable": False}}} + + +def compiler_def( + spec, + prefix, + exes, + env=None, + extra_rpaths=None, + modules=None, + flags=None, + compilers_use_relative_paths=False, +): + lang_map = {} + for lang, exe in exes.items(): + if os.path.isabs(exe) or compilers_use_relative_paths: + lang_map[lang] = exe + else: + lang_map[lang] = os.path.join(prefix, "bin", exe) + entry = { + "spec": spec, + "prefix": prefix, + "extra_attributes": {"compilers": lang_map}, + } + if env: + entry["extra_attributes"]["environment"] = env + if extra_rpaths: + entry["extra_attributes"]["extra_rpaths"] = extra_rpaths + if modules: + entry["modules"] = modules + if flags: + entry["extra_attributes"]["flags"] = flags + return entry diff --git a/remote-urls.yaml b/remote-urls.yaml index 2dbc1050c..7221ad355 100644 --- a/remote-urls.yaml +++ b/remote-urls.yaml @@ -5,3 +5,4 @@ urls: ramble: https://github.com/GoogleCloudPlatform/ramble.git spack: https://github.com/spack/spack.git + spack-packages: https://github.com/spack/spack-packages.git diff --git a/repo/ad/package.py b/repo/ad/package.py index 87a0ad639..83beb4f1c 100644 --- a/repo/ad/package.py +++ b/repo/ad/package.py @@ -19,6 +19,10 @@ class Ad(CMakePackage): version("main", branch="main") + depends_on("c", type="build") + depends_on("cxx", type="build") + depends_on("fortran", type="build") + depends_on("enzyme") def cmake_args(self): diff --git a/repo/affinity/package.py b/repo/affinity/package.py index 93a492ac0..27b6a6561 100644 --- a/repo/affinity/package.py +++ b/repo/affinity/package.py @@ -20,6 +20,9 @@ class Affinity(CMakePackage, CudaPackage, ROCmPackage): variant("mpi", default=False, description="Build MPI support") variant("rocm", default=False, description="Build ROCm Support") + depends_on("c", type="build") + depends_on("cxx", type="build") + depends_on("mpi", when="+mpi") depends_on("hip", when="+rocm") depends_on("cuda", when="+cuda") diff --git a/repo/amg2023/package.py b/repo/amg2023/package.py index 25526429f..825ca8785 100644 --- a/repo/amg2023/package.py +++ b/repo/amg2023/package.py @@ -27,6 +27,9 @@ class Amg2023(CMakePackage, CudaPackage, ROCmPackage): variant("caliper", default=False, description="Enable Caliper monitoring") variant("umpire", default=False, description="Enable Umpire support") + depends_on("c", type="build") + depends_on("cxx", type="build") + depends_on("mpi", when="+mpi") depends_on("hypre+mpi", when="+mpi") requires("+mpi", when="^hypre+mpi") @@ -39,14 +42,12 @@ class Amg2023(CMakePackage, CudaPackage, ROCmPackage): depends_on("hypre+umpire", when="+umpire") depends_on("hypre~umpire", when="~umpire") depends_on("hypre+cuda", when="+cuda") - depends_on("hypre+cublas", when="+cuda") depends_on("hypre+openmp", when="+openmp") requires("+cuda", when="^hypre+cuda") for arch in ("none", "50", "60", "70", "80", "90"): depends_on(f"hypre cuda_arch={arch}", when=f"cuda_arch={arch}") depends_on("hypre+rocm", when="+rocm") - depends_on("hypre+rocblas", when="+rocm") requires("+rocm", when="^hypre+rocm") for target in ("none", "gfx803", "gfx900", "gfx906", "gfx908", "gfx90a", "gfx942"): depends_on(f"hypre amdgpu_target={target}", when=f"amdgpu_target={target}") diff --git a/repo/babelstream/package.py b/repo/babelstream/package.py index 4e06c9164..f66aedaef 100644 --- a/repo/babelstream/package.py +++ b/repo/babelstream/package.py @@ -87,6 +87,11 @@ class Babelstream(CMakePackage, CudaPackage, ROCmPackage): msg="RAJA implementation requires architecture to be specified by dir=", ) + # Confirmed c++ and Fortran + depends_on("c", type="build") + depends_on("cxx", type="build") + depends_on("fortran", type="build") + # Thrust Conflict # conflicts("~cuda", when="+thrust", msg="Thrust requires +cuda variant") depends_on("thrust", when="+thrust") diff --git a/repo/blt/package.py b/repo/blt/package.py index 5c396a714..0a9c0d2e4 100644 --- a/repo/blt/package.py +++ b/repo/blt/package.py @@ -7,7 +7,8 @@ import re from spack.package import * -from spack.pkg.builtin.blt import Blt as BuiltinBlt +from spack_repo.builtin.packages.blt.package import Blt as BuiltinBlt + class Blt(BuiltinBlt): diff --git a/repo/branson/package.py b/repo/branson/package.py index 14e31c343..b8610b09a 100644 --- a/repo/branson/package.py +++ b/repo/branson/package.py @@ -4,7 +4,7 @@ # SPDX-License-Identifier: Apache-2.0 from spack.package import * -from spack.pkg.builtin.boost import Boost +from spack_repo.builtin.packages.boost.package import Boost class Branson(CMakePackage): @@ -30,6 +30,10 @@ class Branson(CMakePackage): ) version("0.81", sha256="493f720904791f06b49ff48c17a681532c6a4d9fa59636522cf3f9700e77efe4") version("0.8", sha256="85ffee110f89be00c37798700508b66b0d15de1d98c54328b6d02a9eb2cf1cb8") + + depends_on("c", type="build") + depends_on("cxx", type="build") + #depends_on("mpi") depends_on("mpi@2:") diff --git a/repo/caliper/package.py b/repo/caliper/package.py index 1b13781bd..94744913a 100644 --- a/repo/caliper/package.py +++ b/repo/caliper/package.py @@ -109,6 +109,10 @@ class Caliper(CachedCMakePackage, CudaPackage, ROCmPackage): variant("tools", default=True, description="Enable tools") variant("python", default=False, when="@v2.12:", description="Build Python bindings") + depends_on("c", type="build") + depends_on("cxx", type="build") + depends_on("fortran", type="build") + depends_on("adiak@0.1:0", when="@2.2:2.10 +adiak") depends_on("adiak@0.4:0", when="@2.11: +adiak") diff --git a/repo/camp/package.py b/repo/camp/package.py index 7450101ef..c83189138 100644 --- a/repo/camp/package.py +++ b/repo/camp/package.py @@ -4,7 +4,7 @@ # SPDX-License-Identifier: Apache-2.0 from spack.package import * -from spack.pkg.builtin.camp import Camp as BuiltinCamp +from spack_repo.builtin.packages.camp.package import Camp as BuiltinCamp class Camp(BuiltinCamp): diff --git a/repo/chai/package.py b/repo/chai/package.py index fd89d4f84..56d228c2f 100644 --- a/repo/chai/package.py +++ b/repo/chai/package.py @@ -4,7 +4,7 @@ # SPDX-License-Identifier: Apache-2.0 from spack.package import * -from spack.pkg.builtin.chai import Chai as BuiltinChai +from spack_repo.builtin.packages.chai.package import Chai as BuiltinChai class Chai(BuiltinChai): diff --git a/repo/cray-mpich/package.py b/repo/cray-mpich/package.py index e6b3ec83c..cff4bf129 100644 --- a/repo/cray-mpich/package.py +++ b/repo/cray-mpich/package.py @@ -4,7 +4,7 @@ # SPDX-License-Identifier: Apache-2.0 from spack.package import * -from spack.pkg.builtin.cray_mpich import CrayMpich as BuiltinCM +from spack_repo.builtin.packages.cray_mpich.package import CrayMpich as BuiltinCM class CrayMpich(BuiltinCM): diff --git a/repo/cuda/package.py b/repo/cuda/package.py index 2011ea0f1..51945ea5b 100644 --- a/repo/cuda/package.py +++ b/repo/cuda/package.py @@ -7,11 +7,11 @@ import llnl.util.tty as tty from spack.package import * -import spack.pkg.builtin.cuda +import spack_repo.builtin.packages.cuda.package from llnl.util.filesystem import find_headers -class Cuda(spack.pkg.builtin.cuda.Cuda): +class Cuda(spack_repo.builtin.packages.cuda.package.Cuda): # Layout of hpc-sdk puts some headers in sibling directories: # cuda compiler in /opt/nvidia/hpc_sdk/Linux_aarch64/24.7/cuda/12.5 # cufft in /opt/nvidia/hpc_sdk/Linux_aarch64/24.7/math_libs/12.5 diff --git a/repo/enzyme/package.py b/repo/enzyme/package.py index a2a6519fd..f99ee2b55 100644 --- a/repo/enzyme/package.py +++ b/repo/enzyme/package.py @@ -19,6 +19,10 @@ class Enzyme(CMakePackage): version("patch-1", branch="patch-1") + depends_on("c", type="build") + depends_on("cxx", type="build") + depends_on("fortran", type="build") + depends_on("llvm@18:") root_cmakelists_dir = "enzyme" diff --git a/repo/essl/package.py b/repo/essl/package.py index e8f433180..1394c97b1 100644 --- a/repo/essl/package.py +++ b/repo/essl/package.py @@ -4,7 +4,7 @@ # SPDX-License-Identifier: Apache-2.0 from spack.package import * -from spack.pkg.builtin.essl import Essl as BuiltinEssl +from spack_repo.builtin.packages.essl.package import Essl as BuiltinEssl class Essl(BuiltinEssl): diff --git a/repo/genesis/package.py b/repo/genesis/package.py index 62be4a495..b682ce331 100644 --- a/repo/genesis/package.py +++ b/repo/genesis/package.py @@ -39,6 +39,11 @@ class Genesis(AutotoolsPackage): variant("simd", description="Build with SIMD width.", default="auto", values=("auto", "MIC-AVX512", "CORE-AVX512", "CORE-AVX2"), multi=False) variant("debug", description="Set Debug level", default="0", values=("0", "1", "2", "3", "4"), multi=False) + # Has Fortran but I didn't see c/c++ code + depends_on("c", type="build") + depends_on("cxx", type="build") + depends_on("fortran", type="build") + depends_on("mpi", when="+mpi") depends_on("lapack", when="+lapack") depends_on("cuda", when="+gpu") diff --git a/repo/gpcnet/package.py b/repo/gpcnet/package.py index 49caf2a36..5af600c4b 100644 --- a/repo/gpcnet/package.py +++ b/repo/gpcnet/package.py @@ -20,7 +20,9 @@ class Gpcnet(MakefilePackage): version("1.2", tag="1.2") variant("mpi", default=False, description="Build with MPI support") - + + depends_on("c", type="build") + depends_on("mpi", when="+mpi") @property diff --git a/repo/gromacs/package.py b/repo/gromacs/package.py index 3234686ec..abd6feeec 100644 --- a/repo/gromacs/package.py +++ b/repo/gromacs/package.py @@ -7,7 +7,9 @@ import llnl.util.filesystem as fs -import spack.build_systems.cmake +from spack_repo.builtin.build_systems.cmake import CMakePackage, CMakeBuilder +from spack_repo.builtin.build_systems.cuda import CudaPackage +from spack_repo.builtin.build_systems.rocm import ROCmPackage from spack.package import * @@ -203,6 +205,8 @@ class Gromacs(CMakePackage, CudaPackage, ROCmPackage): msg="GROMACS requires oneMKL 2021.3 or later since version 2023", ) + depends_on("c", type="build") + depends_on("mpi", when="+mpi") # Plumed 2.9.0 needs Gromacs 2023, 2022.5, 2021.7, 2020.7 @@ -426,7 +430,7 @@ def setup_build_environment(self, env): for rpath in self.compiler.extra_rpaths: env.prepend_path("LD_LIBRARY_PATH", rpath) -class CMakeBuilder(spack.build_systems.cmake.CMakeBuilder): +class CMakeBuilder(CMakeBuilder): @run_after("build") def build_test_binaries(self): """Build the test binaries. diff --git a/repo/hipsycl/package.py b/repo/hipsycl/package.py index 430cbe465..50660cf89 100644 --- a/repo/hipsycl/package.py +++ b/repo/hipsycl/package.py @@ -40,6 +40,9 @@ class Hipsycl(CMakePackage, CudaPackage, ROCmPackage): variant("sscp", default=False, description="Enable SSCP compiler") variant("intel", default=False, description="Enable Intel Level Zero backend for SYCL kernels") + depends_on("c", type="build") + depends_on("cxx", type="build") + depends_on("cmake@3.5:", type="build") depends_on("boost +filesystem", when="@:0.8") depends_on("boost@1.67.0:1.69.0 +filesystem +fiber +context cxxstd=17", when="@0.9.1:") diff --git a/repo/hpcg/package.py b/repo/hpcg/package.py index 34e62c698..33f39cb06 100644 --- a/repo/hpcg/package.py +++ b/repo/hpcg/package.py @@ -24,12 +24,15 @@ class Hpcg(CMakePackage): variant("openmp", default=True, description="Enable OpenMP support") variant("caliper", default=False, description="Enable Caliper support") - + + depends_on("c", type="build") + depends_on("cxx", type="build") + depends_on("fortran", type="build") + depends_on("mpi@1.1:") depends_on("caliper", when="+caliper") depends_on("adiak", when="+caliper") - def cmake_args(self): build_targets = ["all", "docs"] install_targets = ["install", "docs"] diff --git a/repo/hpl/package.py b/repo/hpl/package.py index d6ea7c3c6..993124812 100644 --- a/repo/hpl/package.py +++ b/repo/hpl/package.py @@ -17,17 +17,21 @@ class Hpl(AutotoolsPackage): homepage = "https://www.netlib.org/benchmark/hpl/" url = "https://www.netlib.org/benchmark/hpl/hpl-2.2.tar.gz" + git = "https://github.com/daboehme/HPL-caliper.git" # Note: HPL uses autotools starting with 2.3 version("2.3", sha256="32c5c17d22330e6f2337b681aded51637fb6008d3f0eb7c277b163fadd612830") version("2.2", sha256="ac7534163a09e21a5fa763e4e16dfc119bc84043f6e6a807aba666518f8df440") - version("2.3-caliper", git="https://github.com/daboehme/HPL-caliper.git", branch="master", - preferred=False) + version("2.3-caliper", branch="master", preferred=False) variant("openmp", default=False, description="Enable OpenMP support") variant("caliper", default=False, description="Enable Caliper support") + depends_on("c", type="build") + depends_on("cxx", type="build") + depends_on("fortran", type="build") + depends_on("mpi@1.1:") depends_on("blas") diff --git a/repo/hypre/package.py b/repo/hypre/package.py index fd2fa7a94..b38c99efd 100644 --- a/repo/hypre/package.py +++ b/repo/hypre/package.py @@ -6,7 +6,7 @@ import os from spack.package import * -from spack.pkg.builtin.hypre import Hypre as BuiltinHypre +from spack_repo.builtin.packages.hypre.package import Hypre as BuiltinHypre class Hypre(BuiltinHypre): @@ -18,17 +18,6 @@ class Hypre(BuiltinHypre): "gcc": "gnu", } - def configure_args(self): - configure_args = super().configure_args() - - if (self.compiler.fc and 'xlf' in self.compiler.fc) or (self.compiler.f77 and 'xlf' in self.compiler.f77): - if not "+fortran" in self.spec: - configure_args.append("--with-fmangle=no-underscores") - configure_args.append("--with-fmangle-blas=no-underscores") - configure_args.append("--with-fmangle-lapack=no-underscores") - - return configure_args - def setup_build_environment(self, env): if self.spec.satisfies('%oneapi'): compiler_version = self.spec.compiler.version diff --git a/repo/kokkos/package.py b/repo/kokkos/package.py index 9577eca43..fe1054438 100644 --- a/repo/kokkos/package.py +++ b/repo/kokkos/package.py @@ -4,7 +4,7 @@ # SPDX-License-Identifier: Apache-2.0 from spack.package import * -from spack.pkg.builtin.kokkos import Kokkos as BuiltinKokkos +from spack_repo.builtin.packages.kokkos.package import Kokkos as BuiltinKokkos class Kokkos(BuiltinKokkos): diff --git a/repo/kripke/package.py b/repo/kripke/package.py index 345164243..f0cda3a90 100644 --- a/repo/kripke/package.py +++ b/repo/kripke/package.py @@ -58,6 +58,10 @@ class Kripke(CMakePackage, CudaPackage, ROCmPackage): conflicts("+single_memory", when="~rocm") depends_on("chai+single_memory", when="+single_memory") + depends_on("c", type="build") + depends_on("cxx", type="build") + depends_on("fortran", type="build") + depends_on("chai@2024.07.0+raja", when="@1.2.7.0:") depends_on("fmt@9.1", when=f"^chai@2024.07.0") @@ -128,8 +132,9 @@ def cmake_args(self): args.append("-DHIP_ROOT_DIR={0}".format(spec["hip"].prefix)) rocm_archs = spec.variants["amdgpu_target"].value if "none" not in rocm_archs: - args.append("-DHIP_HIPCC_FLAGS=--amdgpu-target={0}".format(",".join(rocm_archs))) - args.append("-DCMAKE_HIP_ARCHITECTURES={0}".format(rocm_archs)) + arch_str = ",".join(rocm_archs) + args.append("-DHIP_HIPCC_FLAGS=--amdgpu-target={0}".format(arch_str)) + args.append("-DCMAKE_HIP_ARCHITECTURES={0}".format(arch_str)) else: # Ensure build with hip is disabled args.append("-DENABLE_HIP=OFF") diff --git a/repo/laghos/package.py b/repo/laghos/package.py index 46150fbfd..2adf767a1 100644 --- a/repo/laghos/package.py +++ b/repo/laghos/package.py @@ -28,6 +28,10 @@ class Laghos(MakefilePackage, CudaPackage, ROCmPackage): variant("caliper", default=False, description="Enable/disable Caliper support") variant("ofast", default=False, description="Enable gcc optimization flags") + depends_on("c", type="build") + depends_on("cxx", type="build") + depends_on("fortran", type="build") + depends_on("mfem+mpi+metis", when="+metis") depends_on("mfem+mpi~metis", when="~metis") depends_on("caliper", when="+caliper") @@ -48,7 +52,7 @@ class Laghos(MakefilePackage, CudaPackage, ROCmPackage): depends_on("mpi") depends_on("hypre+mpi") - depends_on("hypre+cuda+cublas+mpi", when="+cuda") + depends_on("hypre+cuda+mpi", when="+cuda") depends_on("hypre+mixedint~fortran", when="@develop") depends_on("hypre+caliper", when="+caliper") @@ -59,7 +63,7 @@ class Laghos(MakefilePackage, CudaPackage, ROCmPackage): depends_on("mfem +cuda+mpi", when="+cuda") depends_on("mfem +rocm+mpi", when="+rocm") - depends_on("hypre +rocm+rocblas +mpi", when="+rocm") + depends_on("hypre +rocm+mpi", when="+rocm") requires("+rocm", when="^hypre+rocm") for target in ("none", "gfx803", "gfx900", "gfx906", "gfx908", "gfx90a", "gfx942"): depends_on(f"hypre amdgpu_target={target}", when=f"amdgpu_target={target}") diff --git a/repo/lammps/package.py b/repo/lammps/package.py index 06c76955c..08ec824a2 100644 --- a/repo/lammps/package.py +++ b/repo/lammps/package.py @@ -4,7 +4,7 @@ # SPDX-License-Identifier: Apache-2.0 from spack.package import * -from spack.pkg.builtin.lammps import Lammps as BuiltinLammps +from spack_repo.builtin.packages.lammps.package import Lammps as BuiltinLammps class Lammps(BuiltinLammps): diff --git a/repo/mfem/package.py b/repo/mfem/package.py index 5121c50b4..db456df40 100644 --- a/repo/mfem/package.py +++ b/repo/mfem/package.py @@ -8,7 +8,7 @@ import sys from spack.package import * -from spack.pkg.builtin.mfem import Mfem as BuiltinMfem +from spack_repo.builtin.packages.mfem.package import Mfem as BuiltinMfem class Mfem(BuiltinMfem): diff --git a/repo/osu-micro-benchmarks/package.py b/repo/osu-micro-benchmarks/package.py index 87790d440..64553611f 100644 --- a/repo/osu-micro-benchmarks/package.py +++ b/repo/osu-micro-benchmarks/package.py @@ -4,7 +4,7 @@ # SPDX-License-Identifier: Apache-2.0 from spack.package import * -from spack.pkg.builtin.osu_micro_benchmarks import OsuMicroBenchmarks as BuiltinOsu +from spack_repo.builtin.packages.osu_micro_benchmarks.package import OsuMicroBenchmarks as BuiltinOsu class OsuMicroBenchmarks(BuiltinOsu, ROCmPackage): diff --git a/repo/phloem/package.py b/repo/phloem/package.py index 7fabb80a2..37992ac89 100644 --- a/repo/phloem/package.py +++ b/repo/phloem/package.py @@ -17,7 +17,11 @@ class Phloem(MakefilePackage): version("1.4.5", tag="v1.4.5") variant("mpi", default=False, description="Build with MPI support") - + + depends_on("c", type="build") + depends_on("cxx", type="build") + depends_on("fortran", type="build") + depends_on("mpi", when="+mpi") def install(self, spec, prefix): diff --git a/repo/quicksilver/package.py b/repo/quicksilver/package.py index 1a18d1083..e797ae5cc 100644 --- a/repo/quicksilver/package.py +++ b/repo/quicksilver/package.py @@ -29,6 +29,8 @@ class Quicksilver(MakefilePackage): variant("cuda", default=False, description="Build with CUDA support") variant("caliper", default=False, description="Build with Caliper support") + depends_on("c", type="build") + depends_on("mpi", when="+mpi") depends_on("caliper", when="+caliper") depends_on("adiak", when="+caliper") diff --git a/repo/qws/package.py b/repo/qws/package.py index c9403d050..0b7e5d2a8 100644 --- a/repo/qws/package.py +++ b/repo/qws/package.py @@ -19,6 +19,10 @@ class Qws(MakefilePackage): variant("openmp", default=True, description="Build with OpenMP enabled.") variant("caliper", default=False, description="Enable Caliper monitoring") + depends_on("c", type="build") + depends_on("cxx", type="build") + depends_on("fortran", type="build") + depends_on("mpi", when="+mpi") depends_on("caliper", when="+caliper") depends_on("adiak", when="+caliper") diff --git a/repo/raja-perf/package.py b/repo/raja-perf/package.py index 8bbba7561..2ae7defdf 100644 --- a/repo/raja-perf/package.py +++ b/repo/raja-perf/package.py @@ -35,7 +35,7 @@ def hip_repair_cache(options, spec): options.append( cmake_cache_path( "HIP_CLANG_INCLUDE_PATH", - glob.glob("{}/lib/clang/*/include".format(spec["llvm-amdgpu"].prefix))[0], + glob.glob("{}/llvm/lib/clang/*/include".format(spec["llvm-amdgpu"].prefix))[0], ) ) @@ -153,6 +153,10 @@ class RajaPerf(CachedCMakePackage, CudaPackage, ROCmPackage): variant("caliper",default=False, description="Build with support for Caliper based profiling") variant("kokkos", default=False, description="Include Kokkos implementations of the kernels in RAJAPerf") + depends_on("c", type="build") + depends_on("cxx", type="build") + depends_on("fortran", type="build") + depends_on("blt") depends_on("blt@0.7.0:", type="build", when="@2025.03.0:") depends_on("blt@0.5.2:", type="build", when="@2022.10.0:") diff --git a/repo/raja/package.py b/repo/raja/package.py index 8243ba748..028b12d30 100644 --- a/repo/raja/package.py +++ b/repo/raja/package.py @@ -4,7 +4,7 @@ # SPDX-License-Identifier: Apache-2.0 from spack.package import * -from spack.pkg.builtin.raja import Raja as BuiltinRaja +from spack_repo.builtin.packages.raja.package import Raja as BuiltinRaja class Raja(BuiltinRaja): diff --git a/repo/remhos/package.py b/repo/remhos/package.py index d51123801..462c22046 100644 --- a/repo/remhos/package.py +++ b/repo/remhos/package.py @@ -31,6 +31,10 @@ class Remhos(MakefilePackage, CudaPackage, ROCmPackage): variant("metis", default=True, description="Enable/disable METIS support") variant("caliper", default=False, description="Enable/disable Caliper support") + depends_on("c", type="build") + depends_on("cxx", type="build") + depends_on("fortran", type="build") + depends_on("mfem+mpi+metis", when="+metis") depends_on("mfem+mpi~metis", when="~metis") depends_on("caliper", when="+caliper") diff --git a/repo/salmon-tddft/package.py b/repo/salmon-tddft/package.py index d0d028ebf..0b0ea57c3 100644 --- a/repo/salmon-tddft/package.py +++ b/repo/salmon-tddft/package.py @@ -22,6 +22,10 @@ class SalmonTddft(CMakePackage): version("2.0.0", sha256="c3bb80bc5d338cba21cd8f345acbf2f2d81ef75af069a0a0ddbdc0acf358456c") version("1.2.1", sha256="a5045149e49abe9dd9edefe00cd1508a1323081bc3d034632176b728effdbaeb") + depends_on("c", type="build") + depends_on("cxx", type="build") + depends_on("fortran", type="build") + variant("mpi", default=False, description="Enable MPI") variant("openmp", default=False, description="Enable OpenMP") variant("libxc", default=False, description="Enable libxc") diff --git a/repo/saxpy/package.py b/repo/saxpy/package.py index 25dc76ce0..59d78e6ce 100644 --- a/repo/saxpy/package.py +++ b/repo/saxpy/package.py @@ -28,6 +28,8 @@ class Saxpy(CMakePackage, CudaPackage, ROCmPackage): conflicts("+rocm", when="+cuda+openmp") conflicts("+openmp", when="+rocm+cuda") + depends_on("c", type="build") + depends_on("cmake") depends_on("mpi") depends_on("caliper", when="+caliper") diff --git a/repo/smb/package.py b/repo/smb/package.py index 0ae0f08e7..656d3ab53 100644 --- a/repo/smb/package.py +++ b/repo/smb/package.py @@ -19,7 +19,11 @@ class Smb(MakefilePackage): variant("mpi", default=False, description="Build with MPI support") variant("rma", default=False, description="Build RMA-MT variant") + + depends_on("c", type="build") + depends_on("mpi", when="+mpi") + build_directory = ["src/mpi_overhead"] def edit(self, spec, prefix): diff --git a/repo/spectrum-mpi/package.py b/repo/spectrum-mpi/package.py index fba38532a..41c2f3fe2 100644 --- a/repo/spectrum-mpi/package.py +++ b/repo/spectrum-mpi/package.py @@ -4,7 +4,7 @@ # SPDX-License-Identifier: Apache-2.0 from spack.package import * -from spack.pkg.builtin.spectrum_mpi import SpectrumMpi as BuiltinSM +from spack_repo.builtin.packages.spectrum_mpi.package import SpectrumMpi as BuiltinSM class SpectrumMpi(BuiltinSM): diff --git a/repo/stream/package.py b/repo/stream/package.py index e047fd80f..d57a3069e 100644 --- a/repo/stream/package.py +++ b/repo/stream/package.py @@ -24,6 +24,9 @@ class Stream(CMakePackage): requires("@5.10-caliper", when="+caliper") + depends_on("c", type="build") + depends_on("fortran", type="build") + depends_on("caliper", when="+caliper") depends_on("adiak@0.4:", when="+caliper") diff --git a/repo/umpire/package.py b/repo/umpire/package.py index f9f54f1de..ea3a4f171 100644 --- a/repo/umpire/package.py +++ b/repo/umpire/package.py @@ -4,7 +4,7 @@ # SPDX-License-Identifier: Apache-2.0 from spack.package import * -from spack.pkg.builtin.umpire import Umpire as BuiltinUmpire +from spack_repo.builtin.packages.umpire.package import Umpire as BuiltinUmpire class Umpire(BuiltinUmpire): diff --git a/systems/aws-pcluster/system.py b/systems/aws-pcluster/system.py index a8fb23583..f94397fd2 100644 --- a/systems/aws-pcluster/system.py +++ b/systems/aws-pcluster/system.py @@ -4,7 +4,7 @@ # SPDX-License-Identifier: Apache-2.0 -from benchpark.system import System +from benchpark.system import System, compiler_def, compiler_section_for from benchpark.directives import variant, maintainers from benchpark.openmpsystem import OpenMPCPUOnlySystem from benchpark.paths import hardware_descriptions @@ -101,28 +101,16 @@ def compute_packages_section(self): } def compute_compilers_section(self): - - return { - "compilers": [ - { - "compiler": { - "spec": "gcc@7.3.1", - "paths": { - "cc": "/usr/bin/gcc", - "cxx": "/usr/bin/g++", - "f77": "/usr/bin/gfortran", - "fc": "/usr/bin/gfortran", - }, - "flags": {}, - "operating_system": "alinux2", - "target": "x86_64", - "modules": [], - "environment": {}, - "extra_rpaths": [], - } - } - ] - } + return compiler_section_for( + "gcc", + [ + compiler_def( + "gcc@7.3.1 languages=c,c++,fortran", + "/usr/", + {"c": "gcc", "cxx": "g++", "fortran": "gfortran"}, + ) + ], + ) def compute_software_section(self): return { diff --git a/systems/csc-lumi/system.py b/systems/csc-lumi/system.py index 037f81247..6ac7ce4d5 100644 --- a/systems/csc-lumi/system.py +++ b/systems/csc-lumi/system.py @@ -7,7 +7,7 @@ from benchpark.directives import variant, maintainers from benchpark.paths import hardware_descriptions from benchpark.rocmsystem import ROCmSystem -from benchpark.system import System +from benchpark.system import System, compiler_def, compiler_section_for, merge_dicts from packaging.version import Version @@ -161,107 +161,79 @@ def compute_packages_section(self): return selections def compute_compilers_section(self): - selections = self.rocmcc_cfg() + chosen = [self.rocmcc_cfg()] if "cce" in self.spec.variants["compiler"][0]: - selections["compilers"] += self.cce_compiler_cfg()["compilers"] + chosen.append(self.cce_compiler_cfg()) else: - selections["compilers"] += self.gcc_compiler_cfg()["compilers"] + chosen.append(self.gcc_compiler_cfg()) - return selections + return merge_dicts(*chosen) def rocmcc_cfg(self): - return { - "compilers": [ - { - "compiler": { - "spec": f"rocmcc@{self.rocm_version}", - "paths": { - "cc": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}/bin/amdclang", - "cxx": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}/bin/amdclang++", - "f77": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}/bin/amdflang", - "fc": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}/bin/amdflang", - }, - # "flags": " ", # Uncomment if needed - "operating_system": "sles15", - "target": "any", - "modules": [], - "environment": { - "set": {"RFE_811452_DISABLE": "1"}, - "append_path": {"LD_LIBRARY_PATH": "/opt/cray/pe/gcc-libs"}, - "prepend_path": { - "LD_LIBRARY_PATH": "/opt/cray/pe/pmi/6.1.12/lib", - "LIBRARY_PATH": f"/appl/lumi/SW/CrayEnv/EB/rocm/5.6.1/lib:/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}/lib64", - }, + return compiler_section_for( + "llvm-amdgpu", + [ + compiler_def( + f"llvm-amdgpu@{self.rocm_version}", + f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}/", + {"c": "amdclang", "cxx": "amdclang++", "fortran": "amdflang"}, + env={ + "set": {"RFE_811452_DISABLE": "1"}, + "append_path": {"LD_LIBRARY_PATH": "/opt/cray/pe/gcc-libs"}, + "prepend_path": { + "LD_LIBRARY_PATH": "/opt/cray/pe/pmi/6.1.12/lib", + "LIBRARY_PATH": f"/appl/lumi/SW/CrayEnv/EB/rocm/5.6.1/lib:/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}/lib64", }, - "extra_rpaths": [ - f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}/lib", - f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}/lib64", - "/opt/cray/pe/gcc-libs", - ], - } - } - ] - } + }, + extra_rpaths=[ + f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}/lib", + f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}/lib64", + "/opt/cray/pe/gcc-libs", + ], + ) + ], + ) def cce_compiler_cfg(self): - return { - "compilers": [ - { - "compiler": { - "spec": f"cce@{self.compiler_version}", - "paths": { - "cc": f"/opt/cray/pe/cce/{self.compiler_version}/bin/craycc", - "cxx": f"/opt/cray/pe/cce/{self.compiler_version}/bin/crayCC", - "f77": f"/opt/cray/pe/cce/{self.compiler_version}/bin/crayftn", - "fc": f"/opt/cray/pe/cce/{self.compiler_version}/bin/crayftn", + return compiler_section_for( + "cce", + [ + compiler_def( + f"cce@{self.compiler_version}", + f"/opt/cray/pe/cce/{self.compiler_version}/", + {"c": "craycc", "cxx": "crayCC", "fortran": "crayftn"}, + env={ + "set": {"RFE_811452_DISABLE": "1"}, + "prepend_path": { + "LD_LIBRARY_PATH": "/opt/cray/pe/pmi/6.1.12/lib" }, - # "flags": "", # Uncomment if needed - "operating_system": "sles15", - "target": "any", - "modules": [], - "environment": { - "set": {"RFE_811452_DISABLE": "1"}, - "prepend_path": { - "LD_LIBRARY_PATH": "/opt/cray/pe/pmi/6.1.12/lib" - }, - "append_path": { - "LD_LIBRARY_PATH": "/opt/cray/pe/gcc-libs", - "PKG_CONFIG_PATH": "/usr/lib64/pkgconfig", - }, + "append_path": { + "LD_LIBRARY_PATH": "/opt/cray/pe/gcc-libs", + "PKG_CONFIG_PATH": "/usr/lib64/pkgconfig", }, - "extra_rpaths": ["/opt/cray/pe/gcc-libs"], - } - } - ] - } + }, + extra_rpaths=["/opt/cray/pe/gcc-libs"], + ) + ], + ) def gcc_compiler_cfg(self): - return { - "compilers": [ - { - "compiler": { - "spec": f"gcc@{self.compiler_version}", - "paths": { - "cc": f"/opt/cray/pe/gcc/{self.compiler_version}/bin/gcc", - "cxx": f"/opt/cray/pe/gcc/{self.compiler_version}/bin/g++", - "f77": f"/opt/cray/pe/gcc/{self.compiler_version}/bin/gfortran", - "fc": f"/opt/cray/pe/gcc/{self.compiler_version}/bin/gfortran", - }, - # "flags": "", # Uncomment if needed - "operating_system": "sles15", - "target": "any", - "modules": [], - "environment": { - "prepend_path": { - "LD_LIBRARY_PATH": "/opt/cray/pe/pmi/6.1.12/lib:/opt/cray/libfabric/1.15.2.0/lib64", - "PKG_CONFIG_PATH": "/usr/lib64/pkgconfig", - } - }, - "extra_rpaths": [], - } - } - ] - } + return compiler_section_for( + "gcc", + [ + compiler_def( + f"gcc@{self.compiler_version} languages:=c,c++,fortran", + f"/opt/cray/pe/gcc/{self.compiler_version}/", + {"c": "gcc", "cxx": "g++", "fortran": "gfortran"}, + env={ + "prepend_path": { + "LD_LIBRARY_PATH": "/opt/cray/pe/pmi/6.1.12/lib:/opt/cray/libfabric/1.15.2.0/lib64", + "PKG_CONFIG_PATH": "/usr/lib64/pkgconfig", + } + }, + ) + ], + ) def rocm_config(self): return { @@ -365,206 +337,205 @@ def rocm_config(self): } ], }, - "llvm-amdgpu": { - "buildable": False, - "externals": [ - { - "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}/llvm", - "spec": f"llvm-amdgpu@{self.rocm_version}", - } - ], - }, - "rccl": { - "buildable": False, - "externals": [ - { - "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", - "spec": f"rccl@{self.rocm_version}", - } - ], - }, - "rocalution": { - "buildable": False, - "externals": [ - { - "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", - "spec": f"rocalution@{self.rocm_version}", - } - ], - }, - "rocblas": { - "buildable": False, - "externals": [ - { - "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", - "spec": f"rocblas@{self.rocm_version}", - } - ], - }, - "rocfft": { - "buildable": False, - "externals": [ - { - "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", - "spec": f"rocfft@{self.rocm_version}", - } - ], - "variants": "amdgpu_target=auto amdgpu_target_sram_ecc=auto", - }, - "rocm-clang-ocl": { - "buildable": False, - "externals": [ - { - "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", - "spec": f"rocm-clang-ocl@{self.rocm_version}", - } - ], - }, - "rocm-cmake": { - "buildable": False, - "externals": [ - { - "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", - "spec": f"rocm-cmake@{self.rocm_version}", - } - ], - }, - "rocm-device-libs": { - "buildable": False, - "externals": [ - { - "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", - "spec": f"rocm-device-libs@{self.rocm_version}", - } - ], - }, - "rocm-gdb": { - "buildable": False, - "externals": [ - { - "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", - "spec": f"rocm-gdb@{self.rocm_version}", - } - ], - }, - "rocm-opencl": { - "buildable": False, - "externals": [ - { - "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}/opencl", - "spec": f"rocm-opencl@{self.rocm_version}", - } - ], - }, - "rocm-opencl-runtime": { - "buildable": False, - "externals": [ - { - "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}/opencl", - "spec": f"rocm-opencl-runtime@{self.rocm_version}", - } - ], - }, - "rocm-openmp-extras": { - "buildable": False, - "externals": [ - { - "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}/llvm", - "spec": f"rocm-openmp-extras@{self.rocm_version}", - } - ], - }, - "rocm-smi": { - "buildable": False, - "externals": [ - { - "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}/rocm_smi", - "spec": f"rocmsmi@{self.rocm_version}", - } - ], - }, - "rocm-smi-lib": { - "buildable": False, - "externals": [ - { - "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}/rocm_smi", - "spec": f"rocm-smi-lib@{self.rocm_version}", - } - ], - }, - "rocminfo": { - "buildable": False, - "externals": [ - { - "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", - "spec": f"rocminfo@{self.rocm_version}", - } - ], - }, - "rocprim": { - "buildable": False, - "externals": [ - { - "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", - "spec": f"rocprim@{self.rocm_version}", - } - ], - }, - "rocprofiler-dev": { - "buildable": False, - "externals": [ - { - "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", - "spec": f"rocprofiler-dev@{self.rocm_version}", - } - ], - }, - "rocrand": { - "buildable": False, - "externals": [ - { - "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", - "spec": f"rocrand@{self.rocm_version}", - } - ], - }, - "rocsolver": { - "buildable": False, - "externals": [ - { - "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", - "spec": f"rocsolver@{self.rocm_version}", - } - ], - }, - "rocsparse": { - "buildable": False, - "externals": [ - { - "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", - "spec": f"rocsparse@{self.rocm_version}", - } - ], - }, - "rocthrust": { - "buildable": False, - "externals": [ - { - "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", - "spec": f"rocthrust@{self.rocm_version}", - } - ], - }, - "roctracer-dev": { - "buildable": False, - "externals": [ - { - "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", - "spec": f"roctracer-dev@{self.rocm_version}", - } - ], - }, - } + # "llvm-amdgpu": { + # "buildable": False, + # "externals": [ + # { + # "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}/llvm", + # "spec": f"llvm-amdgpu@{self.rocm_version}", + # } + # ], + }, + "rccl": { + "buildable": False, + "externals": [ + { + "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", + "spec": f"rccl@{self.rocm_version}", + } + ], + }, + "rocalution": { + "buildable": False, + "externals": [ + { + "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", + "spec": f"rocalution@{self.rocm_version}", + } + ], + }, + "rocblas": { + "buildable": False, + "externals": [ + { + "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", + "spec": f"rocblas@{self.rocm_version}", + } + ], + }, + "rocfft": { + "buildable": False, + "externals": [ + { + "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", + "spec": f"rocfft@{self.rocm_version}", + } + ], + "variants": "amdgpu_target=auto amdgpu_target_sram_ecc=auto", + }, + "rocm-clang-ocl": { + "buildable": False, + "externals": [ + { + "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", + "spec": f"rocm-clang-ocl@{self.rocm_version}", + } + ], + }, + "rocm-cmake": { + "buildable": False, + "externals": [ + { + "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", + "spec": f"rocm-cmake@{self.rocm_version}", + } + ], + }, + "rocm-device-libs": { + "buildable": False, + "externals": [ + { + "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", + "spec": f"rocm-device-libs@{self.rocm_version}", + } + ], + }, + "rocm-gdb": { + "buildable": False, + "externals": [ + { + "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", + "spec": f"rocm-gdb@{self.rocm_version}", + } + ], + }, + "rocm-opencl": { + "buildable": False, + "externals": [ + { + "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}/opencl", + "spec": f"rocm-opencl@{self.rocm_version}", + } + ], + }, + "rocm-opencl-runtime": { + "buildable": False, + "externals": [ + { + "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}/opencl", + "spec": f"rocm-opencl-runtime@{self.rocm_version}", + } + ], + }, + "rocm-openmp-extras": { + "buildable": False, + "externals": [ + { + "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}/llvm", + "spec": f"rocm-openmp-extras@{self.rocm_version}", + } + ], + }, + "rocm-smi": { + "buildable": False, + "externals": [ + { + "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}/rocm_smi", + "spec": f"rocmsmi@{self.rocm_version}", + } + ], + }, + "rocm-smi-lib": { + "buildable": False, + "externals": [ + { + "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}/rocm_smi", + "spec": f"rocm-smi-lib@{self.rocm_version}", + } + ], + }, + "rocminfo": { + "buildable": False, + "externals": [ + { + "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", + "spec": f"rocminfo@{self.rocm_version}", + } + ], + }, + "rocprim": { + "buildable": False, + "externals": [ + { + "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", + "spec": f"rocprim@{self.rocm_version}", + } + ], + }, + "rocprofiler-dev": { + "buildable": False, + "externals": [ + { + "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", + "spec": f"rocprofiler-dev@{self.rocm_version}", + } + ], + }, + "rocrand": { + "buildable": False, + "externals": [ + { + "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", + "spec": f"rocrand@{self.rocm_version}", + } + ], + }, + "rocsolver": { + "buildable": False, + "externals": [ + { + "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", + "spec": f"rocsolver@{self.rocm_version}", + } + ], + }, + "rocsparse": { + "buildable": False, + "externals": [ + { + "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", + "spec": f"rocsparse@{self.rocm_version}", + } + ], + }, + "rocthrust": { + "buildable": False, + "externals": [ + { + "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", + "spec": f"rocthrust@{self.rocm_version}", + } + ], + }, + "roctracer-dev": { + "buildable": False, + "externals": [ + { + "prefix": f"/appl/lumi/SW/CrayEnv/EB/rocm/{self.rocm_version}", + "spec": f"roctracer-dev@{self.rocm_version}", + } + ], + }, } def compute_software_section(self): diff --git a/systems/cscs-daint/system.py b/systems/cscs-daint/system.py index 6416426ce..669edf7e5 100644 --- a/systems/cscs-daint/system.py +++ b/systems/cscs-daint/system.py @@ -5,7 +5,7 @@ from benchpark.directives import variant, maintainers -from benchpark.system import System +from benchpark.system import System, compiler_def, compiler_section_for, merge_dicts from benchpark.cudasystem import CudaSystem from packaging.version import Version from benchpark.paths import hardware_descriptions @@ -142,163 +142,98 @@ def compute_packages_section(self): } def compute_compilers_section(self): - compiler_map = { - "cce": { - "compilers": [ - { - "compiler": { - "spec": "cce@12.0.3", - "paths": { - "cc": "cc", - "cxx": "CC", - "f77": "ftn", - "fc": "ftn", - }, - "flags": {}, - "operating_system": "cnl7", - "target": "any", - "modules": ["PrgEnv-cray", "cce/12.0.3"], - "environment": {}, - "extra_rpaths": [], - } - } - ] - }, - "gcc9": { - "compilers": [ - { - "compiler": { - "spec": "gcc@9.3.0", - "paths": { - "cc": "cc", - "cxx": "CC", - "f77": "ftn", - "fc": "ftn", - }, - "flags": {}, - "operating_system": "cnl7", - "target": "any", - "modules": ["PrgEnv-gnu", "gcc/9.3.0"], - "environment": {}, - "extra_rpaths": [], - } - } - ] - }, - "gcc10": { - "compilers": [ - { - "compiler": { - "spec": "gcc@10.3.0", - "paths": { - "cc": "cc", - "cxx": "CC", - "f77": "ftn", - "fc": "ftn", - }, - "flags": {}, - "operating_system": "cnl7", - "target": "any", - "modules": ["PrgEnv-gnu", "gcc/10.3.0"], - "environment": {}, - "extra_rpaths": [], - } - } - ] - }, - "gcc11": { - "compilers": [ - { - "compiler": { - "spec": "gcc@11.2.0", - "paths": { - "cc": "cc", - "cxx": "CC", - "f77": "ftn", - "fc": "ftn", - }, - "flags": {}, - "operating_system": "cnl7", - "target": "any", - "modules": ["PrgEnv-gnu", "gcc/11.2.0"], - "environment": {}, - "extra_rpaths": [], - } - } - ] - }, - "intel": { - "compilers": [ - { - "compiler": { - "spec": "intel@2021.3.0", - "paths": { - "cc": "cc", - "cxx": "CC", - "f77": "ftn", - "fc": "ftn", - }, - "flags": {}, - "operating_system": "cnl7", - "target": "any", - "modules": ["PrgEnv-intel", "intel/2021.3.0"], - "environment": {}, - "extra_rpaths": [], - } - } - ] - }, - "pgi": { - "compilers": [ - { - "compiler": { - "spec": "pgi@20.1.1", - "paths": { - "cc": "cc", - "cxx": "CC", - "f77": "ftn", - "fc": "ftn", - }, - "flags": {}, - "operating_system": "cnl7", - "target": "any", - "modules": ["PrgEnv-pgi", "pgi/20.1.1"], - "environment": {}, - "extra_rpaths": [], - } - } - ] - }, - "nvhpc": { - "compilers": [ - { - "compiler": { - "spec": "nvhpc@21.3", - "paths": { - "cc": "cc", - "cxx": "CC", - "f77": "ftn", - "fc": "ftn", - }, - "flags": {}, - "operating_system": "cnl7", - "target": "any", - "modules": ["PrgEnv-nvidia", "nvidia/21.3"], - "environment": {}, - "extra_rpaths": [], - } - } - ] - }, - } + compiler_map = {} + compiler_map["cce"] = compiler_section_for( + "cce", + [ + compiler_def( + "cce@12.0.3", + "/path/is/now/needed/", # <-- TODO: this needs to be filled in + {"c": "cc", "cxx": "CC", "fortran": "ftn"}, + modules=["PrgEnv-cray", "cce/12.0.3"], + compilers_use_relative_paths=True, + ) + ], + ) + compiler_map["gcc9"] = compiler_section_for( + "gcc", + [ + compiler_def( + "gcc@9.3.0 languages:=c,c++,fortran", + "/path/is/now/needed/", # <-- TODO: this needs to be filled in + {"c": "cc", "cxx": "CC", "fortran": "ftn"}, + modules=["PrgEnv-gnu", "gcc/9.3.0"], + compilers_use_relative_paths=True, + ) + ], + ) + compiler_map["gcc10"] = compiler_section_for( + "gcc", + [ + compiler_def( + "gcc@10.3.0 languages:=c,c++,fortran", + "/path/is/now/needed/", # <-- TODO: this needs to be filled in + {"c": "cc", "cxx": "CC", "fortran": "ftn"}, + modules=["PrgEnv-gnu", "gcc/10.3.0"], + compilers_use_relative_paths=True, + ) + ], + ) + compiler_map["gcc11"] = compiler_section_for( + "gcc", + [ + compiler_def( + "gcc@11.2.0 languages:=c,c++,fortran", + "/path/is/now/needed/", # <-- TODO: this needs to be filled in + {"c": "cc", "cxx": "CC", "fortran": "ftn"}, + modules=["PrgEnv-gnu", "gcc/11.2.0"], + compilers_use_relative_paths=True, + ) + ], + ) + compiler_map["intel"] = compiler_section_for( + "intel-oneapi-compilers", + [ + compiler_def( + "intel-oneapi-compilers@2021.3.0", + "/path/is/now/needed/", # <-- TODO: this needs to be filled in + {"c": "cc", "cxx": "CC", "fortran": "ftn"}, + modules=["PrgEnv-intel", "intel/2021.3.0"], + compilers_use_relative_paths=True, + ) + ], + ) + compiler_map["pgi"] = compiler_section_for( + "pgi", + [ + compiler_def( + "pgi@20.1.1", + "/path/is/now/needed/", # <-- TODO: this needs to be filled in + {"c": "cc", "cxx": "CC", "fortran": "ftn"}, + modules=["PrgEnv-pgi", "pgi/20.1.1"], + compilers_use_relative_paths=True, + ) + ], + ) + compiler_map["nvhpc"] = compiler_section_for( + "nvhpc", + [ + compiler_def( + "nvhpc@21.3", + "/path/is/now/needed/", # <-- TODO: this needs to be filled in + {"c": "cc", "cxx": "CC", "fortran": "ftn"}, + modules=["PrgEnv-nvidia", "nvidia/21.3"], + compilers_use_relative_paths=True, + ) + ], + ) + collected = list() compiler_variant = self.spec.variants["compiler"][0] - selections = {"compilers": []} - for key, config in compiler_map.items(): + for key, cfg in compiler_map.items(): if key in compiler_variant: - selections["compilers"] += config["compilers"] - - return selections + collected.append(cfg) + return merge_dicts(*collected) def cuda_config(self, cuda_version): if cuda_version == "10.2.89": diff --git a/systems/cscs-eiger/system.py b/systems/cscs-eiger/system.py index f59115e92..8bb459906 100644 --- a/systems/cscs-eiger/system.py +++ b/systems/cscs-eiger/system.py @@ -4,7 +4,7 @@ # SPDX-License-Identifier: Apache-2.0 from benchpark.directives import variant, maintainers -from benchpark.system import System +from benchpark.system import System, compiler_def, compiler_section_for from benchpark.openmpsystem import OpenMPCPUOnlySystem from packaging.version import Version from benchpark.paths import hardware_descriptions @@ -42,22 +42,18 @@ def __init__(self, spec): setattr(self, k, v) def compute_compilers_section(self): - return { - "compilers": [ - { - "compiler": { - "spec": "gcc@12.3.0", - "paths": {"cc": "cc", "cxx": "CC", "f77": "ftn", "fc": "ftn"}, - "flags": {}, - "target": "any", - "operating_system": "HPECray", - "modules": ["PrgEnv-gnu", "gcc/12.3.0"], - "environment": {}, - "extra_rpaths": [], - } - } - ] - } + return compiler_section_for( + "gcc", + [ + compiler_def( + "gcc@12.3.0 languages:=c,c++,fortran", + "/path/is/now/needed/", # <-- TODO: this needs to be filled in + {"c": "cc", "cxx": "CC", "fortran": "ftn"}, + modules=["PrgEnv-gnu", "gcc/12.3.0"], + compilers_use_relative_paths=True, + ) + ], + ) def compute_packages_section(self): diff --git a/systems/jsc-juwels/system.py b/systems/jsc-juwels/system.py index ff2773e96..2832cb384 100644 --- a/systems/jsc-juwels/system.py +++ b/systems/jsc-juwels/system.py @@ -4,7 +4,7 @@ # SPDX-License-Identifier: Apache-2.0 from benchpark.directives import variant, maintainers -from benchpark.system import System +from benchpark.system import System, compiler_def, compiler_section_for, merge_dicts from benchpark.cudasystem import CudaSystem from packaging.version import Version from benchpark.paths import hardware_descriptions @@ -60,48 +60,35 @@ def __init__(self, spec): setattr(self, k, v) def compute_compilers_section(self): - selections = { - "compilers": [ - { - "compiler": { - "spec": "nvhpc@23.7", - "paths": { - "cc": "/p/software/juwelsbooster/stages/2024/software/NVHPC/23.7-CUDA-12/Linux_aarch64/23.7/compilers/bin/nvc", - "cxx": "/p/software/juwelsbooster/stages/2024/software/NVHPC/23.7-CUDA-12/Linux_aarch64/23.7/compilers/bin/nvc++", - "f77": "/p/software/juwelsbooster/stages/2024/software/NVHPC/23.7-CUDA-12/Linux_aarch64/23.7/compilers/bin/nvfortran", - "fc": "/p/software/juwelsbooster/stages/2024/software/NVHPC/23.7-CUDA-12/Linux_aarch64/23.7/compilers/bin/nvfortran", - }, - "operating_system": "rocky8", - "target": "x86_64", - "modules": ["Stages/2024", "NVHPC/23.7"], - "environment": {}, - "extra_rpaths": [], - } - } - ] - } + nvhpc_cfg = compiler_section_for( + "nvhpc", + [ + compiler_def( + "nvhpc@23.7", + "/p/software/juwelsbooster/stages/2024/software/NVHPC/23.7-CUDA-12/Linux_aarch64/23.7/compilers/", + {"c": "nvc", "cxx": "nvc++", "fortran": "nvfortran"}, + modules=["Stages/2024", "NVHPC/23.7"], + ) + ], + ) if self.spec.satisfies("compiler=gcc"): - selections["compilers"] += [ - { - "compiler": { - "spec": "gcc@12.3.0", - "paths": { - "cc": "/p/software/juwelsbooster/stages/2024/software/GCCcore/12.3.0/bin/gcc", - "cxx": "/p/software/juwelsbooster/stages/2024/software/GCCcore/12.3.0/bin/g++", - "f77": "/p/software/juwelsbooster/stages/2024/software/GCCcore/12.3.0/bin/gfortran", - "fc": "/p/software/juwelsbooster/stages/2024/software/GCCcore/12.3.0/bin/gfortran", - }, - "operating_system": "rocky9", - "target": "aarch64", - "modules": ["Stages/2024", "GCC/12.3.0"], - "environment": {}, - "extra_rpaths": [], - } - } - ] - - return selections + gcc_cfg = compiler_section_for( + "gcc", + [ + compiler_def( + "gcc@12.3.0 languages:=c,c++,fortran", + "/p/software/juwelsbooster/stages/2024/software/GCCcore/12.3.0/", + {"c": "gcc", "cxx": "g++", "fortran": "gfortran"}, + modules=["Stages/2024", "GCC/12.3.0"], + ) + ], + ) + cfg = merge_dicts(nvhpc_cfg, gcc_cfg) + else: + cfg = nvhpc_cfg + + return cfg def compute_packages_section(self): diff --git a/systems/lanl-venado/system.py b/systems/lanl-venado/system.py index 0247d2564..8563053b2 100644 --- a/systems/lanl-venado/system.py +++ b/systems/lanl-venado/system.py @@ -6,7 +6,7 @@ from benchpark.directives import variant, maintainers from benchpark.cudasystem import CudaSystem -from benchpark.system import System +from benchpark.system import System, compiler_def, compiler_section_for, merge_dicts from benchpark.paths import hardware_descriptions from packaging.version import Version @@ -164,65 +164,52 @@ def compute_packages_section(self): return selections def compute_compilers_section(self): - selections = { - "compilers": [ - { - "compiler": { - "spec": "gcc@12.3.0", - "paths": { - "cc": "/usr/projects/hpcsoft/tce/24-07/cos3-aarch64-cc90/compilers/gcc/12.3.0/bin/gcc", - "cxx": "/usr/projects/hpcsoft/tce/24-07/cos3-aarch64-cc90/compilers/gcc/12.3.0/bin/g++", - "f77": "/usr/projects/hpcsoft/tce/24-07/cos3-aarch64-cc90/compilers/gcc/12.3.0/bin/gfortran", - "fc": "/usr/projects/hpcsoft/tce/24-07/cos3-aarch64-cc90/compilers/gcc/12.3.0/bin/gfortran", - }, - "flags": {}, - "operating_system": "sles15", - "target": "aarch64", - "modules": [], - "environment": {}, - "extra_rpaths": [], - } - } - ] - } + gcc_cfg = compiler_section_for( + "gcc", + [ + compiler_def( + "gcc@12.3.0 languages:=c,c++,fortran", + "/usr/projects/hpcsoft/tce/24-07/cos3-aarch64-cc90/compilers/gcc/12.3.0/", + {"c": "gcc", "cxx": "g++", "fortran": "gfortran"}, + ) + ], + ) + # TODO: Construct/extract/customize compiler information from the working set if self.spec.satisfies("compiler=cce"): - selections["compilers"] += [ - { - "compiler": { - "spec": "cce@18.0.0", - "paths": { - "cc": "/opt/cray/pe/cce/18.0.0/bin/craycc", - "cxx": "/opt/cray/pe/cce/18.0.0/bin/crayCC", - "f77": "/opt/cray/pe/cce/18.0.0/bin/crayftn", - "fc": "/opt/cray/pe/cce/18.0.0/bin/crayftn", - }, - "flags": { + cce_cfg = compiler_section_for( + "cce", + [ + compiler_def( + "cce@18.0.0", + "/opt/cray/pe/cce/18.0.0/", + {"c": "cracc", "cxx": "crayCC", "fortran": "crayftn"}, + flags={ "cflags": "-g -O2 --gcc-toolchain=/usr/projects/hpcsoft/tce/24-07/cos3-aarch64-cc90/compilers/gcc/12.3.0", "cxxflags": "-g -O2 --gcc-toolchain=/usr/projects/hpcsoft/tce/24-07/cos3-aarch64-cc90/compilers/gcc/12.3.0", "fflags": "-g -O2 -hnopattern", "ldflags": "-ldl", }, - "operating_system": "sles15", - "target": "aarch64", - "modules": [], - "environment": { + env={ "prepend_path": { "LD_LIBRARY_PATH": "/opt/cray/pe/cce/18.0.0/cce/aarch64/lib:/opt/cray/libfabric/1.20.1/lib64:/usr/projects/hpcsoft/tce/24-07/cos3-aarch64-cc90/compilers/gcc/12.3.0/lib:/usr/projects/hpcsoft/tce/24-07/cos3-aarch64-cc90/compilers/gcc/12.3.0/lib64:/opt/cray/pe/gcc-libs" } }, - "extra_rpaths": [ + extra_rpaths=[ "/opt/cray/pe/gcc-libs", "/opt/cray/pe/cce/18.0.0/cce/aarch64/lib", "/opt/cray/libfabric/1.20.1/lib64", "/usr/projects/hpcsoft/tce/24-07/cos3-aarch64-cc90/compilers/gcc/12.3.0/lib", "/usr/projects/hpcsoft/tce/24-07/cos3-aarch64-cc90/compilers/gcc/12.3.0/lib64", ], - } - } - ] + ) + ], + ) + cfg = merge_dicts(gcc_cfg, cce_cfg) + else: + cfg = gcc_cfg - return selections + return cfg def mpi_config(self): mpi_version = "8.1.30" diff --git a/systems/llnl-cluster/system.py b/systems/llnl-cluster/system.py index d773b6f04..7c1d08e44 100644 --- a/systems/llnl-cluster/system.py +++ b/systems/llnl-cluster/system.py @@ -5,7 +5,13 @@ from benchpark.directives import variant, maintainers -from benchpark.system import System, JobQueue +from benchpark.system import ( + System, + JobQueue, + compiler_def, + compiler_section_for, + merge_dicts, +) from benchpark.openmpsystem import OpenMPCPUOnlySystem from benchpark.paths import hardware_descriptions @@ -197,6 +203,8 @@ def compute_packages_section(self): | { "mpi": { "buildable": False, + }, + "mvapich2": { "externals": [ { "spec": "mvapich2@2.3.7-gcc1211", @@ -206,7 +214,7 @@ def compute_packages_section(self): }, } ], - } + }, } } elif self.spec.satisfies("compiler=intel"): @@ -215,6 +223,8 @@ def compute_packages_section(self): | { "mpi": { "buildable": False, + }, + "mvapich2": { "externals": [ { "spec": "mvapich2@2.3.7-intel202160classic", @@ -224,7 +234,7 @@ def compute_packages_section(self): }, } ], - } + }, } } elif self.spec.satisfies("compiler=oneapi"): @@ -233,6 +243,8 @@ def compute_packages_section(self): | { "mpi": { "buildable": False, + }, + "mvapich2": { "externals": [ { "spec": "mvapich2@2.3.7-intel202321", @@ -242,113 +254,73 @@ def compute_packages_section(self): }, } ], - } + }, } } - selections["packages"] |= self.compiler_weighting_cfg()["packages"] - return selections - def compiler_weighting_cfg(self): - if self.spec.satisfies("compiler=oneapi"): - return {"packages": {"all": {"require": [{"one_of": ["%oneapi", "%gcc"]}]}}} - else: - return {"packages": {}} - def compute_compilers_section(self): - selections = {} if self.spec.satisfies("compiler=gcc"): - selections = { - "compilers": [ - { - "compiler": { - "spec": "gcc@12.1.1", - "paths": { - "cc": "/usr/tce/packages/gcc/gcc-12.1.1/bin/gcc", - "cxx": "/usr/tce/packages/gcc/gcc-12.1.1/bin/g++", - "f77": "/usr/tce/packages/gcc/gcc-12.1.1/bin/gfortran", - "fc": "/usr/tce/packages/gcc/gcc-12.1.1/bin/gfortran", - }, - "flags": {}, - "operating_system": "rhel8", - "target": "x86_64", - "modules": [], - "environment": {}, - "extra_rpaths": [], - } - } - ] - } + cfg = compiler_section_for( + "gcc", + [ + compiler_def( + "gcc@12.1.1 languages:=c,c++,fortran", + "/usr/tce/packages/gcc/gcc-12.1.1/", + {"c": "gcc", "cxx": "g++", "fortran": "gfortran"}, + ) + ], + ) elif self.spec.satisfies("compiler=intel"): - selections = { - "compilers": [ - { - "compiler": { - "spec": "intel@2021.6.0-classic", - "paths": { - "cc": "/usr/tce/packages/intel-classic/intel-classic-2021.6.0/bin/icc", - "cxx": "/usr/tce/packages/intel-classic/intel-classic-2021.6.0/bin/icpc", - "f77": "/usr/tce/packages/intel-classic/intel-classic-2021.6.0/bin/ifort", - "fc": "/usr/tce/packages/intel-classic/intel-classic-2021.6.0/bin/ifort", - }, - "flags": {}, - "operating_system": "rhel8", - "target": "x86_64", - "modules": [], - "environment": {}, - "extra_rpaths": [], - } - } - ] - } + cfg = compiler_section_for( + "intel-oneapi-compilers-classic", + [ + compiler_def( + "intel-oneapi-compilers-classic@2021.6.0~envmods", + "/usr/tce/packages/intel-classic/intel-classic-2021.6.0/", + {"c": "icc", "cxx": "icpc", "fortran": "ifort"}, + ) + ], + ) elif self.spec.satisfies("compiler=oneapi"): - selections = { - "compilers": [ - { - "compiler": { - "spec": "gcc@12.1.1", - "paths": { - "cc": "/usr/tce/packages/gcc/gcc-12.1.1/bin/gcc", - "cxx": "/usr/tce/packages/gcc/gcc-12.1.1/bin/g++", - "f77": "/usr/tce/packages/gcc/gcc-12.1.1/bin/gfortran", - "fc": "/usr/tce/packages/gcc/gcc-12.1.1/bin/gfortran", - }, - "flags": {}, - "operating_system": "rhel8", - "target": "x86_64", - "modules": [], - "environment": {}, - "extra_rpaths": [], - } - }, - { - "compiler": { - "spec": "oneapi@2023.2.1", - "paths": { - "cc": "/usr/tce/packages/intel/intel-2023.2.1/compiler/2023.2.1/linux/bin/icx", - "cxx": "/usr/tce/packages/intel/intel-2023.2.1/compiler/2023.2.1/linux/bin/icpx", - "f77": "/usr/tce/packages/intel/intel-2023.2.1/compiler/2023.2.1/linux/bin/ifx", - "fc": "/usr/tce/packages/intel/intel-2023.2.1/compiler/2023.2.1/linux/bin/ifx", - }, - "flags": {}, - "operating_system": "rhel8", - "target": "x86_64", - "modules": [], - "environment": {}, - "extra_rpaths": [], - } - }, - ] - } + gcc_cfg = compiler_section_for( + "gcc", + [ + compiler_def( + "gcc@12.1.1", + "/usr/tce/packages/gcc/gcc-12.1.1/", + {"c": "gcc", "cxx": "g++", "fortran": "gfortran"}, + ) + ], + ) + oneapi_cfg = compiler_section_for( + "intel-oneapi-compilers", + [ + compiler_def( + "intel-oneapi-compilers@2023.2.1~envmods", + "/usr/tce/packages/intel/intel-2023.2.1/compiler/2023.2.1/linux/", + {"c": "icx", "cxx": "icpx", "fortran": "ifx"}, + ) + ], + ) + prefs = {"one_of": ["%oneapi", "%gcc"], "when": "%c"} + weighting_cfg = {"packages": {"all": {"require": [prefs]}}} + cfg = merge_dicts(gcc_cfg, oneapi_cfg, weighting_cfg) - return selections + return cfg def compute_software_section(self): + default_compiler = "gcc" + if self.spec.satisfies("compiler=intel"): + default_compiler = "intel-oneapi-compilers-classic" + elif self.spec.satisfies("compiler=oneapi"): + default_compiler = "intel-oneapi-compilers" + return { "software": { "packages": { - "default-compiler": {"pkg_spec": self.spec.variants["compiler"][0]}, + "default-compiler": {"pkg_spec": default_compiler}, "default-mpi": {"pkg_spec": "mvapich2"}, "compiler-gcc": {"pkg_spec": "gcc"}, "compiler-intel": {"pkg_spec": "intel"}, diff --git a/systems/llnl-elcapitan/system.py b/systems/llnl-elcapitan/system.py index a17ad81d5..e30243e82 100644 --- a/systems/llnl-elcapitan/system.py +++ b/systems/llnl-elcapitan/system.py @@ -7,7 +7,13 @@ from benchpark.directives import variant, maintainers from benchpark.paths import hardware_descriptions from benchpark.rocmsystem import ROCmSystem -from benchpark.system import System, JobQueue +from benchpark.system import ( + System, + JobQueue, + compiler_def, + compiler_section_for, + merge_dicts, +) from benchpark.openmpsystem import OpenMPCPUOnlySystem from packaging.version import Version @@ -202,7 +208,7 @@ def __init__(self, spec): def compute_packages_section(self): selections = { "packages": { - "all": {"require": "target=x86_64:"}, + "all": {"require": [{"spec": "target=x86_64:"}]}, "tar": {"externals": [{"spec": "tar@1.30", "prefix": "/usr"}]}, "coreutils": { "externals": [{"spec": "coreutils@8.30", "prefix": "/usr"}] @@ -345,53 +351,40 @@ def compute_packages_section(self): } } - selections["packages"] |= self.compiler_weighting_cfg()["packages"] - return selections def compiler_weighting_cfg(self): compiler = self.spec.variants["compiler"][0] if compiler == "cce": - return {"packages": {"all": {"require": [{"one_of": ["%cce", "%gcc"]}]}}} + prefs = {"one_of": ["%cce", "%gcc"], "when": "%c"} + return {"packages": {"all": {"require": [prefs]}}} elif compiler == "gcc": return {"packages": {}} elif compiler == "rocmcc": - return {"packages": {"all": {"require": [{"one_of": ["%rocmcc", "%gcc"]}]}}} + prefs = {"one_of": ["%rocmcc", "%gcc"], "when": "%c"} + return {"packages": {"all": {"require": [prefs]}}} else: raise ValueError(f"Unexpected value for compiler: {compiler}") def compute_compilers_section(self): - selections = { - "compilers": [ - { - "compiler": { - "spec": "gcc@12.2.0", - "paths": { - "cc": "/opt/cray/pe/gcc/12.2.0/bin/gcc", - "cxx": "/opt/cray/pe/gcc/12.2.0/bin/g++", - "f77": "/opt/cray/pe/gcc/12.2.0/bin/gfortran", - "fc": "/opt/cray/pe/gcc/12.2.0/bin/gfortran", - }, - "flags": {}, - "operating_system": "rhel8", - "target": "x86_64", - "modules": [], - "environment": {}, - "extra_rpaths": [], - } - } - ] - } + cfg = compiler_section_for( + "gcc", + [ + compiler_def( + "gcc@12.2.0 languages=c,c++,fortran", + "/opt/cray/pe/gcc/12.2.0/", + {"c": "gcc", "cxx": "g++", "fortran": "gfortran"}, + ) + ], + ) + if self.spec.satisfies("compiler=cce") or self.spec.satisfies( "compiler=rocmcc" ): - selections["compilers"] += self.rocm_cce_compiler_cfg()["compilers"] - - # Note: this is always included for some low-level dependencies - # that shouldn't build with %cce + cfg = merge_dicts(cfg, self.rocm_cce_compiler_cfg()) - return selections + return merge_dicts(cfg, self.compiler_weighting_cfg()) def mpi_config(self): gtl = self.spec.variants["gtl"][0] @@ -646,15 +639,6 @@ def rocm_config(self): ], "buildable": False, }, - "llvm-amdgpu": { - "externals": [ - { - "spec": f"llvm-amdgpu@{self.rocm_version}", - "prefix": f"/opt/rocm-{self.rocm_version}/llvm", - } - ], - "buildable": False, - }, "rocblas": { "externals": [ { @@ -683,71 +667,50 @@ def rocm_cce_compiler_cfg(self): f"/opt/cray/pe/cce/{self.cce_version}/cce/x86_64/lib", ] # Avoid libunwind.so.1 error on tioga - if self.spec.variants["cluster"][0] == "tioga": + if self.spec.variants["cluster"][0] in ["tioga", "tuolumne"]: rpaths.append(f"/opt/cray/pe/cce/{self.cce_version}/cce-clang/x86_64/lib/") - if self.spec.satisfies("compiler=rocmcc"): - return { - "compilers": [ - { - "compiler": { - "spec": f"rocmcc@{self.rocm_version}", - "paths": { - "cc": f"/opt/rocm-{self.rocm_version}/bin/amdclang", - "cxx": f"/opt/rocm-{self.rocm_version}/bin/amdclang++", - "f77": f"/opt/rocm-{self.rocm_version}/bin/amdflang", - "fc": f"/opt/rocm-{self.rocm_version}/bin/amdflang", - }, - "flags": {"cflags": "-g -O2", "cxxflags": "-g -O2"}, - "operating_system": "rhel8", - "target": "x86_64", - "modules": [f"cce/{self.cce_version}"], - "environment": { - "set": {"RFE_811452_DISABLE": "1"}, - "append_path": { - "LD_LIBRARY_PATH": "/opt/cray/pe/gcc-libs" - }, - "prepend_path": { - "LD_LIBRARY_PATH": f"/opt/cray/pe/cce/{self.cce_version}/cce/x86_64/lib:/opt/cray/pe/pmi/{self.pmi_version}/lib:/opt/cray/pe/pals/{self.pals_version}/lib", - "LIBRARY_PATH": f"/opt/rocm-{self.rocm_version}/lib", - }, - }, - "extra_rpaths": rpaths, - } - } - ] - } - else: - return { - "compilers": [ - { - "compiler": { - "spec": f"cce@{self.cce_version}-rocm{self.rocm_version}", - "paths": { - "cc": f"/opt/cray/pe/cce/{self.cce_version}/bin/craycc", - "cxx": f"/opt/cray/pe/cce/{self.cce_version}/bin/crayCC", - "f77": f"/opt/cray/pe/cce/{self.cce_version}/bin/crayftn", - "fc": f"/opt/cray/pe/cce/{self.cce_version}/bin/crayftn", - }, - "flags": { - "cflags": "-g -O2", - "cxxflags": "-g -O2 -std=c++14", - "fflags": "-g -O2 -hnopattern", - "ldflags": "-ldl", - }, - "operating_system": "rhel8", - "target": "x86_64", - "modules": [f"cce/{self.cce_version}"], - "environment": { - "prepend_path": { - "LD_LIBRARY_PATH": f"/opt/cray/pe/cce/{self.cce_version}/cce/x86_64/lib:/opt/rocm-{self.rocm_version}/lib:/opt/cray/pe/pmi/{self.pmi_version}/lib:/opt/cray/pe/pals/{self.pals_version}/lib" - } - }, - "extra_rpaths": rpaths, - } + cfgs = [] + # Always need an instance of llvm-gpu as an external. Sometimes as a compiler + # and sometimes just for ROCm support + rocmcc_entry = compiler_def( + f"llvm-amdgpu@{self.rocm_version}", + f"/opt/rocm-{self.rocm_version}/", + {"c": "amdclang", "cxx": "amdclang++", "fortran": "amdflang"}, + modules=[f"cce/{self.cce_version}"], + flags={"cflags": "-g -O2", "cxxflags": "-g -O2"}, + extra_rpaths=list(rpaths), + env={ + "set": {"RFE_811452_DISABLE": "1"}, + "append_path": {"LD_LIBRARY_PATH": "/opt/cray/pe/gcc-libs"}, + "prepend_path": { + "LD_LIBRARY_PATH": f"/opt/cray/pe/cce/{self.cce_version}/cce/x86_64/lib:/opt/cray/pe/pmi/{self.pmi_version}/lib:/opt/cray/pe/pals/{self.pals_version}/lib", + "LIBRARY_PATH": f"/opt/rocm-{self.rocm_version}/lib", + }, + }, + ) + cfgs.append(compiler_section_for("llvm-amdgpu", [rocmcc_entry])) + if self.spec.satisfies("compiler=cce"): + cce_entry = compiler_def( + f"cce@{self.cce_version}-rocm{self.rocm_version}", + f"/opt/cray/pe/cce/{self.cce_version}/", + {"c": "craycc", "cxx": "crayCC", "fortran": "crayftn"}, + modules=[f"cce/{self.cce_version}"], + extra_rpaths=list(rpaths), + env={ + "prepend_path": { + "LD_LIBRARY_PATH": f"/opt/cray/pe/cce/{self.cce_version}/cce/x86_64/lib:/opt/rocm-{self.rocm_version}/lib:/opt/cray/pe/pmi/{self.pmi_version}/lib:/opt/cray/pe/pals/{self.pals_version}/lib" } - ] - } + }, + flags={ + "cflags": "-g -O2", + "cxxflags": "-g -O2 -std=c++14", + "fflags": "-g -O2 -hnopattern", + "ldflags": "-ldl", + }, + ) + cfgs.append(compiler_section_for("cce", [cce_entry])) + return merge_dicts(*cfgs) def system_specific_variables(self): opts = super().system_specific_variables() @@ -786,7 +749,7 @@ def compute_software_section(self): return { "software": { "packages": { - "default-compiler": {"pkg_spec": default_compiler}, + "default-compiler": {"pkg_spec": "gcc"}, "default-mpi": {"pkg_spec": "cray-mpich"}, "compiler-rocm": {"pkg_spec": "cce"}, "compiler-amdclang": {"pkg_spec": "clang"}, diff --git a/systems/llnl-matrix/system.py b/systems/llnl-matrix/system.py index 2dd8eeeb5..9e9fe19ed 100644 --- a/systems/llnl-matrix/system.py +++ b/systems/llnl-matrix/system.py @@ -7,7 +7,13 @@ from benchpark.directives import variant, maintainers from benchpark.cudasystem import CudaSystem from benchpark.paths import hardware_descriptions -from benchpark.system import System, JobQueue +from benchpark.system import ( + System, + JobQueue, + compiler_def, + compiler_section_for, + merge_dicts, +) from benchpark.openmpsystem import OpenMPCPUOnlySystem from packaging.version import Version @@ -213,111 +219,55 @@ def compute_packages_section(self): } } - selections["packages"] |= self.compiler_weighting_cfg()["packages"] - selections["packages"] |= self.cuda_config(self.spec.variants["cuda"][0])[ "packages" ] return selections - def compiler_weighting_cfg(self): - compiler = self.spec.variants["compiler"][0] - - if compiler == "oneapi": - return {"packages": {"all": {"require": [{"one_of": ["%oneapi", "%gcc"]}]}}} - else: - return {"packages": {}} - def compute_compilers_section(self): - selections = {} + gcc_cfg = compiler_section_for( + "gcc", + [ + compiler_def( + "gcc@12.1.1 languages:=c,c++,fortran", + "/usr/tce/packages/gcc/gcc-12.1.1/", + {"c": "gcc", "cxx": "g++", "fortran": "gfortran"}, + ) + ], + ) if self.spec.satisfies("compiler=gcc"): - selections = { - "compilers": [ - { - "compiler": { - "spec": "gcc@12.1.1", - "paths": { - "cc": "/usr/tce/packages/gcc/gcc-12.1.1/bin/gcc", - "cxx": "/usr/tce/packages/gcc/gcc-12.1.1/bin/g++", - "f77": "/usr/tce/packages/gcc/gcc-12.1.1/bin/gfortran", - "fc": "/usr/tce/packages/gcc/gcc-12.1.1/bin/gfortran", - }, - "flags": {}, - "operating_system": "rhel8", - "target": "x86_64", - "modules": [], - "environment": {}, - "extra_rpaths": [], - } - } - ] - } + cfg = gcc_cfg elif self.spec.satisfies("compiler=intel"): - selections = { - "compilers": [ - { - "compiler": { - "spec": "intel@2021.6.0-classic", - "paths": { - "cc": "/usr/tce/packages/intel-classic/intel-classic-2021.6.0/bin/icc", - "cxx": "/usr/tce/packages/intel-classic/intel-classic-2021.6.0/bin/icpc", - "f77": "/usr/tce/packages/intel-classic/intel-classic-2021.6.0/bin/ifort", - "fc": "/usr/tce/packages/intel-classic/intel-classic-2021.6.0/bin/ifort", - }, - "flags": {}, - "operating_system": "rhel8", - "target": "x86_64", - "modules": [], - "environment": {}, - "extra_rpaths": [], - } - } - ] - } + cfg = compiler_section_for( + "intel-oneapi-compilers-classic", + [ + compiler_def( + "intel-oneapi-compilers-classic@2021.6.0 ~envmods", + "/usr/tce/packages/intel-classic/intel-classic-2021.6.0/", + {"c": "icc", "cxx": "icpc", "fortran": "ifort"}, + ) + ], + ) elif self.spec.satisfies("compiler=oneapi"): - selections = { - "compilers": [ - { - "compiler": { - "spec": "gcc@12.1.1", - "paths": { - "cc": "/usr/tce/packages/gcc/gcc-12.1.1/bin/gcc", - "cxx": "/usr/tce/packages/gcc/gcc-12.1.1/bin/g++", - "f77": "/usr/tce/packages/gcc/gcc-12.1.1/bin/gfortran", - "fc": "/usr/tce/packages/gcc/gcc-12.1.1/bin/gfortran", - }, - "flags": {}, - "operating_system": "rhel8", - "target": "x86_64", - "modules": [], - "environment": {}, - "extra_rpaths": [], - } - }, - { - "compiler": { - "spec": "oneapi@2023.2.1", - "paths": { - "cc": "/usr/tce/packages/intel/intel-2023.2.1/compiler/2023.2.1/linux/bin/icx", - "cxx": "/usr/tce/packages/intel/intel-2023.2.1/compiler/2023.2.1/linux/bin/icpx", - "f77": "/usr/tce/packages/intel/intel-2023.2.1/compiler/2023.2.1/linux/bin/ifx", - "fc": "/usr/tce/packages/intel/intel-2023.2.1/compiler/2023.2.1/linux/bin/ifx", - }, - "flags": {}, - "operating_system": "rhel8", - "target": "x86_64", - "modules": [ - f"cuda/{self.cuda_version}", - ], - "environment": {}, - "extra_rpaths": [], - } - }, - ] - } + oneapi_cfg = compiler_section_for( + "intel-oneapi-compilers", + [ + compiler_def( + "intel-oneapi-compilers@2023.2.1 ~envmods", + "/usr/tce/packages/intel/intel-2023.2.1/compiler/2023.2.1/linux/", + {"c": "icx", "cxx": "icpx", "fortran": "ifx"}, + modules=[ + f"cuda/{self.cuda_version}", + ], + ) + ], + ) + prefs = {"one_of": ["%oneapi", "%gcc"], "when": "%c"} + weighting_cfg = {"packages": {"all": {"require": [prefs]}}} + cfg = merge_dicts(gcc_cfg, oneapi_cfg, weighting_cfg) - return selections + return cfg def cuda_config(self, cuda_version): return { @@ -391,10 +341,16 @@ def cuda_config(self, cuda_version): } def compute_software_section(self): + default_compiler = "gcc" + if self.spec.satisfies("compiler=intel"): + default_compiler = "intel-oneapi-compilers-classic" + elif self.spec.satisfies("compiler=oneapi"): + default_compiler = "intel-oneapi-compilers" + return { "software": { "packages": { - "default-compiler": {"pkg_spec": self.spec.variants["compiler"][0]}, + "default-compiler": {"pkg_spec": default_compiler}, "default-mpi": {"pkg_spec": "mvapich2"}, "compiler-gcc": {"pkg_spec": "gcc"}, "compiler-intel": {"pkg_spec": "intel"}, diff --git a/systems/llnl-sierra/system.py b/systems/llnl-sierra/system.py index cc035e22a..406dcc685 100644 --- a/systems/llnl-sierra/system.py +++ b/systems/llnl-sierra/system.py @@ -6,7 +6,14 @@ from benchpark.directives import variant, maintainers from benchpark.cudasystem import CudaSystem from benchpark.paths import hardware_descriptions -from benchpark.system import System, JobQueue +from benchpark.system import ( + System, + JobQueue, + compiler_def, + compiler_section_for, + merge_dicts, + hybrid_compiler_requirements, +) from benchpark.openmpsystem import OpenMPCPUOnlySystem from packaging.version import Version @@ -437,150 +444,117 @@ def compute_packages_section(self): def compute_compilers_section(self): # values=("clang-ibm", "xl", "xl-gcc", "clang"), + compiler = self.spec.variants["compiler"][0] # values=("11-8-0", "10-1-243"), - compiler_cfgs = { - ( - "clang-ibm", - "11-8-0", - ): [ - { - "compiler": { - "spec": "clang@16.0.6-ibm-cuda-11.8.0-gcc-11.2.1", - "paths": { - "cc": "/usr/tce/packages/clang/clang-ibm-16.0.6-cuda-11.8.0-gcc-11.2.1/bin/clang", - "cxx": "/usr/tce/packages/clang/clang-ibm-16.0.6-cuda-11.8.0-gcc-11.2.1/bin/clang++", - "f77": "/usr/tce/packages/xl/xl-2023.06.28-cuda-11.8.0-gcc-11.2.1/bin/xlf_r", - "fc": "/usr/tce/packages/xl/xl-2023.06.28-cuda-11.8.0-gcc-11.2.1/bin/xlf_r", - }, - "flags": { - "cflags": "-g -O2", - "cxxflags": "-g -O2", - "fflags": "-g -O2", - }, - "operating_system": "rhel7", - "target": "ppc64le", - "modules": [ - "cuda/11.8.0", - "clang/ibm-16.0.6-cuda-11.8.0-gcc-11.2.1", - ], - "environment": {}, - "extra_rpaths": [], - } - } - ], - ( - "xl-gcc", - "11-8-0", - ): [ - { - "compiler": { - "spec": "xl@16.1.1-2023.06.28-cuda-11.8.0-gcc-11.2.1", - "paths": { - "cc": "/usr/tce/packages/xl/xl-2023.06.28-cuda-11.8.0-gcc-11.2.1/bin/xlc", - "cxx": "/usr/tce/packages/xl/xl-2023.06.28-cuda-11.8.0-gcc-11.2.1/bin/xlC", - "f77": "/usr/tce/packages/xl/xl-2023.06.28-cuda-11.8.0-gcc-11.2.1/bin/xlf", - "fc": "/usr/tce/packages/xl/xl-2023.06.28-cuda-11.8.0-gcc-11.2.1/bin/xlf", - }, - "flags": { - "cflags": "-g -O2", - "cxxflags": "-g -O2", - "fflags": "-g -O2", - }, - "operating_system": "rhel7", - "target": "ppc64le", - "modules": [ - "cuda/11.8.0", - "xl/2023.06.28-cuda-11.8.0-gcc-11.2.1", - ], - "environment": {}, - "extra_rpaths": [], - } - } - ], - ( + cuda_ver = self.spec.variants["cuda"][0].replace(".", "-") + + cuda_module_map = { + "11-8-0": ["cuda/11.8.0"], + "10-1-243": ["cuda/10.1.243"], + } + cuda_modules = cuda_module_map[cuda_ver] + + flags = { + "cflags": "-g -O2", + "cxxflags": "-g -O2", + "fflags": "-g -O2", + } + + if (compiler, cuda_ver) == ("clang-ibm", "11-8-0"): + cfg1 = compiler_section_for( + "llvm", + [ + compiler_def( + "llvm@16.0.6", + "/usr/tce/packages/clang/clang-ibm-16.0.6-cuda-11.8.0-gcc-11.2.1/", + {"c": "clang", "cxx": "clang++"}, + flags=flags, + modules=cuda_modules + + ["clang/ibm-16.0.6-cuda-11.8.0-gcc-11.2.1"], + ) + ], + ) + cfg2 = compiler_section_for( "xl", - "10-1-243", - ): [ - { - "compiler": { - "spec": "xl@16.1.1-2022.08.19-cuda10.1.243", - "paths": { - "cc": "/usr/tce/packages/xl/xl-2022.08.19/bin/xlc", - "cxx": "/usr/tce/packages/xl/xl-2022.08.19/bin/xlC", - "f77": "/usr/tce/packages/xl/xl-2022.08.19/bin/xlf", - "fc": "/usr/tce/packages/xl/xl-2022.08.19/bin/xlf", - }, - "flags": { - "cflags": "-g -O2", - "cxxflags": "-g -O2", - "fflags": "-g -O2", - }, - "operating_system": "rhel7", - "target": "ppc64le", - "modules": ["cuda/10.1.243", "xl/2022.08.19"], - "environment": {}, - "extra_rpaths": [], - } - } - ], - ( + [ + compiler_def( + "xl@2023.06.28", + "/usr/tce/packages/xl/xl-2023.06.28-cuda-11.8.0-gcc-11.2.1/", + {"c": "xlc", "cxx": "xlC", "fortran": "xlf"}, + flags=flags, + ) + ], + ) + cfg = merge_dicts(cfg1, cfg2, hybrid_compiler_requirements("llvm", "xl")) + elif (compiler, cuda_ver) == ("xl-gcc", "11-8-0"): + cfg = compiler_section_for( "xl", - "11-8-0", - ): [ - { - "compiler": { - "spec": "xl@16.1.1-2022.08.19-cuda11.8.0", - "paths": { - "cc": "/usr/tce/packages/xl/xl-2022.08.19-cuda-11.8.0/bin/xlc", - "cxx": "/usr/tce/packages/xl/xl-2022.08.19-cuda-11.8.0/bin/xlC", - "f77": "/usr/tce/packages/xl/xl-2022.08.19-cuda-11.8.0/bin/xlf", - "fc": "/usr/tce/packages/xl/xl-2022.08.19-cuda-11.8.0/bin/xlf", - }, - "flags": { - "cflags": "-g -O2", - "cxxflags": "-g -O2", - "fflags": "-g -O2", - }, - "operating_system": "rhel7", - "target": "ppc64le", - "modules": ["cuda/11.8.0", "xl/2022.08.19-cuda-11.8.0"], - "environment": {}, - "extra_rpaths": [], - } - } - ], - ( - "clang", - "11-8-0", - ): [ - { - "compiler": { - "spec": "clang@16.0.6-cuda11.8.0", - "paths": { - "cc": "/usr/tce/packages/clang/clang-16.0.6-cuda-11.8.0-gcc-11.2.1/bin/clang", - "cxx": "/usr/tce/packages/clang/clang-16.0.6-cuda-11.8.0-gcc-11.2.1/bin/clang++", - "f77": "/usr/tce/packages/gcc/gcc-11.2.1/bin/gfortran", - "fc": "/usr/tce/packages/gcc/gcc-11.2.1/bin/gfortran", - }, - "flags": { - "cflags": "-g -O2", - "cxxflags": "-g -O2", - "fflags": "", - }, - "operating_system": "rhel7", - "target": "ppc64le", - "modules": [], - "environment": {}, - "extra_rpaths": [], - } - } - ], - } + [ + compiler_def( + "xl@2023.06.28", + "/usr/tce/packages/xl/xl-2023.06.28-cuda-11.8.0-gcc-11.2.1/", + {"c": "xlc", "cxx": "xlC", "fortran": "xlf"}, + flags=flags, + modules=cuda_modules + ["xl/2023.06.28-cuda-11.8.0-gcc-11.2.1"], + ) + ], + ) + elif (compiler, cuda_ver) == ("xl", "10-1-243"): + cfg = compiler_section_for( + "xl", + [ + compiler_def( + "xl@16.1.1-2022.08.19-cuda10.1.243", + "/usr/tce/packages/xl/xl-2022.08.19/", + {"c": "xlc", "cxx": "xlC", "fortran": "xlf"}, + flags=flags, + modules=cuda_modules + ["xl/2022.08.19"], + ) + ], + ) + elif (compiler, cuda_ver) == ("xl", "11-8-0"): + cfg = compiler_section_for( + "xl", + [ + compiler_def( + "xl@16.1.1-2022.08.19-cuda11.8.0", + "/usr/tce/packages/xl/xl-2022.08.19-cuda-11.8.0/", + {"c": "xlc", "cxx": "xlC", "fortran": "xlf"}, + flags=flags, + modules=cuda_modules + ["xl/2022.08.19-cuda-11.8.0"], + ) + ], + ) + elif (compiler, cuda_ver) == ("clang", "11-8-0"): + custom_flags = { + "cflags": "-g -O2", + "cxxflags": "-g -O2", + } + cfg1 = compiler_section_for( + "llvm", + [ + compiler_def( + "llvm@16.0.6", + "/usr/tce/packages/clang/clang-ibm-16.0.6-cuda-11.8.0-gcc-11.2.1/", + {"c": "clang", "cxx": "clang++"}, + flags=custom_flags, + ) + ], + ) + cfg2 = compiler_section_for( + "gcc", + [ + compiler_def( + "gcc@11.2.1 languages:=c,c++,fortran", + "/usr/tce/packages/gcc/gcc-11.2.1/", + {"c": "gcc", "cxx": "g++", "fortran": "gfortran"}, + flags=custom_flags, + ) + ], + ) + cfg = merge_dicts(cfg1, cfg2, hybrid_compiler_requirements("llvm", "gcc")) - compiler = self.spec.variants["compiler"][0] - cuda_ver = self.spec.variants["cuda"][0].replace(".", "-") - cfg = compiler_cfgs[(compiler, cuda_ver)] - return {"compilers": cfg} + return cfg def compute_software_section(self): """This is somewhat vestigial: for the Tioga config that is committed diff --git a/systems/riken-fugaku/system.py b/systems/riken-fugaku/system.py index 34a50f2ac..51f06078e 100644 --- a/systems/riken-fugaku/system.py +++ b/systems/riken-fugaku/system.py @@ -5,7 +5,7 @@ from benchpark.directives import variant, maintainers -from benchpark.system import System +from benchpark.system import System, compiler_def, compiler_section_for from benchpark.openmpsystem import OpenMPCPUOnlySystem from benchpark.paths import hardware_descriptions @@ -552,54 +552,40 @@ def compute_packages_section(self): return selections def compute_compilers_section(self): - compiler = self.spec.variants["compiler"][0] - selections = {"compilers": []} - if compiler == "clang": - selections["compilers"] += [ - { - "compiler": { - "spec": "clang@17.0.2", - "paths": { - "cc": "/vol0004/apps/oss/llvm-v17.0.2/compute_node/bin/clang", - "cxx": "/vol0004/apps/oss/llvm-v17.0.2/compute_node/bin/clang++", - "f77": "/vol0004/apps/oss/llvm-v17.0.2/compute_node/bin/flang", - "fc": "/vol0004/apps/oss/llvm-v17.0.2/compute_node/bin/flang", - }, - # Uncomment and populate these if needed - # "flags": { - # "cflags": {"-msve-vector-bits=scalable"}, - # "cxxflags": {"-msve-vector-bits=scalable"}, - # "fflags": {"-msve-vector-bits=scalable"}, - # "ldflags": {"-fuse-ld=lld"}, - # }, - "environment": { + # maybe_flags = { + # "cflags": {"-msve-vector-bits=scalable"}, + # "cxxflags": {"-msve-vector-bits=scalable"}, + # "fflags": {"-msve-vector-bits=scalable"}, + # "ldflags": {"-fuse-ld=lld"}, + # } + cfg = compiler_section_for( + "llvm", + [ + compiler_def( + "llvm@17.0.2", + "/vol0004/apps/oss/llvm-v17.0.2/compute_node/", + {"c": "clang", "cxx": "clang++", "fortran": "flang"}, + env={ "append_path": { "LD_LIBRARY_PATH": "/opt/FJSVxtclanga/tcsds-1.2.38/lib64" } }, - "operating_system": "rhel8", - "target": "aarch64", - "modules": [], - "extra_rpaths": [], - } - } - ] + # flags = maybe_flags + ) + ], + ) elif compiler == "gcc": - selections["compilers"] += [ - { - "compiler": { - "spec": "gcc@13.2.0", - "paths": { - "cc": "/vol0004/apps/oss/spack-v0.21/opt/spack/linux-rhel8-a64fx/gcc-8.5.0/gcc-13.2.0-abihbe7ykvpedq54j6blfvfppy7ojbmd/bin/gcc", - "cxx": "/vol0004/apps/oss/spack-v0.21/opt/spack/linux-rhel8-a64fx/gcc-8.5.0/gcc-13.2.0-abihbe7ykvpedq54j6blfvfppy7ojbmd/bin/g++", - "f77": "/vol0004/apps/oss/spack-v0.21/opt/spack/linux-rhel8-a64fx/gcc-8.5.0/gcc-13.2.0-abihbe7ykvpedq54j6blfvfppy7ojbmd/bin/gfortran", - "fc": "/vol0004/apps/oss/spack-v0.21/opt/spack/linux-rhel8-a64fx/gcc-8.5.0/gcc-13.2.0-abihbe7ykvpedq54j6blfvfppy7ojbmd/bin/gfortran", - }, - "flags": {"ldflags": {"-lelf -ldl"}}, - "environment": { + cfg = compiler_section_for( + "gcc", + [ + compiler_def( + "gcc@13.2.0 languages:=c,c++,fortran", + "/vol0004/apps/oss/spack-v0.21/opt/spack/linux-rhel8-a64fx/gcc-8.5.0/gcc-13.2.0-abihbe7ykvpedq54j6blfvfppy7ojbmd/", + {"c": "gcc", "cxx": "g++", "fortran": "gfortran"}, + env={ "set": { "OPAL_PREFIX": "/vol0004/apps/oss/mpigcc/fjmpi-gcc12" }, @@ -607,29 +593,19 @@ def compute_compilers_section(self): "LD_LIBRARY_PATH": "/opt/FJSVxtclanga/tcsds-1.2.38/lib64" }, }, - "operating_system": "rhel8", - "target": "aarch64", - "modules": [], - "extra_rpaths": [], - } - } - ] + flags={"ldflags": {"-lelf -ldl"}}, + ) + ], + ) elif compiler == "fj": - selections["compilers"] += [ - { - "compiler": { - "spec": "fj@4.10.0", - "modules": [], - "paths": { - "cc": "/opt/FJSVxtclanga/tcsds-1.2.38/bin/fcc", - "cxx": "/opt/FJSVxtclanga/tcsds-1.2.38/bin/FCC", - "f77": "/opt/FJSVxtclanga/tcsds-1.2.38/bin/frt", - "fc": "/opt/FJSVxtclanga/tcsds-1.2.38/bin/frt", - }, - "flags": {}, - "operating_system": "rhel8", - "target": "aarch64", - "environment": { + cfg = compiler_section_for( + "fj", + [ + compiler_def( + "fj@4.10.0", + "/opt/FJSVxtclanga/tcsds-1.2.38/", + {"c": "fcc", "cxx": "FCC", "fortran": "frt"}, + env={ "set": { "fcc_ENV": "-Nclang", "FCC_ENV": "-Nclang", @@ -639,12 +615,11 @@ def compute_compilers_section(self): "LD_LIBRARY_PATH": "/opt/FJSVxtclanga/tcsds-1.2.38/lib64", }, }, - "extra_rpaths": [], - } - } - ] + ) + ], + ) - return selections + return cfg def system_specific_variables(self): return { From 65b0a8f900e73ee62725fd0ebef51699cb52088e Mon Sep 17 00:00:00 2001 From: Michael McKinsey Date: Fri, 17 Oct 2025 09:34:50 -0700 Subject: [PATCH 52/53] Fix default compiler --- systems/llnl-elcapitan/system.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/systems/llnl-elcapitan/system.py b/systems/llnl-elcapitan/system.py index e30243e82..72c569e74 100644 --- a/systems/llnl-elcapitan/system.py +++ b/systems/llnl-elcapitan/system.py @@ -749,7 +749,7 @@ def compute_software_section(self): return { "software": { "packages": { - "default-compiler": {"pkg_spec": "gcc"}, + "default-compiler": {"pkg_spec": default_compiler}, "default-mpi": {"pkg_spec": "cray-mpich"}, "compiler-rocm": {"pkg_spec": "cce"}, "compiler-amdclang": {"pkg_spec": "clang"}, From 2aea1b6f085b13c3c1443245da37056f8114bf15 Mon Sep 17 00:00:00 2001 From: Michael McKinsey Date: Fri, 17 Oct 2025 09:35:39 -0700 Subject: [PATCH 53/53] rm file --- .gitlab/tests/non_shared.yml | 31 ------------------------------- 1 file changed, 31 deletions(-) delete mode 100644 .gitlab/tests/non_shared.yml diff --git a/.gitlab/tests/non_shared.yml b/.gitlab/tests/non_shared.yml deleted file mode 100644 index abdb92348..000000000 --- a/.gitlab/tests/non_shared.yml +++ /dev/null @@ -1,31 +0,0 @@ -# Clusters tested here are unable to utilize shared allocation strategy. -# For Slurm-only clusters, this is because we need to double srun, e.g. srun to get into the -# shared allocation, and then srun during the test in "ramble on", which is not possible. -# For these clusters we run separate allocations, which is significantly slower overall. -include: - - local: .gitlab/utils/status.yml - - local: .gitlab/utils/machine_checks.yml - - local: .gitlab/utils/rules.yml -workflow: - auto_cancel: - on_new_commit: conservative -.test_clusters: &test_clusters - extends: .on_host_template - needs: [lassen-up-check] - parallel: - matrix: - - HOST: lassen - ARCHCONFIG: llnl-sierra - SCHEDULER_PARAMETERS: -nnodes 1 -W 40 -q pci - BENCHMARK: [amg2023] - VARIANT: [+cuda, +openmp] -run_tests_nonshared: - resource_group: $HOST - stage: test - tags: [$HOST, batch] - <<: *test_clusters - before_script: - - !reference [.report_status, before_script] - script: [./.gitlab/utils/run-experiment.sh] - after_script: - - !reference [.report_status, after_script]