<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>On the Impact of PowerCap in Haskell, Java, and Python</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Luís Maia</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Marta Sá</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Inês Ferreira</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Simão Cunha</string-name>
          <email>simaopscunha@outlook.pt</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Luís Silva</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Paulo Azevedo</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>João Saraiva</string-name>
          <email>saraiva@uminho.pt</email>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Department of Informatics, University of Minho</institution>
          ,
          <country country="PT">Portugal</country>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>HasLab/INESC TEC</institution>
        </aff>
      </contrib-group>
      <abstract>
        <p>Historically, programming language performance focused on fast execution times. With the advent of cloud and edge computing, and the significant energy consumption of large data centers, energy eficiency has become a critical concern both for computer manufacturers and software developers. Despite the considerable eforts of the green software community in developing techniques and tools for analysing and optimising software energy consumption, there has been limited research on how imposing hardware-level energy constraints afects software energy eficiency. Moreover, prior research has demonstrated that the choice of programming language can significantly impact a program's energy eficiency. This paper investigates the impact of CPU power capping on the energy consumption and execution time of programs written in Haskell, Java, and Python. Our preliminary results analysing well-established benchmarks indicate that while power capping does reduce energy consumption across all benchmarks, it also substantially increases execution time. These findings highlight the trade-ofs between energy eficiency and runtime performance, ofering insights for optimising software under energy constraints.</p>
      </abstract>
      <kwd-group>
        <kwd>eol&gt;Energy Eficiency</kwd>
        <kwd>Programming Languages</kwd>
        <kwd>Benchmark</kwd>
        <kwd>PowerCap</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. Introduction</title>
      <p>Programming languages provide powerful mechanisms to
improve the productivity of their programmers. Modern
languages rely on powerful module and type systems, reusable
libraries, IDE, testing frameworks, etc. Such mechanisms
are built on top of advanced abstraction, thus relying on the
language compiler to produce eficient code.</p>
      <p>
        In the last century, good performance in programming
