gpt4 book ai didi

c - MPI C如何访问其他级别的结构/变量

转载 作者:行者123 更新时间:2023-11-30 14:42:07 25 4
gpt4 key购买 nike

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

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

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

//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 的节点以及之后的状态?

最佳答案

不,至少您需要一个通信例程,例如 MPI_SendMPI_BCastMPI_AllGather 才能发送 someOtherRankNode.state排名 == 0。例如:

#include <stdio.h>
#include <mpi.h>

int main(void)
{
char rank_0_state;
char rank_1_state;

MPI_Init(NULL, NULL);
int world_size;
MPI_Comm_size(MPI_COMM_WORLD, &world_size);

if (world_size != 2)
return 1;

int rank;
MPI_Comm_rank(MPI_COMM_WORLD, &rank);

if (rank == 0)
rank_0_state = 'I';

if (rank == 1)
rank_1_state = 'S';


if (rank == 0) {
MPI_Status status;
MPI_Recv(&rank_1_state, 1, MPI_BYTE, 1, 0, MPI_COMM_WORLD, &status);
}
if (rank == 1)
MPI_Send(&rank_1_state, 1, MPI_BYTE, 0, 0, MPI_COMM_WORLD);

if (rank == 0) {
if (rank_0_state == 'I' && rank_1_state == 'S') {
printf("I am rank 0 receiving the right value from rank 1\n");
}
}

MPI_Finalize();

return 0;
}

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

关于c - MPI C如何访问其他级别的结构/变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54582039/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com