标题 | 基于MPI的矩阵相乘并行计算的一种探究 |
范文 | 张亮 赵妍 摘要:研究了矩阵相乘的并行算法,基于MPI消息传递库采用C语言实现了该算法,讲解了矩阵并行乘法中的矩阵划分方法和消息传递方法。 关键词:并行计算;MPI;矩阵相乘;消息传递 中图分类号:TP31? ? ? 文献标识码:A 文章编号:1009-3044(2019)23-0281-02 开放科学(资源服务)标识码(OSID): MPI-based Parallel Computation of the Multiple of matrixs ZHANG Liang, ZHAO Yan (Ningxia Financial Vocational and Technical College, Ningxia 750021, China) Abstract: Parallel Computation of the multiple of matrixs was studied, based on MPI and C Language the algorithm was realized. Partition of matrix and message passing in the algorithm was addressed. Key words: Parallel Computation; MPI; Multiple of matrixs; Message Passing 1 引言 并行計算又叫高性能计算,在许多领域的都发挥着积极的巨大的作用,如物理、化学、材料等科学中分子尺度的模拟,天文学和地球科学中银河系的演化,,天气预报,地球数值模拟,全球长期气候变化的模型等[1]。这些研究都对计算机的运算速度提出了很高的要求,也只有高性能的并行计算才能满足这些要求。在并行计算中,集群系统以廉价高效等优点颇受人们青睐,是当今的主流。并行处理的软件支持环境包括基于OpenMP和MPI(Message Passing Interface)的各种环境。OpenMP主要用于共享式计算环境,而MPI则主要用于分布式计算环境[1]。本文实现了基于MPI的矩阵乘法运算。 2 算法描述 设有L×M矩阵A和M×N矩阵B相乘,得到结果为L×N的矩阵C。记矩阵A、B、C的第i行第j列的元素为Aij(i=0……L,j=0……M),Bij(i=0……M,j=0……N),Cij(i=0……L,j=0……N)。则: Cij= 可见Cij只与A和B的第i行相关,而与其他行无关,所以具有并行计算的可行性。 假设有n个进程并行计算,则把矩阵A按行分成n个M/n行的小矩阵,每个小矩阵与B进行矩阵乘法,得到n个M/n行,N列的矩阵,将这些矩阵合并到一起就得到最终的结果。 3 算法实现 根据上面的算法,在VC6中用MPI的C语言实现为如下的程序: #include "mpi.h" #include #include #define l 4/*第一个矩阵的行*/ #define m 3/*第一个矩阵的列,第二个矩阵的行*/ #define n 2/*第二个矩阵的列*/ main(int argc,char *argv[]) { int a[l][m]={{2,3,5},{4,5,7},{6,3,6},{1,6,7}}; int b[m][n]={{2,4},{3,6},{8,5}}; int c[l][n]={0};/*保存最终结果*/ int d[l][n]={0};/*各个分进程保存中间结果*/ int numproces,id,i,j,k,p,q,s,t,x,y; MPI_Status status; MPI_Init(&argc,&argv); MPI_Comm_size(MPI_COMM_WORLD,&numproces); MPI_Comm_rank(MPI_COMM_WORLD,&id); printf("Process %d :\n",id); if(id>0) {/*numproces个进程,l行,每个进程l/numproces行, 从(id-1)*l/numproces行到id*l/numproces行*/ for(x=0,i=(id-1)*l/numproces;i { for(y=0,j=0;j { for(k=0;k { d[x][y]=d[x][y]+a[i][k]*b[k][j];/*d[][]保存该进程计算结果*/ } printf("d[%d][%d]=%d\t",x,y,d[x][y]); |
随便看 |
|
科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。