\documentclass[conference]{IEEEtran}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage{algpseudocode}
\usepackage{graphicx}
\usepackage{algorithm}
\usepackage{subfig}
\usepackage{amsmath}
\usepackage{url}
\DeclareUrlCommand\email{\urlstyle{same}}

\usepackage[autolanguage,np]{numprint}
\AtBeginDocument{%
  \renewcommand*\npunitcommand[1]{\text{#1}}
  \npthousandthpartsep{}}

\usepackage{xspace}
\usepackage[textsize=footnotesize]{todonotes}
\newcommand{\AG}[2][inline]{%
  \todo[color=green!50,#1]{\sffamily\textbf{AG:} #2}\xspace}
\newcommand{\JC}[2][inline]{%
  \todo[color=red!10,#1]{\sffamily\textbf{JC:} #2}\xspace}

\newcommand{\Xsub}[2]{{\ensuremath{#1_\mathit{#2}}}}

%% used to put some subscripts lower, and make them more legible
\newcommand{\fxheight}[1]{\ifx#1\relax\relax\else\rule{0pt}{1.52ex}#1\fi}

\newcommand{\CL}{\Xsub{C}{L}}
\newcommand{\Dist}{\mathit{Dist}}
\newcommand{\EdNew}{\Xsub{E}{dNew}}
\newcommand{\Eind}{\Xsub{E}{ind}}
\newcommand{\Enorm}{\Xsub{E}{Norm}}
\newcommand{\Eoriginal}{\Xsub{E}{Original}}
\newcommand{\Ereduced}{\Xsub{E}{Reduced}}
\newcommand{\Es}{\Xsub{E}{S}}
\newcommand{\Fdiff}[1][]{\Xsub{F}{diff}_{\!#1}}
\newcommand{\Fmax}[1][]{\Xsub{F}{max}_{\fxheight{#1}}}
\newcommand{\Fnew}{\Xsub{F}{new}}
\newcommand{\Ileak}{\Xsub{I}{leak}}
\newcommand{\Kdesign}{\Xsub{K}{design}}
\newcommand{\MaxDist}{\mathit{Max}\Dist}
\newcommand{\MinTcm}{\mathit{Min}\Tcm}
\newcommand{\Ntrans}{\Xsub{N}{trans}}
\newcommand{\Pd}[1][]{\Xsub{P}{d}_{\fxheight{#1}}}
\newcommand{\PdNew}{\Xsub{P}{dNew}}
\newcommand{\PdOld}{\Xsub{P}{dOld}}
\newcommand{\Pnorm}{\Xsub{P}{Norm}}
\newcommand{\Ps}[1][]{\Xsub{P}{s}_{\fxheight{#1}}}
\newcommand{\Scp}[1][]{\Xsub{S}{cp}_{#1}}
\newcommand{\Sopt}[1][]{\Xsub{S}{opt}_{#1}}
\newcommand{\Tcm}[1][]{\Xsub{T}{cm}_{\fxheight{#1}}}
\newcommand{\Tcp}[1][]{\Xsub{T}{cp}_{#1}}
\newcommand{\Ppeak}[1][]{\Xsub{P}{peak}_{#1}}
\newcommand{\Pidle}[1][]{\Xsub{P}{idle}_{\fxheight{#1}}}
\newcommand{\TcpOld}[1][]{\Xsub{T}{cpOld}_{#1}}
\newcommand{\Tnew}{\Xsub{T}{New}}
\newcommand{\Told}{\Xsub{T}{Old}}

\begin{document}

\title{Energy Consumption Reduction with DVFS for \\
  Message Passing Iterative Applications on \\
  Heterogeneous Architectures}

\author{%
  \IEEEauthorblockN{%
    Jean-Claude Charr,
    Raphaël Couturier,
    Ahmed Fanfakh and
    Arnaud Giersch
  }
  \IEEEauthorblockA{%
    FEMTO-ST Institute, University of Franche-Comté\\
    IUT de Belfort-Montbéliard,
    19 avenue du Maréchal Juin, BP 527, 90016 Belfort cedex, France\\
    % Telephone: \mbox{+33 3 84 58 77 86}, % Raphaël
    % Fax: \mbox{+33 3 84 58 77 81}\\      % Dept Info
    Email: \email{{jean-claude.charr,raphael.couturier,ahmed.fanfakh_badri_muslim,arnaud.giersch}@univ-fcomte.fr}
   }
  }

\maketitle

\begin{abstract}
  

\end{abstract}

\section{Introduction}
\label{sec.intro}



\section{Related works}
\label{sec.relwork}


\section{The performance and energy consumption measurements on heterogeneous architecture}
\label{sec.exe}

\subsection{The execution time of message passing distributed iterative
  applications on a heterogeneous platform}

In this paper, we are interested in reducing the energy consumption of message
passing distributed iterative synchronous applications running over
heterogeneous grid platforms. A heterogeneous grid platform could be defined as a collection of
heterogeneous computing clusters interconnected via a long distance network which has lower bandwidth 
and higher latency than the local networks of the clusters. Each computing cluster in the grid is composed of homogeneous nodes that are connected together via high speed network. Therefore, each cluster has different characteristics such as computing power (FLOPS), energy consumption, CPU's frequency range, network bandwidth and latency.

\begin{figure}[!t]
  \centering
  \includegraphics[scale=0.6]{fig/commtasks}
  \caption{Parallel tasks on a heterogeneous platform}
  \label{fig:heter}
\end{figure}

The overall execution time of a distributed iterative synchronous application 
over a heterogeneous grid consists of the sum of the computation time and 
the communication time for every iteration on a node. However, due to the
heterogeneous computation power of the computing clusters, slack times may occur
when fast nodes have to wait, during synchronous communications, for the slower
nodes to finish their computations (see Figure~\ref{fig:heter}).  Therefore, the
overall execution time of the program is the execution time of the slowest task 
which has the highest computation time and no slack time.

Dynamic Voltage and Frequency Scaling (DVFS) is a process, implemented in
modern processors, that reduces the energy consumption of a CPU by scaling
down its voltage and frequency.  Since DVFS lowers the frequency of a CPU
and consequently its computing power, the execution time of a program running
over that scaled down processor may increase, especially if the program is
compute bound.  The frequency reduction process can be  expressed by the scaling
factor S which is the ratio between  the maximum and the new frequency of a CPU
as in (\ref{eq:s}).
\begin{equation}
  \label{eq:s}
  S = \frac{\Fmax}{\Fnew}
\end{equation}
The execution time of a compute bound sequential program is linearly
proportional to the frequency scaling factor $S$.  On the other hand, message
passing distributed applications consist of two parts: computation and
communication.  The execution time of the computation part is linearly
proportional to the frequency scaling factor $S$ but the communication time is
not affected by the scaling factor because the processors involved remain idle
during the communications~\cite{Freeh_Exploring.the.Energy.Time.Tradeoff}.  The
communication time for a task is the summation of periods of time that begin
with an MPI call for sending or receiving a message until the message is
synchronously sent or received.

Since in a heterogeneous grid each cluster has different characteristics,
especially different frequency gears, when applying DVFS operations on the nodes 
of these clusters, they may get different scaling factors represented by a scaling vector:
$(S_{11}, S_{12},\dots, S_{NM})$ where $S_{ij}$ is the scaling factor of processor $j$ in cluster $i$ . To
be able to predict the execution time of message passing synchronous iterative
applications running over a heterogeneous grid, for different vectors of
scaling factors, the communication time and the computation time for all the
tasks must be measured during the first iteration before applying any DVFS
operation. Then the execution time for one iteration of the application with any
vector of scaling factors can be predicted using (\ref{eq:perf}).
\begin{equation}
  \label{eq:perf}
  \Tnew = \mathop{\max_{i=1,\dots N}}_{j=1,\dots,M}({\TcpOld[ij]} \cdot S_{ij}) 
  +\mathop{\min_{j=1,\dots,M}}  (\Tcm[hj])
\end{equation}

where $N$ is the number of  clusters in the grid, $M$ is the number of  nodes in
each cluster, $\TcpOld[ij]$ is the computation time of processor $j$ in the cluster $i$ 
and $\Tcm[hj]$ is the communication time of processor $j$ in the cluster $h$ during the 
first  iteration. The model computes the maximum computation time with scaling factor 
from each node added to the communication time of the slowest node in the slowest cluster $h$.
It means only the communication time without any slack time is taken into account.  
Therefore, the execution time of the iterative application is equal to
the execution time of one iteration as in (\ref{eq:perf}) multiplied by the
number of iterations of that application.

This prediction model is developed from the model to predict the execution time
of message passing distributed applications for homogeneous and heterogeneous clusters
~\cite{Our_first_paper,pdsec2015}.  The execution time prediction model is
used in the method to optimize both the energy consumption and the performance
of iterative methods, which is presented in the following sections.


\subsection{Energy model for heterogeneous platform}

Many researchers~\cite{Malkowski_energy.efficient.high.performance.computing,
  Rauber_Analytical.Modeling.for.Energy,Zhuo_Energy.efficient.Dynamic.Task.Scheduling,
  Rizvandi_Some.Observations.on.Optimal.Frequency} divide the power consumed by
a processor into two power metrics: the static and the dynamic power.  While the
first one is consumed as long as the computing unit is turned on, the latter is
only consumed during computation times.  The dynamic power $\Pd$ is related to
the switching activity $\alpha$, load capacitance $\CL$, the supply voltage $V$
and operational frequency $F$, as shown in (\ref{eq:pd}).
\begin{equation}
  \label{eq:pd}
  \Pd = \alpha \cdot \CL \cdot V^2 \cdot F
\end{equation}
The static power $\Ps$ captures the leakage power as follows:
\begin{equation}
  \label{eq:ps}
   \Ps  = V \cdot \Ntrans \cdot \Kdesign \cdot \Ileak
\end{equation}
where V is the supply voltage, $\Ntrans$ is the number of transistors,
$\Kdesign$ is a design dependent parameter and $\Ileak$ is a
technology dependent parameter.  The energy consumed by an individual processor
to execute a given program can be computed as:
\begin{equation}
  \label{eq:eind}
  \Eind =  \Pd \cdot \Tcp + \Ps \cdot T
\end{equation}
where $T$ is the execution time of the program, $\Tcp$ is the computation
time and $\Tcp \le T$.  $\Tcp$ may be equal to $T$ if there is no
communication and no slack time.

The main objective of DVFS operation is to reduce the overall energy
consumption~\cite{Le_DVFS.Laws.of.Diminishing.Returns}.  The operational
frequency $F$ depends linearly on the supply voltage $V$, i.e., $V = \beta \cdot
F$ with some constant $\beta$.~This equation is used to study the change of the
dynamic voltage with respect to various frequency values
in~\cite{Rauber_Analytical.Modeling.for.Energy}.  The reduction process of the
frequency can be expressed by the scaling factor $S$ which is the ratio between
the maximum and the new frequency as in (\ref{eq:s}).  The CPU governors are
power schemes supplied by the operating system's kernel to lower a core's
frequency. The new frequency $\Fnew$ from (\ref{eq:s}) can be calculated as
follows:
\begin{equation}
  \label{eq:fnew}
   \Fnew = S^{-1} \cdot \Fmax
\end{equation}
Replacing $\Fnew$ in (\ref{eq:pd}) as in (\ref{eq:fnew}) gives the following
equation for dynamic power consumption:
\begin{multline}
  \label{eq:pdnew}
   \PdNew = \alpha \cdot \CL \cdot V^2 \cdot \Fnew = \alpha \cdot \CL \cdot \beta^2 \cdot \Fnew^3 \\
   {} = \alpha \cdot \CL \cdot V^2 \cdot \Fmax \cdot S^{-3} = \PdOld \cdot S^{-3}
\end{multline}
where $\PdNew$  and $\PdOld$ are the  dynamic power consumed with the
new frequency and the maximum frequency respectively.

According to (\ref{eq:pdnew}) the dynamic power is reduced by a factor of
$S^{-3}$ when reducing the frequency by a factor of
$S$~\cite{Rauber_Analytical.Modeling.for.Energy}. Since the FLOPS of a CPU is
proportional to the frequency of a CPU, the computation time is increased
proportionally to $S$.  The new dynamic energy is the dynamic power multiplied
by the new time of computation and is given by the following equation:
\begin{equation}
  \label{eq:Edyn}
   \EdNew = \PdOld \cdot S^{-3} \cdot (\Tcp \cdot S)= S^{-2}\cdot \PdOld \cdot  \Tcp
\end{equation}
The static power is related to the power leakage of the CPU and is consumed
during computation and even when idle. As
in~\cite{Rauber_Analytical.Modeling.for.Energy,Zhuo_Energy.efficient.Dynamic.Task.Scheduling},
the static power of a processor is considered as constant during idle and
computation periods, and for all its available frequencies.  The static energy
is the static power multiplied by the execution time of the program.  According
to the execution time model in (\ref{eq:perf}), the execution time of the
program is the sum of the computation and the communication times. The
computation time is linearly related to the frequency scaling factor, while this
scaling factor does not affect the communication time.  The static energy of a
processor after scaling its frequency is computed as follows:
\begin{equation}
  \label{eq:Estatic}
  \Es = \Ps \cdot (\Tcp \cdot S  + \Tcm)
\end{equation}

In the considered heterogeneous grid platform, each node $j$ in cluster $i$ may have
different dynamic and static powers from the nodes of the other clusters, 
noted as $\Pd[ij]$ and $\Ps[ij]$ respectively.  Therefore, even if the distributed 
message passing iterative application is load balanced, the computation time of each CPU $j$ 
in cluster $i$ noted $\Tcp[ij]$ may be different and different frequency scaling factors may be
computed in order to decrease the overall energy consumption of the application
and reduce slack times.  The communication time of a processor $j$ in cluster $i$ is noted as
$\Tcm[ij]$ and could contain slack times when communicating with slower nodes,
see Figure~\ref{fig:heter}.  Therefore, all nodes do not have equal
communication times. While the dynamic energy is computed according to the
frequency scaling factor and the dynamic power of each node as in
(\ref{eq:Edyn}), the static energy is computed as the sum of the execution time
of one iteration multiplied by the static power of each processor.  The overall
energy consumption of a message passing distributed application executed over a
heterogeneous grid platform during one iteration is the summation of all dynamic and
static energies for $M$ processors in $N$ clusters.  It is computed as follows:
\begin{multline}
  \label{eq:energy}
 E = \sum_{i=1}^{N} \sum_{i=1}^{M} {(S_{ij}^{-2} \cdot \Pd[ij] \cdot  \Tcp[ij])} +  
 \sum_{i=1}^{N} \sum_{j=1}^{M} (\Ps[ij] \cdot {} \\
  (\mathop{\max_{i=1,\dots N}}_{j=1,\dots,M}({\Tcp[ij]} \cdot S_{ij}) 
  +\mathop{\min_{j=1,\dots M}} (\Tcm[hj]) ))
\end{multline}

Reducing the frequencies of the processors according to the vector of scaling
factors $(S_{11}, S_{12},\dots, S_{NM})$ may degrade the performance of the application
and thus, increase the static energy because the execution time is
increased~\cite{Kim_Leakage.Current.Moore.Law}. The overall energy consumption
for the iterative application can be measured by measuring the energy
consumption for one iteration as in (\ref{eq:energy}) multiplied by the number
of iterations of that application.

\section{Optimization of both energy consumption and performance}
\label{sec.compet}

Using the lowest frequency for each processor does not necessarily give the most
energy efficient execution of an application. Indeed, even though the dynamic
power is reduced while scaling down the frequency of a processor, its
computation power is proportionally decreased. Hence, the execution time might
be drastically increased and during that time, dynamic and static powers are
being consumed.  Therefore, it might cancel any gains achieved by scaling down
the frequency of all nodes to the minimum and the overall energy consumption of
the application might not be the optimal one.  It is not trivial to select the
appropriate frequency scaling factor for each processor while considering the
characteristics of each processor (computation power, range of frequencies,
dynamic and static powers) and the task executed (computation/communication
ratio). The aim being to reduce the overall energy consumption and to avoid
increasing significantly the execution time.  In our previous
work~\cite{Our_first_paper,pdsec2015}, we proposed a method that selects the optimal
frequency scaling factor for a homogeneous and heterogeneous clusters executing a message passing
iterative synchronous application while giving the best trade-off between the
energy consumption and the performance for such applications.  In this work we
are interested in heterogeneous grid as described above.  Due to the
heterogeneity of the processors, a vector of scaling factors should be selected
and it must give the best trade-off between energy consumption and performance.

The relation between the energy consumption and the execution time for an
application is complex and nonlinear, Thus, unlike the relation between the
execution time and the scaling factor, the relation between the energy and the
frequency scaling factors is nonlinear, for more details refer
to~\cite{Freeh_Exploring.the.Energy.Time.Tradeoff}.  Moreover, these relations
are not measured using the same metric.  To solve this problem, the execution
time is normalized by computing the ratio between the new execution time (after
scaling down the frequencies of some processors) and the initial one (with
maximum frequency for all nodes) as follows:
\begin{equation}
  \label{eq:pnorm}
  \Pnorm = \frac{\Tnew}{\Told}                 
\end{equation}


Where $Tnew$ is computed as in (\ref{eq:perf}) and $Told$ is computed as in (\ref{eq:told})
\begin{equation}
  \label{eq:told}
   \Told = \mathop{\max_{i=1,2,\dots,N}}_{j=1,2,\dots,M} (\Tcp[ij]+\Tcm[ij])             
\end{equation}
In the same way, the energy is normalized by computing the ratio between the
consumed energy while scaling down the frequency and the consumed energy with
maximum frequency for all  nodes:
\begin{equation}
  \label{eq:enorm}
  \Enorm = \frac{\Ereduced}{\Eoriginal} 
\end{equation}

Where $\Ereduced$  is computed using (\ref{eq:energy}) and $\Eoriginal$ is 
computed as in ().

\textcolor{red}{A reference is missing}
\begin{equation}
  \label{eq:eorginal}
    \Eoriginal = \sum_{i=1}^{N} \sum_{j=1}^{M} ( \Pd[ij] \cdot  \Tcp[ij])  + 
     \mathop{\sum_{i=1}^{N}} \sum_{j=1}^{M} (\Ps[ij] \cdot \Told)       
\end{equation}

While the main goal is to optimize the energy and execution time at the same
time, the normalized energy and execution time curves do not evolve (increase/decrease) in the same way. 
According to the equations~(\ref{eq:pnorm}) and (\ref{eq:enorm}), the
vector of frequency scaling factors $S_1,S_2,\dots,S_N$ reduce both the energy
and the execution time simultaneously.  But the main objective is to produce
maximum energy reduction with minimum execution time reduction.

This problem can be solved by making the optimization process for energy and
execution time follow the same evolution according to the vector of scaling factors
$(S_{11}, S_{12},\dots, S_{NM})$. Therefore, the equation of the
normalized execution time is inverted which gives the normalized performance
equation, as follows:
\begin{equation}
  \label{eq:pnorm_inv}
  \Pnorm = \frac{\Told}{\Tnew}          
\end{equation}

\begin{figure}[!t]
  \centering
  \subfloat[Homogeneous cluster]{%
    \includegraphics[width=.33\textwidth]{fig/homo}\label{fig:r1}}%

  \subfloat[Heterogeneous grid]{%
    \includegraphics[width=.33\textwidth]{fig/heter}\label{fig:r2}}
  \label{fig:rel}
  \caption{The energy and performance relation}
\end{figure}

Then, the objective function can be modeled in order to find the maximum
distance between the energy curve (\ref{eq:enorm}) and the performance curve
(\ref{eq:pnorm_inv}) over all available sets of scaling factors.  This
represents the minimum energy consumption with minimum execution time (maximum
performance) at the same time, see Figure~\ref{fig:r1} or
Figure~\ref{fig:r2}. Then the objective function has the following form:
\begin{equation}
  \label{eq:max}
  \MaxDist =
\mathop{  \mathop{\max_{i=1,\dots N}}_{j=1,\dots,M}}_{k=1,\dots,F}
      (\overbrace{\Pnorm(S_{ijk})}^{\text{Maximize}} -
       \overbrace{\Enorm(S_{ijk})}^{\text{Minimize}} )
\end{equation}
where $N$ is the number of clusters, $M$ is the number of nodes in each cluster and
$F$ is the number of available frequencies for each node.  Then, the optimal set 
of scaling factors that satisfies (\ref{eq:max}) can be selected.  
The objective function can work with any energy model or any power 
values for each node (static and dynamic powers). However, the most important 
energy reduction gain can be achieved when the energy curve has a convex form as shown 
in~\cite{Zhuo_Energy.efficient.Dynamic.Task.Scheduling,Rauber_Analytical.Modeling.for.Energy,Hao_Learning.based.DVFS}.

\section{The scaling factors selection algorithm for heterogeneous grid platforms }
\label{sec.optim}

\begin{algorithm}
  \begin{algorithmic}[1]
    % \footnotesize
    \Require ~
    \begin{description}
    \item [{$N$}] number of clusters in the grid.
    \item [{$M$}] number of nodes in each cluster.
    \item[{$\Tcp[ij]$}] array of all computation times for all nodes during one iteration and with the highest frequency.
    \item[{$\Tcm[ij]$}] array of all communication times for all nodes during one iteration and with the highest frequency.
    \item[{$\Fmax[ij]$}] array of the maximum frequencies for all nodes.
    \item[{$\Pd[ij]$}] array of the dynamic powers for all nodes.
    \item[{$\Ps[ij]$}] array of the static powers for all nodes.
    \item[{$\Fdiff[ij]$}] array of the differences between two successive frequencies for all nodes.
    \end{description}
    \Ensure $\Sopt[11],\Sopt[12] \dots, \Sopt[NM_i]$,  a vector of scaling factors that gives the optimal tradeoff between energy consumption and execution time

    \State $\Scp[ij] \gets \frac{\max_{i=1,2,\dots,N}(\max_{j=1,2,\dots,M_i}(\Tcp[ij]))}{\Tcp[ij]} $
    \State $F_{ij} \gets  \frac{\Fmax[ij]}{\Scp[i]},~{i=1,2,\cdots,N},~{j=1,2,\dots,M_i}.$
    \State Round the computed initial frequencies $F_i$ to the closest  available frequency for each node.
    \If{(not the first frequency)}
          \State $F_{ij} \gets F_{ij}+\Fdiff[ij],~i=1,\dots,N,~{j=1,\dots,M_i}.$
    \EndIf
    \State $\Told \gets $ computed as in equations (\ref{eq:told}).
    \State $\Eoriginal \gets $ computed as in equations (\ref{eq:eorginal}) .
    \State $\Sopt[ij] \gets 1,~i=1,\dots,N,~{j=1,\dots,M_i}. $
    \State $\Dist \gets 0 $
    \While {(all nodes have not reached their  minimum   \newline\hspace*{2.5em} frequency \textbf{or}  $\Pnorm - \Enorm < 0 $)}
        \If{(not the last freq. \textbf{and} not the slowest node)}
        \State $F_{ij} \gets F_{ij} - \Fdiff[ij],~{i=1,\dots,N},~{j=1,\dots,M_i}$.
        \State $S_{ij} \gets \frac{\Fmax[ij]}{F_{ij}},~{i=1,\dots,N},~{j=1,\dots,M_i}.$
        \EndIf
       \State $\Tnew \gets $ computed as  in equations (\ref{eq:perf}). 
       \State $\Ereduced \gets $ computed as  in equations (\ref{eq:energy}). 
       \State $\Pnorm \gets \frac{\Told}{\Tnew}$
       \State $\Enorm\gets \frac{\Ereduced}{\Eoriginal}$
      \If{$(\Pnorm - \Enorm > \Dist)$}
        \State $\Sopt[ij] \gets S_{ij},~i=1,\dots,N,~j=1,\dots,M_i. $
        \State $\Dist \gets \Pnorm - \Enorm$
      \EndIf
    \EndWhile
    \State  Return $\Sopt[11],\Sopt[12],\dots,\Sopt[NM_i]$
  \end{algorithmic}
  \caption{Scaling factors selection algorithm}
  \label{HSA}
\end{algorithm}

\begin{algorithm}
  \begin{algorithmic}[1]
    % \footnotesize
    \For {$k=1$ to \textit{some iterations}}
      \State Computations section.
      \State Communications section.
      \If {$(k=1)$}
        \State Gather all times of computation and\newline\hspace*{3em}%
               communication from each node.
        \State Call Algorithm \ref{HSA}.
        \State Compute the new frequencies from the\newline\hspace*{3em}%
               returned optimal scaling factors.
        \State Set the new frequencies to nodes.
      \EndIf
    \EndFor
  \end{algorithmic}
  \caption{DVFS algorithm}
  \label{dvfs}
\end{algorithm}

\subsection{The algorithm details}

\textcolor{red}{Delete the subsection if there's only one.}
In this section, Algorithm~\ref{HSA} is presented. It selects the frequency
scaling factors vector that gives the best trade-off between minimizing the
energy consumption and maximizing the performance of a message passing
synchronous iterative application executed on a heterogeneous grid platform. It works
online during the execution time of the iterative message passing program.  It
uses information gathered during the first iteration such as the computation
time and the communication time in one iteration for each node. The algorithm is
executed after the first iteration and returns a vector of optimal frequency
scaling factors that satisfies the objective function (\ref{eq:max}). The
program applies DVFS operations to change the frequencies of the CPUs according
to the computed scaling factors.  This algorithm is called just once during the
execution of the program. Algorithm~\ref{dvfs} shows where and when the proposed
scaling algorithm is called in the iterative MPI program.

\begin{figure}[!t]
  \centering
  \includegraphics[scale=0.45]{fig/init_freq}
  \caption{Selecting the initial frequencies}
  \label{fig:st_freq}
\end{figure}

The nodes in a heterogeneous grid have different computing powers, thus
while executing message passing iterative synchronous applications, fast nodes
have to wait for the slower ones to finish their computations before being able
to synchronously communicate with them as in Figure~\ref{fig:heter}.  These
periods are called idle or slack times.  The algorithm takes into account this
problem and tries to reduce these slack times when selecting the frequency
scaling factors vector. At first, it selects initial frequency scaling factors
that increase the execution times of fast nodes and minimize the differences
between the computation times of fast and slow nodes. The value of the initial
frequency scaling factor for each node is inversely proportional to its
computation time that was gathered from the first iteration. These initial
frequency scaling factors are computed as a ratio between the computation time
of the slowest node and the computation time of the node $i$ as follows:
\begin{equation}
  \label{eq:Scp}
  \Scp[ij] =  \frac{ \mathop{\max_{i=1,\dots N}}_{j=1,\dots,M}(\Tcp[ij])} {\Tcp[ij]}
\end{equation}
Using the initial frequency scaling factors computed in (\ref{eq:Scp}), the
algorithm computes the initial frequencies for all nodes as a ratio between the
maximum frequency of node $i$ and the computation scaling factor $\Scp[i]$ as
follows:
\begin{equation}
  \label{eq:Fint}
  F_{ij} = \frac{\Fmax[ij]}{\Scp[ij]},~{i=1,2,\dots,N},~{j=1,\dots,M}
\end{equation}
If the computed initial frequency for a node is not available in the gears of
that node, it is replaced by the nearest available frequency.  In
Figure~\ref{fig:st_freq}, the nodes are sorted by their computing power in
ascending order and the frequencies of the faster nodes are scaled down
according to the computed initial frequency scaling factors.  The resulting new
frequencies are highlighted in Figure~\ref{fig:st_freq}.  This set of
frequencies can be considered as a higher bound for the search space of the
optimal vector of frequencies because selecting scaling factors higher
than the higher bound will not improve the performance of the application and it
will increase its overall energy consumption.  Therefore the algorithm that
selects the frequency scaling factors starts the search method from these
initial frequencies and takes a downward search direction toward lower
frequencies or reaching to the lower bound. The lower bound is used to  stop 
the algorithm search process when the new computed distance between the energy and performance is less than zero.
The new negative distance is  mean that the performance degradation ratio is higher than energy saving ratio.
Therefore, the algorithm must stop the iterations before reaching to the end of the search space, the minimum frequencies, 
because the all the coming new distances are negative values.
The algorithm iterates on all remaining frequencies, from the higher
bound until all nodes reach their minimum frequencies or to the lower bound, to compute their overall
energy consumption and performance, and select the optimal frequency scaling
factors vector. At each iteration the algorithm determines the slowest node
according to the equation (\ref{eq:perf}) and keeps its frequency unchanged,
while it lowers the frequency of all other nodes by one gear.  The new overall
energy consumption and execution time are computed according to the new scaling
factors.  The optimal set of frequency scaling factors is the set that gives the
highest distance according to the objective function (\ref{eq:max}).

Figures~\ref{fig:r1} and \ref{fig:r2} illustrate the normalized performance and
consumed energy for an application running on a homogeneous platform and a
heterogeneous grid platform respectively while increasing the scaling factors. It can
be noticed that in a homogeneous platform the search for the optimal scaling
factor should start from the maximum frequency because the performance and the
consumed energy decrease from the beginning of the plot. On the other hand, in
the heterogeneous grid platform the performance is maintained at the beginning of the
plot even if the frequencies of the faster nodes decrease until the computing
power of scaled down nodes are lower than the slowest node. In other words,
until they reach the higher bound. It can also be noticed that the higher the
difference between the faster nodes and the slower nodes is, the bigger the
maximum distance between the energy curve and the performance curve is while the
scaling factors are varying which results in bigger energy savings. 


\section{Experimental results}
\label{sec.expe}

\subsection{Grid'5000 architature and power consumption}
\label{sec.grid5000}
The grid'5000 is a large-scale testbed found in France \cite{grid5000}.
The grid infrastructure consist of ten sites distributed over all France 
metropolitan regions. Each site in the grid'5000 composed from number of heterogeneous 
computing clusters, while each cluster includes a collection of homogeneous nodes.
In general, the grid'5000 had one thousand of heterogeneous nodes and eight thousand of cores. 
All the sites are connected together via special long distance network called RENATER,
which is the French National Telecommunication Network for Technology. Whereas inside each site 
the clusters and their nodes are connected throw high speed local area networks. 
There are different types of local networks used such as Ethernet and Infiniband netwoks,  
which allowed different gigabits bandwidth and latencies.  On the other hand, the nodes inside each cluster 
are homogeneous, while they are different from the nodes of the other clusters. Therefore, there are
a wide diversity of processors in grid'5000, that mainly had different processors families 
such as  Intel Xeon and AMD Opteron families. 

In this paper we are interested  to run NAS parallel v3.3 \cite{NAS.Parallel.Benchmarks} over grid'5000.
We are used seven benchmarks, CG, MG, EP, LU, BT, SP and FT. These benchmarks used seven different types of classes.
These classes are S, W, A, B, C, D, E, where S represents the smaller problem size that used by benchmark and
E is represents the biggest class. In this work, the class D is used for all benchmarks in all the experiments that will 
be showed in the coming sections.
Moreover, the NAS parallel benchmarks have different computations and communications ratios, then it is interested 
to study their energy consumption and their performance on real testbed such as grid'5000.
In this work, the NAS benchmarks are executed over two sites, Lyon and Nancy sites, of grid'5000.
These two sites had seven different types of computing clusters as in figure (\ref{fig:grid5000}).

\begin{figure}[!t]
  \centering
  \includegraphics[scale=1]{fig/grid5000}
  \caption{The selected two sites of grid'5000}
  \label{fig:grid5000}
\end{figure}

Four clusters from the two sites are selected in the experiments, one cluster from 
Lyon site, Taurus cluster, and three clusters from Nancy site where are Graphene, 
Griffon and Graphite. Each one of these clusters has homogeneous nodes inside, while their nodes are
different from the nodes of other clusters in many aspects such as: computing power, power consumption, available 
frequencies ranges and the network features, the bandwidth and the latency. The Table \ref{table:grid5000} shows 
the details characteristics of these four clusters.

  
\begin{table}[!t]
  \caption{CPUs characteristics of the selected clusters}
  % title of Table
  \centering
  \begin{tabular}{|*{7}{c|}}
    \hline
    Cluster     & CPU         & Max   & Min   & Diff. & no. of cores    & dynamic power   \\
    Name        & model       & Freq. & Freq. & Freq. & per CPU         & of one core     \\
                &             & GHz   & GHz   & GHz   &                 &           \\
    \hline
    Taurus      & Intel       & 2.3  & 1.2  & 0.1     & 6               & \np[W]{35} \\
                & Xeon        &       &       &       &                 &            \\
                & E5-2630     &       &       &       &                 &            \\         
    \hline
    Graphene    & Intel       & 2.53  & 1.2   & 0.133 & 4               & \np[W]{23} \\
                & Xeon        &       &       &       &                 &            \\
                & X3440       &       &       &       &                 &            \\    
    \hline
    Griffon     & Intel       & 2.5   & 2     & 0.5   & 4               & \np[W]{46} \\
                & Xeon        &       &       &       &                 &            \\
                & L5420       &       &       &       &                 &            \\  
    \hline
    Graphite    & Intel       & 2     & 1.2   & 0.1   & 8               & \np[W]{35} \\
                & Xeon        &       &       &       &                 &            \\
                & E5-2650     &       &       &       &                 &            \\  
    \hline
  \end{tabular}
  \label{table:grid5000}
\end{table} 

The grid'5000 testbed provided some monitoring and measurements features to captured 
the power consumption values for each node in any cluster of Lyon and Nancy sites. 
The power consumed for each node from the selected four clusters is measured. 
While the power consumed by any computing node is a collection of the powers  consumed by 
hard drive, main-board, memory and node's computing cores, for more detail refer to
\cite{Energy_measurement}. Therefore, the dynamic power consumed
by one core is not allowed to measured alone. To overcome this problem, firstly, 
we measured the power consumed by one node when there is no computation, when 
the CPU is in the idle state. The second step, we run EP benchmark, there is no communications 
in this benchmarks, over one core with maximum frequency of the desired node and 
capturing the power consumed by a node, this representing the peak power of the node with one core.  
The difference between the peak power  and the idle power representing the 
dynamic power consumption of that core with maximum frequency, for example see figure(\ref{fig:power_cons}). 
The $\Ppeak[jx]$ is the peak power value in time $x$ with maximum frequency for one core of node $j$, 
and $\Pidle[jy]$ is the idle power value in time $y$ for the one  core of the node $j$ . 
The dynamic power $\Pd[j]$ is computed as in equation (\ref{eq:pdyn})
\begin{equation}
  \label{eq:pdyn}
    \Pd[j] = \max_{x=\beta_1,\dots \beta_2} (\Ppeak[jx])  -  \min_{y=\Theta_1,\dots \Theta_2} (\Pidle[jy])
\end{equation}

where $\Pd[j]$ is the dynamic power consumption for one core of node $j$, 
$\lbrace \beta_1,\beta_2 \rbrace$ is the time interval for the measured peak power values, 
$\lbrace\Theta_1,\Theta_2\rbrace$ is the time interval for the measured  idle power values.
Therefore, the dynamic power of one core is computed as the difference between the maximum 
measured value in peak powers vector and the minimum measured value in the idle powers vector.
We are computed the dynamic powers, using the equation (\ref{eq:pdyn}), for all nodes in the 
selected clusters, which is recorded in table  \ref{table:grid5000}.
On the other side, the static power consumption by one core is embedded with whole idle power consumption of the node.
Indeed, the static power is represents as ratio from  dynamic power. So, we supposed  
the static power consumption represented  as \np[\%]{20} of dynamic power consumption of the core, 
the same assumption was made in \cite{Our_first_paper,pdsec2015,Rauber_Analytical.Modeling.for.Energy}.
\begin{figure}[!t]
  \centering
  \includegraphics[scale=0.6]{fig/power_consumption.pdf}
  \caption{The power consumption by one core from Taurus cluster}
  \label{fig:power_cons}
\end{figure}


\subsection{The experimental results of the scaling algorithm}
\label{sec.res}

\subsection{The experimental results of multi-cores clusters}
\label{sec.res}

\subsection{The results for different power consumption scenarios}
\label{sec.compare}




\subsection{The comparison of the proposed scaling algorithm }
\label{sec.compare_EDP}



\section{Conclusion}
\label{sec.concl}



\section*{Acknowledgment}

This work  has been  partially supported by  the Labex ACTION  project (contract
``ANR-11-LABX-01-01'').  Computations  have been performed  on the supercomputer
facilities  of the  Mésocentre de  calcul de  Franche-Comté. As  a  PhD student,
Mr. Ahmed  Fanfakh, would  like to  thank the University  of Babylon  (Iraq) for
supporting his work.

% trigger a \newpage just before the given reference
% number - used to balance the columns on the last page
% adjust value as needed - may need to be readjusted if
% the document is modified later
%\IEEEtriggeratref{15}

\bibliographystyle{IEEEtran}
\bibliography{IEEEabrv,my_reference}
\end{document}

%%% Local Variables:
%%% mode: latex
%%% TeX-master: t
%%% fill-column: 80
%%% ispell-local-dictionary: "american"
%%% End:

% LocalWords:  Fanfakh Charr FIXME Tianhe DVFS HPC NAS NPB SMPI Rauber's Rauber
% LocalWords:  CMOS EPSA Franche Comté Tflop Rünger IUT Maréchal Juin cedex GPU
% LocalWords:  de badri muslim MPI SimGrid GFlops Xeon EP BT GPUs CPUs AMD
%  LocalWords:  Spiliopoulos scalability
