Ao escrever código MPI 3.0, que deve passar argc
e argv
à MPI_Init
chamada ou não, e por quê?
EDIT: Como a resposta de Bill Barth levantou algumas perguntas, quero fazer algumas observações:
- A aprovação
argc
/argv
não é necessária desde o MPI 1.1. - A pergunta é especificamente sobre por que deveria / não se deve passar
argc
/argv
( por que você não deveria então não é realmente uma resposta). - Ainda assim, às vezes você não pode passar
argc
/argv
paraMPI_Init
(escrever uma biblioteca que usa inicialização estática para iniciar o MPI se main estiver fora do seu controle e o MPI for um detalhe de implementação).
EDIT2: A pergunta por que você não usariaMPI_Init(argc, argv)
chegou com muita frequência agora. Algumas razões:
Não é possível fazê-lo por uma questão de compatibilidade com implementações MPI <1.1 mais antigas / não compatíveis / compatíveis, pois se você estiver usando recursos MPI2 ou MPI3, eles não funcionarão de maneira alguma.
MPI_Init()
inicializa o tempo de execução MPI da mesma maneira queMPI_Init(argc, argv)
MPI_Init(argc, argv)
remove argumentos passados para a MPI tempo de execução deargc
eargv
e inicializa MPI. AFAIK é a única maneira de limparargc
eargv
, se você precisar que eles não tenham argumentos MPI, precisará usá-lo.MPI_Init()
pode ser usado em mais situações queMPI_Init(argc, argv)
. Por exemplo, sua biblioteca que usa o MPI como um detalhe de implementação pode testar se o MPI foi inicializado e, se não, a chamadaMPI_Init()
e a coisa certa acontecerão. O seu usuário não sabe que você está usando MPI, não precisa passarargc
,argv
para a sua biblioteca, não precisa mudar seu principal (no caso de ser tomada sem argumentos) para usar sua biblioteca ....
MPI_Init()
que precisa obter corretamente os argumentos aos quais você passa mpirun
/ de mpiexec
alguma forma (não é especificado como), e como MPI_Init()
pode ser usada em mais situações do que MPI_Init(argc, argv)
(e sem soluções alternativas), eu não ' Realmente não adianta usar MPI_Init(argc, argv)
se você estiver segmentando o MPI 3.0.
argc
e a argv
partir dos argumentos MPI e inicializar o MPI, use-o MPI_Init(argc, argv)
; caso contrário, tudo MPI_Init()
bem (e às vezes é necessário).