在矩阵向量乘法中我可以期待多少并行加速?

时间:2013-11-13 05:07:20

标签: mpi fortran90 matrix-multiplication

我编写了一个MPI例程来并行化矩阵向量乘法。加速一直令人失望。我在网上找到了很多例程,我正在以大多数例子的方式处理它。我无法找到的是真实机器上真正加速的大量数据。我正在处理我认为是一个适度大小的问题 - 矩阵大小从100x100到1000x1000,处理器数量从2到64.我正在以大致方形的棋盘方式分解矩阵。任何人都能指出我在这个问题规模和处理器数量范围内能够实际提出哪种加速的数据?感谢。

1 个答案:

答案 0 :(得分:4)

2*N^2 FP操作需要将N x N矩阵乘以长度为N的向量。当N等于1000时,这导致2.10 6 操作。现代CPU内核每个周期执行4个FP操作,并以大约2.10 9 周期/秒运行。因此,在单CPU核心上进行矩阵向量乘法仅需250μs。对于较小的矩阵,它可以在二次方面减少时间。现在将该时间除以一起工作的CPU核心数。

每种并行化技术都会引入某种开销。如果这个开销远远小于每个处理元件(= CPU核心)所做的工作量,那么使用这种技术才有意义。

如果增加矩阵大小,最终会遇到需要更多时间的问题,因此开销会相对较少。但你最终会遇到一个完全不同的问题 - 内存带宽。矩阵向量乘法是一个内存绑定问题,在现代CPU上,单个套接字的带宽很容易被一个或两个执行乘法的线程“吃掉”。拥有更多线程将无能为力,因为根本没有足够的内存带宽来为线程提供数据。只添加额外的CPU插槽可以提高性能,因为它可以有效地增加可用内存带宽。

就是这样 - 矩阵向量乘法在并行化方面是一个非常简单但也非常棘手的问题。