Dear EasyBuild experts,

Firstly, thank you for your very nice work!

I'm trying to compile PySCF with the following *.eb file:

easyblock = 'CMakeMakeCp'

name = 'PySCF'
version = '2.0.0a'
versionsuffix = '-Python-%(pyver)s'

homepage = 'http://www.pyscf.org'
description = "PySCF is an open-source collection of electronic structure
modules powered by Python."

toolchain = {'name': 'foss', 'version': '2020b'}

source_urls = ['https://github.com/pyscf/pyscf/archive/']
sources = ['v%(version)s.tar.gz']
checksums =
['20f4c9faf65436a97f9dfc8099d3c79b988b0a2c5374c701fbe35abc6fad4922']

builddependencies = [('CMake', '3.18.4')]

dependencies = [
    ('Python', '3.8.6'),
    ('SciPy-bundle', '2020.11'),  # for numpy, scipy
    ('h5py', '3.1.0'),
    ('qcint', '4.0.6', versionsuffix),
    ('libxc', '5.1.3'),
    ('XCFun', '2.1.1'),
]

start_dir = 'pyscf/lib'

separate_build_dir = True

configopts = "-DBUILD_LIBCINT=OFF -DBUILD_LIBXC=OFF -DBUILD_XCFUN=OFF "

prebuildopts = "export PYSCF_INC_DIR=$EBROOTQCINT/include:$EBROOTLIBXC/lib
&& "

files_to_copy = ['pyscf']

sanity_check_paths = {
    'files': ['pyscf/__init__.py'],
    'dirs': ['pyscf/data', 'pyscf/lib'],
}

sanity_check_commands = ["python -c 'import pyscf'"]

modextrapaths = {'PYTHONPATH': '', 'PYSCF_EXT_PATH': ''}

moduleclass = 'chem'


Even if the module is created, I am having troubles by running it in a node
different from master. In particular, when I load the module and ran the
code, it goes all OK:

module load chem/PySCF/2.0.0a-foss-2020b-Python-3.8.6
python
from pyscf import gto, scf
mol = gto.M(atom='H 0 0 0; H 0 0 1')
mf = scf.RHF(mol).run()

but when I try to run it on a node different from the master, I get:

Python 3.8.6 (default, Jun  1 2021, 16:43:49)
[GCC 10.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from pyscf import gto, scf
>>> mol = gto.M(atom='H 0 0 0; H 0 0 1')
>>> mf = scf.RHF(mol).run()
Illegal instruction (core dumped)

As far as I read in different places, it seems to be related to the
different architectures of our master and slaves nodes.

If I execute

grep flags -m1 /proc/cpuinfo | cut -d ":" -f 2 | tr '[:upper:]' '[:lower:]'
| { read FLAGS; OPT="-march=native"; for flag in $FLAGS; do case "$flag" in
"sse4_1" | "sse4_2" | "ssse3" | "fma" | "cx16" | "popcnt" | "avx" | "avx2")
OPT+=" -m$flag";; esac; done; MODOPT=${OPT//_/\.}; echo "$MODOPT"; }

on the slaves I get: -march=native -mssse3 -mfma -mcx16 -msse4.1 -msse4.2
-mpopcnt -mavx -mavx2

whereas on the master node we have: -march=native -mcx16

I tried to compile PySCF by adding these lines to my *.eb file:

configopts += "-DBUILD_FLAGS='-march=native -mssse3 -mfma -mcx16 -msse4.1
-msse4.2 -mpopcnt -mavx -mavx2' "
configopts += "-DCMAKE_C_FLAGS='-march=native -mssse3 -mfma -mcx16 -msse4.1
-msse4.2 -mpopcnt -mavx -mavx2' "
configopts += "-DCMAKE_CXX_FLAGS='-march=native -mssse3 -mfma -mcx16
-msse4.1 -msse4.2 -mpopcnt -mavx -mavx2' "
configopts += "-DCMAKE_FORTRAN_FLAGS='-march=native -mssse3 -mfma -mcx16
-msse4.1 -msse4.2 -mpopcnt -mavx -mavx2'"

but in that case the code does not run on master and neither in slaves.


I'm sorry if it is a stupid question. I am far from being a system admin...

Thanks a lot for your help.

Dr. Agustín Aucar
Institute for Modeling and Innovative Technologies - Argentina

Reply via email to