Re: Энергоэффективность алгоритмов
От: Vzhyk2  
Дата: 18.02.25 15:11
Оценка: +1 -1 :))
Здравствуйте, Философ, Вы писали:

Ф>Собственно сабж: для интеловского или амдешного железа есть способ замерить потреблённое электричество?

Да. Ставишь своему коду с этой функцией реалтаймовый приоритет (останавливаешь всё остальное) и подключаешь ваттметр к компу и получаешь результат.
Re: Энергоэффективность алгоритмов
От: Stanislav V. Zudin Россия  
Дата: 18.02.25 14:59
Оценка: +3
Здравствуйте, Философ, Вы писали:

Ф>А есть ли способ измерить потребление электричества какой-нибудь функцией?


Ф>Я тут сейчас гуглил новости про то, что датацентры города обогревают — вот, задумался: может уже пора делать профилировщики энергопотребления? Иногда нужно не быстрее: выбор среди алгоритмов может быть не по принципу кто быстрее и/или меньше памяти сожрёт, а по жоритости — скорость может быть во всех случаях приемлимой.


А разве энерго-ужористость не прямо пропорциональна алгоритмической сложности?
Если один алгоритм выполняется, допустим, за O(logN), а другой за O(N^2), то кто из них больше раскочегарит процессор?
_____________________
С уважением,
Stanislav V. Zudin
Re: Энергоэффективность алгоритмов
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 18.02.25 15:26
Оценка: 4 (2)
Здравствуйте, Философ, Вы писали:

Ф>А есть ли способ измерить потребление электричества какой-нибудь функцией?


Что-то есть:
https://greencompute.uk/Measurement/RAPL

Несколько лет назад выходило одно известное сравнение языков, но к нему там много вопросов было, хотя вспоминают нередко.
https://thenewstack.io/which-programming-languages-use-the-least-electricity/
Возможно, были и другие.
Отредактировано 18.02.2025 15:27 D. Mon . Предыдущая версия .
Re[4]: Энергоэффективность алгоритмов
От: Философ Ад http://vk.com/id10256428
Дата: 19.02.25 22:22
Оценка: 3 (2)
Здравствуйте, Stanislav V. Zudin, Вы писали:

SVZ>Хочешь убрать кеш? Боюсь время отклика софта...


Не, совсем убирать кэш — лишее, можно не убирать кэш, да и невозможно это. Можно строить алгоритм так, чтобы он по-минимому затрагивал кэш-линейки (даже ценой лишних вычислений).
Кроме того, далеко не всегда время отклика имеет значение: есть риалтаймовые операции, а есть операции, не требующие риалтайма. Например, показать, что кнопка нажалась, нужно сразу — риалтайм, а вот выдавать результат можно и не в риалтайме. Более того, сотни фоновых служб вообще не требуют внимания пользователя — там всё равно минуту CPU они сожрут или сто, результат пользователь наверняка увидит минимум завтра, а может, и вообще не увидит.

SVZ>К тому же всегда стремились уменьшить частоту обновления кеша. А для этого данные желательно укладывать плотно, чтобы минимизировать промахи.


Категорически неверно, наоборот: данные редко укладываются плотно — их выравнивают по границам DWORD и QWORD. Мотивация тут простая: современные процессоры работают с памятью блоками фиксированного размера, поэтому если данные выровнены по границам этих блоков, процессору требуется всего одно обращение к памяти для чтения или записи. Если данные не выровнены, процессору может потребоваться два или более обращения, что увеличивает накладные расходы. Кроме того, SIMD-инструкции (например, SSE, AVX) часто требуют, чтобы данные были выровнены по определенным границам (например, 16 байт для SSE, 32 байта для AVX).

Выравнивание данных уменьшает промахи кэша: кэш-память работает с блоками данных (кэш-линиями), обычно размером 64 байта. Выровненные данные с меньшей вероятностью пересекают границы кэш-линий, что уменьшает количество кэш-промахов и вероятность вытеснения данных из кэша. Однако если данные не выровнены, они могут пересекать границы кэш-линий, и процессору потребуется загрузить или обновить две кэш-линии вместо одной.

