Как многопоточная программа будет более энергоэффективной? - PullRequest
5 голосов
/ 03 августа 2011

В своих Руководящих указаниях по энергоэффективному программному обеспечению Intel предполагает, что программы разрабатываются многопоточно для повышения энергоэффективности.

Я не понимаю.Предположим, у меня есть четырехъядерный процессор, который может отключать неиспользуемые ядра.Предположим, что мой код идеально распараллелен (издержки синхронизации незначительны).

Если я использую только одно ядро, я сжигаю одно ядро ​​в течение одного часа, если я использую четыре ядра, я сжигаю четыре ядра в течение 15 минут - столько жеосновные часы в любом случае.Где экономия?

Ответы [ 6 ]

7 голосов
/ 03 августа 2011

Я подозреваю, что это связано с нелинейной зависимостью между загрузкой процессора и энергопотреблением. Так что, если вы можете распределить 100% загрузки ЦП по 4 ЦП, каждый из них будет использовать 25% - скажем, 12% потребления.

Это особенно верно, когда используется динамическое масштабирование ЦП в соответствии с Википедия потребление энергии ЦП составляет P = C(V^2)F. Когда процессор работает быстрее, он требует более высоких напряжений, и это становится решающим. Кроме того, напряжение будет функцией F (что означает, что F может быть решена для V), давая что-то вроде P = C(F^2)F. Таким образом, распределяя нагрузку по 4 процессорам (работающим на 100% емкости на этой частоте), вы можете снизить стоимость той же работы.

Мы можем сделать F функцией L (нагрузки) на 100% одного ядра (как это было бы в вашей ОС), поэтому:

F = 1000 + L/100 * 500 = 1000 + 5L
p = C((1000 + 5L)^2)(1000 + 5L) = C(1000 + 5L)^3

Теперь, когда мы можем связать нагрузку (L) с потребляемой мощностью, мы можем увидеть характеристики потребляемой мощности, учитывая все на одном ядре:

p = C(1000 + 5L)^3
p = 1000000000 + 15000000L + 75000L^2 + 125L^3

Или распределить по 4 ядрам:

p = 4C(1000 + (5/4)L)^3
p = 4000000000 + 15000000L + 18750.4L^2 + 7.5L^3

Обратите внимание на факторы перед L ^ 2 и L ^ 3.

4 голосов
/ 03 августа 2011

В течение этого часа одно ядро ​​не единственное, что вы продолжаете работать.

3 голосов
/ 03 августа 2011

ЦП - это одна часть компьютера. У него есть вентиляторы, материнская плата, жесткие диски, видеокарта, оперативная память и т. Д., Назовем это BASE. Если вы занимаетесь научными вычислениями (т. Е. Вычислительным кластером), вы работаете на многих компьютерах. В любом случае, если вы используете 100 BASE, почему бы не позволить этим BASES иметь несколько физических процессоров на них, чтобы эти процессоры могли совместно использовать ресурсы BASE, физические и логические.

Теперь маркетинговая реклама INTEL, вероятно, также зависит от того факта, что в наши дни каждая пластина процессора содержит несколько ядер. Питание нескольких физических процессоров отличается от питания одного физического процессора с несколькими ядрами.

Таким образом, если объем работы, выполняемой на единицу мощности, является эталоном, о котором идет речь, то современные процессоры выполняют высокопараллельные задачи, тогда да, вы получаете большую отдачу по сравнению с процессорами предыдущего поколения. Поскольку вы можете не только получить больше ядер / процессоров, но и обычно , чтобы получить BASE, которые могут занимать несколько процессоров.

Можно легко утверждать, что одна топовая система теперь может содержать вычислительную мощность 8-16 одноядерных ЦП прошлого (при условии, что в этом гипотетическом случае это на новой системе и старшем поколении). система, каждое ядро ​​имеет одинаковую вычислительную мощность).

2 голосов
/ 04 августа 2011

Существует 3 причины, две из которых уже были указаны:

  1. Большее общее время означает, что другие (не CPU) компоненты должны работать дольше, даже если чистый расчет дляЦП остается прежним
  2. Чем больше потоков, тем больше операций выполняется одновременно (поскольку киоски используются для чего-то полезного), опять же сокращается общее реальное время.
  3. Потребление энергии ЦП дляВыполнение тех же вычислений на одном ядре не совпадает .Процессоры Intel имеют встроенное повышение тактовой частоты для одноядерного использования (я забыл маркетинговое модное слово для этого).Более высокая тактовая частота означает непропорционально большее энергопотребление и непропорционально больше тепла, что также требует от вентилятора более быстрого вращения.

Таким образом, в итоге вы потребляете больше энергии с ЦП и больше энергии для охлажденияCPU в течение более длительного времени, а другие компоненты вы также запускаете в течение более длительного времени.

В качестве четвертой причины можно утверждать (обратите внимание, что это только предположение!), Что процессоры Intel являются многопоточными, и посколькуЯдра Hyper-Threading разделяют некоторые ресурсы, запуск двух потоков одновременно более эффективен, чем запуск одного потока в два раза дольше.

2 голосов
/ 03 августа 2011

Вы сжигаете в 4 раза больше энергии с 4 ядрами, но вы также выполняете в 4 раза больше работы! Если, как вы сказали, синхронизация незначительна, а работа распараллелена, вы потратите в 4 раза меньше времени.

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

2 голосов
/ 03 августа 2011

Если программа многопоточная, это не значит, что она будет использовать больше ядер.Это просто означает, что одновременно выполняется больше задач, поэтому общее время процессора сокращается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...