首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算独立核心的使用并将流程绑定到核心

计算独立核心的使用并将流程绑定到核心
EN

Stack Overflow用户
提问于 2015-09-30 16:58:45
回答 1查看 88关注 0票数 0

我正在使用MPI,并且我有一个特定的操作层次。对于参数_param的特定值,我启动了10次试验,每次在不同的核心上运行特定的进程。对于_param的n个值,代码在特定层次结构中运行,如下所示:

driver_file ->启动一个进程,检查可用进程是否超过10个。如果可用进程超过10个,则启动一个具有特定_param值的进程实例,该实例作为参数传递给coupling_file。

coupling_file ->进行一些基本计算,然后使用MPI_Comm_spawn()启动10个进程,每个进程对应于一个trial_file,同时将_trial作为参数传递。

trial_file ->计算工作,将值返回给coupling_file

我正面临两种困境,即:

  1. 如何评估driver_file内核所需的条件?在这里,我如何知道有多少进程已经被终止,以便我可以正确地安排进程在空闲的核心上?我想也许添加一个阻塞的MPI_Recv()并使用它来传递一个变量,这个变量可以告诉我某个进程什么时候完成了,但我不确定这是否是最好的解决方案。
  2. 如何确保将进程分配给不同的核心?我曾考虑过使用类似于mpiexec --bind-to-core --bycore -n 1 coupling_file的东西来启动一个coupling_file。接下来是类似于mpiexec --bind-to-core --bycore -n 10 trial_file的coupling_file。但是,如果我将进程绑定到一个核心,我不希望同一个核心有两个/多个进程。与此一样,我不希望_trial_1 of _coupling_1在核心x上运行,然后启动另一个coupling_2进程,它启动_trial_2,该进程也绑定到核心x

如有任何意见,将不胜感激。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-30 20:14:48

如果这是你的选择,我会完全放弃产卵过程,而是一次启动所有进程。然后,您可以轻松地将它们划分为处理单个任务的块。例如,对你的概念的翻译可以是:

  • 使用一位大师(0级)
  • 将其余的进程划分为10个进程组,如果需要,可以为每个组创建一个新的通信器,每个组都有一个主进程。

然后,在您的代码中,您可以执行如下操作:

代码语言:javascript
复制
if master:
    send a specific _param to each group leader (with a non-blocking send)
    loop over all your different _params
        use MPI_Waitany or MPI_Waitsome to find groups that are ready
else
    if groupleader:
        loop endlessly
            MPI_Recv _params from master
            coupling_file
            MPI_Bcast to group
            process trial_file
    else
        loop endlessly
            MPI_BCast (get data from groupleader)
            process trial file

我认为,按照这种方法,你可以解决你的两个问题。MPI_Wait*会检测到进程组的可用性,尽管您可能希望更改上面的逻辑,以便在任务结束时通知主进程,以便它只发送新数据,而不是在上一次试用期间仍在运行,而另一个进程组可能更快。固定是解决的,因为你有固定数量的进程,可以正确地固定在通常的启动。

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

https://stackoverflow.com/questions/32871781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档