繁体   English   中英

包装使用Cython返回MPI通信器的C ++函数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM