Mpi 在矩阵向量乘法中我能期望多大的并行速度?

Mpi 在矩阵向量乘法中我能期望多大的并行速度?,mpi,fortran90,matrix-multiplication,Mpi,Fortran90,Matrix Multiplication,我已经编写了一个MPI例程来并行化矩阵向量乘法。这一速度令人失望,甚至根本不存在。我在网上找到了很多程序,我处理这些程序的方式和大多数程序差不多。我没能找到很多关于真实机器上实际速度的数据。我正在处理一个中等规模的问题——矩阵大小从100x100到1000x1000,处理器数量从2到64。我正在以一种近似正方形的棋盘格方式分解矩阵。有谁能告诉我,在这个问题大小和处理器数量范围内,我能实际期望什么样的速度?谢谢。需要2*N^2FP操作才能将nxn矩阵乘以长度N的向量。当N等于1000时,将导致2.

我已经编写了一个MPI例程来并行化矩阵向量乘法。这一速度令人失望,甚至根本不存在。我在网上找到了很多程序,我处理这些程序的方式和大多数程序差不多。我没能找到很多关于真实机器上实际速度的数据。我正在处理一个中等规模的问题——矩阵大小从100x100到1000x1000,处理器数量从2到64。我正在以一种近似正方形的棋盘格方式分解矩阵。有谁能告诉我,在这个问题大小和处理器数量范围内,我能实际期望什么样的速度?谢谢。

需要
2*N^2
FP操作才能将
nxn
矩阵乘以长度
N
的向量。当
N
等于1000时,将导致2.106次运算。现代CPU内核每周期执行4次FP操作,运行速度约为2.109周期/秒。因此,在单个CPU核上执行矩阵向量乘法只需250µs。用较小的矩阵进行二次运算所需的时间较少。现在将该时间除以一起工作的CPU核数

每种并行化技术都会引入某种开销。只有当这种开销大大小于每个处理单元(=CPU核心)所做的工作量时,才有必要采用这种技术

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


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

需要
2*N^2
FP操作才能将
nxn
矩阵乘以长度
N
的向量。当
N
等于1000时,将导致2.106次运算。现代CPU内核每周期执行4次FP操作,运行速度约为2.109周期/秒。因此,在单个CPU核上执行矩阵向量乘法只需250µs。用较小的矩阵进行二次运算所需的时间较少。现在将该时间除以一起工作的CPU核数

每种并行化技术都会引入某种开销。只有当这种开销大大小于每个处理单元(=CPU核心)所做的工作量时,才有必要采用这种技术

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


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

我猜您的MPI例程也没有使用完整的寄存器宽度。假设仅使用SIMD指令就可以获得2倍的加速比;请参阅Intel提供的相关但稍有过时的PDF:我猜您的MPI例程也没有使用完整的寄存器宽度。假设仅使用SIMD指令就可以获得2倍的加速比;请参阅英特尔提供的相关但略显过时的PDF:谢谢。有一段时间无法访问该站点以点击“接受”按钮。谢谢。有一段时间无法访问该站点以点击“接受”按钮。