我正在使用MPI,并且我有一定的操作层次结构。对于参数_param
的特定值,我会启动10个试验,每个试验在不同的核心上运行特定的过程。对于_param
n个值,该代码在一定的层次结构形式运行:计算独立内核的使用情况并将进程绑定到内核
driver_file - > 启动一个方法,该方法检查是否可用的方法是超过10个。如果多于10是可用的,则它启动的一个实例与作为参数传递的特定_param
值过程coupling_file
coupling_file - > 做一些基本的计算,并且然后启动使用MPI_Comm_spawn()
10点的过程,每一个对应于trial_file同时使_trial
作为参数
trial_fil Ë - > 计算工作,返回值,我面临两个难题,即coupling_file
:
如何评估在driver_file核心所要求的条件? 和我一样,如何找出有多少进程已被终止,以便我可以在空闲内核上正确调度进程?我想也许增加一个阻塞
MPI_Recv()
并使用它来传递一个变量,它会告诉我某个进程何时完成,但我不确定这是否是最佳解决方案。如何确保将进程分配给不同的内核?我曾考虑过使用诸如
mpiexec --bind-to-core --bycore -n 1 coupling_file
之类的东西来启动一个coupling_file。接下来是由coupling_file启动的类似mpiexec --bind-to-core --bycore -n 10 trial_file
。但是,如果我对一个核心进行绑定,我不希望同一个核心拥有两个/多个进程。因为我不想要_trial_1
的_coupling_1
在核心x
上运行,那么我启动coupling_2
的另一个过程,该过程启动_trial_2
,该过程也被绑定到核心x
。
任何输入,将不胜感激。谢谢!
因为你需要一个固定的进程数量,为什么不用mpiexec启动所有的进程,然后把任务交给他们呢?您可能需要在客户端服务器处理中添加一些逻辑,但是您将摆脱产卵,并且可以正确固定所有进程。 – haraldkl