Introduction to Carbon Aware Software
Energy Aware Software
The total energy consumption of a software system can be expressed as:
Energy (Joules) = Power (Watts) x Time (s)
Energy-aware software is designed to be energy-efficient. The goal is to reduce the total energy use required to do the work.
This means that measures can be applied across all layers, starting with organizational policies and ending at fine-grained control of hardware (e.g. CPU p-states). Hardware manufacturing itself made significant advances in energy efficiency but starts to reach theoretical limits [1].
Choosing the appropriate programming language and using it as intended can lead to a reduction of energy usage for the same amount of work [2]. An important observation is that reducing execution time does not necessarily lead to a lower energy usage. You can lower the processing time by parallel processing, but at the same time the system draws more power. The system only consumes less energy when the time savings overweigh the additional power usage. Consequently, this observation also applies to distributed and shared systems.
Developing workload-specific algorithms for reconfigurable hardware like field programmable gate arrays (FPGAs) reduces the operational energy consumption. The trade-off is higher development time and lower flexibility [3].
For machine learning, lower precision floating point arithmetic, smaller integers, and binary encoding techniques are used to reduce the energy consumption of numerical computations [4].
Carbon Aware Software
Carbon-aware software takes into account the amount of energy used and the context in which the energy is consumed.
Examples are:
- Using energy when the regional electricity grid is using mostly renewables,
- consider when the cooling water is naturally colder (e.g. at night),
- utilizing old hardware when suitable to prolong its lifetime,
- making high resolution images on websites on-demand instead of default,
- designing a website which behaves according to the user's location,
- and many more!
I am excited to share my experiences with you in this blog!
References
- [1] UN Trade and Development. Digital Economy Report 2024: Shaping an Environmentally Sustainable and Inclusive Digital Future. Digital Economy Report. United Nations, July 11, 2024. isbn: 978-92-1-358977-9. doi: 10.18356/9789213589779. https://doi.org/10.18356/9789213589779
- [2] Rui Pereira et al. “Energy efficiency across programming languages: how do energy, time, and memory relate?” In: Proceedings of the 10th ACM SIGPLAN International Conference on Software Language Engineering. SLE2017. New York, NY, USA: Association for Computing Machinery, Oct. 23,2017, pp. 256-267. isbn: 978-1-4503-5525-4. doi: 10.1145/3136014.3136031. https://doi.org/10.1145/3136014.3136031
- [3] Atanu Majumder et al. “Energy-Aware Real-Time Tasks Processing for FPGA-Based Heterogeneous Cloud”. In: IEEE Transactions on Sustainable Computing 7.2 (Apr. 1, 2022), pp. 414-426. issn: 2377-3782, 2377-3790. doi:10.1109/TSUSC.2021.3082189. https://doi.org/10.1109/TSUSC.2021.3082189
- [4] Carlos Ordonez, Wojciech Macyna, and Ladjel Bellatreche. “Energy-Aware Analytics in the Cloud”. In: International Workshop on Big Data in Emergent Distributed Environments. SIGMOD/PODS '24: International Conference on Management of Data. Santiago AA Chile: ACM, June 9, 2024, pp. 1-6. isbn: 9798400706790. doi: 10.1145/3663741.3664789. https://doi.org/10.1145/3663741.3664789