我正在使用MPI调用使用c ++在多个进程上运行一个过程.我的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]);
Run Code Online (Sandbox Code Playgroud)
现在当我执行并运行我的程序时
mpiexec -n 1 program 10 10
Run Code Online (Sandbox Code Playgroud)
我希望x和y被赋值为10和10,因为它们是传递的第4和第5个参数.但这不会发生,它会相应地将这些变量分配给0和0.并且我的程序没有按预期运行.
当我更改这些数字时,我的串行代码正在运行.它只是我是MPI的新手.
你能说明我哪里出错吗?
Jon*_*rsi 19
在Linux/Windows/Mac OSX上的大多数MPI实现中,当您调用时MPI_Init(&argc, &argv),参数列表被修改,就像您运行串行问题一样program 10 10; 它将参数列表放到可执行文件中,这可能包含mpirun命令本身的任意数量的选项.
标准没有具体说明; 标准留下了很多关于启动进程和初始化过程的事情,因为MPI必须处理与POSIX类型系统行为非常不同的系统.但我从来没有在POSIX类型的环境中看到过没有这样做的MPI实现.
(更新为添加:) g.inozemtsev对该问题的评论是一个非常简洁的解释,为什么会发生这种情况.
| 归档时间: |
|
| 查看次数: |
14957 次 |
| 最近记录: |