C 如何在MPI中实现链表或二叉树结构?
在C中,我们定义链表或二叉树的结构如下:C 如何在MPI中实现链表或二叉树结构?,c,parallel-processing,linked-list,mpi,binary-tree,C,Parallel Processing,Linked List,Mpi,Binary Tree,在C中,我们定义链表或二叉树的结构如下: struct list{ int val; list *next; }; 或 在串行编程中,我们可以很容易地分配下一个内存位置的指针。我的问题是,在多处理器有其本地内存的MPI中,如何处理指针?我如何跟踪它?如何在MPI中实现链表/二叉树?我知道MPI_图。但它在我的场景中没有用处 谢谢你的回答。提前感谢。我将讨论一个链表,但所有这些都适用于二叉树,只需做一点额外的工作 在MPI中实现经典意义上的链表是不可能的,因为正如您所说,每个进程都有自己
struct list{
int val;
list *next;
};
或
在串行编程中,我们可以很容易地分配下一个内存位置的指针。我的问题是,在多处理器有其本地内存的MPI中,如何处理指针?我如何跟踪它?如何在MPI中实现链表/二叉树?我知道MPI_图。但它在我的场景中没有用处
谢谢你的回答。提前感谢。我将讨论一个链表,但所有这些都适用于二叉树,只需做一点额外的工作 在MPI中实现经典意义上的链表是不可能的,因为正如您所说,每个进程都有自己的本地内存,这在其他进程上是不一致的。因此,这本质上限制了使用点对点消息传递这样的简单方式,除非你想做很多没有意义的工作 然而,可以使用单边通信或RMA来做一些事情。事实上,这里有一些示例代码。RMA的基本思想是,每个列组向其他进程公开一个内存区域。然后,通过适当的访问器和同步调用,每个进程都可以从内存中获取数据并将数据放入其他进程 该示例使用动态窗口来允许应用程序根据需要分配内存,但也可以预先静态分配所有内存,并在应用程序开始时将每个进程指向它,这可能会使它更容易理解
所有这一切是否有效或正确,则是另一个论点。对于足够大的列表,这可能非常强大,因为您可以在单个节点的内存中存储更多的数据。但是,对于小型数据结构,遍历列表的成本变得相当高,因此分发列表的效率非常低,在每个节点上复制列表可能更实际。非常感谢。现在我明白了。欢迎来到SO!在这个网站上,事情的运作方式是,每当你有一个你喜欢的答案(无论是关于你自己的问题还是其他问题),你都可以通过点击数字上方左侧的箭头向上投票。如果是你的问题,并且你认为答案是正确的,你可以点击复选标记接受它。这有助于未来的访问者快速找到好的答案。
struct tree_node{
int val;
tree_node *left, *right;
};