使用MPI执行图的节点(作为任务)

时间:2011-07-26 23:21:32

标签: java parallel-processing mpi

我正在学习MPI,但我对它的正确使用有些怀疑。我正在使用MPJ Express。

首先,我计算一个非循环有向图,其节点代表任务。节点的传入弧表示其输入,传出弧表示其输出。这些任务的计算将在集群中执行。现在,我正在我的双核机器上运行该程序。

这就是我所做的:

-I我计算了每个节点作为MPI进程(RANK)的索引。然后,我使用Isend发送每个节点所需的信息:它必须执行的任务,以及其输出节点的等级。现在,当一个进程完成其计算时,它会将计算出的值发送给它首先收到的列所标识的进程。每个进程都使用Irecv等待输入值。

它运作良好,但整个指数(RANK)预计算对我来说似乎不对。我认为这可能是一种常见的情况,但我没有找到任何有用的东西。

你怎么看?以某种方式计算每个过程将具有的排名并告诉每个过程其输出和输入过程的排名是否正确?

- 我正在使用-np 10执行执行,现在:

如果我有2个核心,10意味着什么?

我想我应该将每个任务发送到这10个进程中的一个。如果我的任务多于进程,会发生什么?

如果我的任务少于进程,则执行顺利,但未使用的进程保持活动状态等待消息。我该怎么杀他们?

我希望我很好地解释了我的怀疑。

非常感谢您的回答和建议。

编辑:关于我如何获得每个任务的排名的一个小解释将作为一个过程。

我所做的非常简单(也许是愚蠢的):假设我的所有节点[v1,v2,v3]的列表分别为索引0,1,3。

我知道排名为0的进程将是主进程,它将任务v1发送到级别1的进程,v2进行级别2处理,依此类推。现在,我知道那个等级(v1)=索引(v1)+1,其余节点也是如此(这是排名预先计算)。

然后主程序遍历列表[v1,v2,v3],并为每个节点根据图形获取其前任和后继的排名。例如,如果图形是v1-> v3-> v2,则发送到具有等级3的处理的信息是:task:v3,predecessors :(具有等级1的处理)。继任者:(排名2的过程)。

0 个答案:

没有答案