diff --git a/Golden_Repo/e/Extrae/Extrae-4.0.3.ecoHMEM-gompi-2022a.eb b/Golden_Repo/e/Extrae/Extrae-4.0.3.ecoHMEM-gompi-2022a.eb new file mode 100644 index 0000000000000000000000000000000000000000..ee5dcf6b76c0d08b808d0f3d1e5fb9c3ca6603ef --- /dev/null +++ b/Golden_Repo/e/Extrae/Extrae-4.0.3.ecoHMEM-gompi-2022a.eb @@ -0,0 +1,61 @@ +easyblock = 'ConfigureMake' + +name = "Extrae" +version = "4.0.3.ecoHMEM" + +homepage = 'http://www.bsc.es/computer-sciences/performance-tools' +description = """Extrae is the core instrumentation package developed by the Performance Tools + group at BSC. Extrae is capable of instrumenting applications based on MPI, OpenMP, pthreads, + CUDA1, OpenCL1, and StarSs1 using different instrumentation approaches. The information gathered + by Extrae typically includes timestamped events of runtime calls, performance counters and source + code references. Besides, Extrae provides its own API to allow the user to manually instrument his + or her application. +""" + +toolchain = {'name': 'gompi', 'version': '2022a'} +toolchainopts = {"usempi": True} + +source_urls = ['https://ftp.tools.bsc.es/extrae/'] +sources = ['extrae-4.0.3-src.tar.bz2'] + +patches = [ + 'file_offset_fix.patch', + 'merger_segfault_workaround.patch', + 'random_deadlock_workaround.patch', + 'change_libdwarf_path.patch', +] + +checksums = [ + '0d87509ec03584a629a879dccea10cf334f8243004077f6af3745aabb31e7250', + # file_offset_fix.patch + 'bf67a2fe1af1eb5f068c776c6b665a53040c0979e129d1647ae68333168abc7f', + # merger_segfault_workaround.patch + '162f38c7bc6513b06f19527a62bdaab888568cb4cfe8bc0ce69a58133bfb13b5', + # random_deadlock_workaround.patch + 'f7f876efdaeaa36f37b9a92844e53056fa66875e0ed1f197589538216b7dc8a6', + # change_libdwarf_path.patch + '74759b956246671a323acc3b267f9943bc2e190bb231259ad0c62784ec233a52', +] + +builddependencies = [ + ('Autotools', '20220317'), +] + +dependencies = [ + ('libunwind', '1.6.2'), + ('libxml2', '2.9.13'), + ('PAPI', '7.0.0'), + ('Boost', '1.79.0'), + ('libdwarf', '0.4.1'), + ('zlib', '1.2.12'), + ('CUDA', '11.7', '', SYSTEM) +] + +preconfigopts = 'autoreconf -vif && ' + +configopts = '--enable-posix-clock --enable-openmp --enable-sampling' +configopts += ' --with-binutils="$EBROOTBINUTILS" --with-boost="$EBROOTBOOST" --with-dwarf="$EBROOTLIBDWARF"' +configopts += ' --with-mpi="$EBROOTOPENMPI" --with-papi="$EBROOTPAPI" --with-unwind="$EBROOTLIBUNWIND"' +configopts += ' --with-libz="$EBROOTZLIB" --without-dyninst' + +moduleclass = 'perf' diff --git a/Golden_Repo/e/Extrae/change_libdwarf_path.patch b/Golden_Repo/e/Extrae/change_libdwarf_path.patch new file mode 100644 index 0000000000000000000000000000000000000000..68b82db0cadd15b5d5829a5a933b815dcd631821 --- /dev/null +++ b/Golden_Repo/e/Extrae/change_libdwarf_path.patch @@ -0,0 +1,62 @@ +# Change path to the libdwarf headers and adjust the aclocal version, since we change the *.m4 file too +# Author: maxim-masterov + +diff -Nru extrae-4.0.4.orig/config/macros.m4 extrae-4.0.4/config/macros.m4 +--- extrae-4.0.4.orig/config/macros.m4 2023-06-05 11:16:01.296643000 +0200 ++++ extrae-4.0.4/config/macros.m4 2023-06-05 11:21:10.535531000 +0200 +@@ -1666,8 +1666,8 @@ + if test -f "${DWARF_HOME}/include/libdwarf.h" -a \ + -f "${DWARF_HOME}/include/dwarf.h" ; then + libdwarf_found="yes" +- elif test -f "${DWARF_HOME}/include/libdwarf/libdwarf.h" -a \ +- -f "${DWARF_HOME}/include/libdwarf/dwarf.h" ; then ++ elif test -f "${DWARF_HOME}/include/libdwarf-0/libdwarf.h" -a \ ++ -f "${DWARF_HOME}/include/libdwarf-0/dwarf.h" ; then + libdwarf_found="yes" + else + AC_MSG_ERROR([Cannot find DWARF header files in ${dwarf_paths}/include]) +@@ -1678,8 +1678,8 @@ + -f "${DWARF_HOME}/include/dwarf.h" ; then + libdwarf_found="yes" + DWARF_LIBSDIR="${DWARF_LIBSDIR_MULTIARCH}" +- elif test -f "${DWARF_HOME}/include/libdwarf/libdwarf.h" -a \ +- -f "${DWARF_HOME}/include/libdwarf/dwarf.h" ; then ++ elif test -f "${DWARF_HOME}/include/libdwarf-0/libdwarf.h" -a \ ++ -f "${DWARF_HOME}/include/libdwarf-0/dwarf.h" ; then + libdwarf_found="yes" + DWARF_LIBSDIR="${DWARF_LIBSDIR_MULTIARCH}" + else +diff -Nru extrae-4.0.4.orig/configure extrae-4.0.4/configure +--- extrae-4.0.4.orig/configure 2023-06-05 11:16:01.298502695 +0200 ++++ extrae-4.0.4/configure 2023-06-05 11:32:55.962736435 +0200 +@@ -4683,7 +4683,7 @@ + fi + + # Initialize automake +-am__api_version='1.13' ++am__api_version='1.16' + + # Find a good install program. We prefer a C program (faster), + # so one script is as good as another. But avoid the broken or +@@ -30469,8 +30469,8 @@ + if test -f "${DWARF_HOME}/include/libdwarf.h" -a \ + -f "${DWARF_HOME}/include/dwarf.h" ; then + libdwarf_found="yes" +- elif test -f "${DWARF_HOME}/include/libdwarf/libdwarf.h" -a \ +- -f "${DWARF_HOME}/include/libdwarf/dwarf.h" ; then ++ elif test -f "${DWARF_HOME}/include/libdwarf-0/libdwarf.h" -a \ ++ -f "${DWARF_HOME}/include/libdwarf-0/dwarf.h" ; then + libdwarf_found="yes" + else + as_fn_error $? "Cannot find DWARF header files in ${dwarf_paths}/include" "$LINENO" 5 +@@ -30481,8 +30481,8 @@ + -f "${DWARF_HOME}/include/dwarf.h" ; then + libdwarf_found="yes" + DWARF_LIBSDIR="${DWARF_LIBSDIR_MULTIARCH}" +- elif test -f "${DWARF_HOME}/include/libdwarf/libdwarf.h" -a \ +- -f "${DWARF_HOME}/include/libdwarf/dwarf.h" ; then ++ elif test -f "${DWARF_HOME}/include/libdwarf-0/libdwarf.h" -a \ ++ -f "${DWARF_HOME}/include/libdwarf-0/dwarf.h" ; then + libdwarf_found="yes" + DWARF_LIBSDIR="${DWARF_LIBSDIR_MULTIARCH}" + else diff --git a/Golden_Repo/e/Extrae/file_offset_fix.patch b/Golden_Repo/e/Extrae/file_offset_fix.patch new file mode 100644 index 0000000000000000000000000000000000000000..d81a22a854640d5cf49046bfff5dcbafd60be32b --- /dev/null +++ b/Golden_Repo/e/Extrae/file_offset_fix.patch @@ -0,0 +1,42 @@ +--- extrae-4.0.3-orig/src/merger/paraver/addr2info.c 2023-03-03 11:58:15.000000000 +0100 ++++ extrae-4.0.3-mod/src/merger/paraver/addr2info.c 2023-03-23 14:37:30.467657000 +0100 +@@ -362,7 +362,6 @@ + // (even if ASLR is disabled) because LD_PRELOADing alters the addresses from the libs + // Main binary addresses are given with absolute references + const char * mainbinary = ObjectTable_GetBinaryObjectName (ptask, task); +- UINT64 base_address; + buffer[0] = (char)0; + for (i = 0; i < MAX_CALLERS; i++) + { +@@ -371,23 +370,25 @@ + binary_object_t * obj = ObjectTable_GetBinaryObjectAt (ptask, task, calleraddresses[i]); + const char * module; + ++ UINT64 base_address = 0; ++ UINT64 offset = 0; + if (obj != NULL) + { + module = obj->module; +- base_address = (strcmp (mainbinary, module) != 0) ? obj->start_address : 0; ++ if (strcmp (mainbinary, module) != 0) ++ { ++ base_address = obj->start_address; ++ offset = obj->offset; ++ } + } + else + { + if (getenv("EXTRAE_DEBUG")) + fprintf (stderr, "DEBUG: cannot translate address %08lx \n", calleraddresses[i]); + module = "Unknown"; +- base_address = 0; + } + +- if (strlen(buffer) > 0) +- snprintf (tmp, sizeof(tmp), " > %s!%08lx", module, calleraddresses[i] - base_address); +- else +- snprintf (tmp, sizeof(tmp), "%s!%08lx", module, calleraddresses[i] - base_address); ++ snprintf (tmp, sizeof(tmp), "%s%s!%08lx", strlen(buffer) > 0 ? " > " : "", module, (calleraddresses[i] - base_address) + offset); + strncat (buffer, tmp, sizeof(buffer)); + } + } diff --git a/Golden_Repo/e/Extrae/merger_segfault_workaround.patch b/Golden_Repo/e/Extrae/merger_segfault_workaround.patch new file mode 100644 index 0000000000000000000000000000000000000000..7482f20861993b7c02e3b7cc18ca389b28ab6858 --- /dev/null +++ b/Golden_Repo/e/Extrae/merger_segfault_workaround.patch @@ -0,0 +1,11 @@ +--- extrae-4.0.3-orig/src/merger/paraver/file_set.c 2023-03-06 11:38:13.000000000 +0100 ++++ extrae-4.0.3-mod/src/merger/paraver/file_set.c 2023-03-14 14:03:47.755695000 +0100 +@@ -1032,7 +1032,7 @@ + for (file = 0; file < fset->nfiles; file++) + { + current = Current_FS (&(fset->files[file])); +- while ((current != NULL) && ((current->event == CPU_BURST_EV) || (current->event == MPI_STATS_EV))) ++ while ((current != NULL) && ((current->event == CPU_BURST_EV) || (current->event == MPI_STATS_EV) || (current->event == 0 && current->time == 0))) + { + StepOne_FS (&(fset->files[file])); + current = Current_FS (&(fset->files[file])); diff --git a/Golden_Repo/e/Extrae/random_deadlock_workaround.patch b/Golden_Repo/e/Extrae/random_deadlock_workaround.patch new file mode 100644 index 0000000000000000000000000000000000000000..3f451185bdb5d3ec832b95a027d0fb546f1019ef --- /dev/null +++ b/Golden_Repo/e/Extrae/random_deadlock_workaround.patch @@ -0,0 +1,31 @@ +--- extrae-4.0.3-orig/src/tracer/sampling/timer/sampling-timer.c 2022-03-25 17:12:51.000000000 +0100 ++++ extrae-4.0.3-mod/src/tracer/sampling/timer/sampling-timer.c 2023-03-14 14:03:47.802827000 +0100 +@@ -106,10 +106,27 @@ + + static void PrepareNextAlarm (void) + { ++#define STATE_LEN 128 // TODO what size should we use? docs say powers of 2 from 8 to 256, no idea what random() uses ++ static int inited = 0; ++ static char statebuf[STATE_LEN]; ++ static struct random_data rd; ++ ++ if (! inited) { ++ int err = initstate_r(666, statebuf, STATE_LEN, &rd); ++ if (err != 0) fprintf (stderr, PACKAGE_NAME": Error! initstate_r failed: %d\n", errno); ++ inited = 1; ++ } ++#undef STATE_LEN ++ + /* Set next timer! */ + if (Sampling_variability > 0) + { +- long int r = random(); ++ //long int r = random(); ++ int random_value; ++ int err = random_r(&rd, &random_value); ++ if (err != 0) fprintf (stderr, PACKAGE_NAME": Error! random_r failed: %d\n", errno); ++ long int r = random_value; ++ + unsigned long long v = r%(Sampling_variability); + unsigned long long s, us; + diff --git a/Golden_Repo/e/ecoHMEM/ecoHMEM-1.0.5-gompi-2022a.eb b/Golden_Repo/e/ecoHMEM/ecoHMEM-1.0.5-gompi-2022a.eb new file mode 100644 index 0000000000000000000000000000000000000000..d1b7009689e619baae518ca78816bd64662bf62a --- /dev/null +++ b/Golden_Repo/e/ecoHMEM/ecoHMEM-1.0.5-gompi-2022a.eb @@ -0,0 +1,50 @@ +easyblock = 'MakeCp' + +name = "ecoHMEM" +version = "1.0.5" + +homepage = 'https://github.com/accelcom-bsc/ecoHMEM' +description = """\ +ecoHMEM is a software ecosystem implementing novel and proven +methodology to address automatic object-level placement for +heterogeneous memory systems equipped with DRAM, HBM, +Persistent Memory, etc. +""" + +toolchain = {'name': 'gompi', 'version': '2022a'} + +sources = [{ + 'filename': 'ecoHMEM.tar.gz', + 'git_config': { + 'url': 'https://github.com/accelcom-bsc', + 'repo_name': 'ecoHMEM', + 'tag': 'v{}'.format(version), + }, +}] + +checksums = [None] + +dependencies = [ + ('Boost', '1.79.0'), + ('Extrae', '4.0.3.ecoHMEM'), + ('Flexmalloc', '16Jan24.ecoHMEM'), +] + +build_cmd = 'make -C src BOOST_HOME=$EBROOTBOOST' + +sanity_check_paths = { + 'files': ['bin/hmem_advisor', 'bin/allocs_info'], + 'dirs': ['bin/scripts', 'share'] +} + +files_to_copy = [ + (['bin/hmem_advisor', 'bin/cfg_gen', 'bin/src'], 'bin'), + (['src/allocs_info'], 'bin'), + (['scripts'], 'bin'), + (['mem_confs'], 'share'), + (['extrae_confs'], 'share'), + (['example_conf.src'], 'share'), + (['readme.md', 'LICENSE', 'ChangeLog'], 'doc'), +] + +moduleclass = 'tools' diff --git a/Golden_Repo/f/Flexmalloc/Flexmalloc-16Jan24.ecoHMEM-GCCcore-11.3.0.eb b/Golden_Repo/f/Flexmalloc/Flexmalloc-16Jan24.ecoHMEM-GCCcore-11.3.0.eb new file mode 100644 index 0000000000000000000000000000000000000000..25ad16a0857e1cad871c261ef65f4e6739c78a6e --- /dev/null +++ b/Golden_Repo/f/Flexmalloc/Flexmalloc-16Jan24.ecoHMEM-GCCcore-11.3.0.eb @@ -0,0 +1,31 @@ +name = 'Flexmalloc' +version = '16Jan24.ecoHMEM' + +homepage = 'https://github.com/mjbsc/flexmalloc/tree/mpc_pmem_allocator' +description = 'Flexible Memory Allocation Tool for multi-tiered memory systems' + +toolchain = {'name': 'GCCcore', 'version': '11.3.0'} +easyblock = 'ConfigureMake' + +sources = [{ + 'filename': 'flexmalloc.tar.gz', + 'git_config': { + 'url': 'https://github.com/mjbsc', + 'repo_name': 'flexmalloc', + 'commit': '45a3749f6ea3d639b9749c2dbb24453ed20f73f4' + }, +}] + +checksums = [None] + +dependencies = [ + ('memkind', '1.14.0'), + ('binutils', '2.38'), + ('mpc-allocator', '0.2.ecoHMEM'), +] + +configure_cmd_prefix = './autogen.sh && ' +configopts = '--with-memkind=$EBROOTMEMKIND --with-binutils=$EBROOTBINUTILS --without-pmdk' +configopts += ' --with-mpc=$EBROOTMPCMINALLOCATOR' + +moduleclass = 'lib' diff --git a/Golden_Repo/m/mpc-allocator/mpc-allocator-0.2.ecoHMEM-GCCcore-11.3.0.eb b/Golden_Repo/m/mpc-allocator/mpc-allocator-0.2.ecoHMEM-GCCcore-11.3.0.eb new file mode 100644 index 0000000000000000000000000000000000000000..39db4d6262193c17293ab5b9d0e33fbef21b4a53 --- /dev/null +++ b/Golden_Repo/m/mpc-allocator/mpc-allocator-0.2.ecoHMEM-GCCcore-11.3.0.eb @@ -0,0 +1,44 @@ +easyblock = 'ConfigureMake' + +name = "mpc-allocator" +version = "0.2.ecoHMEM" + +homepage = 'https://github.com/cea-hpc/mpc-allocator/tree/cea/deepsea/het_memory' +description = 'MPC allocator with PMem allocation API.' + +toolchain = {'name': 'GCCcore', 'version': '11.3.0'} + +sources = [{ + 'filename': 'mpc-allocator.tar.gz', + 'git_config': { + 'url': 'https://github.com/cea-hpc', + 'repo_name': 'mpc-allocator', + 'commit': '72e3ced3454c6a9e3fbf8934b3cf369631a90958' + }, +}] + +patches = [ + 'mpc_allocator_fix.patch', +] + +checksums = [ + None, + # mpc_allocator_fix.patch + '7489f3bd0e2e0b3cee99a4f5c6466f5383bd369bd960f6edc38b1e4d335774ed', +] + +dependencies = [ + ('OpenPA', '1.0.4'), + ('hwloc', '2.7.1'), +] + +configure_without_installdir = True + +local_args = '-DOPENPA_PREFIX=$EBROOTOPENPA,-DHWLOC_PREFIX=$EBROOTHWLOC,-DCMAKE_INSTALL_PREFIX=%(installdir)s' +configure_cmd = './independant_build.sh --mode=Release --cmake' +configure_cmd += ' --args="' + local_args + '"' + +build_cmd = 'make -C build' +install_cmd = 'make -C build install' + +moduleclass = 'lib' diff --git a/Golden_Repo/m/mpc-allocator/mpc_allocator_fix.patch b/Golden_Repo/m/mpc-allocator/mpc_allocator_fix.patch new file mode 100644 index 0000000000000000000000000000000000000000..befb1f844e2070e687b50808ae5427b4e2fc9bb3 --- /dev/null +++ b/Golden_Repo/m/mpc-allocator/mpc_allocator_fix.patch @@ -0,0 +1,11 @@ +--- a/src/sctk_alloc_pmem.c 2024-02-05 17:01:16.064250355 +0100 ++++ b/src/sctk_alloc_pmem.c 2023-05-08 16:23:11.561693117 +0200 +@@ -213,7 +213,7 @@ + return ret; + } + +-SCTK_PUBLIC void sctk_pmem_free(sctk_pmem_desc_t*, size_t size, void* ptr) ++SCTK_PUBLIC void sctk_pmem_free(sctk_pmem_desc_t* desc, size_t size, void* ptr) + { + memset(ptr, 0x0, size); + } diff --git a/Golden_Repo/o/OpenPA/OpenPA-1.0.4-GCCcore-11.3.0.eb b/Golden_Repo/o/OpenPA/OpenPA-1.0.4-GCCcore-11.3.0.eb new file mode 100644 index 0000000000000000000000000000000000000000..6a9b56a677aaf0dad18a860e1e983a5b751d5f22 --- /dev/null +++ b/Golden_Repo/o/OpenPA/OpenPA-1.0.4-GCCcore-11.3.0.eb @@ -0,0 +1,33 @@ +easyblock = 'ConfigureMake' + +name = "OpenPA" +version = "1.0.4" + +homepage = 'https://github.com/pmodels/openpa' +description = """The goal of this project is to provide an open source, highly-portable +library that provides atomic primitives (and related constructs) for +high performance, concurrent software. This project is a collaboration +between the Mathematics and Computer Science (MCS) division at Argonne +National Laboratory (ANL) and the HDF Group. The code was originally +derived from work on the MPICH2 project. +""" + +toolchain = {'name': 'GCCcore', 'version': '11.3.0'} + +source_urls = ['https://github.com/pmodels/openpa/'] +sources = ['releases/download/v%(version)s/openpa-%(version)s.tar.gz'] + +checksums = [ + '9e5904b3bbdcb24e8429c12d613422e716a3479f3e0aeefbd9ce546852899e3a', +] + +builddependencies = [ + ('Autotools', '20220317'), +] + +sanity_check_paths = { + 'dirs': ['lib', 'include'], + 'files': ['lib/libopa.a', 'include/opa_primitives.h'], +} + +moduleclass = 'lib'