[英]Wrap C++ function that returns MPI communicator using Cython
我正在尝试包装不接受任何输入并返回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时,遇到了分段错误,并且valgrind给出的错误是:
Access not within mapped region at address 0x8
这是否意味着我没有正确包装getMPIComm()? 有人知道我应该怎么做吗?
我认为您永远不会分配*thisptr
,从而在尝试对其调用getMPIComm
时遇到访问冲突。 尝试如下创建Foo
实例:
cdef class pyFoo:
cdef Foo *thisptr
def __cinit__(self,MPI.Comm _comm):
self.thisptr = new Foo(_comm)
# ...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.