我编写了一个 MPI 例程来并行化矩阵向量乘法。加速令人失望,甚至不存在。我在网上找到了很多例程,我的处理方式与大多数人的处理方式相同。我找不到的是关于真实机器上真实加速的大量数据。我正在处理我猜想是一个中等大小的问题——一个大小从 100x100 到 1000x1000 的矩阵和从 2 到 64 的处理器数量。我正在以大致正方形的棋盘方式分解矩阵。任何人都可以指出我在这个问题大小和处理器数量范围内实际希望获得什么样的加速的任何数据?谢谢。
问问题
994 次
1 回答
6
将矩阵乘以长度为 的向量需要2*N^2
FP 操作。等于 1000 这将导致 2.10 6次操作。现代 CPU 内核每个周期执行 4 次 FP 操作,运行速度约为 2.10 9个周期/秒。因此,在单个 CPU 内核上进行矩阵向量乘法仅需 250 µs 。使用较小的矩阵所需的时间会减少二次方。现在将该时间除以一起工作的 CPU 内核数。N x N
N
N
每种并行化技术都会引入某种开销。只有当这种开销大大小于每个处理元件(= CPU 内核)所做的工作量时,才有意义采用这种技术。
如果增加矩阵大小,最终会遇到需要更多时间的问题,因此开销会相对减少。但是你最终会遇到一个完全不同的问题——内存带宽。矩阵向量乘法是一个内存限制问题,在现代 CPU 上,单个套接字的带宽很容易被一个或两个执行乘法的线程“吃掉”。拥有更多线程将无济于事,因为根本没有足够的内存带宽来为线程提供数据。只有添加额外的 CPU 插槽才能提高性能,因为它会有效地增加可用的内存带宽。
就是这样 - 矩阵向量乘法在并行化方面是一个非常简单但也非常棘手的问题。
于 2013-11-13T14:29:21.923 回答