我需要从我知道的另一个进程等级中获取变量值。这发生在“A x = b”方程的并行求解器的上下文中,秩为 0 的进程知道矩阵 A,而其他进程将该矩阵中的一些值 (i,j) 放入并行求解器的矩阵中数据类型(Petsc 的垫子)。这意味着这些其他进程遍历委托给它们的范围,计算 i 和 j,检索 ij 的元素,并调用 MatSetValue。没有办法避免这种方式 - 它是一种有限差分方法,并且父进程在中心点和相邻点(左、右、上、下)中具有变量值 例如,在 petsc 库中的ex13F90.F中也会发生同样的情况例子。
问题是我不知道从父进程中检索 a_central、a_top、a_bottom、... 值的正确 MPI 子例程。现在我尝试广播它们(MPI_Bcast),但这意味着每个进程都有整个矩阵并且内存不足。
根据下面的答案,这个问题的本质是“我如何进行单一大小的 MPI 通信?”......