mpirun (и mpiexec), похоже, не передают аргументы командной строки моему коду c.mpirun не передает аргументы командной строки
Запуск мои exeutable "геккон" непосредственно из командной строки дает ожидается:
$ ./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) Безразлично У меня нет аргументов для работы. Я на Ubuntu 12.04 с MPICH 2.
Может ли кто-нибудь увидеть причину, почему этого не происходит?
Спасибо.
--------------------------- РЕДАКТИРОВАТЬ ------------------ ---------------
есть много примеров в сети, которые говорят, что путь для инициализации 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;
}
и что способ выполнения кода МПИ является использование:
mpirun -np 2 ./code_name
Так что, если mpirun не проходят аргументы нп и 2 в с-кодом, как же с кодом когда-нибудь кп Сколько процессоров должно быть запущено?
Ну, по крайней мере, это соответствует. При использовании OpenMPI a некоторые процессы получают аргументы и другую часть, не получая их (в Fortran, хотя). –
Вы должны использовать вместо 'mpirun -np 2. ./gecko -np 2', если вы хотите передать' -np 2' '' gecko'. –
MPI-1 требовал, чтобы 'argc' и' argv' должны были передаваться 'MPI_Init'. MPI-2 устранил это требование. Большинство примеров используют 'MPI_Init (& argc, & argv)' исключительно по историческим причинам. –