2

我正在使用pdpotrf()来执行 Cholesky 分解。然后我想调用pdpotri()来反转矩阵。该函数从每个进程调用,就在pdpotrf(). 我应该在那里设置一个障碍,以便我确定所有过程都通过 Cholesky 分解完成,然后继续进行反演部分,还是不需要?

我写了一些输入很小的例子,这表明它不是必需的,但我想确定我不只是(不)幸运并且面临更大输入的问题。

请注意,我所说的障碍是指:MPI_Barrier(MPI_COMM_WORLD);


编辑

我只是担心在其他一些过程终止 Cholesky 分解之前可能会开始反转。pdpotri()照顾这个吗?我的意思是,如果需要,它会检查并等待。还是pdpotri()仅在其调用过程的子矩阵中起作用?如果是这样,则不需要屏障。

4

1 回答 1

2

虽然我没有研究 and 的细节pdpotri()pdpotrf()但我看到了两种情况:

1)这两个功能之间需要有一个障碍。然而,在这种情况下,因为pdpotri()must 总是在 之后pdpotrf(),所以在 的开头内置一个隐式边界是最有意义的pdpotri()

2)两个功能之间不需要有障碍。

在任何一种情况下,您都不需要使用MPI_Barrier().

于 2015-07-16T15:21:01.347 回答