Передача аргументов через командную строку с MPI - PullRequest
17 голосов
/ 08 февраля 2012

Я использую вызовы MPI для запуска процедуры на нескольких процессах с использованием c ++.Первые несколько строк в моей главной функции выглядят так:

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]);

Теперь, когда я запускаю и запускаю свою программу, используя

mpiexec -n 1 program 10 10

, я хочу, чтобы x и y были назначены значения 10 и10, так как они являются 4 и 5 аргументами.Но этого не происходит, и он присваивает эти переменные 0 и 0 соответственно.и моя программа не работает так, как хотелось бы.

У меня работает серийный код при изменении этих номеров.Просто я новичок в MPI.

Можете ли вы подсказать, где я ошибаюсь?

Ответы [ 2 ]

18 голосов
/ 08 февраля 2012

В большинстве реализаций MPI в Linux / Windows / Mac OSX, когда вы вызываете MPI_Init(&argc, &argv), список аргументов изменяется так же, как если бы вы запустили последовательную проблему как program 10 10;он ест список аргументов вплоть до исполняемого файла, который потенциально может содержать любое количество параметров самой команды mpirun.

Стандарт не определяет это;Стандарт оставляет много вещей в отношении запуска процессов и процесса инициализации несколько расплывчато, поскольку MPI должен работать в системах, которые ведут себя совершенно иначе, чем системы POSIX-типа.Но я никогда не видел реализацию MPI в среде типа POSIX, которая этого не делает.

(Обновлено, чтобы добавить :) Комментарий g.inozemtsev по этому вопросу является отличным, кратким объяснением, так как почему это происходит.

0 голосов
/ 27 марта 2019
#include<stdio.h>
#include<mpi.h>
int main(int argc, char *argv[]){
int comm_sz;
int my_rank;
int x,y;

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

x = atoi(argv[1]);
y = atoi(argv[2]);

printf("%d,%d\n",x,y);
}

Попробуйте, MPI рассматривает аргументы после имени программы, поэтому используйте 1 и 2 в качестве аргумента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...