1. PY-SCIPY crashes during installation
Spack has a ready-made recipe for installing the scipy
module for Python, which is called py-scipy
. During IMAS eco-system installation, while providing necessary python packages the one of which is the py-scipy,
the installation of the py-scipy
has crashed. The error message is ambiguous and is shown below:
pip._internal.exceptions.InstallationError: Could not build wheels for scipy, which is required to install pyproject.toml-based projects
1.1. How to reproduce issue
- Log in to Marconi cluster
Load
intel/pe-xe-2020–binary
modulemodule load intel/pe-xe-2020--binary
Load
intelmpi/2020--binary
modulemodule load intelmpi/2020--binary
Clone spack repository
git clone https://github.com/spack/spack.git
To ensure the same environment set the
packages.yaml
file as below. This only adds packages marked as external:Source SPACK to your environment:
source spack/share/spack/setup-env.sh
Install Python:
spack install python@3.9.10 +tkinter %intel@19.1.3.304 cflags="-fPIC" cxxflags="-fPIC" cppflags="-fPIC"
Install py-matplotlib:
spack install --fail-fast py-matplotlib backend=tkagg %intel@19.1.3.304 cflags="-fPIC" cxxflags="-fPIC" cppflags="-fPIC"
Install py-cython:
spack install --fail-fast py-cython %intel@19.1.3.304 cflags="-fPIC" cxxflags="-fPIC" cppflags="-fPIC"
Install py-pyyaml:
spack install --fail-fast py-pyyaml %intel@19.1.3.304 cflags="-fPIC" cxxflags="-fPIC" cppflags="-fPIC"
Install py-scipy:
spack install --fail-fast py-scipy %intel@19.1.3.304 cflags="-fPIC" cxxflags="-fPIC" cppflags="-fPIC"
During this installation you should get an error:
pip._internal.exceptions.InstallationError: Could not build wheels for scipy, which is required to install pyproject.toml-based projects
1.2. Solution
After many attempts and tests, a solution was found. The py-scipy
package must be the first Python package to be installed before any other.
- Log in to Marconi cluster
Load
intel/pe-xe-2020–binary
modulemodule load intel/pe-xe-2020--binary
Load
intelmpi/2020--binary
modulemodule load intelmpi/2020--binary
Clone spack repository
git clone https://github.com/spack/spack.git
To ensure the same environment set the
packages.yaml
file as below. This only adds packages marked as external:Source SPACK to your environment:
source spack/share/spack/setup-env.sh
Install Python:
spack install python@3.9.10 +tkinter %intel@19.1.3.304 cflags="-fPIC" cxxflags="-fPIC" cppflags="-fPIC"
Install py-scipy:
spack install --fail-fast py-scipy %intel@19.1.3.304 cflags="-fPIC" cxxflags="-fPIC" cppflags="-fPIC"
Install py-matplotlib:
spack install --fail-fast py-matplotlib backend=tkagg %intel@19.1.3.304 cflags="-fPIC" cxxflags="-fPIC" cppflags="-fPIC"
Install py-cython:
spack install --fail-fast py-cython %intel@19.1.3.304 cflags="-fPIC" cxxflags="-fPIC" cppflags="-fPIC"
Install py-pyyaml:
spack install --fail-fast py-pyyaml %intel@19.1.3.304 cflags="-fPIC" cxxflags="-fPIC" cppflags="-fPIC"
2. BLITZ and missing -pthread
flag
After installing all dependencies, the very next step is to install IMAS itself. During this installation the cpp interface component is complaining about blitz not being compiled in thread-safe
manner and suggests that maybe the -pthread
flag was missing during Blitz compilation/installation. The bad news is that the whole eco-system was compiled using at least those two flags: '-fPIC -pthread'
, therefore the error is confusing. Below you can find an error message from reproduction attempt:
make -C ./src/3.36.0/ual/4.10.1/examples/cpp all || exit 1 make[2]: Entering directory `/marconi_work/FUSIO_HLST/msmukows/IMAS_INSTALLER/intel_installer/src/3.36.0/ual/4.10.1/examples/cpp' icpc `pkg-config blitz --cflags` -I/marconi_work/FUSIO_HLST/msmukows/IMAS_INSTALLER/intel_installer/src/3.36.0/ual/4.10.1/cppinterface/src -I/marconi_work/FUSIO_HLST/msmukows/IMAS_INSTALLER/intel_installer/src/3.36.0/ual/4.10.1/lowlevel -g -O0 -fPIC -shared-intel -c test_pulse_create.cpp In file included from /marconi_work/FUSIO_HLST/switmdir/libs-intel/blitz/1.0.1/intel/19.1.3.304/hftjglypfr4ovoej6dkxwuedupjqez3m/include/blitz/array-impl.h(46), from /marconi_work/FUSIO_HLST/switmdir/libs-intel/blitz/1.0.1/intel/19.1.3.304/hftjglypfr4ovoej6dkxwuedupjqez3m/include/blitz/array.h(37), from /marconi_work/FUSIO_HLST/msmukows/IMAS_INSTALLER/intel_installer/src/3.36.0/ual/4.10.1/cppinterface/src/UALDef.h(30), from /marconi_work/FUSIO_HLST/msmukows/IMAS_INSTALLER/intel_installer/src/3.36.0/ual/4.10.1/cppinterface/src/UALClasses.h(7), from test_pulse_create.cpp(1): /marconi_work/FUSIO_HLST/switmdir/libs-intel/blitz/1.0.1/intel/19.1.3.304/hftjglypfr4ovoej6dkxwuedupjqez3m/include/blitz/blitz.h(152): error: #error directive: Blitz is configured with --enable-threadsafe, but no compiler thread support is found. Did you forget, e.g., "--pthread"? #error Blitz is configured with --enable-threadsafe, but no compiler thread support is found. Did you forget, e.g., "--pthread"? ^ compilation aborted for test_pulse_create.cpp (code 2) make[2]: *** [test_pulse_create.o] Error 2 make[2]: Leaving directory `/marconi_work/FUSIO_HLST/msmukows/IMAS_INSTALLER/intel_installer/src/3.36.0/ual/4.10.1/examples/cpp' make[1]: *** [examples/cpp] Error 1 make[1]: Leaving directory `/marconi_work/FUSIO_HLST/msmukows/IMAS_INSTALLER/intel_installer' make: *** [all] Error 2
As you can see for some reason IMAS is complaining on Blitz being compiled with --enable-threadsafe
flag but at the same time no thread support for compiler is found:
/marconi_work/FUSIO_HLST/switmdir/libs-intel/blitz/1.0.1/intel/19.1.3.304/hftjglypfr4ovoej6dkxwuedupjqez3m/include/blitz/blitz.h(152): error: #error directive: Blitz is configured with --enable-threadsafe, but no compiler thread support is found. Did you forget, e.g., "--pthread"? #error Blitz is configured with --enable-threadsafe, but no compiler thread support is found. Did you forget, e.g., "--pthread"?
2.1. How to reproduce issue
To avoid installing whole IMAS-Spack eco-system from scratch a minimal working example was prepared. This just takes the part of the IMAS code and tries to compile it the very same way as the IMAS installer does it.
- Log in to Marconi cluster
Prepare
$MODULEPATH
thus the imasenv module can be found and loaded:module use /marconi/home/userexternal/msmukows/public/modules
Load
imasenv/3.36.0/intel/2020-test
modulemodule load imasenv/3.36.0/intel/2020-test
Navigate to the directory with example code:
cd /marconi_work/FUSIO_HLST/testdir/tests/blitz_pthread_issue_intel_2020
- There should be a file named:
"test_pulse_create.cpp":
. └── test_pulse_create.cpp
Now execute compilation command:
icpc `pkg-config blitz --cflags` -I/marconi_work/FUSIO_HLST/msmukows/IMAS_INSTALLER/intel_installer/src/3.36.0/ual/4.10.1/cppinterface/src -I/marconi_work/FUSIO_HLST/msmukows/IMAS_INSTALLER/intel_installer/src/3.36.0/ual/4.10.1/lowlevel -g -O0 -fPIC -shared-intel -c test_pulse_create.cpp
You should see the very same error message as above - Blitz -pthread error
2.2. Solution
After a long search a solution has been found, however it is not very elegant. Requires editing pkg-config for Blitz, which by default is prepared by SPACK.
The change is subtle and affects only CFLAGS
which should look like this:
Cflags: -I${includedir} -pthread
Below is a before and after comparison:
Vanilla Blitz's pkg-config - provided by SPACK | Changed pkg-config for Blitz |
---|---|
# generated by configure / remove this line to disable regeneration prefix=/marconi_work/FUSIO_HLST/switmdir/libs-intel/blitz/1.0.1/intel/19.1.3.304/hftjglypfr4ovoej6dkxwuedupjqez3m exec_prefix=${prefix} libdir=${exec_prefix}/lib includedir=${prefix}/include Name: blitz Description: blitz Library Version: 0.10 Requires: Libs: -L${libdir} -lblitz Cflags: -I${includedir} | # generated by configure / remove this line to disable regeneration prefix=/marconi_work/FUSIO_HLST/switmdir/libs-intel/blitz/1.0.1/intel/19.1.3.304/hftjglypfr4ovoej6dkxwuedupjqez3m exec_prefix=${prefix} libdir=${exec_prefix}/lib includedir=${prefix}/include Name: blitz Description: blitz Library Version: 0.10 Requires: Libs: -L${libdir} -lblitz Cflags: -I${includedir} -pthread |
The above solution acts the same way as adding the -pthread
flag explicitly to the compilation command in point 6 at 2.1 How to reproduce issue, something like below:
icpc `pkg-config blitz --cflags` -I/marconi_work/FUSIO_HLST/msmukows/IMAS_INSTALLER/intel_installer/src/3.36.0/ual/4.10.1/cppinterface/src -I/marconi_work/FUSIO_HLST/msmukows/IMAS_INSTALLER/intel_installer/src/3.36.0/ual/4.10.1/lowlevel -g -O0 -fPIC -shared-intel -c -pthread test_pulse_create.cpp