我正在尝试使用以下代码设置一个非常简单的 1 * 2 网格:
int nprow, npcol, myrow, mycol, myid;
char rowcol[1] = "R";
nprow = 1;
npcol = size / nprow;
if(npcol * nprow != size){
printf("Error");
MPI_Finalize();
exit(1);
}
Cblacs_pinfo(&myid, &size);
Cblacs_get(0, 0, &ictxt);
Cblacs_gridinit(&ictxt, rowcol, nprow, npcol);
Cblacs_pcoord(ictxt, myid, &myrow, &mycol);
printf("rank = %d, nprow = %d, npcol = %d, myrow = %d, mycol = %d\n", rank, nprow, npcol, myrow, mycol); }
问题是该Cblacs_pcoord
函数似乎正在将 nprow 更改为 0,无论它最初设置为什么,而这反过来为每个 myrow 给出 0,而 npcol 和 mycol 变量对于所使用的任何数量的处理器总是正确的。我很困惑,因为这个函数不应该触及 nprow 但我在每一行代码之后都打印了 nprow 并且在调用该函数之前它是正确的值。
如果我遗漏了任何可以帮助您回答我的问题的信息,请告诉我,我会相应地更新。