2012-02-07 14 views
14

Używam wywołań MPI do uruchomienia procedury na wielu procesach przy użyciu C++. Pierwszych kilka linii w moich głównych funkcji wyglądać następująco:Przekazywanie argumentów za pośrednictwem wiersza polecenia przy użyciu MPI

int main(int argc, char *argv[]){ 
int comm_sz; 
int my_rank; 

MPI_Init(&argc, &argv); 
MPI_Comm_size(MPI_COMM_WORLD, &comm_sz); 
MPI_Comm_rank(MPI_COMM_WORLD, &my_rank); 

x = atoi(argv[4]); 
y = atoi(argv[5]); 

Teraz kiedy wykonać i uruchomić mój program za pomocą

mpiexec -n 1 program 10 10 

Chcę x i y mają być przypisane wartości 10 i 10, jak są to 4 i 5 argumenty przekazane. Ale tak się nie dzieje i przypisuje te zmienne odpowiednio do 0 i 0. a mój program nie działa zgodnie z oczekiwaniami.

Mam mój kod seryjny uruchomiony po zmianie tych numerów. Po prostu jestem nowy w MPI.

Czy możesz zasugerować, gdzie się mylę?

+0

Czy próbowałeś po prostu wydrukować zawartość 'argv'? Jaki jest wynik? – suszterpatt

+0

Zrobiłem. Kiedy wydrukowałem zawartość tablicy, rozpoznałem dwa argumenty 10, 10, ale nie na pozycjach 4 i 5. – freshmaster

+0

Wydaje się, że czyta się je jako argv [1] i argv [2]. Rozwiązałem mój problem tak, ale chciałem wiedzieć, dlaczego tak się dzieje. Nie rozumiem dokładnie MPI_Init. – freshmaster

Odpowiedz

15

W większości implementacji MPI na Linux/Windows/Mac OSX, gdy dzwonisz MPI_Init(&argc, &argv), lista jej argumentów jest modyfikowany tak jakby trzeba było uruchomić problem seryjny jak program 10 10; zjada listę argumentów do pliku wykonywalnego, który może potencjalnie zawierać dowolną liczbę opcji samego polecenia mpirun.

Standard nie określa tego; standard zostawia wiele rzeczy na temat uruchamiania procesów, a proces inicjalizacji jest nieco niejasny, ponieważ MPI musi działać na systemach, które zachowują się inaczej niż systemy typu POSIX. Ale nigdy nie widziałem implementacji MPI w środowisku typu POSIX, które tego nie robi.

(Zaktualizuj, aby dodać :) komentarz g.inozemtsev na to pytanie jest doskonałym, zwięzłym wyjaśnieniem co do tego, , dlaczego tak się dzieje.

Powiązane problemy