我目前有一个程序,它使用单个进程来添加/减去/乘法/转置2D数组(矩阵)。该程序读取两个文件,将双打存储到二维数组中,然后执行操作。
现在我正在尝试将其从单个进程分成x个进程。我想过让每个父分叉一个孩子,每个孩子打开矩阵文件,偏移到必要的行/列,执行必要的操作,然后将其返回给父母。
我是流程管理的新手,我意识到这不是最有效的方法,但我想知道如何执行此操作,如果这是解决此问题的正确方法。
答案 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而不是它的价值可能是你尝试之后才能回答的问题。另一个明显的选择是线程,但你不一定要降低复杂性。