gpt4 book ai didi

c - mpirun 不传递命令行参数

转载 作者:太空宇宙 更新时间:2023-11-04 05:38:26 27 4
gpt4 key购买 nike

mpirun(和 mpiexec)似乎没有将命令行参数传递给我的 C 代码。

直接从命令行运行我的可执行文件“gecko”会给出预期的结果:

$ ./gecko  -np 2

main:There are 3 arguments:
arg=./gecko
arg=-np
arg=2

但是同样通过mpirun运行是不一样的:

$ mpirun -np 2 ./gecko

main:There are 1 arguments:
arg=./gecko

这意味着 MPI_init(argc,argv) 没有任何参数可以使用。我在带有 MPICH 2 的 Ubuntu 12.04 上。

谁能看出这没有发生的原因?

谢谢。

------------------------ 编辑-------------------- --------------

网上有很多例子说初始化MPI的方法是通过命令行参数,例如:

#include <stdio.h>
#include “mpi.h”
int main(int argc, char* argv[])
{
int size, rank;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
printf(“Greetings from process %i\n”, rank);
MPI_Finalize();
return 0;
}

并且执行 mpi 代码的方法是使用:

mpirun -np 2 ./code_name

那么,如果 mpirun 不将参数 np 和 2 传递给 c 代码,c 代码如何知道它应该在多少个处理器上运行?

最佳答案

-np 参数不是要由您的可执行文件解释,而是由 mpirun 解释。如果您想将额外的参数传递给您的可执行文件,您必须像往常一样将它们列在可执行文件名称之后。

如果您需要 MPI 任务的数量,您应该使用为您提供该数量的适当 MPI 函数。

编辑:

MPI 可以通过提供给 MPI_Init 的参数或通过实现者满意的任何其他方式传递启动信息。根据您使用的 MPI 实现,您可能会看到 MPI 将更多参数传递给您的程序。 MPI_Init 然后撕掉所有它需要的东西,只留下那些它不理解的东西。

您不应在您的应用程序中依赖任何此类参数传递约定。 MPI 旨在可移植,您应该只使用 MPI 函数来访问运行时参数。

关于c - mpirun 不传递命令行参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26344613/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com