Ao escrever código MPI 3.0, que deve passar argce argvà MPI_Initchamada 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/argvnã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/argvparaMPI_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 deargceargve inicializa MPI. AFAIK é a única maneira de limparargceargv, 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,argvpara 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.
argce a argvpartir 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).