2014-11-04 88 views
3

我想加載並調用使用MPI的庫。 我會想象每個級別加載它自己的庫的版本,然後庫將相互溝通。我不想從庫調用者那裏進行任何通信或MPI處理。 無論我加載使用mpi的庫還是使用openmp的庫,python代碼都將保持不變。我設法使我的時候動態加載和C.調用庫但隨着蟒蛇它失敗,它的工作:Python調用使用MPI的(fortran)庫

MCA:基地:component_find:無法打開 /usr/lib中/的openmpi/lib中/的openmpi/mca_paffinity_hwloc:可能缺少 符號,或者編譯爲不同版本的Open MPI? (忽略)

[..]

它看起來像opal_init由於某種原因失敗;

[..]

opal_shmem_base_select失敗 - >的返回值 -1代替OPAL_SUCCESS ompi_mpi_init:orte_init失敗 - 而不是 「成功」>返回 「錯誤」(-1) (0)

[..]

我不知道我有它做與蟒蛇。就像用openmpi重新編譯python一樣?

我在下面給出一個例子:

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 

生成文件

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)您的答案以提高其質量。 – 2015-02-12 16:21:56

+0

我有點忙,但我會盡快回復並接受它。謝謝! – 2015-02-15 14:56:52