languages was synonymous of fast code, that is to say, fast
execution time. In this century, this reality has changed
because the cost to run software became higher than the cost
to build that same software [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. In our age of cloud/edge
computing and large data centers the energy consumption
of software is a key concern for big tech and computer
manufacturer companies, programming language designers, and
programmers. Software systems are implemented using
programming languages. As shown in [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ], the energy eficiency
of program can be drastically influenced by programming
language used to develop it.
      </p>
      <p>
        Although the green software community has done a
considerable work on developing techniques and tools to
analyse and optimise the energy consumption of software
systems. Such techniques already provide knowledge on the
energy eficiency of data structures [
        <xref ref-type="bibr" rid="ref3 ref4">3, 4</xref>
        ] and android
language [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ], the energy impact of diferent programming
practices both in mobile [
        <xref ref-type="bibr" rid="ref6 ref7 ref8">6, 7, 8</xref>
        ] and desktop
applications [
        <xref ref-type="bibr" rid="ref10 ref9">9, 10</xref>
        ], the energy eficiency of applications within
the same scope [
        <xref ref-type="bibr" rid="ref11 ref12">11, 12</xref>
        ], or even on how to predict energy
consumption in several software systems [
        <xref ref-type="bibr" rid="ref13 ref14">13, 14</xref>
        ], among
several other works.
      </p>
      <p>
        There is also recent work on analysing the energy
eficiency of programming languages [
        <xref ref-type="bibr" rid="ref15 ref16 ref2">15, 2, 16</xref>
        ], where 28 of the
most known and used programming languages are ranked
according their energy performance. This ranking shows
very interesting results, namely that slower/faster software
languages consume less/more energy. The energy eficiency
ranking, however, was produced assuming no limit on the
energy usage by the operating system nor the hardware
that executed the programs written in the 28 languages.
However, we know that by limiting energy consumption of
hardware we can reduce energy consumption. For example,
a driver when operating a car (the hardware) can reduce
its fuel consumption by defining a limit on the engine
Revolutions Per Minute (RPM). Thus, an interesting question
that immediately arises is whether we can reduce the
energy consumption of a program by just defining a limit on
the energy used by the CPU. Energy consumption does not
depend only on execution time, as shown in the equation
 =  × . In fact, this equation shows that
we can reduce energy of program by reducing its execution
time and/or the power it uses.
      </p>
      <p>
        In this paper we analyse the impact of limiting the power
of the CPU when executing programs in three diferent
programming languages, namely, Haskell, Java and Python.1
For each language we considered well established
benchmark frameworks, namely NoFib for Haskell [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ], DaCapo
for Java [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ] and pyPerformance for Python. We executed
each benchmark in two situations: with and without a limit
on energy consumption. In both cases we monitored and
analysed the performance of each benchmark considering
energy consumption and execution time. Our very first
results show that by defining a power cap we do reduce
energy consumption in all benchmarks. On the contrary,
the execution time of the three benchmarks increases
significantly.
      </p>
      <p>This paper is organised as follows: Section 2 presents
the methodology we follow to conduct our study. It briefly
presents the benchmarks, the use of the Intel’s RAPL and
RAPLCap energy framework, the calibration of the
powercap and how we executed and measured the benchmarks.
1We considered these three languages because this research originated
from an exercise proposed in a MSc course on green software where
those languages are studied.</p>
      <p>In Section 3 we present and discuss the results of the three
benchmarks. In Section 4 we present our conclusions.</p>
    </sec>
    <sec id="sec-2">
      <title>2. Methodology</title>
      <sec id="sec-2-1">
        <title>2.1. Benchmarks</title>
        <p>In order to analyse the impact of limiting the energy
consumption while executing Haskell, Java and Python
programs, we consider well-established and widely used
benchmark frameworks developed for those three programming
languages. The benchmarks and the compilers/interpreters
used in our study are:
• Haskell language (compiler ghc 9.4.8): The nofib</p>
        <p>
          Benchmark Suite of Haskell Programs [
          <xref ref-type="bibr" rid="ref17">17</xref>
          ].2
• Java language (compiler: Java Openjdk 11.0.22): The
        </p>
        <p>
          DaCapo Benchmark suite [
          <xref ref-type="bibr" rid="ref18">18</xref>
          ], version 23.11-chopin.3
• Python language (interpreter: python 3.12.0): The
        </p>
        <p>Python Performance Benchmark Suite, version 1.11.0.4</p>
      </sec>
      <sec id="sec-2-2">
        <title>2.2. Energy Measurements and Cap via</title>
      </sec>
      <sec id="sec-2-3">
        <title>RAPL</title>
        <p>
          For measuring the energy consumption, we used Intel’s
Running Average Power Limit (RAPL) tool [
          <xref ref-type="bibr" rid="ref19">19</xref>
          ], which is
capable of providing accurate energy estimates at a very
ifne-grained level, as it has already been proven [
          <xref ref-type="bibr" rid="ref20">20</xref>
          ]. RAPL
has been used in many studies on green software and was
the energy measurement framework used in defining the
ranking of programming languages [
          <xref ref-type="bibr" rid="ref16 ref2">2, 16</xref>
          ]. Moreover, the
ranking of languages provides programs/scripts built on top
of RAPL that makes very easy to execute and monitor the
energy consumption of a (executable) program.
        </p>
        <p>In our study we will reuse this (C-based) infrastructure
to execute and monitor the benchmarks and their programs
written in three languages.</p>
        <p>
          Finally, RAPL also support a key ingredient for our study:
the possibility of defining a power limit on the CPU while
executing a program [
          <xref ref-type="bibr" rid="ref21">21</xref>
          ]. In fact, RAPLCap5 provides a C
interface for managing Intel RAPL power caps. Thus, we
have extended the ranking energy monitoring infrastructure
to allow the execution of a program under a given power
cap.
        </p>
      </sec>
      <sec id="sec-2-4">
        <title>2.3. RAPL’s PowerCap calibration</title>
        <p>
          The RAPL and RAPLCap can be configured with diferent
values to limit the PowerCap of a specific CPU. Thus, when
executing a program it is possible to define the (maximum)
power used by the (intel) CPU. Diferent values for
PowerCap can be used. Moreover, diferent intel CPUs may have
the lowest energy consumption by using diferent
PowerCap values. In order to know the value of the PowerCap
that produces the lowest energy consumption in a specific
CPU, we need to compute it. Thus, we consider a calibration
phase where we execute with diferent RAPLcap values a
computation intensive program and we compute the value
that produce the most energy eficient execution [
          <xref ref-type="bibr" rid="ref22 ref23">22, 23</xref>
          ].
        </p>
        <p>Thus, we consider the following implementation of the
Fibonacci number in the C language:
2https://gitlab.haskell.org/ghc/nofib. Version available on January,2024.
3https://www.dacapobench.org/
4https://github.com/python/pyperformance
5https://github.com/powercap/raplcap</p>
        <p>In order to have significant energy and runtime
measurements we execute this function to compute Fibonacci of 50.
Furthermore, we executed (ten times) this function using
specific power cap values.</p>
        <p>The processor i7-7700hq has a TDP of 45Watts. With this
in mind, there was a first set of power cap variables that
went from -1 to 45 with a spacing of 5 between each value.
The substantially better results were when power cap took
a value between 5 and 20. To further analyse these results,
a second attempt of trying to find the best power cap value
was made, this time with values -1, 20 and all withing 5 and
15, where -1, which is when there is no power cap, and 20
served to compare results with the remaining power caps.
In order to to make the results more robust, each iteration
of a power cap was ran ten times, and were then averaged.</p>
        <p>In figure 1 we confirm that the power cap that yields the
best results for our purpose is power cap 12, as it proved to
be the lowest energy consuming. From this moment, the
only two power cap values that will in the following steps
are -1 (No power cap) and 12 (with power cap).</p>
      </sec>
      <sec id="sec-2-5">
        <title>2.4. Program Execution</title>
        <p>
          As we mention before, we will use the ranking of
programming languages infrastructure to execute an monitor the
energy consumption of the three benchmarks. Such
infrastructure has a key feature: there is no need to add intrusive
code, for example calls to RAPL API, to the programs we
would like to monitor energy consumption. This
infrastructure includes a C program, named energy, that uses system
calls to execute the unchanged programs while measuring
the energy and time consumption via call to RAPL (and
the time library). The overhead caused by the usage of a
system call is insignificant as shown in [
          <xref ref-type="bibr" rid="ref2 ref24 ref25">2, 24, 25</xref>
          ].
        </p>
        <p>Thus, to analyse the energy consumption of the
benchmarks, we just use the benchmarks original makefiles to
call the language compilers/interpreters with the defined
optimisation’s flags. Then, we use the energy C program to
execute each of the executable program of each benchmark.
This program is called from the command line as follows:
sudo $ { c u s t o m _ p a t h } / RAPL / e n e r g y " . /
b e n c h m a r k _ e x e c u t a b l e " $ (
b e n c h m a r k _ l a n g u a g e ) $ ( benchmark ) $
( NTIMES ) $ ( PowerCap ) $</p>
        <p>Its first argument is the executable program (of each
benchmark) to be executed and monitored. The
following two arguments are for naming purposes in the (csv)
results output. Next argument is the number of runs for
each program. The final argument is the value of the power
cap (-1 or 12, as mentioned before).</p>
        <p>
          In our study each benchmark’s program was executed
