因此,如果我有一个运行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的节点以及之后的状态?
答案 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,尽管这有些复杂。