我正在使用 C++ 使用 MPI 调用在多个进程上运行一个过程。
我的 Main 函数中的前几行如下所示:
int main(int argc, char *argv[]){
int comm_sz;
int my_rank;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &comm_sz);
MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
x = atoi(argv[4]);
y = atoi(argv[5]);
现在,当我使用以下命令执行并运行我的程序时
mpiexec -n 1 program 10 10
我希望为 x 和 y 分配值 10 和 10,因为它们是传递的第 4 个和第 5 个参数。
但这并没有发生,它相应地将这些变量分配给 0 和 0。我的程序没有按预期运行。
当我更改这些数字时,我的序列代码正在运行。只是我是 MPI 的新手。
你能建议我哪里出错了吗?
在 Linux/Windows/Mac OSX 上的大多数 MPI 实现中,当您调用MPI_Init(&argc, &argv)
,参数列表被修改,就像您运行串行问题一样program 10 10
;它会吃掉参数列表直至可执行文件,其中可能包含 mpirun 命令本身的任意数量的选项。
标准没有明确这一点;该标准留下了很多关于启动进程和初始化过程的内容,有些模糊,因为 MPI 必须在与 POSIX 类型系统行为非常不同的系统上工作。但我从未见过 POSIX 类型环境中的 MPI 实现不这样做。
(更新为添加:) g.inozemtsev 对这个问题的评论是一个极好的、简洁的解释why有时候是这样的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)