Hi. I have a bedeviliing issue setting up parallelism in neuron on linux (Ubuntu 18.04.4). When I run h.nrnmpi_init(), I get this error:
Code: Select all
mca_base_component_repository_open: unable to open mca_patcher_overwrite: /usr/lib/x86_64-linux-gnu/openmpi/lib/openmpi/mca_patcher_overwrite.so: undefined symbol: mca_patcher_base_patch_t_class (ignored).
I have found this commit to git hub by nrnhines,
https://github.com/neuronsimulator/nrn/ ... d7d4aa690b, which in turn links to this page
https://github.com/open-mpi/ompi/issues/3705. If I understand correctly from these issue pages, then dynamically loading some of the mpi libraries is failing. Steps that I have taken to get this far:
- Building neuron from source (./configure --with-iv --with-paranrn --with-nrnpython=python3)
- Compiling openmpi (v4.0.3) with configure/make: ./configure --prefix=/usr/local --disable-dlopen --disable-mca-dso
I configured openmpi with those options to try to get around the dynamic loading issue, as described in the openmpi FAQs here
https://www.open-mpi.org/faq/?category= ... #avoid-dso. The ompi issue page
https://github.com/open-mpi/ompi/issues/3705 has the following script, named ompi-dlopen.py, to test whether MPI_Init() is working
Code: Select all
import ctypes
libdir = "/usr/local/lib/"
lib = ctypes.CDLL(libdir+"libmpi.so", ctypes.RTLD_LOCAL)
ierr = lib.MPI_Init(None,None)
assert ierr==0
r = ctypes.create_string_buffer(4096)
n = ctypes.c_int()
ierr = lib.MPI_Get_library_version(r, ctypes.byref(n))
assert ierr==0
print(r[0:n.value])
ierr = lib.MPI_Finalize()
assert ierr==0
Output from "python ompi-dlopen.py" is:
Code: Select all
b'Open MPI v4.0.3, package: Open MPI tony@tony-desktop Distribution, ident: 4.0.3, repo rev: v4.0.3, Mar 03, 2020\x00'
So it's working, and finding the correct version of open mpi (v4.0.3). This suggests to me that I shouldn't need to run the patch suggested in that issue resolution, that
nrnhines refers to in his git hub commit. However, the issue still seems to be that the wrong libraries are found, since the error message above points to /usr/lib/x86_64-linux-gnu/openmpi/lib/openmpi/mca_patcher_overwrite.so, which has to be the preinstalled open mpi libraries.
Any suggestions you have would be helpful. A couple things I'm considering trying are 1) re-making openmpi without the options and then using the patch from the ompi git hub issue, and 2) building neuron with --with-paranrn=dynamic as nrnhines mentions. Would #2 matter?
Thanks, I'm stuck!