2014-11-04 5 views
3

Я бы хотел загрузить и вызвать библиотеку, которая использует MPI. Я бы предположил, что каждый ранг загружает свою собственную версию библиотеки, а затем библиотеки будут общаться друг с другом. Я не хочу выполнять связь или обработку MPI от вызывающего библиотеку. Код python останется таким же, независимо от того, загружаю ли я библиотеку, использующую mpi или библиотеку, использующую openmp, например. Мне удалось заставить его работать, когда я динамически загружать и вызывать библиотеку из C. Но с питоном он терпит неудачу с:Python, вызывающий библиотеку (fortran), которая использует MPI

MCA: основание: component_find: не удалось открыть /USR/Библиотека/OpenMPI/Библиотека/OpenMPI/mca_paffinity_hwloc: возможно, отсутствующий символ или скомпилированный для другой версии Open MPI? (Игнорируется)

[..]

Похоже opal_init не удалось по каким-либо причинам;

[..]

opal_shmem_base_select не удалось -> Возвращаемое значение -1 вместо OPAL_SUCCESS ompi_mpi_init: orte_init не удалось -> Возвращаемое "Error" (-1) вместо "успеха" (0)

[..]

Интересно, что я должен сделать для него, чтобы для с питоном. Что-то вроде перекомпиляции python с openmpi?

я привести пример ниже:

testMPI.py

#!/usr/bin/env python 
from ctypes import * 
# Loading library 
raw = cdll.LoadLibrary('./libtest.so.1.0') 
print "hello world " 
raw.test() 

test.f90

subroutine test() bind(c,name='test') 
    use MPI 
    implicit none 
    integer :: nprocs =-1 !< total number of process 
    integer :: rank=0 !< rank in comm world 
    integer :: ierr =-1 !< 
    call MPI_init(ierr) 
    call MPI_comm_size(MPI_comm_world, nprocs, ierr) 
    call MPI_comm_rank(MPI_comm_world, rank, ierr) 
    write(*,*)"hello world from ",rank," of ",nprocs 
    call MPI_finalize(ierr) 
end subroutine 

Makefile

FC=mpif90.openmpi 
FFLAGS=-free -fPIC -g -Wall 
all: obj test 
test: 
    mpirun.openmpi -n 4 ./testMPI.py 
obj: 
    $(FC) $(FFLAGS) -c test.f90 
    $(FC) $(FFLAGS) -shared -Wl,-soname,libtest.so.1 -o libtest.so.1.0 test.o 
clean: 
    rm *.o libtest* 

ответ

1

У меня была аналогичная проблема, есть работа вокруг этого: при запуске настройки для компиляции OpenMPI, используйте следующий флаг:

./configure --disable-dlopen

Надежда он работает для вас!

+0

Возможно, вы захотите добавить свой [форматирование] (http://stackoverflow.com/editing-help) свой ответ, чтобы улучшить его качество. –

+0

Я немного занят, но я вернусь и приму это, как только попробую. Благодаря! –

Смежные вопросы