如何在C语言的并行程序中重用进程

如何在C语言的并行程序中重用进程,c,parallel-processing,C,Parallel Processing,我在计算一个200乘200维的矩阵。我最多可以使用8个进程。我正在分叉子进程来计算行。我可以让一个进程做4行并并行运行,也可以让每个进程做一行,即一次并行处理5行,然后通过重用相同的进程再处理5行。哪个效率更高 因为在这种情况下,所有作业都要付出相同的努力(它们具有相同的乘法和加法次数),所以选择第一个选项(每个进程4行)更有意义。第二个选项(每次每个进程1行)在作业在完成所需时间上是异构的或者需要低延迟时更有意义。你可以考虑每个选项的开销。 在第一个选项中,开销包括: 分工 启动流程 收集结

我在计算一个200乘200维的矩阵。我最多可以使用8个进程。我正在分叉子进程来计算行。我可以让一个进程做4行并并行运行,也可以让每个进程做一行,即一次并行处理5行,然后通过重用相同的进程再处理5行。哪个效率更高

因为在这种情况下,所有作业都要付出相同的努力(它们具有相同的乘法和加法次数),所以选择第一个选项(每个进程4行)更有意义。第二个选项(每次每个进程1行)在作业在完成所需时间上是异构的或者需要低延迟时更有意义。你可以考虑每个选项的开销。

在第一个选项中,开销包括:

  • 分工
  • 启动流程
  • 收集结果
在第二个选项中,开销为:

  • 分工
  • 启动流程
  • 当一个工人做完后,再要一块
  • 再接一块
  • 收集结果
您可以看到,在第二个选项中有更多的开销


至于第二个选项的可能架构,您可以使用服务器-客户机架构,一个进程将充当服务器,其余进程将充当客户机。服务器将负责分配工作,在客户要求时将其提供给客户机,并收集结果。您可以在每个作业完成后或结束时收集结果。开始时,服务器将创建客户机,为每个客户机分配一个作业,然后等待请求更多工作。当客户机完成了它所做的工作后,它将要求服务器进行另一项工作,并向服务器提供它所计算的结果。这将重复进行,直到服务器没有更多的工作要做,此时它将通知客户端,以便他们可以退出。

20x20矩阵乘法很小。多个进程听起来不是正确的方法。您有多少个内核?如果没有I/O或交叉通信,这应该可以回答您的问题。另外,如果矩阵中只有数字,那么分叉比乘法需要更长的时间。例如,设为200*200,我有5个核心,我已经修改了Q-BITOK,你还是应该考虑线程,而不是进程,因为它避免了设置共享内存或IPC。你只计算一个矩阵乘法吗?如果是这样,那么多个过程仍然是一种浪费;处理将在几毫秒内完成(即使对于200x200),因此可能主要由设置时间控制。这里真正的问题是找出一种高效缓存的内存访问模式(但这是一个简单的问题)。