MPI C如何访问其他等级的结构/变量

时间:2019-02-07 20:48:30

标签: c mpi

因此,如果我有一个运行MPI的C代码和类似的结构:

typedef struct Node{
    int succ;
    int pred;
    int has_token;
    char state;
}node;

等级可以访问另一个等级节点吗?
例如,我有:

//What i want:
if(rank==0){
    //so rank 0.state               lets say i want rank 2.state
    if(currentRankNode.state=='I' && someOtherRankNode.state=='S'){
        //do_smth
    }
}

问题是,我应该用someOtherRankNode替换什么以获取例如等级2的节点以及之后的状态?

3 个答案:

答案 0 :(得分:1)

否,至少您需要一个通信例程,例如ggplot# Define helper function adjusted_title_position <- function(p) { # Shift the horizontal position of the plot title p_built <- invisible(ggplot2::ggplot_build(p)) gt <- invisible(ggplot2::ggplot_gtable(p_built)) gt$layout[which(gt$layout$name == "title"), c("l", "r")] <- c(2, max(gt$layout$r)) # Prints the plot to the current graphical device gridExtra::grid.arrange(gt, newpage = TRUE) } # Reregister print.ggplot assignInNamespace("print.ggplot", adjusted_title_position, asNamespace("ggplot2")) MPI_Send,才能将MPI_BCast发送到MPI_AllGather。例如:

someOtherRankNode.state

尝试使用MPI_Type_struct跨进程正确发送该结构。

答案 1 :(得分:0)

我在类似的问题中找到了答案,所以以后我将在这里发布给有相同问题的任何人。

  

在MPI中,每个进程(或等级)都有自己的内存,因此,当它通过加载/存储操作更改值时,不会影响另一个进程(或等级)上变量的值。更新远程值的唯一方法是发送消息,这与comm.bcast()调用相同。这会将msg的本地值从等级1发送到所有其他等级。到目前为止,等级0尚无法知道等级1发生了什么。

答案 2 :(得分:0)

在这里您所掌握的信息很少,我想您要问的是如何窥视另一个MPI进程的内存(即使用rank == 2查看该进程的当前状态)。

默认情况下,即使在同一台物理计算机上运行,​​MPI进程的内存空间也被操作系统完全分隔。您必须通过发送和接收消息的方式来同步状态知识。在MPI的较新版本中,您可以使用MPI Windows之类的功能:https://www.mpich.org/static/docs/v3.2/www3/MPI_Win_allocate_shared.html,尽管这有些复杂。