关闭

MPI矩阵与向量乘法

标签: matrixc存储gcc语言
3378人阅读 评论(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
1

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:314860次
    • 积分:4722
    • 等级:
    • 排名:第6119名
    • 原创:167篇
    • 转载:18篇
    • 译文:2篇
    • 评论:41条
    最新评论