1

我正在尝试使用以下代码设置一个非常简单的 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 并且在调用该函数之前它是正确的值。

如果我遗漏了任何可以帮助您回答我的问题的信息,请告诉我,我会相应地更新。

4

0 回答 0