summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkwryankrattiger <80296582+kwryankrattiger@users.noreply.github.com>2023-04-06 17:21:11 -0500
committerGitHub <noreply@github.com>2023-04-06 15:21:11 -0700
commit4ace1e660a3ab60a2e510308d700e251126f8c0e (patch)
treeb06d8fb7936c4dc5441473df0eecc6f9b29e3a00
parent12eff8daad4d7df42a82446891469d33d3d17379 (diff)
downloadspack-4ace1e660a3ab60a2e510308d700e251126f8c0e.tar.gz
spack-4ace1e660a3ab60a2e510308d700e251126f8c0e.tar.bz2
spack-4ace1e660a3ab60a2e510308d700e251126f8c0e.tar.xz
spack-4ace1e660a3ab60a2e510308d700e251126f8c0e.zip
Ecp hdf5 vol (#35195)
* ECP-SDK: enable hdf5 VOL adapters - When +hdf5, enable VOL adapters suitable for the SDK. - Each VOL package must prepend to the HDF5_PLUGIN_PATH. - hdf5: 1.13.3 will break existing VOL packages, constrain VOLs related to SDK and add note to keep 1.13.2 available. - hdf5-vol-async: - Do not set HDF5_VOL_CONNECTOR, consumers must opt-in. - Enforce DAG constraints on MPI to require threaded version. - Depend on an explicit version of argbots to relax concretization issues in other spack environments. - paraview: fix compiler flag usage for the 110 ABI (followup to #33617). * ECP Data and ViS: Add constraits for HDF5 VOLS * CI: HDF5 1.14 builds without VisIt * hdf5-vol-async: Update docs string --------- Co-authored-by: Stephen McDowell <stephen.mcdowell@kitware.com>
-rw-r--r--share/spack/gitlab/cloud_pipelines/stacks/data-vis-sdk/spack.yaml1
-rw-r--r--var/spack/repos/builtin/packages/ecp-data-vis-sdk/package.py19
-rw-r--r--var/spack/repos/builtin/packages/hdf5-vol-async/package.py19
-rw-r--r--var/spack/repos/builtin/packages/hdf5-vol-cache/package.py4
-rw-r--r--var/spack/repos/builtin/packages/hdf5-vol-log/package.py6
-rw-r--r--var/spack/repos/builtin/packages/hdf5/package.py2
6 files changed, 43 insertions, 8 deletions
diff --git a/share/spack/gitlab/cloud_pipelines/stacks/data-vis-sdk/spack.yaml b/share/spack/gitlab/cloud_pipelines/stacks/data-vis-sdk/spack.yaml
index 452077c15b..af76f5a746 100644
--- a/share/spack/gitlab/cloud_pipelines/stacks/data-vis-sdk/spack.yaml
+++ b/share/spack/gitlab/cloud_pipelines/stacks/data-vis-sdk/spack.yaml
@@ -52,6 +52,7 @@ spack:
- matrix:
- [$sdk_base_spec]
- [$^paraview_specs]
+ - - ^hdf5@1.14 # Non-VisIt can build HDF5 1.14
# Test ParaView builds with differnt GL backends
- matrix:
- [$sdk_base_spec]
diff --git a/var/spack/repos/builtin/packages/ecp-data-vis-sdk/package.py b/var/spack/repos/builtin/packages/ecp-data-vis-sdk/package.py
index 47c42aeb7f..4706e85344 100644
--- a/var/spack/repos/builtin/packages/ecp-data-vis-sdk/package.py
+++ b/var/spack/repos/builtin/packages/ecp-data-vis-sdk/package.py
@@ -112,16 +112,31 @@ class EcpDataVisSdk(BundlePackage, CudaPackage, ROCmPackage):
dav_sdk_depends_on("faodel+shared+mpi network=libfabric", when="+faodel", propagate=["hdf5"])
+ # HDF5 1.14 is a soft requirement for the ECP Data and Vis SDK.
+ # When building with VisIt and CinemaSci in the same SDK environment there is a conflict
+ # in the build dependency of py-setuptools which prevents building a py-h5py that is
+ # compatible with 'hdf5@1.14:'. Until there is a version of VisIt with an updated VTK or Spack
+ # allows the concretization of multiple versions of the same build only dependency
+ # concretization with VisIt and Cinema variants will not allow building VOLs.
dav_sdk_depends_on("hdf5@1.12: +shared+mpi", when="+hdf5", propagate=["fortran"])
+
+ # HDF5 VOL Adapters require hdf5@1.14:
+
# hdf5-vfd-gds needs cuda@11.7.1 or later, only enable when 11.7.1+ available.
- depends_on("hdf5-vfd-gds@1.0.2:", when="+cuda+hdf5^cuda@11.7.1:")
+ depends_on("hdf5-vfd-gds@1.0.2:", when="+cuda+hdf5 ^cuda@11.7.1: ^hdf5@1.14:")
for cuda_arch in cuda_arch_variants:
depends_on(
"hdf5-vfd-gds@1.0.2: {0}".format(cuda_arch),
- when="+cuda+hdf5 {0} ^cuda@11.7.1:".format(cuda_arch),
+ when="+cuda+hdf5 {0} ^cuda@11.7.1: ^hdf5@1.14:".format(cuda_arch),
)
conflicts("~cuda", when="^hdf5-vfd-gds@1.0.2:")
conflicts("~hdf5", when="^hdf5-vfd-gds@1.0.2:")
+ conflicts("~hdf5", when="^hdf5-vol-async")
+ conflicts("~hdf5", when="^hdf5-vol-cache")
+ conflicts("~hdf5", when="^hdf5-vol-log")
+ depends_on("hdf5-vol-async", when="+hdf5 ^hdf5@1.14:")
+ depends_on("hdf5-vol-cache", when="+hdf5 ^hdf5@1.14:")
+ depends_on("hdf5-vol-log", when="+hdf5 ^hdf5@1.14:")
dav_sdk_depends_on("parallel-netcdf+shared", when="+pnetcdf", propagate=["fortran"])
diff --git a/var/spack/repos/builtin/packages/hdf5-vol-async/package.py b/var/spack/repos/builtin/packages/hdf5-vol-async/package.py
index 964bae79aa..0d4490b3b1 100644
--- a/var/spack/repos/builtin/packages/hdf5-vol-async/package.py
+++ b/var/spack/repos/builtin/packages/hdf5-vol-async/package.py
@@ -7,7 +7,14 @@ from spack.package import *
class Hdf5VolAsync(CMakePackage):
- """This package enables asynchronous IO in HDF5."""
+ """This package enables asynchronous IO in HDF5.
+
+ Usage: Set the HDF5_VOL_CONNECTOR environment variable to enable this adaptor, i.e.
+
+ $export HDF5_VOL_CONNECTOR="async under_vol=0;under_info={}"
+
+ ref. https://hdf5-vol-async.readthedocs.io/en/latest/gettingstarted.html#set-environmental-variables
+ """
homepage = "https://hdf5-vol-async.readthedocs.io"
git = "https://github.com/hpc-io/vol-async.git"
@@ -27,15 +34,17 @@ class Hdf5VolAsync(CMakePackage):
variant("memcpy", default=False, description="Enable buffer copy for dataset write")
depends_on("mpi")
- depends_on("argobots@main")
+ depends_on("argobots@1.1:")
depends_on("hdf5 +mpi +threadsafe")
depends_on("hdf5@1.13.0:1.13.2", when="@:1.3")
depends_on("hdf5@1.13.3:", when="@1.4:")
+ # Require MPI_THREAD_MULTIPLE.
+ depends_on("openmpi +thread_multiple", when="^openmpi")
+ depends_on("mvapich2 threads=multiple", when="^mvapich2")
+
def setup_run_environment(self, env):
- env.set("HDF5_PLUGIN_PATH", self.spec.prefix.lib)
- vol_connector = "async under_vol=0;under_info=[]"
- env.set("HDF5_VOL_CONNECTOR", vol_connector)
+ env.prepend_path("HDF5_PLUGIN_PATH", self.spec.prefix.lib)
env.set("MPICH_MAX_THREAD_SAFETY", "multiple")
def cmake_args(self):
diff --git a/var/spack/repos/builtin/packages/hdf5-vol-cache/package.py b/var/spack/repos/builtin/packages/hdf5-vol-cache/package.py
index 1010d540b1..39ff9d71ca 100644
--- a/var/spack/repos/builtin/packages/hdf5-vol-cache/package.py
+++ b/var/spack/repos/builtin/packages/hdf5-vol-cache/package.py
@@ -17,8 +17,12 @@ class Hdf5VolCache(CMakePackage):
version("v1.1", tag="v1.1")
version("v1.0", tag="v1.0")
+ depends_on("hdf5@1.13: +mpi +threadsafe")
depends_on("hdf5-vol-async")
+ def setup_run_environment(self, env):
+ env.prepend_path("HDF5_PLUGIN_PATH", self.spec.prefix.lib)
+
def cmake_args(self):
"""Populate cmake arguments for HDF5 VOL."""
args = [
diff --git a/var/spack/repos/builtin/packages/hdf5-vol-log/package.py b/var/spack/repos/builtin/packages/hdf5-vol-log/package.py
index cbf9d7804c..6a5216db51 100644
--- a/var/spack/repos/builtin/packages/hdf5-vol-log/package.py
+++ b/var/spack/repos/builtin/packages/hdf5-vol-log/package.py
@@ -22,12 +22,16 @@ class Hdf5VolLog(AutotoolsPackage):
version("1.2.0", tag="logvol.1.2.0")
version("1.1.0", tag="logvol.1.1.0")
- depends_on("hdf5@1.13.2:")
+ depends_on("hdf5@1.14.0:", when="@1.4.0:")
+ depends_on("hdf5@1.13.2", when="@:1.3.0")
depends_on("autoconf", type="build")
depends_on("automake", type="build")
depends_on("libtool", type="build")
depends_on("m4", type="build")
+ def setup_run_environment(self, env):
+ env.prepend_path("HDF5_PLUGIN_PATH", self.spec.prefix.lib)
+
def configure_args(self):
args = []
diff --git a/var/spack/repos/builtin/packages/hdf5/package.py b/var/spack/repos/builtin/packages/hdf5/package.py
index 7de1672306..7b948087c9 100644
--- a/var/spack/repos/builtin/packages/hdf5/package.py
+++ b/var/spack/repos/builtin/packages/hdf5/package.py
@@ -39,6 +39,8 @@ class Hdf5(CMakePackage):
version("develop-1.8", branch="hdf5_1_8")
# Odd versions are considered experimental releases
+ # Note: These are still required to build some VOL adapters, but even releases should be
+ # preferred.
version("1.13.3", sha256="83c7c06671f975cee6944b0b217f95005faa55f79ea5532cf4ac268989866af4")
version("1.13.2", sha256="01643fa5b37dba7be7c4db6bbf3c5d07adf5c1fa17dbfaaa632a279b1b2f06da")