Python调用使用MPI的(fortran)库

时间:2014-11-04 16:04:13

标签: python mpi

我想加载并调用使用MPI的库。 我想象每个等级加载自己的库版本,然后库将相互通信。我不想从图书馆来电者那里进行任何沟通或MPI处理。 无论我是否加载使用mpi的库或使用openmp的库,python代码都将保持不变。当我从C动态加载和调用库时,我设法使它工作。但是使用python它失败了:

  

mca:base: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)

[..]

我想知道我要为python做些什么。像用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 个答案:

答案 0 :(得分:1)

我有类似的问题,有一个解决方法: 当您运行configure以编译openmpi时,请使用以下标志:

./ configure --disable-dlopen

希望它适合你!