Например, если операция записывает элемент данных размером QWORD, и он не выровнен, то одна часть данных может оказаться в одной кэш-линии, а другая — в следующей. Это приведёт к тому, что процессору потребуется пометить две кэш-линии как DIRTY вместо одной, что увеличивает накладные расходы.

Кроме того, современные кэши используют ассоциативную организацию. Если данные не выровнены, они могут попадать в разные наборы кэша, что увеличивает вероятность кэш-конфликтов. Выравнивание данных помогает минимизировать такие конфликты.

Ф>>4)...поводу использования синхронизации...инструкций типа PAUSE....


SVZ>Что-то мне подсказывает, что ты говоришь о размазывании потребления во времени, а не сокращении оного. Ну т.е. число операций значимо не уменьшится, просто процессор будет больше спать. Но суммарно на решение времени потратит то же количество энергии, что и в "турбо" режиме.


Нет, например в случае инструкции PAUSE внутри цикла с высокой вероятностью произойдёт снижение частоты ядра и с меньшей вероятностью переход в более глубокий C-state. В связи с тем, что асимптотика тепловыделения на средних частотах кубическая, а на высоких экспоненциальная, то само по себе использование PAUSE имеет смысл — это не размазывание по времени. Размазыванием по времени это было бы, если бы была линейная зависимость.
Всё сказанное выше — личное мнение, если не указано обратное.
Отредактировано 20.02.2025 2:12 Философ . Предыдущая версия .
Re: Энергоэффективность алгоритмов
От: swame  
Дата: 19.02.25 08:27
Оценка: 2 (1) +1
Здравствуйте, Философ, Вы писали:

Ф>А есть ли способ измерить потребление электричества какой-нибудь функцией?


Ф>Я тут сейчас гуглил новости про то, что датацентры города обогревают — вот, задумался: может уже пора делать профилировщики энергопотребления? Иногда нужно не быстрее: выбор среди алгоритмов может быть не по принципу кто быстрее и/или меньше памяти сожрёт, а по жоритости — скорость может быть во всех случаях приемлимой. Это особенно актуально для носимых гаджетов и ноутбуков.


Ф>Это также может быть актуально для датацентров. В конце-концов, это может быть актуально для дома, когда нужно обеспечить поток тёплого воздуха из корпуса (чтоб владелец компа замёрзшие пальцы отогрел). Кстати, я когда-то так делал — запускал furmak чтобы руки погреть.


Ф>Собственно сабж: для интеловского или амдешного железа есть способ замерить потреблённое электричество?


Думаю что в современных условиях больше жрут электричество фреймворки а не отдельные алгоритмы.
А также синтаксический сахар и непонимание разработчиками то го что "под капотом" этих фреймворков.

Вот только за сегодня
https://habr.com/ru/companies/alfa/articles/882054/
https://habr.com/ru/companies/alfa/articles/883226/
Re[3]: Энергоэффективность алгоритмов
От: Vzhyk2  
Дата: 18.02.25 16:38
Оценка: -1 :)
Здравствуйте, Философ, Вы писали:

Ф>Это могло бы сработать, если бы не прерывания таймера и небольшое разрешение ваттметра. Да и прочие аппаратные прерывания сильно портят перспективы.

Поставь ОС, что будет делать только то, что ты сказал, а не всякую хрень.

Ф>А потом, представь себе бенчмаркинг для вычислений длинной в минуту:

Ф>10 лезем к ваттметру, записываем значение
Ф>20 запускаем код руками, ждём остановки
Ф>30 call 10
Ф>40 вычисляем
Ф>Абуреешь — надо что-нибудь более удобное.
Я понял, эта задачка для тебя не подъемна. Но ты можешь попросить чатгопоту или дипсика объяснить тебе для твоего уровня мышления.
Re[3]: Энергоэффективность алгоритмов
От: пффф  
Дата: 18.02.25 16:44
Оценка: -1 :)
Здравствуйте, Философ, Вы писали:

Ф>Это могло бы сработать, если бы не прерывания таймера и небольшое разрешение ваттметра. Да и прочие аппаратные прерывания сильно портят перспективы.

