diff --git a/src/skala_torch_api.F b/src/skala_torch_api.F index 151d81c228..5488b918d7 100644 --- a/src/skala_torch_api.F +++ b/src/skala_torch_api.F @@ -167,10 +167,19 @@ CONTAINS TYPE(torch_tensor_type) :: exc_density +#if defined (__HAS_IEEE_EXCEPTIONS) + LOGICAL, DIMENSION(5) :: ieee_halt + + CALL ieee_get_halting_mode(IEEE_ALL, ieee_halt) + CALL ieee_set_halting_mode(IEEE_ALL, .FALSE.) +#endif CALL torch_model_forward_mol_tensor(model%torch_model, "get_exc_density", inputs, exc_density) CALL torch_tensor_weighted_sum(exc_density, grid_weights, exc_tensor) CALL torch_tensor_release(exc_density) exc = torch_tensor_item_double(exc_tensor) +#if defined (__HAS_IEEE_EXCEPTIONS) + CALL ieee_set_halting_mode(IEEE_ALL, ieee_halt) +#endif END SUBROUTINE skala_torch_model_get_exc diff --git a/tools/spack/spack_repo/cp2k_dev/packages/gauxc/package.py b/tools/spack/spack_repo/cp2k_dev/packages/gauxc/package.py index 1e65f7f523..094a7b9cfd 100644 --- a/tools/spack/spack_repo/cp2k_dev/packages/gauxc/package.py +++ b/tools/spack/spack_repo/cp2k_dev/packages/gauxc/package.py @@ -31,6 +31,32 @@ class Gauxc(CMakePackage, CudaPackage): ) version("1.1", sha256="17de077fb23e44d03b0ed14dcd8117c01e5b3431fbefa2352d751639ada7f91c") + variant("c", default=True, description="Build with C API support") + variant("fortran", default=True, description="Build with Fortran support") + variant("host", default=True, description="Build with host integrator") + variant("cuda", default=False, description="Build with CUDA support") + variant("hip", default=False, description="Build with HIP support") + variant("mpi", default=False, description="Build with MPI support") + variant("openmp", default=True, description="Build with OpenMP support") + variant("tests", default=False, description="Build with unit tests") + variant("gau2grid", default=True, description="Build with Gau2Grid collocation") + variant("hdf5", default=True, description="Build with HDF5 support") + variant("onedft", default=False, description="Build with ONEDFT functional") + variant("skala", default=False, description="Build with Skala support") + variant("fast_rsqrt", default=False, description="Build with fast RSQRT support") + variant("blas_prefer_ilp64", default=False, description="Prefer ILP64 for host BLAS") + variant("link_cuda_static", default=False, description="Link GauXC with static CUDA libs") + variant("magma", default=False, description="Build with MAGMA linear algebra support") + variant("nccl", default=False, description="Build with NCCL collectives") + variant("cutlass", default=False, description="Build with CUTLASS linear algebra support") + variant("pic", default=True, description="Build position independent code") + + conflicts("+skala", when="~onedft", msg="Skala requires ONEDFT support") + conflicts("+magma", when="~cuda ~hip", msg="MAGMA requires CUDA or HIP") + conflicts("+nccl", when="~cuda", msg="NCCL requires CUDA") + conflicts("+cutlass", when="~cuda", msg="CUTLASS requires CUDA") + conflicts("+fortran", when="~c", msg="Fortran bindings require C API") + # Skala resource file skala_version = "1.1" skala_file = f"skala-{skala_version}.fun" @@ -48,43 +74,45 @@ class Gauxc(CMakePackage, CudaPackage): depends_on("fortran", when="+fortran", type="build") depends_on("cmake@3.20:", type="build") depends_on("ninja@1.10:", type="build") - depends_on("exchcxx ~cuda", when="~cuda") - depends_on("exchcxx +cuda", when="+cuda") + depends_on("exchcxx~cuda", when="~cuda") + depends_on("exchcxx+cuda", when="+cuda") depends_on("integratorxx") + depends_on("blas") depends_on("hdf5", when="+hdf5") + depends_on("highfive@:2.10.1", when="+hdf5") depends_on("mpi", when="+mpi") depends_on("cuda", when="+cuda") - depends_on("highfive@:2.10.1", when="+hdf5") - depends_on("gau2grid") - depends_on("blas") + depends_on("hip", when="+hip") + depends_on("gau2grid", when="+gau2grid") depends_on("nlohmann-json", when="+skala") depends_on("py-torch@2:", when="+skala") - depends_on("py-torch@2: +cuda", when="+skala+cuda") + depends_on("py-torch@2:+cuda", when="+skala+cuda") + depends_on("magma", when="+magma") + depends_on("nccl", when="+nccl") + depends_on("cutlass", when="+cutlass") generator("ninja") - variant("openmp", default=True, description="Build with OpenMP support") - variant("mpi", default=False, description="Build with MPI support") - variant("cuda", default=False, description="Build with CUDA support") - variant("hdf5", default=False, description="Build with HDF5 support") - variant("c", default=False, description="Build with C support") - variant("fortran", default=False, description="Build with Fortran support") - variant("skala", default=False, description="Build with Skala support") - variant("host", default=True, description="Build with host integrators") - variant("tests", default=False, description="Build with testing framework (Catch2)") - variant("pic", default=True, description="Build position independent code") - def cmake_args(self): + spec = self.spec args = [ - self.define("GAUXC_ENABLE_OPENMP", self.spec.satisfies("+openmp")), - self.define("GAUXC_ENABLE_MPI", self.spec.satisfies("+mpi")), - self.define("GAUXC_ENABLE_CUDA", self.spec.satisfies("+cuda")), - self.define("GAUXC_ENABLE_HDF5", self.spec.satisfies("+hdf5")), - self.define("GAUXC_ENABLE_C", self.spec.satisfies("+c")), - self.define("GAUXC_ENABLE_FORTRAN", self.spec.satisfies("+fortran")), - self.define("GAUXC_ENABLE_ONEDFT", self.spec.satisfies("+skala")), - self.define("GAUXC_ENABLE_HOST", self.spec.satisfies("+host")), - self.define("GAUXC_ENABLE_TESTS", self.spec.satisfies("+tests")), + self.define("GAUXC_ENABLE_C", spec.satisfies("+c")), + self.define("GAUXC_ENABLE_FORTRAN", spec.satisfies("+fortran")), + self.define("GAUXC_ENABLE_HOST", spec.satisfies("+host")), + self.define("GAUXC_ENABLE_CUDA", spec.satisfies("+cuda")), + self.define("GAUXC_ENABLE_HIP", spec.satisfies("+hip")), + self.define("GAUXC_ENABLE_MPI", spec.satisfies("+mpi")), + self.define("GAUXC_ENABLE_OPENMP", spec.satisfies("+openmp")), + self.define("GAUXC_ENABLE_TESTS", spec.satisfies("+tests")), + self.define("GAUXC_ENABLE_GAU2GRID", spec.satisfies("+gau2grid")), + self.define("GAUXC_ENABLE_HDF5", spec.satisfies("+hdf5")), + self.define("GAUXC_ENABLE_ONEDFT", spec.satisfies("+onedft")), + self.define("GAUXC_ENABLE_FAST_RSQRT", spec.satisfies("+fast_rsqrt")), + self.define("GAUXC_BLAS_PREFER_ILP64", spec.satisfies("+blas_prefer_ilp64")), + self.define("GAUXC_LINK_CUDA_STATIC", spec.satisfies("+link_cuda_static")), + self.define("GAUXC_ENABLE_MAGMA", spec.satisfies("+magma")), + self.define("GAUXC_ENABLE_NCCL", spec.satisfies("+nccl")), + self.define("GAUXC_ENABLE_CUTLASS", spec.satisfies("+cutlass")), self.define_from_variant("CMAKE_POSITION_INDEPENDENT_CODE", "pic"), ] return args