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

bob*_*nto 1 mpi matrix-multiplication fortran90

我编写了一个 MPI 例程来并行化矩阵向量乘法。速度的提升已经令人失望到不存在。我在网上找到了很多例程,我处理这个的方式与大多数例程相同。我没能找到很多关于真实机器上真实加速的数据。我正在处理我认为是一个中等规模的问题——一个大小从 100x100 到 1000x1000 的矩阵和从 2 到 64 个处理器的数量。我正在以大致方形的棋盘方式分解矩阵。任何人都可以指出我在这个问题大小和处理器数量范围内可以实际希望获得什么样的加速的任何数据?谢谢。

Hri*_*iev 6

2*N^2N x N矩阵乘以长度为 的向量需要FP 运算N。随着N等于1000这个结果在2.10 6操作。现代 CPU 内核每个周期执行 4 次 FP 操作,运行速度约为 2.10 9个周期/秒。因此,在单个 CPU 内核上进行矩阵向量乘法只需 250 µs 。对于较小的矩阵,它花费的时间成二次方减少。现在将该时间除以协同工作的 CPU 内核数。

每种并行化技术都会引入某种开销。只有当这种开销远小于每个处理元素(= CPU 内核)完成的工作量时,才有意义采用这种技术。

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

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