diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml new file mode 100644 index 0000000000..ec018bd049 --- /dev/null +++ b/.github/workflows/scorecards.yml @@ -0,0 +1,75 @@ +# This workflow uses actions that are not certified by GitHub. They are provided +# by a third-party and are governed by separate terms of service, privacy +# policy, and support documentation. + +name: Scorecards supply-chain security +on: + # For Branch-Protection check. Only the default branch is supported. See + # https://github.com/ossf/scorecard/blob/main/docs/checks.md#branch-protection + branch_protection_rule: + # To guarantee Maintained check is occasionally updated. See + # https://github.com/ossf/scorecard/blob/main/docs/checks.md#maintained + schedule: + - cron: '25 15 * * 3' + push: + branches: [ "main" ] + pull_request: + branches: + - main + +# Declare default permissions as read only. +permissions: read-all + +jobs: + analysis: + name: Scorecards analysis + runs-on: ubuntu-latest + permissions: + # Needed to upload the results to code-scanning dashboard. + security-events: write + # Needed to publish results and get a badge (see publish_results below). + id-token: write + # Uncomment the permissions below if installing in a private repository. + # contents: read + # actions: read + + steps: + - name: "Checkout code" + uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0 + with: + persist-credentials: false + + - name: "Run analysis" + uses: ossf/scorecard-action@99c53751e09b9529366343771cc321ec74e9bd3d # v2.0.6 + with: + results_file: results.sarif + results_format: sarif + # (Optional) "write" PAT token. Uncomment the `repo_token` line below if: + # - you want to enable the Branch-Protection check on a *public* repository, or + # - you are installing Scorecards on a *private* repository + # To create the PAT, follow the steps in https://github.com/ossf/scorecard-action#authentication-with-pat. + # repo_token: ${{ secrets.SCORECARD_TOKEN }} + + # Public repositories: + # - Publish results to OpenSSF REST API for easy access by consumers + # - Allows the repository to include the Scorecard badge. + # - See https://github.com/ossf/scorecard-action#publishing-results. + # For private repositories: + # - `publish_results` will always be set to `false`, regardless + # of the value entered here. + publish_results: true + + # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF + # format to the repository Actions tab. + - name: "Upload artifact" + uses: actions/upload-artifact@3cea5372237819ed00197afe530f5a7ea3e805c8 # v3.1.0 + with: + name: SARIF file + path: results.sarif + retention-days: 5 + + # Upload the results to GitHub's code scanning dashboard. + - name: "Upload to code-scanning" + uses: github/codeql-action/upload-sarif@807578363a7869ca324a79039e6db9c843e0e100 # v2.1.27 + with: + sarif_file: results.sarif diff --git a/.github/workflows/test_eessi.yml b/.github/workflows/test_eessi.yml new file mode 100644 index 0000000000..92b1f71cad --- /dev/null +++ b/.github/workflows/test_eessi.yml @@ -0,0 +1,43 @@ +# documentation: https://help.github.com/en/articles/workflow-syntax-for-github-actions +name: Tests relying on having EESSI pilot repo mounted +on: [push, pull_request, workflow_dispatch] +permissions: + contents: read # to fetch code (actions/checkout) +jobs: + eessi_pilot_repo: + runs-on: ubuntu-20.04 + strategy: + fail-fast: false + matrix: + EESSI_VERSION: + - 2021.12 + EESSI_SOFTWARE_SUBDIR: + - aarch64/generic + - aarch64/graviton2 + - aarch64/graviton3 + - x86_64/amd/zen2 + - x86_64/amd/zen3 + - x86_64/intel/haswell + - x86_64/intel/skylake_avx512 + - x86_64/generic + steps: + - name: Check out software-layer repository + uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0 + + - name: Mount EESSI CernVM-FS pilot repository + uses: cvmfs-contrib/github-action-cvmfs@d4641d0d591c9a5c3be23835ced2fb648b44c04b # v3.1 + with: + cvmfs_config_package: https://github.com/EESSI/filesystem-layer/releases/download/latest/cvmfs-config-eessi_latest_all.deb + cvmfs_http_proxy: DIRECT + cvmfs_repositories: pilot.eessi-hpc.org + + - name: Test check_missing_installations.sh script + run: | + source /cvmfs/pilot.eessi-hpc.org/versions/${{matrix.EESSI_VERSION}}/init/bash + module load EasyBuild + eb --version + export EESSI_PREFIX=/cvmfs/pilot.eessi-hpc.org/versions/${{matrix.EESSI_VERSION}} + export EESSI_OS_TYPE=linux + export EESSI_SOFTWARE_SUBDIR=${{matrix.EESSI_SOFTWARE_SUBDIR}} + env | grep ^EESSI | sort + ./check_missing_installations.sh diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 34bc06979e..cc00685a40 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -1,18 +1,21 @@ # documentation: https://help.github.com/en/articles/workflow-syntax-for-github-actions name: Tests on: [push, pull_request] +permissions: + contents: read # to fetch code (actions/checkout) jobs: build: - runs-on: ubuntu-18.04 + runs-on: ubuntu-20.04 strategy: matrix: python: [3.6, 3.7, 3.8, 3.9, '3.10'] fail-fast: false steps: - - uses: actions/checkout@v2 + - name: checkout + uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0 - name: set up Python - uses: actions/setup-python@v1 + uses: actions/setup-python@13ae5bb136fac2878aff31522b9efb785519f984 # v4.3.0 with: python-version: ${{matrix.python}} architecture: x64 diff --git a/.github/workflows/tests_archdetect.yml b/.github/workflows/tests_archdetect.yml new file mode 100644 index 0000000000..618f6eb142 --- /dev/null +++ b/.github/workflows/tests_archdetect.yml @@ -0,0 +1,36 @@ +# documentation: https://help.github.com/en/articles/workflow-syntax-for-github-actions +name: Tests for eessi_archdetect.sh +on: [push, pull_request] +permissions: + contents: read # to fetch code (actions/checkout) +jobs: + build: + runs-on: ubuntu-20.04 + strategy: + matrix: + proc_cpuinfo: + - x86_64/intel/haswell/archspec-linux-E5-2680-v3 + - x86_64/intel/skylake_avx512/archspec-linux-6132 + - x86_64/amd/zen2/Azure-CentOS7-7V12 + - x86_64/amd/zen3/Azure-CentOS7-7V73X + - ppc64le/power9le/unknown-power9le + - aarch64/arm/neoverse-n1/Azure-Ubuntu20-Altra + - aarch64/arm/neoverse-n1/AWS-awslinux-graviton2 + - aarch64/arm/neoverse-v1/AWS-awslinux-graviton3 + fail-fast: false + steps: + - name: checkout + uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0 + + - name: test eessi_archdetect.sh + run: | + export EESSI_MACHINE_TYPE=${{matrix.proc_cpuinfo}} + export EESSI_MACHINE_TYPE=${EESSI_MACHINE_TYPE%%/*} + export EESSI_PROC_CPUINFO=./tests/archdetect/${{matrix.proc_cpuinfo}}.cpuinfo + CPU_ARCH=$(./init/eessi_archdetect.sh cpupath) + if [[ $CPU_ARCH == "$( cat ./tests/archdetect/${{matrix.proc_cpuinfo}}.output )" ]]; then + echo "Test for ${{matrix.proc_cpuinfo}} PASSED: $CPU_ARCH" >&2 + else + echo "Test for ${{matrix.proc_cpuinfo}} FAILED: $CPU_ARCH" >&2 + exit 1 + fi diff --git a/.github/workflows/tests_init.yml b/.github/workflows/tests_init.yml index 027cc1a540..417b7851f1 100644 --- a/.github/workflows/tests_init.yml +++ b/.github/workflows/tests_init.yml @@ -1,18 +1,21 @@ # documentation: https://help.github.com/en/articles/workflow-syntax-for-github-actions name: Tests for init scripts on: [push, pull_request] +permissions: + contents: read # to fetch code (actions/checkout) jobs: build: - runs-on: ubuntu-18.04 + runs-on: ubuntu-20.04 strategy: matrix: python: [3.6, 3.7, 3.8, 3.9, '3.10'] fail-fast: false steps: - - uses: actions/checkout@v2 + - name: checkout + uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0 - name: set up Python - uses: actions/setup-python@v1 + uses: actions/setup-python@13ae5bb136fac2878aff31522b9efb785519f984 # v4.3.0 with: python-version: ${{matrix.python}} architecture: x64 diff --git a/.github/workflows/tests_scripts.yml b/.github/workflows/tests_scripts.yml index ca8c2b930a..9c4975c381 100644 --- a/.github/workflows/tests_scripts.yml +++ b/.github/workflows/tests_scripts.yml @@ -18,21 +18,26 @@ on: - run_in_compat_layer_env.sh - utils.sh - update_lmod_cache.sh +permissions: + contents: read # to fetch code (actions/checkout) jobs: build: runs-on: ubuntu-20.04 steps: - - uses: actions/checkout@v2 + - name: checkout + uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0 # see https://github.com/apptainer/singularity/issues/5390#issuecomment-899111181 - - name: install Singularity + - name: install Apptainer run: | sudo apt-get install alien alien --version - singularity_rpm=$(curl --silent -L https://dl.fedoraproject.org/pub/epel/8/Everything/x86_64/Packages/s/ | grep singularity | sed 's/.*\(singularity[0-9._a-z-]*.rpm\).*/\1/g') - curl -OL https://dl.fedoraproject.org/pub/epel/8/Everything/x86_64/Packages/s/$singularity_rpm - sudo alien -d $singularity_rpm - sudo apt install ./singularity*.deb + apptainer_rpm=$(curl --silent -L https://dl.fedoraproject.org/pub/epel/8/Everything/x86_64/Packages/a/ | grep 'apptainer-[0-9]' | sed 's/.*\(apptainer[0-9._a-z-]*.rpm\).*/\1/g') + curl -OL https://dl.fedoraproject.org/pub/epel/8/Everything/x86_64/Packages/a/$apptainer_rpm + sudo alien -d $apptainer_rpm + sudo apt install ./apptainer*.deb + apptainer --version + # also check whether 'singularity' command is still provided by Apptainer installation singularity --version - name: test install_software_layer.sh script diff --git a/EESSI-pilot-install-software.sh b/EESSI-pilot-install-software.sh old mode 100755 new mode 100644 index d618d07579..4735d870b0 --- a/EESSI-pilot-install-software.sh +++ b/EESSI-pilot-install-software.sh @@ -10,8 +10,8 @@ display_help() { echo "usage: $0 [OPTIONS]" echo " -g | --generic - instructs script to build for generic architecture target" echo " -h | --help - display this usage information" - echo " -x | --http_proxy URL - provides URL for the environment variable http_proxy" - echo " -y | --https_proxy URL - provides URL for the environment variable https_proxy" + echo " -x | --http-proxy URL - provides URL for the environment variable http_proxy" + echo " -y | --https-proxy URL - provides URL for the environment variable https_proxy" } POSITIONAL_ARGS=() @@ -97,7 +97,12 @@ if [[ "$EASYBUILD_OPTARCH" == "GENERIC" ]]; then fi echo ">> Determining software subdirectory to use for current build host..." -export EESSI_SOFTWARE_SUBDIR_OVERRIDE=$(python3 $TOPDIR/eessi_software_subdir.py $DETECTION_PARAMETERS) +if [ -z $EESSI_SOFTWARE_SUBDIR_OVERRIDE ]; then + export EESSI_SOFTWARE_SUBDIR_OVERRIDE=$(python3 $TOPDIR/eessi_software_subdir.py $DETECTION_PARAMETERS) + echo ">> Determined \$EESSI_SOFTWARE_SUBDIR_OVERRIDE via 'eessi_software_subdir.py $DETECTION_PARAMETERS' script" +else + echo ">> Picking up pre-defined \$EESSI_SOFTWARE_SUBDIR_OVERRIDE: ${EESSI_SOFTWARE_SUBDIR_OVERRIDE}" +fi # Set all the EESSI environment variables (respecting $EESSI_SOFTWARE_SUBDIR_OVERRIDE) # $EESSI_SILENT - don't print any messages @@ -123,7 +128,7 @@ else fi echo ">> Configuring EasyBuild..." -source configure_easybuild +source $TOPDIR/configure_easybuild echo ">> Setting up \$MODULEPATH..." # make sure no modules are loaded @@ -161,11 +166,17 @@ else export PATH=${EB_TMPDIR}/bin:$PATH export PYTHONPATH=$(ls -d ${EB_TMPDIR}/lib/python*/site-packages):$PYTHONPATH eb_install_out=${TMPDIR}/eb_install.out + ok_msg="Latest EasyBuild release installed, let's go!" + fail_msg="Installing latest EasyBuild release failed, that's not good... (output: ${eb_install_out})" eb --install-latest-eb-release &> ${eb_install_out} + check_exit_code $? "${ok_msg}" "${fail_msg}" eb --search EasyBuild-${REQ_EB_VERSION}.eb | grep EasyBuild-${REQ_EB_VERSION}.eb > /dev/null if [[ $? -eq 0 ]]; then + ok_msg="EasyBuild v${REQ_EB_VERSION} installed, alright!" + fail_msg="Installing EasyBuild v${REQ_EB_VERSION}, yikes! (output: ${eb_install_out})" eb EasyBuild-${REQ_EB_VERSION}.eb >> ${eb_install_out} 2>&1 + check_exit_code $? "${ok_msg}" "${fail_msg}" fi module avail easybuild/${REQ_EB_VERSION} &> ${ml_av_easybuild_out} @@ -205,167 +216,216 @@ fail_msg="Failed to install Java, woopsie..." $EB Java-11.eb --robot --include-easyblocks-from-pr 2557 check_exit_code $? "${ok_msg}" "${fail_msg}" -## install GCC for foss/2020a -#export GCC_EC="GCC-9.3.0.eb" -#echo ">> Starting slow with ${GCC_EC}..." -#ok_msg="${GCC_EC} installed, yippy! Off to a good start..." -#fail_msg="Installation of ${GCC_EC} failed!" -## pull in easyconfig from https://github.com/easybuilders/easybuild-easyconfigs/pull/14453, -## which includes patch to fix build of GCC 9.3 when recent kernel headers are in place -#$EB ${GCC_EC} --robot --from-pr 14453 GCCcore-9.3.0.eb -#check_exit_code $? "${ok_msg}" "${fail_msg}" - -##export CaDiCaL_EC="CaDiCaL-1.3.0-GCC-9.3.0.eb" -##echo ">> Installing ${CaDiCaL_EC}..." -##ok_msg="${CaDiCaL_EC} installed, let's solve some problems!" -##fail_msg="Installation of ${CaDiCaL_EC} failed, that's a pity..." -##$EB ${CaDiCaL_EC} --robot -##check_exit_code $? "${ok_msg}" "${fail_msg}" - -##### install CMake with custom easyblock that patches CMake when --sysroot is used -####echo ">> Install CMake with fixed easyblock to take into account --sysroot" -####ok_msg="CMake installed!" -####fail_msg="Installation of CMake failed, what the ..." -####$EB CMake-3.16.4-GCCcore-9.3.0.eb --robot --include-easyblocks-from-pr 2248 -####check_exit_code $? "${ok_msg}" "${fail_msg}" -#### -##### If we're building OpenBLAS for GENERIC, we need https://github.com/easybuilders/easybuild-easyblocks/pull/1946 -####echo ">> Installing OpenBLAS..." -####ok_msg="Done with OpenBLAS!" -####fail_msg="Installation of OpenBLAS failed!" -####if [[ $GENERIC -eq 1 ]]; then -#### echo_yellow ">> Using https://github.com/easybuilders/easybuild-easyblocks/pull/1946 to build generic OpenBLAS." -#### $EB --include-easyblocks-from-pr 1946 OpenBLAS-0.3.9-GCC-9.3.0.eb --robot -####else -#### $EB OpenBLAS-0.3.9-GCC-9.3.0.eb --robot -####fi -####check_exit_code $? "${ok_msg}" "${fail_msg}" -#### -####echo ">> Installing OpenMPI..." -####ok_msg="OpenMPI installed, w00!" -####fail_msg="Installation of OpenMPI failed, that's not good..." -####$EB OpenMPI-4.0.3-GCC-9.3.0.eb --robot -####check_exit_code $? "${ok_msg}" "${fail_msg}" -#### -##### install Python -####echo ">> Install Python 2.7.18 and Python 3.8.2..." -####ok_msg="Python 2.7.18 and 3.8.2 installed, yaay!" -####fail_msg="Installation of Python failed, oh no..." -####$EB Python-2.7.18-GCCcore-9.3.0.eb Python-3.8.2-GCCcore-9.3.0.eb --robot -####check_exit_code $? "${ok_msg}" "${fail_msg}" -#### -####echo ">> Installing Perl..." -####ok_msg="Perl installed, making progress..." -####fail_msg="Installation of Perl failed, this never happens..." -##### use enhanced Perl easyblock from https://github.com/easybuilders/easybuild-easyblocks/pull/2640 -##### to avoid trouble when using long installation prefix (for example with EESSI pilot 2021.12 on skylake_avx512...) -####$EB Perl-5.30.2-GCCcore-9.3.0.eb --robot --include-easyblocks-from-pr 2640 -####check_exit_code $? "${ok_msg}" "${fail_msg}" -#### -####echo ">> Installing Qt5..." -####ok_msg="Qt5 installed, phieuw, that was a big one!" -####fail_msg="Installation of Qt5 failed, that's frustrating..." -####$EB Qt5-5.14.1-GCCcore-9.3.0.eb --robot -####check_exit_code $? "${ok_msg}" "${fail_msg}" -#### -##### skip test step when installing SciPy-bundle on aarch64, -##### to dance around problem with broken numpy tests; -##### cfr. https://github.com/easybuilders/easybuild-easyconfigs/issues/11959 -####echo ">> Installing SciPy-bundle" -####ok_msg="SciPy-bundle installed, yihaa!" -####fail_msg="SciPy-bundle installation failed, bummer..." -####SCIPY_EC=SciPy-bundle-2020.03-foss-2020a-Python-3.8.2.eb -####if [[ "$(uname -m)" == "aarch64" ]]; then -#### $EB $SCIPY_EC --robot --skip-test-step -####else -#### $EB $SCIPY_EC --robot -####fi -####check_exit_code $? "${ok_msg}" "${fail_msg}" -#### -####echo ">> Installing GROMACS..." -####ok_msg="GROMACS installed, wow!" -####fail_msg="Installation of GROMACS failed, damned..." -####$EB GROMACS-2020.1-foss-2020a-Python-3.8.2.eb GROMACS-2020.4-foss-2020a-Python-3.8.2.eb --robot -####check_exit_code $? "${ok_msg}" "${fail_msg}" -#### -##### note: compiling OpenFOAM is memory hungry (16GB is not enough with 8 cores)! -##### 32GB is sufficient to build with 16 cores -####echo ">> Installing OpenFOAM (twice!)..." -####ok_msg="OpenFOAM installed, now we're talking!" -####fail_msg="Installation of OpenFOAM failed, we were so close..." -####$EB OpenFOAM-8-foss-2020a.eb OpenFOAM-v2006-foss-2020a.eb --robot -####check_exit_code $? "${ok_msg}" "${fail_msg}" -#### -####if [ ! "${EESSI_CPU_FAMILY}" = "ppc64le" ]; then -#### echo ">> Installing QuantumESPRESSO..." -#### ok_msg="QuantumESPRESSO installed, let's go quantum!" -#### fail_msg="Installation of QuantumESPRESSO failed, did somebody observe it?!" -#### $EB QuantumESPRESSO-6.6-foss-2020a.eb --robot -#### check_exit_code $? "${ok_msg}" "${fail_msg}" -####fi -#### -####echo ">> Installing R 4.0.0 (better be patient)..." -####ok_msg="R installed, wow!" -####fail_msg="Installation of R failed, so sad..." -####$EB R-4.0.0-foss-2020a.eb --robot --parallel-extensions-install --experimental -####check_exit_code $? "${ok_msg}" "${fail_msg}" -#### -####echo ">> Installing Bioconductor 3.11 bundle..." -####ok_msg="Bioconductor installed, enjoy!" -####fail_msg="Installation of Bioconductor failed, that's annoying..." -####$EB R-bundle-Bioconductor-3.11-foss-2020a-R-4.0.0.eb --robot -####check_exit_code $? "${ok_msg}" "${fail_msg}" -#### -####echo ">> Installing TensorFlow 2.3.1..." -####ok_msg="TensorFlow 2.3.1 installed, w00!" -####fail_msg="Installation of TensorFlow failed, why am I not surprised..." -####$EB TensorFlow-2.3.1-foss-2020a-Python-3.8.2.eb --robot --include-easyblocks-from-pr 2218 -####check_exit_code $? "${ok_msg}" "${fail_msg}" -#### -####echo ">> Installing Horovod 0.21.3..." -####ok_msg="Horovod installed! Go do some parallel training!" -####fail_msg="Horovod installation failed. There comes the headache..." -####$EB Horovod-0.21.3-foss-2020a-TensorFlow-2.3.1-Python-3.8.2.eb --robot -####check_exit_code $? "${ok_msg}" "${fail_msg}" -#### -####if [ ! "${EESSI_CPU_FAMILY}" = "ppc64le" ]; then -#### -#### echo ">> Installing code-server 3.7.3..." -#### ok_msg="code-server 3.7.3 installed, now you can use VS Code!" -#### fail_msg="Installation of code-server failed, that's going to be hard to fix..." -#### $EB code-server-3.7.3.eb --robot -#### check_exit_code $? "${ok_msg}" "${fail_msg}" -####fi -#### -####echo ">> Installing RStudio-Server 1.3.1093..." -####ok_msg="RStudio-Server installed, enjoy!" -####fail_msg="Installation of RStudio-Server failed, might be OS deps..." -####$EB RStudio-Server-1.3.1093-foss-2020a-Java-11-R-4.0.0.eb --robot -####check_exit_code $? "${ok_msg}" "${fail_msg}" -#### -####echo ">> Installing OSU-Micro-Benchmarks 5.6.3..." -####ok_msg="OSU-Micro-Benchmarks installed, yihaa!" -####fail_msg="Installation of OSU-Micro-Benchmarks failed, that's unexpected..." -####$EB OSU-Micro-Benchmarks-5.6.3-gompi-2020a.eb -r -####check_exit_code $? "${ok_msg}" "${fail_msg}" -#### -####echo ">> Installing Spark 3.1.1..." -####ok_msg="Spark installed, set off the fireworks!" -####fail_msg="Installation of Spark failed, no fireworks this time..." -####$EB Spark-3.1.1-foss-2020a-Python-3.8.2.eb -r -####check_exit_code $? "${ok_msg}" "${fail_msg}" -#### -####echo ">> Installing IPython 7.15.0..." -####ok_msg="IPython installed, launch your Jupyter Notebooks!" -####fail_msg="Installation of IPython failed, that's unexpected..." -####$EB IPython-7.15.0-foss-2020a-Python-3.8.2.eb -r -####check_exit_code $? "${ok_msg}" "${fail_msg}" -#### -####echo ">> Installing WRF 3.9.1.1..." -####ok_msg="WRF installed, it's getting hot in here!" -####fail_msg="Installation of WRF failed, that's unexpected..." -####OMPI_MCA_pml=ucx UCX_TLS=tcp $EB WRF-3.9.1.1-foss-2020a-dmpar.eb -r --include-easyblocks-from-pr 2648 -####check_exit_code $? "${ok_msg}" "${fail_msg}" +# install GCC for foss/2020a +export GCC_EC="GCC-9.3.0.eb" +echo ">> Starting slow with ${GCC_EC}..." +ok_msg="${GCC_EC} installed, yippy! Off to a good start..." +fail_msg="Installation of ${GCC_EC} failed!" +# pull in easyconfig from https://github.com/easybuilders/easybuild-easyconfigs/pull/14453, +# which includes patch to fix build of GCC 9.3 when recent kernel headers are in place +$EB ${GCC_EC} --robot --from-pr 14453 GCCcore-9.3.0.eb +check_exit_code $? "${ok_msg}" "${fail_msg}" + +# install CMake with custom easyblock that patches CMake when --sysroot is used +echo ">> Install CMake with fixed easyblock to take into account --sysroot" +ok_msg="CMake installed!" +fail_msg="Installation of CMake failed, what the ..." +$EB CMake-3.16.4-GCCcore-9.3.0.eb --robot --include-easyblocks-from-pr 2248 +check_exit_code $? "${ok_msg}" "${fail_msg}" + +# If we're building OpenBLAS for GENERIC, we need https://github.com/easybuilders/easybuild-easyblocks/pull/1946 +echo ">> Installing OpenBLAS..." +ok_msg="Done with OpenBLAS!" +fail_msg="Installation of OpenBLAS failed!" +if [[ $GENERIC -eq 1 ]]; then + echo_yellow ">> Using https://github.com/easybuilders/easybuild-easyblocks/pull/1946 to build generic OpenBLAS." + openblas_include_easyblocks_from_pr="--include-easyblocks-from-pr 1946" +else + openblas_include_easyblocks_from_pr='' +fi +$EB $openblas_include_easyblocks_from_pr OpenBLAS-0.3.9-GCC-9.3.0.eb --robot +check_exit_code $? "${ok_msg}" "${fail_msg}" + +echo ">> Installing OpenMPI..." +ok_msg="OpenMPI installed, w00!" +fail_msg="Installation of OpenMPI failed, that's not good..." +$EB OpenMPI-4.0.3-GCC-9.3.0.eb --robot +check_exit_code $? "${ok_msg}" "${fail_msg}" + +# install Python +echo ">> Install Python 2.7.18 and Python 3.8.2..." +ok_msg="Python 2.7.18 and 3.8.2 installed, yaay!" +fail_msg="Installation of Python failed, oh no..." +$EB Python-2.7.18-GCCcore-9.3.0.eb Python-3.8.2-GCCcore-9.3.0.eb --robot +check_exit_code $? "${ok_msg}" "${fail_msg}" + +echo ">> Installing Perl..." +ok_msg="Perl installed, making progress..." +fail_msg="Installation of Perl failed, this never happens..." +# use enhanced Perl easyblock from https://github.com/easybuilders/easybuild-easyblocks/pull/2640 +# to avoid trouble when using long installation prefix (for example with EESSI pilot 2021.12 on skylake_avx512...) +$EB Perl-5.30.2-GCCcore-9.3.0.eb --robot --include-easyblocks-from-pr 2640 +check_exit_code $? "${ok_msg}" "${fail_msg}" + +echo ">> Installing Qt5..." +ok_msg="Qt5 installed, phieuw, that was a big one!" +fail_msg="Installation of Qt5 failed, that's frustrating..." +$EB Qt5-5.14.1-GCCcore-9.3.0.eb --robot +check_exit_code $? "${ok_msg}" "${fail_msg}" + +# skip test step when installing SciPy-bundle on aarch64, +# to dance around problem with broken numpy tests; +# cfr. https://github.com/easybuilders/easybuild-easyconfigs/issues/11959 +echo ">> Installing SciPy-bundle" +ok_msg="SciPy-bundle installed, yihaa!" +fail_msg="SciPy-bundle installation failed, bummer..." +SCIPY_EC=SciPy-bundle-2020.03-foss-2020a-Python-3.8.2.eb +if [[ "$(uname -m)" == "aarch64" ]]; then + $EB $SCIPY_EC --robot --skip-test-step +else + $EB $SCIPY_EC --robot +fi +check_exit_code $? "${ok_msg}" "${fail_msg}" + +echo ">> Installing GROMACS..." +ok_msg="GROMACS installed, wow!" +fail_msg="Installation of GROMACS failed, damned..." +$EB GROMACS-2020.1-foss-2020a-Python-3.8.2.eb GROMACS-2020.4-foss-2020a-Python-3.8.2.eb --robot +check_exit_code $? "${ok_msg}" "${fail_msg}" + +# note: compiling OpenFOAM is memory hungry (16GB is not enough with 8 cores)! +# 32GB is sufficient to build with 16 cores +echo ">> Installing OpenFOAM (twice!)..." +ok_msg="OpenFOAM installed, now we're talking!" +fail_msg="Installation of OpenFOAM failed, we were so close..." +$EB OpenFOAM-8-foss-2020a.eb OpenFOAM-v2006-foss-2020a.eb --robot +check_exit_code $? "${ok_msg}" "${fail_msg}" + +if [ ! "${EESSI_CPU_FAMILY}" = "ppc64le" ]; then + echo ">> Installing QuantumESPRESSO..." + ok_msg="QuantumESPRESSO installed, let's go quantum!" + fail_msg="Installation of QuantumESPRESSO failed, did somebody observe it?!" + $EB QuantumESPRESSO-6.6-foss-2020a.eb --robot + check_exit_code $? "${ok_msg}" "${fail_msg}" +fi + +echo ">> Installing R 4.0.0 (better be patient)..." +ok_msg="R installed, wow!" +fail_msg="Installation of R failed, so sad..." +$EB R-4.0.0-foss-2020a.eb --robot --parallel-extensions-install --experimental +check_exit_code $? "${ok_msg}" "${fail_msg}" + +echo ">> Installing Bioconductor 3.11 bundle..." +ok_msg="Bioconductor installed, enjoy!" +fail_msg="Installation of Bioconductor failed, that's annoying..." +$EB R-bundle-Bioconductor-3.11-foss-2020a-R-4.0.0.eb --robot +check_exit_code $? "${ok_msg}" "${fail_msg}" + +echo ">> Installing TensorFlow 2.3.1..." +ok_msg="TensorFlow 2.3.1 installed, w00!" +fail_msg="Installation of TensorFlow failed, why am I not surprised..." +$EB TensorFlow-2.3.1-foss-2020a-Python-3.8.2.eb --robot --include-easyblocks-from-pr 2218 +check_exit_code $? "${ok_msg}" "${fail_msg}" + +echo ">> Installing Horovod 0.21.3..." +ok_msg="Horovod installed! Go do some parallel training!" +fail_msg="Horovod installation failed. There comes the headache..." +$EB Horovod-0.21.3-foss-2020a-TensorFlow-2.3.1-Python-3.8.2.eb --robot +check_exit_code $? "${ok_msg}" "${fail_msg}" + +if [ ! "${EESSI_CPU_FAMILY}" = "ppc64le" ]; then + + echo ">> Installing code-server 3.7.3..." + ok_msg="code-server 3.7.3 installed, now you can use VS Code!" + fail_msg="Installation of code-server failed, that's going to be hard to fix..." + $EB code-server-3.7.3.eb --robot + check_exit_code $? "${ok_msg}" "${fail_msg}" +fi + +echo ">> Installing RStudio-Server 1.3.1093..." +ok_msg="RStudio-Server installed, enjoy!" +fail_msg="Installation of RStudio-Server failed, might be OS deps..." +$EB RStudio-Server-1.3.1093-foss-2020a-Java-11-R-4.0.0.eb --robot +check_exit_code $? "${ok_msg}" "${fail_msg}" + +echo ">> Installing OSU-Micro-Benchmarks 5.6.3..." +ok_msg="OSU-Micro-Benchmarks installed, yihaa!" +fail_msg="Installation of OSU-Micro-Benchmarks failed, that's unexpected..." +$EB OSU-Micro-Benchmarks-5.6.3-gompi-2020a.eb -r +check_exit_code $? "${ok_msg}" "${fail_msg}" + +echo ">> Installing Spark 3.1.1..." +ok_msg="Spark installed, set off the fireworks!" +fail_msg="Installation of Spark failed, no fireworks this time..." +$EB Spark-3.1.1-foss-2020a-Python-3.8.2.eb -r +check_exit_code $? "${ok_msg}" "${fail_msg}" + +echo ">> Installing IPython 7.15.0..." +ok_msg="IPython installed, launch your Jupyter Notebooks!" +fail_msg="Installation of IPython failed, that's unexpected..." +$EB IPython-7.15.0-foss-2020a-Python-3.8.2.eb -r +check_exit_code $? "${ok_msg}" "${fail_msg}" + +echo ">> Installing WRF 3.9.1.1..." +ok_msg="WRF installed, it's getting hot in here!" +fail_msg="Installation of WRF failed, that's unexpected..." +OMPI_MCA_pml=ucx UCX_TLS=tcp $EB WRF-3.9.1.1-foss-2020a-dmpar.eb -r --include-easyblocks-from-pr 2648 +check_exit_code $? "${ok_msg}" "${fail_msg}" + +echo ">> Installing Nextflow 22.10.1..." +ok_msg="Nextflow installed, the work must flow..." +fail_msg="Installation of Nextflow failed, that's unexpected..." +$EB -r --from-pr 16531 Nextflow-22.10.1.eb +check_exit_code $? "${ok_msg}" "${fail_msg}" + +echo ">> Installing OSU-Micro-Benchmarks/5.7.1-gompi-2021a..." +ok_msg="OSU-Micro-Benchmarks installed, yihaa!" +fail_msg="Installation of OSU-Micro-Benchmarks failed, that's unexpected..." +$EB OSU-Micro-Benchmarks-5.7.1-gompi-2021a.eb -r +check_exit_code $? "${ok_msg}" "${fail_msg}" + +echo ">> Installing EasyBuild 4.5.1..." +ok_msg="EasyBuild v4.5.1 installed" +fail_msg="EasyBuild v4.5.1 failed to install" +$EB --from-pr 14545 --include-easyblocks-from-pr 2805 +check_exit_code $? "${ok_msg}" "${fail_msg}" + +LMOD_IGNORE_CACHE=1 module swap EasyBuild/4.5.1 +check_exit_code $? "Swapped to EasyBuild/4.5.1" "Couldn't swap to EasyBuild/4.5.1" + +echo ">> Installing SciPy-bundle with foss/2021a..." +ok_msg="SciPy-bundle with foss/2021a installed, welcome to the modern age" +fail_msg="Installation of SciPy-bundle with foss/2021a failed, back to the stone age..." +# use GCCcore easyconfig from https://github.com/easybuilders/easybuild-easyconfigs/pull/14454 +# which includes patch to fix installation with recent Linux kernel headers +$EB --from-pr 14454 GCCcore-10.3.0.eb --robot +# use enhanced Perl easyblock from https://github.com/easybuilders/easybuild-easyblocks/pull/2640 +# to avoid trouble when using long installation prefix (for example with EESSI pilot 2021.12 on skylake_avx512...) +$EB Perl-5.32.1-GCCcore-10.3.0.eb --robot --include-easyblocks-from-pr 2640 +# use enhanced CMake easyblock to patch CMake's UnixPaths.cmake script if --sysroot is set +# from https://github.com/easybuilders/easybuild-easyblocks/pull/2248 +$EB CMake-3.20.1-GCCcore-10.3.0.eb --robot --include-easyblocks-from-pr 2248 +# use Rust easyconfig from https://github.com/easybuilders/easybuild-easyconfigs/pull/14584 +# that includes patch to fix bootstrap problem when using alternate sysroot +$EB --from-pr 14584 Rust-1.52.1-GCCcore-10.3.0.eb --robot +# use OpenBLAS easyconfig from https://github.com/easybuilders/easybuild-easyconfigs/pull/15885 +# which includes a patch to fix installation on POWER +$EB $openblas_include_easyblocks_from_pr --from-pr 15885 OpenBLAS-0.3.15-GCC-10.3.0.eb --robot +# ignore failing FlexiBLAS tests when building on POWER; +# some tests are failing due to a segmentation fault due to "invalid memory reference", +# see also https://github.com/easybuilders/easybuild-easyconfigs/pull/12476; +# using -fstack-protector-strong -fstack-clash-protection should fix that, +# but it doesn't for some reason when building for ppc64le/generic... +if [ "${EESSI_SOFTWARE_SUBDIR}" = "ppc64le/generic" ]; then + $EB FlexiBLAS-3.0.4-GCC-10.3.0.eb --ignore-test-failure +else + $EB FlexiBLAS-3.0.4-GCC-10.3.0.eb +fi + +$EB SciPy-bundle-2021.05-foss-2021a.eb --robot +check_exit_code $? "${ok_msg}" "${fail_msg}" + +### add packages here echo ">> Creating/updating Lmod cache..." export LMOD_RC="${EASYBUILD_INSTALLPATH}/.lmod/lmodrc.lua" @@ -376,14 +436,7 @@ fi $TOPDIR/update_lmod_cache.sh ${EPREFIX} ${EASYBUILD_INSTALLPATH} -echo ">> Checking for missing installations..." -ok_msg="No missing installations, party time!" -fail_msg="On no, some installations are still missing, how did that happen?!" -eb_missing_out=$TMPDIR/eb_missing.out -echo "No missing modules!" | tee ${eb_missing_out} -#$EB --easystack eessi-${EESSI_PILOT_VERSION}.yml --experimental --missing --robot $EASYBUILD_PREFIX/ebfiles_repo | tee ${eb_missing_out} -grep "No missing modules" ${eb_missing_out} > /dev/null -check_exit_code $? "${ok_msg}" "${fail_msg}" +$TOPDIR/check_missing_installations.sh echo ">> Cleaning up ${TMPDIR}..." rm -r ${TMPDIR} diff --git a/README.md b/README.md index 8b2268a836..4d463b1c5b 100644 --- a/README.md +++ b/README.md @@ -9,14 +9,14 @@ See also https://eessi.github.io/docs/software_layer. You can set up your environment by sourcing the init script: ``` -$ source /cvmfs/pilot.nessi.uiocloud.no/versions/2021.12/init/bash -Found EESSI pilot repo @ /cvmfs/pilot.nessi.uiocloud.no/2021.12! +$ source /cvmfs/pilot.eessi-hpc.org/versions/2021.12/init/bash +Found EESSI pilot repo @ /cvmfs/pilot.eessi-hpc.org/versions/2021.12! Derived subdirectory for software layer: x86_64/intel/haswell Using x86_64/intel/haswell subdirectory for software layer (HARDCODED) Initializing Lmod... -Prepending /cvmfs/pilot.nessi.uiocloud.no/versions/2021.12/software/x86_64/intel/haswell/modules/all to $MODULEPATH... +Prepending /cvmfs/pilot.eessi-hpc.org/versions/2021.12/software/x86_64/intel/haswell/modules/all to $MODULEPATH... Environment set up to use EESSI pilot software stack, have fun! -[EESSI pilot 2020.08] $ +[EESSI pilot 2021.12] $ ``` # License diff --git a/build_container.sh b/build_container.sh old mode 100755 new mode 100644 index 4ec194b91c..bddd3dfffc --- a/build_container.sh +++ b/build_container.sh @@ -1,8 +1,6 @@ #!/bin/bash -env | grep -i EASYBUILD_OPTARCH | sed -e 's/^/build_container.sh:/' - -BUILD_CONTAINER="docker://ghcr.io/eessi/build-node:debian10" +BUILD_CONTAINER="docker://ghcr.io/eessi/build-node:debian11" if [ $# -lt 2 ]; then echo "Usage: $0 " >&2 @@ -20,22 +18,6 @@ fi # make sure specified temporary directory exists mkdir -p $EESSI_TMPDIR -# make sure that specified location has support for extended attributes, -# since that's required by CernVM-FS -command -v attr &> /dev/null -if [ $? -eq 0 ]; then - testfile=$(mktemp -p $EESSI_TMPDIR) - attr -s test -V test $testfile > /dev/null - if [ $? -ne 0 ]; then - echo "ERROR: $EESSI_TMPDIR does not support extended attributes!" >&2 - #exit 2 - else - rm $testfile - fi -else - echo "WARNING: 'attr' command not available, so can't check support for extended attributes..." >&2 -fi - echo "Using $EESSI_TMPDIR as parent for temporary directories..." # create temporary directories @@ -45,7 +27,7 @@ mkdir -p $EESSI_TMPDIR/{var-lib-cvmfs,var-run-cvmfs} export SINGULARITY_CACHEDIR=$EESSI_TMPDIR/singularity_cache # take into account that $SINGULARITY_BIND may be defined already, to bind additional paths into the build container -BIND_PATHS="$EESSI_TMPDIR/var-run-cvmfs:/var/run/cvmfs,$EESSI_TMPDIR/var-lib-cvmfs:/var/lib/cvmfs,$EESSI_TMPDIR,nessi.uiocloud.no:/etc/cvmfs/keys/nessi.uiocloud.no,nessi.uiocloud.no.conf:/etc/cvmfs/domain.d/nessi.uiocloud.no.conf,default.local:/etc/cvmfs/default.local" +BIND_PATHS="$EESSI_TMPDIR/var-run-cvmfs:/var/run/cvmfs,$EESSI_TMPDIR/var-lib-cvmfs:/var/lib/cvmfs,$EESSI_TMPDIR" if [ -z $SINGULARITY_BIND ]; then export SINGULARITY_BIND="$BIND_PATHS" else @@ -58,8 +40,15 @@ if [ -z $SINGULARITY_HOME ]; then fi # set environment variables for fuse mounts in Singularity container -export EESSI_PILOT_READONLY="container:cvmfs2 pilot.nessi.uiocloud.no /cvmfs_ro/pilot.nessi.uiocloud.no" -export EESSI_PILOT_WRITABLE_OVERLAY="container:fuse-overlayfs -o lowerdir=/cvmfs_ro/pilot.nessi.uiocloud.no -o upperdir=$EESSI_TMPDIR/overlay-upper -o workdir=$EESSI_TMPDIR/overlay-work /cvmfs/pilot.nessi.uiocloud.no" +export EESSI_PILOT_READONLY="container:cvmfs2 pilot.eessi-hpc.org /cvmfs_ro/pilot.eessi-hpc.org" +export EESSI_PILOT_WRITABLE_OVERLAY="container:fuse-overlayfs -o lowerdir=/cvmfs_ro/pilot.eessi-hpc.org -o upperdir=$EESSI_TMPDIR/overlay-upper -o workdir=$EESSI_TMPDIR/overlay-work /cvmfs/pilot.eessi-hpc.org" + +# pass $EESSI_SOFTWARE_SUBDIR_OVERRIDE into build container (if set) +if [ ! -z ${EESSI_SOFTWARE_SUBDIR_OVERRIDE} ]; then + export SINGULARITYENV_EESSI_SOFTWARE_SUBDIR_OVERRIDE=${EESSI_SOFTWARE_SUBDIR_OVERRIDE} + # also specify via $APPTAINERENV_* (future proof, cfr. https://apptainer.org/docs/user/latest/singularity_compatibility.html#singularity-environment-variable-compatibility) + export APPTAINERENV_EESSI_SOFTWARE_SUBDIR_OVERRIDE=${EESSI_SOFTWARE_SUBDIR_OVERRIDE} +fi if [ "$SHELL_OR_RUN" == "shell" ]; then # start shell in Singularity container, with EESSI repository mounted with writable overlay diff --git a/check_missing_installations.sh b/check_missing_installations.sh new file mode 100755 index 0000000000..30f9cc6ff7 --- /dev/null +++ b/check_missing_installations.sh @@ -0,0 +1,31 @@ +#!/bin/bash +# +# Script to check for missing installations in EESSI pilot software stack (version 2021.12) +# +# author: Kenneth Hoste (@boegel) +# +# license: GPLv2 +# + +TOPDIR=$(dirname $(realpath $0)) + +if [ -z ${EESSI_PILOT_VERSION} ]; then + echo "ERROR: \${EESSI_PILOT_VERSION} must be set to run $0!" >&2 + exit 1 +fi + +LOCAL_TMPDIR=$(mktemp -d) + +source $TOPDIR/utils.sh + +source $TOPDIR/configure_easybuild + +echo ">> Checking for missing installations in ${EASYBUILD_INSTALLPATH}..." +ok_msg="No missing installations, party time!" +fail_msg="On no, some installations are still missing, how did that happen?!" +eb_missing_out=$LOCAL_TMPDIR/eb_missing.out +# we need to use --from-pr to pull in some easyconfigs that are not available in EasyBuild version being used +# PR #16531: Nextflow-22.10.1.eb +${EB:-eb} --from-pr 16531 --easystack eessi-${EESSI_PILOT_VERSION}.yml --experimental --missing | tee ${eb_missing_out} +grep "No missing modules" ${eb_missing_out} > /dev/null +check_exit_code $? "${ok_msg}" "${fail_msg}" diff --git a/eb_hooks.py b/eb_hooks.py index 653094266d..df7742f999 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -1,10 +1,12 @@ # Hooks to customize how EasyBuild installs software in EESSI # see https://docs.easybuild.io/en/latest/Hooks.html import os +import re from easybuild.tools.build_log import EasyBuildError, print_msg from easybuild.tools.config import build_option, update_build_option -from easybuild.tools.systemtools import AARCH64, POWER, get_cpu_architecture +from easybuild.tools.systemtools import AARCH64, POWER, X86_64, get_cpu_architecture, get_cpu_features +from easybuild.tools.toolchain.compiler import OPTARCH_GENERIC EESSI_RPATH_OVERRIDE_ATTR = 'orig_rpath_override_dirs' @@ -52,6 +54,13 @@ def parse_hook(ec, *args, **kwargs): PARSE_HOOKS[ec.name](ec, eprefix) +def pre_configure_hook(self, *args, **kwargs): + """Main pre-configure hook: trigger custom functions based on software name.""" + + if self.name in PRE_CONFIGURE_HOOKS: + PRE_CONFIGURE_HOOKS[self.name](self, *args, **kwargs) + + def pre_prepare_hook(self, *args, **kwargs): """Main pre-prepare hook: trigger custom functions.""" @@ -119,7 +128,7 @@ def ucx_eprefix(ec, eprefix): if ec.name == 'UCX': ec.update('configopts', '--with-sysroot=%s' % eprefix) ec.update('configopts', '--with-rdmacm=%s' % os.path.join(eprefix, 'usr')) - print_msg("Using custom configure option for %s: %s", ec.name, ec['configopts']) + print_msg("Using custom configure options for %s: %s", ec.name, ec['configopts']) else: raise EasyBuildError("UCX-specific hook triggered for non-UCX easyconfig?!") @@ -130,6 +139,33 @@ def pre_configure_hook(self, *args, **kwargs): PRE_CONFIGURE_HOOKS[self.name](self, *args, **kwargs) +def libfabric_disable_psm3_x86_64_generic(self, *args, **kwargs): + """Add --disable-psm3 to libfabric configure options when building with --optarch=GENERIC on x86_64.""" + if self.name == 'libfabric': + if get_cpu_architecture() == X86_64: + generic = build_option('optarch') == OPTARCH_GENERIC + no_avx = 'avx' not in get_cpu_features() + if generic or no_avx: + self.cfg.update('configopts', '--disable-psm3') + print_msg("Using custom configure options for %s: %s", self.name, self.cfg['configopts']) + else: + raise EasyBuildError("libfabric-specific hook triggered for non-libfabric easyconfig?!") + + +def metabat_preconfigure(self, *args, **kwargs): + """ + Pre-configure hook for MetaBAT: + - take into account that zlib is a filtered dependency, + and that there's no libz.a in the EESSI compat layer + """ + if self.name == 'MetaBAT': + configopts = self.cfg['configopts'] + regex = re.compile(r"\$EBROOTZLIB/lib/libz.a") + self.cfg['configopts'] = regex.sub('$EPREFIX/usr/lib64/libz.so', configopts) + else: + raise EasyBuildError("MetaBAT-specific hook triggered for non-MetaBAT easyconfig?!") + + def wrf_preconfigure(self, *args, **kwargs): """ Pre-configure hook for WRF: @@ -144,6 +180,7 @@ def wrf_preconfigure(self, *args, **kwargs): else: raise EasyBuildError("WRF-specific hook triggered for non-WRF easyconfig?!") + PARSE_HOOKS = { 'CGAL': cgal_toolchainopts_precise, 'fontconfig': fontconfig_add_fonts, @@ -151,5 +188,7 @@ def wrf_preconfigure(self, *args, **kwargs): } PRE_CONFIGURE_HOOKS = { + 'libfabric': libfabric_disable_psm3_x86_64_generic, + 'MetaBAT': metabat_preconfigure, 'WRF': wrf_preconfigure, } diff --git a/eessi-2021.12.yml b/eessi-2021.12.yml index 56659b3dc2..0ddc303b3a 100644 --- a/eessi-2021.12.yml +++ b/eessi-2021.12.yml @@ -1 +1,65 @@ software: + code-server: + toolchains: + SYSTEM: + versions: '3.7.3' + GROMACS: + toolchains: + foss-2020a: + versions: + '2020.1': + versionsuffix: -Python-3.8.2 + '2020.4': + versionsuffix: -Python-3.8.2 + Horovod: + toolchains: + foss-2020a: + versions: + '0.21.3': + versionsuffix: -TensorFlow-2.3.1-Python-3.8.2 + Nextflow: + toolchains: + SYSTEM: + versions: '22.10.1' + OpenFOAM: + toolchains: + foss-2020a: + versions: ['8', 'v2006'] + OSU-Micro-Benchmarks: + toolchains: + gompi-2020a: + versions: ['5.6.3'] + gompi-2021a: + versions: ['5.7.1'] + QuantumESPRESSO: + toolchains: + foss-2020a: + versions: ['6.6'] + R-bundle-Bioconductor: + toolchains: + foss-2020a: + versions: + '3.11': + versionsuffix: -R-4.0.0 + RStudio-Server: + toolchains: + foss-2020a: + versions: + '1.3.1093': + versionsuffix: -Java-11-R-4.0.0 + SciPy-bundle: + toolchains: + foss-2021a: + versions: ['2021.05'] + TensorFlow: + toolchains: + foss-2020a: + versions: + '2.3.1': + versionsuffix: -Python-3.8.2 + WRF: + toolchains: + foss-2020a: + versions: + '3.9.1.1': + versionsuffix: -dmpar \ No newline at end of file diff --git a/init/arch_specs/eessi_arch_arm.spec b/init/arch_specs/eessi_arch_arm.spec new file mode 100755 index 0000000000..92f32a76d8 --- /dev/null +++ b/init/arch_specs/eessi_arch_arm.spec @@ -0,0 +1,6 @@ +# ARM CPU architecture specifications +# Software path in EESSI | Vendor ID | List of defining CPU features +"aarch64/arm/neoverse-n1" "ARM" "asimd" # Ampere Altra +"aarch64/arm/neoverse-n1" "" "asimd" # AWS Graviton2 +"aarch64/arm/neoverse-v1" "ARM" "asimd svei8mm" +"aarch64/arm/neoverse-v1" "" "asimd svei8mm" # AWS Graviton3 diff --git a/init/arch_specs/eessi_arch_ppc.spec b/init/arch_specs/eessi_arch_ppc.spec new file mode 100755 index 0000000000..0932925046 --- /dev/null +++ b/init/arch_specs/eessi_arch_ppc.spec @@ -0,0 +1,3 @@ +# POWER CPU architecture specifications +# Software path in EESSI | Vendor ID | List of defining CPU features +"ppc64le/power9le" "" "POWER9" # IBM Power9 diff --git a/init/arch_specs/eessi_arch_x86.spec b/init/arch_specs/eessi_arch_x86.spec new file mode 100755 index 0000000000..8d01cb0c03 --- /dev/null +++ b/init/arch_specs/eessi_arch_x86.spec @@ -0,0 +1,6 @@ +# x86_64 CPU architecture specifications +# Software path in EESSI | Vendor ID | List of defining CPU features +"x86_64/intel/haswell" "GenuineIntel" "avx2 fma" # Intel Haswell, Broadwell +"x86_64/intel/skylake_avx512" "GenuineIntel" "avx2 fma avx512f avx512bw avx512cd avx512dq avx512vl" # Intel Skylake, Cascade Lake +"x86_64/amd/zen2" "AuthenticAMD" "avx2 fma" # AMD Rome +"x86_64/amd/zen3" "AuthenticAMD" "avx2 fma vaes" # AMD Milan, Milan-X diff --git a/init/eessi_archdetect.sh b/init/eessi_archdetect.sh new file mode 100755 index 0000000000..d2b6dacf04 --- /dev/null +++ b/init/eessi_archdetect.sh @@ -0,0 +1,143 @@ +#!/usr/bin/env bash +VERSION="1.0.0" + +# Logging +LOG_LEVEL="INFO" + +timestamp () { + date "+%Y-%m-%d %H:%M:%S" +} + +log () { + # Simple logger function + declare -A levels=([DEBUG]=0 [INFO]=1 [WARN]=2 [ERROR]=3) + msg_type="${1:-INFO}" + msg_body="${2:-'null'}" + + [ ${levels[$msg_type]} ] || log "ERROR" "Unknown log level $msg_type" + + # ignore messages below log level + [ ${levels[$msg_type]} -lt ${levels[$LOG_LEVEL]} ] && return 0 + # print log message to standard error + echo "$(timestamp) [$msg_type] $msg_body" >&2 + # exit after any error message + [ $msg_type == "ERROR" ] && exit 1 +} + +# Supported CPU specifications +update_arch_specs(){ + # Add contents of given spec file into an array + # 1: spec file with the additional specs + + [ ! -f "$1" ] && echo "[ERROR] update_arch_specs: spec file not found: $1" >&2 && exit 1 + local spec_file="$1" + while read spec_line; do + # format spec line as an array and append it to array with all CPU arch specs + cpu_arch_spec+=("(${spec_line})") + # remove comments from spec file + done < <(sed -E 's/(^|[\s\t])#.*$//g;/^\s*$/d' "$spec_file") +} + +# CPU specification of host system +get_cpuinfo(){ + # Return the value from cpuinfo for the matching key + # 1: string with key pattern + + [ -z "$1" ] && log "ERROR" "get_cpuinfo: missing key pattern in argument list" + cpuinfo_pattern="^${1}\s*:\s*" + + # case insensitive match of key pattern and delete key pattern from result + grep -i "$cpuinfo_pattern" ${EESSI_PROC_CPUINFO:-/proc/cpuinfo} | tail -n 1 | sed "s/$cpuinfo_pattern//i" +} + +check_allinfirst(){ + # Return true if all given arguments after the first are found in the first one + # 1: reference string of space separated values + # 2,3..: each additional argument is a single value to be found in the reference string + + [ -z "$1" ] && log "ERROR" "check_allinfirst: missing argument with reference string" + reference="$1" + shift + + for candidate in "$@"; do + [[ " $reference " == *" $candidate "* ]] || return 1 + done + return 0 +} + +cpupath(){ + # If EESSI_SOFTWARE_SUBDIR_OVERRIDE is set, use it + log "DEBUG" "cpupath: Override variable set as '$EESI_SOFTWARE_SUBDIR_OVERRIDE' " + [ $EESI_SOFTWARE_SUBDIR_OVERRIDE ] && echo ${EESI_SOFTWARE_SUBDIR_OVERRIDE} && exit + + # Identify the best matching CPU architecture from a list of supported specifications for the host CPU + # Return the path to the installation files in EESSI of the best matching architecture + local cpu_arch_spec=() + + # Identify the host CPU architecture + local machine_type=${EESSI_MACHINE_TYPE:-$(uname -m)} + log "DEBUG" "cpupath: Host CPU architecture identified as '$machine_type'" + + # Populate list of supported specs for this architecture + case $machine_type in + "x86_64") local spec_file="eessi_arch_x86.spec";; + "aarch64") local spec_file="eessi_arch_arm.spec";; + "ppc64le") local spec_file="eessi_arch_ppc.spec";; + *) log "ERROR" "cpupath: Unsupported CPU architecture $machine_type" + esac + # spec files are located in a subfolder with this script + local base_dir=$(dirname $(realpath $0)) + update_arch_specs "$base_dir/arch_specs/${spec_file}" + + # Identify the host CPU vendor + local cpu_vendor_tag="vendor[ _]id" + local cpu_vendor=$(get_cpuinfo "$cpu_vendor_tag") + log "DEBUG" "cpupath: CPU vendor of host system: '$cpu_vendor'" + + # Identify the host CPU flags or features + local cpu_flag_tag='flags' + # cpuinfo systems print different line identifiers, eg features, instead of flags + [ "${cpu_vendor}" == "ARM" ] && cpu_flag_tag='flags' + [ "${machine_type}" == "aarch64" ] && [ "${cpu_vendor}x" == "x" ] && cpu_flag_tag='features' + [ "${machine_type}" == "ppc64le" ] && cpu_flag_tag='cpu' + + local cpu_flags=$(get_cpuinfo "$cpu_flag_tag") + log "DEBUG" "cpupath: CPU flags of host system: '$cpu_flags'" + + # Default to generic CPU + local best_arch_match="generic" + + # Iterate over the supported CPU specifications to find the best match for host CPU + # Order of the specifications matters, the last one to match will be selected + for arch in "${cpu_arch_spec[@]}"; do + eval "arch_spec=$arch" + if [ "${cpu_vendor}x" == "${arch_spec[1]}x" ]; then + # each flag in this CPU specification must be found in the list of flags of the host + check_allinfirst "${cpu_flags[*]}" ${arch_spec[2]} && best_arch_match=${arch_spec[0]} && \ + log "DEBUG" "cpupath: host CPU best match updated to $best_arch_match" + fi + done + + log "INFO" "cpupath: best match for host CPU: $best_arch_match" + echo "$best_arch_match" +} + +# Parse command line arguments +USAGE="Usage: eessi_archdetect.sh [-h][-d] " + +while getopts 'hdv' OPTION; do + case "$OPTION" in + h) echo "$USAGE"; exit 0;; + d) LOG_LEVEL="DEBUG";; + v) echo "eessi_archdetect.sh v$VERSION"; exit 0;; + ?) echo "$USAGE"; exit 1;; + esac +done +shift "$(($OPTIND -1))" + +ARGUMENT=${1:-none} + +case "$ARGUMENT" in + "cpupath") cpupath; exit;; + *) echo "$USAGE"; log "ERROR" "Missing argument";; +esac diff --git a/init/eessi_environment_variables b/init/eessi_environment_variables index 199b1facc5..65f1e681b0 100644 --- a/init/eessi_environment_variables +++ b/init/eessi_environment_variables @@ -27,9 +27,16 @@ if [ -d $EESSI_PREFIX ]; then if [ -d $EESSI_EPREFIX ]; then # determine subdirectory in software layer - # note: eessi_software_subdir_for_host.py will pick up value from $EESSI_SOFTWARE_SUBDIR_OVERRIDE if it's defined! - export EESSI_EPREFIX_PYTHON=$EESSI_EPREFIX/usr/bin/python3 - export EESSI_SOFTWARE_SUBDIR=$($EESSI_EPREFIX_PYTHON ${EESSI_INIT_DIR_PATH}/eessi_software_subdir_for_host.py $EESSI_PREFIX) + if [ "$EESSI_USE_ARCHDETECT" == "1" ]; then + # if archdetect is enabled, use internal code + export EESSI_SOFTWARE_SUBDIR=$(${EESSI_INIT_DIR_PATH}/eessi_archdetect.sh cpupath) + echo "archdetect says ${EESSI_SOFTWARE_SUBDIR}" >> $output + else + # note: eessi_software_subdir_for_host.py will pick up value from $EESSI_SOFTWARE_SUBDIR_OVERRIDE if it's defined! + export EESSI_EPREFIX_PYTHON=$EESSI_EPREFIX/usr/bin/python3 + export EESSI_SOFTWARE_SUBDIR=$($EESSI_EPREFIX_PYTHON ${EESSI_INIT_DIR_PATH}/eessi_software_subdir_for_host.py $EESSI_PREFIX) + echo "archspec says ${EESSI_SOFTWARE_SUBDIR}" >> $output + fi if [ ! -z $EESSI_SOFTWARE_SUBDIR ]; then echo "Using ${EESSI_SOFTWARE_SUBDIR} as software subdirectory." >> $output diff --git a/run_in_compat_layer_env.sh b/run_in_compat_layer_env.sh index f05d14caae..077276eea8 100755 --- a/run_in_compat_layer_env.sh +++ b/run_in_compat_layer_env.sh @@ -10,5 +10,11 @@ if [ ! -d ${EESSI_COMPAT_LAYER_DIR} ]; then echo "ERROR: ${EESSI_COMPAT_LAYER_DIR} does not exist!" >&2 exit 1 fi -echo "Running '$@' in EESSI ${EESSI_PILOT_VERSION} compatibility layer environment..." -${EESSI_COMPAT_LAYER_DIR}/startprefix <<< "$@" + +INPUT=$(echo "$@") +if [ ! -z ${EESSI_SOFTWARE_SUBDIR_OVERRIDE} ]; then + INPUT="export EESSI_SOFTWARE_SUBDIR_OVERRIDE=${EESSI_SOFTWARE_SUBDIR_OVERRIDE}; ${INPUT}" +fi + +echo "Running '${INPUT}' in EESSI ${EESSI_PILOT_VERSION} compatibility layer environment..." +${EESSI_COMPAT_LAYER_DIR}/startprefix <<< "${INPUT}" diff --git a/tests/archdetect/aarch64/arm/neoverse-n1/AWS-awslinux-graviton2.cpuinfo b/tests/archdetect/aarch64/arm/neoverse-n1/AWS-awslinux-graviton2.cpuinfo new file mode 100644 index 0000000000..17f1615825 --- /dev/null +++ b/tests/archdetect/aarch64/arm/neoverse-n1/AWS-awslinux-graviton2.cpuinfo @@ -0,0 +1,8 @@ +processor : 0 +BogoMIPS : 243.75 +Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp ssbs +CPU implementer : 0x41 +CPU architecture: 8 +CPU variant : 0x3 +CPU part : 0xd0c +CPU revision : 1 diff --git a/tests/archdetect/aarch64/arm/neoverse-n1/AWS-awslinux-graviton2.output b/tests/archdetect/aarch64/arm/neoverse-n1/AWS-awslinux-graviton2.output new file mode 100644 index 0000000000..b4dc5e9f1b --- /dev/null +++ b/tests/archdetect/aarch64/arm/neoverse-n1/AWS-awslinux-graviton2.output @@ -0,0 +1 @@ +aarch64/arm/neoverse-n1 diff --git a/tests/archdetect/aarch64/arm/neoverse-n1/Azure-Ubuntu20-Altra.cpuinfo b/tests/archdetect/aarch64/arm/neoverse-n1/Azure-Ubuntu20-Altra.cpuinfo new file mode 100644 index 0000000000..49824722f2 --- /dev/null +++ b/tests/archdetect/aarch64/arm/neoverse-n1/Azure-Ubuntu20-Altra.cpuinfo @@ -0,0 +1,30 @@ +Architecture: aarch64 +CPU op-mode(s): 32-bit, 64-bit +Byte Order: Little Endian +CPU(s): 64 +On-line CPU(s) list: 0-63 +Thread(s) per core: 1 +Core(s) per socket: 64 +Socket(s): 1 +NUMA node(s): 1 +Vendor ID: ARM +Model: 1 +Model name: Neoverse-N1 +Stepping: r3p1 +BogoMIPS: 50.00 +L1d cache: 4 MiB +L1i cache: 4 MiB +L2 cache: 64 MiB +L3 cache: 32 MiB +NUMA node0 CPU(s): 0-63 +Vulnerability Itlb multihit: Not affected +Vulnerability L1tf: Not affected +Vulnerability Mds: Not affected +Vulnerability Meltdown: Mitigation; PTI +Vulnerability Mmio stale data: Not affected +Vulnerability Spec store bypass: Not affected +Vulnerability Spectre v1: Mitigation; __user pointer sanitization +Vulnerability Spectre v2: Mitigation; CSV2, BHB +Vulnerability Srbds: Not affected +Vulnerability Tsx async abort: Not affected +Flags: fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp diff --git a/tests/archdetect/aarch64/arm/neoverse-n1/Azure-Ubuntu20-Altra.output b/tests/archdetect/aarch64/arm/neoverse-n1/Azure-Ubuntu20-Altra.output new file mode 100644 index 0000000000..b4dc5e9f1b --- /dev/null +++ b/tests/archdetect/aarch64/arm/neoverse-n1/Azure-Ubuntu20-Altra.output @@ -0,0 +1 @@ +aarch64/arm/neoverse-n1 diff --git a/tests/archdetect/aarch64/arm/neoverse-v1/AWS-awslinux-graviton3.cpuinfo b/tests/archdetect/aarch64/arm/neoverse-v1/AWS-awslinux-graviton3.cpuinfo new file mode 100644 index 0000000000..01246f99da --- /dev/null +++ b/tests/archdetect/aarch64/arm/neoverse-v1/AWS-awslinux-graviton3.cpuinfo @@ -0,0 +1,8 @@ +processor : 0 +BogoMIPS : 2100.00 +Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm ssbs paca pacg dcpodp svei8mm svebf16 i8mm bf16 dgh rng +CPU implementer : 0x41 +CPU architecture: 8 +CPU variant : 0x1 +CPU part : 0xd40 +CPU revision : 1 diff --git a/tests/archdetect/aarch64/arm/neoverse-v1/AWS-awslinux-graviton3.output b/tests/archdetect/aarch64/arm/neoverse-v1/AWS-awslinux-graviton3.output new file mode 100644 index 0000000000..20db96d01f --- /dev/null +++ b/tests/archdetect/aarch64/arm/neoverse-v1/AWS-awslinux-graviton3.output @@ -0,0 +1 @@ +aarch64/arm/neoverse-v1 diff --git a/tests/archdetect/ppc64le/power9le/unknown-power9le.cpuinfo b/tests/archdetect/ppc64le/power9le/unknown-power9le.cpuinfo new file mode 100644 index 0000000000..4e6bdbb97b --- /dev/null +++ b/tests/archdetect/ppc64le/power9le/unknown-power9le.cpuinfo @@ -0,0 +1,4 @@ +processor : 0 +cpu : POWER9 (architected), altivec supported +clock : 2200.000000MHz +revision : 2.2 (pvr 004e 1202) diff --git a/tests/archdetect/ppc64le/power9le/unknown-power9le.output b/tests/archdetect/ppc64le/power9le/unknown-power9le.output new file mode 100644 index 0000000000..8decf544ea --- /dev/null +++ b/tests/archdetect/ppc64le/power9le/unknown-power9le.output @@ -0,0 +1 @@ +ppc64le/power9le diff --git a/tests/archdetect/x86_64/amd/zen2/Azure-CentOS7-7V12.cpuinfo b/tests/archdetect/x86_64/amd/zen2/Azure-CentOS7-7V12.cpuinfo new file mode 100644 index 0000000000..edf9c3e15b --- /dev/null +++ b/tests/archdetect/x86_64/amd/zen2/Azure-CentOS7-7V12.cpuinfo @@ -0,0 +1,27 @@ +Architecture: x86_64 +CPU op-mode(s): 32-bit, 64-bit +Byte Order: Little Endian +CPU(s): 120 +On-line CPU(s) list: 0-119 +Thread(s) per core: 1 +Core(s) per socket: 60 +Socket(s): 2 +NUMA node(s): 4 +Vendor ID: AuthenticAMD +CPU family: 23 +Model: 49 +Model name: AMD EPYC 7V12 64-Core Processor +Stepping: 0 +CPU MHz: 2445.424 +BogoMIPS: 4890.84 +Hypervisor vendor: Microsoft +Virtualization type: full +L1d cache: 32K +L1i cache: 32K +L2 cache: 512K +L3 cache: 16384K +NUMA node0 CPU(s): 0-29 +NUMA node1 CPU(s): 30-59 +NUMA node2 CPU(s): 60-89 +NUMA node3 CPU(s): 90-119 +Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm art rep_good nopl extd_apicid aperfmperf eagerfpu pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm cmp_legacy cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw topoext retpoline_amd ssbd vmmcall fsgsbase bmi1 avx2 smep bmi2 rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 clzero xsaveerptr arat umip diff --git a/tests/archdetect/x86_64/amd/zen2/Azure-CentOS7-7V12.output b/tests/archdetect/x86_64/amd/zen2/Azure-CentOS7-7V12.output new file mode 100644 index 0000000000..9e4da0c5d6 --- /dev/null +++ b/tests/archdetect/x86_64/amd/zen2/Azure-CentOS7-7V12.output @@ -0,0 +1 @@ +x86_64/amd/zen2 diff --git a/tests/archdetect/x86_64/amd/zen3/Azure-CentOS7-7V73X.cpuinfo b/tests/archdetect/x86_64/amd/zen3/Azure-CentOS7-7V73X.cpuinfo new file mode 100644 index 0000000000..24961c80c3 --- /dev/null +++ b/tests/archdetect/x86_64/amd/zen3/Azure-CentOS7-7V73X.cpuinfo @@ -0,0 +1,27 @@ +Architecture: x86_64 +CPU op-mode(s): 32-bit, 64-bit +Byte Order: Little Endian +CPU(s): 120 +On-line CPU(s) list: 0-119 +Thread(s) per core: 1 +Core(s) per socket: 60 +Socket(s): 2 +NUMA node(s): 4 +Vendor ID: AuthenticAMD +CPU family: 25 +Model: 1 +Model name: AMD EPYC 7V73X 64-Core Processor +Stepping: 2 +CPU MHz: 1846.550 +BogoMIPS: 3693.10 +Hypervisor vendor: Microsoft +Virtualization type: full +L1d cache: 32K +L1i cache: 32K +L2 cache: 512K +L3 cache: 98304K +NUMA node0 CPU(s): 0-29 +NUMA node1 CPU(s): 30-59 +NUMA node2 CPU(s): 60-89 +NUMA node3 CPU(s): 90-119 +Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm art rep_good nopl extd_apicid aperfmperf eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm cmp_legacy cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw topoext perfctr_core invpcid_single retpoline_amd vmmcall fsgsbase bmi1 avx2 smep bmi2 invpcid rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 clzero xsaveerptr arat umip vaes vpclmulqdq diff --git a/tests/archdetect/x86_64/amd/zen3/Azure-CentOS7-7V73X.output b/tests/archdetect/x86_64/amd/zen3/Azure-CentOS7-7V73X.output new file mode 100644 index 0000000000..341c027cc2 --- /dev/null +++ b/tests/archdetect/x86_64/amd/zen3/Azure-CentOS7-7V73X.output @@ -0,0 +1 @@ +x86_64/amd/zen3 diff --git a/tests/archdetect/x86_64/intel/haswell/archspec-linux-E5-2680-v3.cpuinfo b/tests/archdetect/x86_64/intel/haswell/archspec-linux-E5-2680-v3.cpuinfo new file mode 100644 index 0000000000..7bb5aa958f --- /dev/null +++ b/tests/archdetect/x86_64/intel/haswell/archspec-linux-E5-2680-v3.cpuinfo @@ -0,0 +1,25 @@ +processor : 0 +vendor_id : GenuineIntel +cpu family : 6 +model : 63 +model name : Intel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz +stepping : 2 +microcode : 0x3c +cpu MHz : 1757.910 +cache size : 30720 KB +physical id : 0 +siblings : 12 +core id : 0 +cpu cores : 12 +apicid : 0 +initial apicid : 0 +fpu : yes +fpu_exception : yes +cpuid level : 15 +wp : yes +flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm epb invpcid_single tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid cqm xsaveopt cqm_llc cqm_occup_llc ibpb ibrs stibp dtherm arat pln pts spec_ctrl intel_stibp +bogomips : 4987.97 +clflush size : 64 +cache_alignment : 64 +address sizes : 46 bits physical, 48 bits virtual +power management: diff --git a/tests/archdetect/x86_64/intel/haswell/archspec-linux-E5-2680-v3.output b/tests/archdetect/x86_64/intel/haswell/archspec-linux-E5-2680-v3.output new file mode 100644 index 0000000000..5af6120686 --- /dev/null +++ b/tests/archdetect/x86_64/intel/haswell/archspec-linux-E5-2680-v3.output @@ -0,0 +1 @@ +x86_64/intel/haswell diff --git a/tests/archdetect/x86_64/intel/skylake_avx512/archspec-linux-6132.cpuinfo b/tests/archdetect/x86_64/intel/skylake_avx512/archspec-linux-6132.cpuinfo new file mode 100644 index 0000000000..e9ab1987dd --- /dev/null +++ b/tests/archdetect/x86_64/intel/skylake_avx512/archspec-linux-6132.cpuinfo @@ -0,0 +1,25 @@ +processor : 0 +vendor_id : GenuineIntel +cpu family : 6 +model : 85 +model name : Intel(R) Xeon(R) Gold 6132 CPU @ 2.60GHz +stepping : 4 +microcode : 0x200004d +cpu MHz : 2600.000 +cache size : 19712 KB +physical id : 0 +siblings : 14 +core id : 0 +cpu cores : 14 +apicid : 0 +initial apicid : 0 +fpu : yes +fpu_exception : yes +cpuid level : 22 +wp : yes +flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb cat_l3 cdp_l3 invpcid_single intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm mpx rdt_a avx512f avx512dq rdseed adx smap clflushopt clwb avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local ibpb ibrs stibp dtherm ida arat pln pts spec_ctrl intel_stibp ssbd +bogomips : 5200.00 +clflush size : 64 +cache_alignment : 64 +address sizes : 46 bits physical, 48 bits virtual +power management: diff --git a/tests/archdetect/x86_64/intel/skylake_avx512/archspec-linux-6132.output b/tests/archdetect/x86_64/intel/skylake_avx512/archspec-linux-6132.output new file mode 100644 index 0000000000..918c33245c --- /dev/null +++ b/tests/archdetect/x86_64/intel/skylake_avx512/archspec-linux-6132.output @@ -0,0 +1 @@ +x86_64/intel/skylake_avx512