with and without power cap. Each program was executed
a total of 10 times to grant a good starting set of results.
Moreover, between each iteration, a cool down to the
aforementioned mean CPU temperature is taken place to make
sure each benchmark execution starts at the same CPU
temperature. In the ranking of programming [
          <xref ref-type="bibr" rid="ref2">2</xref>
          ] it was used a 1
second sleep between executions. That may not be enough
for the CPU to be at the same temperature at each
execution [
          <xref ref-type="bibr" rid="ref26">26</xref>
          ].
        </p>
        <p>In order to make sure every iteration of each benchmark
starts on equal grounds, the mean temperature of the CPU is
taken, and after every run of a benchmark a cooling process
is executed until the temperature of the CPU cools down
to the point of the mean temperature. Once the CPU is
back to the mean temperature, it is able to execute another
benchmark. As a consequence, each execution of a program
starts with the CPU at the same temperature.</p>
        <p>To obtain the mean temperature of the CPU, the library
lm-sensors6 was used in the energy C program.</p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>3. Results</title>
      <p>All studies were conducted on a desktop with the
following specifications: Linux Ubuntu 2.04.4 LTS operating
system, kernel version 4.8.0-22-generic, with 32GB of RAM, a
Haswell Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz.</p>
      <sec id="sec-3-1">
        <title>3.1. Treatment of the datasets</title>
        <p>
          The RAPL framework is supported by all recent intel CPU
architectures. However, not all intel architectures support
the four energy estimations provided by RAPL [
          <xref ref-type="bibr" rid="ref19">19</xref>
          ], namely
Core, DRAM, GPU and Package. In the intel architecture
we conducted our studies, only the Core and Package
estimations were available. Because the package estimation
includes the consumption of the Core, GPU and other
electronic devices on the chip, we will use this measurement as
a reliable indication of the energy consumption of the CPU.
        </p>
        <p>The energy monitoring C program developed for the
energy ranking of languages and that we are reusing in our
study, however, produces three more measurements:
execution time, memory consumption and temperature. Time
and (peak) memory consumption are provided by the linux
operating system. The temperature measurement, provided
by the lm-sensors C library, gives the value of the
temperature of the CPU after the program execution. Thus
it provides an indication of the energy dissipated as heat
by the CPU. Thus, every single execution of a benchmark
program produces five measurements: core, package, time,
memory and temperature.</p>
        <p>In our study we execute each benchmark program 10
times. In fact, we run each program 20 times: 10 times with
power cap and 10 times without power cap. We also used
box plots to analyse outliers. These box plots showed that
the Java and Haskell benchmarks do not have outliers and</p>
        <sec id="sec-3-1-1">
          <title>6https://github.com/lm-sensors/lm-sensors</title>
          <p>although Python benchmarks have outliers they are not
relevant in terms of number or value.</p>
        </sec>
      </sec>
      <sec id="sec-3-2">
        <title>3.2. Haskell nofib Benchmark</title>
        <p>To evaluate the impact of power cap on the variables Package
and Time we started by creating two datasets: one with all
the measurements of Haskell benchmarks without power
cap and another with all the measurements of the Haskell
benchmarks with a power cap of 12. Figure 2 presents the
energy and runtime measurements for each program of the
nofib benchmark.7 Thus, for each program we associate two
bars: energy (in joules) on the left and runtime (in seconds)
on the right. Moreover, each bar uses two colours to indicate
the use or not of power cap.</p>
        <p>As we can observe in figure 2, all Haskell programs
