Если вы берете последовательную программу и параллельную версию одной и той же программы, тогда параллельная программа должна выполнять некоторые операции, которые не выполняет последовательная программа, в частности операции, связанные с координацией операций нескольких процессоров.Они способствуют тому, что часто называют «параллельными издержками» - дополнительной работой, которую должна выполнять параллельная программа.Это один из факторов, который затрудняет ускорение в 2 раза на 2 процессорах, в 4 раза на 4 или 32000 на 32000 процессоров.
Если вы изучите код параллельной программы, вы часто найдете сегменты, которыеявляются последовательными, то есть которые используют только один процессор, в то время как другие простаивают.Существуют некоторые (фрагменты) алгоритмов, которые нельзя распараллелить, и есть некоторые операции, которые часто не распараллеливаются, но могут быть: например, операции ввода-вывода, для их распараллеливания вам нужна какая-то система параллельного ввода-вывода.Эта «последовательная дробь» обеспечивает минимальное время, необходимое для вычисления. Закон Амдала объясняет это, и эта статья предоставляет полезную отправную точку для дальнейшего чтения.
Даже если у вас есть программа, которая хорошо распараллеливает масштабирование (то есть способ ускоренияизменяется по мере увеличения числа процессоров) не равно 1. Для большинства параллельных программ размер параллельных служебных данных (или количество процессорного времени, которое отводится операциям, которые необходимы только для параллельных вычислений) увеличивается как некоторая функция числапроцессоров.Это часто означает, что добавление процессоров добавляет параллельные издержки, и в какой-то момент при масштабировании вашей программы и заданий увеличение накладных расходов компенсирует (или даже обращает вспять) увеличение мощности процессора.Статья о законе Амдала также охватывает закон Густафсона, который уместен здесь.
Я сформулировал это все в очень общих терминах, не принимая во внимание текущую архитектуру процессора и компьютера;я описываю особенности параллельных вычислений (как в настоящее время понимается), а не какой-либо конкретной программы или компьютера.
Я категорически не согласен с утверждением @Daniel Pittman о том, что эти проблемы имеют только теоретическое значение.Некоторые из нас очень усердно работают над тем, чтобы наши программы могли масштабироваться до очень большого числа процессоров (1000).И почти все разработки для настольных компьютеров и офисов в наши дни, а также большинство мобильных разработок ориентированы на многопроцессорные системы, и использование всех этих ядер является серьезной проблемой.
Наконец, чтобы ответить на ваш вопрос, в какой момент добавляются процессорыбольше не увеличивайте скорость выполнения, теперь это вопрос архитектуры и программы.К счастью, это тот, который поддается эмпирическому исследованию.Определение масштабируемости параллельных программ и определение путей ее улучшения - растущая ниша в профессии разработчика программного обеспечения.