Cannon算法
  • 算法过程

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

\[Q = \left [
\begin{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}
\right ]
,\quad Q_{ij} =
\begin{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\),于是

\[\begin{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\times 3\)的矩阵,则

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

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

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

\[Q^0 = \left [
\begin{matrix}
1 & 0 &0 \\
0 & 1 &0 \\
0 & 0 & 1 \\
\end{matrix}
\right ] ,

Q^1 = \left [
\begin{matrix}
0 & 1 &0 \\
0 & 0 &1 \\
1 & 0 &0 \\
\end{matrix}
\right ] ,

Q^2 = QQ = \left [
\begin{matrix}
0 & 0 &1 \\
1 & 0 &0 \\
0 & 1 & 0 \\
\end{matrix}
\right ]
\]

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

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

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

MPI中的cannon算法的更多相关文章

  1. Parallel Computing–Cannon算法 (MPI 实现)

    原理不解释,直接上代码 代码中被注释的源程序可用于打印中间结果,检查运算是否正确. #include "mpi.h" #include <math.h> #includ ...

  2. Java中的经典算法之冒泡排序(Bubble Sort)

    Java中的经典算法之冒泡排序(Bubble Sort) 神话丿小王子的博客主页 原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第一 ...

  3. 分布式数据库中的Paxos 算法

    分布式数据库中的Paxos 算法 http://baike.baidu.com/link?url=ChmfvtXRZQl7X1VmRU6ypsmZ4b4MbQX1pelw_VenRLnFpq7rMvY ...

  4. Java中的查找算法之顺序查找(Sequential Search)

    Java中的查找算法之顺序查找(Sequential Search) 神话丿小王子的博客主页 a) 原理:顺序查找就是按顺序从头到尾依次往下查找,找到数据,则提前结束查找,找不到便一直查找下去,直到数 ...

  5. Java中的经典算法之选择排序(SelectionSort)

    Java中的经典算法之选择排序(SelectionSort) 神话丿小王子的博客主页 a) 原理:每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕.也就是:每一趟 ...

  6. STL中的查找算法

    STL中有很多算法,这些算法可以用到一个或多个STL容器(因为STL的一个设计思想是将算法和容器进行分离),也可以用到非容器序列比如数组中.众多算法中,查找算法是应用最为普遍的一类. 单个元素查找 1 ...

  7. opencv3中的机器学习算法之:EM算法

    不同于其它的机器学习模型,EM算法是一种非监督的学习算法,它的输入数据事先不需要进行标注.相反,该算法从给定的样本集中,能计算出高斯混和参数的最大似然估计.也能得到每个样本对应的标注值,类似于kmea ...

  8. 在opencv3中的机器学习算法

    在opencv3.0中,提供了一个ml.cpp的文件,这里面全是机器学习的算法,共提供了这么几种: 1.正态贝叶斯:normal Bayessian classifier    我已在另外一篇博文中介 ...

  9. Java中的排序算法(2)

    Java中的排序算法(2) * 快速排序 * 快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为两个子序列(sub-lists). * 步骤为: * 1. 从数 ...

随机推荐

  1. Servlet学习之Tomcat控制台中文乱码问题

    Tomcat控制台中文乱码问题 在更新了IDEA2020.1版本后,可以安装官方的简体中文插件,方便我们日常使用,但是更新后再运行Tomcat时,控制台的输出日志出现中文乱码问题,接下来告诉大家如何修 ...

  2. Python 数字类型转换

    Python数字类型转换: int(x):将 x 转换为一个整数 float(x):将 x 转换为一个浮点数 complex(x,y):将 x 和 y 转换为一个复数.x 为复数的实部,y 为复数的虚 ...

  3. PHP is_writable() 函数

    定义和用法 is_writable() 函数检查指定的文件是否可写. 如果文件可写,该函数返回 TRUE. 语法 is_writable(file) 参数 描述 file 必需.规定要检查的文件. 提 ...

  4. PHP asXML() 函数

    实例 格式化 XML(版本 1.0)中的 SimpleXML 对象的数据: <?php$note=<<<XML<note>高佣联盟 www.cgewang.com& ...

  5. PDOStatement::fetchAll

    PDOStatement::fetchAll — 返回一个包含结果集中所有行的数组(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0)高佣联盟 www.cgewang.c ...

  6. 5.29 省选模拟赛 波波老师 SAM 线段树 单调队列 并查集

    LINK:波波老师 LINK:同bzoj 1396 识别子串 不过前者要求线性做法 后者可以log过.实际上前者也被我一个log给水过了. 其实不算很水 我自认跑的很快罢了. 都是求经过一个位置的最短 ...

  7. 4.18 省选模拟赛 无聊的计算器 CRT EXBSGS EXLucas

    算是一道很毒瘤的题目 考试的时候码+调了3h才搞定. op==1 显然是快速幂. op==2 有些点可以使用BSGS 不过后面的点是EXBSGS. 这个以前学过了 考试的时候还是懵逼.(当时还是看着花 ...

  8. [转]HashMap 和 currentHashMap 总结

    作者:浅蓝色的麻吉 https://www.jianshu.com/p/a7767e6ff2a2 1. 什么是哈希表 在讨论哈希表之前,我们先大概了解下其他数据结构在新增,查找等基础操作执行性能 1. ...

  9. Rest接口加Https单向认证

    背景: 接到一个需求,客户要求某个模块的rest接口都得通过https访问,客户提供证书. 步骤: Server端证书生成 刚开始还没拿到客户的证书,所以通过jdk自带的keytools自己先生成了一 ...

  10. 01-java开发环境配置

    1 JDK.JRE.JVM的关系 JDK: java开发工具包 JRE: java运行时环境 JVM: java虚拟机 2 JDK下载 方式一:官网 方式二:该链接提供jdk1.6 ,jdk1.7 , ...