具有功能的多个进程

时间:2013-12-04 17:16:54

标签: c unix process parallel-processing

我目前有一个程序,它使用单个进程来添加/减去/乘法/转置2D数组(矩阵)。该程序读取两个文件,将双打存储到二维数组中,然后执行操作。

现在我正在尝试将其从单个进程分成x个进程。我想过让每个父分叉一个孩子,每个孩子打开矩阵文件,偏移到必要的行/列,执行必要的操作,然后将其返回给父母。

我是流程管理的新手,我意识到这不是最有效的方法,但我想知道如何执行此操作,如果这是解决此问题的正确方法。

2 个答案:

答案 0 :(得分:1)

最简单,最直接的方法是使用大多数C/C++Fortran编译器中提供的OpenMP语言扩展(请参阅here {{1} }}。)

并行处理矩阵如下所示:

gcc

然后外部循环在计算机具有CPU的线程中自动并行化。

OpenMP扩展提供了许多控制共享内存,工作负载管理等的选项。

答案 1 :(得分:0)

这大多是正确的。你可能想把你的矩阵放在共享内存中(否则每个孩子都会在自己的副本上工作),然后分叉你的孩子。如果您绝对确定每个孩子只能在矩阵的自己部分操作,您可以放弃同步。像

这样的东西
create/attach share memory

read matrix into shm

for(0..x)
{
     fork();
     if (child)
        doCalcs(some matrix subset);
}

for(0..x)
    wait();    

这是否更像PITA而不是它的价值可能是你尝试之后才能回答的问题。另一个明显的选择是线程,但你不一定要降低复杂性。