Я написал программу, которая использует MPI, она решает очень большую систему уравнений. Я получаю очень хорошие «ускорения» для очень больших систем. Под этим я подразумеваю, что если я увеличу количество процессов, то потребуется время, необходимое для завершения половинок, плюс постоянное время, добавленное к этому, которое я считаю связью. Например, в одном процессе это может занять 60 секунд, затем в двух - 35 секунд (60 + 5), затем в 4 - 20,5 (17,5 + 3) и т.д.

Однако при входе в системы размером примерно 1 на 1 миллион я начинаю получать странные результаты. При переходе с 4 ядер на 8 ядер я получаю половину времени плюс 10 секунд "связи". То есть время, необходимое для завершения вычисления, составляет от ~ 260 до ~ 140.

Это хорошо, но затем при переходе с 8 на 16 время возрастает с ~ 140 до ~ 110, я также получаю очень похожий плохой результат при переходе с 16 на 32. То есть от ~ 110 до ~ 85.

Кажется, я думаю, что это как-то связано с самим процессором, так как это поведение не появилось бы внезапно (?).

В системе 2 таких процессора

https://ark.intel.com/products/120485/Intel-Xeon-Gold-6140-Processor-24_75M-Cache-2_30-GHz

Существует также около 8000 ГБ оперативной памяти.

Я хотел бы получить объяснение, почему это может происходить.

Я рад предоставить больше информации. Я знаю, что это сложный вопрос, и я не уверен, какая информация вам нужна.

1 ответ1

0

Трудно диагностировать этот способ, но вот некоторые моменты:

  • Каждый процесс использует оперативную память, поэтому удвоение количества процессов означает удвоение необходимой оперативной памяти. Если доступное физическое ОЗУ исчерпано, подкачка на диск замедлит обработку.

  • Даже в многоядерном компьютере некоторые ресурсы являются общими для всех процессов. К ним относятся, в основном, оперативная память и диск, поэтому интенсивное использование будет означать, что процессы будут бороться за доступ к ресурсам и будут ждать.

  • Если процессы используют методы синхронизации, такие как семафоры, следует ожидать некоторого потерянного времени ожидания, которое будет увеличиваться прямо пропорционально количеству процессов.

Многие из этих узких мест можно увидеть, просто наблюдая за поведением ваших процессов с помощью диспетчера задач или диспетчера ресурсов, чтобы вы могли точно определить узкое место и улучшить его.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .