Если я заменю одноядерный процессор двухъядерным процессором, увеличит ли он пропускную способность в два раза? Если нет, то почему пропускная способность не увеличивается вдвое?
5 ответов
Это определенно не увеличится в два раза; это было бы совершенно эффективным увеличением пропускной способности. Это невозможно, так как всегда есть некоторые накладные расходы. Сколько выгоды вы получите, будет зависеть от нескольких факторов:
Он может вообще не увеличиться, если ОС или программы, на которых вы работаете, не оборудованы для планирования процессов на разных ядрах.
Он может только немного увеличиться, если задачи, которые вы выполняете, не очень распараллеливаются (например, они сильно зависят от операций ввода-вывода или других медленных операций без использования ЦП).
Он может значительно увеличиться, если задачи "смущающе параллельны", например, длинные прогоны идентичных вычислений с плавающей запятой или факторизации простых чисел.
Это может ухудшить ситуацию, если слишком много переключений контекста из-за зависимостей между процессами или если вам нужно синхронизировать вещи между процессами.
См. Http://en.wikipedia.org/wiki/Amdahl%27s_law для хорошего описания того, почему это не удвоит вашу пропускную способность, и как проанализировать, каким будет улучшение на самом деле.
Ваша пропускная способность будет только лучше, если ваш код написан с использованием двух процессоров. Как правило, вам нужно убедиться, что ваш код использует 2 или более потоков выполнения для выполнения задания.
Только в некоторых случаях вы увидите, что производительность фактически удвоится, так как для ведения нескольких потоков необходимо вести бухгалтерский учет.
Только для вещей, которые связаны с процессором. Вещи, которые имеют пропускную способность памяти или связаны с вводом / выводом, вероятно, не улучшатся вообще.
Это зависит от того, какой код вы используете. Если вы привязаны к вычислениям и ваш код использует потоки, вы можете увидеть увеличение производительности в 2 раза (при той же тактовой частоте). Если вы связаны с вводом-выводом памяти или однопоточными, то вы можете вообще не видеть улучшения (или даже ухудшения производительности).