我正在计算 200 x 200 维的矩阵乘法。我最多可以使用 8 个进程。我正在分叉子进程来计算行。我可以让一个进程执行 4 行并并行运行它们,或者我可以每个进程制作一行,即一次并行处理 5 行,然后通过重用相同的进程再并行处理 5 行。哪个效率更高?
问问题
86 次
1 回答
2
由于在这种情况下,所有作业都需要相同的努力(它们具有相同数量的乘法和加法),因此选择第一个选项(每个进程 4 行)会更有意义。第二个选项(每次每个进程 1 行)当作业在完成时间上是异构的或您需要低延迟时更有意义。您可以考虑每个选项的开销。
在第一个选项中,开销包括:
- 分工。
- 启动进程。
- 收集结果。
在第二个选项中,开销是:
- 分工。
- 启动进程。
- 当一个工人完成后,要求另一件。
- 再收到一块。
- 收集结果。
您可以看到在第二个选项中有更多开销。
至于第二种选择的可能架构,您可以使用服务器 - 客户端架构,一个进程将充当服务器,其余进程将充当客户端。服务器将负责划分工作,在需要时将其提供给客户端并收集结果。您可以在每个作业完成后或最后收集结果。一开始,服务器会创建客户端,给他们每个人一个工作,然后等到被要求做更多工作。当客户端完成给它的工作时,它会向服务器请求另一项工作,并将计算出的结果提供给服务器。这将重复,直到服务器没有更多的工作可以提供,此时它将通知客户端,以便他们可以退出。
于 2013-03-16T02:03:35.540 回答