矩阵向量乘法
串行算法中需要n*n次乘法和加法运算。
一维行划分
每个进程一行以及向量的一个元素:
进程数少于n:每个进程存储n/p个整行还有n/p个元素。使用超立方体结构
推导矩阵向量乘法的等效率函数
一维列划分
参考一维行划分(习题8.2)
二维划分
- 每个进程一个元素:向量x分布在n个进程的最后一列。将向量x沿着矩阵A的主对角线排列,接着复制到相应列的所有进程(一对多广播通信)。各自相乘后将行的结果相加放到最后一列的进程中(每一行进行多对一规约操作)。三个操作的时间都是logn,计算成本是n*n*logn,不是成本最优。
- 进程数少于n*n:向量分布在最后一个进程列的n/√p个进程中。先将向量元素传输到它所在行的对角线进程中。进行一对多广播操作。各自执行乘法运算和局部求和运算。每一行累加得到结果向量(多对一规约)