Более быстрый код также более энергоэффективен? - PullRequest
0 голосов
/ 28 декабря 2018

Предположим, у меня есть процессор, работающий с постоянной скоростью, тянущий равное количество энергии за инструкцию.У меня также есть две функционально идентичные программы, которые приводят к одному и тому же выводу, за исключением того, что одна была оптимизирована для выполнения только 100 инструкций, в то время как другая программа выполняет 200 инструкций.Программа на 100 инструкций обязательно быстрее, чем программа на 200 инструкций?Может ли программа с меньшим количеством команд потреблять меньше энергии, чем программа с большим количеством инструкций?

Ответы [ 2 ]

0 голосов
/ 31 декабря 2018

Все гораздо сложнее.

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

Вторая версиямог выполнять больше инструкций из-за более сложной обработки данных, но я не удивлюсь, если бы это было быстрее из-за того, как организована память: чтение изображения по одному столбцу за раз приводит к «очистке кеша», и это очень возможночто, несмотря на свою простоту, код, работающий таким образом, может быть НАМНОГО медленнее, чем более сложный, выполняющий обработку дружественным для памяти способом.Более простой код может в конечном итоге «затормозиться», ожидая, пока строки кэша не будут заполнены или сброшены во внешнюю память.

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

0 голосов
/ 28 декабря 2018

Обязательно ли программа с 100 инструкциями быстрее, чем программа с 200 инструкциями?

Нет.Во-первых, на некоторых архитектурах (, таких как x86 ) разные инструкции могут занимать разное количество циклов.Во-вторых, существуют эффекты - такие как ошибки в кеше, ошибки страниц и неправильные прогнозы ветвей - которые еще больше усложняют картину.

Из этого следует, что ответ на ваш заголовочный вопрос "не обязательно".

Дополнительная литература .

...