diff options
author | Swann Perarnau <swann@anl.gov> | 2022-08-11 15:34:04 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-11 15:34:04 -0500 |
commit | 25da1052f7f1b8b7662639045ced681215b51fe7 (patch) | |
tree | e0c8c05cba7e863ad163b43540d631c83459abfb | |
parent | 29ee89b28b73f44334ae54988af13a3b719835d7 (diff) | |
download | spack-25da1052f7f1b8b7662639045ced681215b51fe7.tar.gz spack-25da1052f7f1b8b7662639045ced681215b51fe7.tar.bz2 spack-25da1052f7f1b8b7662639045ced681215b51fe7.tar.xz spack-25da1052f7f1b8b7662639045ced681215b51fe7.zip |
aml: add v0.2, cuda,opencl,hip support (#30701)
- [x] Add release v0.2 of the AML package, deprecate v0.1, and add support for
OpenCL, HIP, and CUDA variants of the library. Also update repo and
release URL, as the previous one is not accessible anymore.
- [x] aml: add oneapi-level-zero support
- [x] Change openmp flags to force compatibility when compiling with
intel-oneapi compilers.
-rw-r--r-- | var/spack/repos/builtin/packages/aml/package.py | 132 |
1 files changed, 97 insertions, 35 deletions
diff --git a/var/spack/repos/builtin/packages/aml/package.py b/var/spack/repos/builtin/packages/aml/package.py index 9d8e9e7159..8ece44c102 100644 --- a/var/spack/repos/builtin/packages/aml/package.py +++ b/var/spack/repos/builtin/packages/aml/package.py @@ -9,64 +9,126 @@ from spack.package import * class Aml(AutotoolsPackage): - """AML: Building Blocks for Memory Management.""" + """AML is a memory management library designed to ease the use of complex + memory topologies and complex data layout optimizations for + high-performance computing applications. + """ homepage = "https://argo-aml.readthedocs.io/" - url = "https://www.mcs.anl.gov/research/projects/argo/downloads/aml-0.1.0.tar.gz" - git = "https://github.com/anlsys/aml.git" + maintainers = ["perarnau"] test_requires_compiler = True tags = ["e4s"] - version("0.1.0", sha256="cc89a8768693f1f11539378b21cdca9f0ce3fc5cb564f9b3e4154a051dcea69b") - version("master", branch="master", submodules=True) + # Package sources + ################################### + url = "https://github.com/anlsys/aml/releases/download/v0.2.0/aml-0.2.0.tar.gz" + git = "https://github.com/anlsys/aml.git" + + # version string is generated from git tags, requires entire repo + version("master", branch="master", submodules=True, get_full_repo=True) + + version("0.2.0", sha256="2044a2f3f1d7a19827dd9c0726172b690189b4d3fe938656c4160c022468cc4a") + version( + "0.1.0", + sha256="cc89a8768693f1f11539378b21cdca9f0ce3fc5cb564f9b3e4154a051dcea69b", + deprecated=True, + ) + + # Generate possible variants. + ############################# + + variant("opencl", default=False, description="Support for memory operations on top of OpenCL.") + variant("ze", default=False, description="Support for memory operations on top of Level Zero.") + variant("hip", default=False, description="Support for memory operations on top of HIP.") + variant("cuda", default=False, description="Support for memory operations on top of CUDA.") + variant("hwloc", default=False, description="Enable feature related to topology management") + variant( + "hip-platform", + values=disjoint_sets(("amd", "nvidia")), + description="HIP backend platform.", + ) + + # Dependencies management + ######################### + + # aml always depends on libnuma depends_on("numactl") + # - cuda dependency. We use the environment variable CUDA_HOME in the configure. + depends_on("cuda", when="+cuda") + # - hip dependency. We use the environment variable HIP_PATH in the configure. + depends_on("hip", when="+hip") + # - level_zero loader is the dependency for the oneAPI variant + depends_on("oneapi-level-zero", when="+ze") + # - hwloc >= 2.1 becomes a dependency when +hwloc variant is used. + depends_on("hwloc@2.1:", when="+hwloc") + # - ocl-icd >= 2.1 becomes a dependency when +opencl variant is used. + depends_on("ocl-icd@2.1:", when="+opencl") + + # when on master, we need all the autotools and extras to generate files. with when("@master"): depends_on("m4", type="build") depends_on("autoconf", type="build") depends_on("automake", type="build") depends_on("libtool", type="build") + # Required to have pkg config macros in configure. + depends_on("pkgconf", type="build") + # Required to generate AML version in configure. + depends_on("git", type="build") + + # Configure options management + ########################################### + + # This is the function to overload to pass all hwloc flag. + def configure_args(self): + config_args = [] + for b in ["opencl", "hwloc", "ze", "hip", "cuda"]: + config_args.extend(self.with_or_without(b)) + if self.spec.satisfies("%oneapi"): + config_args += ["--with-openmp-flags=-fiopenmp -fopenmp-targets=spir64"] + if "hip-platform=amd" in self.spec: + config_args += ["--with-hip-platform=amd"] + if "hip-platform=nvidia" in self.spec: + config_args += ["--with-hip-platform=nvidia"] + return config_args + + # Tests + ######################### + + smoke_test = "0_hello" + smoke_test_src = join_path("doc", "tutorials", "hello_world", smoke_test + ".c") @run_after("install") def cache_test_sources(self): """Copy the example source files after the package is installed to an install test subdirectory for use during `spack test run`.""" - self.cache_extra_test_sources(["tests", join_path("include", "config.h")]) - - def run_area_test(self): - """Run stand alone test: test_area""" - - test_dir = join_path(self.test_suite.current_test_cache_dir, "tests", "area") - - if not os.path.exists(test_dir): - print("Skipping aml test") - return - - exe = "test_area" + self.cache_extra_test_sources(self.smoke_test_src) + + def run_install_tutorial_check(self): + """Run tutorial tests as install checks""" + + src = join_path(self.test_suite.current_test_cache_dir, self.smoke_test_src) + cc_exe = os.environ["CC"] + cc_options = [ + "-o", + self.smoke_test, + src, + "-I{0}".format(self.prefix.include), + "-I{0}".format(self.spec["numactl"].prefix.include), + "-L{0}".format(self.prefix.lib), + "-laml", + "-lexcit", + "-lpthread", + ] self.run_test( - "gcc", - options=[ - "-o", - exe, - join_path(test_dir, "test_area.c"), - "-I{0}".format(join_path(self.test_suite.current_test_cache_dir, "include")), - "-I{0}".format(self.prefix.include), - "-I{0}".format(self.spec["numactl"].prefix.include), - "-L{0}".format(self.prefix.lib), - "-laml", - "-lexcit", - "-lpthread", - ], - purpose="test: compile {0} example".format(exe), - work_dir=test_dir, + cc_exe, cc_options, purpose="test: compile {0} tutorial".format(self.smoke_test) ) - - self.run_test(exe, purpose="test: run {0} example".format(exe), work_dir=test_dir) + self.run_test(self.smoke_test, purpose="test: run {0} tutorial".format(self.smoke_test)) def test(self): - self.run_area_test() + self.run_install_tutorial_check() |