• MPI中的cannon算法


    Cannon算法
    • 算法过程
      假设矩阵(A,B)(C)都可以分成(m imes m)块矩阵,即(A = (A_{(ij)})_{m imes m},B = (B_{(ij)})_{m imes m})(C = (C_{(ij)})_{m imes m}),其中(A_{ij},B_{ij})(C_{ij})(n imes n)矩阵,进一步假设有(p = m imes m)个处理器。为了讨论Cannon算法,引入块置换矩阵(Q = (Q_{ij}))。即

    [Q = left [ egin{matrix} 0 & 1 &0 & cdots & 0\ 0 & 0 &1 & cdots & 0 \ vdots & vdots & vdots & ddots & vdots \ 0 & 0 &0 & cdots & 1 \ 1 & 0 &0 & cdots & 0 end{matrix} ight ] ,quad Q_{ij} = egin{cases} 1,j equiv (i+1)mod m\ 0,other end{cases} ]

    (QA)就是将(A)的所有行向上移动一个位置,(AQ)则是将(A)的所有列向右移动一个位置。

    定义块对角矩阵(D_A^{(l)} = diag(D_i^{(l)}) = diag(A_{i,i+1mod m})),容易证明(A = sum_{l=0}^{m-1}D_A^{(l)}Q^l),于是

    [egin{aligned} C &=AB=sum_{l=0}^{m-1}D_A^{(l)}Q^lB\ &=D_{A}^{(0)}B^{(0)}+D_{A}^{(1)}B^{(1)}+...+D_{A}^{(m-1)}B^{(m-1)} end{aligned} ]

    其中(B^{(l)} = Q^lB = QB^{l-1},l = 0,1,...,m-1)

    假如:(A)(3 imes 3)的矩阵,则

    [D^{(0)}_A = left [ egin{matrix} A_{0,0} & 0 &0 \ 0 & A_{1,1} &0 \ 0 & 0 & A_{2,2} \ end{matrix} ight ] , D^{(1)}_A = left [ egin{matrix} A_{0,1} & 0 &0 \ 0 & A_{1,2} &0 \ 0 & 0 & A_{2,0} \ end{matrix} ight ] , D^{(2)}_A = left [ egin{matrix} A_{0,2} & 0 &0 \ 0 & A_{1,0} &0 \ 0 & 0 & A_{2,1} \ end{matrix} ight ] ]

    [Q^0 = left [ egin{matrix} 1 & 0 &0 \ 0 & 1 &0 \ 0 & 0 & 1 \ end{matrix} ight ] , Q^1 = left [ egin{matrix} 0 & 1 &0 \ 0 & 0 &1 \ 1 & 0 &0 \ end{matrix} ight ] , Q^2 = QQ = left [ egin{matrix} 0 & 0 &1 \ 1 & 0 &0 \ 0 & 1 & 0 \ end{matrix} ight ] ]

    经过计算(A = sum_{l=0}^{m-1}D_A^{(l)}Q^l)

    Cannon算法是为了更加便于并行,可以把矩阵乘转化为若干个小的计算单元,分别用不同的进程去进行计算,而互不干扰。

    Cannon算法采用了主从模式的同时也采用了分而治之的模式。一方面,0号线程作为Master,负责矩阵A和矩阵B以及矩阵C的I/O,也负责小矩阵的分发和结果的聚集。而其他节点作为Worker进行本地的小矩阵串行乘法计算。另一方面,Cannon算法将两个大矩阵的乘法运算分解为若干各小矩阵的乘法运算,最终计算结束后,将计算结果聚集回来,也采用了分而治之的思想。cannon算法不仅实现了矩阵乘法运算的并行化,也减少了分块矩阵乘法的局部存储量,节省了节点的内存开销。

  • 相关阅读:
    转:解决windows下eclipse中android项目关联android library project失败问题
    [Android]高低API版本兼容之@TargetApi
    【机器学习具体解释】线性回归、梯度下降、最小二乘的几何和概率解释
    iOS开发实践之xib载入注意问题
    Oracle 学习笔记 13 -- 控制用户权限
    【Web探索之旅】第三部分第二课:IP地址和域名
    BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第10章节--SP2013中OAuth概览 应用程序授权
    windows上通过vnc连接虚拟机中linux系统
    virtio netdev的创建
    使用Dagger2创建的第一个小样例
  • 原文地址:https://www.cnblogs.com/zhangyazhou/p/13376326.html
Copyright © 2020-2023  润新知