consume less energy when executed with power cap (dark blue
bar) when compared to the same program executed without
a power cap. We can also see that power cap has a
considerable impact on execution time: all programs increase their
execution time when using power cap (green bar).</p>
        <p>Figure 3 shows in more detail the energy reduction
obtained by each benchmark program with power cap.</p>
        <p>The green, red and dark red lines indicate the average,
maximal and minimal energy gains. The precise values are:
• Average gain: 20.0%
• Maximal gain: 25.4%
• Minimal gain: 15.4%</p>
        <p>The reduction on energy consumption comes at a price:
the increase in execution time. Indeed, figure 4 shows
negative results for execution time, only. Thus, meaning that
every benchmark had a worse execution time with a power
cap.
7Due to scale issues which will make it dificult to see the results in
ifgure 2, we omit here the hartel program. That program, however, is
included in the figure 17 available in appendix.</p>
        <p>Besides analysing the impact of the power cap in
execution time and energy consumption and the gain in this two
aspects, we decided that it would be interesting to analyse
how the values of one column influence the values of other
columns. To do so we used a correlation matrix. A
correlation matrix is a statistical tool that shows how strong and
in what direction two or more variables are related. The
correlation coeficient ranges from -1 to +1, where -1 means
a perfect negative correlation, +1 means a perfect positive
correlation, and 0 means there is no correlation between
the variables.
positive correlation are Core and Package followed by Time
and Package and Time and Core. This means that if the
values of a column presented in the pair increase, the values
on the other column of the pair increase too. Is also relevant
to mention that the columns Temperature and PowerLimit
are negatively correlated which, in this case, means that
if the values of a column present in the pair increase the
values on the other column of the pair decrease.</p>
        <p>Another aspect that we considered interesting to explore
was how the power cap afects the relation between
execution time and energy consumption. To do so we used the
scatter plot presented in figure 6:</p>
        <p>In figure 6 we observe that we have less energy
consumption per time unit when using the power cap. Besides, we
can once again confirm that the energy consumption and
the execution time are positively correlated.</p>
      </sec>
      <sec id="sec-3-3">
        <title>3.3. Java DaCapo Benchmark</title>
        <p>By analysing the correlation matrix presented in figure 5,
we can conclude that the two columns that present higher
The DaCapo benchmark, in its version 23.11-chopin, consists
of 20 real-world, open-source client-side Java benchmarks.</p>
        <p>We executed each of this benchmarks with and without
power cap. Figure 7 shows the energy and runtime of each
DaCapo program. As we did for nofib , for each DaCapo
program we associate two bars: energy (in joules) on the
left and runtime (in seconds) on the right. Moreover, each
bar uses two colours to indicate the use or not of power cap.</p>
        <p>Figure 8 clearly shows that the use of power cap does
decreases energy consumption, on average a 23.4% while
increasing runtime, on average 101.1%, as shown in figure 9.
This is the case for each of the 20 DaCapo programs, very
much like in the nofib benchmark.</p>
        <p>To have a better understanding on the impact that power
cap has on energy consumption, we calculated the gain in
percentage for each benchmark. The results are presented
in figure 8.
where the average, maximal and minimal values of energy
consumption reduction are:
• Average gain: 23.4%
• Maximal gain: 37.0%
• Minimal gain: 11.9%</p>
        <p>The execution time of DaCapo benchmarks increases
when using a power cap, as detailed in figure 9.</p>
        <sec id="sec-3-3-1">
          <title>In average the runtime in DaCapo increases 100%. • Average loss: 101.1% • Maximal loss: 186.4% • Minimal loss: 14.6%</title>
          <p>In order to analyse the correlation between our five
measurements, we use the correlation matrix presented in
figure 10.</p>
          <p>By looking at figure 10 we can conclude that Package and
Core are the most positively correlated columns followed
by Time and Package. Moreover, the attributes Temperature
and PowerLimit are the most negatively correlated features.</p>
          <p>Lastly we analyse the relation between Package and Time
with and without power cap using a scatter plot and the
results are displayed in figure 11,</p>
          <p>By taking a look at figure 11 we can conclude that there
is less energy consumption per time unit with the use of
power cap. Moreover, with the use of power cap the columns
present a stronger correlation.</p>
        </sec>
      </sec>
      <sec id="sec-3-4">
        <title>3.4. Python pyPerformance Benchmark</title>
        <p>The pyPerformance benchmark consists of 75 programs,
which we executed with and without power cap by our
energy framework. Of these 75 programs, only 57 were
used due to some benchmarks requiring a python version
above the executed one. This was the case when running
python 3.8 on benchmarks that required python 3.10 or
above. To be able to compare each compiler with each other,
these benchmarks results in other version were discarded.
Figure 12 shows the energy consumption and runtime for
each python program.</p>
        <p>As we can see in figure 12 with the use of power cap there
