как MPI определяет размер своего ранга - PullRequest
0 голосов
/ 03 мая 2018

Я новичок в MPI. Если я напишу подобный код на c ++, как система определит, сколько рангов будет иметь программа? Это не похоже на логику, которой мы придерживаемся в объектно-ориентированном языке: когда вы определяете массив, вы точно знаете размер. Какой механизм они используют в MPI, чтобы позволить системе решать, сколько ранга и всего размера? Это гибкий? Определить с помощью механики? Или просто автоматически генерировать при звонке?

int main(int argc, char *argv[]){   
MPI_Init(NULL, NULL);
int size, rank;
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
if (rank == 4)
    master();
else
    slave(rank);
MPI_Finalize();
return 0;}

1 Ответ

0 голосов
/ 03 мая 2018

Вот хорошая ссылка:

А вот учебник:

А вот и связанный вопрос

Чтобы ответить на ваш вопрос:

  • Ранг - это (логический) номер процесса (например, идентификатор потока)

  • Размер - это общее количество процессов (выделено, параллелизм)

Когда вы используете MPI_Init, посмотрите это: https://www.sharcnet.ca/help/index.php/Getting_Started_with_MPI, чтобы посмотреть, как установить количество процессов.

mpirun -n 4 ./parhello

Вы можете создать свой массив argv [] с помощью "-n N" и указать размер мира для вызова MPI_init.

Вы также можете установить размер мира, используя переменные окружения,

Заимствование из другого вопроса / ответа:

MPI_Comm_size возвращает размер коммуникатора. В нашем примере MPI_COMM_WORLD (который построен для нас MPI) включает в себя все процессы в работе, поэтому этот вызов должен вернуть сумму процессы, которые были запрошены для работы.

MPI_Comm_rank возвращает ранг процесса в коммуникаторе. каждый процессу внутри коммуникатора присваивается дополнительный ранг начиная с нуля. Ряды процессов в основном используются для идентификация при отправке и получении сообщений.

Ранг используется, чтобы отличать процессы друг от друга. У вас может быть «главный» процесс (rank = 0), который отправляет сообщения «ведомым» приложениям с рангом 1-15. Или вы можете использовать другие топологии для разделения рабочих нагрузок.

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