Я заинтересован в балансировке нагрузки для многоядерных процессорных систем. Если вы используете 1 процессор с несколькими ядрами, будет ли более энергоэффективно балансировать нагрузку на несколько ядер или пытаться заполнить одно ядро и оставить другие бездействующими.
Основное предположение состоит в том, что объем работы, выполняемой в обоих случаях, является одинаковым в одно и то же время. Таким образом, более эффективно использовать 4 ядра в одном процессоре с нагрузкой 25% каждое или 1 ядро с нагрузкой 100%.
Я бы предположил, что 1 ядро со 100% нагрузкой должно быть более эффективным, но, как я мог ошибаться, я искал серьезные ответы по этой проблеме (без догадок).
cpu-usage
power-consumption
private_meta
источник
источник
Ответы:
ИМО этот вопрос просто неопровержим в общем случае.
У меня на столе один из этих новомодных 6-ядерных процессоров с поддержкой TurboBoost Core i7-980x. Если вы загрузите одно ядро на этой машине, это повысит тактовую частоту этого ядра, увеличивая тем самым энергопотребление процессора, что приведет к огромной разнице. Этот процессор, как и другие, более современные процессоры, может частично отключать неактивные ядра, увеличивая экономию энергии. Это не так на старых моделях процессоров.
Помните, что работа с одним ядром обязательно будет отличаться от работы с несколькими ядрами. Если это так, что вы Можно Распределив нагрузку на несколько ядер, вы обнаружите, что много времени будет потрачено на одно ядро, выполняющее дорогостоящие переключения контекста, и ваша производительность пострадает.
Во всяком случае, проблема имеет слишком много переменных, чтобы действительно ответить. Можно было бы продолжать и рассказывать о различных типах нагрузок, и любой, кто попытается провести сравнительный анализ, чтобы получить ответ, в конечном итоге (вероятно, случайно) сделает сравнение яблок с апельсинами, которое не применяется в других случаях использования.
Да, и еще одна вещь. Большинство людей, вероятно, процитируют эффективность с точки зрения мощность , Вы не хотите попасть в эту ловушку. Поскольку время обработки нагрузок обязательно будет различным в зависимости от того, как нагрузки сбалансированы, вы должны интегрировать результат с течением времени, чтобы найти чистую сумму энергия используется для завершения работы, чтобы получить надежный результат.
источник
Я сделал несколько тестов сегодня, используя этот компьютер (Intel C2D T8100) и использование оптимизированных приложений SETI @ Home из программы установки лунатика 0.36. я использовал M $ Джоулметр рассчитать энергопотребление. Я измерил время потребления дерева. Во-первых, я позволил BOINC занять 100% ядер и 100% процессорного времени и позволить ему работать в течение одного часа. Процессор потреблял 20 Вт, а графики времени процессора из диспетчера задач были равны 100%. Среднее энергопотребление моего компьютера составляло 45,05 Вт и росло, и в момент, когда я прекратил тестирование, энергопотребление составляло 46,18 Вт.
Во втором тесте я настроил BOINC так, чтобы он занимал 50% доступных ядер и 100% процессорного времени, и он работал в течение одного часа. Потребляемая мощность процессора варьировалась от 12 Вт до 13 Вт. Среднее потребление было 42,72 Вт и растет. В тот момент, когда я остановил тест, потребление было 44 Вт. Чтобы график времени процессора для целевого ядра был плоским, я установил привязку программы к одному ядру и приоритету к высокому. График для другого ядра показывает несколько большее, чем обычно, использование ЦП.
Для третьего теста я настроил BOINC на использование 100% доступных ядер и 50% процессорного времени. Потребление энергии варьировалось большими скачками от 5 Вт до 17 Вт. Средняя потребляемая мощность после одного часа испытаний составила 39,96 Вт и падала. Графики времени процессора зациклены как
/\/\/\/\/\/\/\/\/\/\/\/\/\
, Пики были ожидаемы из-за размера единиц времени, используемых BOINC.Поэтому я считаю, что более эффективно использовать два ядра, работающие с половинной нагрузкой, чем одно ядро с полной нагрузкой.
И да, я знаю, что для правильного изучения нужно гораздо больше образцов, но в то время у меня не хватает компьютеров или времени для правильной статистики.
источник
Ответ на ваш вопрос имеет два аспекта: если вы используете параллельный код с высокой степенью векторности, балансировка нагрузки между несколькими ядрами всегда более эффективна. Ядра будут работать при более низких нагрузках, выделяя меньше тепла, чем одно ядро, которое выдвигается до своего предела. С другой стороны, если ваш код не распараллеливается, то запуск его на нескольких ядрах менее эффективен из-за количества ошибок в кеше, которые могут возникнуть из-за зависимостей по всему коду. Это может по-прежнему генерировать меньше тепла, но это определенно займет больше времени для выполнения вашей задачи по сравнению с работой на одном ядре.
источник
В вашем вопросе слишком много неизвестных. Вы спрашиваете об эффективности времени или энергоэффективности? Непараллельный код или параллельный код? Отдельная работа или обычная настольная многозадачность? Если у вас есть счет за электроэнергию более 1000 долларов в месяц для ваших компьютеров, то это может стоить беспокойства или двух. В противном случае вы не сможете накопить достаточно денег, чтобы решить проблему. Об этом интересно говорить, но если у вас серьезная проблема, лучший ответ: попробуйте разные вещи и посмотрите, что работает.
источник