Ф>А потом, представь себе бенчмаркинг для вычислений длинной в минуту:
Ф>10 лезем к ваттметру, записываем значение
Ф>20 запускаем код руками, ждём остановки
Ф>30 call 10
Ф>40 вычисляем

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

А аппаратные прерывания — это таки сущая мелочь
Re[6]: Энергоэффективность алгоритмов
От: Pzz Россия https://github.com/alexpevzner
Дата: 24.02.25 15:42
Оценка: +1 :)
Здравствуйте, Stanislav V. Zudin, Вы писали:

Pzz>>Есть мнение, что выигрыш будет раза в два. Не в 10.


SVZ>Если говорить про производительность, то код на Вебасме (после Emscripten) и Шарпе проседает примерно вдвое+ по-сравнению с оригинальным С++.

SVZ>А вот по энергопотреблению пёс его знает.

Вот эта вот константа "примерно вдвое" вылазит и из вебасма, и из шарпа, и из быстрого JS (который с JIT-ом), и из Явы и даже из Go. Везде получается примерно вдвое. Наверное, это фундаментальная физическая константа, типа постоянной Планка.
Re: Энергоэффективность алгоритмов
От: Sharov Россия  
Дата: 24.02.25 09:27
Оценка: 1 (1)
Здравствуйте, Философ, Вы писали:

Ф>А есть ли способ измерить потребление электричества какой-нибудь функцией?

Ф>Я тут сейчас гуглил новости про то, что датацентры города обогревают — вот, задумался: может уже пора делать профилировщики энергопотребления? Иногда нужно не быстрее: выбор среди алгоритмов может быть не по принципу кто быстрее и/или меньше памяти сожрёт, а по жоритости — скорость может быть во всех случаях приемлимой. Это особенно актуально для носимых гаджетов и ноутбуков.
Ф>Это также может быть актуально для датацентров. В конце-концов, это может быть актуально для дома, когда нужно обеспечить поток тёплого воздуха из корпуса (чтоб владелец компа замёрзшие пальцы отогрел). Кстати, я когда-то так делал — запускал furmak чтобы руки погреть.
Ф>Собственно сабж: для интеловского или амдешного железа есть способ замерить потреблённое электричество?

Кажется, сущ. расширения для всяческих ide на эту тему. Как минимум надо смотреть что-то вроде https://github.com/mlco2/codecarbon

  Ответ DeepSeek на эту тему:
If you're looking to analyze and improve the energy efficiency of your code, there are several tools and extensions available for Integrated Development Environments (IDEs) that can help you measure and optimize energy consumption. Here are some notable ones:

