Skip to content
Snippets Groups Projects
Commit 1d69d4e3 authored by Sebastian Achilles's avatar Sebastian Achilles
Browse files

add foss-2022a.eb

parent f0c3b8eb
Branches
No related tags found
No related merge requests found
Showing
with 404 additions and 0 deletions
easyblock = 'ConfigureMake'
name = 'BLIS'
version = '0.9.0'
homepage = 'https://github.com/flame/blis/'
description = """BLIS is a portable software framework for instantiating high-performance
BLAS-like dense linear algebra libraries."""
toolchain = {'name': 'GCC', 'version': '11.3.0'}
source_urls = ['https://github.com/flame/blis/archive/']
sources = ['%(version)s.tar.gz']
patches = [
'%(name)s-%(version)s_disable_power9_kernels.patch',
'%(name)s-%(version)s_enable_ppc_autodetect.patch',
]
checksums = [
'1135f664be7355427b91025075562805cdc6cc730d3173f83533b2c5dcc2f308', # 0.9.0.tar.gz
# BLIS-0.9.0_disable_power9_kernels.patch
'ed7a326bc5c5c21c42faefbec2fd7be609d1c7236981b466475edace39307279',
# BLIS-0.9.0_enable_ppc_autodetect.patch
'f373fb252c0d14036fb631f048091976cceb02abb3e570a97fbaeac2fbb12328',
]
builddependencies = [
('Python', '3.10.4', '-bare'),
('Perl', '5.34.1'),
]
configopts = '--enable-cblas --enable-threading=openmp --enable-shared CC="$CC" auto'
runtest = 'check'
sanity_check_paths = {
'files': ['include/blis/cblas.h', 'include/blis/blis.h',
'lib/libblis.a', 'lib/libblis.%s' % SHLIB_EXT],
'dirs': [],
}
modextrapaths = {'CPATH': 'include/blis'}
moduleclass = 'numlib'
There seemingly are bugs in the Power9 kernels.
Workaround this by using the generic kernels on Power9 introduced by
https://github.com/flame/blis/commit/ee9ff988c49f16696679d4c6cd3dcfcac7295be7
See https://github.com/flame/blis/issues/621
diff --git a/build/detect/config/config_detect.c b/build/detect/config/config_detect.c
index 5e29def..5603163 100644
--- a/build/detect/config/config_detect.c
+++ b/build/detect/config/config_detect.c
@@ -70,6 +70,8 @@
int main( int argc, char** argv )
{
arch_t id = bli_cpuid_query_id();
+ if(id == BLIS_ARCH_POWER9)
+ id = BLIS_ARCH_GENERIC;
char* s = bli_arch_string( id );
printf( "%s\n", s );
Add autodetection for POWER7, POWER9 & POWER10
See https://github.com/amd/blis/pull/6
Author: Alexander Grund (TU Dresden)
diff -ur a/frame/base/bli_cpuid.c b/frame/base/bli_cpuid.c
--- a/frame/base/bli_cpuid.c 2022-04-01 15:12:06.000000000 +0200
+++ b/frame/base/bli_cpuid.c 2022-07-07 16:15:43.724020000 +0200
@@ -485,7 +485,7 @@
return TRUE;
}
-#elif defined(__aarch64__) || defined(__arm__) || defined(_M_ARM)
+#elif defined(__aarch64__) || defined(__arm__) || defined(_M_ARM) || defined(_ARCH_PPC)
arch_t bli_cpuid_query_id( void )
{
@@ -530,9 +530,14 @@
return BLIS_ARCH_GENERIC;
}
}
- else if ( vendor == VENDOR_UNKNOWN )
+ else if ( vendor == VENDOR_IBM )
{
- return BLIS_ARCH_GENERIC;
+ if ( model == MODEL_POWER7)
+ return BLIS_ARCH_POWER7;
+ else if ( model == MODEL_POWER9)
+ return BLIS_ARCH_POWER9;
+ else if ( model == MODEL_POWER10)
+ return BLIS_ARCH_POWER10;
}
return BLIS_ARCH_GENERIC;
@@ -1203,7 +1208,7 @@
return VENDOR_ARM;
}
-#elif defined(__arm__) || defined(_M_ARM)
+#elif defined(__arm__) || defined(_M_ARM) || defined(_ARCH_PPC)
/*
I can't easily find documentation to do this as for aarch64, though
@@ -1240,6 +1245,20 @@
char feat_str[ TEMP_BUFFER_SIZE ];
char* r_val;
+#ifdef _ARCH_PPC
+ r_val = find_string_in( "cpu", proc_str, TEMP_BUFFER_SIZE, pci_str );
+ if ( r_val == NULL ) return VENDOR_IBM;
+
+ if ( strstr( proc_str, "POWER7" ) != NULL )
+ *model = MODEL_POWER7;
+ else if ( strstr( proc_str, "POWER9" ) != NULL )
+ *model = MODEL_POWER9;
+ else if ( strstr( proc_str, "POWER10" ) != NULL )
+ *model = MODEL_POWER10;
+
+ return VENDOR_IBM;
+#endif
+
//printf( "bli_cpuid_query(): beginning search\n" );
// Search /proc/cpuinfo for the 'Processor' entry.
diff -ur a/frame/base/bli_cpuid.h b/frame/base/bli_cpuid.h
--- a/frame/base/bli_cpuid.h 2022-04-01 15:12:06.000000000 +0200
+++ b/frame/base/bli_cpuid.h 2022-07-07 16:09:22.617023000 +0200
@@ -161,19 +161,23 @@
FEATURE_AVX512VL = 0x4000
};
-#elif defined(__aarch64__) || defined(__arm__) || defined(_M_ARM)
+#elif defined(__aarch64__) || defined(__arm__) || defined(_M_ARM) || defined(_ARCH_PPC)
char* find_string_in( char* target, char* buffer, size_t buf_len, char* filepath );
enum
{
VENDOR_ARM = 0,
+ VENDOR_IBM,
VENDOR_UNKNOWN
};
enum
{
MODEL_ARMV7 = 0,
MODEL_ARMV8,
+ MODEL_POWER7,
+ MODEL_POWER9,
+ MODEL_POWER10,
MODEL_UNKNOWN
};
enum
name = 'FFTW.MPI'
version = '3.3.10'
homepage = 'https://www.fftw.org'
description = """FFTW is a C subroutine library for computing the discrete Fourier transform (DFT)
in one or more dimensions, of arbitrary input size, and of both real and complex data."""
toolchain = {'name': 'gompi', 'version': '2022a'}
toolchainopts = {'pic': True}
source_urls = [homepage]
sources = ['fftw-%(version)s.tar.gz']
checksums = ['56c932549852cddcfafdab3820b0200c7742675be92179e59e6215b340e26467']
dependencies = [('FFTW', '3.3.10')]
runtest = 'check'
moduleclass = 'numlib'
name = 'FFTW'
version = '3.3.10'
homepage = 'https://www.fftw.org'
description = """FFTW is a C subroutine library for computing the discrete Fourier transform (DFT)
in one or more dimensions, of arbitrary input size, and of both real and complex data."""
toolchain = {'name': 'GCC', 'version': '11.3.0'}
toolchainopts = {'pic': True}
source_urls = [homepage]
sources = [SOURCELOWER_TAR_GZ]
checksums = ['56c932549852cddcfafdab3820b0200c7742675be92179e59e6215b340e26467']
runtest = 'check'
moduleclass = 'numlib'
easyblock = 'Bundle'
name = 'FlexiBLAS'
version = '3.2.0'
homepage = 'https://gitlab.mpi-magdeburg.mpg.de/software/flexiblas-release'
description = """FlexiBLAS is a wrapper library that enables the exchange of the BLAS and LAPACK implementation
used by a program without recompiling or relinking it."""
toolchain = {'name': 'GCC', 'version': '11.3.0'}
local_extra_flags = "-fstack-protector-strong -fstack-clash-protection"
toolchainopts = {'pic': True, 'extra_cflags': local_extra_flags, 'extra_fflags': local_extra_flags}
builddependencies = [
('CMake', '3.23.1'),
('Python', '3.10.4', '-bare'), # required for running the tests
('BLIS', '0.9.0'),
]
dependencies = [
('BLIS', '0.9.0'),
('OpenBLAS', '0.3.20'),
('imkl', {'arch=*': '2022.1.0', 'arch=aarch64': False}, '', SYSTEM),
]
# note: first listed backend will be used as default by FlexiBLAS,
# unless otherwise specified via easyconfig parameter flexiblas_default
local_backends = ['OpenBLAS', 'BLIS']
# imkl supplies its backend via the imkl module, not as a dependency
if ARCH == 'x86_64':
local_backends = local_backends = ['imkl', 'OpenBLAS', 'BLIS']
default_component_specs = {'start_dir': '%(namelower)s-%(version)s'}
sanity_check_all_components = True
# Also build and install LAPACKE, which FlexiBLAS does not support yet
components = [
(name, version, {
'source_urls': ['https://github.com/mpimd-csc/flexiblas/releases/download/v%(version)s/'],
'sources': [SOURCELOWER_TAR_GZ],
'checksums': ['a3f4d66a30b6fa6473e492de86d34abc5f9d4e69d4d91ba23618388e8df05904'],
'backends': local_backends,
}),
('LAPACK', '3.10.1', {
'easyblock': 'CMakeMake',
'source_urls': ['https://github.com/Reference-LAPACK/lapack/archive/'],
'sources': ['v%(version)s.tar.gz'],
'checksums': ['cd005cd021f144d7d5f7f33c943942db9f03a28d110d6a3b80d718a295f7f714'],
'configopts': ('-DBUILD_SHARED_LIBS=ON -DUSE_OPTIMIZED_BLAS=ON -DLAPACKE=ON '
'-DUSE_OPTIMIZED_LAPACK=ON -DBUILD_DEPRECATED=ON '
'-DCMAKE_INSTALL_INCLUDEDIR=%(installdir)s/include/flexiblas'),
'sanity_check_paths': {
'files': ['lib/liblapacke.%s' % SHLIB_EXT, 'include/flexiblas/lapacke.h'],
'dirs': [],
},
}),
]
moduleclass = 'lib'
easyblock = 'Toolchain'
name = 'foss'
version = '2022a'
homepage = 'https://easybuild.readthedocs.io/en/master/Common-toolchains.html#foss-toolchain'
description = """GNU Compiler Collection (GCC) based compiler toolchain, including
OpenMPI for MPI support, OpenBLAS (BLAS and LAPACK support), FFTW and ScaLAPACK."""
toolchain = SYSTEM
local_gccver = '11.3.0'
# toolchain used to build foss dependencies
local_comp_mpi_tc = ('gompi', version)
# we need GCC and OpenMPI as explicit dependencies instead of gompi toolchain
# because of toolchain preparation functions
dependencies = [
('GCC', local_gccver),
('OpenMPI', '4.1.4', '', ('GCC', local_gccver)),
('FlexiBLAS', '3.2.0', '', ('GCC', local_gccver)),
('FFTW', '3.3.10', '', ('GCC', local_gccver)),
('FFTW.MPI', '3.3.10', '', local_comp_mpi_tc),
('ScaLAPACK', '2.2.0', '-fb', local_comp_mpi_tc),
]
moduleclass = 'toolchain'
easyblock = 'Toolchain'
name = 'gompi'
version = '2022a'
homepage = '(none)'
description = """GNU Compiler Collection (GCC) based compiler toolchain,
including OpenMPI for MPI support."""
toolchain = SYSTEM
local_gccver = '11.3.0'
# compiler toolchain dependencies
dependencies = [
('GCC', local_gccver), # includes both GCC and binutils
('OpenMPI', '4.1.4', '', ('GCC', local_gccver)),
]
moduleclass = 'toolchain'
name = 'imkl'
version = '2022.1.0'
homepage = 'https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/onemkl.html'
description = "Intel oneAPI Math Kernel Library"
toolchain = SYSTEM
# see https://software.intel.com/content/www/us/en/develop/articles/oneapi-standalone-components.html
source_urls = ['https://registrationcenter-download.intel.com/akdlm/irc_nas/18721/']
sources = ['l_onemkl_p_%(version)s.223_offline.sh']
checksums = ['4b325a3c4c56e52f4ce6c8fbb55d7684adc16425000afc860464c0f29ea4563e']
interfaces = False
installopts = "--download-cache=%(builddir)s/cache --download-dir=%(builddir)s/download --log-dir=%(builddir)s/log"
moduleclass = 'numlib'
Workaround optimizer bug in GCC on POWER9.
See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100799
Author: Alexander Grund (TU Dresden)
diff --git a/Makefile.power b/Makefile.power
index 946f5523..96b14dca 100644
--- a/Makefile.power
+++ b/Makefile.power
@@ -35,6 +35,7 @@ endif
ifneq ($(F_COMPILER), PGI)
FCOMMON_OPT += -O2 -frecursive -fno-fast-math
ifeq ($(C_COMPILER), GCC)
+FCOMMON_OPT += -fstack-protector-strong
ifneq ($(GCCVERSIONGT4), 1)
$(warning your compiler is too old to fully support POWER9, getting a newer version of gcc is recommended)
FCOMMON_OPT += -mcpu=power8 -mtune=power8
name = 'OpenBLAS'
version = '0.3.20'
homepage = 'http://www.openblas.net/'
description = "OpenBLAS is an optimized BLAS library based on GotoBLAS2 1.13 BSD version."
toolchain = {'name': 'GCC', 'version': '11.3.0'}
source_urls = [
# order matters, trying to download the large.tgz/timing.tgz LAPACK tarballs from GitHub causes trouble
'https://www.netlib.org/lapack/timing/',
'https://github.com/xianyi/OpenBLAS/archive/',
]
sources = ['v%(version)s.tar.gz']
patches = [
('large.tgz', '.'),
('timing.tgz', '.'),
'OpenBLAS-0.3.15_workaround-gcc-miscompilation.patch',
]
checksums = [
'8495c9affc536253648e942908e88e097f2ec7753ede55aca52e5dead3029e3c', # v0.3.20.tar.gz
'f328d88b7fa97722f271d7d0cfea1c220e0f8e5ed5ff01d8ef1eb51d6f4243a1', # large.tgz
'999c65f8ea8bd4eac7f1c7f3463d4946917afd20a997807300fe35d70122f3af', # timing.tgz
# OpenBLAS-0.3.15_workaround-gcc-miscompilation.patch
'e6b326fb8c4a8a6fd07741d9983c37a72c55c9ff9a4f74a80e1352ce5f975971',
]
# extensive testing can be enabled by uncommenting the line below
# runtest = 'PATH=.:$PATH lapack-timing'
moduleclass = 'numlib'
name = 'ScaLAPACK'
version = '2.2.0'
versionsuffix = '-fb'
homepage = 'https://www.netlib.org/scalapack/'
description = """The ScaLAPACK (or Scalable LAPACK) library includes a subset of LAPACK routines
redesigned for distributed memory MIMD parallel computers."""
toolchain = {'name': 'gompi', 'version': '2022a'}
toolchainopts = {'pic': True}
source_urls = [homepage]
sources = [SOURCELOWER_TGZ]
patches = ['ScaLAPACK-%(version)s_fix-GCC-10.patch']
checksums = [
'40b9406c20735a9a3009d863318cb8d3e496fb073d201c5463df810e01ab2a57', # scalapack-2.2.0.tgz
'f6bc3c6dee012ba4a696548a2e12b6aae932ce4fd5a142153b338839f52b5906', # ScaLAPACK-2.2.0_fix-GCC-10.patch
]
builddependencies = [
('CMake', '3.23.1'),
]
dependencies = [
('FlexiBLAS', '3.2.0'),
]
# Config Opts based on AOCL User Guide:
# https://developer.amd.com/wp-content/resources/AOCL_User%20Guide_2.2.pdf
configopts = '-DBUILD_SHARED_LIBS=ON '
configopts += '-DBLAS_LIBRARIES="$EBROOTFLEXIBLAS/lib/libflexiblas.%s" ' % SHLIB_EXT
configopts += '-DLAPACK_LIBRARIES="$EBROOTFLEXIBLAS/lib/libflexiblas.%s" ' % SHLIB_EXT
configopts += '-DCMAKE_C_COMPILER=mpicc '
configopts += '-DCMAKE_Fortran_COMPILER=mpif90 '
configopts += '-DCMAKE_Fortran_FLAGS="-lpthread -fopenmp $DCMAKE_Fortran_FLAGS" '
sanity_check_paths = {
'files': ['lib/libscalapack.%s' % SHLIB_EXT, 'lib64/libscalapack.%s' % SHLIB_EXT],
'dirs': ["lib", "lib64"],
}
moduleclass = 'numlib'
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment