#include <mpi.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char** argv)
{
int myid;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &myid); //得到的变量myid即为当前的进程号
//假设要求和的数组为A={[1,1,1,1],[2,2,2,2]}
int A[4];
if (myid == 0)
{
memset(A, -1, sizeof(A)); //将数组A全赋值为1
}
if (myid == 1)
{
memset(A, -1, sizeof(A)); //将数组A全赋值为2
}
//以上部分是将数组的两行分别存储到进程0和进程1上
int s = 0;
int s1 = 0;
MPI_Status status;
for (int i = 0; i < 4; i++)
{
s = s + A[i];
}
if (myid == 1)
{
MPI_Send(&s, 1, MPI_INT, 0, 99, MPI_COMM_WORLD);
//将求和结果s发送到进程0
}
if (myid == 0)
{
MPI_Recv(&s1, 1, MPI_INT, 1, 99, MPI_COMM_WORLD, &status);
//用s1这个变量来存储从进程1发送来的求和结果
s = s + s1;
printf("%d", s);
}
MPI_Finalize();
}
解释:
使用两个进程对一个2行4列的矩阵进行累加计算,计算所有元素的和。