### 1. **EcoCode (IntelliJ IDEA, Android Studio)**
— **Description**: EcoCode is a plugin for IntelliJ IDEA and Android Studio that helps developers write more energy-efficient code. It provides real-time feedback and suggestions to reduce energy consumption.
— **Features**:
— Detects energy-inefficient code patterns.
— Offers suggestions for optimization.
— Integrates with the IDE for seamless usage.
— **Website**: [EcoCode GitHub](https://github.com/green-code-initiative/ecoCode)

### 2. **GreenMiner (Eclipse)**
— **Description**: GreenMiner is a tool that measures the energy consumption of Android applications. It can be integrated with Eclipse to provide insights into how different parts of your code affect energy usage.
— **Features**:
— Measures energy consumption of Android apps.
— Provides detailed reports on energy usage.
— Helps identify energy-hungry code segments.
— **Website**: [GreenMiner GitHub](https://github.com/GreenMiner/GreenMiner)

### 3. **JouleMeter (Visual Studio)**
— **Description**: JouleMeter is a tool developed by Microsoft Research that measures the energy consumption of applications. While it's not a direct IDE plugin, it can be used alongside Visual Studio to profile energy usage.
— **Features**:
— Measures energy consumption of running applications.
— Provides detailed energy usage reports.
— Can be used to profile energy usage during development.
— **Website**: [JouleMeter](https://github.com/microsoft/joulemeter)

### 4. **Energy Profiler (Android Studio)**
— **Description**: The Energy Profiler in Android Studio helps you understand the energy impact of your app on a device's battery. It provides detailed insights into how your app uses system resources.
— **Features**:
— Tracks energy usage in real-time.
— Identifies energy-intensive operations.
— Integrates with Android Studio for easy access.
— **Website**: [Android Studio Energy Profiler](https://developer.android.com/studio/profile/energy-profiler)

### 5. **PowerAPI (Eclipse, IntelliJ IDEA)**
— **Description**: PowerAPI is a library that can be integrated into your development environment to monitor the energy consumption of your applications. It supports multiple programming languages and platforms.
— **Features**:
— Monitors energy consumption in real-time.
— Provides detailed energy usage data.
— Can be integrated with various IDEs.
— **Website**: [PowerAPI GitHub](https://github.com/powerapi-ng/powerapi)

### 6. **CodeCarbon (Jupyter Notebook, VS Code)**
— **Description**: CodeCarbon is a tool that estimates the carbon emissions of your code. It can be integrated with Jupyter Notebooks and VS Code to provide insights into the environmental impact of your code.
— **Features**:
— Estimates carbon emissions based on energy consumption.
— Provides actionable insights to reduce carbon footprint.
— Integrates with popular development environments.
— **Website**: [CodeCarbon GitHub](https://github.com/mlco2/codecarbon)

### 7. **EcoAndroid (Android Studio)**
— **Description**: EcoAndroid is a plugin for Android Studio that helps developers optimize their Android applications for energy efficiency. It provides real-time feedback and suggestions for improving energy usage.
— **Features**:
— Detects energy-inefficient code patterns.
— Offers optimization suggestions.
— Integrates with Android Studio.
— **Website**: [EcoAndroid GitHub](https://github.com/green-code-initiative/ecoCode-android)

### 8. **Greenify (Eclipse)**
— **Description**: Greenify is a plugin for Eclipse that helps developers identify and optimize energy-hungry code segments. It provides detailed reports and suggestions for improving energy efficiency.
— **Features**:
— Identifies energy-intensive code segments.
— Provides optimization suggestions.
— Integrates with Eclipse.
— **Website**: [Greenify GitHub](https://github.com/greenify/greenify)

These tools and extensions can help you gain insights into the energy consumption of your code and provide actionable suggestions to improve its energy efficiency. Integrating these tools into your development workflow can lead to more sustainable and efficient software development practices.
Кодом людям нужно помогать!
Re[5]: Энергоэффективность алгоритмов
От: rudzuk  
Дата: 24.02.25 12:53
Оценка: +1
Здравствуйте, alpha21264, Вы писали:

a> Вот например я пишу свой собственный видео-редактор. А там есть видео-эффекты.

a> Так вот, если по кадру пройти два раза, то программа работает медленно, потому что ядра друг у друга кэш отбирают.
a> А если по кадру пройти один раз, то...
a> Скорость возрастает в шесть раз (оооООО!!!), а вентилятор крутится значительно тише.
a> Это при том, что программа бежит быстрее в шесть раз.

a> Это просто пример, на который я самолично наткнулся.


Очень похоже на ситуацию, когда одновременно (разными потоками) читаются и модифицируются данные расположенные рядом (в размере кеш-линии). В этом случае процессор будет обеспечивть когерентность кеша и постоянно данные перечитывать.
avalon/3.0.2
Re[3]: Энергоэффективность алгоритмов
От: wl. Россия  
Дата: 24.02.25 16:56
Оценка: +1
Здравствуйте, Pzz, Вы писали:

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


какое слово красивое
Энергоэффективность алгоритмов
От: Философ Ад http://vk.com/id10256428
Дата: 18.02.25 14:21
Оценка:
А есть ли способ измерить потребление электричества какой-нибудь функцией?

Я тут сейчас гуглил новости про то, что датацентры города обогревают — вот, задумался: может уже пора делать профилировщики энергопотребления? Иногда нужно не быстрее: выбор среди алгоритмов может быть не по принципу кто быстрее и/или меньше памяти сожрёт, а по жоритости — скорость может быть во всех случаях приемлимой. Это особенно актуально для носимых гаджетов и ноутбуков.

Это также может быть актуально для датацентров. В конце-концов, это может быть актуально для дома, когда нужно обеспечить поток тёплого воздуха из корпуса (чтоб владелец компа замёрзшие пальцы отогрел). Кстати, я когда-то так делал — запускал furmak чтобы руки погреть.

Собственно сабж: для интеловского или амдешного железа есть способ замерить потреблённое электричество?
Всё сказанное выше — личное мнение, если не указано обратное.
Отредактировано 18.02.2025 14:47 Философ . Предыдущая версия .
Re[2]: Энергоэффективность алгоритмов
От: Философ Ад http://vk.com/id10256428
Дата: 18.02.25 15:19
Оценка:
Здравствуйте, Stanislav V. Zudin, Вы писали:

SVZ>А разве энерго-ужористость не прямо пропорциональна алгоритмической сложности?

SVZ>Если один алгоритм выполняется, допустим, за O(logN), а другой за O(N^2), то кто из них больше раскочегарит процессор?

Я думаю, что всё может быть несколько сложнее:
1) Разные операции требуют разного кол-ва энергии. Например, думаю очевидно, что операции с плавающей точкой сильно более жористые чем целочисленные.
2) Операции с памятью могут сильно напрягать кэш, который сам по себе неплохой обогреватель. Может быть энергетически выгоднее каждый раз рассчитывать какое-либо значение, чем регулярно перезагружать/инвалидировать кэш-линейки для его поиска в памяти.
3) Все современные процессоры суперскалярные — параллельно исполняют инструкции, исполняют код спекулятивно, и предсказывают переходы. Т.е. кол-во ветвлений может напрямую и нелинейно влиять на жористость. Т.е. сделать что-либо медленнее, по минимому напрягая BTB/BTU, может оказаться энергетически выгоднее чем делать за минимальное время.
4) Есть также догадки по поводу использования синхронизации: синхронизировать крупные куски или отказаться от синхронизации может быть энергетически более выгодно, нежели синхронизировать маленькие участки, оптимизируя тем самым скорость параллельных вычислений. Тот же вопрос по поводу инструкций типа PAUSE....
Всё сказанное выше — личное мнение, если не указано обратное.
Re[2]: Энергоэффективность алгоритмов
От: velkin Земля  
Дата: 18.02.25 15:19
Оценка:
Здравствуйте, Stanislav V. Zudin, Вы писали:

SVZ>А разве энерго-ужористость не прямо пропорциональна алгоритмической сложности?

SVZ>Если один алгоритм выполняется, допустим, за O(logN), а другой за O(N^2), то кто из них больше раскочегарит процессор?

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

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

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

Может только какие-нибудь гуглы у которых количество этих серверов с пятью нулями.
Re[2]: Энергоэффективность алгоритмов
От: Философ Ад http://vk.com/id10256428
Дата: 18.02.25 15:26
Оценка:
Здравствуйте, Vzhyk2, Вы писали:

V>Здравствуйте, Философ, Вы писали:


Ф>>Собственно сабж: для интеловского или амдешного железа есть способ замерить потреблённое электричество?

V>Да. Ставишь своему коду с этой функцией реалтаймовый приоритет (останавливаешь всё остальное) и подключаешь ваттметр к компу и получаешь результат.

Это могло бы сработать, если бы не прерывания таймера и небольшое разрешение ваттметра. Да и прочие аппаратные прерывания сильно портят перспективы.
А потом, представь себе бенчмаркинг для вычислений длинной в минуту:
10 лезем к ваттметру, записываем значение
20 запускаем код руками, ждём остановки
30 call 10
40 вычисляем

Абуреешь — надо что-нибудь более удобное.
Всё сказанное выше — личное мнение, если не указано обратное.
Re[3]: Энергоэффективность алгоритмов
От: Stanislav V. Zudin Россия  
Дата: 18.02.25 15:32
Оценка:
Здравствуйте, Философ, Вы писали:

SVZ>>А разве энерго-ужористость не прямо пропорциональна алгоритмической сложности?

SVZ>>Если один алгоритм выполняется, допустим, за O(logN), а другой за O(N^2), то кто из них больше раскочегарит процессор?

Ф>Я думаю, что всё может быть несколько сложнее:

Ф>1) Разные операции требуют разного кол-ва энергии. Например, думаю очевидно, что операции с плавающей точкой сильно более жористые чем целочисленные.
Ф>2) Операции с памятью могут сильно напрягать кэш, который сам по себе неплохой обогреватель. Может быть энергетически выгоднее каждый раз рассчитывать какое-либо значение, чем регулярно перезагружать/инвалидировать кэш-линейки для его поиска в памяти.

Хочешь убрать кеш? Боюсь время отклика софта будет таким, что пользователи взвоют.

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

Ф>3) Все современные процессоры суперскалярные — параллельно исполняют инструкции, исполняют код спекулятивно, и предсказывают переходы. Т.е. кол-во ветвлений может напрямую и нелинейно влиять на жористость. Т.е. сделать что-либо медленнее, по минимому напрягая BTB/BTU, может оказаться энергетически выгоднее чем делать за минимальное время.

Ф>4) Есть также догадки по поводу использования синхронизации: синхронизировать крупные куски или отказаться от синхронизации может быть энергетически более выгодно, нежели синхронизировать маленькие участки, оптимизируя тем самым скорость параллельных вычислений. Тот же вопрос по поводу инструкций типа PAUSE....

