Как повлияет количество параллельных процессов на производительность процессора? - PullRequest
3 голосов
/ 03 октября 2011

Я пишу параллельную программу сортировки слиянием. Я использую fork () для выполнения параллельной обработки. Я попытался запустить 2 параллельных процесса, 4 процесса, 8 процессов и так далее. Затем я обнаружил, что для работы с двумя процессами требуется наименьшее время для завершения, то есть самая высокая производительность. Я думаю, что это разумно, так как мой процессор - Core 2 Duo. Кажется, что для процессов 4,8,16,32 наблюдается стабильное снижение производительности, но после этого производительность колеблется (похоже, не имеет закономерности). Кто-нибудь может это объяснить?

Кроме того, согласно шаблону, у меня возникает ощущение, что, когда число процессов, используемых в программе, равно числу ядер, которое имеет мой процессор, моя программа может иметь самую высокую производительность. Но я на 100% уверен. Может ли кто-нибудь проверить меня? Или скажите, что на самом деле влияет на производительность параллельной программы.

Заранее спасибо !!

Ответы [ 2 ]

1 голос
/ 03 октября 2011

3 процесса не должны никогда быть быстрее, чем 2 процесса в Core 2 Duo.

Кроме того, разветвление имеет смысл, только если вы выполняете дорогостоящие задачи:

Возможность напечатать сообщение Hello world! дважды - нонсенс. Сам процесс разветвления будет занимать больше процессорного времени, чем он мог бы сэкономить.

Возможность сортировки массива с 1 000 000 элементов (если вы используете правильный алгоритм сортировки) сократит время выполнения примерно вдвое.

1 голос
/ 03 октября 2011

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

Относительно того, почему вы увидели колебания в производительности, когда столкнулись с большим количеством процессов, я должен был бы предположить, что ваша ОС тратит больше времени на переключение между процессами, чем фактически выполняет работу, выполняющую сортировку. Время, необходимое для переключения задач, является артефактом планировщика вашей ОС, объема памяти, используемого отдельными задачами, кэширования, потенциального использования пространства подкачки и т. Д. *

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

...