как MPI определяет размер своего ранга

Я новичок в 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

Решение

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

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

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

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

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

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

Когда вы используете 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. Или вы можете использовать другие топологии для разделения рабочих нагрузок.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]