在我的一个 PETSc 程序中,我需要一个处理器来访问另一个处理器的值。
因此,在 PETSc 常见问题解答中,此问题已在此处简要解决。为了创建一个本地向量,我试过这个
Vec local;
ierr = VecCreateSeq(PETSC_COMM_WORLD,10,&local);CHKERRQ(ierr);
其中 10 是我希望创建的局部向量的大小。但是使用 2 个处理器运行会给我一个错误
[0]PETSC ERROR: --------------------- Error Message ------------------------------------
[0]PETSC ERROR: Invalid argument!
[0]PETSC ERROR: Cannot create VECSEQ on more than one process!
[0]PETSC ERROR: ------------------------------------------------------------------------
所以更准确地说,我想编写一个玩具代码,我想从一个v分布在 n 个处理器上的大向量中添加所有元素。
我想通过将所有元素收集v到 Process 0 本地的向量中并将它们全部加起来来做到这一点。
更一般地说,Process 0 如何从任何特定的处理器(比如处理器)获取元素i