2012-03-16 73 views
1

我正在尝试使用MPI编写程序,我有一个问题可以帮助我很多。是否有可能在MPI中以任何方式发送指向另一个进程的指针?我想要的只是发送指针,而不是将内存从一个进程复制到另一个进程。将指针表示为字符串,反之亦然

如果不适用,是否可以将指针表示为字符串,然后发送它,以便接收进程可以再次将它转换为指针并访问指向的内存?

在此先感谢。

+2

指针传输不应该是这里的问题。问题是指针指向的内存需要在同一位置的两个地址空间中可用。你想在这里做什么? – 2012-03-16 14:19:38

回答

7

简答:不,你不能那样做。

解释是MPI进程不保证以任何方式共享内存。实际上,大多数MPI实现将MPI进程映射到实际的OS进程,因此它们不共享相同的内存地址空间。另外,您可能希望在群集上运行MPI应用程序,在这种情况下,MPI进程甚至不在同一硬件上。

编辑:

MPI2引入窗口的操作(参见例如MPI_WIN_CREATE),其模拟共享存储器的访问。您的实现可能会决定如果所有进程都在同一节点上运行,则可以使用共享内存来实现此类窗口操作。但是,与MPI一样,你永远不能保证如何执行操作。

+0

我知道不同的硬件,但我只想在同一个节点中的进程之间交换指针。谢谢你的信息。至少我不会花时间在无法完成的事情上。 – gkaran89 2012-03-16 14:22:09

+0

您不能在同一节点上的进程之间交换指针。那么,你可以,但这样的指针是没有意义的。在任何现代操作系统上,单个进程都在自己的虚拟地址空间中运行。如果你希望在进程之间共享内存,请查看POSIX共享内存函数('shmget','shmat'等)或内存映射文件('mmap')。请注意,大多数MPI实现将在幕后使用这些方法。所以当你使用'MPI_Send'和'MPI_Recv',并且这些进程共享一个节点时,发送者将把数据复制到一个共享缓冲区,并且接收者将复制出来。 – 2012-03-16 19:18:36

相关问题