AMD Optimized CPU Libraries: add v4.0 (#34681)
What's in AOCL 4.0: 1. amdblis LPGEMM variants with post-ops support AMD "Zen4" support for BLIS 2. amdlibflame Upgrade to LAPACK 3.10.1 specification Improvements in a few more variants of SVD and Eigen Value routines Multithread support enabled for selected APIs 3. amdfftw AVX-512 enablement of DFT kernels AVX-512 optimization of copy and transpose routines 5. amdlibm Black & Scholes support (logf, expf, erff, both scalar and vector) AVX-512 variants of vector functions 6. aocl-sparse New Iterative Solver APIs AVX-512 support for SPMV API 7. amdscalapack Upgrade to Netlib ScaLAPACK 2.2.0 Co-authored-by: Massimiliano Culpo <massimiliano.culpo@gmail.com>
This commit is contained in:
parent
55f71e41d5
commit
b9048dbee9
@ -11,12 +11,20 @@ class AmdAocl(BundlePackage):
|
||||
libraries tuned specifically for AMD EPYC processor family. They have a
|
||||
simple interface to take advantage of the latest hardware innovations.
|
||||
The tuned implementations of industry standard math libraries enable
|
||||
fast development of scientific and high performance computing projects"""
|
||||
fast development of scientific and high performance computing projects
|
||||
|
||||
LICENSING INFORMATION: By downloading, installing and using this software,
|
||||
you agree to the terms and conditions of the AMD AOCL license agreement.
|
||||
You may obtain a copy of this license agreement from
|
||||
https://www.amd.com/en/developer/aocl/aocl-eula.html
|
||||
https://www.amd.com/en/developer/aocl/aocl-4-0-eula.html
|
||||
"""
|
||||
|
||||
homepage = "https://developer.amd.com/amd-aocl/"
|
||||
|
||||
maintainers = ["amd-toolchain-support"]
|
||||
|
||||
version("4.0")
|
||||
version("3.2")
|
||||
version("3.1")
|
||||
version("3.0")
|
||||
@ -24,7 +32,7 @@ class AmdAocl(BundlePackage):
|
||||
|
||||
variant("openmp", default=False, description="Enable OpenMP support.")
|
||||
|
||||
for vers in ["2.2", "3.0", "3.1", "3.2"]:
|
||||
for vers in ["2.2", "3.0", "3.1", "3.2", "4.0"]:
|
||||
depends_on("amdblis@{0} threads=openmp".format(vers), when="@{0} +openmp".format(vers))
|
||||
depends_on("amdblis@{0} threads=none".format(vers), when="@{0} ~openmp".format(vers))
|
||||
depends_on("amdfftw@{0} +openmp".format(vers), when="@{0} +openmp".format(vers))
|
||||
|
@ -2,6 +2,7 @@
|
||||
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||
#
|
||||
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||
|
||||
import os
|
||||
|
||||
from spack.package import *
|
||||
@ -16,6 +17,12 @@ class Amdblis(BlisBase):
|
||||
isolate essential kernels of computation that, when optimized, immediately
|
||||
enable optimized implementations of most of its commonly used and
|
||||
computationally intensive operations.
|
||||
|
||||
LICENSING INFORMATION: By downloading, installing and using this software,
|
||||
you agree to the terms and conditions of the AMD AOCL-BLIS license
|
||||
agreement. You may obtain a copy of this license agreement from
|
||||
https://www.amd.com/en/developer/aocl/blis/blis-4-0-eula.html
|
||||
https://www.amd.com/en/developer/aocl/blis/blis-eula.html
|
||||
"""
|
||||
|
||||
_name = "amdblis"
|
||||
@ -25,6 +32,7 @@ class Amdblis(BlisBase):
|
||||
|
||||
maintainers = ["amd-toolchain-support"]
|
||||
|
||||
version("4.0", sha256="cddd31176834a932753ac0fc4c76332868feab3e9ac607fa197d8b44c1e74a41")
|
||||
version("3.2", sha256="5a400ee4fc324e224e12f73cc37b915a00f92b400443b15ce3350278ad46fff6")
|
||||
version("3.1", sha256="2891948925b9db99eec02a1917d9887a7bee9ad2afc5421c9ba58602a620f2bf")
|
||||
version("3.0.1", sha256="dff643e6ef946846e91e8f81b75ff8fe21f1f2d227599aecd654d184d9beff3e")
|
||||
|
@ -22,6 +22,12 @@ class Amdfftw(FftwBase):
|
||||
|
||||
For single precision build, please use precision value as float.
|
||||
Example : spack install amdfftw precision=float
|
||||
|
||||
LICENSING INFORMATION: By downloading, installing and using this software,
|
||||
you agree to the terms and conditions of the AMD AOCL-FFTW license
|
||||
agreement. You may obtain a copy of this license agreement from
|
||||
https://www.amd.com/en/developer/aocl/fftw/fftw-libraries-4-0-eula.html
|
||||
https://www.amd.com/en/developer/aocl/fftw/fftw-libraries-eula.html
|
||||
"""
|
||||
|
||||
_name = "amdfftw"
|
||||
@ -31,6 +37,7 @@ class Amdfftw(FftwBase):
|
||||
|
||||
maintainers = ["amd-toolchain-support"]
|
||||
|
||||
version("4.0", sha256="5f02cb05f224bd86bd88ec6272b294c26dba3b1d22c7fb298745fd7b9d2271c0")
|
||||
version("3.2", sha256="31cab17a93e03b5b606e88dd6116a1055b8f49542d7d0890dbfcca057087b8d0")
|
||||
version("3.1", sha256="3e777f3acef13fa1910db097e818b1d0d03a6a36ef41186247c6ab1ab0afc132")
|
||||
version("3.0.1", sha256="87030c6bbb9c710f0a64f4f306ba6aa91dc4b182bb804c9022b35aef274d1a4c")
|
||||
@ -44,9 +51,9 @@ class Amdfftw(FftwBase):
|
||||
variant(
|
||||
"amd-fast-planner",
|
||||
default=False,
|
||||
description="Option to reduce the planning time without much"
|
||||
"tradeoff in the performance. It is supported for"
|
||||
"Float and double precisions only.",
|
||||
description="Option to reduce the planning time without much "
|
||||
"tradeoff in the performance. It is supported for "
|
||||
"float and double precisions only.",
|
||||
)
|
||||
variant("amd-top-n-planner", default=False, description="Build with amd-top-n-planner support")
|
||||
variant(
|
||||
@ -210,7 +217,7 @@ def configure(self, spec, prefix):
|
||||
|
||||
# Specific SIMD support.
|
||||
# float and double precisions are supported
|
||||
simd_features = ["sse2", "avx", "avx2"]
|
||||
simd_features = ["sse2", "avx", "avx2", "avx512"]
|
||||
|
||||
simd_options = []
|
||||
for feature in simd_features:
|
||||
|
@ -3,6 +3,7 @@
|
||||
#
|
||||
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||
# ----------------------------------------------------------------------------\
|
||||
|
||||
from spack.package import *
|
||||
from spack.pkg.builtin.libflame import LibflameBase
|
||||
|
||||
@ -28,6 +29,12 @@ class Amdlibflame(LibflameBase):
|
||||
In combination with BLIS library which includes optimizations
|
||||
for the AMD EPYC processor family, libFLAME enables running
|
||||
high performing LAPACK functionalities on AMD platform.
|
||||
|
||||
LICENSING INFORMATION: By downloading, installing and using this software,
|
||||
you agree to the terms and conditions of the AMD AOCL-libFLAME license
|
||||
agreement. You may obtain a copy of this license agreement from
|
||||
https://www.amd.com/en/developer/aocl/blis/libflame-4-0-eula.html
|
||||
https://www.amd.com/en/developer/aocl/blis/libflame-eula.html
|
||||
"""
|
||||
|
||||
_name = "amdlibflame"
|
||||
@ -37,6 +44,7 @@ class Amdlibflame(LibflameBase):
|
||||
|
||||
maintainers = ["amd-toolchain-support"]
|
||||
|
||||
version("4.0", sha256="bcb05763aa1df1e88f0da5e43ff86d956826cbea1d9c5ff591d78a3e091c66a4")
|
||||
version("3.2", sha256="6b5337fb668b82d0ed0a4ab4b5af4e2f72e4cedbeeb4a8b6eb9a3ef057fb749a")
|
||||
version("3.1", sha256="4520fb93fcc89161f65a40810cae0fa1f87cecb242da4a69655f502545a53426")
|
||||
version("3.0.1", sha256="5859e7b39ffbe73115dd598b035f212d36310462cf3a45e555a5087301710776")
|
||||
|
@ -14,21 +14,25 @@ class Amdlibm(SConsPackage):
|
||||
many routines from the list of standard C99 math functions.
|
||||
Applications can link into AMD LibM library and invoke math functions
|
||||
instead of compiler's math functions for better accuracy and
|
||||
performance."""
|
||||
performance.
|
||||
|
||||
LICENSING INFORMATION: By downloading, installing and using this software,
|
||||
you agree to the terms and conditions of the AMD AOCL-FFTW license
|
||||
agreement. You may obtain a copy of this license agreement from
|
||||
https://www.amd.com/en/developer/aocl/libm/libm-4-0-eula.html
|
||||
https://www.amd.com/en/developer/aocl/libm/libm-eula.html
|
||||
"""
|
||||
|
||||
_name = "amdlibm"
|
||||
homepage = "https://developer.amd.com/amd-aocl/amd-math-library-libm/"
|
||||
git = "https://github.com/amd/aocl-libm-ose.git"
|
||||
url = "https://github.com/amd/aocl-libm-ose/archive/refs/tags/3.0.tar.gz"
|
||||
maintainers = ["amd-toolchain-support"]
|
||||
|
||||
# If a user who doesn't specify a version
|
||||
# amdlibm installed for commit ID:4033e02
|
||||
# of master branch.
|
||||
# To install amdlibm from latest master branch:
|
||||
# spack install amdlibm ^amdlibm@master
|
||||
|
||||
version("3.2", branch="aocl-3.2")
|
||||
version("3.1", branch="aocl-3.1")
|
||||
version("3.0", branch="aocl-3.0")
|
||||
version("4.0", sha256="038c1eab544be77598eccda791b26553d3b9e2ee4ab3f5ad85fdd2a77d015a7d")
|
||||
version("3.2", sha256="c75b287c38a3ce997066af1f5c8d2b19fc460d5e56678ea81f3ac33eb79ec890")
|
||||
version("3.1", sha256="dee487cc2d89c2dc93508be2c67592670ffc1d02776c017e8907317003f48845")
|
||||
version("3.0", sha256="eb26b5e174f43ce083928d0d8748a6d6d74853333bba37d50057aac2bef7c7aa")
|
||||
version("2.2", commit="4033e022da428125747e118ccd6fdd9cee21c470")
|
||||
|
||||
variant("verbose", default=False, description="Building with verbosity")
|
||||
@ -41,13 +45,10 @@ class Amdlibm(SConsPackage):
|
||||
patch("0001-libm-ose-Scripts-cleanup-pyc-files.patch", when="@2.2")
|
||||
patch("0002-libm-ose-prevent-log-v3.c-from-building.patch", when="@2.2")
|
||||
|
||||
conflicts("%gcc@:9.1.0", msg="Minimum required GCC version is 9.2.0")
|
||||
conflicts("%gcc@11.2.0:", msg="Maximum required GCC version is 11.1.0")
|
||||
conflicts(
|
||||
"%aocc@3.2.0",
|
||||
when="@2.2:3.0",
|
||||
msg="amdlibm 2.2 and 3.0 versions are not supported with AOCC 3.2.0",
|
||||
)
|
||||
conflicts("%gcc@:9.1.0", msg="Minimum supported GCC version is 9.2.0")
|
||||
conflicts("%gcc@12.2.0:", msg="Maximum supported GCC version is 12.1.0")
|
||||
conflicts("%clang@9:", msg="Minimum supported Clang version is 9.0.0")
|
||||
conflicts("%aocc@3.2.0", msg="dependency on python@3.6.2")
|
||||
|
||||
def build_args(self, spec, prefix):
|
||||
"""Setting build arguments for amdlibm"""
|
||||
@ -56,14 +57,14 @@ def build_args(self, spec, prefix):
|
||||
# we are circumventing the use of
|
||||
# Spacks compiler wrappers because
|
||||
# SCons wipes out all environment variables.
|
||||
if spec.satisfies("@:3.0 %aocc"):
|
||||
if self.spec.satisfies("@:3.0 %aocc"):
|
||||
args.append("--compiler=aocc")
|
||||
|
||||
var_prefix = "" if spec.satisfies("@:3.0") else "ALM_"
|
||||
var_prefix = "" if self.spec.satisfies("@:3.0") else "ALM_"
|
||||
args.append("{0}CC={1}".format(var_prefix, self.compiler.cc))
|
||||
args.append("{0}CXX={1}".format(var_prefix, self.compiler.cxx))
|
||||
|
||||
if "+verbose" in spec:
|
||||
if "+verbose" in self.spec:
|
||||
args.append("--verbose=1")
|
||||
else:
|
||||
args.append("--verbose=0")
|
||||
@ -78,3 +79,6 @@ def create_symlink(self):
|
||||
with working_dir(self.prefix.lib):
|
||||
os.symlink("libalm.a", "libamdlibm.a")
|
||||
os.symlink("libalm.so", "libamdlibm.so")
|
||||
if self.spec.satisfies("@4.0:"):
|
||||
os.symlink("libalmfast.a", "libamdlibmfast.a")
|
||||
os.symlink("libalmfast.so", "libamdlibmfast.so")
|
||||
|
@ -16,6 +16,12 @@ class Amdscalapack(ScalapackBase):
|
||||
AMD's optimized version of ScaLAPACK enables using BLIS and
|
||||
LibFLAME library that have optimized dense matrix functions and
|
||||
solvers for AMD EPYC processor family CPUs.
|
||||
|
||||
LICENSING INFORMATION: By downloading, installing and using this software,
|
||||
you agree to the terms and conditions of the AMD AOCL-ScaLAPACK license
|
||||
agreement. You may obtain a copy of this license agreement from
|
||||
https://www.amd.com/en/developer/aocl/scalapack/scalapack-libraries-4-0-eula.html
|
||||
https://www.amd.com/en/developer/aocl/scalapack/scalapack-libraries-eula.html
|
||||
"""
|
||||
|
||||
_name = "amdscalapack"
|
||||
@ -24,6 +30,7 @@ class Amdscalapack(ScalapackBase):
|
||||
|
||||
maintainers = ["amd-toolchain-support"]
|
||||
|
||||
version("4.0", sha256="f02913b5984597b22cdb9a36198ed61039a1bf130308e778dc31b2a7eb88b33b")
|
||||
version("3.2", sha256="9e00979bb1be39d627bdacb01774bc043029840d542fafc934d16fec3e3b0892")
|
||||
version("3.1", sha256="4c2ee2c44644a0feec0c6fc1b1a413fa9028f14d7035d43a398f5afcfdbacb98")
|
||||
version("3.0", sha256="6e6f3578f44a8e64518d276e7580530599ecfa8729f568303ed2590688e7096f")
|
||||
|
@ -12,21 +12,28 @@ class AoclSparse(CMakePackage):
|
||||
"""AOCL-Sparse is a library that contains basic linear algebra subroutines
|
||||
for sparse matrices and vectors optimized for AMD EPYC family of processors.
|
||||
It is designed to be used with C and C++. Current functionality of sparse
|
||||
library supports SPMV function with CSR and ELLPACK formats."""
|
||||
library supports SPMV function with CSR and ELLPACK formats.
|
||||
|
||||
LICENSING INFORMATION: By downloading, installing and using this software,
|
||||
you agree to the terms and conditions of the AMD AOCL-Sparse license agreement.
|
||||
You may obtain a copy of this license agreement from
|
||||
https://www.amd.com/en/developer/aocl/sparse/sparse-libraries-4-0-eula.html
|
||||
https://www.amd.com/en/developer/aocl/sparse/sparse-libraries-eula.html
|
||||
"""
|
||||
|
||||
_name = "aocl-sparse"
|
||||
homepage = "https://developer.amd.com/amd-aocl/aocl-sparse/"
|
||||
url = "https://github.com/amd/aocl-sparse/archive/3.0.tar.gz"
|
||||
git = "https://github.com/amd/aocl-sparse.git"
|
||||
|
||||
maintainers = ["amd-toolchain-support"]
|
||||
|
||||
version("4.0", sha256="68524e441fdc7bb923333b98151005bed39154d9f4b5e8310b5c37de1d69c2c3")
|
||||
version("3.2", sha256="db7d681a8697d6ef49acf3e97e8bec35b048ce0ad74549c3b738bbdff496618f")
|
||||
version("3.1", sha256="8536f06095c95074d4297a3d2910654085dd91bce82e116c10368a9f87e9c7b9")
|
||||
version("3.0", sha256="1d04ba16e04c065051af916b1ed9afce50296edfa9b1513211a7378e1d6b952e")
|
||||
version("2.2", sha256="33c2ed6622cda61d2613ee63ff12c116a6cd209c62e54307b8fde986cd65f664")
|
||||
|
||||
conflicts("%gcc@:9.1", msg="Minimum required GCC version is 9.2.0")
|
||||
|
||||
variant(
|
||||
"build_type",
|
||||
default="Release",
|
||||
@ -35,7 +42,17 @@ class AoclSparse(CMakePackage):
|
||||
)
|
||||
variant("shared", default=True, description="Build shared library")
|
||||
variant("ilp64", default=False, description="Build with ILP64 support")
|
||||
variant("examples", default=False, description="Build sparse examples")
|
||||
variant("unit_tests", default=False, description="Build sparse unit tests")
|
||||
variant("benchmarks", default=False, description="Build Build benchmarks")
|
||||
variant(
|
||||
"avx",
|
||||
default=False,
|
||||
when="@4.0: target=zen4:",
|
||||
description="Enable experimental AVX512 support",
|
||||
)
|
||||
|
||||
depends_on("boost", when="+benchmarks")
|
||||
depends_on("boost", when="@2.2")
|
||||
depends_on("cmake@3.5:", type="build")
|
||||
|
||||
@ -70,15 +87,14 @@ def cmake_args(self):
|
||||
else:
|
||||
args.append("-DCMAKE_BUILD_TYPE=Release")
|
||||
|
||||
args.extend(
|
||||
[
|
||||
self.define_from_variant("BUILD_SHARED_LIBS", "shared"),
|
||||
"-DBUILD_CLIENTS_BENCHMARKS:BOOL=%s" % ("ON" if self.run_tests else "OFF"),
|
||||
]
|
||||
)
|
||||
args.append(self.define_from_variant("BUILD_SHARED_LIBS", "shared"))
|
||||
args.append(self.define_from_variant("BUILD_CLIENTS_SAMPLES", "examples"))
|
||||
args.append(self.define_from_variant("BUILD_CLIENTS_TESTS", "unit_tests"))
|
||||
args.append(self.define_from_variant("BUILD_CLIENTS_BENCHMARKS", "benchmarks"))
|
||||
args.append(self.define_from_variant("USE_AVX512", "avx"))
|
||||
|
||||
if spec.satisfies("@3.0:"):
|
||||
args.extend([self.define_from_variant("BUILD_ILP64", "ilp64")])
|
||||
args.append(self.define_from_variant("BUILD_ILP64", "ilp64"))
|
||||
|
||||
return args
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user