在编写 MPI 3.0 代码时,我应该传递argc
和调用还是不传递argv
,MPI_Init
为什么?
编辑:由于比尔巴特的回答提出了一些问题,我想发表一些评论:
- 自 MPI 1.1 起,不需要传递
argc
/ 。argv
- 问题具体是关于为什么应该/不应该通过
argc
/argv
(为什么你不应该不是真正的答案)。 - 尽管如此,有时您仍然无法传递
argc
/argv
到MPI_Init
(如果 main 不在您的控制范围内并且 MPI 是实现细节,则编写使用静态初始化来启动 MPI 的库)。
EDIT2:你为什么不使用MPI_Init(argc, argv)
的问题现在出现得太频繁了。一些原因:
为了与旧的/不兼容的/兼容的 MPI < 1.1 实现兼容而这样做是不可能的,因为如果您使用的是 MPI2 或 MPI3 功能,那么这些功能无论如何都不起作用。
MPI_Init()
以相同的方式初始化 MPI 运行时MPI_Init(argc, argv)
MPI_Init(argc, argv)
从 中删除传递给 MPI 运行时的参数argc
,argv
并初始化 MPI。AFAIK 这是清理的唯一方法argc
,argv
所以如果你需要这些没有 MPI 参数,你需要使用它。MPI_Init()
可以用在更多的情况下MPI_Init(argc, argv)
。例如,使用 MPI 作为实现细节的库可以测试 MPI 是否已初始化,如果未初始化,则调用MPI_Init()
并且会发生正确的事情。您的用户不知道您正在使用 mpi,不需要将 , 传递argc
给argv
您的库,不需要更改他们的 main(如果它不带参数)来使用您的库....