Implemented +sycl for slate (#39927)
* Implemented +sycl for slate * style * style * add slate +sycl to ci * slate +sycl: explicitly specify +mpi * comment out slate+sycl+mpi in e4s oneapi stack * removing requirement of intel-oneapi-mpi * Added slate+sycl to e4s oneapi stack * Removing obsolete comment --------- Co-authored-by: eugeneswalker <eugenesunsetwalker@gmail.com>
This commit is contained in:
		| @@ -231,6 +231,7 @@ spack: | |||||||
|   - cabana +sycl ^kokkos +sycl +openmp cxxstd=17 +tests +examples |   - cabana +sycl ^kokkos +sycl +openmp cxxstd=17 +tests +examples | ||||||
|   - kokkos +sycl +openmp cxxstd=17 +tests +examples |   - kokkos +sycl +openmp cxxstd=17 +tests +examples | ||||||
|   - kokkos-kernels build_type=Release %oneapi ^kokkos +sycl +openmp cxxstd=17 +tests +examples |   - kokkos-kernels build_type=Release %oneapi ^kokkos +sycl +openmp cxxstd=17 +tests +examples | ||||||
|  |   - slate +sycl | ||||||
|   # -- |   # -- | ||||||
|   # - ginkgo +oneapi                    # InstallError: Ginkgo's oneAPI backend requires theDPC++ compiler as main CXX compiler. |   # - ginkgo +oneapi                    # InstallError: Ginkgo's oneAPI backend requires theDPC++ compiler as main CXX compiler. | ||||||
|   # - hpctoolkit +level_zero            # intel-tbb: icpx: error: unknown argument: '-flifetime-dse=1' |   # - hpctoolkit +level_zero            # intel-tbb: icpx: error: unknown argument: '-flifetime-dse=1' | ||||||
|   | |||||||
| @@ -46,11 +46,14 @@ class Blaspp(CMakePackage, CudaPackage, ROCmPackage): | |||||||
| 
 | 
 | ||||||
|     variant("openmp", default=True, description="Use OpenMP internally.") |     variant("openmp", default=True, description="Use OpenMP internally.") | ||||||
|     variant("shared", default=True, description="Build shared libraries") |     variant("shared", default=True, description="Build shared libraries") | ||||||
|  |     variant("sycl", default=False, description="Build support for the SYCL backend") | ||||||
| 
 | 
 | ||||||
|     depends_on("cmake@3.15.0:", type="build") |     depends_on("cmake@3.15.0:", type="build") | ||||||
|     depends_on("blas") |     depends_on("blas") | ||||||
|     depends_on("llvm-openmp", when="%apple-clang +openmp") |     depends_on("llvm-openmp", when="%apple-clang +openmp") | ||||||
|     depends_on("rocblas", when="+rocm") |     depends_on("rocblas", when="+rocm") | ||||||
|  |     depends_on("intel-oneapi-mkl", when="+sycl") | ||||||
|  |     depends_on("intel-oneapi-mkl threads=openmp", when="+sycl") | ||||||
| 
 | 
 | ||||||
|     # only supported with clingo solver: virtual dependency preferences |     # only supported with clingo solver: virtual dependency preferences | ||||||
|     # depends_on('openblas threads=openmp', when='+openmp ^openblas') |     # depends_on('openblas threads=openmp', when='+openmp ^openblas') | ||||||
| @@ -63,7 +66,21 @@ class Blaspp(CMakePackage, CudaPackage, ROCmPackage): | |||||||
|     conflicts( |     conflicts( | ||||||
|         "+rocm", when="@:2020.10.02", msg="ROCm support requires BLAS++ 2021.04.00 or greater" |         "+rocm", when="@:2020.10.02", msg="ROCm support requires BLAS++ 2021.04.00 or greater" | ||||||
|     ) |     ) | ||||||
|     conflicts("+rocm", when="+cuda", msg="BLAS++ can only support one GPU backend at a time") |     backend_msg = "BLAS++ supports only one GPU backend at a time" | ||||||
|  |     conflicts("+rocm", when="+cuda", msg=backend_msg) | ||||||
|  |     conflicts("+rocm", when="+sycl", msg=backend_msg) | ||||||
|  |     conflicts("+cuda", when="+sycl", msg=backend_msg) | ||||||
|  |     conflicts("+sycl", when="@:2023.06.00", msg="SYCL support requires BLAS++ version 2023.08.25") | ||||||
|  | 
 | ||||||
|  |     # TODO: +sycl requires use of the intel-oneapi compiler, but we cannot express that directly. | ||||||
|  |     #       For now, add conflicts for other compilers instead. | ||||||
|  |     for __compiler in spack.compilers.supported_compilers(): | ||||||
|  |         if __compiler != "oneapi": | ||||||
|  |             conflicts( | ||||||
|  |                 "%{0}".format(__compiler), | ||||||
|  |                 when="+sycl", | ||||||
|  |                 msg="blaspp+sycl must be compiled with %oneapi", | ||||||
|  |             ) | ||||||
| 
 | 
 | ||||||
|     def cmake_args(self): |     def cmake_args(self): | ||||||
|         spec = self.spec |         spec = self.spec | ||||||
| @@ -74,6 +91,8 @@ def cmake_args(self): | |||||||
|                 backend = "cuda" |                 backend = "cuda" | ||||||
|             if "+rocm" in spec: |             if "+rocm" in spec: | ||||||
|                 backend = "hip" |                 backend = "hip" | ||||||
|  |             if "+sycl" in spec: | ||||||
|  |                 backend = "sycl" | ||||||
|             backend_config = "-Dgpu_backend=%s" % backend |             backend_config = "-Dgpu_backend=%s" % backend | ||||||
| 
 | 
 | ||||||
|         args = [ |         args = [ | ||||||
|   | |||||||
| @@ -59,6 +59,7 @@ class Lapackpp(CMakePackage, CudaPackage, ROCmPackage): | |||||||
|     ) |     ) | ||||||
| 
 | 
 | ||||||
|     variant("shared", default=True, description="Build shared library") |     variant("shared", default=True, description="Build shared library") | ||||||
|  |     variant("sycl", default=False, description="Build support for the SYCL backend") | ||||||
| 
 | 
 | ||||||
|     # Match each LAPACK++ version to a specific BLAS++ version |     # Match each LAPACK++ version to a specific BLAS++ version | ||||||
|     for lpp_ver, bpp_ver in _versions: |     for lpp_ver, bpp_ver in _versions: | ||||||
| @@ -66,6 +67,8 @@ class Lapackpp(CMakePackage, CudaPackage, ROCmPackage): | |||||||
| 
 | 
 | ||||||
|     depends_on("blaspp ~cuda", when="~cuda") |     depends_on("blaspp ~cuda", when="~cuda") | ||||||
|     depends_on("blaspp +cuda", when="+cuda") |     depends_on("blaspp +cuda", when="+cuda") | ||||||
|  |     depends_on("blaspp ~sycl", when="~sycl") | ||||||
|  |     depends_on("blaspp +sycl", when="+sycl") | ||||||
|     depends_on("blaspp ~rocm", when="~rocm") |     depends_on("blaspp ~rocm", when="~rocm") | ||||||
|     for val in ROCmPackage.amdgpu_targets: |     for val in ROCmPackage.amdgpu_targets: | ||||||
|         depends_on("blaspp +rocm amdgpu_target=%s" % val, when="amdgpu_target=%s" % val) |         depends_on("blaspp +rocm amdgpu_target=%s" % val, when="amdgpu_target=%s" % val) | ||||||
| @@ -74,8 +77,23 @@ class Lapackpp(CMakePackage, CudaPackage, ROCmPackage): | |||||||
|     depends_on("lapack") |     depends_on("lapack") | ||||||
|     depends_on("rocblas", when="+rocm") |     depends_on("rocblas", when="+rocm") | ||||||
|     depends_on("rocsolver", when="+rocm") |     depends_on("rocsolver", when="+rocm") | ||||||
|  |     depends_on("intel-oneapi-mkl threads=openmp", when="+sycl") | ||||||
| 
 | 
 | ||||||
|     conflicts("+rocm", when="+cuda", msg="LAPACK++ can only support one GPU backend at a time") |     backend_msg = "LAPACK++ supports only one GPU backend at a time" | ||||||
|  |     conflicts("+rocm", when="+cuda", msg=backend_msg) | ||||||
|  |     conflicts("+rocm", when="+sycl", msg=backend_msg) | ||||||
|  |     conflicts("+cuda", when="+sycl", msg=backend_msg) | ||||||
|  |     conflicts("+sycl", when="@:2023.06.00", msg="+sycl requires LAPACK++ version 2023.08.25") | ||||||
|  | 
 | ||||||
|  |     # TODO: +sycl requires use of the intel-oneapi compiler, but we cannot express that directly. | ||||||
|  |     #       For now, add conflicts for other compilers instead. | ||||||
|  |     for __compiler in spack.compilers.supported_compilers(): | ||||||
|  |         if __compiler != "oneapi": | ||||||
|  |             conflicts( | ||||||
|  |                 "%{0}".format(__compiler), | ||||||
|  |                 when="+sycl", | ||||||
|  |                 msg="lapackpp+sycl must be compiled with %oneapi", | ||||||
|  |             ) | ||||||
| 
 | 
 | ||||||
|     def cmake_args(self): |     def cmake_args(self): | ||||||
|         spec = self.spec |         spec = self.spec | ||||||
| @@ -86,6 +104,8 @@ def cmake_args(self): | |||||||
|                 backend = "cuda" |                 backend = "cuda" | ||||||
|             if "+rocm" in spec: |             if "+rocm" in spec: | ||||||
|                 backend = "hip" |                 backend = "hip" | ||||||
|  |             if "+sycl" in spec: | ||||||
|  |                 backend = "sycl" | ||||||
| 
 | 
 | ||||||
|         args = [ |         args = [ | ||||||
|             "-DBUILD_SHARED_LIBS=%s" % ("+shared" in spec), |             "-DBUILD_SHARED_LIBS=%s" % ("+shared" in spec), | ||||||
|   | |||||||
| @@ -51,17 +51,23 @@ class Slate(CMakePackage, CudaPackage, ROCmPackage): | |||||||
|     ) |     ) | ||||||
|     variant("openmp", default=True, description="Build with OpenMP support.") |     variant("openmp", default=True, description="Build with OpenMP support.") | ||||||
|     variant("shared", default=True, description="Build shared library") |     variant("shared", default=True, description="Build shared library") | ||||||
|  |     variant("sycl", default=False, description="Build with SYCL backend") | ||||||
| 
 | 
 | ||||||
|     # The runtime dependency on cmake is needed by the stand-alone tests (spack test). |     # The runtime dependency on cmake is needed by the stand-alone tests (spack test). | ||||||
|     depends_on("cmake", type="run") |     depends_on("cmake", type="run") | ||||||
| 
 | 
 | ||||||
|     depends_on("mpi", when="+mpi") |     depends_on("mpi", when="+mpi") | ||||||
|  |     depends_on("intel-oneapi-mkl threads=openmp", when="+sycl") | ||||||
|     depends_on("blas") |     depends_on("blas") | ||||||
|     depends_on("blaspp ~cuda", when="~cuda") |     depends_on("blaspp ~cuda", when="~cuda") | ||||||
|     depends_on("blaspp +cuda", when="+cuda") |     depends_on("blaspp +cuda", when="+cuda") | ||||||
|  |     depends_on("blaspp ~sycl", when="~sycl") | ||||||
|  |     depends_on("blaspp +sycl", when="+sycl") | ||||||
|     depends_on("blaspp ~rocm", when="~rocm") |     depends_on("blaspp ~rocm", when="~rocm") | ||||||
|     depends_on("lapackpp ~cuda", when="~cuda") |     depends_on("lapackpp ~cuda", when="~cuda") | ||||||
|     depends_on("lapackpp +cuda", when="+cuda") |     depends_on("lapackpp +cuda", when="+cuda") | ||||||
|  |     depends_on("lapackpp ~sycl", when="~sycl") | ||||||
|  |     depends_on("lapackpp +sycl", when="+sycl") | ||||||
|     depends_on("lapackpp ~rocm", when="~rocm") |     depends_on("lapackpp ~rocm", when="~rocm") | ||||||
|     for val in CudaPackage.cuda_arch_values: |     for val in CudaPackage.cuda_arch_values: | ||||||
|         depends_on("blaspp +cuda cuda_arch=%s" % val, when="cuda_arch=%s" % val) |         depends_on("blaspp +cuda cuda_arch=%s" % val, when="cuda_arch=%s" % val) | ||||||
| @@ -78,6 +84,16 @@ class Slate(CMakePackage, CudaPackage, ROCmPackage): | |||||||
|     depends_on("scalapack", type="test") |     depends_on("scalapack", type="test") | ||||||
|     depends_on("hipify-clang", when="@:2021.05.02 +rocm ^hip@5:") |     depends_on("hipify-clang", when="@:2021.05.02 +rocm ^hip@5:") | ||||||
| 
 | 
 | ||||||
|  |     # TODO: +sycl requires use of the intel-oneapi compiler, but we cannot express that directly. | ||||||
|  |     #       For now, add conflicts for other compilers instead. | ||||||
|  |     for __compiler in spack.compilers.supported_compilers(): | ||||||
|  |         if __compiler != "oneapi": | ||||||
|  |             conflicts( | ||||||
|  |                 "%{0}".format(__compiler), | ||||||
|  |                 when="+sycl", | ||||||
|  |                 msg="slate+sycl must be compiled with %oneapi", | ||||||
|  |             ) | ||||||
|  | 
 | ||||||
|     cpp_17_msg = "Requires C++17 compiler support" |     cpp_17_msg = "Requires C++17 compiler support" | ||||||
|     conflicts("%gcc@:5", msg=cpp_17_msg) |     conflicts("%gcc@:5", msg=cpp_17_msg) | ||||||
|     conflicts("%xl", msg=cpp_17_msg) |     conflicts("%xl", msg=cpp_17_msg) | ||||||
| @@ -86,7 +102,11 @@ class Slate(CMakePackage, CudaPackage, ROCmPackage): | |||||||
|     conflicts( |     conflicts( | ||||||
|         "+rocm", when="@:2020.10.00", msg="ROCm support requires SLATE 2021.05.01 or greater" |         "+rocm", when="@:2020.10.00", msg="ROCm support requires SLATE 2021.05.01 or greater" | ||||||
|     ) |     ) | ||||||
|     conflicts("+rocm", when="+cuda", msg="SLATE only supports one GPU backend at a time") |     backend_msg = "SLATE supports only one GPU backend at a time" | ||||||
|  |     conflicts("+rocm", when="+cuda", msg=backend_msg) | ||||||
|  |     conflicts("+rocm", when="+sycl", msg=backend_msg) | ||||||
|  |     conflicts("+cuda", when="+sycl", msg=backend_msg) | ||||||
|  |     conflicts("+sycl", when="@:2022.07.00", msg="SYCL support requires SLATE version 2023.08.25") | ||||||
| 
 | 
 | ||||||
|     def cmake_args(self): |     def cmake_args(self): | ||||||
|         spec = self.spec |         spec = self.spec | ||||||
| @@ -97,6 +117,8 @@ def cmake_args(self): | |||||||
|                 backend = "cuda" |                 backend = "cuda" | ||||||
|             if "+rocm" in spec: |             if "+rocm" in spec: | ||||||
|                 backend = "hip" |                 backend = "hip" | ||||||
|  |             if "+sycl" in spec: | ||||||
|  |                 backend = "sycl" | ||||||
|             backend_config = "-Dgpu_backend=%s" % backend |             backend_config = "-Dgpu_backend=%s" % backend | ||||||
| 
 | 
 | ||||||
|         config = [ |         config = [ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 G-Ragghianti
					G-Ragghianti