Dense Matrix Algorithms(稠密矩阵算法)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhougb3/article/details/80495124

矩阵向量乘法

串行算法中需要n*n次乘法和加法运算。

一维行划分
  1. 每个进程一行以及向量的一个元素:

    这里写图片描述

  2. 进程数少于n:每个进程存储n/p个整行还有n/p个元素。使用超立方体结构

    这里写图片描述

  3. 推导矩阵向量乘法的等效率函数

这里写图片描述

一维列划分

参考一维行划分(习题8.2)

二维划分
  1. 每个进程一个元素:向量x分布在n个进程的最后一列。将向量x沿着矩阵A的主对角线排列,接着复制到相应列的所有进程(一对多广播通信)。各自相乘后将行的结果相加放到最后一列的进程中(每一行进行多对一规约操作)。三个操作的时间都是logn,计算成本是n*n*logn,不是成本最优。
  2. 进程数少于n*n:向量分布在最后一个进程列的n/√p个进程中。先将向量元素传输到它所在行的对角线进程中。进行一对多广播操作。各自执行乘法运算和局部求和运算。每一行累加得到结果向量(多对一规约)。
    这里写图片描述

这里写图片描述


矩阵与矩阵的乘法

串行算法无论是直接乘还是化成小矩阵相乘,复杂度都是n*n*n
这里写图片描述

Cannon算法

这里写图片描述

扫描二维码关注公众号,回复: 3222374 查看本文章

初始移位时A的第i行左移i个,B的第j列上移j个。本地相乘后再A左移B上移再相乘,循环根号P次即可得到结果。

这里写图片描述

DNS算法

基于划分中间数据,一共有n*n*n次运算,我们使用这个数量的进程,每个进程进行一次运算,然后用logn时间进行一对多规约得到结果。算法步骤如下:
这里写图片描述
这里写图片描述

使用q个进程,我们把矩阵划分为块,可以得到成本最优的版本。思路完全一样,把整块当成一个数就可以。
这里写图片描述

线性方程组求解
  1. 高斯消元法(变成一个上三角矩阵):串行算法是W = 2/3 n*n*n。我们按行进行划分。
    这里写图片描述

  2. 高斯异步消元法和高斯消元流水线法

    这是成本最优的。不需要等待上一次流水线结束。
    这里写图片描述

  3. 进程数少于n的一维块划分
    这里写图片描述

    由于负载分配不均衡造成的进程空闲引起的。使用一维循环映射可以解决这个问题。

  4. 进程个数为N*N的二维划分:不使用流水线不是成本最优的,使用流水线就是成本最优。

猜你喜欢

转载自blog.csdn.net/zhougb3/article/details/80495124