【发布时间】:2023-04-05 12:40:02
【问题描述】:
为了以并行模式计算 2 个矩阵 A 和 B(nxm 维度)之间的乘积,我有以下限制:服务器向每个客户端发送来自矩阵 A 的一些行,以及来自矩阵 A 的一些行矩阵 B。这不能改变。此外,客户端可以在彼此之间交换信息,以便计算矩阵乘积,但它们不能要求服务器发送任何其他数据。
这应该尽可能以最有效的方式完成,这意味着通过最小化进程之间发送的消息数量 - 被认为是一项昂贵的操作 - 并尽可能并行地进行小型计算。
根据我的研究,实际上客户端之间交换的最大消息数是 n^2,以防每个进程将其行广播给所有其他进程。现在,问题是,如果我最小化发送的消息数量——这将在 log(n) 左右用于分发输入数据——但是计算只能由一个或多个进程完成,但无论如何,它不是不再并行完成,这是问题的主要思想。
有什么更有效的算法可以计算这个乘积?
(我正在使用 MPI,如果它有什么不同的话)。
【问题讨论】:
-
每个客户是否都知道哪些其他客户收到了哪些行,或者他们也必须要求弄清楚这一点?
-
是的,每个客户都可以通过计算自己找出来。
-
您确定客户端接收的是矩阵 B 的行而不是列吗?如果确实如此,那问题就会复杂化一些。
-
确实是问题所在,客户端从矩阵 B 接收行并且没有足够的信息来计算结果矩阵中的元素。从矩阵 A 接收到的行中仍有未使用的元素,这就是它们需要与其他客户端交换信息的原因。
-
确定是并行化的好问题?对于
n节点,它将需要n*n流量,同时每个节点将产生更少的有用信息。
标签: algorithm matrix parallel-processing mpi