版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhougb3/article/details/80495124
矩阵向量乘法
串行算法中需要n*n次乘法和加法运算。
一维行划分
每个进程一行以及向量的一个元素:
进程数少于n:每个进程存储n/p个整行还有n/p个元素。使用超立方体结构
推导矩阵向量乘法的等效率函数
一维列划分
参考一维行划分(习题8.2)
二维划分
- 每个进程一个元素:向量x分布在n个进程的最后一列。将向量x沿着矩阵A的主对角线排列,接着复制到相应列的所有进程(一对多广播通信)。各自相乘后将行的结果相加放到最后一列的进程中(每一行进行多对一规约操作)。三个操作的时间都是logn,计算成本是n*n*logn,不是成本最优。
- 进程数少于n*n:向量分布在最后一个进程列的n/√p个进程中。先将向量元素传输到它所在行的对角线进程中。进行一对多广播操作。各自执行乘法运算和局部求和运算。每一行累加得到结果向量(多对一规约)。
矩阵与矩阵的乘法
串行算法无论是直接乘还是化成小矩阵相乘,复杂度都是n*n*n
Cannon算法
扫描二维码关注公众号,回复:
3222374 查看本文章
初始移位时A的第i行左移i个,B的第j列上移j个。本地相乘后再A左移B上移再相乘,循环根号P次即可得到结果。
DNS算法
基于划分中间数据,一共有n*n*n次运算,我们使用这个数量的进程,每个进程进行一次运算,然后用logn时间进行一对多规约得到结果。算法步骤如下:
使用q个进程,我们把矩阵划分为块,可以得到成本最优的版本。思路完全一样,把整块当成一个数就可以。
线性方程组求解
高斯消元法(变成一个上三角矩阵):串行算法是W = 2/3 n*n*n。我们按行进行划分。
高斯异步消元法和高斯消元流水线法
这是成本最优的。不需要等待上一次流水线结束。
进程数少于n的一维块划分
由于负载分配不均衡造成的进程空闲引起的。使用一维循环映射可以解决这个问题。
进程个数为N*N的二维划分:不使用流水线不是成本最优的,使用流水线就是成本最优。