Открытый MPI: как запустить ровно 1 процесс на хост - PullRequest
3 голосов
/ 24 августа 2011

На самом деле у меня есть 3 вопроса.Любой вклад приветствуется.Спасибо!

1) Как запустить ровно 1 процесс на каждом хосте?Мое приложение использует TBB для многопоточности.Означает ли это, что для лучшей производительности я должен запускать ровно по 1 процессу на каждом хосте?

2) В моем кластере гетерогенные хосты.Некоторые хосты имеют лучшие процессоры и больше памяти, чем другие.Как сопоставить ранги процессов с реальными хостами в целях распределения работы?Я думаю использовать имя хоста. Есть ли лучше сделать это?

3) Как присваиваются звания процесса?Какой процесс получает 0?

1 Ответ

3 голосов
/ 24 августа 2011

1) TBB разделяет циклы на несколько потоков пула потоков, чтобы использовать все процессоры одной машины.Таким образом, вы должны запустить только один процесс на машину.Больше процессов будет бороться друг с другом за процессорное время.Количество процессов на машину задается параметрами в вашем хост-файле:

# my_hostfile 
192.168.0.208 slots=1 max_slots=1
...

2) Предоставление каждой машине соответствующего объема работы в соответствии с ее производительностью не является тривиальным.Самый простой подход - разделить рабочую нагрузку на небольшие части работы, отправить их рабам, собрать их ответы и дать им новые части работы, пока вы не закончите.На моем сайте есть пример (на немецком языке).Вы также можете найти там некоторые ссылки на руководства и учебные пособия.

3) Каждый процесс получает номер (processID) в вашей программе на

MPI_Comm_rank(MPI_COMM_WORLD, &processID);  

Мастер имеет processID == 0. Возможно, другие получают слоты в порядке вашего файла хоста,Другая возможность состоит в том, что они назначаются в порядке установления соединений с подчиненными.Я этого не знаю

...