From 5ffc095f63f5e6c82fe6289ae44066b492c37828 Mon Sep 17 00:00:00 2001 From: AMD Toolchain Support <73240730+amd-toolchain-support@users.noreply.github.com> Date: Thu, 21 Jul 2022 17:02:28 +0530 Subject: Add version 3.2 of AMD libraries (#31538) --- .../repos/builtin/packages/amd-aocl/package.py | 36 ++++++++++++++++++++++ .../repos/builtin/packages/amdfftw/package.py | 20 +++++++++--- .../repos/builtin/packages/amdlibflame/package.py | 31 +++++++++++++------ .../repos/builtin/packages/amdlibm/package.py | 2 ++ .../repos/builtin/packages/amdscalapack/package.py | 12 ++++---- .../repos/builtin/packages/aocl-sparse/package.py | 1 + 6 files changed, 82 insertions(+), 20 deletions(-) create mode 100644 var/spack/repos/builtin/packages/amd-aocl/package.py diff --git a/var/spack/repos/builtin/packages/amd-aocl/package.py b/var/spack/repos/builtin/packages/amd-aocl/package.py new file mode 100644 index 0000000000..2eadbb71c4 --- /dev/null +++ b/var/spack/repos/builtin/packages/amd-aocl/package.py @@ -0,0 +1,36 @@ +# Copyright 2013-2022 Lawrence Livermore National Security, LLC and other +# Spack Project Developers. See the top-level COPYRIGHT file for details. +# +# SPDX-License-Identifier: (Apache-2.0 OR MIT) + +from spack.package import * + + +class AmdAocl(BundlePackage): + """AMD Optimizing CPU Libraries (AOCL) - AOCL is a set of numerical + 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""" + + homepage = "https://developer.amd.com/amd-aocl/" + + maintainers = ['amd-toolchain-support'] + + version('3.2') + version('3.1') + version('3.0') + version('2.2') + + variant('openmp', default=False, description="Enable OpenMP support.") + + for vers in ['2.2', '3.0', '3.1', '3.2']: + 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)) + depends_on('amdfftw@{0} ~openmp'.format(vers), when='@{0} ~openmp'.format(vers)) + depends_on('amdlibflame@{0}'.format(vers), when='@{0}'.format(vers)) + depends_on('amdlibm@{0}'.format(vers), when='@{0}'.format(vers)) + depends_on('amdscalapack@{0} ^amdblis@{0} threads=none'.format(vers), when='@{0} ~openmp'.format(vers)) + depends_on('amdscalapack@{0} ^amdblis@{0} threads=openmp'.format(vers), when='@{0} +openmp'.format(vers)) + depends_on('aocl-sparse@{0}'.format(vers), when='@{0}'.format(vers)) diff --git a/var/spack/repos/builtin/packages/amdfftw/package.py b/var/spack/repos/builtin/packages/amdfftw/package.py index 21d8747b24..72b375a422 100644 --- a/var/spack/repos/builtin/packages/amdfftw/package.py +++ b/var/spack/repos/builtin/packages/amdfftw/package.py @@ -71,6 +71,12 @@ class Amdfftw(FftwBase): 'amd-app-opt', default=False, description='Build with amd-app-opt suppport') + variant( + 'amd-dynamic-dispatcher', + default=False, + when='@3.2:', + description='Single portable optimized library' + ' to execute on different x86 CPU architectures') depends_on('texinfo') @@ -88,10 +94,6 @@ class Amdfftw(FftwBase): '%gcc@:7.2', when='@2.2:', msg='GCC version above 7.2 is required for AMDFFTW') - conflicts( - '+amd-fast-planner ', - when='+mpi', - msg='mpi thread is not supported with amd-fast-planner') conflicts( '+amd-fast-planner', when='@2.2', @@ -176,6 +178,10 @@ class Amdfftw(FftwBase): '+amd-app-opt', when='precision=quad', msg='Quad precision is not supported with amd-app-opt') + conflicts( + '+amd-dynamic-dispatcher', + when='%aocc', + msg='dynamic-dispatcher is not supported by AOCC clang compiler') def configure(self, spec, prefix): """Configure function""" @@ -185,6 +191,12 @@ class Amdfftw(FftwBase): '--enable-amd-opt' ] + # Dynamic dispatcher builds a single portable optimized library + # that can execute on different x86 CPU architectures. + # It is supported for GCC compiler and Linux based systems only. + if '+amd-dynamic-dispatcher' in self.spec: + options.append('--enable-dynamic-dispatcher') + # Check if compiler is AOCC if '%aocc' in spec: options.append('CC={0}'.format(os.path.basename(spack_cc))) diff --git a/var/spack/repos/builtin/packages/amdlibflame/package.py b/var/spack/repos/builtin/packages/amdlibflame/package.py index a2676d4e44..61f490a1e1 100644 --- a/var/spack/repos/builtin/packages/amdlibflame/package.py +++ b/var/spack/repos/builtin/packages/amdlibflame/package.py @@ -70,21 +70,32 @@ class Amdlibflame(LibflameBase): def configure_args(self): """configure_args function""" args = super(Amdlibflame, self).configure_args() - args.append("--enable-external-lapack-interfaces") - """To enabled Fortran to C calling convention for - complex types when compiling with aocc flang""" - if "@3.0: %aocc" in self.spec: - args.append("--enable-f2c-dotc") + # From 3.2 version, amd optimized flags are encapsulated under: + # enable-amd-flags for gcc compiler + # enable-amd-aocc-flags for aocc compiler + if "@3.2:" in self.spec: + if "%gcc" in self.spec: + args.append("--enable-amd-flags") + if "%aocc" in self.spec: + args.append("--enable-amd-aocc-flags") - if "@3.0.1: +ilp64" in self.spec: - args.append("--enable-ilp64") + if "@:3.1" in self.spec: + args.append("--enable-external-lapack-interfaces") + + if "@3.1" in self.spec: + args.append("--enable-blas-ext-gemmt") - if "@3.1: %aocc" in self.spec: + if "@3.1 %aocc" in self.spec: args.append("--enable-void-return-complex") - if "@3.1: " in self.spec: - args.append("--enable-blas-ext-gemmt") + if "@3.0:3.1 %aocc" in self.spec: + """To enabled Fortran to C calling convention for + complex types when compiling with aocc flang""" + args.append("--enable-f2c-dotc") + + if "@3.0.1: +ilp64" in self.spec: + args.append("--enable-ilp64") return args diff --git a/var/spack/repos/builtin/packages/amdlibm/package.py b/var/spack/repos/builtin/packages/amdlibm/package.py index 2f4652b6d9..5e4ee6183b 100644 --- a/var/spack/repos/builtin/packages/amdlibm/package.py +++ b/var/spack/repos/builtin/packages/amdlibm/package.py @@ -25,6 +25,8 @@ class Amdlibm(SConsPackage): # 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("2.2", commit="4033e022da428125747e118ccd6fdd9cee21c470") diff --git a/var/spack/repos/builtin/packages/amdscalapack/package.py b/var/spack/repos/builtin/packages/amdscalapack/package.py index 2495ebf760..76d309dad9 100644 --- a/var/spack/repos/builtin/packages/amdscalapack/package.py +++ b/var/spack/repos/builtin/packages/amdscalapack/package.py @@ -24,6 +24,7 @@ class Amdscalapack(ScalapackBase): maintainers = ['amd-toolchain-support'] + version('3.2', sha256='9e00979bb1be39d627bdacb01774bc043029840d542fafc934d16fec3e3b0892') version('3.1', sha256='4c2ee2c44644a0feec0c6fc1b1a413fa9028f14d7035d43a398f5afcfdbacb98') version('3.0', sha256='6e6f3578f44a8e64518d276e7580530599ecfa8729f568303ed2590688e7096f') version('2.2', sha256='2d64926864fc6d12157b86e3f88eb1a5205e7fc157bf67e7577d0f18b9a7484c') @@ -37,12 +38,11 @@ class Amdscalapack(ScalapackBase): msg="ILP64 is supported from 3.1 onwards") def url_for_version(self, version): - if version == Version('3.1'): - return "https://github.com/amd/aocl-scalapack/archive/3.1.tar.gz" - elif version == Version('3.0'): - return "https://github.com/amd/scalapack/archive/3.0.tar.gz" - elif version == Version('2.2'): - return "https://github.com/amd/scalapack/archive/2.2.tar.gz" + vers = "https://github.com/amd/{0}/archive/{1}.tar.gz" + if version >= Version('3.1'): + return vers.format('aocl-scalapack', version) + else: + return vers.format('scalapack', version) def cmake_args(self): """ cmake_args function""" diff --git a/var/spack/repos/builtin/packages/aocl-sparse/package.py b/var/spack/repos/builtin/packages/aocl-sparse/package.py index d53ef40d7d..5cebde6d9e 100644 --- a/var/spack/repos/builtin/packages/aocl-sparse/package.py +++ b/var/spack/repos/builtin/packages/aocl-sparse/package.py @@ -20,6 +20,7 @@ class AoclSparse(CMakePackage): maintainers = ['amd-toolchain-support'] + version('3.2', sha256='db7d681a8697d6ef49acf3e97e8bec35b048ce0ad74549c3b738bbdff496618f') version('3.1', sha256='8536f06095c95074d4297a3d2910654085dd91bce82e116c10368a9f87e9c7b9') version('3.0', sha256='1d04ba16e04c065051af916b1ed9afce50296edfa9b1513211a7378e1d6b952e') version('2.2', sha256='33c2ed6622cda61d2613ee63ff12c116a6cd209c62e54307b8fde986cd65f664') -- cgit v1.2.3-60-g2f50