我有一个描述物理系统的大矩阵。最后两行与其他行根本不同,因此需要单独设置。此外,将这些行中的每个行分布在不同的进程上是没有意义的。我想在第0个进程中设置两行,然后将它们复制到全局矩阵。
我有什么? -分布式M x N矩阵,上面的(M-2)x N块已被填充。
我想做什么? -计算第0个进程的最后2 x N个元素,然后使用PDGEMR2D
出什么问题了? -我需要在所有进程上调用PDGEMR2D
。因此,需要分配要复制的矩阵(我认为它通常称为a
),并在所有进程上都有一个scalapack描述符。在第0个进程中,局部矩阵是2 x N,在所有其他进程中,它是0 x N。
如何处理空子矩阵?
通常,要获取scalapack描述符,我将使用本地行数为descinit
来调用LLD
。但是,此数字必须> = 1,但在矩阵为空的进程中,该数字为0。
(请注意,fortran允许您分配具有0个元素的数组-这纯粹是一个ScaLAPACK问题。)