Что-то мне подсказывает, что ты говоришь о размазывании потребления во времени, а не сокращении оного. Ну т.е. число операций значимо не уменьшится, просто процессор будет больше спать. Но суммарно на решение времени потратит то же количество энергии, что и в "турбо" режиме.

Сэкономить энергию можно за счет перехода с JS на Си Вот тут да, количество операций процессора на вычисление будет значительно меньше
Но боюсь, программистское сообщество не оценит
_____________________
С уважением,
Stanislav V. Zudin
Re[3]: Энергоэффективность алгоритмов
От: Stanislav V. Zudin Россия  
Дата: 18.02.25 15:43
Оценка:
Здравствуйте, velkin, Вы писали:

SVZ>>А разве энерго-ужористость не прямо пропорциональна алгоритмической сложности?

SVZ>>Если один алгоритм выполняется, допустим, за O(logN), а другой за O(N^2), то кто из них больше раскочегарит процессор?

V>Если снизить частоту увеличив количество ядер, то можно получить бОльшую производительность при меньшем нагреве. Но не все алгоритмы хорошо работают в многопотоке.


При условии, что алгоритм в принципе параллелится. Собсно, современные процессоры АРМы и Интеловские идут в указанном тобой направлении — делают несколько производительных ядер и несколько малахольных.
Для мобильных приложений, где большинство задач сводится к перекладыванию байтов по памяти, такое хорошо работает. А для числодробилок получается проседание.

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


