MPI矩阵与向量乘法

7 篇文章 0 订阅
并行矩阵与向量乘法,为简单起见,这里假设矩阵为n维方阵,向量为n维。进程数为矩阵的维数。按行卷帘存储。这里设n为3。每个进程存储矩阵的一行及向量的一个元素。
#include<stdio.h>
#include "mpi.h"
int main(int argc ,char ** argv)
{
	
	MPI_Init(&argc,&argv);	
	int np,rank;
	MPI_Status sta;
	MPI_Comm_size(MPI_COMM_WORLD,&np);
	MPI_Comm_rank(MPI_COMM_WORLD,&rank);
	int A[3][3]={1,2,3,4,5,6,7,8,9};
	int x[3]={3,2,1};
        int B[3]={0,0,0};
	int y=x[rank];
	int mp1=(rank+1)%np;
	int mm1=(rank-1+np)%np;
	for(int i=0;i<3;i++)
	{

		B[rank]+=A[rank][(rank+i)%3]*y;
		if(i!=2){
		MPI_Send(&y,1,MPI_INT,mm1,0,MPI_COMM_WORLD);
		MPI_Recv(&y,1,MPI_INT,mp1,0,MPI_COMM_WORLD,&sta);
		}
	}
	printf("%d on rank %d process\n",B[rank],rank);
	MPI_Finalize();

}

 

mpicc -o matrix matrix.c  --std=c99
编译时加入--std=c99选项,否则出现


错误:在 C99 模式之外使用 ‘for’ 循环初始化声明
解决办法:

C99 允许在for语句的 “表达式1 ”中定义并初始变量, gcc4 编译c语言的默认标准是C89, 编译C99程序需加参数 “–-std=c99” 如:
#gcc hello.c -o hello.c --std=c99

 mpicc -o matrix matrix.c  --std=c99
mpiexec -n 3 ./matrix


 

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值