- 6
- 0
- 约4.52千字
- 约 7页
- 2019-09-27 发布于广东
- 举报
矩阵相乘并行实现
1.算法描述:
设有如下矩阵相乘:
C=AxB
口子矩 ,的n其中A, B分别是mxk和kxn矩阵,C是mxn矩阵。若处理器个数为p 它们的编号依次是0」,…,则设可将矩阵A、B、C分成p个大小为mxm 块,其中 A=(Aij)mXm, B=(Bij)mXm,和 C=(Cij)mxm,其中 A「ij, Bij 和 Cij 是 nX 阵。同时假设机一
口子矩 ,的n
定义对角块矩阵= dtag (曙)=饥讥血屮讼 J,贝I」
V—1 MT V—1 ?TL7
其中彳述肪宓订X0, 打利用此关系式,将节点编
号从一维映射到二维,数据#灯,弘,C订存放在P艸,可得到下面的在处理机爲曲c 结点上的算法。该算法数据交量
DTAp = m X 2 X: n2 + (w — 1} X 2 X n2 = 2{2m — 1J?2 = 4m2n2/Jy— 2m2n2/-p
算法流程如下:
流程图如下所示:
读取矩阵
获取矩阵行列数
将行列数广播给所有处理器
I
由主进程把数据发送给所有处理器
I
主进程读取自己的子方阵
对子方阵进行相乘处理各子方阵把结果发给主进程
I
主进程接到处理结果
I
主进程输出进程结果
2、程序代码:
#include stdlib.h
#include string.h
#inelude mpi.h
#include time.h
#include stdio.h
#inelude math.h
float **A, **B, **C;
float *a, *b, *c, *tmp_a, *tmp_b; int dg=1000, dl, dl2,p, sp;
int my_rank, my_row, my_col; MPI_Status status;
int get_index(int row, int col, int sp)
{
return ((row+sp)%sp)*sp + (col+sp)%sp;
void random_A_B()
{
int ij;
srand((unsigned int)time(NULL));
for(i=0; idg; i++)
for(j=O; jdg; j++)
{
A[i][j] = rand();
B[i][j] = rand();
C[i][j]=O.O;
}
}
void scatter_A_B()
{
int i,j,k,l;
int p」min,p」max,p_jmin,p_jmax;
for(k=0; kp; k++)
{
p_jmin = (k % sp ) * dl;
p_jmax = (k % sp + 1) * dl-1;
p」min = (k ?(k % sp))/sp * dl;
pjmax = ((k ?(k % sp))/sp +1) *dl -1;
1 = 0;
for(i=p_imin; iv二p_imax; i++)
{
for(j=p」min; j=pjmax; j++)
{
tmp_a[l] = A[i][j];
tmp_b[l] = B[i][j];
I++;
}
}
if(k==O)
{
memcpy(a, tmp_a, dl2 * sizeof(float));
memcpy(b, tmp_b, dl2 * sizeof(float));
} else
{
MPI_Send(tmp_a, dl2, MPI_FLOA1; k, 1, MPI_COMM_WORLD);
MPI_Send(tmp_b, dl2, MPI_FLOA1; k, 2, MPI_COMM_WORLD);
}
}
void init_alignment()
{
MPI_Sendrecv(a, dl2, MPI_FLOA1; get」ndex(my_row,my_col?my_row,sp), 1, tmp_a, dl2, MPI_FLOAT, get_index(my_row,my_col+my_row,sp), 1,
MPI_COMM_WORLD, status);
memcpy(a, tmp_a? dl2 * sizeof(float));
MPI_Sendrecv(b, dl2, MPI_FLOA1; getjndex(my_row-my_col,my_col,sp), 1,
tmp_b, dl2, MPI_FLOAE get」ndex(my_row+my_col,my_col,sp), 1,
MPI_COMM_WORLD, status);
memcpy(b, tmp_b, dl2 * sizeof(float));
}
void main_shift()
{
int
for(l=0; lsp; I++)
{
for(i=0; idl;
您可能关注的文档
最近下载
- 欧洲规范-NF P94-093-中文版.pdf VIP
- 欧洲规范-NF P94-078-中文版.pdf VIP
- SY_T 5333-2023 钻井工程设计规范.pdf VIP
- 深度解析(2026)《SYT 5946-2019钻井液用包被抑制剂 聚丙烯酰胺钾盐》.pptx VIP
- 卧式储罐体积容积计算(带公式).xls VIP
- 深度解析(2026)《SYT 5661-2019钻井液用增粘剂 丙烯酰胺类聚合物》.pptx VIP
- SY_T 5061-2020 钻井液用石灰石粉.docx VIP
- 深度解析(2026)《SYT 5677-2019钻井液用滤纸》.pptx VIP
- ICU常用药物中英文对照一览表.doc VIP
- 心血管常用名词缩写和心血管常用药物英汉对照.pdf VIP
原创力文档

文档评论(0)