Опыт показывает, что повысить производительность алгоритмически гораздо эффективнее, чем оптимизацией тактов.

V>Разные наборы машинных команд имеют разное энергопотребление. Просто если труд программистов на оптимизацию дороже оборудования никто заморачиваться не будет.


Это можно было бы решить ключами компилятора. Всё равно в машкодах сейчас пишут считанные единицы.

V>Может только какие-нибудь гуглы у которых количество этих серверов с пятью нулями.


Эти вряд ли будут заморачиваться.
Сужу по очень богатым конкурентам — всем покласть на производительность.
_____________________
С уважением,
Stanislav V. Zudin
Re: Энергоэффективность алгоритмов
От: kov_serg Россия  
Дата: 18.02.25 15:59
Оценка:
Здравствуйте, Философ, Вы писали:

Ф>А есть ли способ измерить потребление электричества какой-нибудь функцией?

Ф>Собственно сабж: для интеловского или амдешного железа есть способ замерить потреблённое электричество?

https://github.com/deater/uarch-configure/blob/master/rapl-read/rapl-read.c
Re: Энергоэффективность алгоритмов
От: Слава  
Дата: 18.02.25 18:05
Оценка:
Здравствуйте, Философ, Вы писали:

Ф>Я тут сейчас гуглил новости про то, что датацентры города обогревают — вот, задумался: может уже пора делать профилировщики энергопотребления? Иногда нужно не быстрее: выбор среди алгоритмов может быть не по принципу кто быстрее и/или меньше памяти сожрёт, а по жоритости — скорость может быть во всех случаях приемлимой. Это особенно актуально для носимых гаджетов и ноутбуков.


