我正在使用pdpotrf()来执行Cholesky分解。然后我想调用pdpotri(),以便反转矩阵。在pdpotrf()
之后,每个进程都会调用该函数。我应该在那里设置一个障碍,以便我确信所有过程都是通过Cholesky分解完成的,然后转到反转部分,或者不需要它?
我用微小的输入写了一些例子,表明它不需要,但我想确定我不仅仅是(非)幸运并且面临更大输入的问题。
请注意,屏障是指:MPI_Barrier(MPI_COMM_WORLD);
修改的
我只是担心在其他一些进程终止Cholesky分解之前可能会开始反转。 pdpotri()
会照顾到这个吗?我的意思是,如果需要,它会检查并等待。或pdpotri()
仅在其调用过程的子矩阵中起作用?如果是这样,则不需要障碍。
答案 0 :(得分:2)
虽然我没有查看pdpotri()
和pdpotrf()
的详细信息,但我看到两种情况:
1)两个功能之间需要有障碍。但是,在这种情况下,由于pdpotri()
必须始终位于pdpotrf()
之后,因此在pdpotri()
的开头内置隐式边界最有意义。
2)两个功能之间不需要有障碍。
在任何一种情况下,您都没有必要使用MPI_Barrier()
编写自己的显式屏障。