POSIX Threads в многопроцессорной системе - PullRequest
0 голосов
/ 27 января 2012

Я написал программное обеспечение, использующее преимущества потоков POSIX, чтобы я мог использовать общую память в процессе. У меня вопрос, есть ли у меня машина с Ubuntu с 4 процессорами, и каждый процессор имеет 16 ядер. Является ли более эффективным запуск 4 процессов с 16 потоками или 1 с 64 потоками? Каждый процессор имеет выделенную 32 ГБ оперативной памяти.

Мое главное беспокойство заключается в том, что за процессом «видел с 1» будет происходить много мемкопии.

В итоге:
На 4-х (16-ти ядерном) оборудовании
1 процесс 64 потока?
4 процесса 16 потоков каждый?
Если процесс требует более 32 ГБ ОЗУ (количество, выделенное для одного процесса), ответ отличается?

Спасибо за вашу помощь

1 Ответ

1 голос
/ 27 января 2012

Зависит от того, что делает ваше приложение.

Поток в однопоточном процессе работает быстрее, чем поток в многопоточном процессе, так как последний требует синхронизации между потоками в функциях библиотеки, таких как malloc(), fprintf() и т. Д. Также, большепотоки в многопоточном процессе, вероятно, вызовут больше конфликтов блокировки, замедляющих друг друга.Если потоки не нуждаются в обмене данными и не обмениваются данными, они не должны быть в одном процессе.

В вашем случае, вы можете получить лучший параллелизм с 4 процессами с 16 потоками, а не с 1процесс с 64 потоками.

...