【发布时间】:2015-05-13 09:13:50
【问题描述】:
我正在尝试包装一个不接受任何输入并返回 MPI 通信器的 C++ 函数。
Foo.h
class Foo{
public:
Foo(MPI_Comm _comm){
_comm = comm;
}
MPI_Comm getMPIComm(){
return comm
}
virtual void Foo1() = 0
我尝试了以下方法:
source.pyx
cimport mpi4py.MPI as MPI
from mpi4py.libmpi cimport *
cdef extern from Foo.h:
cdef cppclass Foo:
Foo(MPI_Comm _comm)
MPI_Comm getMPIComm()
void Foo1()
cdef class pyFoo:
cdef Foo *thisptr
def __cinit__(self,MPI.Comm _comm):
pass
def get MPIComm(self):
c_comm = self.thisptr.getMPIComm()
return <MPI.Comm> c_comm
def Foo1(self):
pass
此代码已编译,我能够编写继承此类的 python 代码。但是,当我尝试在python级别访问getMPIComm时,遇到了segmentation fault,valgrind给出的错误是:
Access not within mapped region at address 0x8
这是否意味着我没有正确包装 getMPIComm() ?有谁知道我应该如何处理它?
【问题讨论】:
标签: python c++ mpi cython mpi4py