Ф>Это также может быть актуально для датацентров. В конце-концов, это может быть актуально для дома, когда нужно обеспечить поток тёплого воздуха из корпуса (чтоб владелец компа замёрзшие пальцы отогрел). Кстати, я когда-то так делал — запускал furmak чтобы руки погреть.


По-моему IBM этим начал заниматься ещё в 90х, был у них показатель в духе тфлопс/ватт.
Re[2]: Энергоэффективность алгоритмов
От: rm2  
Дата: 19.02.25 17:37
Оценка:
Здравствуйте, Stanislav V. Zudin, Вы писали:

SVZ>А разве энерго-ужористость не прямо пропорциональна алгоритмической сложности?


Нет. потребление зависит от степени загруженности исполняемых устройств в процессоре.
Re[3]: Энергоэффективность алгоритмов
От: Stanislav V. Zudin Россия  
Дата: 19.02.25 18:00
Оценка:
Здравствуйте, rm2, Вы писали:

SVZ>>А разве энерго-ужористость не прямо пропорциональна алгоритмической сложности?


rm2>Нет. потребление зависит от степени загруженности исполняемых устройств в процессоре.


А степень загруженности от чего зависит?
Скажем, если вместо 1000 вызовов fmul будет 1000^2 вызовов, загруженность увеличится?
_____________________
С уважением,
Stanislav V. Zudin
Re[2]: Энергоэффективность алгоритмов
От: Pzz Россия https://github.com/alexpevzner
Дата: 19.02.25 18:11
Оценка:
Здравствуйте, Stanislav V. Zudin, Вы писали:

SVZ>А разве энерго-ужористость не прямо пропорциональна алгоритмической сложности?

SVZ>Если один алгоритм выполняется, допустим, за O(logN), а другой за O(N^2), то кто из них больше раскочегарит процессор?

Это довольно приблизительная оценка. Есть же там всякий параллелизм, работа с памятью, процент попадания/промхов в кеш, затраты на декодирование виртуальных адресов, сложные и никому непонятные алгоритмы, управляющие тактовой частотой процессорных ядер,...
Re[4]: Энергоэффективность алгоритмов
От: Pzz Россия https://github.com/alexpevzner
Дата: 19.02.25 18:12
Оценка:
Здравствуйте, Stanislav V. Zudin, Вы писали:

SVZ>Сэкономить энергию можно за счет перехода с JS на Си Вот тут да, количество операций процессора на вычисление будет значительно меньше

SVZ>Но боюсь, программистское сообщество не оценит

Есть мнение, что выигрыш будет раза в два. Не в 10.
Re[4]: Энергоэффективность алгоритмов
От: rm2  
Дата: 19.02.25 18:21
Оценка:
Здравствуйте, Stanislav V. Zudin, Вы писали:


SVZ>А степень загруженности от чего зависит?

SVZ>Скажем, если вместо 1000 вызовов fmul будет 1000^2 вызовов, загруженность увеличится?


степень загруженности зависит от того, насколько поступающие инструкции можно выполнять независимо (параллельно) друг от друга, и попали ли данные по этим инструкциям в кеш.
Re[4]: Энергоэффективность алгоритмов
От: alpha21264 СССР  
Дата: 24.02.25 11:02
Оценка:
Здравствуйте, Stanislav V. Zudin, Вы писали:

Ф>>2) Операции с памятью могут сильно напрягать кэш, который сам по себе неплохой обогреватель. Может быть энергетически выгоднее каждый раз рассчитывать какое-либо значение, чем регулярно перезагружать/инвалидировать кэш-линейки для его поиска в памяти.


SVZ>Хочешь убрать кеш? Боюсь время отклика софта будет таким, что пользователи взвоют.


