Add version 3.2 of AMD libraries (#31538)

This commit is contained in:
AMD Toolchain Support 2022-07-21 17:02:28 +05:30 committed by GitHub
parent f85c4ec288
commit 5ffc095f63
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 82 additions and 20 deletions

View File

@ -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))

View File

@ -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 @@ def configure(self, spec, prefix):
'--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)))

View File

@ -70,22 +70,33 @@ def lapack_libs(self):
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:
# 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.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:
args.append("--enable-void-return-complex")
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")
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")
return args
@run_after('build')

View File

@ -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")

View File

@ -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"""

View File

@ -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')