gpt4 book ai didi

c - 现有连接被远程主机强制关闭 - MPI

转载 作者:行者123 更新时间:2023-11-30 15:58:41 25 4
gpt4 key购买 nike

我使用 C 和 MPI 编写一个通过矩阵乘法生成 vector 的应用程序,但我一直遇到错误,例如 Error posts readv 和 An现有连接被远程主机强制关闭 (10054)这是代码:

#include "stdio.h"
#include "mpi.h"

#define W 5
#define H 5

void make_matrix(int[]);
void make_vector(int []);

void main(int argc, char* argv[])
{

int myrank,size,k;
int matrix[H*W];
int vec[W];
int res[W];
static int col_count = 0;

MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&myrank);
MPI_Comm_rank(MPI_COMM_WORLD,&size);

MPI_Bcast(vec,W,MPI_INT,0,MPI_COMM_WORLD);

if(myrank != 0)
{
for(k=0; k<W; k++)
{
vec[k]+= matrix[k*W+col_count];
}
col_count++;
printf("%d ",vec[col_count]);
}

MPI_Finalize();
}

void make_matrix(int a[])
{
int i;
for(i=0; i<H*W; i+=1)
{
a[i] = i;
}
};

void make_vector(int v[])
{
int i;
for(i=0; i<H; i++)
v[i] = i*2;
};

最佳答案

MPI_Bcast() 是一个集体函数,这意味着通信器中的每个进程都必须调用它。换句话说,不要调用 MPI_Recv()。因此,摆脱 if(myrank == 0) 条件并让所有进程调用:

MPI_Bcast(vec,W,MPI_INT,0,MPI_COMM_WORLD);

请注意,我上面有 vec,而不是 &vec;由于 vec 已经是一个数组,因此它是 MPI 需要的指针。此外,您的结果将出现在非 root 进程的 vec 中;不需要单独的 arr 数组。

我建议您阅读一些 MPI 示例,并尝试使您的代码看起来更像它们。

关于c - 现有连接被远程主机强制关闭 - MPI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9590672/

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