is a decrease in the energy consumption of all programs.
This is shown in more detailed in figure 13.</p>
        <p>Once we studied the impact of power cap on energy
consumption and execution time, we opt to analyse the relations
between diferent columns values. And we did so using a
correlation matrix presented in figure 15</p>
        <p>By analysing the correlation matrix presented above we
can conclude that the two columns that present higher
positive correlation are Core and Package followed by Time and
Package and Time and Core. Is also relevant to mention that
the columns Temperature and PowerLimit are negatively
related once this relation in the correlation matrix presents
such a small number.</p>
        <p>Lastly we analysed the relation between energy
consumption and execution time, and the results are presented in
ifgure 16</p>
        <p>In terms of runtime, however, the results are diferent.
The red colour shown in several programs of figure 12 do
indicate that some python programs execute faster when a
power cap is defined!</p>
        <p>After analysing figure 16 we can conclude that we have
less energy consumption per time unit when using the
power cap. Besides that, once again we can confirm that
energy consumption and execution time are positively
correlated.</p>
      </sec>
      <sec id="sec-3-5">
        <title>3.5. Discussion</title>
        <p>When comparing the correlation between Package and Time
in Java and Haskell benchmarks, considering both
correlation matrices, one can conclude that correlation is stronger
in the Haskell benchmarks.</p>
        <p>From table 1 we can observe that in terms of energy
consumption, regardless the implementation language,
every program improved their energy consumption. In fact,
Python demonstrates the highest average energy gain
(35.3%), followed by Java (23.4%) and Haskell (20.0%). Python
also demonstrates a higher maximum energy gain (60.4%),
followed by Java (37.0%) and Haskell (25.4%). In terms of
minimal energy gain, Python has the highest (17.9%)
compared to Haskell (15.4%) and Java (11.9%).</p>
        <p>The impact on the runtime, Java shows a significant
average runtime loss (101.1%), indicating that the programs
are running much slower, on average, when comparing to
Haskell (53.7%) and Python (21.5%). In fact, the maximum
runtime loss is higher in Java (186.4%), followed by Haskell
(60.3%) and Python (54.8%). In terms of minimal runtime loss,
Haskell has the highest (38.0%) compared to Java (14.6%)
and Python, which had a gain of 22.6%.</p>
        <p>In contrast to the majority of the benchmarks, when a
power cap is set, certain python benchmarks’ runtime
decreased, along with their energy consumption. The most
notorious are bm_concurrent_imap, a concurrent model
communication benchmark, which uses the Pool that handles
CPU bound job and ThreadPool that handles IO bound jobs,
from the multiprocessing.pool library. Also,bm_logging is
a simple message logging benchmark, that utilises the
inmemory text stream function StringIO from the io library.
As a final example, we have bm_gc_collect benchmark, a
node connected to another node traversal benchmark that is
ran with n cycles, resembling a linked list collection
traversal. The first two mentioned benchmarks handle IO related
jobs. Thus, one could argue that execution of these type
of jobs are more sensible to a power cap when compared
to all the benchmarks. Hence, further testing and
analysis is required to fully understand the reason behind these
unexpected results.</p>
        <p>In summary, Python shows the most balance performance
with substantial energy gains and the potential for runtime
reductions. However, Java programs tend to have a higher
runtime loss, indicating a trade-of where energy savings
may come at the cost of significantly increasing execution
time. Also, Haskell shows a moderate performance in both
energy gains and runtime losses, making it a middle ground
between Python and Java in this analysis.</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>4. Conclusions</title>
      <p>This paper presented a study on the impact of defining a
power cap in three well-established benchmarks: nofib in
Haskell, DaCapo in Java, and pyPerformance in Python. We
executed all programs in these three benchmarks with and
without defining a power cap.</p>
      <p>
        Our first results show that power cap consistently
decrease the energy consumption of programs written in all
three languages. In average we obtained energy reductions
of 20% in Haskell, 23% in Java, and 35% in Python. This
energy reduction comes at a price: in all languages the
execution times increases: 22% in Python, 54% in Haskell,
and 101% in Java! Although Python seems to profit more
from power cap it is worth to notice that Python is known
for having poor runtime and energy consumption
performances [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ], and the speedup/greenup that achieves with
power cap does not directly translate to speed/greenness.
      </p>
    </sec>
    <sec id="sec-5">
      <title>Acknowledgements</title>
      <p>This work is partially supported by CERCIRAS - Connecting
