在处理矩阵的并行分解时,我熟悉块分布,我们有(比如说)4 个进程,每个进程都有自己的矩阵子区域:
因此,例如在这里我们有一行中的进程数 ( procrows
) 等于 2,一列中的进程数 ( proccols
) 也等于 2,如果原始矩阵大小为,则子矩阵A_local
的大小为。N/2 x M/2
N x M
我正在阅读这个使用“块循环”分布的例子,在这一部分:
/* Begin Cblas context */
/* We assume that we have 4 processes and place them in a 2-by-2 grid */
int ctxt, myid, myrow, mycol, numproc;
int procrows = 2, proccols = 2;
Cblacs_pinfo(&myid, &numproc);
Cblacs_get(0, 0, &ctxt);
Cblacs_gridinit(&ctxt, "Row-major", procrows, proccols);
它们有procrows
并且proccols
是硬编码的,很好,但是对于读入的矩阵,有一个标题:
Nb 和 Mb 将是 [矩阵] 块的行数和列数
我不明白这一点;不是完全由 N、M、procrows 和 proccols 决定的吗Nb
?Mb
编辑
从运行示例中,我可以看到进程 0 上的子矩阵具有矩阵左上角的所有元素,就像我上面的图片一样,这与乔纳森的回答相矛盾。但是,它适用于 ScaLAPACK 的 Cholesky。