From 47017a08cb1074a60d85aae0f647d757c576c8b7 Mon Sep 17 00:00:00 2001 From: afanfakh Date: Fri, 6 Nov 2015 11:47:11 +0100 Subject: [PATCH] correcting power mesurement fig --- mpi-energy2-extension/Heter_paper.tex | 30 +++++++----------- .../fig/power_consumption.pdf | Bin 32448 -> 42619 bytes 2 files changed, 12 insertions(+), 18 deletions(-) diff --git a/mpi-energy2-extension/Heter_paper.tex b/mpi-energy2-extension/Heter_paper.tex index 5a598e9..3fa9968 100644 --- a/mpi-energy2-extension/Heter_paper.tex +++ b/mpi-energy2-extension/Heter_paper.tex @@ -200,17 +200,14 @@ the number of FLOPS executed by the processor which may increase the execution time of the application running over that processor. Therefore, researchers use different optimization strategies to select the frequency that gives the best trade-off between the energy reduction and performance degradation ratio. In -\cite{Our_first_paper} and \cite{pdsec2015} , a frequency selecting algorithm +\cite{Our_first_paper} and \cite{pdsec2015}, a frequency selecting algorithm was proposed to reduce the energy consumption of message passing iterative applications running over homogeneous and heterogeneous clusters respectively. The results of the experiments showed significant energy consumption reductions. All the experimental results were conducted over the SimGrid -simulator \cite{SimGrid}, which offers easy tools to create homogeneous and -heterogeneous platforms and runs message passing parallel applications over -them. % -\AG{[\dots], which offers easy tools to describe homogeneous and heterogeneous - platforms, and to simulate the execution of message passing parallel - applications over them.}% +simulator \cite{SimGrid}, which offers easy tools to describe homogeneous and heterogeneous platforms, and to simulate the execution of message passing parallel +applications over them. + In this paper, a new frequency selecting algorithm, adapted to grid platforms composed of heterogeneous clusters, is presented. It is applied to the NAS parallel benchmarks and evaluated over a real testbed, the Grid'5000 platform @@ -234,6 +231,7 @@ NAS parallel benchmarks and executing them on the Grid'5000 testbed. It also evaluates the algorithm over multi-cores per node architectures and over three different power scenarios. Moreover, it shows the comparison results between the proposed method and an existing method. Finally, in Section~\ref{sec.concl} the paper ends with a summary and some future works. + \section{Related works} \label{sec.relwork} @@ -394,7 +392,7 @@ and $\Tcm[hj]$ is the communication time of processor $j$ in the cluster $h$ dur first iteration. The execution time for one iteration is equal to the sum of the maximum computation time for all nodes with the new scaling factors and the slowest communication time without slack time during one iteration. The latter is equal to the communication time of the slowest node in the slowest cluster $h$. -It means\AG[]{It means that\dots} only the communication time without any slack time is taken into account. +It means that 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. @@ -543,9 +541,10 @@ frequency scaling factors for a homogeneous and a heterogeneous cluster respecti Both methods selects the frequencies that gives the best trade-off between energy consumption reduction and performance for message passing iterative synchronous applications. In this work we -are interested in grids that are composed of heterogeneous clusters were the nodes have different characteristics such as dynamic power, static power, computation power, frequencies range, network latency and bandwidth. -Due to the -heterogeneity of the processors, a vector of scaling factors should be selected +are interested in grids that are composed of heterogeneous clusters were the nodes +have different characteristics such as dynamic power, static power, computation power, +frequencies range, network latency and bandwidth. +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 @@ -789,11 +788,7 @@ 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 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, -\AG[]{That's not a sentence.} -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, which results in bigger energy savings. +power of scaled down nodes are lower than the slowest node. 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, which results in bigger energy savings. \section{Experimental results} @@ -975,12 +970,11 @@ scenario. Moreover, most of the benchmarks running over the one site scenario th However, the execution times and the energy consumptions of EP and MG benchmarks, which have no or small communications, are not significantly affected in both scenarios, even when the number of nodes is doubled. On the -other hand, the communications\AG[]{the communication time?} of the rest of the benchmarks increases when +other hand, the communication times of the rest of the benchmarks increases when using long distance communications between two sites or increasing the number of computing nodes. - The energy saving percentage is computed as the ratio between the reduced energy consumption, Equation~\ref{eq:energy}, and the original energy consumption, Equation~\ref{eq:eorginal}, for all benchmarks as in Figure~\ref{fig:eng_s}. diff --git a/mpi-energy2-extension/fig/power_consumption.pdf b/mpi-energy2-extension/fig/power_consumption.pdf index 6405813d7cd56c12d2d5e1fd46310cc280503f4e..3e67d4672aeb7b5f02bdb8e6179efab9b9efbdfa 100644 GIT binary patch delta 22798 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