Итак, 1 - это вопрос о запуске процессов, а 2 + 3 - это вопросы, в основном, о настройке производительности. Настройка производительности может потребовать существенной работы над базовым кодом, но вам не нужно потребовать , чтобы изменить строку кода для выполнения всего этого.
Из вашего первого вопроса я понимаю, что вы хотите изменить распределение запущенных MPI-процессов. Делать это обязательно за пределами стандарта, потому что это зависит от ОС и платформы; поэтому каждая реализация MPI будет иметь разные способы сделать это. Последние версии OpenMPI и MPICH2 позволяют указать, где заканчиваются процессоры, поэтому вы можете указать два процессора на сокет и т. Д.
Вам не нужно изменять код, чтобы это работало, но существуют проблемы с производительностью в зависимости от основных дистрибутивов. В общем, об этом сложно сказать, потому что это зависит от ваших шаблонов связи, но да, чем «ближе» процессоры, тем быстрее будет связь в целом.
Нет определенного ограничения на общий объем данных, которые передаются между задачами MPI туда и обратно, но да, существуют ограничения пропускной способности (и существуют ограничения для каждого сообщения). Размер кэша такой, какой он есть.