diff --git a/Golden_Repo/b/BLIS/BLIS-0.9.0-GCC-11.3.0.eb b/Golden_Repo/b/BLIS/BLIS-0.9.0-GCC-11.3.0.eb new file mode 100644 index 0000000000000000000000000000000000000000..a24a015854f9d5fd10f82d0bd7b46efe363a7440 --- /dev/null +++ b/Golden_Repo/b/BLIS/BLIS-0.9.0-GCC-11.3.0.eb @@ -0,0 +1,42 @@ +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' diff --git a/Golden_Repo/b/BLIS/BLIS-0.9.0_disable_power9_kernels.patch b/Golden_Repo/b/BLIS/BLIS-0.9.0_disable_power9_kernels.patch new file mode 100644 index 0000000000000000000000000000000000000000..98daaa8a02e0426cbcfa3c0c468d85d0e768ddde --- /dev/null +++ b/Golden_Repo/b/BLIS/BLIS-0.9.0_disable_power9_kernels.patch @@ -0,0 +1,18 @@ +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 ); diff --git a/Golden_Repo/b/BLIS/BLIS-0.9.0_enable_ppc_autodetect.patch b/Golden_Repo/b/BLIS/BLIS-0.9.0_enable_ppc_autodetect.patch new file mode 100644 index 0000000000000000000000000000000000000000..3c6fca9fbecb26405b019e6ce1c9128f8f43f272 --- /dev/null +++ b/Golden_Repo/b/BLIS/BLIS-0.9.0_enable_ppc_autodetect.patch @@ -0,0 +1,91 @@ +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 diff --git a/Golden_Repo/f/FFTW.MPI/FFTW.MPI-3.3.10-gompi-2022a.eb b/Golden_Repo/f/FFTW.MPI/FFTW.MPI-3.3.10-gompi-2022a.eb new file mode 100644 index 0000000000000000000000000000000000000000..f02489825a9299a18e8ea0468efdb5fe0a7cba99 --- /dev/null +++ b/Golden_Repo/f/FFTW.MPI/FFTW.MPI-3.3.10-gompi-2022a.eb @@ -0,0 +1,19 @@ +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' diff --git a/Golden_Repo/f/FFTW/FFTW-3.3.10-GCC-11.3.0.eb b/Golden_Repo/f/FFTW/FFTW-3.3.10-GCC-11.3.0.eb new file mode 100644 index 0000000000000000000000000000000000000000..99e7044835e673f2744509f34db639d9485527a2 --- /dev/null +++ b/Golden_Repo/f/FFTW/FFTW-3.3.10-GCC-11.3.0.eb @@ -0,0 +1,17 @@ +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' diff --git a/Golden_Repo/f/FlexiBLAS/FlexiBLAS-3.2.0-GCC-11.3.0.eb b/Golden_Repo/f/FlexiBLAS/FlexiBLAS-3.2.0-GCC-11.3.0.eb new file mode 100644 index 0000000000000000000000000000000000000000..60ae3cced393a009f779d54d460d7b292fca772e --- /dev/null +++ b/Golden_Repo/f/FlexiBLAS/FlexiBLAS-3.2.0-GCC-11.3.0.eb @@ -0,0 +1,60 @@ +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' diff --git a/Golden_Repo/f/foss/foss-2022a.eb b/Golden_Repo/f/foss/foss-2022a.eb new file mode 100644 index 0000000000000000000000000000000000000000..99d57d2d5fa0d202211518d6e7ec0be52e1584cc --- /dev/null +++ b/Golden_Repo/f/foss/foss-2022a.eb @@ -0,0 +1,28 @@ +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' diff --git a/Golden_Repo/g/gompi/gompi-2022a.eb b/Golden_Repo/g/gompi/gompi-2022a.eb new file mode 100644 index 0000000000000000000000000000000000000000..f2ad0f8735d4b8d819b8a67c5285bba21105577f --- /dev/null +++ b/Golden_Repo/g/gompi/gompi-2022a.eb @@ -0,0 +1,20 @@ +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' diff --git a/Golden_Repo/i/imkl/imkl-2022.1.0.eb b/Golden_Repo/i/imkl/imkl-2022.1.0.eb new file mode 100644 index 0000000000000000000000000000000000000000..c34d533cf35b24ed7dd648836dc0525265b78e46 --- /dev/null +++ b/Golden_Repo/i/imkl/imkl-2022.1.0.eb @@ -0,0 +1,18 @@ +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' diff --git a/Golden_Repo/o/OpenBLAS/OpenBLAS-0.3.15_workaround-gcc-miscompilation.patch b/Golden_Repo/o/OpenBLAS/OpenBLAS-0.3.15_workaround-gcc-miscompilation.patch new file mode 100644 index 0000000000000000000000000000000000000000..5e6b25003c3a5883c482d08ad3ede73e2bef7f4e --- /dev/null +++ b/Golden_Repo/o/OpenBLAS/OpenBLAS-0.3.15_workaround-gcc-miscompilation.patch @@ -0,0 +1,17 @@ +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 diff --git a/Golden_Repo/o/OpenBLAS/OpenBLAS-0.3.20-GCC-11.3.0.eb b/Golden_Repo/o/OpenBLAS/OpenBLAS-0.3.20-GCC-11.3.0.eb new file mode 100644 index 0000000000000000000000000000000000000000..72e27286e561fb237c0e45f7823ed480329b4199 --- /dev/null +++ b/Golden_Repo/o/OpenBLAS/OpenBLAS-0.3.20-GCC-11.3.0.eb @@ -0,0 +1,31 @@ +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' diff --git a/Golden_Repo/s/ScaLAPACK/ScaLAPACK-2.2.0-gompi-2022a-fb.eb b/Golden_Repo/s/ScaLAPACK/ScaLAPACK-2.2.0-gompi-2022a-fb.eb new file mode 100644 index 0000000000000000000000000000000000000000..5d3f67e7f5f5d634fb24b32769221a7ef7179a76 --- /dev/null +++ b/Golden_Repo/s/ScaLAPACK/ScaLAPACK-2.2.0-gompi-2022a-fb.eb @@ -0,0 +1,43 @@ +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'