gpt4 book ai didi

c - 我的代码中有一个关于线性过程计算的阻塞

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:22:53 25 4
gpt4 key购买 nike

<分区>

我们假设我们有一个 n 线性进程 P1...P2 ,每个进程都将与其邻居(左和右)进行通信,并且我们有一个大小为 n 的 vector X ,&Xi= (X-1 + Xi + Xi+1 )/4 & 0< i < n-1在这种情况下,每个进程 i 将数据 Xi 发送到他的邻居 Xi+1 & Xi-1 并从 i-1 & i+1 接收 Xi-1 & Xi+1 ,以计算 Xi 的新值

这就是我所做的,但我有一个干扰,所以请帮助找出错误:

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

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

int world_rank;
int world_size;
double rec=0,rec2=0;
int i,j;

MPI_Init (&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD,&world_rank);
MPI_Comm_size(MPI_COMM_WORLD,&world_size);
double x[world_size];

for(i=0;i<world_size;i++)x[i]=i;

for(i=0;i<world_size;i++){
if(world_rank==i){
if(world_rank==0){
int a1=MPI_Send(&x[i],1,MPI_INT,i+1,0,MPI_COMM_WORLD);
int a2=MPI_Recv(&rec,1,MPI_INT,i+1,0,MPI_COMM_WORLD,MPI_STATUS_IGNORE);
if((a1==MPI_SUCCESS)&&(a2==MPI_SUCCESS)){
x[i]=(x[i]+rec)/4;
printf("x[%d]= %f\n",i,x[i]);
}
}else if(world_rank==world_size-1){
int a4=MPI_Send(&x[i],1,MPI_INT,i-1,0,MPI_COMM_WORLD);
int a3=MPI_Recv(&rec,1,MPI_INT,i-1,0,MPI_COMM_WORLD,MPI_STATUS_IGNORE);

if((a3==MPI_SUCCESS)&&(a4==MPI_SUCCESS)){
x[i]=(x[i]+rec)/4;
printf("x[%d]= %f\n",i,x[i]);
}
}else{
int a7=MPI_Recv(&rec,1,MPI_INT,i+1,0,MPI_COMM_WORLD,MPI_STATUS_IGNORE);
int a8=MPI_Recv(&rec2,1,MPI_INT,i-1,0,MPI_COMM_WORLD,MPI_STATUS_IGNORE);
int a5=MPI_Send(&x[i],1,MPI_INT,i+1,0,MPI_COMM_WORLD);
int a6=MPI_Send(&x[i],1,MPI_INT,i-1,0,MPI_COMM_WORLD);

if((a5==MPI_SUCCESS)&&(a5==MPI_SUCCESS)&&(a5==MPI_SUCCESS)&&(a5==MPI_SUCCESS)){
x[i]=(x[i]+x[i+1]+x[i-1])/4;
printf("x[%d]= %f\n",i,x[i]);
}
}
}
}

/*for(i=0;i<world_size;i++)
printf("x[%d]= %f\n",i,x[i]);*/

}

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