Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何在MPI中实现链表或二叉树结构?_C_Parallel Processing_Linked List_Mpi_Binary Tree - Fatal编程技术网

C 如何在MPI中实现链表或二叉树结构?

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中实现经典意义上的链表是不可能的,因为正如您所说,每个进程都有自己

在C中,我们定义链表或二叉树的结构如下:

struct list{
  int val;
  list *next;
};

在串行编程中,我们可以很容易地分配下一个内存位置的指针。我的问题是,在多处理器有其本地内存的MPI中,如何处理指针?我如何跟踪它?如何在MPI中实现链表/二叉树?我知道MPI_图。但它在我的场景中没有用处


谢谢你的回答。提前感谢。

我将讨论一个链表,但所有这些都适用于二叉树,只需做一点额外的工作

在MPI中实现经典意义上的链表是不可能的,因为正如您所说,每个进程都有自己的本地内存,这在其他进程上是不一致的。因此,这本质上限制了使用点对点消息传递这样的简单方式,除非你想做很多没有意义的工作

然而,可以使用单边通信或RMA来做一些事情。事实上,这里有一些示例代码。RMA的基本思想是,每个列组向其他进程公开一个内存区域。然后,通过适当的访问器和同步调用,每个进程都可以从内存中获取数据并将数据放入其他进程

该示例使用动态窗口来允许应用程序根据需要分配内存,但也可以预先静态分配所有内存,并在应用程序开始时将每个进程指向它,这可能会使它更容易理解


所有这一切是否有效或正确,则是另一个论点。对于足够大的列表,这可能非常强大,因为您可以在单个节点的内存中存储更多的数据。但是,对于小型数据结构,遍历列表的成本变得相当高,因此分发列表的效率非常低,在每个节点上复制列表可能更实际。

非常感谢。现在我明白了。欢迎来到SO!在这个网站上,事情的运作方式是,每当你有一个你喜欢的答案(无论是关于你自己的问题还是其他问题),你都可以通过点击数字上方左侧的箭头向上投票。如果是你的问题,并且你认为答案是正确的,你可以点击复选标记接受它。这有助于未来的访问者快速找到好的答案。
struct tree_node{
  int val;
  tree_node *left, *right;
};