Скажем, у меня есть 4-ядерная рабочая станция, что будет делать linux (Ubuntu), если я выполню
mpirun -np 9 XXX
Q1. Будут ли 9 работать сразу вместе или 4 после 4?
Q2. Я полагаю, что использование 9 не годится, потому что оставшаяся часть 1 может запутать компьютер (я не знаю, будет ли он вообще сбит с толку, или «голова» компьютера решит, какое ядро среди Будет использовано 4 ядра?) Или оно будет выбрано случайным образом. Кто решает, какое ядро назвать?
В3. Если я чувствую, что мой процессор не плохой, и мой баран в порядке и достаточно большой, и мой случай не очень большой. Это хорошая идея, чтобы полностью использовать мой процессор и оперативную память, что я делаю mpirun -np 8 XXX или даже mpirun -np 12 XXX.
В4. Кто решает все эти оптимизации эффективности, Ubuntu, или Linux, или материнская плата, или процессор?
Ваше просвещение будет действительно оценено.
Да, вам необходимо значительно изменить код, чтобы превратить его из приложения MPI в приложение OpenMP или TBB. Если ваше приложение уже разработано, попробуйте его и выполните измерения производительности, прежде чем делать что-либо радикальное.
9 немедленно.
Если нет, размер вселенной будет неправильным. Все процессы должны существовать одновременно или не будут видны для других экземпляров.
Если память вашего экземпляра слишком велика, вы можете вручную остановить остальные 5 процессов, пока остальные 4 не завершат работу.
Однако, если вы используете MPI таким образом (только для локального компьютера), позвольте мне порекомендовать вам OpenMP / tbb. MPI действительно предназначен для распространения приложения на несколько сетевых компьютеров или узлов кластера.
mpirun
планирует в порядке круговой очереди по умолчанию, поэтому 1-й ядро / узел будет назначен этому процессу. np
за пределы количества доступных физических ядер / узлов. Компромисс состоит в том, что издержки увеличиваются с большим числом процессов, чем ядра / узлы. Если ваш код не сильно привязан к процессору (например, требует значительного времени ожидания ввода-вывода), вы должны сделать это. В конечном счете, вы не знаете, будет ли это быстрее, пока вы не попробуете. См. эту справочную страницу для более подробной информации.