10

Я заинтересован в балансировке нагрузки для многоядерных процессорных систем. Если вы используете 1 процессор с несколькими ядрами, будет ли более энергоэффективно балансировать нагрузку на несколько ядер или пытаться заполнить одно ядро и оставить другие бездействующими.
Основное предположение заключается в том, что объем работы, выполняемой в обоих случаях, является одинаковым в одно и то же время. Таким образом, более эффективно использовать 4 ядра в одном процессоре с нагрузкой 25% на каждое или 1 ядро с нагрузкой 100%.
Я бы предположил, что 1 ядро со 100% нагрузкой должно быть более эффективным, но, как я мог ошибаться, я искал серьезные ответы по этой проблеме (без догадок).

4 ответа4

6

ИМО этот вопрос просто неопровержим в общем случае.

У меня на столе один из этих новых 6-ядерных процессоров с поддержкой TurboBoost Core i7-980x. Если вы загрузите одно ядро на эту машину, это повысит тактовую частоту этого ядра, тем самым увеличив энергопотребление процессора, что приведет к огромной разнице. Этот процессор, как и другие, более современные процессоры, может частично отключать неактивные ядра, увеличивая экономию энергии. Это не так на старых моделях процессоров.

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

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

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

4

Сегодня я провел несколько тестов, используя этот компьютер (Intel C2D T8100) и оптимизированные приложения SETI @ Home из программы установки безумца 0.36. Я использовал M $ Joulmeter для расчета потребляемой мощности. Я измерил время потребления дерева. Во-первых, я позволил 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.

Поэтому я считаю, что более эффективно использовать два ядра с половинной нагрузкой, чем одно ядро с полной нагрузкой.

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

0

Ответ на ваш вопрос имеет два аспекта: если вы используете параллельный код с высокой степенью векторности, балансировка нагрузки между несколькими ядрами всегда будет более эффективной. Ядра будут работать при более низких нагрузках, выделяя меньше тепла, чем одно ядро, которое выдвигается до своего предела. С другой стороны, если ваш код не распараллеливается, то запуск его на нескольких ядрах менее эффективен из-за количества ошибок в кеше, которые могут возникнуть из-за зависимостей в коде. Это может все еще генерировать меньше тепла, но это определенно займет больше времени для выполнения вашей задачи по сравнению с работой на одном ядре.

0

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .