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