- 1
- 0
- 约3.53千字
- 约 5页
- 2019-09-27 发布于广东
- 举报
矩阵转置并行实现
K算法描述:
若处理器个数为P,且它们的编号依次是0,1, 则将n阶矩阵A分成p 个大小为mxm的子块,m=[n/p]0 p个子块组成一个子块阵列,记其中第i行第 j列的子块为Aij,它含有M(i-l)m+l至第im行中的第(j-l)m+l至第jm列的所有 元索。对每一处理器按行主方式赋以二维下标,记编号为i的处理器的二维下标 为(v,u),其屮V二[i/“], u二imod,将A的子块存入下标为(v,u)表示的对应 处理器中。转置分为两步进行:第一步,子块转置;第二步,处理器内部转置。 为了避免对应子块交换数据是处理器发生死锁,可令下三角块先向与之对应的上 三角子块发送数据,然后从上三角子块接收数据;上三角子块数据先存放在缓冲 区buffer中,然后从与Z对应的卞三角了块接收数据,最后再将缓冲区中的数据 发送给下三角子块,流程图如下所示:
#include ,lstdio.hn
#include Hstdlib.h
#include mpi.h
include math.h
#define E 0.0001
#define a(x,y) a[x*m+y]
#define b(x,y) b[x*m+y]
#define A(x,y) A[x*size+y]
#define B(x,y) B[x*size+y]
#define intsize sizeof(int)
#define floatsize sizeof(float)
#define charsize sizeof(char)
int size’N;
int m;
int t;
float *AZ *B;
double starttime;
double timel;
double time2;
int my_rank;
int p;
MPI_Status status;
FILE *fdA;
void Environment_Finalize(float *a,float *b)
free(a); free(b);
int main(int argc, char **argv)
int i,j,k,my_rank/group_size;
float *a,*b;
int u,v;
float temp;
MPI_lnit(argc,argv);
MPI_Comm_size(MPI_COMM_WORLD,group_size);
MPI_Comm_rank(MPI_COMM_WORLD,my_rank); p=group_size;
if(my_ra nk==0) starttime=MPI_Wtime(); fdA=fope n(,,dataln.txt;,rH);
fscanf(fdA,%d %d, size, N);
if(size != N)
{
puts(The in put is error「); exit(O);
}
A=(float*)malloc(floatsize*size*size);
B=(float*)malloc(floatsize*size*size);
for(i = 0; i size; i ++)
{
for(j = 0; j size; j ++) fscanf(fdA, %fz A+i*size+j); }
fclose(fdA);
}
MPI_Bcast(size 丄 MPI _IN T,0,MPI_COMM_WORLD);
t=(int)sqrt(p);
if (tsize)
t=size;
if(size%t!=O)
for(;;)
{
t-;
if(size%t==O)
break;
}
p=t*t;
m=size/t;
a=(float *)malloc(floatsize*m*m);
b=(float *)malloc(floatsize*m*m);
讦(a==NULL| |b==NULL)
printffallocate space fail!);
讦(my_ra nk==0) for(i=0;im;i++)
for(j=0;jm;j++)
a(U)=A(ij);
}
讦(my_ra nk==O)
{
for(j=l;ip;i++)
{
v=i/t;
u=i%t;
for(j=v*m;j(v+l)*m;j++) for(k=u*m;k(u+l)*m;k++) b((j%m)/(k%m))=A(j,k);
MPI_Send(bzm*m,MPI_FLOAl;i,i,MPI_COMM_WORLD);
}
}
else if (my_rankvp)
MPI_Recv(a,m*m,MPI_FLOAT,0/my_ra nk,MPI_COMM_WORLD,status); timel=MPI_Wtime()
您可能关注的文档
最近下载
- 2026年高中物理重庆试题及答案.docx VIP
- Unit 6 Numbers in life Part A Let's learn课件 三年级英语下册 人教PEP版.pptx VIP
- 高考数学极值点偏移练习题(含答案).pdf VIP
- 2014年江苏省盐城市中考历史试卷及答案网页版_中学试卷1892.doc VIP
- 《中国居民营养与慢性病状况报告(2025)》新闻发布会文字实录.docx VIP
- 2025年高考英语真题完全解读(全国二卷)(真题解读).docx VIP
- UG(三维造型设计)课程标准.pdf VIP
- 卫生法律法规教案 第一章 卫生法律法规概述.doc VIP
- 专题18 近代物理(知识清单)(全国通用)(解析版)-2026年高考物理一轮复习讲练.docx
- 断裂力学讲义.pdf VIP
原创力文档

文档评论(0)