Education and Research Communities for an Innovative
Resource Aware Society - COST Action CA19135 funded by
COST Association.</p>
    </sec>
    <sec id="sec-6">
      <title>Appendice</title>
      <p>Figure 17: Relation between Haskell’s benchmarks and the variables Package and Time with and without power cap.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>W.</given-names>
            <surname>Voegels</surname>
          </string-name>
          , Keynote at AWS re:
          <source>Invent</source>
          <year>2023</year>
          ,
          <year>2023</year>
          . URL: https://youtu.be/UTRBVPvzt9w?t=3718, accessed:
          <fpage>2024</fpage>
          -05-19.
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>R.</given-names>
            <surname>Pereira</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Couto</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Ribeiro</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Rua</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Cunha</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J. P.</given-names>
            <surname>Fernandes</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Saraiva</surname>
          </string-name>
          ,
          <article-title>Energy eficiency across programming languages: how do energy, time, and memory relate?</article-title>
          ,
          <source>in: Proceedings of the 10th ACM SIGPLAN International Conference on Software Language Engineering</source>
          , SLE 2017,
          <article-title>Association for Computing Machinery</article-title>
          , New York, NY, USA,
          <year>2017</year>
          , p.
          <fpage>256</fpage>
          -
          <lpage>267</lpage>
          . doi:
          <volume>10</volume>
          .1145/3136014.3136031.
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>R.</given-names>
            <surname>Pereira</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Couto</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J. a.</given-names>
            <surname>Saraiva</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Cunha</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J. a. P.</given-names>
            <surname>Fernandes</surname>
          </string-name>
          ,
          <article-title>The influence of the java collection framework on overall energy consumption</article-title>
          ,
          <source>in: Proc. of the 5th Int. Workshop on Green and Sustainable Software, GREENS '16</source>
          ,
          <string-name>
            <surname>ACM</surname>
          </string-name>
          ,
          <year>2016</year>
          , pp.
          <fpage>15</fpage>
          -
          <lpage>21</lpage>
          . doi:
          <volume>10</volume>
          .1145/ 2896967.2896968.
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>S.</given-names>
            <surname>Hasan</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Z.</given-names>
            <surname>King</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Hafiz</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Sayagh</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Adams</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Hindle</surname>
          </string-name>
          ,
          <article-title>Energy profiles of java collections classes</article-title>
          ,
          <source>in: Proc. of the 38th Int. Conf. on Software Engineering</source>
          , ACM,
          <year>2016</year>
          , pp.
          <fpage>225</fpage>
          -
          <lpage>236</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>W.</given-names>
            <surname>Oliveira</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Oliveira</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Castor</surname>
          </string-name>
          ,
          <article-title>A study on the energy consumption of android app development approaches</article-title>
          ,
          <source>in: Proceedings of the 14th International Conference on Mining Software Repositories</source>
          , IEEE Press,
          <year>2017</year>
          , pp.
          <fpage>42</fpage>
          -
          <lpage>52</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>D.</given-names>
            <surname>Li</surname>
          </string-name>
          ,
          <string-name>
            <given-names>W. G. J.</given-names>
            <surname>Halfond</surname>
          </string-name>
          ,
          <article-title>An investigation into energysaving programming practices for android smartphone app development</article-title>
          ,
          <source>in: Proceedings of the 3rd International Workshop on Green and Sustainable Software (GREENS)</source>
          ,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>C.</given-names>
            <surname>Sahin</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Cayci</surname>
          </string-name>
          ,
          <string-name>
            <given-names>I. L. M.</given-names>
            <surname>Gutierrez</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Clause</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Kiamilev</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Pollock</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Winbladh</surname>
          </string-name>
          ,
          <article-title>Initial explorations on design pattern energy usage</article-title>
          ,
          <source>in: Green and Sustainable Software (GREENS)</source>
          ,
          <year>2012</year>
          1st Int. Workshop on, IEEE,
          <year>2012</year>
          , pp.
          <fpage>55</fpage>
          -
          <lpage>61</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>M.</given-names>
            <surname>Linares-Vásquez</surname>
          </string-name>
          ,
          <string-name>
            <given-names>G.</given-names>
            <surname>Bavota</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Bernal-Cárdenas</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Oliveto</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M. Di</given-names>
            <surname>Penta</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Poshyvanyk</surname>
          </string-name>
          ,
          <article-title>Mining energy-greedy api usage patterns in android apps: an empirical study</article-title>
          ,
          <source>in: Proc. of the 11th Working Conf. on Mining Software Repositories, ACM</source>
          ,
          <year>2014</year>
          , pp.
          <fpage>2</fpage>
          -
          <lpage>11</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>C.</given-names>
            <surname>Sahin</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Pollock</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Clause</surname>
          </string-name>
          ,
          <article-title>How do code refactorings afect energy usage?</article-title>
          ,
          <source>in: Proc. of 8th ACM/IEEE Int. Symposium on Empirical Software Engineering and Measurement</source>
          , ACM,
          <year>2014</year>
          , p.
          <fpage>36</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>R.</given-names>
            <surname>Pereira</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Carção</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Couto</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Cunha</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J. P.</given-names>
            <surname>Fernandes</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Saraiva</surname>
          </string-name>
          ,
          <article-title>Helping programmers improve the energy eficiency of source code</article-title>
          ,
          <source>in: Proceedings of the 39th International Conference on Software Engineering Companion</source>
          , ICSE-C '
          <article-title>17</article-title>
          , IEEE Press,
          <year>2017</year>
          , p.
          <fpage>238</fpage>
          -
          <lpage>240</lpage>
          . doi:
          <volume>10</volume>
          .1109/ICSE-C.
          <year>2017</year>
          .
          <volume>80</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>S. A.</given-names>
            <surname>Chowdhury</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Hindle</surname>
          </string-name>
          ,
          <article-title>Greenoracle: estimating software energy consumption with energy measurement corpora</article-title>
          ,
          <source>in: Proceedings of the 13th International Conference on Mining Software Repositories, MSR</source>
          ,
          <year>2016</year>
          ,
          <year>2016</year>
          , pp.
          <fpage>49</fpage>
          -
          <lpage>60</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>R.</given-names>
            <surname>Jabbarvand</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Sadeghi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Garcia</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Malek</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Ammann</surname>
          </string-name>
          ,
          <string-name>
            <surname>Ecodroid:</surname>
          </string-name>
          <article-title>An approach for energy-based ranking of android apps</article-title>
          ,
          <source>in: Proc. of 4th Int. Workshop on Green and Sustainable Software, GREENS '15</source>
          , IEEE Press,
          <year>2015</year>
          , pp.
          <fpage>8</fpage>
          -
          <lpage>14</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>S.</given-names>
            <surname>Hao</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Li</surname>
          </string-name>
          ,
          <string-name>
            <given-names>W. G. J.</given-names>
            <surname>Halfond</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Govindan</surname>
          </string-name>
          ,
          <article-title>Estimating mobile application energy consumption using program analysis</article-title>
          ,
          <source>in: Proc. of the 2013 Int. Conf. on Software Engineering</source>
          , ICSE '13, IEEE Press,
          <year>2013</year>
          , pp.
          <fpage>92</fpage>
          -
          <lpage>101</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>M.</given-names>
            <surname>Couto</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Borba</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Cunha</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J. P.</given-names>
            <surname>Fernandes</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Pereira</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Saraiva</surname>
          </string-name>
          ,
          <article-title>Products go green: Worst-case energy consumption in software product lines</article-title>
          ,
          <source>in: Proceedings of the 21st International Systems and Software Product Line Conference - Volume A, SPLC '17</source>
          ,
          <string-name>
            <surname>Association</surname>
          </string-name>
          for Computing Machinery, New York, NY, USA,
          <year>2017</year>
          , p.
          <fpage>84</fpage>
          -
          <lpage>93</lpage>
          . doi:
          <volume>10</volume>
          .1145/3106195.3106214.
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>M.</given-names>
            <surname>Couto</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Pereira</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Ribeiro</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Rua</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Saraiva</surname>
          </string-name>
          ,
          <article-title>Towards a green ranking for programming languages</article-title>
          ,
          <source>in: Programming Languages: 21st Brazilian Symposium, SBLP</source>
          <year>2017</year>
          , Fortaleza, Brazil, September,
          <year>2017</year>
          .,
          <year>2017</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>R.</given-names>
            <surname>Pereira</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Couto</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Ribeiro</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Rua</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Cunha</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J. P.</given-names>
            <surname>Fernandes</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Saraiva</surname>
          </string-name>
          ,
          <article-title>Ranking programming languages by energy eficiency</article-title>
          ,
          <source>Science of Computer Programming</source>
          <volume>205</volume>
          (
          <year>2021</year>
          ). doi:
          <volume>10</volume>
          .1016/j.scico.
          <year>2021</year>
          .
          <volume>102609</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <given-names>W.</given-names>
            <surname>Partain</surname>
          </string-name>
          ,
          <article-title>The nofib benchmark suite of haskell programs</article-title>
          , in: J.
          <string-name>
            <surname>Launchbury</surname>
          </string-name>
          , P. Sansom (Eds.),
          <string-name>
            <surname>Functional</surname>
            <given-names>Programming</given-names>
          </string-name>
          ,
          <year>Glasgow 1992</year>
          , Springer London, London,
          <year>1993</year>
          , pp.
          <fpage>195</fpage>
          -
          <lpage>202</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <given-names>S. M.</given-names>
            <surname>Blackburn</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Garner</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Hofman</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A. M.</given-names>
            <surname>Khan</surname>
          </string-name>
          ,
          <string-name>
            <surname>K. S. McKinley</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Bentzur</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Diwan</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Feinberg</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Frampton</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S. Z.</given-names>
            <surname>Guyer</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Hirzel</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Hosking</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Jump</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Lee</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J. E. B.</given-names>
            <surname>Moss</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Phansalkar</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Stefanović</surname>
          </string-name>
          , T. VanDrunen, D. von
          <string-name>
            <surname>Dincklage</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          <string-name>
            <surname>Wiedermann</surname>
          </string-name>
          ,
          <article-title>The DaCapo benchmarks: Java benchmarking development and analysis</article-title>
          ,
          <source>in: OOPSLA '06: Proceedings of the 21st annual ACM SIGPLAN conference on Object-Oriented Programing, Systems, Languages, and Applications</source>
          , ACM Press, New York, NY, USA,
          <year>2006</year>
          , pp.
          <fpage>169</fpage>
          -
          <lpage>190</lpage>
          . doi:http://doi.acm.
          <source>org/ 10</source>
          .1145/1167473.1167488.
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [19]
          <string-name>
            <given-names>M.</given-names>
            <surname>Dimitrov</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Strickland</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.-W.</given-names>
            <surname>Kim</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Kumar</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Doshi</surname>
          </string-name>
          , Intel® power governor, https://software.intel. com/en-us/articles/intel-power-governor,
          <year>2015</year>
          . Accessed:
          <fpage>2015</fpage>
          -10-12.
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          [20]
          <string-name>
            <given-names>K. N.</given-names>
            <surname>Khan</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Hirki</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Niemi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J. K.</given-names>
            <surname>Nurminen</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Z.</given-names>
            <surname>Ou</surname>
          </string-name>
          ,
          <article-title>Rapl in action: Experiences in using rapl for power measurements</article-title>
          ,
          <source>ACM Trans. Model. Perform. Eval. Comput. Syst</source>
          .
          <volume>3</volume>
          (
          <year>2018</year>
          ). doi:
          <volume>10</volume>
          .1145/3177754.
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          [21]
          <string-name>
            <given-names>C.</given-names>
            <surname>Imes</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Zhang</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Zhao</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Hofmann</surname>
          </string-name>
          ,
          <article-title>CoPPer: Soft real-time application performance using hardware power capping</article-title>
          ,
          <source>in: 2019 IEEE International Conference on Autonomic Computing (ICAC)</source>
          ,
          <year>2019</year>
          , pp.
          <fpage>31</fpage>
          -
          <lpage>41</lpage>
          . doi:
          <volume>10</volume>
          .1109/ICAC.
          <year>2019</year>
          .
          <volume>00015</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          [22]
          <string-name>
            <given-names>A.</given-names>
            <surname>Krzywaniak</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Czarnul</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Proficz</surname>
          </string-name>
          ,
          <article-title>Extended investigation of performance-energy trade-ofs under power capping in hpc environments</article-title>
          , in: 2019
          <source>International Conference on High Performance Computing &amp; Simulation (HPCS)</source>
          ,
          <year>2019</year>
          , pp.
          <fpage>440</fpage>
          -
          <lpage>447</lpage>
          . doi:
          <volume>10</volume>
          .1109/ HPCS48598.
          <year>2019</year>
          .
          <volume>9188149</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          [23]
          <string-name>
            <given-names>A.</given-names>
            <surname>Krzywaniak</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Czarnul</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Proficz</surname>
          </string-name>
          ,
          <article-title>Depo: A dynamic energy-performance optimizer tool for automatic power capping for energy eficient highperformance computing</article-title>
          ,
          <source>SOFTWARE-PRACTICE &amp; EXPERIENCE</source>
          <volume>52</volume>
          (
          <year>2022</year>
          )
          <fpage>2598</fpage>
          -
          <lpage>2634</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          [24]
          <string-name>
            <given-names>M.</given-names>
            <surname>Hähnel</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Döbel</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Völp</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Härtig</surname>
          </string-name>
          ,
          <article-title>Measuring energy consumption for short code paths using RAPL, SIGMETRICS Performance Evaluation Review 40 (</article-title>
          <year>2012</year>
          )
          <fpage>13</fpage>
          -
          <lpage>17</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref25">
        <mixed-citation>
          [25]
          <string-name>
            <given-names>D.</given-names>
            <surname>Hackenberg</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Schöne</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Ilsche</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Molka</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Schuchart</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Geyer</surname>
          </string-name>
          ,
          <article-title>An Energy Eficiency Feature Survey of the Intel Haswell Processor</article-title>
          , Proceedings - 2015
          <source>IEEE 29th International Parallel and Distributed Processing Symposium Workshops, IPDPSW</source>
          <year>2015</year>
          (
          <year>2015</year>
          )
          <fpage>896</fpage>
          -
          <lpage>904</lpage>
          . doi:
          <volume>10</volume>
          .1109/IPDPSW.
          <year>2015</year>
          .
          <volume>70</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref26">
        <mixed-citation>
          [26]
          <string-name>
            <given-names>B.</given-names>
            <surname>Santos</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M. H.</given-names>
            <surname>Kirkeby</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J. P.</given-names>
            <surname>Fernandes</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Pardo</surname>
          </string-name>
          ,
          <article-title>Compiling Haskell for energy eficiency: Empirical analysis of individual transformations</article-title>
          ,
          <source>in: Proceedings of the 39th ACM/SIGAPP Symposium on Applied Computing, ACM</source>
          ,
          <year>2024</year>
          , pp.
          <fpage>1104</fpage>
          -
          <lpage>1113</lpage>
          . doi:
          <volume>10</volume>
          .1145/ 3605098.3635915.
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>