首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >具有函数的多进程

具有函数的多进程
EN

Stack Overflow用户
提问于 2013-12-04 17:16:54
回答 2查看 63关注 0票数 0

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

现在,我尝试将它从单个进程分离为x个进程。我想尝试让每个父代派生一个子代,每个子代打开矩阵文件,偏移到必要的行/列,执行必要的操作,然后将其返回给父代。

我是进程管理的新手,我知道这不是最有效的方法,但我想知道如何执行它,这是否是解决这个问题的正确方法。

EN

回答 2

Stack Overflow用户

发布于 2013-12-04 20:30:46

要做到这一点,最简单和最直接的方法是使用大多数C/C++Fortran编译器中提供的OpenMP语言扩展(参见gcchere )。

并行处理矩阵如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  #pragma omp parallel for
  for(i = 0; i < N; i++)
     for(j = 0; j < N; j++)
           // process a[i][j] 

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

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

票数 1
EN

Stack Overflow用户

发布于 2013-12-04 17:58:24

这基本上是正确的。您可能希望将矩阵放在共享内存中(否则每个子节点将处理自己的副本),然后派生您的子节点。如果您绝对确定每个子级将只对矩阵中自己的部分进行操作,则可以放弃同步。所以就像这样

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
create/attach share memory

read matrix into shm

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

for(0..x)
    wait();    

这是不是比它的价值更多,这可能是只有你尝试后才能回答的问题。另一个明显的选择是线程,但也不一定会降低复杂性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20381731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文