Skip to content
Snippets Groups Projects
Commit 8c8a753f authored by Damian Alvarez's avatar Damian Alvarez
Browse files

Merge branch 'sa-foss-2023' into '2023'

{toolchain} foss 2022a

See merge request software-team/easybuild!1384
parents f9c61fcf 28be9aae
Branches
No related tags found
No related merge requests found
Showing
with 424 additions and 17 deletions
The table below shows the details of the toolchains in the 2022 stage: The table below shows the details of the toolchains in the 2023 stage:
- Base - Base
| Toolchain name | Toolchain version | Underlying GCC | Compiler | MPI | CUDA | Math libraries | Includes software from | | Toolchain name | Toolchain version | Underlying GCC | Compiler | MPI | CUDA | Math libraries | Includes software from |
|-----------------|---------------------------|----------------|------------------|-------------------------|----------|----------------|---------------------------| |-----------------|---------------------------|----------------|------------------|-------------------------|----------|----------------|---------------------------|
| GCCcore | 11.2.0 | 11.2.0 | | | | | | | GCCcore | 11.3.0 | 11.3.0 | | | | | |
- Compilers - Compilers
| Toolchain name | Toolchain version | Underlying GCC | Compiler | MPI | CUDA | Math libraries | Includes software from | | Toolchain name | Toolchain version | Underlying GCC | Compiler | MPI | CUDA | Math libraries | Includes software from |
|-----------------|---------------------------|----------------|------------------|-------------------------|----------|----------------|---------------------------| |-----------------|---------------------------|----------------|------------------|-------------------------|----------|----------------|---------------------------|
| GCC | 11.2.0 | 11.2.0 | GCC 11.2.0 | | | | GCCcore | | GCC | 11.3.0 | 11.3.0 | GCC 11.3.0 | | | | GCCcore |
| NVHPC | TBD-GCC-11.2.0 | 11.2.0 | NVHPC TBD | | 11.5§ | | GCCcore | | NVHPC | TBD-GCC-11.3.0 | 11.3.0 | NVHPC TBD | | 11.7§ | | GCCcore |
| intel-compilers | 2021.4.0 | 11.2.0 | Intel 2021.4.0 | | | | GCCcore | | intel-compilers | 2022.2.0 | 11.3.0 | Intel 2022.2.0 | | | | GCCcore |
- Compilers+MPI - Compilers+MPI
| Toolchain name | Toolchain version | Underlying GCC | Compiler | MPI | CUDA | Math libraries | Includes software from | | Toolchain name | Toolchain version | Underlying GCC | Compiler | MPI | CUDA | Math libraries | Includes software from |
|-----------------|---------------------------|----------------|------------------|-------------------------|----------|----------------|---------------------------| |-----------------|---------------------------|----------------|------------------|-------------------------|----------|----------------|---------------------------|
| gpsmpi | 2021b | 11.2.0 | GCC 11.2.0 | ParaStationMPI 5.5.X | 11.5§ | | GCCcore, GCC | | gpsmpi | 2022a | 11.3.0 | GCC 11.3.0 | ParaStationMPI 5.6.X | 11.7§ | | GCCcore, GCC |
| nvompic | 2021b | 11.2.0 | NVHPC TBD | OpenMPI 4.1.X | 11.5 | | GCCcore, NVHPC | | nvompic | 2022a | 11.3.0 | NVHPC TBD | OpenMPI 4.1.X | 11.7 | | GCCcore, NVHPC |
| npsmpic | 2021b | 11.2.0 | NVHPC TBD | ParaStationMPI 5.5.X | 11.5 | | GCCcore, NVHPC | | npsmpic | 2022a | 11.3.0 | NVHPC TBD | ParaStationMPI 5.6.X | 11.7 | | GCCcore, NVHPC |
| ipsmpi | 2021b | 11.2.0 | Intel 2021.4.0 | ParaStationMPI 5.5.X | 11.5§ | | GCCcore, intel-compilers | | ipsmpi | 2022a | 11.3.0 | Intel 2022.2.0 | ParaStationMPI 5.6.X | 11.7§ | | GCCcore, intel-compilers |
| iimpi | 2021b | 11.2.0 | Intel 2021.4.0 | Intel MPI 2021.X.Y | | | GCCcore, intel-compilers | | iimpi | 2022a | 11.3.0 | Intel 2022.2.0 | Intel MPI 2021.X.Y | | | GCCcore, intel-compilers |
| gompi | 2021b | 11.2.0 | GCC 11.2.0 | OpenMPI 4.1.X | 11.5§ | | GCCcore, GCC | | gompi | 2022a | 11.3.0 | GCC 11.3.0 | OpenMPI 4.1.X | 11.7§ | | GCCcore, GCC |
| iompi | 2021b | 11.2.0 | Intel 2021.4.0 | OpenMPI 4.1.X | 11.5§ | | GCCcore, intel-compilers | | iompi | 2022a | 11.3.0 | Intel 2022.2.0 | OpenMPI 4.1.X | 11.7§ | | GCCcore, intel-compilers |
- Compilers+MPI+Math - Compilers+MPI+Math
| Toolchain name | Toolchain version | Underlying GCC | Compiler | MPI | CUDA | Math libraries | Includes software from | | Toolchain name | Toolchain version | Underlying GCC | Compiler | MPI | CUDA | Math libraries | Includes software from |
|-----------------|---------------------------|----------------|------------------|-------------------------|----------|----------------|---------------------------| |-----------------|---------------------------|----------------|------------------|-------------------------|----------|----------------|---------------------------|
| gpsmkl | 2021b | 11.2.0 | GCC 11.2.0 | ParaStationMPI 5.5.X | 11.5§ | MKL 2021.4.0 | GCCcore, GCC, gpsmpi | | foss | 2022a | 11.3.0 | GCC 11.3.0 | OpenMPI 4.1.X | 11.7§ | FlexiBlas (MKL 2022.1.0, BLIS 0.9.0, OpenBLAS 0.3.20) | GCCcore, GCC, gopmpi |
| gomkl | 2021b | 11.2.0 | GCC 11.2.0 | OpenMPI 4.1.X | 11.5§ | MKL 2021.4.0 | GCCcore, GCC, gompi | | gpsmkl | 2022a | 11.3.0 | GCC 11.3.0 | ParaStationMPI 5.6.X | 11.7§ | MKL 2022.2.0 | GCCcore, GCC, gpsmpi |
| intel | 2021b | 11.2.0 | Intel 2021.4.0 | Intel MPI 2021.X.Y | | MKL 2021.4.0 | GCCcore, GCC, iimpi | | gomkl | 2022a | 11.3.0 | GCC 11.3.0 | OpenMPI 4.1.X | 11.7§ | MKL 2022.2.0 | GCCcore, GCC, gompi |
| intel-para | 2021b | 11.2.0 | Intel 2021.4.0 | ParaStationMPI 5.5.X | | MKL 2021.4.0 | GCCcore, GCC, ipsmpi | | intel | 2022a | 11.3.0 | Intel 2022.2.0 | Intel MPI 2021.X.Y | | MKL 2022.2.0 | GCCcore, GCC, iimpi |
| iomkl | 2021b | 11.2.0 | Intel 2021.4.0 | OpenMPI 4.1.X | 11.5§ | MKL 2021.4.0 | GCCcore, GCC, iompi | | intel-para | 2022a | 11.3.0 | Intel 2022.2.0 | ParaStationMPI 5.6.X | | MKL 2022.2.0 | GCCcore, GCC, ipsmpi |
| iomkl | 2022a | 11.3.0 | Intel 2022.2.0 | OpenMPI 4.1.X | 11.7§ | MKL 2022.2.0 | GCCcore, GCC, iompi |
§ Not included in the toolchain just as dependency § Not included in the toolchain just as dependency
......
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'),
# add imkl as dependecy only on x86_64
('imkl', {'arch=x86_64': '2022.1.0', 'arch=*': False}, '', SYSTEM),
]
# note: first listed backend will be used as default by FlexiBLAS,
# unless otherwise specified via easyconfig parameter flexiblas_default
# Only use imkl on x86_64
if ARCH == 'x86_64':
local_backends = ['imkl', 'OpenBLAS', 'BLIS']
else:
local_backends = ['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