Когда Солвер считает, загрузка процессора достигает в лучшем случае 80 процентов, очень часто случаются провалы графика загрузки вообще до нуля. В других программах загрузка процессора стабильно держится на уровне 100%.
Распараллеливание в CFD кодах как правило происходит путем распределения частей расчетной сетки (систем уравнений) по вычислительным процессорам/ядрам. При этом периодически необходимо обмениваться данными между процессорами для связывания кусков сетки.
В момент обмена данными процессор фактически простаивает, ожидая, когда из оперативной памяти прибудет новый кусок кода.
Ожидание новых данных из оперативной памяти свойственно даже параллельным программам, на чем основана технология Hyper Threading от Intel. А в случае параллелизации (особенно в случае расчета на нескольких процессорах) доступ к данным из "чужой" оперативной памяти существенно медленнее, чем к "родной" для процессора памяти, от чего загрузка процессора оказывается неполной.
Таким образом, из-за аппаратных ограничений почти невозможно обеспечить 100% нагрузку процессора в процессе счета. При этом уровень загрузки зависит от регулярности расчетной сетки, от пространственного расположении фасеток геометрии, от режима параллельного запуска и т.д.
При использовании MPI и сложной сильно неравномерной расчетной сетки с высоким уровнем локальной адаптации возможны ситуации, когда часть процессоров будут перегружены, а часть будут не догружены. В этом случае недогруженные процессоры будут простаивать в ожидании, когда перегруженные процессоры завершат расчет.
Другой причиной неполной нагрузки на процессор могут являться операции построения слоев в многопроцессорном режиме и операции ввода/вывода в файловую систему (сохранение данных на диск).
Некоторые версии и реализации MPI имеют особенность: даже в состоянии простоя происходит загрузка процессора на 100%, однако загрузка эта холостая. В процессе счета реальное полезное использование процессора остается существенно меньше 100%, но в операционной системе отображается именно полная загрузка, что не соответствует действительности и возможностям современных программно-аппаратных средств в области CFD.
Методы увеличения эффективности использования процессора
- Не используйте MPI для распараллеливания внутри процессора (если только нет четкого понимания необходимости в этом), используйте потоки (опция "использовать все ядра" при запуске Солвера)
- При параллельных вычислениях не используйте высокий уровень адаптации
- При неравномерной нагрузке по процессорам используйте балансировку (вкладка Солвер - Дополнительные настройки)
- Не запускайте Солвер в таком режиме, чтобы на одно ядро приходилось меньше 15 000 ячеек
- Используйте многоканальный режим работы оперативной памяти. Используйте максимально быструю оперативную память и максимально быстрый интерконнект.
- Не редко из-за ограничения скорости обмена данными между процессором и оперативной памятью эффективность счета можно увеличить если использовать не все ядра процессора, а их часть (75%).
- Не используйте процессоры с очень большим количеством ядер, т.к. процессы на ядрах будут конкурировать за оперативную память, пропускная способность которой в настоящее время (2014 год) сильно ограничена