Не обязательно убирать кэш. Можно его просто более рационально использовать.
Вот например я пишу свой собственный видео-редактор. А там есть видео-эффекты.
Так вот, если по кадру пройти два раза, то программа работает медленно, потому что ядра друг у друга кэш отбирают.
А если по кадру пройти один раз, то...
Скорость возрастает в шесть раз (оооООО!!!), а вентилятор крутится значительно тише.
Это при том, что программа бежит быстрее в шесть раз.

Это просто пример, на который я самолично наткнулся.

Течёт вода Кубань-реки куда велят большевики.
Re[5]: Энергоэффективность алгоритмов
От: Stanislav V. Zudin Россия  
Дата: 24.02.25 11:15
Оценка:
Здравствуйте, alpha21264, Вы писали:

Ф>>>2) Операции с памятью могут сильно напрягать кэш, который сам по себе неплохой обогреватель. Может быть энергетически выгоднее каждый раз рассчитывать какое-либо значение, чем регулярно перезагружать/инвалидировать кэш-линейки для его поиска в памяти.


SVZ>>Хочешь убрать кеш? Боюсь время отклика софта будет таким, что пользователи взвоют.


A>Не обязательно убирать кэш. Можно его просто более рационально использовать.

A>Вот например я пишу свой собственный видео-редактор. А там есть видео-эффекты.
A>Так вот, если по кадру пройти два раза, то программа работает медленно, потому что ядра друг у друга кэш отбирают.
A>А если по кадру пройти один раз, то...
A>Скорость возрастает в шесть раз (оооООО!!!), а вентилятор крутится значительно тише.
A>Это при том, что программа бежит быстрее в шесть раз.

А если на одни и те же данные натравить ещё больше потоков, то они друг друга повесят на блокировке.
Многопоточность — она такая, её надо уметь готовить.
_____________________
С уважением,
Stanislav V. Zudin
Re: Энергоэффективность алгоритмов
От: mike_rs Россия  
Дата: 24.02.25 12:18
Оценка:
Здравствуйте, Философ, Вы писали:

Ф>Собственно сабж: для интеловского или амдешного железа есть способ замерить потреблённое электричество?


есть, серверные платформы предоставляют такую статистику
Re[5]: Энергоэффективность алгоритмов
От: Stanislav V. Zudin Россия  
Дата: 24.02.25 14:08
Оценка:
Здравствуйте, Pzz, Вы писали:

SVZ>>Сэкономить энергию можно за счет перехода с JS на Си Вот тут да, количество операций процессора на вычисление будет значительно меньше

SVZ>>Но боюсь, программистское сообщество не оценит

Pzz>Есть мнение, что выигрыш будет раза в два. Не в 10.


Если говорить про производительность, то код на Вебасме (после Emscripten) и Шарпе проседает примерно вдвое+ по-сравнению с оригинальным С++.
А вот по энергопотреблению пёс его знает.

Про JS у меня сведений нет, так что поверю тебе
_____________________
С уважением,
Stanislav V. Zudin
Re[2]: Энергоэффективность алгоритмов
От: Философ Ад http://vk.com/id10256428
Дата: 24.02.25 15:01
Оценка:
Здравствуйте, Sharov, Вы писали:

S>Ответ DeepSeek на эту тему:

S>

S>If you're looking to analyze and improve the energy efficiency of your code, there are several tools and extensions available for Integrated Development Environments (IDEs) that can help you measure and optimize energy consumption. Here are some notable ones:


Прикольно! А я вот что-то не догадался у болванчиков спросить.
Всё сказанное выше — личное мнение, если не указано обратное.
Re[2]: Энергоэффективность алгоритмов
От: Pzz Россия https://github.com/alexpevzner
Дата: 24.02.25 15:46
Оценка:
Здравствуйте, Vzhyk2, Вы писали:

Ф>>Собственно сабж: для интеловского или амдешного железа есть способ замерить потреблённое электричество?

V>Да. Ставишь своему коду с этой функцией реалтаймовый приоритет (останавливаешь всё остальное) и подключаешь ваттметр к компу и получаешь результат.

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

Это тот самый случай, когда чистка кулера или замена термопасты могут повысить производительность в разы.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.