From 90c5d630943ca27e6ed19e347121d03ecaad5913 Mon Sep 17 00:00:00 2001 From: afanfakh Date: Tue, 10 May 2016 16:20:31 +0200 Subject: [PATCH 1/1] adding the ch3 --- CHAPITRE_03.tex | 1718 ++++++++++++++++- fig/ch3/Makefile | 12 + fig/ch3/commtasks.pdf | Bin 0 -> 12821 bytes fig/ch3/compare_EDP.pdf | Bin 0 -> 18711 bytes fig/ch3/dist-eps-converted-to.pdf | Bin 0 -> 21493 bytes fig/ch3/dist.eps | 949 +++++++++ fig/ch3/dist_mc-eps-converted-to.pdf | Bin 0 -> 7692 bytes fig/ch3/dist_mc.eps | 889 +++++++++ fig/ch3/dist_pow-eps-converted-to.pdf | Bin 0 -> 7789 bytes fig/ch3/dist_pow.eps | 906 +++++++++ fig/ch3/edp_dist-eps-converted-to.pdf | Bin 0 -> 13151 bytes fig/ch3/edp_dist.eps | 979 ++++++++++ fig/ch3/edp_eng-eps-converted-to.pdf | Bin 0 -> 15214 bytes fig/ch3/edp_eng.eps | 949 +++++++++ fig/ch3/edp_per-eps-converted-to.pdf | Bin 0 -> 13241 bytes fig/ch3/edp_per.eps | 897 +++++++++ fig/ch3/energy-eps-converted-to.pdf | Bin 0 -> 9472 bytes fig/ch3/energy.eps | 868 +++++++++ fig/ch3/eng_con-eps-converted-to.pdf | Bin 0 -> 8910 bytes fig/ch3/eng_con.eps | 961 +++++++++ .../eng_con_scenarios-eps-converted-to.pdf | Bin 0 -> 9314 bytes fig/ch3/eng_con_scenarios.eps | 967 ++++++++++ fig/ch3/eng_pow-eps-converted-to.pdf | Bin 0 -> 7951 bytes fig/ch3/eng_pow.eps | 932 +++++++++ fig/ch3/eng_s-eps-converted-to.pdf | Bin 0 -> 24410 bytes fig/ch3/eng_s.eps | 949 +++++++++ fig/ch3/eng_s_mc-eps-converted-to.pdf | Bin 0 -> 7889 bytes fig/ch3/eng_s_mc.eps | 889 +++++++++ fig/ch3/grid5000-2.pdf | Bin 0 -> 29146 bytes fig/ch3/grid5000.pdf | Bin 0 -> 62669 bytes fig/ch3/heter-eps-converted-to.pdf | Bin 0 -> 6838 bytes fig/ch3/heter.eps | 659 +++++++ fig/ch3/heter2-eps-converted-to.pdf | Bin 0 -> 7119 bytes fig/ch3/heter2.eps | 689 +++++++ fig/ch3/homo.pdf | Bin 0 -> 6975 bytes fig/ch3/init_freq.pdf | Bin 0 -> 71016 bytes fig/ch3/per_d-eps-converted-to.pdf | Bin 0 -> 12915 bytes fig/ch3/per_d.eps | 897 +++++++++ fig/ch3/per_d_mc-eps-converted-to.pdf | Bin 0 -> 7684 bytes fig/ch3/per_d_mc.eps | 845 ++++++++ fig/ch3/per_deg-eps-converted-to.pdf | Bin 0 -> 9333 bytes fig/ch3/per_deg.eps | 820 ++++++++ fig/ch3/per_pow-eps-converted-to.pdf | Bin 0 -> 7911 bytes fig/ch3/per_pow.eps | 828 ++++++++ fig/ch3/power_consumption.pdf | Bin 0 -> 42619 bytes fig/ch3/sen_comp.pdf | Bin 0 -> 17551 bytes fig/ch3/start_freq.pdf | Bin 0 -> 21938 bytes fig/ch3/three_scenarios.pdf | Bin 0 -> 14890 bytes fig/ch3/three_scenarios2.pdf | Bin 0 -> 14475 bytes fig/ch3/time-eps-converted-to.pdf | Bin 0 -> 8121 bytes fig/ch3/time.eps | 935 +++++++++ fig/ch3/time_scenarios-eps-converted-to.pdf | Bin 0 -> 8725 bytes fig/ch3/time_scenarios.eps | 937 +++++++++ my_reference.bib | 42 +- 54 files changed, 19515 insertions(+), 2 deletions(-) create mode 100644 fig/ch3/Makefile create mode 100644 fig/ch3/commtasks.pdf create mode 100644 fig/ch3/compare_EDP.pdf create mode 100644 fig/ch3/dist-eps-converted-to.pdf create mode 100644 fig/ch3/dist.eps create mode 100644 fig/ch3/dist_mc-eps-converted-to.pdf create mode 100644 fig/ch3/dist_mc.eps create mode 100644 fig/ch3/dist_pow-eps-converted-to.pdf create mode 100644 fig/ch3/dist_pow.eps create mode 100644 fig/ch3/edp_dist-eps-converted-to.pdf create mode 100644 fig/ch3/edp_dist.eps create mode 100644 fig/ch3/edp_eng-eps-converted-to.pdf create mode 100644 fig/ch3/edp_eng.eps create mode 100644 fig/ch3/edp_per-eps-converted-to.pdf create mode 100644 fig/ch3/edp_per.eps create mode 100644 fig/ch3/energy-eps-converted-to.pdf create mode 100644 fig/ch3/energy.eps create mode 100644 fig/ch3/eng_con-eps-converted-to.pdf create mode 100644 fig/ch3/eng_con.eps create mode 100644 fig/ch3/eng_con_scenarios-eps-converted-to.pdf create mode 100644 fig/ch3/eng_con_scenarios.eps create mode 100644 fig/ch3/eng_pow-eps-converted-to.pdf create mode 100644 fig/ch3/eng_pow.eps create mode 100644 fig/ch3/eng_s-eps-converted-to.pdf create mode 100644 fig/ch3/eng_s.eps create mode 100644 fig/ch3/eng_s_mc-eps-converted-to.pdf create mode 100644 fig/ch3/eng_s_mc.eps create mode 100644 fig/ch3/grid5000-2.pdf create mode 100644 fig/ch3/grid5000.pdf create mode 100644 fig/ch3/heter-eps-converted-to.pdf create mode 100644 fig/ch3/heter.eps create mode 100644 fig/ch3/heter2-eps-converted-to.pdf create mode 100644 fig/ch3/heter2.eps create mode 100644 fig/ch3/homo.pdf create mode 100644 fig/ch3/init_freq.pdf create mode 100644 fig/ch3/per_d-eps-converted-to.pdf create mode 100644 fig/ch3/per_d.eps create mode 100644 fig/ch3/per_d_mc-eps-converted-to.pdf create mode 100644 fig/ch3/per_d_mc.eps create mode 100644 fig/ch3/per_deg-eps-converted-to.pdf create mode 100644 fig/ch3/per_deg.eps create mode 100644 fig/ch3/per_pow-eps-converted-to.pdf create mode 100644 fig/ch3/per_pow.eps create mode 100644 fig/ch3/power_consumption.pdf create mode 100644 fig/ch3/sen_comp.pdf create mode 100644 fig/ch3/start_freq.pdf create mode 100644 fig/ch3/three_scenarios.pdf create mode 100644 fig/ch3/three_scenarios2.pdf create mode 100644 fig/ch3/time-eps-converted-to.pdf create mode 100644 fig/ch3/time.eps create mode 100644 fig/ch3/time_scenarios-eps-converted-to.pdf create mode 100644 fig/ch3/time_scenarios.eps diff --git a/CHAPITRE_03.tex b/CHAPITRE_03.tex index 82e7fd0..39eb9a8 100644 --- a/CHAPITRE_03.tex +++ b/CHAPITRE_03.tex @@ -1,8 +1,1724 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% %% -%% CHAPTER 06 %% +%% CHAPTER 03 %% %% %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \chapter{Energy Optimization of Heterogeneous Platforms} \label{ch3} +\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{\TcpOld}[1][]{\Xsub{T}{cpOld}_{#1}} +\newcommand{\Tnew}{\Xsub{T}{New}} +\newcommand{\Told}{\Xsub{T}{Old}} +\newcommand{\Pmax}[1][]{\Xsub{P}{max}_{\fxheight{#1}}} +\newcommand{\Pidle}[1][]{\Xsub{P}{idle}_{\fxheight{#1}}} + + +\renewcommand{\algorithmicdo}{\textbf{do}} +\renewcommand{\algorithmicwhile}{\textbf{while}} +\renewcommand{\algorithmicrequire}{\textbf{Require:}} +\renewcommand{\algorithmicensure}{\textbf{Ensure:}} +\renewcommand{\algorithmicend}{\textbf{end}} +\renewcommand{\algorithmicif}{\textbf{if}} +\renewcommand{\algorithmicthen}{\textbf{then}} + +\section{Introduction} +\label{ch3:intro} + + + Computing platforms are consuming more and more energy due to the increasing + number of nodes composing them. In the heterogeneous computing platform composed + of multiple computing nodes, each node is different in the computing power from + the others. Accordingly, the fast nodes have to waits to the slow ones to finish + their works. The resulting waiting times is called the idle times that are increased + proportionally to the increase in the heterogeneity between the computing nodes. + This leads to a big waste in the computing power and thus the energy consumed by the fast nodes. + To minimize the operating costs of these platforms many techniques have been used. + Dynamic voltage and frequency scaling (DVFS) is one of them. It reduces the frequency + of a CPU to lower its energy consumption. However, lowering the frequency of a CPU may + increase the execution time of an application running on that processor. Therefore, + the frequency that gives the best trade-off between the energy consumption and + the performance of an application must be selected. + + In this chapter, two new online frequency selecting algorithms for heterogeneous local + cluster (heterogeneous CPUs) and grid platform are presented. + They select the frequencies that tray to give the best + trade-off between energy saving and performance degradation, for each node + computing the synchronous message passing iterative application. These algorithms have a small + overhead and work without training or profiling. They use new energy models + for message passing iterative synchronous applications running on both the heterogeneous + local cluster and grid platform. The first proposed algorithm for a heterogeneous local + cluster is evaluated on the SimGrid simulator while running the NAS parallel + benchmarks class C. The experiments conducted over 8 heterogeneous nodes show that it reduces on + average the energy consumption by 29.8\% while limiting the performance degradation by 3.8\%. + The second proposed algorithm for a grid platform is evaluated on the Grid5000 testbed + platform while running the NAS parallel benchmarks class D. + Its experiments on 16 nodes, distributed on three clusters, show that it reduces on average the + energy consumption by 30\% while the performance is on average only degraded + by 3.2\%. + Finally, both the two algorithms are compared to an existing methods, the comparison + results show that they outperform the latter in term of energy and performance trade-off. + + +This chapter is organized as follows: Section~\ref{ch3:relwork} presents some +related works from other authors. Section~\ref{ch3:1} presents the performance and energy +models of synchronous message passing programs running over a heterogeneous local cluster. +It also describes the proposed frequencies selecting algorithm then the precision of the proposed algorithm is verified. +Section~\ref{ch3:2} presents the simulation results of applying the algorithm on the NAS parallel +benchmarks class C and executing them on a heterogeneous local cluster. It shows the results of running +three different power scenarios and comparing them. Moreover, it also shows the +comparison results between the proposed method and an existing method. +Section~\ref{ch3:3} shows the energy and performance models in addition to the frequencies +selecting algorithm of synchronous message passing programs running over a grid platform. +Section~\ref{ch3:4} presents the results of applying the algorithm on the +NAS parallel benchmarks class D 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{ch3:concl} the chapter ends with a summary. + +\section{Related works} +\label{ch3:relwork} + +DVFS is a technique used in modern processors to scale down both the voltage and +the frequency of the CPU while computing, in order to reduce the energy +consumption of the processor. DVFS is also allowed in GPUs to achieve the same +goal. Reducing the frequency of a processor lowers its number of FLOPS and may +degrade the performance of the application running on that processor, especially +if it is compute bound. Therefore selecting the appropriate frequency for a +processor to satisfy some objectives, while taking into account all the +constraints, is not a trivial operation. Many researchers used different +strategies to tackle this problem. Some of them developed online methods that +compute the new frequency while executing the application, such +as~\cite{ref64,ref67}. +Others used offline methods that may need to run the application and profile +it before selecting the new frequency, such +as~\cite{ref58,ref91}. +The methods could be heuristics, exact or brute force methods that satisfy +varied objectives such as energy reduction or performance. They also could be +adapted to the execution's environment and the type of the application such as +sequential, parallel or distributed architecture, homogeneous or heterogeneous +platform, synchronous or asynchronous application, \dots{} + +In this chapter, we are interested in reducing energy for message passing +iterative synchronous applications running over heterogeneous platforms. Some +works have already been done for such platforms and they can be classified into +two types of heterogeneous platforms: +\begin{itemize} +\item the platform is composed of homogeneous GPUs and homogeneous CPUs. +\item the platform is only composed of heterogeneous CPUs. +\end{itemize} + +For the first type of platform, the computing intensive parallel tasks are +executed on the GPUs and the rest are executed on the CPUs. Luley et +al.~\cite{ref68}, proposed a +heterogeneous cluster composed of Intel Xeon CPUs and NVIDIA GPUs. Their main +goal was to maximize the energy efficiency of the platform during computation by +maximizing the number of FLOPS per watt generated. +In~\cite{ref69}, Kai Ma et al. developed a scheduling algorithm that distributes +workloads proportional to +the computing power of the nodes which could be a GPU or a CPU. All the tasks +must be completed at the same time. In~\cite{ref70}, +Rong et al. showed that a heterogeneous (GPUs and CPUs) cluster that enables +DVFS gave better energy and performance efficiency than other clusters only +composed of CPUs. + +The work presented in this chapter concerns the second type of platform, with +heterogeneous CPUs. Many methods were conceived to reduce the energy +consumption of this type of platform. Naveen et +al.~\cite{ref71} developed a method that +minimizes the value of $\mathit{energy}\times \mathit{delay}^2$ (the delay is +the sum of slack times that happen during synchronous communications) by +dynamically assigning new frequencies to the CPUs of the heterogeneous cluster. +Lizhe et al.~\cite{ref72} proposed an +algorithm that divides the executed tasks into two types: the critical and non +critical tasks. The algorithm scales down the frequency of non critical tasks +proportionally to their slack and communication times while limiting the +performance degradation percentage to less than 10\%. +In~\cite{ref73}, they developed a +heterogeneous cluster composed of two types of Intel and AMD processors. They +use a gradient method to predict the impact of DVFS operations on performance. +In~\cite{ref74} and +\cite{ref75}, the best +frequencies for a specified heterogeneous cluster are selected offline using +some heuristic. Chen et +al.~\cite{ref76} used a greedy dynamic +programming approach to minimize the power consumption of heterogeneous servers +while respecting given time constraints. This approach had considerable +overhead. In contrast to the above described works, the work of this chapter presents the +following contributions: +\begin{enumerate} +\item two new energy and two performance models for message passing iterative + synchronous applications running over a heterogeneous local cluster and grid platform. + All the models take into account communication and slack times. The models can predict the + required energy and the execution time of the application. + +\item two new online frequencies selecting algorithms for heterogeneous + local cluster and grid platform. The algorithms have a very small overhead and do not need any + training or profiling. They use a new optimization function which + simultaneously maximizes the performance and minimizes the energy consumption + of a message passing iterative synchronous application. +\end{enumerate} + +\section[The energy optimization of heterogeneous cluster]{The energy optimization of parallel iterative applications running over local heterogeneous +cluster} +\label{ch3:1} + +\subsection{The execution time of message passing distributed iterative + applications on a heterogeneous local cluster} +\label{ch3:1:1} +In this section, we are interested in reducing the energy consumption of message +passing distributed iterative synchronous applications running over +heterogeneous local cluster. A heterogeneous local cluster is defined as a collection of +heterogeneous computing nodes interconnected via a high speed homogeneous +network. Therefore, each node has different characteristics such as computing +power (FLOPS), energy consumption, CPU's frequency range, \dots{} but they all +have the same network bandwidth and latency. + +\begin{figure}[h!] + \centering + \includegraphics[scale=0.8]{fig/ch3/commtasks} + \caption{Parallel tasks on a heterogeneous platform} + \label{fig:task-heter} +\end{figure} + +The overall execution time of a distributed iterative synchronous application +over a heterogeneous local cluster 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 nodes, 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:task-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. + +The frequency reduction process by applying DVFS operation 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}). +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{ref53}. 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 cluster each node has different characteristics, +especially different frequency gears, when applying DVFS operations on these +nodes, they may get different scaling factors represented by a scaling vector: +$(S_1, S_2,\dots, S_N)$ where $S_i$ is the scaling factor of processor $i$. To +be able to predict the execution time of message passing synchronous iterative +applications running over a heterogeneous local cluster, 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_heter}). +\begin{equation} + \label{eq:perf_heter} + \Tnew = \max_{i=1,2,\dots,N} ({\TcpOld[i]} \cdot S_{i}) + \min_{i=1,2,\dots,N} (\Tcm[i]) +\end{equation} + +where $\TcpOld[i]$ is the computation time of processor $i$ 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. 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_heter}) 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 +architectures presented in chapter \ref{ch2} section \ref{ch2:3}. 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 local cluster} +\label{ch3:1:2} +In the chapter \ref{ch2}, the dynamic and the static energy consumption of the individual +processor is computed in \ref{eq:Edyn_new} and \ref{eq:Estatic_new} respectively. Then, +the total energy consumption of the individual processor is the sum of these two metrics. +Therefore, the overall energy consumption for the parallel tasks over parallel cluster +is the summation of the individual energies consumed for all processors. + +In the considered heterogeneous platform, each processor $i$ may have +different dynamic and static powers, noted as $\Pd[i]$ and $\Ps[i]$ +respectively. Therefore, even if the distributed message passing iterative +application is load balanced, the computation time of each CPU $i$ noted +$\Tcp[i]$ 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 $i$ is noted as +$\Tcm[i]$ and could contain slack times when communicating with slower nodes, +see Figure~\ref{fig:task-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_new}), the static energy is computed as the sum of the execution time +of one iteration as in \ref{eq:perf_heter} multiplied by the static power of each processor. +The overall energy consumption of a message passing distributed application executed over a +heterogeneous cluster during one iteration is the summation of all dynamic and +static energies for each processor. It is computed as follows: +\begin{equation} + \label{eq:energy-heter} + E = \sum_{i=1}^{N} {(S_i^{-2} \cdot \Pd[i] \cdot \Tcp[i])} + + \sum_{i=1}^{N} (\Ps[i] \cdot (\max_{i=1,2,\dots,N} (\Tcp[i] \cdot S_{i}) + + { \min_{i=1,2,\dots,N} (\Tcm[i]) ))} +\end{equation} + +Reducing the frequencies of the processors according to the vector of scaling +factors $(S_1, S_2,\dots, S_N)$ may degrade the performance of the application +and thus, increase the static energy because the execution time is +increased~\cite{ref78}. The overall energy consumption +for the iterative application can be measured by measuring the energy +consumption for one iteration as in (\ref{eq:energy-heter}) multiplied by the number +of iterations of that application. + +\subsection{Optimization of both energy consumption and performance} +\label{ch3:1:3} +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 last chapter +~\ref{ch2}, we proposed a method that selects the optimal +frequency scaling factor for a homogeneous cluster 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 section, we +are interested in heterogeneous clusters 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. + +As described before, the relation between the energy consumption and the execution time for an +application is complex and nonlinear. Thus, to find the trade-off relation between the energy consumption in \ref{eq:energy-heter} and the performance in \ref{eq:perf_heter} of the iterative message passing applications, first we need to normalized both of them as follows: + + +\begin{equation} + \label{eq:enorm-heter} + \Enorm = \frac{\Ereduced}{\Eoriginal} + = \frac{ \sum_{i=1}^{N}{(S_i^{-2} \cdot \Pd[i] \cdot \Tcp[i])} + + \sum_{i=1}^{N} {(\Ps[i] \cdot \Tnew)}}{\sum_{i=1}^{N}{( \Pd[i] \cdot \Tcp[i])} + + \sum_{i=1}^{N} {(\Ps[i] \cdot \Told)}} +\end{equation} + + + +\begin{equation} + \label{eq:pnorm-heter} + \Pnorm = \frac{\Told}{\Tnew} + = \frac{\max_{i=1,2,\dots,N}{(\Tcp[i]+\Tcm[i])}} + { \max_{i=1,2,\dots,N} (\Tcp[i] \cdot S_{i}) + \min_{i=1,2,\dots,N} (\Tcm[i])} +\end{equation} + +Therefore, the vector of frequency scaling factors $S_1,S_2,\dots,S_N$ of the heterogeneous +cluster reduce both the energy and the execution time simultaneously. + +\begin{figure}[!t] + \centering + \includegraphics[width=.7\textwidth]{fig/ch3/heter} + \caption{The energy and performance relation in Heterogeneous cluster} + \label{fig:rel-heter} +\end{figure} + +Then, the objective function can be modeled in order to find the maximum +distance between the energy curve (\ref{eq:enorm-heter}) and the performance curve +(\ref{eq:pnorm-heter}) over all available sets of scaling factors of the heterogeneous +computing cluster. This represents the minimum energy consumption with minimum execution time (maximum +performance) at the same time, see Figure~\ref{fig:rel-heter}. Then the objective function has the following form: +\begin{equation} + \label{eq:max-heter} + \MaxDist = + \mathop{\max_{i=1,\dots F}}_{j=1,\dots,N} + (\overbrace{\Pnorm(S_{ij})}^{\text{Maximize}} - + \overbrace{\Enorm(S_{ij})}^{\text{Minimize}} ) +\end{equation} +where $N$ is the number of nodes and $F$ is the number of available frequencies +for each node. Then, the optimal set of scaling factors that satisfies +(\ref{eq:max-heter}) can be selected. + +\subsection[The scaling algorithm for heterogeneous cluster]{The scaling factors selection algorithm for heterogeneous cluster } +\label{ch3:1:4} + + +\begin{algorithm}[h!] + \begin{algorithmic}[1] + % \footnotesize + \Require ~ + %\begin{description} + \item[{$\Tcp[i]$}] array of all computation times for all nodes during one iteration and with highest frequency. + \item[{$\Tcm[i]$}] array of all communication times for all nodes during one iteration and with highest frequency. + \item[{$\Fmax[i]$}] array of the maximum frequencies for all nodes. + \item[{$\Pd[i]$}] array of the dynamic powers for all nodes. + \item[{$\Ps[i]$}] array of the static powers for all nodes. + \item[{$\Fdiff[i]$}] array of the differences between two successive frequencies for all nodes. + %\end{description} + \Ensure $\Sopt[1],\Sopt[2] \dots, \Sopt[N]$ is a vector of optimal scaling factors + + \State $\Scp[i] \gets \frac{\max_{i=1,2,\dots,N}(\Tcp[i])}{\Tcp[i]} $ + \State $F_{i} \gets \frac{\Fmax[i]}{\Scp[i]},~{i=1,2,\cdots,N}$ + \State Round the computed initial frequencies $F_i$ to the closest one available in each node. + \If{(not the first frequency)} + \State $F_i \gets F_i+\Fdiff[i],~i=1,\dots,N.$ + \EndIf + \State $\Told \gets \max_{i=1,\dots,N} (\Tcp[i]+\Tcm[i])$ + % \State $\Eoriginal \gets \sum_{i=1}^{N}{( \Pd[i] \cdot \Tcp[i])} +\sum_{i=1}^{N} {(\Ps[i] \cdot \Told)}$ + \State $\Eoriginal \gets \sum_{i=1}^{N}{( \Pd[i] \cdot \Tcp[i] + \Ps[i] \cdot \Told)}$ + \State $\Sopt[i] \gets 1,~i=1,\dots,N. $ + \State $\Dist \gets 0 $ + \While {(all nodes not reach their minimum frequency)} + \If{(not the last freq. \textbf{and} not the slowest node)} + \State $F_i \gets F_i - \Fdiff[i],~i=1,\dots,N.$ + \State $S_i \gets \frac{\Fmax[i]}{F_i},~i=1,\dots,N.$ + \EndIf + \State $\Tnew \gets \max_{i=1,2,\dots,N} ({\TcpOld[i]} \cdot S_{i}) + \min_{i=1,2,\dots,N} (\Tcm[i])$ +% \State $\Ereduced \gets \sum_{i=1}^{N}{(S_i^{-2} \cdot \Pd[i] \cdot \Tcp[i])} + \sum_{i=1}^{N} {(\Ps[i] \cdot \rlap{\Tnew)}} $ + \State $\Ereduced \gets \sum_{i=1}^{N} {(S_i^{-2} \cdot \Pd[i] \cdot \Tcp[i])} + + \sum_{i=1}^{N} (\Ps[i] \cdot (\max_{i=1,2,\dots,N} (\Tcp[i] \cdot S_{i}) + + { \min_{i=1,2,\dots,N} (\Tcm[i]) ))} $ + \State $\Pnorm \gets \frac{\Told}{\Tnew}$ + \State $\Enorm\gets \frac{\Ereduced}{\Eoriginal}$ + \If{$(\Pnorm - \Enorm > \Dist)$} + \State $\Sopt[i] \gets S_{i},~i=1,\dots,N. $ + \State $\Dist \gets \Pnorm - \Enorm$ + \EndIf + \EndWhile + \State Return $\Sopt[1],\Sopt[2],\dots,\Sopt[N]$ + \end{algorithmic} + \caption{Scaling factors selection algorithm for heterogeneous cluster} + \label{HSA} +\end{algorithm} + + + +\begin{algorithm}[h!] + \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 communication from each node. + \State Call Algorithm \ref{HSA}. + \State Compute the new frequencies from the returned optimal scaling factors. + \State Set the new frequencies to nodes. + \EndIf + \EndFor + \end{algorithmic} + \caption{DVFS algorithm of heterogeneous platform} + \label{dvfs-heter} +\end{algorithm} + + + +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 local cluster. 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-heter}). 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-heter} shows where and when the proposed +scaling algorithm is called in the iterative MPI program. + +\begin{figure}[!t] + \centering + \includegraphics[scale=0.75]{fig/ch3/start_freq} + \caption{Selecting the initial frequencies in heterogeneous cluster} + \label{fig:st_freq-cluster} +\end{figure} + +The nodes in a heterogeneous cluster 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:task-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[i] = \frac{\max_{i=1,2,\dots,N}(\Tcp[i])}{\Tcp[i]} +\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_{i} = \frac{\Fmax[i]}{\Scp[i]},~{i=1,2,\dots,N} +\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-cluster}, 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-cluster}. 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. The algorithm iterates on all remaining frequencies, from the higher +bound until all nodes reach their minimum frequencies, 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_heter}) 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-heter}). + +Figure~\ref{fig:rel-heter} illustrate the normalized performance and +consumed energy for an application running on a +heterogeneous cluster while increasing the scaling factors. It can +be noticed that in a homogeneous cluster, as in the figure \ref{fig:rel} (a), +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 cluster 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. +Finally, in a homogeneous platform the energy consumption is increased when the scaling factor is very high. +Indeed, the dynamic energy saved by reducing the frequency of the processor is compensated by the significant increase of the execution time and thus the increased of the static energy. On the other hand, in a heterogeneous platform this is not the case. + +\subsection{The evaluation of the proposed algorithm} +\label{ch3:1:5} +The precision of the proposed algorithm mainly depends on the execution time +prediction model defined in (\ref{eq:perf_heter}) and the energy model computed by +(\ref{eq:energy-heter}). The energy model is also significantly dependent on the +execution time model because the static energy is linearly related to the +execution time and the dynamic energy is related to the computation time. So, +all the works presented in this chapter are based on the execution time model. To +verify this model, the predicted execution time was compared to the real +execution time over SimGrid/SMPI simulator, +v3.10~\cite{ref66}, for all the NAS +parallel benchmarks NPB v3.3 \cite{ref65}, running class B on +8 or 9 nodes. The comparison showed that the proposed execution time model is +very precise, the maximum normalized difference between the predicted execution +time and the real execution time is equal to 0.03 for all the NAS benchmarks. + +Since the proposed algorithm is not an exact method, it does not test all the +possible solutions (vectors of scaling factors) in the search space. To prove +its efficiency, it was compared on small instances to a brute force search +algorithm that tests all the possible solutions. The brute force algorithm was +applied to different NAS benchmarks classes with different number of nodes. The +solutions returned by the brute force algorithm and the proposed algorithm were +identical and the proposed algorithm was on average 10 times faster than the +brute force algorithm. It has a small execution time: for a heterogeneous +cluster composed of four different types of nodes having the characteristics +presented in Table~\ref{table:platform-cluster}, it takes on average 0.04 \textit{ms} for 4 +nodes and 0.15 \textit{ms} on average for 144 nodes to compute the best scaling +factors vector. The algorithm complexity is $O(F\cdot N)$, where $F$ is the +maximum number of available frequencies, and $N$ is the number of computing +nodes. The algorithm needs from 12 to 20 iterations to select the best vector of +frequency scaling factors that gives the results of the next sections. + +\begin{table}[h!] + \caption{Heterogeneous nodes characteristics} + % title of Table + \centering + \begin{tabular}{|*{7}{r|}} + \hline + Node & Simulated & Max & Min & Diff. & Dynamic & Static \\ + type & GFLOPS & Freq. & Freq. & Freq. & power & power \\ + & & GHz & GHz & GHz & & \\ + \hline + 1 & 40 & 2.50 & 1.20 & 0.100 & 20 W & 4 W \\ + \hline + 2 & 50 & 2.66 & 1.60 & 0.133 & 25 W & 5 W \\ + \hline + 3 & 60 & 2.90 & 1.20 & 0.100 & 30 W & 6 W \\ + \hline + 4 & 70 & 3.40 & 1.60 & 0.133 & 35 W & 7 W \\ + \hline + \end{tabular} + \label{table:platform-cluster} +\end{table} + +\section{Experimental results over heterogeneous local cluster} +\label{ch3:2} +To evaluate the efficiency and the overall energy consumption reduction of +Algorithm~\ref{HSA}, it was applied to the NAS parallel benchmarks NPB v3.3 which +is composed of synchronous message passing applications. The +experiments were executed on the simulator SimGrid/SMPI which offers easy tools +to create a heterogeneous local cluster and run message passing applications over it. +The heterogeneous cluster that was used in the experiments, had one core per +node because just one process was executed per node. The heterogeneous cluster +was composed of four types of nodes. Each type of nodes had different +characteristics such as the maximum CPU frequency, the number of available +frequencies and the computational power, see Table~\ref{table:platform-cluster}. The +characteristics of these different types of nodes are inspired from the +specifications of real Intel processors. The heterogeneous cluster had up to +144 nodes and had nodes from the four types in equal proportions, for example if +a benchmark was executed on 8 nodes, 2 nodes from each type were used. Since the +constructors of CPUs do not specify the dynamic and the static power of their +CPUs, for each type of node they were chosen proportionally to its computing +power (FLOPS). In the initial heterogeneous cluster, while computing with +highest frequency, each node consumed an amount of power proportional to its +computing power (which corresponds to 80\% of its dynamic power and the +remaining 20\% to the static power), the same assumption was made in chapter \ref{ch2} and +\cite{ref3}. Finally, These +nodes were connected via an Ethernet network with 1 \textit{Gbit/s} bandwidth. + + +\subsection{The experimental results of the scaling algorithm } +\label{ch3:2:1} + +The proposed algorithm was applied to the seven parallel NAS benchmarks (EP, CG, +MG, FT, BT, LU and SP). The benchmarks were executed with class C while being +run on different number of nodes, ranging from 8 to 128 or 144 nodes depending +on the benchmark being executed. +Indeed, the benchmarks CG, MG, LU, EP and FT had to be executed on 1, +2, 4, 8, 16, 32, 64, or 128 nodes. The other benchmarks such as BT and SP had +to be executed on 1, 4, 9, 16, 36, 64, or 144 nodes. + + + + \begin{table}[h!] + \caption{Running NAS benchmarks on 8 and 9 nodes } + % title of Table + \centering + \begin{tabular}{|*{7}{r|}} + \hline + \hspace{-2.2084pt}% + Program & Execution & Energy & Energy & Performance & Distance \\ + name & time/s & consumption/J & saving\% & degradation\% & \\ + \hline + CG & 36.11 & 3263.49 & 31.25 & 7.12 & 24.13 \\ + \hline + MG & 8.99 & 953.39 & 33.78 & 6.41 & 27.37 \\ + \hline + EP & 40.39 & 5652.81 & 27.04 & 0.49 & 26.55 \\ + \hline + LU & 218.79 & 36149.77 & 28.23 & 0.01 & 28.22 \\ + \hline + BT & 166.89 & 23207.42 & 32.32 & 7.89 & 24.43 \\ + \hline + SP & 104.73 & 18414.62 & 24.73 & 2.78 & 21.95 \\ + \hline + FT & 51.10 & 4913.26 & 31.02 & 2.54 & 28.48 \\ + \hline + \end{tabular} + \label{table:res_8n} + \end{table} + + \medskip + \begin{table}[h!] + \caption{Running NAS benchmarks on 16 nodes } + % title of Table + \centering + \begin{tabular}{|*{7}{r|}} + \hline + \hspace{-2.2084pt}% + Program & Execution & Energy & Energy & Performance & Distance \\ + name & time/s & consumption/J & saving\% & degradation\% & \\ + \hline + CG & 31.74 & 4373.90 & 26.29 & 9.57 & 16.72 \\ + \hline + MG & 5.71 & 1076.19 & 32.49 & 6.05 & 26.44 \\ + \hline + EP & 20.11 & 5638.49 & 26.85 & 0.56 & 26.29 \\ + \hline + LU & 144.13 & 42529.06 & 28.80 & 6.56 & 22.24 \\ + \hline + BT & 97.29 & 22813.86 & 34.95 & 5.80 & 29.15 \\ + \hline + SP & 66.49 & 20821.67 & 22.49 & 3.82 & 18.67 \\ + \hline + FT & 37.01 & 5505.60 & 31.59 & 6.48 & 25.11 \\ + \hline + \end{tabular} + \label{table:res_16n} + \end{table} + + \medskip + \begin{table}[h!] + \caption{Running NAS benchmarks on 32 and 36 nodes } + % title of Table + \centering + \begin{tabular}{|*{7}{r|}} + \hline + \hspace{-2.2084pt}% + Program & Execution & Energy & Energy & Performance & Distance \\ + name & time/s & consumption/J & saving\% & degradation\% & \\ + \hline + CG & 32.35 & 6704.21 & 16.15 & 5.30 & 10.85 \\ + \hline + MG & 4.30 & 1355.58 & 28.93 & 8.85 & 20.08 \\ + \hline + EP & 9.96 & 5519.68 & 26.98 & 0.02 & 26.96 \\ + \hline + LU & 99.93 & 67463.43 & 23.60 & 2.45 & 21.15 \\ + \hline + BT & 48.61 & 23796.97 & 34.62 & 5.83 & 28.79 \\ + \hline + SP & 46.01 & 27007.43 & 22.72 & 3.45 & 19.27 \\ + \hline + FT & 28.06 & 7142.69 & 23.09 & 2.90 & 20.19 \\ + \hline + \end{tabular} + \label{table:res_32n} + \end{table} + + \medskip + \begin{table}[h!] + \caption{Running NAS benchmarks on 64 nodes } + % title of Table + \centering + \begin{tabular}{|*{7}{r|}} + \hline + \hspace{-2.2084pt}% + Program & Execution & Energy & Energy & Performance & Distance \\ + name & time/s & consumption/J & saving\% & degradation\% & \\ + \hline + CG & 46.65 & 17521.83 & 8.13 & 1.68 & 6.45 \\ + \hline + MG & 3.27 & 1534.70 & 29.27 & 14.35 & 14.92 \\ + \hline + EP & 5.05 & 5471.11 & 27.12 & 3.11 & 24.01 \\ + \hline + LU & 73.92 & 101339.16 & 21.96 & 3.67 & 18.29 \\ + \hline + BT & 39.99 & 27166.71 & 32.02 & 12.28 & 19.74 \\ + \hline + SP & 52.00 & 49099.28 & 24.84 & 0.03 & 24.81 \\ + \hline + FT & 25.97 & 10416.82 & 20.15 & 4.87 & 15.28 \\ + \hline + \end{tabular} + \label{table:res_64n} + \end{table} + + \medskip \begin{table}[h!] + \caption{Running NAS benchmarks on 128 and 144 nodes } + % title of Table + \centering + \begin{tabular}{|*{7}{r|}} + \hline + \hspace{-2.2084pt}% + Program & Execution & Energy & Energy & Performance & Distance \\ + name & time/s & consumption/J & saving\% & degradation\% & \\ + \hline + CG & 56.92 & 41163.36 & 4.00 & 1.10 & 2.90 \\ + \hline + MG & 3.55 & 2843.33 & 18.77 & 10.38 & 8.39 \\ + \hline + EP & 2.67 & 5669.66 & 27.09 & 0.03 & 27.06 \\ + \hline + LU & 51.23 & 144471.90 & 16.67 & 2.36 & 14.31 \\ + \hline + BT & 37.96 & 44243.82 & 23.18 & 1.28 & 21.90 \\ + \hline + SP & 64.53 & 115409.71 & 26.72 & 0.05 & 26.67 \\ + \hline + FT & 25.51 & 18808.72 & 12.85 & 2.84 & 10.01 \\ + \hline + \end{tabular} + \label{table:res_128n} +\end{table} + +\begin{figure}[h!] + \centering + \centering + \includegraphics[width=.7\textwidth]{fig/ch3/energy}\\~ ~ ~ ~ ~(a) \\ + + \includegraphics[width=.7\textwidth]{fig/ch3/per_deg}\\~ ~ ~ ~ ~(b) + \caption{NAS benchmarks running with a different number of nodes (a) the energy saving and + (b) the performance degradation } + \label{fig:res} +\end{figure} + +The overall energy consumption was computed for each instance according to the +energy consumption model (\ref{eq:energy-heter}), with and without applying the +algorithm. The execution time was also measured for all these experiments. Then, +the energy saving and performance degradation percentages were computed for each +instance. The results are presented in Tables +\ref{table:res_8n}, \ref{table:res_16n}, \ref{table:res_32n}, +\ref{table:res_64n} and \ref{table:res_128n}. All these results are the average +values from many experiments for energy savings and performance degradation. +The tables show the experimental results for running the NAS parallel benchmarks +on different numbers of nodes. The experiments show that the algorithm +significantly reduces the energy consumption (up to 34\%) and tries to +limit the performance degradation. They also show that the energy saving +percentage decreases when the number of computing nodes increases. This +reduction is due to the increase of the communication times compared to the +execution times when the benchmarks are run over a higher number of nodes. +Indeed, the benchmarks with the same class, C, are executed on different numbers +of nodes, so the computation required for each iteration is divided by the +number of computing nodes. On the other hand, more communications are required +when increasing the number of nodes so the static energy increases linearly +according to the communication time and the dynamic power is less relevant in +the overall energy consumption. Therefore, reducing the frequency with +Algorithm~\ref{HSA} is less effective in reducing the overall energy savings. It +can also be noticed that for the benchmarks EP and SP that contain little or no +communications, the energy savings are not significantly affected by the high +number of nodes. No experiments were conducted using bigger classes than D, +because they require a lot of memory (more than 64 \textit{CB}) when being executed +by the simulator on one machine. The maximum distance between the normalized +energy curve and the normalized performance for each instance is also shown in +the result tables. It decrease in the same way as the energy saving percentage. +The tables also show that the performance degradation percentage is not +significantly increased when the number of computing nodes is increased because +the computation times are small when compared to the communication times. + +Figure~\ref{fig:res} (a) and (b) present the energy saving and +performance degradation respectively for all the benchmarks according to the +number of used nodes. As shown in the first plot, the energy saving percentages +of the benchmarks MG, LU, BT and FT decrease linearly when the number of nodes +increase. While for the EP and SP benchmarks, the energy saving percentage is +not affected by the increase of the number of computing nodes, because in these +benchmarks there are little or no communications. Finally, the energy saving of +the CG benchmark significantly decreases when the number of nodes increase +because this benchmark has more communications than the others. The second plot +shows that the performance degradation percentages of most of the benchmarks +decrease when they run on a big number of nodes because they spend more time +communicating than computing, thus, scaling down the frequencies of some nodes +has less effect on the performance. + +\subsection{The results for different power consumption scenarios} +\label{ch3:2:2} + +The results of the previous section were obtained while using processors that +consume during computation an overall power which is 80\% composed of +dynamic power and of 20\% of static power. In this section, these ratios +are changed and two new power scenarios are considered in order to evaluate how +the proposed algorithm adapts itself according to the static and dynamic power +values. The two new power scenarios are the following: + +\begin{itemize} +\item 70\% of dynamic power and 30\% of static power +\item 90\% of dynamic power and 10\% of static power +\end{itemize} + +The NAS parallel benchmarks were executed again over processors that follow the +new power scenarios. The class C of each benchmark was run over 8 or 9 nodes +and the results are presented in Tables~\ref{table:res_s1} and +\ref{table:res_s2}. These tables show that the energy saving percentage of the +70\%-30\% scenario is smaller for all benchmarks compared to the +energy saving of the 90\%-10\% scenario. Indeed, in the latter +more dynamic power is consumed when nodes are running on their maximum +frequencies, thus, scaling down the frequency of the nodes results in higher +energy savings than in the 70\%-30\% scenario. On the other hand, +the performance degradation percentage is smaller in the 70\%-30\% +scenario compared to the 90\%-\%10 scenario. This is due to the +higher static power percentage in the first scenario which makes it more +relevant in the overall consumed energy. Indeed, the static energy is related +to the execution time and if the performance is degraded the amount of consumed +static energy directly increases. Therefore, the proposed algorithm does not +really significantly scale down much the frequencies of the nodes in order to +limit the increase of the execution time and thus limiting the effect of the +consumed static energy. + +Both new power scenarios are compared to the old one in +Figure~\ref{fig:powers-heter} (a). It shows the average of the performance degradation, +the energy saving and the distances for all NAS benchmarks of class C running on +8 or 9 nodes. The comparison shows that the energy saving ratio is proportional +to the dynamic power ratio: it is increased when applying the +90\%-10\% scenario because at maximum frequency the dynamic energy +is the most relevant in the overall consumed energy and can be reduced by +lowering the frequency of some processors. On the other hand, the energy saving +decreases when the 70\%-30\% scenario is used because the dynamic +energy is less relevant in the overall consumed energy and lowering the +frequency does not return big energy savings. Moreover, the average of the +performance degradation is decreased when using a higher ratio for static power +(e.g. 70\%-30\% scenario and 80\%-20\% scenario). Since the proposed +algorithm optimizes the energy consumption when +using a higher ratio for dynamic power the algorithm selects bigger frequency +scaling factors that result in more energy saving but less performance, for +example see Figure~\ref{fig:powers-heter} (b). The opposite happens when using a +higher ratio for static power, the algorithm proportionally selects smaller +scaling values which result in less energy saving but also less performance +degradation. + +\begin{table}[!t] + \caption{The results of the 70\%-30\% power scenario} + % title of Table + \centering + \begin{tabular}{|*{6}{r|}} + \hline + Program & Energy & Energy & Performance & Distance \\ + name & consumption/J & saving\% & degradation\% & \\ + \hline + CG & 4144.21 & 22.42 & 7.72 & 14.70 \\ + \hline + MG & 1133.23 & 24.50 & 5.34 & 19.16 \\ + \hline + EP & 6170.30 & 16.19 & 0.02 & 16.17 \\ + \hline + LU & 39477.28 & 20.43 & 0.07 & 20.36 \\ + \hline + BT & 26169.55 & 25.34 & 6.62 & 18.71 \\ + \hline + SP & 19620.09 & 19.32 & 3.66 & 15.66 \\ + \hline + FT & 6094.07 & 23.17 & 0.36 & 22.81 \\ + \hline + \end{tabular} + \label{table:res_s1} +\end{table} + +\begin{table}[!t] + \caption{The results of the 90\%-10\% power scenario} + % title of Table + \centering + \begin{tabular}{|*{6}{r|}} + \hline + Program & Energy & Energy & Performance & Distance \\ + name & consumption/J & saving\% & degradation\% & \\ + \hline + CG & 2812.38 & 36.36 & 6.80 & 29.56 \\ + \hline + MG & 825.43 & 38.35 & 6.41 & 31.94 \\ + \hline + EP & 5281.62 & 35.02 & 2.68 & 32.34 \\ + \hline + LU & 31611.28 & 39.15 & 3.51 & 35.64 \\ + \hline + BT & 21296.46 & 36.70 & 6.60 & 30.10 \\ + \hline + SP & 15183.42 & 35.19 & 11.76 & 23.43 \\ + \hline + FT & 3856.54 & 40.80 & 5.67 & 35.13 \\ + \hline + \end{tabular} + \label{table:res_s2} +\end{table} + +\begin{table}[!t] + \caption{Comparing the proposed algorithm} + \centering + \begin{tabular}{|*{7}{r|}} + \hline + Program & \multicolumn{2}{c|}{Energy saving \%} + & \multicolumn{2}{c|}{Perf. degradation \%} + & \multicolumn{2}{c|}{Distance} \\ + \cline{2-7} + name & EDP & MaxDist & EDP & MaxDist & EDP & MaxDist \\ + \hline + CG & 27.58 & 31.25 & 5.82 & 7.12 & 21.76 & 24.13 \\ + \hline + MG & 29.49 & 33.78 & 3.74 & 6.41 & 25.75 & 27.37 \\ + \hline + LU & 19.55 & 28.33 & 0.00 & 0.01 & 19.55 & 28.22 \\ + \hline + EP & 28.40 & 27.04 & 4.29 & 0.49 & 24.11 & 26.55 \\ + \hline + BT & 27.68 & 32.32 & 6.45 & 7.87 & 21.23 & 24.43 \\ + \hline + SP & 20.52 & 24.73 & 5.21 & 2.78 & 15.31 & 21.95 \\ + \hline + FT & 27.03 & 31.02 & 2.75 & 2.54 & 24.28 & 28.48 \\ + \hline + \end{tabular} + \label{table:compare_EDP} +\end{table} + +\begin{figure}[h!] + \centering + + \includegraphics[width=.75\textwidth]{fig/ch3/sen_comp}\\~ ~ ~ ~ ~ (a)\\ + + \includegraphics[width=.75\textwidth]{fig/ch3/three_scenarios}\\~ ~ ~ ~ ~ (b) + + \caption{(a) Comparison the results of the three power scenarios and + (b) Comparison the selected frequency scaling factors of MG benchmark class C running on 8 nodes} + \label{fig:powers-heter} +\end{figure} + +\begin{figure}[h!] + \centering + \includegraphics[scale=0.85]{fig/ch3/compare_EDP.pdf} + \caption{Trade-off comparison for NAS benchmarks class C} + \label{fig:compare_EDP} +\end{figure} + + +\subsection{The comparison of the proposed scaling algorithm } +\label{ch3:2:3} +In this section, the scaling factors selection algorithm, called MaxDist, is +compared to Spiliopoulos et al. algorithm +\cite{ref67}, called EDP. They developed a +green governor that regularly applies an online frequency selecting algorithm to +reduce the energy consumed by a multicore architecture without degrading much +its performance. The algorithm selects the frequencies that minimize the energy +and delay products, $\mathit{EDP}=\mathit{energy}\times \mathit{delay}$ using +the predicted overall energy consumption and execution time delay for each +frequency. To fairly compare both algorithms, the same energy and execution +time models, equations (\ref{eq:energy-heter}) and (\ref{eq:perf_heter}), were used for both +algorithms to predict the energy consumption and the execution times. Also +Spiliopoulos et al. algorithm was adapted to start the search from the initial +frequencies computed using the equation (\ref{eq:Fint}). The resulting algorithm +is an exhaustive search algorithm that minimizes the EDP and has the initial +frequencies values as an upper bound. + +Both algorithms were applied to the parallel NAS benchmarks to compare their +efficiency. Table~\ref{table:compare_EDP} presents the results of comparing the +execution times and the energy consumption for both versions of the NAS +benchmarks while running the class C of each benchmark over 8 or 9 heterogeneous +nodes. The results show that our algorithm provides better energy savings than +Spiliopoulos et al. algorithm, on average it results in 29.76\% energy +saving while their algorithm returns just 25.75\%. The average of +performance degradation percentage is approximately the same for both +algorithms, about 4\%. + +For all benchmarks, our algorithm outperforms Spiliopoulos et al. algorithm in +terms of energy and performance trade-off, see Figure~\ref{fig:compare_EDP}, +because it maximizes the distance between the energy saving and the performance +degradation values while giving the same weight for both metrics. + +\section[The energy optimization of grid]{The energy optimization of parallel iterative applications running over grid} +\label{ch3:3} + +\subsection{The energy and performance models of grid platform} +\label{ch3:3:1} +In this section, 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 a high speed network. Therefore, each cluster has different characteristics such as computing power (FLOPS), energy consumption, CPU's frequency range, network bandwidth and latency. + +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-grid}). +% +\begin{equation} + \label{eq:perf-grid} + \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 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 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-grid}) multiplied by the +number of iterations of that application. + + +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:task-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{equation} + \label{eq:energy-grid} + 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{equation} + + +To optimize both of the energy model \ref{eq:energy-grid} and the performance model\ref{eq:perf-grid}, +they must normalizes respectively as in \ref{eq:enorm-heter} and \ref{eq:pnorm-heter}. +While the original energy consumption is the consumed energy with +maximum frequency for all nodes computes as follows: + +\begin{equation} + \label{eq:eorginal-grid} + \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} + +By the same way, the old execution time with maximum frequency for all nodes computes as follows: + +\begin{equation} + \label{eq:told-grid} + \Told = \mathop{\max_{i=1,2,\dots,N}}_{j=1,2,\dots,M} (\Tcp[ij]+\Tcm[ij]) +\end{equation} +Therefore, the objective function can be modeled in order to find the maximum +distance between the normalized energy curve and the normalized performance curve +over all available sets of scaling factors as follows: + + \begin{equation} + \label{eq:max-grid} + \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-grid}) can be selected. + +\subsection{The scaling factors selection algorithm for a grid } +\label{ch3:3:2} + +\begin{algorithm} +\setstretch{1} + \begin{algorithmic}[1] + % \footnotesize + + \Require ~ + + \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. + + \Ensure $\Sopt[11],\Sopt[12] \dots, \Sopt[NM_i]$, a vector of scaling factors that gives the optimal trade-off between energy consumption and execution time + + \State $\Scp[ij] \gets \frac{ \mathop{\max\limits_{i=1,\dots N}}\limits_{j=1,\dots,M}(\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 \mathop{\max\limits_{i=1,2,\dots,N}}\limits_{j=1,2,\dots,M} (\Tcp[ij]+\Tcm[ij]) $ + \State $\Eoriginal \gets \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) $ + \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 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 \mathop{\max\limits_{i=1,\dots N}}\limits_{j=1,\dots,M}({\TcpOld[ij]} + \cdot S_{ij}) +\mathop{\min\limits_{j=1,\dots,M}} (\Tcm[hj]) $. + \State $\Ereduced \gets \sum\limits_{i=1}^{N} \sum\limits_{i=1}^{M} {(S_{ij}^{-2} \cdot \Pd[ij] + \cdot \Tcp[ij])} + \sum\limits_{i=1}^{N} \sum\limits_{j=1}^{M} (\Ps[ij] \cdot + (\mathop{\max\limits_{i=1,\dots N}}\limits_{j=1,\dots,M}({\Tcp[ij]} \cdot S_{ij}) + +\mathop{\min\limits_{j=1,\dots M}} (\Tcm[hj]) ))$ + \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 for grid} + \label{HSA-grid} +\end{algorithm} + +\begin{figure}[!t] + \centering + \includegraphics[scale=0.7]{fig/ch3/init_freq} + \caption{Selecting the initial frequencies in grid} + \label{fig:st_freq-grid} +\end{figure} + +\begin{figure}[!t] + \centering + \includegraphics[width=.7\textwidth]{fig/ch3/heter2} + \caption{The energy and performance relation in grid} + \label{fig:rel-grid} +\end{figure} + + +In this section, the scaling factors selection algorithm for a grid, Algorithm~\ref{HSA-grid}, +is presented. It selects the vector of the frequency +scaling factors 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 grid that satisfies the objective function +(\ref{eq:max-grid}). +It has the same principles and specifications of the frequencies selection algorithm of the heterogeneous +local cluster \ref{HSA}. + +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-grid} + \Scp[ij] = \frac{ \mathop{\max\limits_{i=1,\dots N}}\limits_{j=1,\dots,M}(\Tcp[ij])} {\Tcp[ij]} +\end{equation} +Using the initial frequency scaling factors computed in (\ref{eq:Scp-grid}), 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-grid} + F_{ij} = \frac{\Fmax[ij]}{\Scp[ij]},~{i=1,2,\dots,N},~{j=1,\dots,M} +\end{equation} +Figure \ref{fig:st_freq-grid} shows the selected initial frequencies for a grid composed of three clusters. +In contrast to algorithm \ref{HSA}, algorithm \ref{HSA-grid} replaces the computed initial frequency for a node by the nearest available frequency if not available in the gears of +that node. +The frequency scaling algorithm of the grid stops its iteration if it reaches to lower bound, which is the computed distance between the energy and performance at this frequency if it is less than zero. +A negative distance means that the performance degradation ratio is higher than the energy saving ratio as in figure \ref{fig:rel-grid}. +In this situation, the algorithm must stop the downward search because it has reached the lower bound and it is useless to test the lower frequencies. Indeed, they will all give worse distances. +Therefore, the algorithm iterates on all remaining frequencies, from the higher +bound until all nodes reach their minimum frequencies or their lower bounds, to compute the overall +energy consumption and performance and selects the optimal vector of the frequency scaling +factors. The DVFS algorithm~\ref{dvfs-heter} is also used to call the algorithm \ref{HSA-grid} in the MPI +program executed over grid platform. + +\section{Experimental results over Grid5000 platform} +\label{ch3:4} + +In this section, real experiments were conducted over the Grid'5000 platform. +Grid'5000~\cite{ref21} is a large-scale testbed that consists of ten sites distributed all over metropolitan France and Luxembourg. These sites are: Grenoble, Lille, Luxembourg, Lyon, Nancy, Reims, Rennes , Sophia, Toulouse, Bordeaux. Figure \ref{fig:grid5000-dis} shows the geographical distribution of grid'5000 sites over France and Luxembourg. All the sites are connected together via a special long distance network called RENATER, which is abbreviation of the French +National Telecommunication Network for Technology. Each site in the grid is +composed of a few heterogeneous computing clusters and each cluster contains +many homogeneous nodes. In total, Grid'5000 has about one thousand heterogeneous nodes and eight thousand cores. In each site, the clusters and their nodes +are connected via high speed local area networks. Two types of local networks +are used, Ethernet or Infiniband networks, which have different characteristics +in terms of bandwidth and latency. +Grid'5000 is dedicated as a test-bed for grid computing and thus users can book the required nodes from different sites. +It also gives the opportunity to the users to deploy their configured image of the operating system over the reserved nodes. +Indeed, many software tools are available for users in order to control and manage the reservation and deployment processes from their local machines. For example, OAR \cite{ref22} is a batch scheduler that is used to manage the heterogeneous resources of the grid'5000. + +\begin{figure}[h!] +\centering +\includegraphics[scale=1]{fig/ch3/grid5000.pdf} +\caption{Grid5000's sites distribution in France and Luxembourg} +\label{fig:grid5000-dis} +\end{figure} + + + Moreover, the Grid'5000 testbed provides at some sites a power measurement tool to capture +the power consumption for each node in those sites. The measured power is the overall consumed power by all the components of a node at a given instant, such as CPU, hard drive, main-board, memory, \dots{} For more details refer to \cite{ref79}. +In order to correctly measure the CPU power of one core in a node $j$, + firstly, the power consumed by the node while being idle at instant $y$, noted as $\Pidle[jy]$, was measured. Then, the power was measured while running a single thread benchmark with no communication (no idle time) over the same node with its CPU scaled to the maximum available frequency. The latter power measured at time $x$ with maximum frequency for one core of node $j$ is noted $\Pmax[jx]$. The difference between the two measured power consumptions represents the +dynamic power consumption of that core with the maximum frequency, see Figure~\ref{fig:power_cons}. + + +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} (\Pmax[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 maximum 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 maximum powers vector and the minimum measured value in the idle powers vector. + +On the other hand, the static power consumption by one core is a part of the measured idle power consumption of the node. Since in Grid'5000 there is no way to measure precisely the consumed static power and same as in sections \ref{ch3:2} and \ref{ch2:6} it was assumed that the static power represents a ratio of the dynamic power, the value of the static power is assumed as 20\% of dynamic power consumption of the core. + +In the experiments presented in the following sections, two sites of Grid'5000 were used, Lyon and Nancy sites. These two sites have in total seven different clusters as shown on Figure~\ref{fig:grid5000}. + +Four clusters from the two sites were selected in the experiments: one cluster from +Lyon's site, Taurus, and three clusters from Nancy's site, Graphene, +Griffon and Graphite. Each one of these clusters has homogeneous nodes inside, while nodes from different clusters are heterogeneous in many aspects such as: computing power, power consumption, available +frequency ranges and local network features: the bandwidth and the latency. Table~\ref{table:grid5000-1} shows +the detailed characteristics of these four clusters. Moreover, the dynamic powers were computed using Equation~\ref{eq:pdyn} for all the nodes in the +selected clusters and are presented in Table~\ref{table:grid5000-1}. + + +\begin{figure}[!t] + \centering + \includegraphics[scale=1.4]{fig/ch3/grid5000-2} + \caption{The selected two sites of Grid'5000} + \label{fig:grid5000} +\end{figure} +\begin{figure}[!t] + \centering + \includegraphics[scale=0.8]{fig/ch3/power_consumption.pdf} + \caption{The power consumption by one core from the Taurus cluster} + \label{fig:power_cons} +\end{figure} + + +The energy model and the scaling factors selection algorithm were applied to the NAS parallel benchmarks v3.3 \cite{ref65} and evaluated over Grid'5000. +The benchmark suite contains seven applications: CG, MG, EP, LU, BT, SP and FT. These applications have different computations and communications ratios and strategies which make them good testbed applications to evaluate the proposed algorithm and energy model. +The benchmarks have seven different classes, S, W, A, B, C, D and E, that represent the size of the problem that the method solves. In this work, class D was used for all benchmarks in all the experiments presented in the next sections. + + + +\begin{table}[!t] + \caption{CPUs characteristics of the selected clusters} + % title of Table + \centering + \begin{tabular}{|*{7}{c|}} + \hline + & & Max & Min & Diff. & & \\ + Cluster & CPU & Freq. & Freq. & Freq. & Cores & Dynamic power \\ + Name & model & GHz & GHz & GHz & per CPU & of one core \\ + \hline + & Intel & & & & & \\ + Taurus & Xeon & 2.3 & 1.2 & 0.1 & 6 & \np[W]{35} \\ + & E5-2630 & & & & & \\ + \hline + & Intel & & & & & \\ + Graphene & Xeon & 2.53 & 1.2 & 0.133 & 4 & \np[W]{23} \\ + & X3440 & & & & & \\ + \hline + & Intel & & & & & \\ + Griffon & Xeon & 2.5 & 2 & 0.5 & 4 & \np[W]{46} \\ + & L5420 & & & & & \\ + \hline + & Intel & & & & & \\ + Graphite & Xeon & 2 & 1.2 & 0.1 & 8 & \np[W]{35} \\ + & E5-2650 & & & & & \\ + \hline + \end{tabular} + \label{table:grid5000-1} +\end{table} + + + +\subsection{The experimental results of the scaling algorithm of Grid} +\label{ch3:4:1} +In this section, the results of applying the scaling factors selection algorithm \ref{HSA} +to NAS parallel benchmarks are presented. + +As mentioned previously, the experiments +were conducted over two sites of Grid'5000, Lyon and Nancy sites. +Two scenarios were considered while selecting the clusters from these two sites : +\begin{itemize} +\item In the first scenario, nodes from two sites and three heterogeneous clusters were selected. The two sites are connected + via a long distance network. +\item In the second scenario nodes from three clusters located in one site, Nancy site, were selected. +\end{itemize} + +The main reason +for using these two scenarios is to evaluate the influence of long distance communications (higher latency) on the performance of the +scaling factors selection algorithm. Indeed, in the first scenario the computations to communications ratio +is very low due to the higher communication times which reduce the effect of DVFS operations. + +The NAS parallel benchmarks are executed over +16 and 32 nodes for each scenario. The number of participating computing nodes from each cluster +is different because all the selected clusters do not have the same available number of nodes and all benchmarks do not require the same number of computing nodes. +Table~\ref{tab:sc} shows the number of nodes used from each cluster for each scenario. + +\begin{table}[h] + +\caption{The different clusters scenarios} +\centering +\begin{tabular}{|*{4}{c|}} +\hline +\multirow{2}{*}{Scenario name} & \multicolumn{3}{c|} {The participating clusters} \\ \cline{2-4} + & Cluster & Site & Nodes per cluster \\ +\hline +\multirow{3}{*}{Two sites / 16 nodes} & Taurus & Lyon & 5 \\ \cline{2-4} + & Graphene & Nancy & 5 \\ \cline{2-4} + & Griffon & Nancy & 6 \\ +\hline +\multirow{3}{*}{Tow sites / 32 nodes} & Taurus & Lyon & 10 \\ \cline{2-4} + & Graphene & Nancy & 10 \\ \cline{2-4} + & Griffon &Nancy & 12 \\ +\hline +\multirow{3}{*}{One site / 16 nodes} & Graphite & Nancy & 4 \\ \cline{2-4} + & Graphene & Nancy & 6 \\ \cline{2-4} + & Griffon & Nancy & 6 \\ +\hline +\multirow{3}{*}{One site / 32 nodes} & Graphite & Nancy & 4 \\ \cline{2-4} + & Graphene & Nancy & 14 \\ \cline{2-4} + & Griffon & Nancy & 14 \\ +\hline +\end{tabular} + \label{tab:sc} +\end{table} + + +The NAS parallel benchmarks are executed over these two platforms + with different number of nodes, as in Table~\ref{tab:sc}. +The overall energy consumption of all the benchmarks solving the class D instance and +using the proposed frequency selection algorithm is measured +using the equation of the reduced energy consumption, Equation~\ref{eq:energy-grid}. This model uses the measured dynamic power showed in Table~\ref{table:grid5000-1} +and the static +power is assumed to be equal to 20\% of the dynamic power. The execution +time is measured for all the benchmarks over these different scenarios. + +The energy consumptions and the execution times for all the benchmarks are +presented in Figures~\ref{fig:exp-time-energy} (a) and (b) respectively. + +For the majority of the benchmarks, the energy consumed while executing the NAS benchmarks over one site scenario +for 16 and 32 nodes is lower than the energy consumed while using two sites. +The long distance communications between the two distributed sites increase the idle time, which leads to more static energy consumption. + +The execution times of these benchmarks +over one site with 16 and 32 nodes are also lower when compared to those of the two sites +scenario. Moreover, most of the benchmarks running over the one site scenario have their execution times approximately divided by two when the number of computing nodes is doubled from 16 to 32 nodes (linear speed up according to the number of the nodes). + +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 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-grid}, and the original energy consumption, +Equation~\ref{eq:eorginal-grid}, for all benchmarks as in Figure~\ref{fig:eng_s}. +This figure shows that the energy saving percentages of one site scenario for +16 and 32 nodes are bigger than those of the two sites scenario which is due +to the higher computations to communications ratio in the first scenario +than in the second one. Moreover, the frequency selecting algorithm selects smaller frequencies when the computation times are bigger than the communication times which +results in a lower energy consumption. Indeed, the dynamic consumed power +is exponentially related to the CPU's frequency value. On the other hand, the increase in the number of computing nodes can +increase the communication times and thus produces less energy saving depending on the +benchmarks being executed. The results of benchmarks CG, MG, BT and FT show more +energy saving percentage in one site scenario when executed over 16 nodes comparing to 32 nodes. While, LU and SP consume more energy with 16 nodes than 32 in one site because their computations to communications ratio is not affected by the increase of the number of local communications. +\begin{figure}[!t] + \centering + \centering + \includegraphics[width=.7\textwidth]{fig/ch3/eng_con_scenarios.eps}\\~~~~~~~~~(a)\\ + \includegraphics[width=.7\textwidth]{fig/ch3/time_scenarios.eps}\\~~~~~~~~~(b) + \caption{ (a) energy consumption and (b) execution time of NAS Benchmarks over different scenarios} + \label{fig:exp-time-energy} + +\end{figure} + + +The energy saving percentage is reduced for all the benchmarks because of the long distance communications in the two sites +scenario, except for the EP benchmark which has no communication. Therefore, the energy saving percentage of this benchmark is +dependent on the maximum difference between the computing powers of the heterogeneous computing nodes, for example +in the one site scenario, the graphite cluster is selected but in the two sites scenario +this cluster is replaced with the Taurus cluster which is more powerful. +Therefore, the energy savings of the EP benchmark are bigger in the two sites scenario due +to the higher maximum difference between the computing powers of the nodes. + +In fact, high differences between the nodes' computing powers make the proposed frequencies selecting +algorithm select smaller frequencies for the powerful nodes which +produces less energy consumption and thus more energy saving. +The best energy saving percentage was obtained in the one site scenario with 16 nodes, the energy consumption was on average reduced up to 30\%. + + + +\begin{figure*}[t] +\centering +\includegraphics[width=.7\textwidth]{fig/ch3/eng_s.eps} +\caption{The energy reduction while executing the NAS benchmarks over different scenarios} +\label{fig:eng_s} +\end{figure*} +\begin{figure*}[t] +\centering +\includegraphics[width=.7\textwidth]{fig/ch3/per_d.eps} +\caption{The performance degradation of the NAS benchmarks over different scenarios} +\label{fig:per_d} +\end{figure*} +\begin{figure*}[t] +\centering +\includegraphics[width=.7\textwidth]{fig/ch3/dist.eps} +\caption{The trade-off distance between the energy reduction and the performance of the NAS benchmarks + over different scenarios} +\label{fig:dist-grid} +\end{figure*} + + + +Figure \ref{fig:per_d} presents the performance degradation percentages for all benchmarks over the two scenarios. +The performance degradation percentage for the benchmarks running on two sites with +16 or 32 nodes is on average equal to 8.3\% or 4.7\% respectively. +For this scenario, the proposed scaling algorithm selects smaller frequencies for the executions with 32 nodes without significantly degrading their performance because the communication times are higher with 32 nodes which results in smaller computations to communications ratio. On the other hand, the performance degradation percentage for the benchmarks running on one site with +16 or 32 nodes is on average equal to 3.2\% or 10.6\% respectively. In contrary to the two sites scenario, when the number of computing nodes is increased in the one site scenario, the performance degradation percentage is increased. Therefore, doubling the number of computing +nodes when the communications occur in high speed network does not decrease the computations to +communication ratio. + +The performance degradation percentage of the EP benchmark after applying the scaling factors selection algorithm is the highest in comparison to +the other benchmarks. Indeed, in the EP benchmark, there are no communication and slack times and its +performance degradation percentage only depends on the frequencies values selected by the algorithm for the computing nodes. +The rest of the benchmarks showed different performance degradation percentages, which decrease +when the communication times increase and vice versa. + +Figure \ref{fig:dist-grid} presents the distance percentage between the energy saving and the performance degradation for each benchmark over both scenarios. The trade-off distance percentage can be +computed as in Equation~\ref{eq:max-grid}. The one site scenario with 16 nodes gives the best energy and performance +trade-off, on average it is equal to 26.8\%. The one site scenario using both 16 and 32 nodes had better energy and performance +trade-off comparing to the two sites scenario because the former has high speed local communications +which increase the computations to communications ratio and the latter uses long distance communications which decrease this ratio. + + Finally, the best energy and performance trade-off depends on all of the following: +1) the computations to communications ratio when there are communications and slack times, 2) the heterogeneity of the computing powers of the nodes and 3) the heterogeneity of the consumed static and dynamic powers of the nodes. + + + + +\subsection{The experimental results over multi-cores clusters} +\label{ch3:4:2} + +The clusters of Grid'5000 have different number of cores embedded in their nodes +as shown in Table~\ref{table:grid5000-1}. In +this section, the proposed scaling algorithm of the grid is evaluated over the Grid'5000 platform while using multi-cores nodes selected according to the one site scenario described in Section +~\ref{ch3:4:1}. +The one site scenario uses 32 cores from multi-cores nodes instead of 32 distinct nodes. For example if +the participating number of cores from a certain cluster is equal to 14, +in the multi-core scenario the selected nodes is equal to 4 nodes while using +3 or 4 cores from each node. The platforms with one +core per node and multi-cores nodes are shown in Table~\ref{table:sen-mc}. +The energy consumptions and execution times of running class D of the NAS parallel +benchmarks over these two different scenarios are presented +in Figures \ref{fig:eng-cons-mc} and \ref{fig:time-mc} respectively. + + +\begin{table}[] +\centering +\caption{The multicores scenarios} +\begin{tabular}{|*{4}{c|}} +\hline +Scenario name & Cluster name & Nodes per cluster & + Cores per node \\ \hline +\multirow{3}{*}{One core per node} & Graphite & 4 & 1 \\ \cline{2-4} + & Graphene & 14 & 1 \\ \cline{2-4} + & Griffon & 14 & 1 \\ \hline +\multirow{3}{*}{Multi-cores per node} & Graphite & 1 & 4 \\ \cline{2-4} + & Graphene & 4 & 3 or 4 \\ \cline{2-4} + & Griffon & 4 & 3 or 4 \\ \hline +\end{tabular} +\label{table:sen-mc} +\end{table} + + + + +\begin{figure}[!t] + \centering + \includegraphics[width=.7\textwidth]{fig/ch3/time.eps} + \caption{The execution times of running NAS benchmarks over one core and multicores scenarios} + \label{fig:time-mc} +\end{figure} +\begin{figure}[!t] + \centering + \includegraphics[width=.7\textwidth]{fig/ch3/eng_con.eps} + \caption{The energy consumptions and execution times of NAS benchmarks over one core and multi-cores per node architectures} +\label{fig:eng-cons-mc} +\end{figure} + +The execution times for most of the NAS benchmarks are higher over the multi-cores per node scenario +than over single core per node scenario. Indeed, + the communication times are higher in the one site multi-cores scenario than in the latter scenario because all the cores of a node share the same node network link which can be saturated when running communication bound applications. Moreover, the cores of a node share the memory bus which can be also saturated and become a bottleneck. +Moreover, the energy consumptions of the NAS benchmarks are lower over the + one core scenario than over the multi-cores scenario because +the first scenario had less execution time than the latter which results in less static energy being consumed. +The computations to communications ratios of the NAS benchmarks are higher over +the one site one core scenario when compared to the ratio of the multi-cores scenario. +More energy reduction can be gained when this ratio is big because it pushes the proposed scaling algorithm to select smaller frequencies that decrease the dynamic power consumption. These experiments also showed that the energy +consumption and the execution times of the EP and MG benchmarks do not change significantly over these two +scenarios because there are no or small communications. Contrary to EP and MG, the energy consumptions and the execution times of the rest of the benchmarks vary according to the communication times that are different from one scenario to the other. + + +\begin{figure*}[!t] + \centering + \includegraphics[width=.7\textwidth]{fig/ch3/eng_s_mc.eps} + \caption{The energy saving of running NAS benchmarks over one core and multicores scenarios} + \label{fig:eng-s-mc} +\end{figure*} +\begin{figure*}[!t] + \centering +\includegraphics[width=.7\textwidth]{fig/ch3/per_d_mc.eps} + \caption{The performance degradation of running NAS benchmarks over one core and multicores scenarios} + \label{fig:per-d-mc} +\end{figure*} +\begin{figure*}[!t] + \centering + \includegraphics[width=.7\textwidth]{fig/ch3/dist_mc.eps} + \caption{The trade-off distance of running NAS benchmarks over one core and multicores scenarios} + \label{fig:dist-mc} +\end{figure*} + +The energy saving percentages of all NAS benchmarks running over these two scenarios are presented in Figure~\ref{fig:eng-s-mc}. +The figure shows that the energy saving percentages in the one +core and the multi-cores scenarios +are approximately equivalent, on average they are equal to 25.9\% and 25.1\% respectively. +The energy consumption is reduced at the same rate in the two scenarios when compared to the energy consumption of the executions without DVFS. + + +The performance degradation percentages of the NAS benchmarks are presented in +Figure~\ref{fig:per-d-mc}. It shows that the performance degradation percentages are higher for the NAS benchmarks over the one core per node scenario (on average equal to 10.6\%) than over the multi-cores scenario (on average equal to 7.5\%). The performance degradation percentages over the multi-cores scenario are lower because the computations to communications ratios are smaller than the ratios of the other scenario. + +The trade-off distances percentages of the NAS benchmarks over the two scenarios are presented +in ~Figure~\ref{fig:dist-mc}. These trade-off distances between energy consumption reduction and performance are used to verify which scenario is the best in both terms at the same time. The figure shows that the trade-off distance percentages are on average bigger over the multi-cores scenario (17.6\%) than over the one core per node scenario (15.3\%). + + +\subsection{Experiments with different static power scenarios} +\label{ch3:4:3} + +In Section~\ref{ch3:4}, since it was not possible to measure the static power consumed by a CPU, the static power was assumed to be equal to 20\% of the measured dynamic power. This power is consumed during the whole execution time, during computation and communication times. Therefore, when the DVFS operations are applied by the scaling algorithm and the CPUs' frequencies lowered, the execution time might increase and consequently the consumed static energy will be increased too. + +The aim of this section is to evaluate the scaling algorithm while assuming different values of static powers. +In addition to the previously used percentage of static power, two new static power ratios, 10\% and 30\% of the measured dynamic power of the core, are used in this section. +The experiments have been executed with these two new static power scenarios over the one site one core per node scenario. +In these experiments, class D of the NAS parallel benchmarks are executed over the Nancy site. 16 computing nodes from the three clusters, Graphite, Graphene and Griffon, where used in this experiment. + + + + +\begin{figure}[!t] + \centering + \includegraphics[width=.7\textwidth]{fig/ch3/eng_pow.eps} + \caption{The energy saving percentages for the nodes executing the NAS benchmarks over the three power scenarios} + \label{fig:eng-pow} +\end{figure} +\begin{figure}[!t] + \centering + \includegraphics[width=.7\textwidth]{fig/ch3/per_pow.eps} + \caption{The performance degradation percentages for the NAS benchmarks over the three power scenarios} + \label{fig:per-pow} +\end{figure} +\begin{figure}[!t] + \centering + \includegraphics[width=.7\textwidth]{fig/ch3/dist_pow.eps} + \caption{The trade-off distance between the energy reduction and the performance of the NAS benchmarks over the three power scenarios} + \label{fig:dist-pow} +\end{figure} + + +\begin{figure} + \centering + \includegraphics[scale=0.7]{fig/ch3/three_scenarios2.pdf} + \caption{Comparing the selected frequency scaling factors for the MG benchmark over the three static power scenarios} + \label{fig:fre-pow} +\end{figure} + +The energy saving percentages of the NAS benchmarks with the three static power scenarios are presented +in Figure~\ref{fig:eng-pow}. This figure shows that the 10\% of static power scenario +gives the biggest energy saving percentages in comparison to the 20\% and 30\% static power +scenarios. The small value of the static power consumption makes the proposed +scaling algorithm select smaller frequencies for the CPUs. +These smaller frequencies reduce the dynamic energy consumption more than increasing the consumed static energy which gives less overall energy consumption. +The energy saving percentages of the 30\% static power scenario is the smallest between the other scenarios, because the scaling algorithm selects bigger frequencies for the CPUs which increases the energy consumption. Figure \ref{fig:fre-pow} demonstrates that the proposed scaling algorithm selects the best frequency scaling factors according to the static power consumption ratio being used. + +The performance degradation percentages are presented in Figure~\ref{fig:per-pow}. +The 30\% static power scenario had less performance degradation percentage because the scaling algorithm +had selected big frequencies for the CPUs. While, +the inverse happens in the 10\% and 20\% scenarios because the scaling algorithm had selected CPUs' frequencies smaller than those of the 30\% scenario. The trade-off distance percentage for the NAS benchmarks with these three static power scenarios +are presented in Figure~\ref{fig:dist-pow}. +It shows that the best trade-off +distance percentage is obtained with the 10\% static power scenario and this percentage +is decreased for the other two scenarios because the scaling algorithm had selected different frequencies according to the static power values. + +In the EP benchmark, the energy saving, performance degradation and trade-off +distance percentages for these static power scenarios are not significantly different because there is no communication in this benchmark. Therefore, the static power is only consumed during computation and the proposed scaling algorithm selects similar frequencies for the three scenarios. On the other hand, for the rest of the benchmarks, the scaling algorithm selects the values of the frequencies according to the communication times of each benchmark because the static energy consumption increases proportionally to the communication times. + + + +\subsection{Comparison of the proposed frequencies selecting algorithm } +\label{ch3:4:4} + +Finding the frequencies that give the best trade-off between the energy consumption and the performance for a parallel +application is not a trivial task. Many algorithms have been proposed to tackle this problem. +In this section, the proposed frequencies selecting algorithm is compared to a method that uses the well known energy and delay product objective function, $EDP=energy \times delay$, that has been used by many researchers \cite{ref80,ref81,ref82}. +This objective function was also used by Spiliopoulos et al. algorithm \cite{ref67} where they select the frequencies that minimize the EDP product and apply them with DVFS operations to the multi-cores +architecture. Their online algorithm predicts the energy consumption and execution time of a processor before using the EDP method. + +To fairly compare the proposed frequencies scaling algorithm to Spiliopoulos et al. algorithm, called Maxdist and EDP respectively, both algorithms use the same energy model, Equation~\ref{eq:energy-grid} and +execution time model, Equation~\ref{eq:perf-grid}, to predict the energy consumption and the execution time for each computing node. +Moreover, both algorithms start the search space from the upper bound computed as in Equation~\ref{eq:Fint}. +Finally, the resulting EDP algorithm is an exhaustive search algorithm that tests all the possible frequencies, starting from the initial frequencies (upper bound), +and selects the vector of frequencies that minimize the EDP product. +Both algorithms were applied to class D of the NAS benchmarks over 16 nodes. +The participating computing nodes are distributed according to the two scenarios described in Section~\ref{ch3:4:1}. +The experimental results, the energy saving, performance degradation and trade-off distance percentages, are +presented in Figures~\ref{fig:edp-eng}, \ref{fig:edp-perf} and \ref{fig:edp-dist} respectively. + + + +\begin{figure*}[!t] + \centering + \includegraphics[width=.7\textwidth]{fig/ch3/edp_eng} +\caption{The energy reduction induced by the Maxdist method and the EDP method} +\label{fig:edp-eng} +\end{figure*} +\begin{figure*}[!t] + \centering + \includegraphics[width=.7\textwidth]{fig/ch3/edp_per} +\caption{The performance degradation induced by the Maxdist method and the EDP method} +\label{fig:edp-perf} +\end{figure*} +\begin{figure*}[!t] + \centering + \includegraphics[width=.7\textwidth]{fig/ch3/edp_dist} +\caption{The trade-off distance between the energy consumption reduction and the performance for the Maxdist method and the EDP method} +\label{fig:edp-dist} +\end{figure*} + + +As shown in these figures, the proposed frequencies selection algorithm, Maxdist, outperforms the EDP algorithm in terms of energy consumption reduction and performance for all of the benchmarks executed over the two scenarios. +The proposed algorithm gives better results than EDP because it +maximizes the energy saving and the performance at the same time. +Moreover, the proposed scaling algorithm gives the same weight for these two metrics. +Whereas, the EDP algorithm gives sometimes negative trade-off values for some benchmarks in the two sites scenarios. +These negative trade-off values mean that the performance degradation percentage is higher than the energy saving percentage. +The high positive values of the trade-off distance percentage mean that the energy saving percentage is much higher than the performance degradation percentage. +The time complexity of both Maxdist and EDP algorithms are $O(N \cdot M \cdot F)$ and +$O(N \cdot M \cdot F^2)$ respectively, where $N$ is the number of the clusters, $M$ is the number of nodes and $F$ is the +maximum number of available frequencies. When Maxdist is applied to a benchmark that is being executed over 32 nodes distributed between Nancy and Lyon sites, it takes on average $0.01 ms$ to compute the best frequencies while EDP is on average ten times slower over the same architecture. + + +\section{Conclusion} +\label{ch3:concl} +In this chapter, two new online frequency scaling factors selecting algorithms have been presented. They select the best possible vectors of frequency scaling factors that give the +maximum distance (optimal trade-off) between the predicted energy and the +predicted performance curves for a heterogeneous cluster and grid. Both algorithms use a +new energy models for measuring and predicting the energy of distributed +iterative applications running over a heterogeneous local cluster and a grid platform. +Firstly, the proposed scaling factors selection algorithm for a heterogeneous local cluster is applied to NAS parallel benchmarks class C and simulated by SimGrid. +The results of the experiments showed that the algorithm on average reduces by 29.8\% the energy +consumption of NAS benchmarks executed over 8 nodes while limiting the degradation of the performance by 3.8\%. The algorithm also selects different scaling factors according to +the percentage of the computing and communication times, and according to the +values of the static and dynamic powers of the CPUs. +Secondly, the proposed scaling factors selection algorithm for a grid is applied to NAS parallel benchmarks class D and executed over Grid5000 testbed platform. +The experiments on 16 nodes, distributed over three clusters, showed that the algorithm on average reduces by 30\% the energy consumption +for all the NAS benchmarks while on average only degrading by 3.2\% the performance. +The algorithm was also evaluated in different scenarios that vary in the distribution of the computing nodes between different clusters' sites or use multi-cores per node architecture or consume different static power values. The algorithm selects different vectors of frequencies according to the +computations and communication times ratios, and the values of the static and measured dynamic powers of the CPUs. Thus, the simulation and the real results are comparable in term of energy saving and performance degradation percentages. +Finally, both the proposed algorithms were compared to another method that uses +the well known energy and delay product as an objective function. The comparison results showed +that the proposed algorithms outperform the latter by selecting vectors of frequencies that give a better +trade-off results. diff --git a/fig/ch3/Makefile b/fig/ch3/Makefile new file mode 100644 index 0000000..f8cbf58 --- /dev/null +++ b/fig/ch3/Makefile @@ -0,0 +1,12 @@ +EPS = $(wildcard *.eps) +PDF = $(EPS:%.eps=%.pdf) + +.PHONY: all clean + +all: $(PDF) + +clean: + $(RM) $(PDF) + +%.pdf: %.eps + epstopdf $< diff --git a/fig/ch3/commtasks.pdf b/fig/ch3/commtasks.pdf new file mode 100644 index 0000000000000000000000000000000000000000..0e39a6d6e966be2bb2ae57da77b4096c95b5a4c9 GIT binary patch literal 12821 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 literal 0 HcmV?d00001 diff --git a/fig/ch3/compare_EDP.pdf b/fig/ch3/compare_EDP.pdf new file mode 100644 index 0000000000000000000000000000000000000000..62b710d6a43fe6018694ad1717b63046b5ef93a3 GIT binary patch literal 18711 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

T^R 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%0D?7%&1vD&-vVa2n<1&t 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 matrix makepattern +/Pat1 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke + 0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke} +>> matrix makepattern +/Pat2 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L + 8 8 L 8 0 L 0 0 L fill} +>> matrix makepattern +/Pat3 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L + 0 12 M 12 0 L stroke} +>> matrix makepattern +/Pat4 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L + 0 -4 M 12 8 L stroke} +>> matrix makepattern +/Pat5 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L + 0 12 M 8 -4 L 4 12 M 10 0 L stroke} +>> matrix makepattern +/Pat6 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L + 0 -4 M 8 12 L 4 -4 M 10 8 L stroke} +>> matrix makepattern +/Pat7 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L + 12 0 M -4 8 L 12 4 M 0 10 L stroke} +>> matrix makepattern +/Pat8 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L + -4 0 M 12 8 L -4 4 M 8 10 L stroke} +>> matrix makepattern +/Pat9 exch def +/Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def +/Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def +/Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def +/Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def +/Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def +/Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def +/Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def +} def +% +% +%End of PostScript Level 2 code +% +/PatternBgnd { + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse +} def +% +% Substitute for Level 2 pattern fill codes with +% grayscale if Level 2 support is not selected. +% +/Level1PatternFill { +/Pattern1 {0.250 Density} bind def +/Pattern2 {0.500 Density} bind def +/Pattern3 {0.750 Density} bind def +/Pattern4 {0.125 Density} bind def +/Pattern5 {0.375 Density} bind def +/Pattern6 {0.625 Density} bind def +/Pattern7 {0.875 Density} bind def +} def +% +% Now test for support of Level 2 code +% +Level1 {Level1PatternFill} {Level2PatternFill} ifelse +% +/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont +dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall +currentdict end definefont pop +% +% Encoding for ISO-8859-1 (also called Latin1) +% +/reencodeISO { +dup dup findfont dup length dict begin +{ 1 index /FID ne { def }{ pop pop } ifelse } forall +currentdict /CharStrings known { + CharStrings /Idieresis known { + /Encoding ISOLatin1Encoding def } if +} if +currentdict end definefont +} def +/ISOLatin1Encoding [ +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright +/parenleft/parenright/asterisk/plus/comma/minus/period/slash +/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon +/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N +/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright +/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m +/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve +/dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut +/ogonek/caron/space/exclamdown/cent/sterling/currency/yen/brokenbar +/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot +/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior +/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine +/guillemotright/onequarter/onehalf/threequarters/questiondown +/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla +/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex +/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis +/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute +/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis +/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave +/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex +/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis +/yacute/thorn/ydieresis +] def +/MFshow { + { dup 5 get 3 ge + { 5 get 3 eq {gsave} {grestore} ifelse } + {dup dup 0 get findfont exch 1 get scalefont setfont + [ currentpoint ] exch dup 2 get 0 exch R dup 5 get 2 ne {dup dup 6 + get exch 4 get {Gshow} {stringwidth pop 0 R} ifelse }if dup 5 get 0 eq + {dup 3 get {2 get neg 0 exch R pop} {pop aload pop M} ifelse} {dup 5 + get 1 eq {dup 2 get exch dup 3 get exch 6 get stringwidth pop -2 div + dup 0 R} {dup 6 get stringwidth pop -2 div 0 R 6 get + show 2 index {aload pop M neg 3 -1 roll neg R pop pop} {pop pop pop + pop aload pop M} ifelse }ifelse }ifelse } + ifelse } + forall} def +/Gswidth {dup type /stringtype eq {stringwidth} {pop (n) stringwidth} ifelse} def +/MFwidth {0 exch { dup 5 get 3 ge { 5 get 3 eq { 0 } { pop } ifelse } + {dup 3 get{dup dup 0 get findfont exch 1 get scalefont setfont + 6 get Gswidth pop add} {pop} ifelse} ifelse} forall} def +/MLshow { currentpoint stroke M + 0 exch R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MRshow { currentpoint stroke M + exch dup MFwidth neg 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MCshow { currentpoint stroke M + exch dup MFwidth -2 div 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/XYsave { [( ) 1 2 true false 3 ()] } bind def +/XYrestore { [( ) 1 2 true false 4 ()] } bind def +/Helvetica reencodeISO def +Level1 SuppressPDFMark or +{} { +/SDict 10 dict def +systemdict /pdfmark known not { + userdict /pdfmark systemdict /cleartomark get put +} if +SDict begin [ + /Title () + /Subject (gnuplot plot) + /Creator (gnuplot 4.6 patchlevel 6) + /Author (afanfakh) +% /Producer (gnuplot) +% /Keywords () + /CreationDate (Thu Oct 22 12:39:41 2015) + /DOCINFO pdfmark +end +} ifelse +end +%%EndProlog +%%Page: 1 1 +gnudict begin +gsave +doclip +50 50 translate +0.100 0.100 scale +0 setgray +newpath +(Helvetica) findfont 110 scalefont setfont +BackgroundColor 0 lt 3 1 roll 0 lt exch 0 lt or or not {gsave BackgroundColor C clippath fill grestore} if +1.000 UL +LTb +473 352 M +63 0 V +4305 0 R +-63 0 V +stroke +407 352 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 0)] +] -50.0 MRshow +1.000 UL +LTb +473 421 M +31 0 V +4337 0 R +-31 0 V +473 490 M +31 0 V +4337 0 R +-31 0 V +473 560 M +31 0 V +4337 0 R +-31 0 V +473 629 M +31 0 V +4337 0 R +-31 0 V +473 698 M +63 0 V +4305 0 R +-63 0 V +stroke +407 698 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 5)] +] -50.0 MRshow +1.000 UL +LTb +473 767 M +31 0 V +4337 0 R +-31 0 V +473 837 M +31 0 V +4337 0 R +-31 0 V +473 906 M +31 0 V +4337 0 R +-31 0 V +473 975 M +31 0 V +4337 0 R +-31 0 V +473 1044 M +63 0 V +4305 0 R +-63 0 V +stroke +407 1044 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 10)] +] -50.0 MRshow +1.000 UL +LTb +473 1114 M +31 0 V +4337 0 R +-31 0 V +473 1183 M +31 0 V +4337 0 R +-31 0 V +473 1252 M +31 0 V +4337 0 R +-31 0 V +473 1321 M +31 0 V +4337 0 R +-31 0 V +473 1391 M +63 0 V +4305 0 R +-63 0 V +stroke +407 1391 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 15)] +] -50.0 MRshow +1.000 UL +LTb +473 1460 M +31 0 V +4337 0 R +-31 0 V +473 1529 M +31 0 V +4337 0 R +-31 0 V +473 1598 M +31 0 V +4337 0 R +-31 0 V +473 1668 M +31 0 V +4337 0 R +-31 0 V +473 1737 M +63 0 V +4305 0 R +-63 0 V +stroke +407 1737 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 20)] +] -50.0 MRshow +1.000 UL +LTb +473 1806 M +31 0 V +4337 0 R +-31 0 V +473 1875 M +31 0 V +4337 0 R +-31 0 V +473 1945 M +31 0 V +4337 0 R +-31 0 V +473 2014 M +31 0 V +4337 0 R +-31 0 V +473 2083 M +63 0 V +4305 0 R +-63 0 V +stroke +407 2083 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 25)] +] -50.0 MRshow +1.000 UL +LTb +473 2152 M +31 0 V +4337 0 R +-31 0 V +473 2222 M +31 0 V +4337 0 R +-31 0 V +473 2291 M +31 0 V +4337 0 R +-31 0 V +473 2360 M +31 0 V +4337 0 R +-31 0 V +473 2429 M +63 0 V +4305 0 R +-63 0 V +stroke +407 2429 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 30)] +] -50.0 MRshow +1.000 UL +LTb +473 2499 M +31 0 V +4337 0 R +-31 0 V +473 2568 M +31 0 V +4337 0 R +-31 0 V +473 2637 M +31 0 V +4337 0 R +-31 0 V +473 2706 M +31 0 V +4337 0 R +-31 0 V +473 2776 M +63 0 V +4305 0 R +-63 0 V +stroke +407 2776 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 35)] +] -50.0 MRshow +1.000 UL +LTb +473 2845 M +31 0 V +4337 0 R +-31 0 V +473 2914 M +31 0 V +4337 0 R +-31 0 V +473 2983 M +31 0 V +4337 0 R +-31 0 V +473 3053 M +31 0 V +4337 0 R +-31 0 V +473 3122 M +63 0 V +4305 0 R +-63 0 V +stroke +407 3122 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 40)] +] -50.0 MRshow +1.000 UL +LTb +473 3191 M +31 0 V +4337 0 R +-31 0 V +473 3260 M +31 0 V +4337 0 R +-31 0 V +473 3330 M +31 0 V +4337 0 R +-31 0 V +473 3399 M +31 0 V +4337 0 R +-31 0 V +473 3468 M +63 0 V +4305 0 R +-63 0 V +stroke +407 3468 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 45)] +] -50.0 MRshow +1.000 UL +LTb +1019 352 M +0 63 V +0 3053 R +0 -63 V +stroke +1019 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (CG)] +] -50.0 MCshow +1.000 UL +LTb +1565 352 M +0 63 V +0 3053 R +0 -63 V +stroke +1565 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (MG)] +] -50.0 MCshow +1.000 UL +LTb +2111 352 M +0 63 V +0 3053 R +0 -63 V +stroke +2111 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (EP)] +] -50.0 MCshow +1.000 UL +LTb +2657 352 M +0 63 V +0 3053 R +0 -63 V +stroke +2657 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (LU)] +] -50.0 MCshow +1.000 UL +LTb +3203 352 M +0 63 V +0 3053 R +0 -63 V +stroke +3203 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (BT)] +] -50.0 MCshow +1.000 UL +LTb +3749 352 M +0 63 V +0 3053 R +0 -63 V +stroke +3749 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (SP)] +] -50.0 MCshow +1.000 UL +LTb +4295 352 M +0 63 V +0 3053 R +0 -63 V +stroke +4295 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (FT)] +] -50.0 MCshow +1.000 UL +LTb +1.000 UL +LTb +473 3468 N +473 352 L +4368 0 V +0 3116 V +-4368 0 V +Z stroke +LCb setrgbcolor +88 1910 M +currentpoint gsave translate -270 rotate 0 0 moveto +[ [(Helvetica) 180.0 0.0 true true 0 (Tradeoff distance)] +] -60.0 MCshow +grestore +LTb +LCb setrgbcolor +2657 77 M +[ [(Helvetica) 180.0 0.0 true true 0 (NAS parallel benchmarks)] +] -60.0 MCshow +LTb +1.000 UP +1.000 UL +LTb +% Begin plot #1 +1.000 UL +LT0 +0.10 0.10 0.44 C LCb setrgbcolor +1816 3264 M +[ [(Helvetica) 140.0 0.0 true true 0 (One site / 16 nodes)] +] -46.7 MRshow +LT0 +0.10 0.10 0.44 C 1882 3231 327 66 40 45 2 PatternFill +0.10 0.10 0.44 C 892 352 73 1649 40 45 2 PatternFill +0.10 0.10 0.44 C 1438 352 73 1986 40 45 2 PatternFill +0.10 0.10 0.44 C 1984 352 73 1650 40 45 2 PatternFill +0.10 0.10 0.44 C 2530 352 73 1435 40 45 2 PatternFill +0.10 0.10 0.44 C 3076 352 73 2301 40 45 2 PatternFill +0.10 0.10 0.44 C 3622 352 73 2236 40 45 2 PatternFill +0.10 0.10 0.44 C 4168 352 73 1597 40 45 2 PatternFill +% End plot #1 +% Begin plot #2 +1.000 UL +LT1 +0.10 0.10 0.44 C LCb setrgbcolor +1816 3132 M +[ [(Helvetica) 140.0 0.0 true true 0 (One site / 32 nodes)] +] -46.7 MRshow +LT1 +0.10 0.10 0.44 C 1.000 1882 3099 327 66 BoxColFill +0.10 0.10 0.44 C 1.000 983 352 73 505 BoxColFill +0.10 0.10 0.44 C 1.000 1529 352 73 817 BoxColFill +0.10 0.10 0.44 C 1.000 2075 352 73 671 BoxColFill +0.10 0.10 0.44 C 1.000 2621 352 73 1053 BoxColFill +0.10 0.10 0.44 C 1.000 3167 352 73 918 BoxColFill +0.10 0.10 0.44 C 1.000 3713 352 73 2622 BoxColFill +0.10 0.10 0.44 C 1.000 4259 352 73 851 BoxColFill +% End plot #2 +% Begin plot #3 +1.000 UL +LT0 +0.00 0.39 0.00 C LCb setrgbcolor +1816 3000 M +[ [(Helvetica) 140.0 0.0 true true 0 (Two sites / 16 nodes)] +] -46.7 MRshow +LT0 +0.00 0.39 0.00 C 1882 2967 327 66 80 -45 1 PatternFill +0.00 0.39 0.00 C 1074 352 73 1085 80 -45 1 PatternFill +0.00 0.39 0.00 C 1620 352 73 572 80 -45 1 PatternFill +0.00 0.39 0.00 C 2166 352 73 310 80 -45 1 PatternFill +0.00 0.39 0.00 C 2712 352 73 540 80 -45 1 PatternFill +0.00 0.39 0.00 C 3258 352 73 1143 80 -45 1 PatternFill +0.00 0.39 0.00 C 3804 352 73 1764 80 -45 1 PatternFill +0.00 0.39 0.00 C 4350 352 73 1131 80 -45 1 PatternFill +% End plot #3 +% Begin plot #4 +1.000 UL +LT3 +0.94 0.50 0.50 C LCb setrgbcolor +1816 2868 M +[ [(Helvetica) 140.0 0.0 true true 0 (Two sites / 32 nodes)] +] -46.7 MRshow +LT3 +0.94 0.50 0.50 C 1.000 1882 2835 327 66 BoxColFill +0.94 0.50 0.50 C 1.000 1165 352 73 475 BoxColFill +0.94 0.50 0.50 C 1.000 1711 352 73 1414 BoxColFill +0.94 0.50 0.50 C 1.000 2257 352 73 349 BoxColFill +0.94 0.50 0.50 C 1.000 2803 352 73 583 BoxColFill +0.94 0.50 0.50 C 1.000 3349 352 73 547 BoxColFill +0.94 0.50 0.50 C 1.000 3895 352 73 2430 BoxColFill +0.94 0.50 0.50 C 1.000 4441 352 73 664 BoxColFill +% End plot #4 +1.000 UL +LTb +473 3468 N +473 352 L +4368 0 V +0 3116 V +-4368 0 V +Z stroke +1.000 UP +1.000 UL +LTb +stroke +grestore +end +showpage +%%Trailer +%%DocumentFonts: Helvetica +%%Pages: 1 diff --git a/fig/ch3/dist_mc-eps-converted-to.pdf b/fig/ch3/dist_mc-eps-converted-to.pdf new file mode 100644 index 0000000000000000000000000000000000000000..66a1560751af092833d822221222e9604bae2e9f GIT binary patch literal 7692 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 literal 0 HcmV?d00001 diff --git a/fig/ch3/dist_mc.eps b/fig/ch3/dist_mc.eps new file mode 100644 index 0000000..240fa99 --- /dev/null +++ b/fig/ch3/dist_mc.eps @@ -0,0 +1,889 @@ +%!PS-Adobe-2.0 +%%Creator: gnuplot 4.6 patchlevel 6 +%%CreationDate: Thu Oct 22 17:45:05 2015 +%%DocumentFonts: (atend) +%%BoundingBox: 50 50 554 410 +%%Orientation: Portrait +%%Pages: (atend) +%%EndComments +%%BeginProlog +/gnudict 256 dict def +gnudict begin +% +% The following true/false flags may be edited by hand if desired. +% The unit line width and grayscale image gamma correction may also be changed. +% +/Color false def +/Blacktext false def +/Solid false def +/Dashlength 1 def +/Landscape false def +/Level1 false def +/Rounded false def +/ClipToBoundingBox false def +/SuppressPDFMark false def +/TransparentPatterns false def +/gnulinewidth 5.000 def +/userlinewidth gnulinewidth def +/Gamma 1.0 def +/BackgroundColor {-1.000 -1.000 -1.000} def +% +/vshift -36 def +/dl1 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if +} def +/dl2 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul add } if +} def +/hpt_ 31.5 def +/vpt_ 31.5 def +/hpt hpt_ def +/vpt vpt_ def +/doclip { + ClipToBoundingBox { + newpath 50 50 moveto 554 50 lineto 554 410 lineto 50 410 lineto closepath + clip + } if +} def +% +% Gnuplot Prolog Version 4.6 (September 2012) +% +%/SuppressPDFMark true def +% +/M {moveto} bind def +/L {lineto} bind def +/R {rmoveto} bind def +/V {rlineto} bind def +/N {newpath moveto} bind def +/Z {closepath} bind def +/C {setrgbcolor} bind def +/f {rlineto fill} bind def +/g {setgray} bind def +/Gshow {show} def % May be redefined later in the file to support UTF-8 +/vpt2 vpt 2 mul def +/hpt2 hpt 2 mul def +/Lshow {currentpoint stroke M 0 vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Rshow {currentpoint stroke M dup stringwidth pop neg vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def + /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def +/DL {Color {setrgbcolor Solid {pop []} if 0 setdash} + {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse} def +/BL {stroke userlinewidth 2 mul setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/AL {stroke userlinewidth 2 div setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/UL {dup gnulinewidth mul /userlinewidth exch def + dup 1 lt {pop 1} if 10 mul /udl exch def} def +/PL {stroke userlinewidth setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +3.8 setmiterlimit +% Default Line colors +/LCw {1 1 1} def +/LCb {0 0 0} def +/LCa {0 0 0} def +/LC0 {1 0 0} def +/LC1 {0 1 0} def +/LC2 {0 0 1} def +/LC3 {1 0 1} def +/LC4 {0 1 1} def +/LC5 {1 1 0} def +/LC6 {0 0 0} def +/LC7 {1 0.3 0} def +/LC8 {0.5 0.5 0.5} def +% Default Line Types +/LTw {PL [] 1 setgray} def +/LTb {BL [] LCb DL} def +/LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def +/LT0 {PL [] LC0 DL} def +/LT1 {PL [4 dl1 2 dl2] LC1 DL} def +/LT2 {PL [2 dl1 3 dl2] LC2 DL} def +/LT3 {PL [1 dl1 1.5 dl2] LC3 DL} def +/LT4 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def +/LT5 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC5 DL} def +/LT6 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC6 DL} def +/LT7 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC7 DL} def +/LT8 {PL [2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 4 dl2] LC8 DL} def +/Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def +/Dia {stroke [] 0 setdash 2 copy vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke + Pnt} def +/Pls {stroke [] 0 setdash vpt sub M 0 vpt2 V + currentpoint stroke M + hpt neg vpt neg R hpt2 0 V stroke + } def +/Box {stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke + Pnt} def +/Crs {stroke [] 0 setdash exch hpt sub exch vpt add M + hpt2 vpt2 neg V currentpoint stroke M + hpt2 neg 0 R hpt2 vpt2 V stroke} def +/TriU {stroke [] 0 setdash 2 copy vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke + Pnt} def +/Star {2 copy Pls Crs} def +/BoxF {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath fill} def +/TriUF {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath fill} def +/TriD {stroke [] 0 setdash 2 copy vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke + Pnt} def +/TriDF {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath fill} def +/DiaF {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath fill} def +/Pent {stroke [] 0 setdash 2 copy gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore Pnt} def +/PentF {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath fill grestore} def +/Circle {stroke [] 0 setdash 2 copy + hpt 0 360 arc stroke Pnt} def +/CircleF {stroke [] 0 setdash hpt 0 360 arc fill} def +/C0 {BL [] 0 setdash 2 copy moveto vpt 90 450 arc} bind def +/C1 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + vpt 0 360 arc closepath} bind def +/C2 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C3 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C4 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C5 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc + 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc} bind def +/C6 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C7 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C8 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C9 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 450 arc closepath fill + vpt 0 360 arc closepath} bind def +/C10 {BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill + 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C11 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C12 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C13 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C14 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 360 arc closepath fill + vpt 0 360 arc} bind def +/C15 {BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/Rec {newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto + neg 0 rlineto closepath} bind def +/Square {dup Rec} bind def +/Bsquare {vpt sub exch vpt sub exch vpt2 Square} bind def +/S0 {BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare} bind def +/S1 {BL [] 0 setdash 2 copy vpt Square fill Bsquare} bind def +/S2 {BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S3 {BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare} bind def +/S4 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S5 {BL [] 0 setdash 2 copy 2 copy vpt Square fill + exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S6 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S7 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S8 {BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare} bind def +/S9 {BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S10 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill + Bsquare} bind def +/S11 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill + Bsquare} bind def +/S12 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare} bind def +/S13 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S14 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S15 {BL [] 0 setdash 2 copy Bsquare fill Bsquare} bind def +/D0 {gsave translate 45 rotate 0 0 S0 stroke grestore} bind def +/D1 {gsave translate 45 rotate 0 0 S1 stroke grestore} bind def +/D2 {gsave translate 45 rotate 0 0 S2 stroke grestore} bind def +/D3 {gsave translate 45 rotate 0 0 S3 stroke grestore} bind def +/D4 {gsave translate 45 rotate 0 0 S4 stroke grestore} bind def +/D5 {gsave translate 45 rotate 0 0 S5 stroke grestore} bind def +/D6 {gsave translate 45 rotate 0 0 S6 stroke grestore} bind def +/D7 {gsave translate 45 rotate 0 0 S7 stroke grestore} bind def +/D8 {gsave translate 45 rotate 0 0 S8 stroke grestore} bind def +/D9 {gsave translate 45 rotate 0 0 S9 stroke grestore} bind def +/D10 {gsave translate 45 rotate 0 0 S10 stroke grestore} bind def +/D11 {gsave translate 45 rotate 0 0 S11 stroke grestore} bind def +/D12 {gsave translate 45 rotate 0 0 S12 stroke grestore} bind def +/D13 {gsave translate 45 rotate 0 0 S13 stroke grestore} bind def +/D14 {gsave translate 45 rotate 0 0 S14 stroke grestore} bind def +/D15 {gsave translate 45 rotate 0 0 S15 stroke grestore} bind def +/DiaE {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke} def +/BoxE {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke} def +/TriUE {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke} def +/TriDE {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke} def +/PentE {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore} def +/CircE {stroke [] 0 setdash + hpt 0 360 arc stroke} def +/Opaque {gsave closepath 1 setgray fill grestore 0 setgray closepath} def +/DiaW {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V Opaque stroke} def +/BoxW {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V Opaque stroke} def +/TriUW {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V Opaque stroke} def +/TriDW {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V Opaque stroke} def +/PentW {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + Opaque stroke grestore} def +/CircW {stroke [] 0 setdash + hpt 0 360 arc Opaque stroke} def +/BoxFill {gsave Rec 1 setgray fill grestore} def +/Density { + /Fillden exch def + currentrgbcolor + /ColB exch def /ColG exch def /ColR exch def + /ColR ColR Fillden mul Fillden sub 1 add def + /ColG ColG Fillden mul Fillden sub 1 add def + /ColB ColB Fillden mul Fillden sub 1 add def + ColR ColG ColB setrgbcolor} def +/BoxColFill {gsave Rec PolyFill} def +/PolyFill {gsave Density fill grestore grestore} def +/h {rlineto rlineto rlineto gsave closepath fill grestore} bind def +% +% PostScript Level 1 Pattern Fill routine for rectangles +% Usage: x y w h s a XX PatternFill +% x,y = lower left corner of box to be filled +% w,h = width and height of box +% a = angle in degrees between lines and x-axis +% XX = 0/1 for no/yes cross-hatch +% +/PatternFill {gsave /PFa [ 9 2 roll ] def + PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate + PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse + clip + currentlinewidth 0.5 mul setlinewidth + /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def + 0 0 M PFa 5 get rotate PFs -2 div dup translate + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 M 0 PFs V} for + 0 PFa 6 get ne { + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 2 1 roll M PFs 0 V} for + } if + stroke grestore} def +% +/languagelevel where + {pop languagelevel} {1} ifelse + 2 lt + {/InterpretLevel1 true def} + {/InterpretLevel1 Level1 def} + ifelse +% +% PostScript level 2 pattern fill definitions +% +/Level2PatternFill { +/Tile8x8 {/PaintType 2 /PatternType 1 /TilingType 1 /BBox [0 0 8 8] /XStep 8 /YStep 8} + bind def +/KeepColor {currentrgbcolor [/Pattern /DeviceRGB] setcolorspace} bind def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke} +>> matrix makepattern +/Pat1 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke + 0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke} +>> matrix makepattern +/Pat2 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L + 8 8 L 8 0 L 0 0 L fill} +>> matrix makepattern +/Pat3 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L + 0 12 M 12 0 L stroke} +>> matrix makepattern +/Pat4 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L + 0 -4 M 12 8 L stroke} +>> matrix makepattern +/Pat5 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L + 0 12 M 8 -4 L 4 12 M 10 0 L stroke} +>> matrix makepattern +/Pat6 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L + 0 -4 M 8 12 L 4 -4 M 10 8 L stroke} +>> matrix makepattern +/Pat7 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L + 12 0 M -4 8 L 12 4 M 0 10 L stroke} +>> matrix makepattern +/Pat8 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L + -4 0 M 12 8 L -4 4 M 8 10 L stroke} +>> matrix makepattern +/Pat9 exch def +/Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def +/Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def +/Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def +/Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def +/Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def +/Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def +/Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def +} def +% +% +%End of PostScript Level 2 code +% +/PatternBgnd { + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse +} def +% +% Substitute for Level 2 pattern fill codes with +% grayscale if Level 2 support is not selected. +% +/Level1PatternFill { +/Pattern1 {0.250 Density} bind def +/Pattern2 {0.500 Density} bind def +/Pattern3 {0.750 Density} bind def +/Pattern4 {0.125 Density} bind def +/Pattern5 {0.375 Density} bind def +/Pattern6 {0.625 Density} bind def +/Pattern7 {0.875 Density} bind def +} def +% +% Now test for support of Level 2 code +% +Level1 {Level1PatternFill} {Level2PatternFill} ifelse +% +/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont +dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall +currentdict end definefont pop +% +% Encoding for ISO-8859-1 (also called Latin1) +% +/reencodeISO { +dup dup findfont dup length dict begin +{ 1 index /FID ne { def }{ pop pop } ifelse } forall +currentdict /CharStrings known { + CharStrings /Idieresis known { + /Encoding ISOLatin1Encoding def } if +} if +currentdict end definefont +} def +/ISOLatin1Encoding [ +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright +/parenleft/parenright/asterisk/plus/comma/minus/period/slash +/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon +/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N +/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright +/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m +/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve +/dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut +/ogonek/caron/space/exclamdown/cent/sterling/currency/yen/brokenbar +/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot +/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior +/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine +/guillemotright/onequarter/onehalf/threequarters/questiondown +/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla +/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex +/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis +/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute +/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis +/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave +/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex +/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis +/yacute/thorn/ydieresis +] def +/MFshow { + { dup 5 get 3 ge + { 5 get 3 eq {gsave} {grestore} ifelse } + {dup dup 0 get findfont exch 1 get scalefont setfont + [ currentpoint ] exch dup 2 get 0 exch R dup 5 get 2 ne {dup dup 6 + get exch 4 get {Gshow} {stringwidth pop 0 R} ifelse }if dup 5 get 0 eq + {dup 3 get {2 get neg 0 exch R pop} {pop aload pop M} ifelse} {dup 5 + get 1 eq {dup 2 get exch dup 3 get exch 6 get stringwidth pop -2 div + dup 0 R} {dup 6 get stringwidth pop -2 div 0 R 6 get + show 2 index {aload pop M neg 3 -1 roll neg R pop pop} {pop pop pop + pop aload pop M} ifelse }ifelse }ifelse } + ifelse } + forall} def +/Gswidth {dup type /stringtype eq {stringwidth} {pop (n) stringwidth} ifelse} def +/MFwidth {0 exch { dup 5 get 3 ge { 5 get 3 eq { 0 } { pop } ifelse } + {dup 3 get{dup dup 0 get findfont exch 1 get scalefont setfont + 6 get Gswidth pop add} {pop} ifelse} ifelse} forall} def +/MLshow { currentpoint stroke M + 0 exch R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MRshow { currentpoint stroke M + exch dup MFwidth neg 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MCshow { currentpoint stroke M + exch dup MFwidth -2 div 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/XYsave { [( ) 1 2 true false 3 ()] } bind def +/XYrestore { [( ) 1 2 true false 4 ()] } bind def +/Helvetica reencodeISO def +Level1 SuppressPDFMark or +{} { +/SDict 10 dict def +systemdict /pdfmark known not { + userdict /pdfmark systemdict /cleartomark get put +} if +SDict begin [ + /Title () + /Subject (gnuplot plot) + /Creator (gnuplot 4.6 patchlevel 6) + /Author (afanfakh) +% /Producer (gnuplot) +% /Keywords () + /CreationDate (Thu Oct 22 17:45:05 2015) + /DOCINFO pdfmark +end +} ifelse +end +%%EndProlog +%%Page: 1 1 +gnudict begin +gsave +doclip +50 50 translate +0.100 0.100 scale +0 setgray +newpath +(Helvetica) findfont 110 scalefont setfont +BackgroundColor 0 lt 3 1 roll 0 lt exch 0 lt or or not {gsave BackgroundColor C clippath fill grestore} if +1.000 UL +LTb +473 352 M +63 0 V +4305 0 R +-63 0 V +stroke +407 352 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 0)] +] -50.0 MRshow +1.000 UL +LTb +473 430 M +31 0 V +4337 0 R +-31 0 V +473 508 M +31 0 V +4337 0 R +-31 0 V +473 586 M +31 0 V +4337 0 R +-31 0 V +473 664 M +31 0 V +4337 0 R +-31 0 V +473 742 M +63 0 V +4305 0 R +-63 0 V +stroke +407 742 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 5)] +] -50.0 MRshow +1.000 UL +LTb +473 819 M +31 0 V +4337 0 R +-31 0 V +473 897 M +31 0 V +4337 0 R +-31 0 V +473 975 M +31 0 V +4337 0 R +-31 0 V +473 1053 M +31 0 V +4337 0 R +-31 0 V +473 1131 M +63 0 V +4305 0 R +-63 0 V +stroke +407 1131 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 10)] +] -50.0 MRshow +1.000 UL +LTb +473 1209 M +31 0 V +4337 0 R +-31 0 V +473 1287 M +31 0 V +4337 0 R +-31 0 V +473 1365 M +31 0 V +4337 0 R +-31 0 V +473 1443 M +31 0 V +4337 0 R +-31 0 V +473 1521 M +63 0 V +4305 0 R +-63 0 V +stroke +407 1521 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 15)] +] -50.0 MRshow +1.000 UL +LTb +473 1598 M +31 0 V +4337 0 R +-31 0 V +473 1676 M +31 0 V +4337 0 R +-31 0 V +473 1754 M +31 0 V +4337 0 R +-31 0 V +473 1832 M +31 0 V +4337 0 R +-31 0 V +473 1910 M +63 0 V +4305 0 R +-63 0 V +stroke +407 1910 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 20)] +] -50.0 MRshow +1.000 UL +LTb +473 1988 M +31 0 V +4337 0 R +-31 0 V +473 2066 M +31 0 V +4337 0 R +-31 0 V +473 2144 M +31 0 V +4337 0 R +-31 0 V +473 2222 M +31 0 V +4337 0 R +-31 0 V +473 2300 M +63 0 V +4305 0 R +-63 0 V +stroke +407 2300 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 25)] +] -50.0 MRshow +1.000 UL +LTb +473 2377 M +31 0 V +4337 0 R +-31 0 V +473 2455 M +31 0 V +4337 0 R +-31 0 V +473 2533 M +31 0 V +4337 0 R +-31 0 V +473 2611 M +31 0 V +4337 0 R +-31 0 V +473 2689 M +63 0 V +4305 0 R +-63 0 V +stroke +407 2689 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 30)] +] -50.0 MRshow +1.000 UL +LTb +473 2767 M +31 0 V +4337 0 R +-31 0 V +473 2845 M +31 0 V +4337 0 R +-31 0 V +473 2923 M +31 0 V +4337 0 R +-31 0 V +473 3001 M +31 0 V +4337 0 R +-31 0 V +473 3079 M +63 0 V +4305 0 R +-63 0 V +stroke +407 3079 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 35)] +] -50.0 MRshow +1.000 UL +LTb +473 3156 M +31 0 V +4337 0 R +-31 0 V +473 3234 M +31 0 V +4337 0 R +-31 0 V +473 3312 M +31 0 V +4337 0 R +-31 0 V +473 3390 M +31 0 V +4337 0 R +-31 0 V +473 3468 M +63 0 V +4305 0 R +-63 0 V +stroke +407 3468 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 40)] +] -50.0 MRshow +1.000 UL +LTb +1019 352 M +0 63 V +0 3053 R +0 -63 V +stroke +1019 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (CG)] +] -50.0 MCshow +1.000 UL +LTb +1565 352 M +0 63 V +0 3053 R +0 -63 V +stroke +1565 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (MG)] +] -50.0 MCshow +1.000 UL +LTb +2111 352 M +0 63 V +0 3053 R +0 -63 V +stroke +2111 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (EP)] +] -50.0 MCshow +1.000 UL +LTb +2657 352 M +0 63 V +0 3053 R +0 -63 V +stroke +2657 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (LU)] +] -50.0 MCshow +1.000 UL +LTb +3203 352 M +0 63 V +0 3053 R +0 -63 V +stroke +3203 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (BT)] +] -50.0 MCshow +1.000 UL +LTb +3749 352 M +0 63 V +0 3053 R +0 -63 V +stroke +3749 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (SP)] +] -50.0 MCshow +1.000 UL +LTb +4295 352 M +0 63 V +0 3053 R +0 -63 V +stroke +4295 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (FT)] +] -50.0 MCshow +1.000 UL +LTb +1.000 UL +LTb +473 3468 N +473 352 L +4368 0 V +0 3116 V +-4368 0 V +Z stroke +LCb setrgbcolor +88 1910 M +currentpoint gsave translate -270 rotate 0 0 moveto +[ [(Helvetica) 180.0 0.0 true true 0 (Tradeoff distance)] +] -60.0 MCshow +grestore +LTb +LCb setrgbcolor +2657 77 M +[ [(Helvetica) 180.0 0.0 true true 0 (NAS parallel benchmarks)] +] -60.0 MCshow +LTb +1.000 UP +1.000 UL +LTb +% Begin plot #1 +1.000 UL +LT0 +0.10 0.10 0.44 C LCb setrgbcolor +2362 3246 M +[ [(Helvetica) 140.0 0.0 true true 0 (One core per node scenario)] +] -46.7 MRshow +LT0 +0.10 0.10 0.44 C 1.000 2428 3213 327 66 BoxColFill +0.10 0.10 0.44 C 1.000 964 352 111 568 BoxColFill +0.10 0.10 0.44 C 1.000 1510 352 111 919 BoxColFill +0.10 0.10 0.44 C 1.000 2056 352 111 755 BoxColFill +0.10 0.10 0.44 C 1.000 2602 352 111 1184 BoxColFill +0.10 0.10 0.44 C 1.000 3148 352 111 1033 BoxColFill +0.10 0.10 0.44 C 1.000 3694 352 111 2938 BoxColFill +0.10 0.10 0.44 C 1.000 4240 352 111 957 BoxColFill +% End plot #1 +% Begin plot #2 +1.000 UL +LT1 +0.94 0.50 0.50 C LCb setrgbcolor +2362 3114 M +[ [(Helvetica) 140.0 0.0 true true 0 (Multicores per node scenario)] +] -46.7 MRshow +LT1 +0.94 0.50 0.50 C 1.000 2428 3081 327 66 BoxColFill +0.94 0.50 0.50 C 1.000 1101 352 110 1106 BoxColFill +0.94 0.50 0.50 C 1.000 1647 352 110 1256 BoxColFill +0.94 0.50 0.50 C 1.000 2193 352 110 85 BoxColFill +0.94 0.50 0.50 C 1.000 2739 352 110 1755 BoxColFill +0.94 0.50 0.50 C 1.000 3285 352 110 1307 BoxColFill +0.94 0.50 0.50 C 1.000 3831 352 110 2569 BoxColFill +0.94 0.50 0.50 C 1.000 4377 352 110 1540 BoxColFill +% End plot #2 +1.000 UL +LTb +473 3468 N +473 352 L +4368 0 V +0 3116 V +-4368 0 V +Z stroke +1.000 UP +1.000 UL +LTb +stroke +grestore +end +showpage +%%Trailer +%%DocumentFonts: Helvetica +%%Pages: 1 diff --git a/fig/ch3/dist_pow-eps-converted-to.pdf b/fig/ch3/dist_pow-eps-converted-to.pdf new file mode 100644 index 0000000000000000000000000000000000000000..7b069ab9310f901ac771946ec7cf09cf42e93631 GIT binary patch literal 7789 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 SfyhBb96=AEu5RIIiTEF+;6RiB literal 0 HcmV?d00001 diff --git a/fig/ch3/dist_pow.eps b/fig/ch3/dist_pow.eps new file mode 100644 index 0000000..488d6ff --- /dev/null +++ b/fig/ch3/dist_pow.eps @@ -0,0 +1,906 @@ +%!PS-Adobe-2.0 +%%Creator: gnuplot 4.6 patchlevel 6 +%%CreationDate: Thu Oct 22 12:45:35 2015 +%%DocumentFonts: (atend) +%%BoundingBox: 50 50 554 410 +%%Orientation: Portrait +%%Pages: (atend) +%%EndComments +%%BeginProlog +/gnudict 256 dict def +gnudict begin +% +% The following true/false flags may be edited by hand if desired. +% The unit line width and grayscale image gamma correction may also be changed. +% +/Color false def +/Blacktext false def +/Solid false def +/Dashlength 1 def +/Landscape false def +/Level1 false def +/Rounded false def +/ClipToBoundingBox false def +/SuppressPDFMark false def +/TransparentPatterns false def +/gnulinewidth 5.000 def +/userlinewidth gnulinewidth def +/Gamma 1.0 def +/BackgroundColor {-1.000 -1.000 -1.000} def +% +/vshift -36 def +/dl1 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if +} def +/dl2 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul add } if +} def +/hpt_ 31.5 def +/vpt_ 31.5 def +/hpt hpt_ def +/vpt vpt_ def +/doclip { + ClipToBoundingBox { + newpath 50 50 moveto 554 50 lineto 554 410 lineto 50 410 lineto closepath + clip + } if +} def +% +% Gnuplot Prolog Version 4.6 (September 2012) +% +%/SuppressPDFMark true def +% +/M {moveto} bind def +/L {lineto} bind def +/R {rmoveto} bind def +/V {rlineto} bind def +/N {newpath moveto} bind def +/Z {closepath} bind def +/C {setrgbcolor} bind def +/f {rlineto fill} bind def +/g {setgray} bind def +/Gshow {show} def % May be redefined later in the file to support UTF-8 +/vpt2 vpt 2 mul def +/hpt2 hpt 2 mul def +/Lshow {currentpoint stroke M 0 vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Rshow {currentpoint stroke M dup stringwidth pop neg vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def + /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def +/DL {Color {setrgbcolor Solid {pop []} if 0 setdash} + {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse} def +/BL {stroke userlinewidth 2 mul setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/AL {stroke userlinewidth 2 div setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/UL {dup gnulinewidth mul /userlinewidth exch def + dup 1 lt {pop 1} if 10 mul /udl exch def} def +/PL {stroke userlinewidth setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +3.8 setmiterlimit +% Default Line colors +/LCw {1 1 1} def +/LCb {0 0 0} def +/LCa {0 0 0} def +/LC0 {1 0 0} def +/LC1 {0 1 0} def +/LC2 {0 0 1} def +/LC3 {1 0 1} def +/LC4 {0 1 1} def +/LC5 {1 1 0} def +/LC6 {0 0 0} def +/LC7 {1 0.3 0} def +/LC8 {0.5 0.5 0.5} def +% Default Line Types +/LTw {PL [] 1 setgray} def +/LTb {BL [] LCb DL} def +/LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def +/LT0 {PL [] LC0 DL} def +/LT1 {PL [4 dl1 2 dl2] LC1 DL} def +/LT2 {PL [2 dl1 3 dl2] LC2 DL} def +/LT3 {PL [1 dl1 1.5 dl2] LC3 DL} def +/LT4 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def +/LT5 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC5 DL} def +/LT6 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC6 DL} def +/LT7 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC7 DL} def +/LT8 {PL [2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 4 dl2] LC8 DL} def +/Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def +/Dia {stroke [] 0 setdash 2 copy vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke + Pnt} def +/Pls {stroke [] 0 setdash vpt sub M 0 vpt2 V + currentpoint stroke M + hpt neg vpt neg R hpt2 0 V stroke + } def +/Box {stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke + Pnt} def +/Crs {stroke [] 0 setdash exch hpt sub exch vpt add M + hpt2 vpt2 neg V currentpoint stroke M + hpt2 neg 0 R hpt2 vpt2 V stroke} def +/TriU {stroke [] 0 setdash 2 copy vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke + Pnt} def +/Star {2 copy Pls Crs} def +/BoxF {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath fill} def +/TriUF {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath fill} def +/TriD {stroke [] 0 setdash 2 copy vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke + Pnt} def +/TriDF {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath fill} def +/DiaF {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath fill} def +/Pent {stroke [] 0 setdash 2 copy gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore Pnt} def +/PentF {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath fill grestore} def +/Circle {stroke [] 0 setdash 2 copy + hpt 0 360 arc stroke Pnt} def +/CircleF {stroke [] 0 setdash hpt 0 360 arc fill} def +/C0 {BL [] 0 setdash 2 copy moveto vpt 90 450 arc} bind def +/C1 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + vpt 0 360 arc closepath} bind def +/C2 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C3 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C4 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C5 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc + 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc} bind def +/C6 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C7 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C8 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C9 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 450 arc closepath fill + vpt 0 360 arc closepath} bind def +/C10 {BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill + 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C11 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C12 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C13 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C14 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 360 arc closepath fill + vpt 0 360 arc} bind def +/C15 {BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/Rec {newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto + neg 0 rlineto closepath} bind def +/Square {dup Rec} bind def +/Bsquare {vpt sub exch vpt sub exch vpt2 Square} bind def +/S0 {BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare} bind def +/S1 {BL [] 0 setdash 2 copy vpt Square fill Bsquare} bind def +/S2 {BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S3 {BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare} bind def +/S4 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S5 {BL [] 0 setdash 2 copy 2 copy vpt Square fill + exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S6 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S7 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S8 {BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare} bind def +/S9 {BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S10 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill + Bsquare} bind def +/S11 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill + Bsquare} bind def +/S12 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare} bind def +/S13 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S14 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S15 {BL [] 0 setdash 2 copy Bsquare fill Bsquare} bind def +/D0 {gsave translate 45 rotate 0 0 S0 stroke grestore} bind def +/D1 {gsave translate 45 rotate 0 0 S1 stroke grestore} bind def +/D2 {gsave translate 45 rotate 0 0 S2 stroke grestore} bind def +/D3 {gsave translate 45 rotate 0 0 S3 stroke grestore} bind def +/D4 {gsave translate 45 rotate 0 0 S4 stroke grestore} bind def +/D5 {gsave translate 45 rotate 0 0 S5 stroke grestore} bind def +/D6 {gsave translate 45 rotate 0 0 S6 stroke grestore} bind def +/D7 {gsave translate 45 rotate 0 0 S7 stroke grestore} bind def +/D8 {gsave translate 45 rotate 0 0 S8 stroke grestore} bind def +/D9 {gsave translate 45 rotate 0 0 S9 stroke grestore} bind def +/D10 {gsave translate 45 rotate 0 0 S10 stroke grestore} bind def +/D11 {gsave translate 45 rotate 0 0 S11 stroke grestore} bind def +/D12 {gsave translate 45 rotate 0 0 S12 stroke grestore} bind def +/D13 {gsave translate 45 rotate 0 0 S13 stroke grestore} bind def +/D14 {gsave translate 45 rotate 0 0 S14 stroke grestore} bind def +/D15 {gsave translate 45 rotate 0 0 S15 stroke grestore} bind def +/DiaE {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke} def +/BoxE {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke} def +/TriUE {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke} def +/TriDE {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke} def +/PentE {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore} def +/CircE {stroke [] 0 setdash + hpt 0 360 arc stroke} def +/Opaque {gsave closepath 1 setgray fill grestore 0 setgray closepath} def +/DiaW {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V Opaque stroke} def +/BoxW {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V Opaque stroke} def +/TriUW {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V Opaque stroke} def +/TriDW {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V Opaque stroke} def +/PentW {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + Opaque stroke grestore} def +/CircW {stroke [] 0 setdash + hpt 0 360 arc Opaque stroke} def +/BoxFill {gsave Rec 1 setgray fill grestore} def +/Density { + /Fillden exch def + currentrgbcolor + /ColB exch def /ColG exch def /ColR exch def + /ColR ColR Fillden mul Fillden sub 1 add def + /ColG ColG Fillden mul Fillden sub 1 add def + /ColB ColB Fillden mul Fillden sub 1 add def + ColR ColG ColB setrgbcolor} def +/BoxColFill {gsave Rec PolyFill} def +/PolyFill {gsave Density fill grestore grestore} def +/h {rlineto rlineto rlineto gsave closepath fill grestore} bind def +% +% PostScript Level 1 Pattern Fill routine for rectangles +% Usage: x y w h s a XX PatternFill +% x,y = lower left corner of box to be filled +% w,h = width and height of box +% a = angle in degrees between lines and x-axis +% XX = 0/1 for no/yes cross-hatch +% +/PatternFill {gsave /PFa [ 9 2 roll ] def + PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate + PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse + clip + currentlinewidth 0.5 mul setlinewidth + /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def + 0 0 M PFa 5 get rotate PFs -2 div dup translate + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 M 0 PFs V} for + 0 PFa 6 get ne { + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 2 1 roll M PFs 0 V} for + } if + stroke grestore} def +% +/languagelevel where + {pop languagelevel} {1} ifelse + 2 lt + {/InterpretLevel1 true def} + {/InterpretLevel1 Level1 def} + ifelse +% +% PostScript level 2 pattern fill definitions +% +/Level2PatternFill { +/Tile8x8 {/PaintType 2 /PatternType 1 /TilingType 1 /BBox [0 0 8 8] /XStep 8 /YStep 8} + bind def +/KeepColor {currentrgbcolor [/Pattern /DeviceRGB] setcolorspace} bind def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke} +>> matrix makepattern +/Pat1 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke + 0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke} +>> matrix makepattern +/Pat2 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L + 8 8 L 8 0 L 0 0 L fill} +>> matrix makepattern +/Pat3 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L + 0 12 M 12 0 L stroke} +>> matrix makepattern +/Pat4 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L + 0 -4 M 12 8 L stroke} +>> matrix makepattern +/Pat5 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L + 0 12 M 8 -4 L 4 12 M 10 0 L stroke} +>> matrix makepattern +/Pat6 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L + 0 -4 M 8 12 L 4 -4 M 10 8 L stroke} +>> matrix makepattern +/Pat7 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L + 12 0 M -4 8 L 12 4 M 0 10 L stroke} +>> matrix makepattern +/Pat8 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L + -4 0 M 12 8 L -4 4 M 8 10 L stroke} +>> matrix makepattern +/Pat9 exch def +/Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def +/Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def +/Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def +/Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def +/Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def +/Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def +/Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def +} def +% +% +%End of PostScript Level 2 code +% +/PatternBgnd { + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse +} def +% +% Substitute for Level 2 pattern fill codes with +% grayscale if Level 2 support is not selected. +% +/Level1PatternFill { +/Pattern1 {0.250 Density} bind def +/Pattern2 {0.500 Density} bind def +/Pattern3 {0.750 Density} bind def +/Pattern4 {0.125 Density} bind def +/Pattern5 {0.375 Density} bind def +/Pattern6 {0.625 Density} bind def +/Pattern7 {0.875 Density} bind def +} def +% +% Now test for support of Level 2 code +% +Level1 {Level1PatternFill} {Level2PatternFill} ifelse +% +/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont +dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall +currentdict end definefont pop +% +% Encoding for ISO-8859-1 (also called Latin1) +% +/reencodeISO { +dup dup findfont dup length dict begin +{ 1 index /FID ne { def }{ pop pop } ifelse } forall +currentdict /CharStrings known { + CharStrings /Idieresis known { + /Encoding ISOLatin1Encoding def } if +} if +currentdict end definefont +} def +/ISOLatin1Encoding [ +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright +/parenleft/parenright/asterisk/plus/comma/minus/period/slash +/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon +/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N +/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright +/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m +/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve +/dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut +/ogonek/caron/space/exclamdown/cent/sterling/currency/yen/brokenbar +/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot +/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior +/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine +/guillemotright/onequarter/onehalf/threequarters/questiondown +/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla +/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex +/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis +/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute +/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis +/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave +/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex +/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis +/yacute/thorn/ydieresis +] def +/MFshow { + { dup 5 get 3 ge + { 5 get 3 eq {gsave} {grestore} ifelse } + {dup dup 0 get findfont exch 1 get scalefont setfont + [ currentpoint ] exch dup 2 get 0 exch R dup 5 get 2 ne {dup dup 6 + get exch 4 get {Gshow} {stringwidth pop 0 R} ifelse }if dup 5 get 0 eq + {dup 3 get {2 get neg 0 exch R pop} {pop aload pop M} ifelse} {dup 5 + get 1 eq {dup 2 get exch dup 3 get exch 6 get stringwidth pop -2 div + dup 0 R} {dup 6 get stringwidth pop -2 div 0 R 6 get + show 2 index {aload pop M neg 3 -1 roll neg R pop pop} {pop pop pop + pop aload pop M} ifelse }ifelse }ifelse } + ifelse } + forall} def +/Gswidth {dup type /stringtype eq {stringwidth} {pop (n) stringwidth} ifelse} def +/MFwidth {0 exch { dup 5 get 3 ge { 5 get 3 eq { 0 } { pop } ifelse } + {dup 3 get{dup dup 0 get findfont exch 1 get scalefont setfont + 6 get Gswidth pop add} {pop} ifelse} ifelse} forall} def +/MLshow { currentpoint stroke M + 0 exch R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MRshow { currentpoint stroke M + exch dup MFwidth neg 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MCshow { currentpoint stroke M + exch dup MFwidth -2 div 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/XYsave { [( ) 1 2 true false 3 ()] } bind def +/XYrestore { [( ) 1 2 true false 4 ()] } bind def +/Helvetica reencodeISO def +Level1 SuppressPDFMark or +{} { +/SDict 10 dict def +systemdict /pdfmark known not { + userdict /pdfmark systemdict /cleartomark get put +} if +SDict begin [ + /Title () + /Subject (gnuplot plot) + /Creator (gnuplot 4.6 patchlevel 6) + /Author (afanfakh) +% /Producer (gnuplot) +% /Keywords () + /CreationDate (Thu Oct 22 12:45:35 2015) + /DOCINFO pdfmark +end +} ifelse +end +%%EndProlog +%%Page: 1 1 +gnudict begin +gsave +doclip +50 50 translate +0.100 0.100 scale +0 setgray +newpath +(Helvetica) findfont 110 scalefont setfont +BackgroundColor 0 lt 3 1 roll 0 lt exch 0 lt or or not {gsave BackgroundColor C clippath fill grestore} if +1.000 UL +LTb +473 352 M +63 0 V +4305 0 R +-63 0 V +stroke +407 352 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 0)] +] -50.0 MRshow +1.000 UL +LTb +473 430 M +31 0 V +4337 0 R +-31 0 V +473 508 M +31 0 V +4337 0 R +-31 0 V +473 586 M +31 0 V +4337 0 R +-31 0 V +473 664 M +31 0 V +4337 0 R +-31 0 V +473 742 M +63 0 V +4305 0 R +-63 0 V +stroke +407 742 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 5)] +] -50.0 MRshow +1.000 UL +LTb +473 819 M +31 0 V +4337 0 R +-31 0 V +473 897 M +31 0 V +4337 0 R +-31 0 V +473 975 M +31 0 V +4337 0 R +-31 0 V +473 1053 M +31 0 V +4337 0 R +-31 0 V +473 1131 M +63 0 V +4305 0 R +-63 0 V +stroke +407 1131 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 10)] +] -50.0 MRshow +1.000 UL +LTb +473 1209 M +31 0 V +4337 0 R +-31 0 V +473 1287 M +31 0 V +4337 0 R +-31 0 V +473 1365 M +31 0 V +4337 0 R +-31 0 V +473 1443 M +31 0 V +4337 0 R +-31 0 V +473 1521 M +63 0 V +4305 0 R +-63 0 V +stroke +407 1521 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 15)] +] -50.0 MRshow +1.000 UL +LTb +473 1598 M +31 0 V +4337 0 R +-31 0 V +473 1676 M +31 0 V +4337 0 R +-31 0 V +473 1754 M +31 0 V +4337 0 R +-31 0 V +473 1832 M +31 0 V +4337 0 R +-31 0 V +473 1910 M +63 0 V +4305 0 R +-63 0 V +stroke +407 1910 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 20)] +] -50.0 MRshow +1.000 UL +LTb +473 1988 M +31 0 V +4337 0 R +-31 0 V +473 2066 M +31 0 V +4337 0 R +-31 0 V +473 2144 M +31 0 V +4337 0 R +-31 0 V +473 2222 M +31 0 V +4337 0 R +-31 0 V +473 2300 M +63 0 V +4305 0 R +-63 0 V +stroke +407 2300 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 25)] +] -50.0 MRshow +1.000 UL +LTb +473 2377 M +31 0 V +4337 0 R +-31 0 V +473 2455 M +31 0 V +4337 0 R +-31 0 V +473 2533 M +31 0 V +4337 0 R +-31 0 V +473 2611 M +31 0 V +4337 0 R +-31 0 V +473 2689 M +63 0 V +4305 0 R +-63 0 V +stroke +407 2689 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 30)] +] -50.0 MRshow +1.000 UL +LTb +473 2767 M +31 0 V +4337 0 R +-31 0 V +473 2845 M +31 0 V +4337 0 R +-31 0 V +473 2923 M +31 0 V +4337 0 R +-31 0 V +473 3001 M +31 0 V +4337 0 R +-31 0 V +473 3079 M +63 0 V +4305 0 R +-63 0 V +stroke +407 3079 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 35)] +] -50.0 MRshow +1.000 UL +LTb +473 3156 M +31 0 V +4337 0 R +-31 0 V +473 3234 M +31 0 V +4337 0 R +-31 0 V +473 3312 M +31 0 V +4337 0 R +-31 0 V +473 3390 M +31 0 V +4337 0 R +-31 0 V +473 3468 M +63 0 V +4305 0 R +-63 0 V +stroke +407 3468 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 40)] +] -50.0 MRshow +1.000 UL +LTb +1019 352 M +0 63 V +0 3053 R +0 -63 V +stroke +1019 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (CG)] +] -50.0 MCshow +1.000 UL +LTb +1565 352 M +0 63 V +0 3053 R +0 -63 V +stroke +1565 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (MG)] +] -50.0 MCshow +1.000 UL +LTb +2111 352 M +0 63 V +0 3053 R +0 -63 V +stroke +2111 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (EP)] +] -50.0 MCshow +1.000 UL +LTb +2657 352 M +0 63 V +0 3053 R +0 -63 V +stroke +2657 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (LU)] +] -50.0 MCshow +1.000 UL +LTb +3203 352 M +0 63 V +0 3053 R +0 -63 V +stroke +3203 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (BT)] +] -50.0 MCshow +1.000 UL +LTb +3749 352 M +0 63 V +0 3053 R +0 -63 V +stroke +3749 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (SP)] +] -50.0 MCshow +1.000 UL +LTb +4295 352 M +0 63 V +0 3053 R +0 -63 V +stroke +4295 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (FT)] +] -50.0 MCshow +1.000 UL +LTb +1.000 UL +LTb +473 3468 N +473 352 L +4368 0 V +0 3116 V +-4368 0 V +Z stroke +LCb setrgbcolor +88 1910 M +currentpoint gsave translate -270 rotate 0 0 moveto +[ [(Helvetica) 180.0 0.0 true true 0 (Tradeoff distance)] +] -60.0 MCshow +grestore +LTb +LCb setrgbcolor +2657 77 M +[ [(Helvetica) 180.0 0.0 true true 0 (NAS parallel benchmarks)] +] -60.0 MCshow +LTb +1.000 UP +1.000 UL +LTb +% Begin plot #1 +1.000 UL +LT0 +0.10 0.10 0.44 C LCb setrgbcolor +1761 3246 M +[ [(Helvetica) 140.0 0.0 true true 0 (10% static power)] +] -46.7 MRshow +LT0 +0.10 0.10 0.44 C 1.000 1827 3213 327 66 BoxColFill +0.10 0.10 0.44 C 1.000 921 352 88 2178 BoxColFill +0.10 0.10 0.44 C 1.000 1467 352 88 2060 BoxColFill +0.10 0.10 0.44 C 1.000 2013 352 88 1905 BoxColFill +0.10 0.10 0.44 C 1.000 2559 352 88 2335 BoxColFill +0.10 0.10 0.44 C 1.000 3105 352 88 2705 BoxColFill +0.10 0.10 0.44 C 1.000 3651 352 88 2692 BoxColFill +0.10 0.10 0.44 C 1.000 4197 352 88 2534 BoxColFill +% End plot #1 +% Begin plot #2 +1.000 UL +LT1 +0.24 0.70 0.44 C LCb setrgbcolor +1761 3114 M +[ [(Helvetica) 140.0 0.0 true true 0 (20% static power)] +] -46.7 MRshow +LT1 +0.24 0.70 0.44 C 1.000 1827 3081 327 66 BoxColFill +0.24 0.70 0.44 C 1.000 1030 352 88 1855 BoxColFill +0.24 0.70 0.44 C 1.000 1576 352 88 2234 BoxColFill +0.24 0.70 0.44 C 1.000 2122 352 88 1856 BoxColFill +0.24 0.70 0.44 C 1.000 2668 352 88 1614 BoxColFill +0.24 0.70 0.44 C 1.000 3214 352 88 2588 BoxColFill +0.24 0.70 0.44 C 1.000 3760 352 88 2516 BoxColFill +0.24 0.70 0.44 C 1.000 4306 352 88 1797 BoxColFill +% End plot #2 +% Begin plot #3 +1.000 UL +LT0 +1.00 0.71 0.76 C LCb setrgbcolor +1761 2982 M +[ [(Helvetica) 140.0 0.0 true true 0 (30% static power)] +] -46.7 MRshow +LT0 +1.00 0.71 0.76 C 1.000 1827 2949 327 66 BoxColFill +1.00 0.71 0.76 C 1.000 1139 352 88 266 BoxColFill +1.00 0.71 0.76 C 1.000 1685 352 88 1018 BoxColFill +1.00 0.71 0.76 C 1.000 2231 352 88 1441 BoxColFill +1.00 0.71 0.76 C 1.000 2777 352 88 359 BoxColFill +1.00 0.71 0.76 C 1.000 3323 352 88 1466 BoxColFill +1.00 0.71 0.76 C 1.000 3869 352 88 1074 BoxColFill +1.00 0.71 0.76 C 1.000 4415 352 88 650 BoxColFill +% End plot #3 +1.000 UL +LTb +473 3468 N +473 352 L +4368 0 V +0 3116 V +-4368 0 V +Z stroke +1.000 UP +1.000 UL +LTb +stroke +grestore +end +showpage +%%Trailer +%%DocumentFonts: Helvetica +%%Pages: 1 diff --git a/fig/ch3/edp_dist-eps-converted-to.pdf b/fig/ch3/edp_dist-eps-converted-to.pdf new file mode 100644 index 0000000000000000000000000000000000000000..afdfc821a5437a681a455eb95378ff325b1afc0f GIT binary patch literal 13151 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 matrix makepattern +/Pat1 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke + 0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke} +>> matrix makepattern +/Pat2 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L + 8 8 L 8 0 L 0 0 L fill} +>> matrix makepattern +/Pat3 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L + 0 12 M 12 0 L stroke} +>> matrix makepattern +/Pat4 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L + 0 -4 M 12 8 L stroke} +>> matrix makepattern +/Pat5 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L + 0 12 M 8 -4 L 4 12 M 10 0 L stroke} +>> matrix makepattern +/Pat6 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L + 0 -4 M 8 12 L 4 -4 M 10 8 L stroke} +>> matrix makepattern +/Pat7 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L + 12 0 M -4 8 L 12 4 M 0 10 L stroke} +>> matrix makepattern +/Pat8 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L + -4 0 M 12 8 L -4 4 M 8 10 L stroke} +>> matrix makepattern +/Pat9 exch def +/Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def +/Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def +/Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def +/Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def +/Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def +/Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def +/Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def +} def +% +% +%End of PostScript Level 2 code +% +/PatternBgnd { + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse +} def +% +% Substitute for Level 2 pattern fill codes with +% grayscale if Level 2 support is not selected. +% +/Level1PatternFill { +/Pattern1 {0.250 Density} bind def +/Pattern2 {0.500 Density} bind def +/Pattern3 {0.750 Density} bind def +/Pattern4 {0.125 Density} bind def +/Pattern5 {0.375 Density} bind def +/Pattern6 {0.625 Density} bind def +/Pattern7 {0.875 Density} bind def +} def +% +% Now test for support of Level 2 code +% +Level1 {Level1PatternFill} {Level2PatternFill} ifelse +% +/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont +dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall +currentdict end definefont pop +% +% Encoding for ISO-8859-1 (also called Latin1) +% +/reencodeISO { +dup dup findfont dup length dict begin +{ 1 index /FID ne { def }{ pop pop } ifelse } forall +currentdict /CharStrings known { + CharStrings /Idieresis known { + /Encoding ISOLatin1Encoding def } if +} if +currentdict end definefont +} def +/ISOLatin1Encoding [ +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright +/parenleft/parenright/asterisk/plus/comma/minus/period/slash +/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon +/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N +/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright +/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m +/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve +/dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut +/ogonek/caron/space/exclamdown/cent/sterling/currency/yen/brokenbar +/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot +/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior +/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine +/guillemotright/onequarter/onehalf/threequarters/questiondown +/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla +/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex +/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis +/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute +/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis +/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave +/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex +/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis +/yacute/thorn/ydieresis +] def +/MFshow { + { dup 5 get 3 ge + { 5 get 3 eq {gsave} {grestore} ifelse } + {dup dup 0 get findfont exch 1 get scalefont setfont + [ currentpoint ] exch dup 2 get 0 exch R dup 5 get 2 ne {dup dup 6 + get exch 4 get {Gshow} {stringwidth pop 0 R} ifelse }if dup 5 get 0 eq + {dup 3 get {2 get neg 0 exch R pop} {pop aload pop M} ifelse} {dup 5 + get 1 eq {dup 2 get exch dup 3 get exch 6 get stringwidth pop -2 div + dup 0 R} {dup 6 get stringwidth pop -2 div 0 R 6 get + show 2 index {aload pop M neg 3 -1 roll neg R pop pop} {pop pop pop + pop aload pop M} ifelse }ifelse }ifelse } + ifelse } + forall} def +/Gswidth {dup type /stringtype eq {stringwidth} {pop (n) stringwidth} ifelse} def +/MFwidth {0 exch { dup 5 get 3 ge { 5 get 3 eq { 0 } { pop } ifelse } + {dup 3 get{dup dup 0 get findfont exch 1 get scalefont setfont + 6 get Gswidth pop add} {pop} ifelse} ifelse} forall} def +/MLshow { currentpoint stroke M + 0 exch R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MRshow { currentpoint stroke M + exch dup MFwidth neg 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MCshow { currentpoint stroke M + exch dup MFwidth -2 div 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/XYsave { [( ) 1 2 true false 3 ()] } bind def +/XYrestore { [( ) 1 2 true false 4 ()] } bind def +/Helvetica reencodeISO def +Level1 SuppressPDFMark or +{} { +/SDict 10 dict def +systemdict /pdfmark known not { + userdict /pdfmark systemdict /cleartomark get put +} if +SDict begin [ + /Title () + /Subject (gnuplot plot) + /Creator (gnuplot 4.6 patchlevel 6) + /Author (afanfakh) +% /Producer (gnuplot) +% /Keywords () + /CreationDate (Thu Apr 21 10:02:20 2016) + /DOCINFO pdfmark +end +} ifelse +end +%%EndProlog +%%Page: 1 1 +gnudict begin +gsave +doclip +50 50 translate +0.100 0.100 scale +0 setgray +newpath +(Helvetica) findfont 110 scalefont setfont +BackgroundColor 0 lt 3 1 roll 0 lt exch 0 lt or or not {gsave BackgroundColor C clippath fill grestore} if +1.000 UL +LTb +473 352 M +63 0 V +4305 0 R +-63 0 V +stroke +407 352 M +[ [(Helvetica) 150.0 0.0 true true 0 (-10)] +] -50.0 MRshow +1.000 UL +LTb +473 414 M +31 0 V +4337 0 R +-31 0 V +473 477 M +31 0 V +4337 0 R +-31 0 V +473 539 M +31 0 V +4337 0 R +-31 0 V +473 601 M +31 0 V +4337 0 R +-31 0 V +473 664 M +63 0 V +4305 0 R +-63 0 V +stroke +407 664 M +[ [(Helvetica) 150.0 0.0 true true 0 (-5)] +] -50.0 MRshow +1.000 UL +LTb +473 726 M +31 0 V +4337 0 R +-31 0 V +473 788 M +31 0 V +4337 0 R +-31 0 V +473 851 M +31 0 V +4337 0 R +-31 0 V +473 913 M +31 0 V +4337 0 R +-31 0 V +473 975 M +63 0 V +4305 0 R +-63 0 V +stroke +407 975 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 0)] +] -50.0 MRshow +1.000 UL +LTb +473 1038 M +31 0 V +4337 0 R +-31 0 V +473 1100 M +31 0 V +4337 0 R +-31 0 V +473 1162 M +31 0 V +4337 0 R +-31 0 V +473 1224 M +31 0 V +4337 0 R +-31 0 V +473 1287 M +63 0 V +4305 0 R +-63 0 V +stroke +407 1287 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 5)] +] -50.0 MRshow +1.000 UL +LTb +473 1349 M +31 0 V +4337 0 R +-31 0 V +473 1411 M +31 0 V +4337 0 R +-31 0 V +473 1474 M +31 0 V +4337 0 R +-31 0 V +473 1536 M +31 0 V +4337 0 R +-31 0 V +473 1598 M +63 0 V +4305 0 R +-63 0 V +stroke +407 1598 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 10)] +] -50.0 MRshow +1.000 UL +LTb +473 1661 M +31 0 V +4337 0 R +-31 0 V +473 1723 M +31 0 V +4337 0 R +-31 0 V +473 1785 M +31 0 V +4337 0 R +-31 0 V +473 1848 M +31 0 V +4337 0 R +-31 0 V +473 1910 M +63 0 V +4305 0 R +-63 0 V +stroke +407 1910 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 15)] +] -50.0 MRshow +1.000 UL +LTb +473 1972 M +31 0 V +4337 0 R +-31 0 V +473 2035 M +31 0 V +4337 0 R +-31 0 V +473 2097 M +31 0 V +4337 0 R +-31 0 V +473 2159 M +31 0 V +4337 0 R +-31 0 V +473 2222 M +63 0 V +4305 0 R +-63 0 V +stroke +407 2222 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 20)] +] -50.0 MRshow +1.000 UL +LTb +473 2284 M +31 0 V +4337 0 R +-31 0 V +473 2346 M +31 0 V +4337 0 R +-31 0 V +473 2409 M +31 0 V +4337 0 R +-31 0 V +473 2471 M +31 0 V +4337 0 R +-31 0 V +473 2533 M +63 0 V +4305 0 R +-63 0 V +stroke +407 2533 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 25)] +] -50.0 MRshow +1.000 UL +LTb +473 2596 M +31 0 V +4337 0 R +-31 0 V +473 2658 M +31 0 V +4337 0 R +-31 0 V +473 2720 M +31 0 V +4337 0 R +-31 0 V +473 2782 M +31 0 V +4337 0 R +-31 0 V +473 2845 M +63 0 V +4305 0 R +-63 0 V +stroke +407 2845 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 30)] +] -50.0 MRshow +1.000 UL +LTb +473 2907 M +31 0 V +4337 0 R +-31 0 V +473 2969 M +31 0 V +4337 0 R +-31 0 V +473 3032 M +31 0 V +4337 0 R +-31 0 V +473 3094 M +31 0 V +4337 0 R +-31 0 V +473 3156 M +63 0 V +4305 0 R +-63 0 V +stroke +407 3156 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 35)] +] -50.0 MRshow +1.000 UL +LTb +473 3219 M +31 0 V +4337 0 R +-31 0 V +473 3281 M +31 0 V +4337 0 R +-31 0 V +473 3343 M +31 0 V +4337 0 R +-31 0 V +473 3406 M +31 0 V +4337 0 R +-31 0 V +473 3468 M +63 0 V +4305 0 R +-63 0 V +stroke +407 3468 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 40)] +] -50.0 MRshow +1.000 UL +LTb +1019 352 M +0 63 V +0 3053 R +0 -63 V +stroke +1019 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (CG)] +] -50.0 MCshow +1.000 UL +LTb +1565 352 M +0 63 V +0 3053 R +0 -63 V +stroke +1565 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (MG)] +] -50.0 MCshow +1.000 UL +LTb +2111 352 M +0 63 V +0 3053 R +0 -63 V +stroke +2111 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (EP)] +] -50.0 MCshow +1.000 UL +LTb +2657 352 M +0 63 V +0 3053 R +0 -63 V +stroke +2657 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (LU)] +] -50.0 MCshow +1.000 UL +LTb +3203 352 M +0 63 V +0 3053 R +0 -63 V +stroke +3203 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (BT)] +] -50.0 MCshow +1.000 UL +LTb +3749 352 M +0 63 V +0 3053 R +0 -63 V +stroke +3749 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (SP)] +] -50.0 MCshow +1.000 UL +LTb +4295 352 M +0 63 V +0 3053 R +0 -63 V +stroke +4295 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (FT)] +] -50.0 MCshow +1.000 UL +LTb +1.000 UL +LTb +473 3468 N +473 352 L +4368 0 V +0 3116 V +-4368 0 V +Z stroke +LCb setrgbcolor +88 1910 M +currentpoint gsave translate -270 rotate 0 0 moveto +[ [(Helvetica) 180.0 0.0 true true 0 (Tradeoff distance)] +] -60.0 MCshow +grestore +LTb +LCb setrgbcolor +2657 77 M +[ [(Helvetica) 180.0 0.0 true true 0 (NAS parallel benchmarks)] +] -60.0 MCshow +LTb +1.000 UP +1.000 UL +LT1 +473 975 M +4368 0 V +stroke +LTb +% Begin plot #1 +1.000 UL +LT0 +0.10 0.10 0.44 C LCb setrgbcolor +1652 3277 M +[ [(Helvetica) 140.0 0.0 true true 0 (EDP/ one site)] +] -46.7 MRshow +LT0 +0.10 0.10 0.44 C 1718 3244 327 66 40 45 2 PatternFill +0.10 0.10 0.44 C 892 667 73 309 40 45 2 PatternFill +0.10 0.10 0.44 C 1438 975 73 343 40 45 2 PatternFill +0.10 0.10 0.44 C 1984 975 73 642 40 45 2 PatternFill +0.10 0.10 0.44 C 2530 975 73 274 40 45 2 PatternFill +0.10 0.10 0.44 C 3076 975 73 385 40 45 2 PatternFill +0.10 0.10 0.44 C 3622 975 73 452 40 45 2 PatternFill +0.10 0.10 0.44 C 4168 975 73 682 40 45 2 PatternFill +% End plot #1 +% Begin plot #2 +1.000 UL +LT1 +0.10 0.10 0.44 C LCb setrgbcolor +1652 3145 M +[ [(Helvetica) 140.0 0.0 true true 0 (Maxdist/ one site)] +] -46.7 MRshow +LT1 +0.10 0.10 0.44 C 1.000 1718 3112 327 66 BoxColFill +0.10 0.10 0.44 C 1.000 983 975 73 1484 BoxColFill +0.10 0.10 0.44 C 1.000 1529 975 73 1787 BoxColFill +0.10 0.10 0.44 C 1.000 2075 975 73 1485 BoxColFill +0.10 0.10 0.44 C 1.000 2621 975 73 1292 BoxColFill +0.10 0.10 0.44 C 1.000 3167 975 73 2071 BoxColFill +0.10 0.10 0.44 C 1.000 3713 975 73 2013 BoxColFill +0.10 0.10 0.44 C 1.000 4259 975 73 1438 BoxColFill +% End plot #2 +% Begin plot #3 +1.000 UL +LT0 +0.00 0.39 0.00 C LCb setrgbcolor +1652 3013 M +[ [(Helvetica) 140.0 0.0 true true 0 (EDP/ two sites)] +] -46.7 MRshow +LT0 +0.00 0.39 0.00 C 1718 2980 327 66 80 -45 1 PatternFill +0.00 0.39 0.00 C 1074 636 73 340 80 -45 1 PatternFill +0.00 0.39 0.00 C 1620 975 73 449 80 -45 1 PatternFill +0.00 0.39 0.00 C 2166 571 73 405 80 -45 1 PatternFill +0.00 0.39 0.00 C 2712 975 73 186 80 -45 1 PatternFill +0.00 0.39 0.00 C 3258 975 73 295 80 -45 1 PatternFill +0.00 0.39 0.00 C 3804 975 73 782 80 -45 1 PatternFill +0.00 0.39 0.00 C 4350 975 73 732 80 -45 1 PatternFill +% End plot #3 +% Begin plot #4 +1.000 UL +LT3 +0.94 0.50 0.50 C LCb setrgbcolor +1652 2881 M +[ [(Helvetica) 140.0 0.0 true true 0 (Maxdist/ two sites)] +] -46.7 MRshow +LT3 +0.94 0.50 0.50 C 1.000 1718 2848 327 66 BoxColFill +0.94 0.50 0.50 C 1.000 1165 975 73 977 BoxColFill +0.94 0.50 0.50 C 1.000 1711 975 73 515 BoxColFill +0.94 0.50 0.50 C 1.000 2257 975 73 279 BoxColFill +0.94 0.50 0.50 C 1.000 2803 975 73 469 BoxColFill +0.94 0.50 0.50 C 1.000 3349 975 73 1029 BoxColFill +0.94 0.50 0.50 C 1.000 3895 975 73 1588 BoxColFill +0.94 0.50 0.50 C 1.000 4441 975 73 1018 BoxColFill +% End plot #4 +1.000 UL +LTb +473 3468 N +473 352 L +4368 0 V +0 3116 V +-4368 0 V +Z stroke +1.000 UP +1.000 UL +LTb +stroke +grestore +end +showpage +%%Trailer +%%DocumentFonts: Helvetica +%%Pages: 1 diff --git a/fig/ch3/edp_eng-eps-converted-to.pdf b/fig/ch3/edp_eng-eps-converted-to.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c6e22e3f0767d4becfde18ffe79f6ce95e5f3a80 GIT binary patch literal 15214 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 TUk-xu3J5~5nV96%> matrix makepattern +/Pat1 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke + 0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke} +>> matrix makepattern +/Pat2 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L + 8 8 L 8 0 L 0 0 L fill} +>> matrix makepattern +/Pat3 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L + 0 12 M 12 0 L stroke} +>> matrix makepattern +/Pat4 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L + 0 -4 M 12 8 L stroke} +>> matrix makepattern +/Pat5 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L + 0 12 M 8 -4 L 4 12 M 10 0 L stroke} +>> matrix makepattern +/Pat6 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L + 0 -4 M 8 12 L 4 -4 M 10 8 L stroke} +>> matrix makepattern +/Pat7 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L + 12 0 M -4 8 L 12 4 M 0 10 L stroke} +>> matrix makepattern +/Pat8 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L + -4 0 M 12 8 L -4 4 M 8 10 L stroke} +>> matrix makepattern +/Pat9 exch def +/Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def +/Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def +/Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def +/Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def +/Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def +/Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def +/Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def +} def +% +% +%End of PostScript Level 2 code +% +/PatternBgnd { + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse +} def +% +% Substitute for Level 2 pattern fill codes with +% grayscale if Level 2 support is not selected. +% +/Level1PatternFill { +/Pattern1 {0.250 Density} bind def +/Pattern2 {0.500 Density} bind def +/Pattern3 {0.750 Density} bind def +/Pattern4 {0.125 Density} bind def +/Pattern5 {0.375 Density} bind def +/Pattern6 {0.625 Density} bind def +/Pattern7 {0.875 Density} bind def +} def +% +% Now test for support of Level 2 code +% +Level1 {Level1PatternFill} {Level2PatternFill} ifelse +% +/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont +dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall +currentdict end definefont pop +% +% Encoding for ISO-8859-1 (also called Latin1) +% +/reencodeISO { +dup dup findfont dup length dict begin +{ 1 index /FID ne { def }{ pop pop } ifelse } forall +currentdict /CharStrings known { + CharStrings /Idieresis known { + /Encoding ISOLatin1Encoding def } if +} if +currentdict end definefont +} def +/ISOLatin1Encoding [ +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright +/parenleft/parenright/asterisk/plus/comma/minus/period/slash +/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon +/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N +/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright +/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m +/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve +/dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut +/ogonek/caron/space/exclamdown/cent/sterling/currency/yen/brokenbar +/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot +/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior +/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine +/guillemotright/onequarter/onehalf/threequarters/questiondown +/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla +/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex +/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis +/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute +/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis +/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave +/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex +/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis +/yacute/thorn/ydieresis +] def +/MFshow { + { dup 5 get 3 ge + { 5 get 3 eq {gsave} {grestore} ifelse } + {dup dup 0 get findfont exch 1 get scalefont setfont + [ currentpoint ] exch dup 2 get 0 exch R dup 5 get 2 ne {dup dup 6 + get exch 4 get {Gshow} {stringwidth pop 0 R} ifelse }if dup 5 get 0 eq + {dup 3 get {2 get neg 0 exch R pop} {pop aload pop M} ifelse} {dup 5 + get 1 eq {dup 2 get exch dup 3 get exch 6 get stringwidth pop -2 div + dup 0 R} {dup 6 get stringwidth pop -2 div 0 R 6 get + show 2 index {aload pop M neg 3 -1 roll neg R pop pop} {pop pop pop + pop aload pop M} ifelse }ifelse }ifelse } + ifelse } + forall} def +/Gswidth {dup type /stringtype eq {stringwidth} {pop (n) stringwidth} ifelse} def +/MFwidth {0 exch { dup 5 get 3 ge { 5 get 3 eq { 0 } { pop } ifelse } + {dup 3 get{dup dup 0 get findfont exch 1 get scalefont setfont + 6 get Gswidth pop add} {pop} ifelse} ifelse} forall} def +/MLshow { currentpoint stroke M + 0 exch R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MRshow { currentpoint stroke M + exch dup MFwidth neg 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MCshow { currentpoint stroke M + exch dup MFwidth -2 div 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/XYsave { [( ) 1 2 true false 3 ()] } bind def +/XYrestore { [( ) 1 2 true false 4 ()] } bind def +/Helvetica reencodeISO def +Level1 SuppressPDFMark or +{} { +/SDict 10 dict def +systemdict /pdfmark known not { + userdict /pdfmark systemdict /cleartomark get put +} if +SDict begin [ + /Title () + /Subject (gnuplot plot) + /Creator (gnuplot 4.6 patchlevel 6) + /Author (afanfakh) +% /Producer (gnuplot) +% /Keywords () + /CreationDate (Thu Oct 22 12:36:19 2015) + /DOCINFO pdfmark +end +} ifelse +end +%%EndProlog +%%Page: 1 1 +gnudict begin +gsave +doclip +50 50 translate +0.100 0.100 scale +0 setgray +newpath +(Helvetica) findfont 110 scalefont setfont +BackgroundColor 0 lt 3 1 roll 0 lt exch 0 lt or or not {gsave BackgroundColor C clippath fill grestore} if +1.000 UL +LTb +473 352 M +63 0 V +4305 0 R +-63 0 V +stroke +407 352 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 0)] +] -50.0 MRshow +1.000 UL +LTb +473 421 M +31 0 V +4337 0 R +-31 0 V +473 490 M +31 0 V +4337 0 R +-31 0 V +473 560 M +31 0 V +4337 0 R +-31 0 V +473 629 M +31 0 V +4337 0 R +-31 0 V +473 698 M +63 0 V +4305 0 R +-63 0 V +stroke +407 698 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 5)] +] -50.0 MRshow +1.000 UL +LTb +473 767 M +31 0 V +4337 0 R +-31 0 V +473 837 M +31 0 V +4337 0 R +-31 0 V +473 906 M +31 0 V +4337 0 R +-31 0 V +473 975 M +31 0 V +4337 0 R +-31 0 V +473 1044 M +63 0 V +4305 0 R +-63 0 V +stroke +407 1044 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 10)] +] -50.0 MRshow +1.000 UL +LTb +473 1114 M +31 0 V +4337 0 R +-31 0 V +473 1183 M +31 0 V +4337 0 R +-31 0 V +473 1252 M +31 0 V +4337 0 R +-31 0 V +473 1321 M +31 0 V +4337 0 R +-31 0 V +473 1391 M +63 0 V +4305 0 R +-63 0 V +stroke +407 1391 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 15)] +] -50.0 MRshow +1.000 UL +LTb +473 1460 M +31 0 V +4337 0 R +-31 0 V +473 1529 M +31 0 V +4337 0 R +-31 0 V +473 1598 M +31 0 V +4337 0 R +-31 0 V +473 1668 M +31 0 V +4337 0 R +-31 0 V +473 1737 M +63 0 V +4305 0 R +-63 0 V +stroke +407 1737 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 20)] +] -50.0 MRshow +1.000 UL +LTb +473 1806 M +31 0 V +4337 0 R +-31 0 V +473 1875 M +31 0 V +4337 0 R +-31 0 V +473 1945 M +31 0 V +4337 0 R +-31 0 V +473 2014 M +31 0 V +4337 0 R +-31 0 V +473 2083 M +63 0 V +4305 0 R +-63 0 V +stroke +407 2083 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 25)] +] -50.0 MRshow +1.000 UL +LTb +473 2152 M +31 0 V +4337 0 R +-31 0 V +473 2222 M +31 0 V +4337 0 R +-31 0 V +473 2291 M +31 0 V +4337 0 R +-31 0 V +473 2360 M +31 0 V +4337 0 R +-31 0 V +473 2429 M +63 0 V +4305 0 R +-63 0 V +stroke +407 2429 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 30)] +] -50.0 MRshow +1.000 UL +LTb +473 2499 M +31 0 V +4337 0 R +-31 0 V +473 2568 M +31 0 V +4337 0 R +-31 0 V +473 2637 M +31 0 V +4337 0 R +-31 0 V +473 2706 M +31 0 V +4337 0 R +-31 0 V +473 2776 M +63 0 V +4305 0 R +-63 0 V +stroke +407 2776 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 35)] +] -50.0 MRshow +1.000 UL +LTb +473 2845 M +31 0 V +4337 0 R +-31 0 V +473 2914 M +31 0 V +4337 0 R +-31 0 V +473 2983 M +31 0 V +4337 0 R +-31 0 V +473 3053 M +31 0 V +4337 0 R +-31 0 V +473 3122 M +63 0 V +4305 0 R +-63 0 V +stroke +407 3122 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 40)] +] -50.0 MRshow +1.000 UL +LTb +473 3191 M +31 0 V +4337 0 R +-31 0 V +473 3260 M +31 0 V +4337 0 R +-31 0 V +473 3330 M +31 0 V +4337 0 R +-31 0 V +473 3399 M +31 0 V +4337 0 R +-31 0 V +473 3468 M +63 0 V +4305 0 R +-63 0 V +stroke +407 3468 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 45)] +] -50.0 MRshow +1.000 UL +LTb +1019 352 M +0 63 V +0 3053 R +0 -63 V +stroke +1019 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (CG)] +] -50.0 MCshow +1.000 UL +LTb +1565 352 M +0 63 V +0 3053 R +0 -63 V +stroke +1565 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (MG)] +] -50.0 MCshow +1.000 UL +LTb +2111 352 M +0 63 V +0 3053 R +0 -63 V +stroke +2111 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (EP)] +] -50.0 MCshow +1.000 UL +LTb +2657 352 M +0 63 V +0 3053 R +0 -63 V +stroke +2657 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (LU)] +] -50.0 MCshow +1.000 UL +LTb +3203 352 M +0 63 V +0 3053 R +0 -63 V +stroke +3203 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (BT)] +] -50.0 MCshow +1.000 UL +LTb +3749 352 M +0 63 V +0 3053 R +0 -63 V +stroke +3749 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (SP)] +] -50.0 MCshow +1.000 UL +LTb +4295 352 M +0 63 V +0 3053 R +0 -63 V +stroke +4295 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (FT)] +] -50.0 MCshow +1.000 UL +LTb +1.000 UL +LTb +473 3468 N +473 352 L +4368 0 V +0 3116 V +-4368 0 V +Z stroke +LCb setrgbcolor +88 1910 M +currentpoint gsave translate -270 rotate 0 0 moveto +[ [(Helvetica) 180.0 0.0 true true 0 (Energy saving)] +] -60.0 MCshow +grestore +LTb +LCb setrgbcolor +2657 77 M +[ [(Helvetica) 180.0 0.0 true true 0 (NAS parallel benchmarks)] +] -60.0 MCshow +LTb +1.000 UP +1.000 UL +LTb +% Begin plot #1 +1.000 UL +LT0 +0.10 0.10 0.44 C LCb setrgbcolor +1652 3264 M +[ [(Helvetica) 140.0 0.0 true true 0 (EDP/ one site)] +] -46.7 MRshow +LT0 +0.10 0.10 0.44 C 1718 3231 327 66 40 45 2 PatternFill +0.10 0.10 0.44 C 892 352 73 744 40 45 2 PatternFill +0.10 0.10 0.44 C 1438 352 73 524 40 45 2 PatternFill +0.10 0.10 0.44 C 1984 352 73 1053 40 45 2 PatternFill +0.10 0.10 0.44 C 2530 352 73 375 40 45 2 PatternFill +0.10 0.10 0.44 C 3076 352 73 664 40 45 2 PatternFill +0.10 0.10 0.44 C 3622 352 73 541 40 45 2 PatternFill +0.10 0.10 0.44 C 4168 352 73 831 40 45 2 PatternFill +% End plot #1 +% Begin plot #2 +1.000 UL +LT1 +0.10 0.10 0.44 C LCb setrgbcolor +1652 3132 M +[ [(Helvetica) 140.0 0.0 true true 0 (Maxdist/ one site)] +] -46.7 MRshow +LT1 +0.10 0.10 0.44 C 1.000 1718 3099 327 66 BoxColFill +0.10 0.10 0.44 C 1.000 983 352 73 2096 BoxColFill +0.10 0.10 0.44 C 1.000 1529 352 73 2371 BoxColFill +0.10 0.10 0.44 C 1.000 2075 352 73 1740 BoxColFill +0.10 0.10 0.44 C 1.000 2621 352 73 1676 BoxColFill +0.10 0.10 0.44 C 1.000 3167 352 73 2497 BoxColFill +0.10 0.10 0.44 C 1.000 3713 352 73 2360 BoxColFill +0.10 0.10 0.44 C 1.000 4259 352 73 1665 BoxColFill +% End plot #2 +% Begin plot #3 +1.000 UL +LT0 +0.00 0.39 0.00 C LCb setrgbcolor +1652 3000 M +[ [(Helvetica) 140.0 0.0 true true 0 (EDP/ two sites)] +] -46.7 MRshow +LT0 +0.00 0.39 0.00 C 1718 2967 327 66 80 -45 1 PatternFill +0.00 0.39 0.00 C 1074 352 73 176 80 -45 1 PatternFill +0.00 0.39 0.00 C 1620 352 73 642 80 -45 1 PatternFill +0.00 0.39 0.00 C 2166 352 73 1755 80 -45 1 PatternFill +0.00 0.39 0.00 C 2712 352 73 252 80 -45 1 PatternFill +0.00 0.39 0.00 C 3258 352 73 1115 80 -45 1 PatternFill +0.00 0.39 0.00 C 3804 352 73 1022 80 -45 1 PatternFill +0.00 0.39 0.00 C 4350 352 73 903 80 -45 1 PatternFill +% End plot #3 +% Begin plot #4 +1.000 UL +LT3 +0.94 0.50 0.50 C LCb setrgbcolor +1652 2868 M +[ [(Helvetica) 140.0 0.0 true true 0 (Maxdist/ two sites)] +] -46.7 MRshow +LT3 +0.94 0.50 0.50 C 1.000 1718 2835 327 66 BoxColFill +0.94 0.50 0.50 C 1.000 1165 352 73 1376 BoxColFill +0.94 0.50 0.50 C 1.000 1711 352 73 1503 BoxColFill +0.94 0.50 0.50 C 1.000 2257 352 73 2184 BoxColFill +0.94 0.50 0.50 C 1.000 2803 352 73 547 BoxColFill +0.94 0.50 0.50 C 1.000 3349 352 73 1560 BoxColFill +0.94 0.50 0.50 C 1.000 3895 352 73 2211 BoxColFill +0.94 0.50 0.50 C 1.000 4441 352 73 1186 BoxColFill +% End plot #4 +1.000 UL +LTb +473 3468 N +473 352 L +4368 0 V +0 3116 V +-4368 0 V +Z stroke +1.000 UP +1.000 UL +LTb +stroke +grestore +end +showpage +%%Trailer +%%DocumentFonts: Helvetica +%%Pages: 1 diff --git a/fig/ch3/edp_per-eps-converted-to.pdf b/fig/ch3/edp_per-eps-converted-to.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8da5afb8fa69b20c360c36c4fa9adb5e369332c6 GIT binary patch literal 13241 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 literal 0 HcmV?d00001 diff --git a/fig/ch3/edp_per.eps b/fig/ch3/edp_per.eps new file mode 100644 index 0000000..1fb48ec --- /dev/null +++ b/fig/ch3/edp_per.eps @@ -0,0 +1,897 @@ +%!PS-Adobe-2.0 +%%Creator: gnuplot 4.6 patchlevel 6 +%%CreationDate: Thu Oct 22 12:36:20 2015 +%%DocumentFonts: (atend) +%%BoundingBox: 50 50 554 410 +%%Orientation: Portrait +%%Pages: (atend) +%%EndComments +%%BeginProlog +/gnudict 256 dict def +gnudict begin +% +% The following true/false flags may be edited by hand if desired. +% The unit line width and grayscale image gamma correction may also be changed. +% +/Color false def +/Blacktext false def +/Solid false def +/Dashlength 1 def +/Landscape false def +/Level1 false def +/Rounded false def +/ClipToBoundingBox false def +/SuppressPDFMark false def +/TransparentPatterns false def +/gnulinewidth 5.000 def +/userlinewidth gnulinewidth def +/Gamma 1.0 def +/BackgroundColor {-1.000 -1.000 -1.000} def +% +/vshift -36 def +/dl1 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if +} def +/dl2 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul add } if +} def +/hpt_ 31.5 def +/vpt_ 31.5 def +/hpt hpt_ def +/vpt vpt_ def +/doclip { + ClipToBoundingBox { + newpath 50 50 moveto 554 50 lineto 554 410 lineto 50 410 lineto closepath + clip + } if +} def +% +% Gnuplot Prolog Version 4.6 (September 2012) +% +%/SuppressPDFMark true def +% +/M {moveto} bind def +/L {lineto} bind def +/R {rmoveto} bind def +/V {rlineto} bind def +/N {newpath moveto} bind def +/Z {closepath} bind def +/C {setrgbcolor} bind def +/f {rlineto fill} bind def +/g {setgray} bind def +/Gshow {show} def % May be redefined later in the file to support UTF-8 +/vpt2 vpt 2 mul def +/hpt2 hpt 2 mul def +/Lshow {currentpoint stroke M 0 vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Rshow {currentpoint stroke M dup stringwidth pop neg vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def + /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def +/DL {Color {setrgbcolor Solid {pop []} if 0 setdash} + {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse} def +/BL {stroke userlinewidth 2 mul setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/AL {stroke userlinewidth 2 div setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/UL {dup gnulinewidth mul /userlinewidth exch def + dup 1 lt {pop 1} if 10 mul /udl exch def} def +/PL {stroke userlinewidth setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +3.8 setmiterlimit +% Default Line colors +/LCw {1 1 1} def +/LCb {0 0 0} def +/LCa {0 0 0} def +/LC0 {1 0 0} def +/LC1 {0 1 0} def +/LC2 {0 0 1} def +/LC3 {1 0 1} def +/LC4 {0 1 1} def +/LC5 {1 1 0} def +/LC6 {0 0 0} def +/LC7 {1 0.3 0} def +/LC8 {0.5 0.5 0.5} def +% Default Line Types +/LTw {PL [] 1 setgray} def +/LTb {BL [] LCb DL} def +/LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def +/LT0 {PL [] LC0 DL} def +/LT1 {PL [4 dl1 2 dl2] LC1 DL} def +/LT2 {PL [2 dl1 3 dl2] LC2 DL} def +/LT3 {PL [1 dl1 1.5 dl2] LC3 DL} def +/LT4 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def +/LT5 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC5 DL} def +/LT6 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC6 DL} def +/LT7 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC7 DL} def +/LT8 {PL [2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 4 dl2] LC8 DL} def +/Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def +/Dia {stroke [] 0 setdash 2 copy vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke + Pnt} def +/Pls {stroke [] 0 setdash vpt sub M 0 vpt2 V + currentpoint stroke M + hpt neg vpt neg R hpt2 0 V stroke + } def +/Box {stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke + Pnt} def +/Crs {stroke [] 0 setdash exch hpt sub exch vpt add M + hpt2 vpt2 neg V currentpoint stroke M + hpt2 neg 0 R hpt2 vpt2 V stroke} def +/TriU {stroke [] 0 setdash 2 copy vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke + Pnt} def +/Star {2 copy Pls Crs} def +/BoxF {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath fill} def +/TriUF {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath fill} def +/TriD {stroke [] 0 setdash 2 copy vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke + Pnt} def +/TriDF {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath fill} def +/DiaF {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath fill} def +/Pent {stroke [] 0 setdash 2 copy gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore Pnt} def +/PentF {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath fill grestore} def +/Circle {stroke [] 0 setdash 2 copy + hpt 0 360 arc stroke Pnt} def +/CircleF {stroke [] 0 setdash hpt 0 360 arc fill} def +/C0 {BL [] 0 setdash 2 copy moveto vpt 90 450 arc} bind def +/C1 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + vpt 0 360 arc closepath} bind def +/C2 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C3 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C4 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C5 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc + 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc} bind def +/C6 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C7 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C8 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C9 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 450 arc closepath fill + vpt 0 360 arc closepath} bind def +/C10 {BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill + 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C11 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C12 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C13 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C14 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 360 arc closepath fill + vpt 0 360 arc} bind def +/C15 {BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/Rec {newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto + neg 0 rlineto closepath} bind def +/Square {dup Rec} bind def +/Bsquare {vpt sub exch vpt sub exch vpt2 Square} bind def +/S0 {BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare} bind def +/S1 {BL [] 0 setdash 2 copy vpt Square fill Bsquare} bind def +/S2 {BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S3 {BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare} bind def +/S4 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S5 {BL [] 0 setdash 2 copy 2 copy vpt Square fill + exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S6 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S7 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S8 {BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare} bind def +/S9 {BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S10 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill + Bsquare} bind def +/S11 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill + Bsquare} bind def +/S12 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare} bind def +/S13 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S14 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S15 {BL [] 0 setdash 2 copy Bsquare fill Bsquare} bind def +/D0 {gsave translate 45 rotate 0 0 S0 stroke grestore} bind def +/D1 {gsave translate 45 rotate 0 0 S1 stroke grestore} bind def +/D2 {gsave translate 45 rotate 0 0 S2 stroke grestore} bind def +/D3 {gsave translate 45 rotate 0 0 S3 stroke grestore} bind def +/D4 {gsave translate 45 rotate 0 0 S4 stroke grestore} bind def +/D5 {gsave translate 45 rotate 0 0 S5 stroke grestore} bind def +/D6 {gsave translate 45 rotate 0 0 S6 stroke grestore} bind def +/D7 {gsave translate 45 rotate 0 0 S7 stroke grestore} bind def +/D8 {gsave translate 45 rotate 0 0 S8 stroke grestore} bind def +/D9 {gsave translate 45 rotate 0 0 S9 stroke grestore} bind def +/D10 {gsave translate 45 rotate 0 0 S10 stroke grestore} bind def +/D11 {gsave translate 45 rotate 0 0 S11 stroke grestore} bind def +/D12 {gsave translate 45 rotate 0 0 S12 stroke grestore} bind def +/D13 {gsave translate 45 rotate 0 0 S13 stroke grestore} bind def +/D14 {gsave translate 45 rotate 0 0 S14 stroke grestore} bind def +/D15 {gsave translate 45 rotate 0 0 S15 stroke grestore} bind def +/DiaE {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke} def +/BoxE {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke} def +/TriUE {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke} def +/TriDE {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke} def +/PentE {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore} def +/CircE {stroke [] 0 setdash + hpt 0 360 arc stroke} def +/Opaque {gsave closepath 1 setgray fill grestore 0 setgray closepath} def +/DiaW {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V Opaque stroke} def +/BoxW {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V Opaque stroke} def +/TriUW {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V Opaque stroke} def +/TriDW {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V Opaque stroke} def +/PentW {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + Opaque stroke grestore} def +/CircW {stroke [] 0 setdash + hpt 0 360 arc Opaque stroke} def +/BoxFill {gsave Rec 1 setgray fill grestore} def +/Density { + /Fillden exch def + currentrgbcolor + /ColB exch def /ColG exch def /ColR exch def + /ColR ColR Fillden mul Fillden sub 1 add def + /ColG ColG Fillden mul Fillden sub 1 add def + /ColB ColB Fillden mul Fillden sub 1 add def + ColR ColG ColB setrgbcolor} def +/BoxColFill {gsave Rec PolyFill} def +/PolyFill {gsave Density fill grestore grestore} def +/h {rlineto rlineto rlineto gsave closepath fill grestore} bind def +% +% PostScript Level 1 Pattern Fill routine for rectangles +% Usage: x y w h s a XX PatternFill +% x,y = lower left corner of box to be filled +% w,h = width and height of box +% a = angle in degrees between lines and x-axis +% XX = 0/1 for no/yes cross-hatch +% +/PatternFill {gsave /PFa [ 9 2 roll ] def + PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate + PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse + clip + currentlinewidth 0.5 mul setlinewidth + /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def + 0 0 M PFa 5 get rotate PFs -2 div dup translate + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 M 0 PFs V} for + 0 PFa 6 get ne { + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 2 1 roll M PFs 0 V} for + } if + stroke grestore} def +% +/languagelevel where + {pop languagelevel} {1} ifelse + 2 lt + {/InterpretLevel1 true def} + {/InterpretLevel1 Level1 def} + ifelse +% +% PostScript level 2 pattern fill definitions +% +/Level2PatternFill { +/Tile8x8 {/PaintType 2 /PatternType 1 /TilingType 1 /BBox [0 0 8 8] /XStep 8 /YStep 8} + bind def +/KeepColor {currentrgbcolor [/Pattern /DeviceRGB] setcolorspace} bind def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke} +>> matrix makepattern +/Pat1 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke + 0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke} +>> matrix makepattern +/Pat2 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L + 8 8 L 8 0 L 0 0 L fill} +>> matrix makepattern +/Pat3 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L + 0 12 M 12 0 L stroke} +>> matrix makepattern +/Pat4 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L + 0 -4 M 12 8 L stroke} +>> matrix makepattern +/Pat5 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L + 0 12 M 8 -4 L 4 12 M 10 0 L stroke} +>> matrix makepattern +/Pat6 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L + 0 -4 M 8 12 L 4 -4 M 10 8 L stroke} +>> matrix makepattern +/Pat7 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L + 12 0 M -4 8 L 12 4 M 0 10 L stroke} +>> matrix makepattern +/Pat8 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L + -4 0 M 12 8 L -4 4 M 8 10 L stroke} +>> matrix makepattern +/Pat9 exch def +/Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def +/Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def +/Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def +/Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def +/Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def +/Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def +/Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def +} def +% +% +%End of PostScript Level 2 code +% +/PatternBgnd { + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse +} def +% +% Substitute for Level 2 pattern fill codes with +% grayscale if Level 2 support is not selected. +% +/Level1PatternFill { +/Pattern1 {0.250 Density} bind def +/Pattern2 {0.500 Density} bind def +/Pattern3 {0.750 Density} bind def +/Pattern4 {0.125 Density} bind def +/Pattern5 {0.375 Density} bind def +/Pattern6 {0.625 Density} bind def +/Pattern7 {0.875 Density} bind def +} def +% +% Now test for support of Level 2 code +% +Level1 {Level1PatternFill} {Level2PatternFill} ifelse +% +/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont +dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall +currentdict end definefont pop +% +% Encoding for ISO-8859-1 (also called Latin1) +% +/reencodeISO { +dup dup findfont dup length dict begin +{ 1 index /FID ne { def }{ pop pop } ifelse } forall +currentdict /CharStrings known { + CharStrings /Idieresis known { + /Encoding ISOLatin1Encoding def } if +} if +currentdict end definefont +} def +/ISOLatin1Encoding [ +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright +/parenleft/parenright/asterisk/plus/comma/minus/period/slash +/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon +/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N +/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright +/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m +/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve +/dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut +/ogonek/caron/space/exclamdown/cent/sterling/currency/yen/brokenbar +/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot +/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior +/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine +/guillemotright/onequarter/onehalf/threequarters/questiondown +/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla +/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex +/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis +/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute +/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis +/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave +/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex +/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis +/yacute/thorn/ydieresis +] def +/MFshow { + { dup 5 get 3 ge + { 5 get 3 eq {gsave} {grestore} ifelse } + {dup dup 0 get findfont exch 1 get scalefont setfont + [ currentpoint ] exch dup 2 get 0 exch R dup 5 get 2 ne {dup dup 6 + get exch 4 get {Gshow} {stringwidth pop 0 R} ifelse }if dup 5 get 0 eq + {dup 3 get {2 get neg 0 exch R pop} {pop aload pop M} ifelse} {dup 5 + get 1 eq {dup 2 get exch dup 3 get exch 6 get stringwidth pop -2 div + dup 0 R} {dup 6 get stringwidth pop -2 div 0 R 6 get + show 2 index {aload pop M neg 3 -1 roll neg R pop pop} {pop pop pop + pop aload pop M} ifelse }ifelse }ifelse } + ifelse } + forall} def +/Gswidth {dup type /stringtype eq {stringwidth} {pop (n) stringwidth} ifelse} def +/MFwidth {0 exch { dup 5 get 3 ge { 5 get 3 eq { 0 } { pop } ifelse } + {dup 3 get{dup dup 0 get findfont exch 1 get scalefont setfont + 6 get Gswidth pop add} {pop} ifelse} ifelse} forall} def +/MLshow { currentpoint stroke M + 0 exch R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MRshow { currentpoint stroke M + exch dup MFwidth neg 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MCshow { currentpoint stroke M + exch dup MFwidth -2 div 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/XYsave { [( ) 1 2 true false 3 ()] } bind def +/XYrestore { [( ) 1 2 true false 4 ()] } bind def +/Helvetica reencodeISO def +Level1 SuppressPDFMark or +{} { +/SDict 10 dict def +systemdict /pdfmark known not { + userdict /pdfmark systemdict /cleartomark get put +} if +SDict begin [ + /Title () + /Subject (gnuplot plot) + /Creator (gnuplot 4.6 patchlevel 6) + /Author (afanfakh) +% /Producer (gnuplot) +% /Keywords () + /CreationDate (Thu Oct 22 12:36:20 2015) + /DOCINFO pdfmark +end +} ifelse +end +%%EndProlog +%%Page: 1 1 +gnudict begin +gsave +doclip +50 50 translate +0.100 0.100 scale +0 setgray +newpath +(Helvetica) findfont 110 scalefont setfont +BackgroundColor 0 lt 3 1 roll 0 lt exch 0 lt or or not {gsave BackgroundColor C clippath fill grestore} if +1.000 UL +LTb +473 352 M +63 0 V +4305 0 R +-63 0 V +stroke +407 352 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 0)] +] -50.0 MRshow +1.000 UL +LTb +473 441 M +31 0 V +4337 0 R +-31 0 V +473 530 M +31 0 V +4337 0 R +-31 0 V +473 619 M +31 0 V +4337 0 R +-31 0 V +473 708 M +31 0 V +4337 0 R +-31 0 V +473 797 M +63 0 V +4305 0 R +-63 0 V +stroke +407 797 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 5)] +] -50.0 MRshow +1.000 UL +LTb +473 886 M +31 0 V +4337 0 R +-31 0 V +473 975 M +31 0 V +4337 0 R +-31 0 V +473 1064 M +31 0 V +4337 0 R +-31 0 V +473 1153 M +31 0 V +4337 0 R +-31 0 V +473 1242 M +63 0 V +4305 0 R +-63 0 V +stroke +407 1242 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 10)] +] -50.0 MRshow +1.000 UL +LTb +473 1331 M +31 0 V +4337 0 R +-31 0 V +473 1420 M +31 0 V +4337 0 R +-31 0 V +473 1509 M +31 0 V +4337 0 R +-31 0 V +473 1598 M +31 0 V +4337 0 R +-31 0 V +473 1687 M +63 0 V +4305 0 R +-63 0 V +stroke +407 1687 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 15)] +] -50.0 MRshow +1.000 UL +LTb +473 1776 M +31 0 V +4337 0 R +-31 0 V +473 1865 M +31 0 V +4337 0 R +-31 0 V +473 1955 M +31 0 V +4337 0 R +-31 0 V +473 2044 M +31 0 V +4337 0 R +-31 0 V +473 2133 M +63 0 V +4305 0 R +-63 0 V +stroke +407 2133 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 20)] +] -50.0 MRshow +1.000 UL +LTb +473 2222 M +31 0 V +4337 0 R +-31 0 V +473 2311 M +31 0 V +4337 0 R +-31 0 V +473 2400 M +31 0 V +4337 0 R +-31 0 V +473 2489 M +31 0 V +4337 0 R +-31 0 V +473 2578 M +63 0 V +4305 0 R +-63 0 V +stroke +407 2578 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 25)] +] -50.0 MRshow +1.000 UL +LTb +473 2667 M +31 0 V +4337 0 R +-31 0 V +473 2756 M +31 0 V +4337 0 R +-31 0 V +473 2845 M +31 0 V +4337 0 R +-31 0 V +473 2934 M +31 0 V +4337 0 R +-31 0 V +473 3023 M +63 0 V +4305 0 R +-63 0 V +stroke +407 3023 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 30)] +] -50.0 MRshow +1.000 UL +LTb +473 3112 M +31 0 V +4337 0 R +-31 0 V +473 3201 M +31 0 V +4337 0 R +-31 0 V +473 3290 M +31 0 V +4337 0 R +-31 0 V +473 3379 M +31 0 V +4337 0 R +-31 0 V +473 3468 M +63 0 V +4305 0 R +-63 0 V +stroke +407 3468 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 35)] +] -50.0 MRshow +1.000 UL +LTb +1019 352 M +0 63 V +0 3053 R +0 -63 V +stroke +1019 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (CG)] +] -50.0 MCshow +1.000 UL +LTb +1565 352 M +0 63 V +0 3053 R +0 -63 V +stroke +1565 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (MG)] +] -50.0 MCshow +1.000 UL +LTb +2111 352 M +0 63 V +0 3053 R +0 -63 V +stroke +2111 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (EP)] +] -50.0 MCshow +1.000 UL +LTb +2657 352 M +0 63 V +0 3053 R +0 -63 V +stroke +2657 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (LU)] +] -50.0 MCshow +1.000 UL +LTb +3203 352 M +0 63 V +0 3053 R +0 -63 V +stroke +3203 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (BT)] +] -50.0 MCshow +1.000 UL +LTb +3749 352 M +0 63 V +0 3053 R +0 -63 V +stroke +3749 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (SP)] +] -50.0 MCshow +1.000 UL +LTb +4295 352 M +0 63 V +0 3053 R +0 -63 V +stroke +4295 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (FT)] +] -50.0 MCshow +1.000 UL +LTb +1.000 UL +LTb +473 3468 N +473 352 L +4368 0 V +0 3116 V +-4368 0 V +Z stroke +LCb setrgbcolor +88 1910 M +currentpoint gsave translate -270 rotate 0 0 moveto +[ [(Helvetica) 180.0 0.0 true true 0 (Performance degradation)] +] -60.0 MCshow +grestore +LTb +LCb setrgbcolor +2657 77 M +[ [(Helvetica) 180.0 0.0 true true 0 (NAS parallel benchmarks)] +] -60.0 MCshow +LTb +1.000 UP +1.000 UL +LTb +% Begin plot #1 +1.000 UL +LT0 +0.10 0.10 0.44 C LCb setrgbcolor +1652 3224 M +[ [(Helvetica) 140.0 0.0 true true 0 (EDP/ one site)] +] -46.7 MRshow +LT0 +0.10 0.10 0.44 C 1718 3191 327 66 40 45 2 PatternFill +0.10 0.10 0.44 C 892 352 73 1398 40 45 2 PatternFill +0.10 0.10 0.44 C 1438 352 73 184 40 45 2 PatternFill +0.10 0.10 0.44 C 1984 352 73 437 40 45 2 PatternFill +0.10 0.10 0.44 C 2530 352 73 93 40 45 2 PatternFill +0.10 0.10 0.44 C 3076 352 73 305 40 45 2 PatternFill +0.10 0.10 0.44 C 3622 352 73 51 40 45 2 PatternFill +0.10 0.10 0.44 C 4168 352 73 94 40 45 2 PatternFill +% End plot #1 +% Begin plot #2 +1.000 UL +LT1 +0.10 0.10 0.44 C LCb setrgbcolor +1652 3092 M +[ [(Helvetica) 140.0 0.0 true true 0 (Maxdist/ one site)] +] -46.7 MRshow +LT1 +0.10 0.10 0.44 C 1.000 1718 3059 327 66 BoxColFill +0.10 0.10 0.44 C 1.000 983 352 73 575 BoxColFill +0.10 0.10 0.44 C 1.000 1529 352 73 496 BoxColFill +0.10 0.10 0.44 C 1.000 2075 352 73 135 BoxColFill +0.10 0.10 0.44 C 1.000 2621 352 73 310 BoxColFill +0.10 0.10 0.44 C 1.000 3167 352 73 253 BoxColFill +0.10 0.10 0.44 C 1.000 3713 352 73 160 BoxColFill +0.10 0.10 0.44 C 1.000 4259 352 73 88 BoxColFill +% End plot #2 +% Begin plot #3 +1.000 UL +LT0 +0.00 0.39 0.00 C LCb setrgbcolor +1652 2960 M +[ [(Helvetica) 140.0 0.0 true true 0 (EDP/ two sites)] +] -46.7 MRshow +LT0 +0.00 0.39 0.00 C 1718 2927 327 66 80 -45 1 PatternFill +0.00 0.39 0.00 C 1074 352 73 712 80 -45 1 PatternFill +0.00 0.39 0.00 C 1620 352 73 188 80 -45 1 PatternFill +0.00 0.39 0.00 C 2166 352 73 2833 80 -45 1 PatternFill +0.00 0.39 0.00 C 2712 352 73 60 80 -45 1 PatternFill +0.00 0.39 0.00 C 3258 352 73 1013 80 -45 1 PatternFill +0.00 0.39 0.00 C 3804 352 73 198 80 -45 1 PatternFill +0.00 0.39 0.00 C 4350 352 73 116 80 -45 1 PatternFill +% End plot #3 +% Begin plot #4 +1.000 UL +LT3 +0.94 0.50 0.50 C LCb setrgbcolor +1652 2828 M +[ [(Helvetica) 140.0 0.0 true true 0 (Maxdist/ two sites)] +] -46.7 MRshow +LT3 +0.94 0.50 0.50 C 1.000 1718 2795 327 66 BoxColFill +0.94 0.50 0.50 C 1.000 1165 352 73 374 BoxColFill +0.94 0.50 0.50 C 1.000 1711 352 73 1197 BoxColFill +0.94 0.50 0.50 C 1.000 2257 352 73 2409 BoxColFill +0.94 0.50 0.50 C 1.000 2803 352 73 37 BoxColFill +0.94 0.50 0.50 C 1.000 3349 352 73 538 BoxColFill +0.94 0.50 0.50 C 1.000 3895 352 73 574 BoxColFill +0.94 0.50 0.50 C 1.000 4441 352 73 71 BoxColFill +% End plot #4 +1.000 UL +LTb +473 3468 N +473 352 L +4368 0 V +0 3116 V +-4368 0 V +Z stroke +1.000 UP +1.000 UL +LTb +stroke +grestore +end +showpage +%%Trailer +%%DocumentFonts: Helvetica +%%Pages: 1 diff --git a/fig/ch3/energy-eps-converted-to.pdf b/fig/ch3/energy-eps-converted-to.pdf new file mode 100644 index 0000000000000000000000000000000000000000..6a37f89f1c9336dfe63fb4516666dc360f30f01d GIT binary patch literal 9472 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 literal 0 HcmV?d00001 diff --git a/fig/ch3/energy.eps b/fig/ch3/energy.eps new file mode 100644 index 0000000..2a54918 --- /dev/null +++ b/fig/ch3/energy.eps @@ -0,0 +1,868 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: energy.eps +%%Creator: gnuplot 4.6 patchlevel 0 +%%CreationDate: Thu Feb 19 16:44:03 2015 +%%DocumentFonts: (atend) +%%BoundingBox: 50 50 320 239 +%%EndComments +%%BeginProlog +/gnudict 256 dict def +gnudict begin +% +% The following true/false flags may be edited by hand if desired. +% The unit line width and grayscale image gamma correction may also be changed. +% +/Color false def +/Blacktext false def +/Solid false def +/Dashlength 1 def +/Landscape false def +/Level1 false def +/Rounded false def +/ClipToBoundingBox false def +/SuppressPDFMark false def +/TransparentPatterns false def +/gnulinewidth 5.000 def +/userlinewidth gnulinewidth def +/Gamma 1.0 def +/BackgroundColor {-1.000 -1.000 -1.000} def +% +/vshift -46 def +/dl1 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if +} def +/dl2 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul add } if +} def +/hpt_ 31.5 def +/vpt_ 31.5 def +/hpt hpt_ def +/vpt vpt_ def +/doclip { + ClipToBoundingBox { + newpath 50 50 moveto 320 50 lineto 320 239 lineto 50 239 lineto closepath + clip + } if +} def +% +% Gnuplot Prolog Version 4.4 (August 2010) +% +%/SuppressPDFMark true def +% +/M {moveto} bind def +/L {lineto} bind def +/R {rmoveto} bind def +/V {rlineto} bind def +/N {newpath moveto} bind def +/Z {closepath} bind def +/C {setrgbcolor} bind def +/f {rlineto fill} bind def +/g {setgray} bind def +/Gshow {show} def % May be redefined later in the file to support UTF-8 +/vpt2 vpt 2 mul def +/hpt2 hpt 2 mul def +/Lshow {currentpoint stroke M 0 vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Rshow {currentpoint stroke M dup stringwidth pop neg vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def + /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def +/DL {Color {setrgbcolor Solid {pop []} if 0 setdash} + {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse} def +/BL {stroke userlinewidth 2 mul setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/AL {stroke userlinewidth 2 div setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/UL {dup gnulinewidth mul /userlinewidth exch def + dup 1 lt {pop 1} if 10 mul /udl exch def} def +/PL {stroke userlinewidth setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +3.8 setmiterlimit +% Default Line colors +/LCw {1 1 1} def +/LCb {0 0 0} def +/LCa {0 0 0} def +/LC0 {1 0 0} def +/LC1 {0 1 0} def +/LC2 {0 0 1} def +/LC3 {1 0 1} def +/LC4 {0 1 1} def +/LC5 {1 1 0} def +/LC6 {0 0 0} def +/LC7 {1 0.3 0} def +/LC8 {0.5 0.5 0.5} def +% Default Line Types +/LTw {PL [] 1 setgray} def +/LTb {BL [] LCb DL} def +/LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def +/LT0 {PL [] LC0 DL} def +/LT1 {PL [4 dl1 2 dl2] LC1 DL} def +/LT2 {PL [2 dl1 3 dl2] LC2 DL} def +/LT3 {PL [1 dl1 1.5 dl2] LC3 DL} def +/LT4 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def +/LT5 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC5 DL} def +/LT6 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC6 DL} def +/LT7 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC7 DL} def +/LT8 {PL [2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 4 dl2] LC8 DL} def +/Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def +/Dia {stroke [] 0 setdash 2 copy vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke + Pnt} def +/Pls {stroke [] 0 setdash vpt sub M 0 vpt2 V + currentpoint stroke M + hpt neg vpt neg R hpt2 0 V stroke + } def +/Box {stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke + Pnt} def +/Crs {stroke [] 0 setdash exch hpt sub exch vpt add M + hpt2 vpt2 neg V currentpoint stroke M + hpt2 neg 0 R hpt2 vpt2 V stroke} def +/TriU {stroke [] 0 setdash 2 copy vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke + Pnt} def +/Star {2 copy Pls Crs} def +/BoxF {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath fill} def +/TriUF {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath fill} def +/TriD {stroke [] 0 setdash 2 copy vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke + Pnt} def +/TriDF {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath fill} def +/DiaF {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath fill} def +/Pent {stroke [] 0 setdash 2 copy gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore Pnt} def +/PentF {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath fill grestore} def +/Circle {stroke [] 0 setdash 2 copy + hpt 0 360 arc stroke Pnt} def +/CircleF {stroke [] 0 setdash hpt 0 360 arc fill} def +/C0 {BL [] 0 setdash 2 copy moveto vpt 90 450 arc} bind def +/C1 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + vpt 0 360 arc closepath} bind def +/C2 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C3 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C4 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C5 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc + 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc} bind def +/C6 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C7 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C8 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C9 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 450 arc closepath fill + vpt 0 360 arc closepath} bind def +/C10 {BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill + 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C11 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C12 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C13 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C14 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 360 arc closepath fill + vpt 0 360 arc} bind def +/C15 {BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/Rec {newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto + neg 0 rlineto closepath} bind def +/Square {dup Rec} bind def +/Bsquare {vpt sub exch vpt sub exch vpt2 Square} bind def +/S0 {BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare} bind def +/S1 {BL [] 0 setdash 2 copy vpt Square fill Bsquare} bind def +/S2 {BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S3 {BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare} bind def +/S4 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S5 {BL [] 0 setdash 2 copy 2 copy vpt Square fill + exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S6 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S7 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S8 {BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare} bind def +/S9 {BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S10 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill + Bsquare} bind def +/S11 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill + Bsquare} bind def +/S12 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare} bind def +/S13 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S14 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S15 {BL [] 0 setdash 2 copy Bsquare fill Bsquare} bind def +/D0 {gsave translate 45 rotate 0 0 S0 stroke grestore} bind def +/D1 {gsave translate 45 rotate 0 0 S1 stroke grestore} bind def +/D2 {gsave translate 45 rotate 0 0 S2 stroke grestore} bind def +/D3 {gsave translate 45 rotate 0 0 S3 stroke grestore} bind def +/D4 {gsave translate 45 rotate 0 0 S4 stroke grestore} bind def +/D5 {gsave translate 45 rotate 0 0 S5 stroke grestore} bind def +/D6 {gsave translate 45 rotate 0 0 S6 stroke grestore} bind def +/D7 {gsave translate 45 rotate 0 0 S7 stroke grestore} bind def +/D8 {gsave translate 45 rotate 0 0 S8 stroke grestore} bind def +/D9 {gsave translate 45 rotate 0 0 S9 stroke grestore} bind def +/D10 {gsave translate 45 rotate 0 0 S10 stroke grestore} bind def +/D11 {gsave translate 45 rotate 0 0 S11 stroke grestore} bind def +/D12 {gsave translate 45 rotate 0 0 S12 stroke grestore} bind def +/D13 {gsave translate 45 rotate 0 0 S13 stroke grestore} bind def +/D14 {gsave translate 45 rotate 0 0 S14 stroke grestore} bind def +/D15 {gsave translate 45 rotate 0 0 S15 stroke grestore} bind def +/DiaE {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke} def +/BoxE {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke} def +/TriUE {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke} def +/TriDE {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke} def +/PentE {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore} def +/CircE {stroke [] 0 setdash + hpt 0 360 arc stroke} def +/Opaque {gsave closepath 1 setgray fill grestore 0 setgray closepath} def +/DiaW {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V Opaque stroke} def +/BoxW {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V Opaque stroke} def +/TriUW {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V Opaque stroke} def +/TriDW {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V Opaque stroke} def +/PentW {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + Opaque stroke grestore} def +/CircW {stroke [] 0 setdash + hpt 0 360 arc Opaque stroke} def +/BoxFill {gsave Rec 1 setgray fill grestore} def +/Density { + /Fillden exch def + currentrgbcolor + /ColB exch def /ColG exch def /ColR exch def + /ColR ColR Fillden mul Fillden sub 1 add def + /ColG ColG Fillden mul Fillden sub 1 add def + /ColB ColB Fillden mul Fillden sub 1 add def + ColR ColG ColB setrgbcolor} def +/BoxColFill {gsave Rec PolyFill} def +/PolyFill {gsave Density fill grestore grestore} def +/h {rlineto rlineto rlineto gsave closepath fill grestore} bind def +% +% PostScript Level 1 Pattern Fill routine for rectangles +% Usage: x y w h s a XX PatternFill +% x,y = lower left corner of box to be filled +% w,h = width and height of box +% a = angle in degrees between lines and x-axis +% XX = 0/1 for no/yes cross-hatch +% +/PatternFill {gsave /PFa [ 9 2 roll ] def + PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate + PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec + gsave 1 setgray fill grestore clip + currentlinewidth 0.5 mul setlinewidth + /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def + 0 0 M PFa 5 get rotate PFs -2 div dup translate + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 M 0 PFs V} for + 0 PFa 6 get ne { + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 2 1 roll M PFs 0 V} for + } if + stroke grestore} def +% +/languagelevel where + {pop languagelevel} {1} ifelse + 2 lt + {/InterpretLevel1 true def} + {/InterpretLevel1 Level1 def} + ifelse +% +% PostScript level 2 pattern fill definitions +% +/Level2PatternFill { +/Tile8x8 {/PaintType 2 /PatternType 1 /TilingType 1 /BBox [0 0 8 8] /XStep 8 /YStep 8} + bind def +/KeepColor {currentrgbcolor [/Pattern /DeviceRGB] setcolorspace} bind def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke} +>> matrix makepattern +/Pat1 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke + 0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke} +>> matrix makepattern +/Pat2 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L + 8 8 L 8 0 L 0 0 L fill} +>> matrix makepattern +/Pat3 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L + 0 12 M 12 0 L stroke} +>> matrix makepattern +/Pat4 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L + 0 -4 M 12 8 L stroke} +>> matrix makepattern +/Pat5 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L + 0 12 M 8 -4 L 4 12 M 10 0 L stroke} +>> matrix makepattern +/Pat6 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L + 0 -4 M 8 12 L 4 -4 M 10 8 L stroke} +>> matrix makepattern +/Pat7 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L + 12 0 M -4 8 L 12 4 M 0 10 L stroke} +>> matrix makepattern +/Pat8 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L + -4 0 M 12 8 L -4 4 M 8 10 L stroke} +>> matrix makepattern +/Pat9 exch def +/Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def +/Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def +/Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def +/Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def +/Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def +/Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def +/Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def +} def +% +% +%End of PostScript Level 2 code +% +/PatternBgnd { + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse +} def +% +% Substitute for Level 2 pattern fill codes with +% grayscale if Level 2 support is not selected. +% +/Level1PatternFill { +/Pattern1 {0.250 Density} bind def +/Pattern2 {0.500 Density} bind def +/Pattern3 {0.750 Density} bind def +/Pattern4 {0.125 Density} bind def +/Pattern5 {0.375 Density} bind def +/Pattern6 {0.625 Density} bind def +/Pattern7 {0.875 Density} bind def +} def +% +% Now test for support of Level 2 code +% +Level1 {Level1PatternFill} {Level2PatternFill} ifelse +% +/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont +dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall +currentdict end definefont pop +Level1 SuppressPDFMark or +{} { +/SDict 10 dict def +systemdict /pdfmark known not { + userdict /pdfmark systemdict /cleartomark get put +} if +SDict begin [ + /Title (energy.eps) + /Subject (gnuplot plot) + /Creator (gnuplot 4.6 patchlevel 0) + /Author (afanfakh) +% /Producer (gnuplot) +% /Keywords () + /CreationDate (Thu Feb 19 16:44:03 2015) + /DOCINFO pdfmark +end +} ifelse +end +%%EndProlog +%%Page: 1 1 +gnudict begin +gsave +doclip +50 50 translate +0.050 0.050 scale +0 setgray +newpath +(Helvetica) findfont 140 scalefont setfont +BackgroundColor 0 lt 3 1 roll 0 lt exch 0 lt or or not {BackgroundColor C 1.000 0 0 5400.00 3780.00 BoxColFill} if +1.000 UL +LTb +602 588 M +63 0 V +4482 0 R +-63 0 V +/Helvetica findfont 190 scalefont setfont +518 588 M +( 0) Rshow +/Helvetica findfont 140 scalefont setfont +1.000 UL +LTb +602 948 M +63 0 V +4482 0 R +-63 0 V +/Helvetica findfont 190 scalefont setfont +518 948 M +( 5) Rshow +/Helvetica findfont 140 scalefont setfont +1.000 UL +LTb +602 1308 M +63 0 V +4482 0 R +-63 0 V +/Helvetica findfont 190 scalefont setfont +-4566 0 R +( 10) Rshow +/Helvetica findfont 140 scalefont setfont +1.000 UL +LTb +602 1668 M +63 0 V +4482 0 R +-63 0 V +/Helvetica findfont 190 scalefont setfont +-4566 0 R +( 15) Rshow +/Helvetica findfont 140 scalefont setfont +1.000 UL +LTb +602 2028 M +63 0 V +4482 0 R +-63 0 V +/Helvetica findfont 190 scalefont setfont +-4566 0 R +( 20) Rshow +/Helvetica findfont 140 scalefont setfont +1.000 UL +LTb +602 2387 M +63 0 V +4482 0 R +-63 0 V +/Helvetica findfont 190 scalefont setfont +-4566 0 R +( 25) Rshow +/Helvetica findfont 140 scalefont setfont +1.000 UL +LTb +602 2747 M +63 0 V +4482 0 R +-63 0 V +/Helvetica findfont 190 scalefont setfont +-4566 0 R +( 30) Rshow +/Helvetica findfont 140 scalefont setfont +1.000 UL +LTb +602 3107 M +63 0 V +4482 0 R +-63 0 V +/Helvetica findfont 190 scalefont setfont +-4566 0 R +( 35) Rshow +/Helvetica findfont 140 scalefont setfont +1.000 UL +LTb +602 3467 M +63 0 V +4482 0 R +-63 0 V +/Helvetica findfont 190 scalefont setfont +-4566 0 R +( 40) Rshow +/Helvetica findfont 140 scalefont setfont +1.000 UL +LTb +604 588 M +0 63 V +0 2960 R +0 -63 V +/Helvetica findfont 190 scalefont setfont +604 448 M +( 0) Cshow +/Helvetica findfont 140 scalefont setfont +1.000 UL +LTb +1088 588 M +0 63 V +0 2960 R +0 -63 V +/Helvetica findfont 190 scalefont setfont +0 -3100 R +( 16) Cshow +/Helvetica findfont 140 scalefont setfont +1.000 UL +LTb +1572 588 M +0 63 V +0 2960 R +0 -63 V +/Helvetica findfont 190 scalefont setfont +0 -3100 R +( 32) Cshow +/Helvetica findfont 140 scalefont setfont +1.000 UL +LTb +2057 588 M +0 63 V +0 2960 R +0 -63 V +/Helvetica findfont 190 scalefont setfont +0 -3100 R +( 48) Cshow +/Helvetica findfont 140 scalefont setfont +1.000 UL +LTb +2541 588 M +0 63 V +0 2960 R +0 -63 V +/Helvetica findfont 190 scalefont setfont +0 -3100 R +( 64) Cshow +/Helvetica findfont 140 scalefont setfont +1.000 UL +LTb +3026 588 M +0 63 V +0 2960 R +0 -63 V +/Helvetica findfont 190 scalefont setfont +0 -3100 R +( 80) Cshow +/Helvetica findfont 140 scalefont setfont +1.000 UL +LTb +3510 588 M +0 63 V +0 2960 R +0 -63 V +/Helvetica findfont 190 scalefont setfont +0 -3100 R +( 96) Cshow +/Helvetica findfont 140 scalefont setfont +1.000 UL +LTb +3995 588 M +0 63 V +0 2960 R +0 -63 V +/Helvetica findfont 190 scalefont setfont +0 -3100 R +( 112) Cshow +/Helvetica findfont 140 scalefont setfont +1.000 UL +LTb +4479 588 M +0 63 V +0 2960 R +0 -63 V +/Helvetica findfont 190 scalefont setfont +0 -3100 R +( 128) Cshow +/Helvetica findfont 140 scalefont setfont +1.000 UL +LTb +4964 588 M +0 63 V +0 2960 R +0 -63 V +/Helvetica findfont 190 scalefont setfont +0 -3100 R +( 144) Cshow +/Helvetica findfont 140 scalefont setfont +1.000 UL +LTb +1.000 UL +LTb +602 3611 N +602 588 L +4545 0 V +0 3023 V +-4545 0 V +Z stroke +LCb setrgbcolor +/Helvetica findfont 210 scalefont setfont +112 2099 M +currentpoint gsave translate -270 rotate 0 0 M +(Energy saving) Cshow +grestore +/Helvetica findfont 140 scalefont setfont +LTb +LCb setrgbcolor +/Helvetica findfont 210 scalefont setfont +2974 98 M +( Number of nodes) Cshow +/Helvetica findfont 140 scalefont setfont +LTb +1.000 UP +/Helvetica findfont 190 scalefont setfont +649 620 M +( ) Lshow +/Helvetica findfont 140 scalefont setfont +1.000 UL +LTb +% Begin plot #1 +1.500 UP +2.000 UL +LT0 +0.00 0.00 1.00 C LCb setrgbcolor +/Helvetica findfont 190 scalefont setfont +1259 3443 M +(CG) Rshow +/Helvetica findfont 140 scalefont setfont +LT0 +0.00 0.00 1.00 C 709 3443 M +298 0 V +725 3047 M +846 2838 L +242 -357 V +484 -730 V +969 -578 V +4479 876 L +725 3047 Box +846 2838 Box +1088 2481 Box +1572 1751 Box +2541 1173 Box +4479 876 Box +858 3443 Box +% End plot #1 +% Begin plot #2 +1.500 UP +2.000 UL +LT0 +1.00 0.00 0.00 C LCb setrgbcolor +/Helvetica findfont 190 scalefont setfont +1893 3443 M +(MG) Rshow +/Helvetica findfont 140 scalefont setfont +LT0 +1.00 0.00 0.00 C 1343 3443 M +298 0 V +725 3134 M +846 3020 L +242 -93 V +484 -256 V +969 24 V +4479 1940 L +725 3134 TriD +846 3020 TriD +1088 2927 TriD +1572 2671 TriD +2541 2695 TriD +4479 1940 TriD +1492 3443 TriD +% End plot #2 +% Begin plot #3 +1.500 UP +2.000 UL +LT0 +0.50 0.00 0.50 C LCb setrgbcolor +/Helvetica findfont 190 scalefont setfont +2527 3443 M +(EP) Rshow +/Helvetica findfont 140 scalefont setfont +LT0 +0.50 0.00 0.50 C 1977 3443 M +298 0 V +725 2519 M +121 15 V +242 -13 V +484 9 V +969 10 V +1938 -2 V +725 2519 Star +846 2534 Star +1088 2521 Star +1572 2530 Star +2541 2540 Star +4479 2538 Star +2126 3443 Star +% End plot #3 +% Begin plot #4 +1.500 UP +2.000 UL +LT0 +0.18 0.31 0.31 C LCb setrgbcolor +/Helvetica findfont 190 scalefont setfont +3161 3443 M +(LU) Rshow +/Helvetica findfont 140 scalefont setfont +LT0 +0.18 0.31 0.31 C 2611 3443 M +298 0 V +725 3036 M +846 2620 L +242 41 V +484 -374 V +969 -118 V +4479 1788 L +725 3036 TriUF +846 2620 TriUF +1088 2661 TriUF +1572 2287 TriUF +2541 2169 TriUF +4479 1788 TriUF +2760 3443 TriUF +% End plot #4 +% Begin plot #5 +1.500 UP +2.000 UL +LT0 +0.18 0.55 0.34 C LCb setrgbcolor +/Helvetica findfont 190 scalefont setfont +3795 3443 M +(BT) Rshow +/Helvetica findfont 140 scalefont setfont +LT0 +0.18 0.55 0.34 C 3245 3443 M +298 0 V +725 3133 M +876 2915 L +212 189 V +606 -24 V +847 -187 V +4964 2257 L +725 3133 BoxF +876 2915 BoxF +1088 3104 BoxF +1694 3080 BoxF +2541 2893 BoxF +4964 2257 BoxF +3394 3443 BoxF +% End plot #5 +% Begin plot #6 +1.500 UP +2.000 UL +LT0 +0.85 0.65 0.13 C LCb setrgbcolor +/Helvetica findfont 190 scalefont setfont +4429 3443 M +(SP) Rshow +/Helvetica findfont 140 scalefont setfont +LT0 +0.85 0.65 0.13 C 3879 3443 M +298 0 V +725 3123 M +876 2368 L +212 -161 V +606 17 V +847 152 V +2423 136 V +725 3123 Circle +876 2368 Circle +1088 2207 Circle +1694 2224 Circle +2541 2376 Circle +4964 2512 Circle +4028 3443 Circle +% End plot #6 +% Begin plot #7 +1.500 UP +2.000 UL +LT0 +0.55 0.00 0.00 C LCb setrgbcolor +/Helvetica findfont 190 scalefont setfont +5063 3443 M +(FT) Rshow +/Helvetica findfont 140 scalefont setfont +LT0 +0.55 0.00 0.00 C 4513 3443 M +298 0 V +725 3148 M +846 2821 L +242 41 V +484 -612 V +969 -212 V +4479 1513 L +725 3148 CircleF +846 2821 CircleF +1088 2862 CircleF +1572 2250 CircleF +2541 2038 CircleF +4479 1513 CircleF +4662 3443 CircleF +% End plot #7 +1.000 UL +LTb +602 3611 N +602 588 L +4545 0 V +0 3023 V +-4545 0 V +Z stroke +1.000 UP +1.000 UL +LTb +stroke +grestore +end +showpage diff --git a/fig/ch3/eng_con-eps-converted-to.pdf b/fig/ch3/eng_con-eps-converted-to.pdf new file mode 100644 index 0000000000000000000000000000000000000000..638625214a896e9d898eab1fd73db6575df2351f GIT binary patch literal 8910 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 QoV2VgOjuamPy_aV0F!%RtN;K2 literal 0 HcmV?d00001 diff --git a/fig/ch3/eng_con.eps b/fig/ch3/eng_con.eps new file mode 100644 index 0000000..814faa1 --- /dev/null +++ b/fig/ch3/eng_con.eps @@ -0,0 +1,961 @@ +%!PS-Adobe-2.0 +%%Creator: gnuplot 4.6 patchlevel 6 +%%CreationDate: Thu Oct 22 17:46:42 2015 +%%DocumentFonts: (atend) +%%BoundingBox: 50 50 554 410 +%%Orientation: Portrait +%%Pages: (atend) +%%EndComments +%%BeginProlog +/gnudict 256 dict def +gnudict begin +% +% The following true/false flags may be edited by hand if desired. +% The unit line width and grayscale image gamma correction may also be changed. +% +/Color false def +/Blacktext false def +/Solid false def +/Dashlength 1 def +/Landscape false def +/Level1 false def +/Rounded false def +/ClipToBoundingBox false def +/SuppressPDFMark false def +/TransparentPatterns false def +/gnulinewidth 5.000 def +/userlinewidth gnulinewidth def +/Gamma 1.0 def +/BackgroundColor {-1.000 -1.000 -1.000} def +% +/vshift -36 def +/dl1 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if +} def +/dl2 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul add } if +} def +/hpt_ 31.5 def +/vpt_ 31.5 def +/hpt hpt_ def +/vpt vpt_ def +/doclip { + ClipToBoundingBox { + newpath 50 50 moveto 554 50 lineto 554 410 lineto 50 410 lineto closepath + clip + } if +} def +% +% Gnuplot Prolog Version 4.6 (September 2012) +% +%/SuppressPDFMark true def +% +/M {moveto} bind def +/L {lineto} bind def +/R {rmoveto} bind def +/V {rlineto} bind def +/N {newpath moveto} bind def +/Z {closepath} bind def +/C {setrgbcolor} bind def +/f {rlineto fill} bind def +/g {setgray} bind def +/Gshow {show} def % May be redefined later in the file to support UTF-8 +/vpt2 vpt 2 mul def +/hpt2 hpt 2 mul def +/Lshow {currentpoint stroke M 0 vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Rshow {currentpoint stroke M dup stringwidth pop neg vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def + /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def +/DL {Color {setrgbcolor Solid {pop []} if 0 setdash} + {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse} def +/BL {stroke userlinewidth 2 mul setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/AL {stroke userlinewidth 2 div setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/UL {dup gnulinewidth mul /userlinewidth exch def + dup 1 lt {pop 1} if 10 mul /udl exch def} def +/PL {stroke userlinewidth setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +3.8 setmiterlimit +% Default Line colors +/LCw {1 1 1} def +/LCb {0 0 0} def +/LCa {0 0 0} def +/LC0 {1 0 0} def +/LC1 {0 1 0} def +/LC2 {0 0 1} def +/LC3 {1 0 1} def +/LC4 {0 1 1} def +/LC5 {1 1 0} def +/LC6 {0 0 0} def +/LC7 {1 0.3 0} def +/LC8 {0.5 0.5 0.5} def +% Default Line Types +/LTw {PL [] 1 setgray} def +/LTb {BL [] LCb DL} def +/LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def +/LT0 {PL [] LC0 DL} def +/LT1 {PL [4 dl1 2 dl2] LC1 DL} def +/LT2 {PL [2 dl1 3 dl2] LC2 DL} def +/LT3 {PL [1 dl1 1.5 dl2] LC3 DL} def +/LT4 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def +/LT5 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC5 DL} def +/LT6 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC6 DL} def +/LT7 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC7 DL} def +/LT8 {PL [2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 4 dl2] LC8 DL} def +/Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def +/Dia {stroke [] 0 setdash 2 copy vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke + Pnt} def +/Pls {stroke [] 0 setdash vpt sub M 0 vpt2 V + currentpoint stroke M + hpt neg vpt neg R hpt2 0 V stroke + } def +/Box {stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke + Pnt} def +/Crs {stroke [] 0 setdash exch hpt sub exch vpt add M + hpt2 vpt2 neg V currentpoint stroke M + hpt2 neg 0 R hpt2 vpt2 V stroke} def +/TriU {stroke [] 0 setdash 2 copy vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke + Pnt} def +/Star {2 copy Pls Crs} def +/BoxF {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath fill} def +/TriUF {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath fill} def +/TriD {stroke [] 0 setdash 2 copy vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke + Pnt} def +/TriDF {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath fill} def +/DiaF {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath fill} def +/Pent {stroke [] 0 setdash 2 copy gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore Pnt} def +/PentF {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath fill grestore} def +/Circle {stroke [] 0 setdash 2 copy + hpt 0 360 arc stroke Pnt} def +/CircleF {stroke [] 0 setdash hpt 0 360 arc fill} def +/C0 {BL [] 0 setdash 2 copy moveto vpt 90 450 arc} bind def +/C1 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + vpt 0 360 arc closepath} bind def +/C2 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C3 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C4 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C5 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc + 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc} bind def +/C6 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C7 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C8 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C9 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 450 arc closepath fill + vpt 0 360 arc closepath} bind def +/C10 {BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill + 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C11 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C12 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C13 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C14 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 360 arc closepath fill + vpt 0 360 arc} bind def +/C15 {BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/Rec {newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto + neg 0 rlineto closepath} bind def +/Square {dup Rec} bind def +/Bsquare {vpt sub exch vpt sub exch vpt2 Square} bind def +/S0 {BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare} bind def +/S1 {BL [] 0 setdash 2 copy vpt Square fill Bsquare} bind def +/S2 {BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S3 {BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare} bind def +/S4 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S5 {BL [] 0 setdash 2 copy 2 copy vpt Square fill + exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S6 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S7 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S8 {BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare} bind def +/S9 {BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S10 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill + Bsquare} bind def +/S11 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill + Bsquare} bind def +/S12 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare} bind def +/S13 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S14 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S15 {BL [] 0 setdash 2 copy Bsquare fill Bsquare} bind def +/D0 {gsave translate 45 rotate 0 0 S0 stroke grestore} bind def +/D1 {gsave translate 45 rotate 0 0 S1 stroke grestore} bind def +/D2 {gsave translate 45 rotate 0 0 S2 stroke grestore} bind def +/D3 {gsave translate 45 rotate 0 0 S3 stroke grestore} bind def +/D4 {gsave translate 45 rotate 0 0 S4 stroke grestore} bind def +/D5 {gsave translate 45 rotate 0 0 S5 stroke grestore} bind def +/D6 {gsave translate 45 rotate 0 0 S6 stroke grestore} bind def +/D7 {gsave translate 45 rotate 0 0 S7 stroke grestore} bind def +/D8 {gsave translate 45 rotate 0 0 S8 stroke grestore} bind def +/D9 {gsave translate 45 rotate 0 0 S9 stroke grestore} bind def +/D10 {gsave translate 45 rotate 0 0 S10 stroke grestore} bind def +/D11 {gsave translate 45 rotate 0 0 S11 stroke grestore} bind def +/D12 {gsave translate 45 rotate 0 0 S12 stroke grestore} bind def +/D13 {gsave translate 45 rotate 0 0 S13 stroke grestore} bind def +/D14 {gsave translate 45 rotate 0 0 S14 stroke grestore} bind def +/D15 {gsave translate 45 rotate 0 0 S15 stroke grestore} bind def +/DiaE {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke} def +/BoxE {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke} def +/TriUE {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke} def +/TriDE {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke} def +/PentE {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore} def +/CircE {stroke [] 0 setdash + hpt 0 360 arc stroke} def +/Opaque {gsave closepath 1 setgray fill grestore 0 setgray closepath} def +/DiaW {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V Opaque stroke} def +/BoxW {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V Opaque stroke} def +/TriUW {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V Opaque stroke} def +/TriDW {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V Opaque stroke} def +/PentW {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + Opaque stroke grestore} def +/CircW {stroke [] 0 setdash + hpt 0 360 arc Opaque stroke} def +/BoxFill {gsave Rec 1 setgray fill grestore} def +/Density { + /Fillden exch def + currentrgbcolor + /ColB exch def /ColG exch def /ColR exch def + /ColR ColR Fillden mul Fillden sub 1 add def + /ColG ColG Fillden mul Fillden sub 1 add def + /ColB ColB Fillden mul Fillden sub 1 add def + ColR ColG ColB setrgbcolor} def +/BoxColFill {gsave Rec PolyFill} def +/PolyFill {gsave Density fill grestore grestore} def +/h {rlineto rlineto rlineto gsave closepath fill grestore} bind def +% +% PostScript Level 1 Pattern Fill routine for rectangles +% Usage: x y w h s a XX PatternFill +% x,y = lower left corner of box to be filled +% w,h = width and height of box +% a = angle in degrees between lines and x-axis +% XX = 0/1 for no/yes cross-hatch +% +/PatternFill {gsave /PFa [ 9 2 roll ] def + PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate + PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse + clip + currentlinewidth 0.5 mul setlinewidth + /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def + 0 0 M PFa 5 get rotate PFs -2 div dup translate + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 M 0 PFs V} for + 0 PFa 6 get ne { + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 2 1 roll M PFs 0 V} for + } if + stroke grestore} def +% +/languagelevel where + {pop languagelevel} {1} ifelse + 2 lt + {/InterpretLevel1 true def} + {/InterpretLevel1 Level1 def} + ifelse +% +% PostScript level 2 pattern fill definitions +% +/Level2PatternFill { +/Tile8x8 {/PaintType 2 /PatternType 1 /TilingType 1 /BBox [0 0 8 8] /XStep 8 /YStep 8} + bind def +/KeepColor {currentrgbcolor [/Pattern /DeviceRGB] setcolorspace} bind def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke} +>> matrix makepattern +/Pat1 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke + 0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke} +>> matrix makepattern +/Pat2 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L + 8 8 L 8 0 L 0 0 L fill} +>> matrix makepattern +/Pat3 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L + 0 12 M 12 0 L stroke} +>> matrix makepattern +/Pat4 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L + 0 -4 M 12 8 L stroke} +>> matrix makepattern +/Pat5 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L + 0 12 M 8 -4 L 4 12 M 10 0 L stroke} +>> matrix makepattern +/Pat6 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L + 0 -4 M 8 12 L 4 -4 M 10 8 L stroke} +>> matrix makepattern +/Pat7 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L + 12 0 M -4 8 L 12 4 M 0 10 L stroke} +>> matrix makepattern +/Pat8 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L + -4 0 M 12 8 L -4 4 M 8 10 L stroke} +>> matrix makepattern +/Pat9 exch def +/Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def +/Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def +/Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def +/Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def +/Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def +/Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def +/Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def +} def +% +% +%End of PostScript Level 2 code +% +/PatternBgnd { + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse +} def +% +% Substitute for Level 2 pattern fill codes with +% grayscale if Level 2 support is not selected. +% +/Level1PatternFill { +/Pattern1 {0.250 Density} bind def +/Pattern2 {0.500 Density} bind def +/Pattern3 {0.750 Density} bind def +/Pattern4 {0.125 Density} bind def +/Pattern5 {0.375 Density} bind def +/Pattern6 {0.625 Density} bind def +/Pattern7 {0.875 Density} bind def +} def +% +% Now test for support of Level 2 code +% +Level1 {Level1PatternFill} {Level2PatternFill} ifelse +% +/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont +dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall +currentdict end definefont pop +% +% Encoding for ISO-8859-1 (also called Latin1) +% +/reencodeISO { +dup dup findfont dup length dict begin +{ 1 index /FID ne { def }{ pop pop } ifelse } forall +currentdict /CharStrings known { + CharStrings /Idieresis known { + /Encoding ISOLatin1Encoding def } if +} if +currentdict end definefont +} def +/ISOLatin1Encoding [ +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright +/parenleft/parenright/asterisk/plus/comma/minus/period/slash +/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon +/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N +/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright +/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m +/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve +/dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut +/ogonek/caron/space/exclamdown/cent/sterling/currency/yen/brokenbar +/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot +/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior +/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine +/guillemotright/onequarter/onehalf/threequarters/questiondown +/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla +/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex +/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis +/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute +/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis +/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave +/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex +/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis +/yacute/thorn/ydieresis +] def +/MFshow { + { dup 5 get 3 ge + { 5 get 3 eq {gsave} {grestore} ifelse } + {dup dup 0 get findfont exch 1 get scalefont setfont + [ currentpoint ] exch dup 2 get 0 exch R dup 5 get 2 ne {dup dup 6 + get exch 4 get {Gshow} {stringwidth pop 0 R} ifelse }if dup 5 get 0 eq + {dup 3 get {2 get neg 0 exch R pop} {pop aload pop M} ifelse} {dup 5 + get 1 eq {dup 2 get exch dup 3 get exch 6 get stringwidth pop -2 div + dup 0 R} {dup 6 get stringwidth pop -2 div 0 R 6 get + show 2 index {aload pop M neg 3 -1 roll neg R pop pop} {pop pop pop + pop aload pop M} ifelse }ifelse }ifelse } + ifelse } + forall} def +/Gswidth {dup type /stringtype eq {stringwidth} {pop (n) stringwidth} ifelse} def +/MFwidth {0 exch { dup 5 get 3 ge { 5 get 3 eq { 0 } { pop } ifelse } + {dup 3 get{dup dup 0 get findfont exch 1 get scalefont setfont + 6 get Gswidth pop add} {pop} ifelse} ifelse} forall} def +/MLshow { currentpoint stroke M + 0 exch R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MRshow { currentpoint stroke M + exch dup MFwidth neg 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MCshow { currentpoint stroke M + exch dup MFwidth -2 div 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/XYsave { [( ) 1 2 true false 3 ()] } bind def +/XYrestore { [( ) 1 2 true false 4 ()] } bind def +/Helvetica reencodeISO def +Level1 SuppressPDFMark or +{} { +/SDict 10 dict def +systemdict /pdfmark known not { + userdict /pdfmark systemdict /cleartomark get put +} if +SDict begin [ + /Title () + /Subject (gnuplot plot) + /Creator (gnuplot 4.6 patchlevel 6) + /Author (afanfakh) +% /Producer (gnuplot) +% /Keywords () + /CreationDate (Thu Oct 22 17:46:42 2015) + /DOCINFO pdfmark +end +} ifelse +end +%%EndProlog +%%Page: 1 1 +gnudict begin +gsave +doclip +50 50 translate +0.100 0.100 scale +0 setgray +newpath +(Helvetica) findfont 110 scalefont setfont +BackgroundColor 0 lt 3 1 roll 0 lt exch 0 lt or or not {gsave BackgroundColor C clippath fill grestore} if +1.000 UL +LTb +803 352 M +63 0 V +3975 0 R +-63 0 V +stroke +737 352 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 0)] +] -50.0 MRshow +1.000 UL +LTb +803 414 M +31 0 V +4007 0 R +-31 0 V +803 477 M +31 0 V +4007 0 R +-31 0 V +803 539 M +31 0 V +4007 0 R +-31 0 V +803 601 M +31 0 V +4007 0 R +-31 0 V +803 664 M +63 0 V +3975 0 R +-63 0 V +stroke +737 664 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 300000)] +] -50.0 MRshow +1.000 UL +LTb +803 726 M +31 0 V +4007 0 R +-31 0 V +803 788 M +31 0 V +4007 0 R +-31 0 V +803 851 M +31 0 V +4007 0 R +-31 0 V +803 913 M +31 0 V +4007 0 R +-31 0 V +803 975 M +63 0 V +3975 0 R +-63 0 V +stroke +737 975 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 600000)] +] -50.0 MRshow +1.000 UL +LTb +803 1038 M +31 0 V +4007 0 R +-31 0 V +803 1100 M +31 0 V +4007 0 R +-31 0 V +803 1162 M +31 0 V +4007 0 R +-31 0 V +803 1224 M +31 0 V +4007 0 R +-31 0 V +803 1287 M +63 0 V +3975 0 R +-63 0 V +stroke +737 1287 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 900000)] +] -50.0 MRshow +1.000 UL +LTb +803 1349 M +31 0 V +4007 0 R +-31 0 V +803 1411 M +31 0 V +4007 0 R +-31 0 V +803 1474 M +31 0 V +4007 0 R +-31 0 V +803 1536 M +31 0 V +4007 0 R +-31 0 V +803 1598 M +63 0 V +3975 0 R +-63 0 V +stroke +737 1598 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 1.2e+06)] +] -50.0 MRshow +1.000 UL +LTb +803 1661 M +31 0 V +4007 0 R +-31 0 V +803 1723 M +31 0 V +4007 0 R +-31 0 V +803 1785 M +31 0 V +4007 0 R +-31 0 V +803 1848 M +31 0 V +4007 0 R +-31 0 V +803 1910 M +63 0 V +3975 0 R +-63 0 V +stroke +737 1910 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 1.5e+06)] +] -50.0 MRshow +1.000 UL +LTb +803 1972 M +31 0 V +4007 0 R +-31 0 V +803 2035 M +31 0 V +4007 0 R +-31 0 V +803 2097 M +31 0 V +4007 0 R +-31 0 V +803 2159 M +31 0 V +4007 0 R +-31 0 V +803 2222 M +63 0 V +3975 0 R +-63 0 V +stroke +737 2222 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 1.8e+06)] +] -50.0 MRshow +1.000 UL +LTb +803 2284 M +31 0 V +4007 0 R +-31 0 V +803 2346 M +31 0 V +4007 0 R +-31 0 V +803 2409 M +31 0 V +4007 0 R +-31 0 V +803 2471 M +31 0 V +4007 0 R +-31 0 V +803 2533 M +63 0 V +3975 0 R +-63 0 V +stroke +737 2533 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 2.1e+06)] +] -50.0 MRshow +1.000 UL +LTb +803 2596 M +31 0 V +4007 0 R +-31 0 V +803 2658 M +31 0 V +4007 0 R +-31 0 V +803 2720 M +31 0 V +4007 0 R +-31 0 V +803 2782 M +31 0 V +4007 0 R +-31 0 V +803 2845 M +63 0 V +3975 0 R +-63 0 V +stroke +737 2845 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 2.4e+06)] +] -50.0 MRshow +1.000 UL +LTb +803 2907 M +31 0 V +4007 0 R +-31 0 V +803 2969 M +31 0 V +4007 0 R +-31 0 V +803 3032 M +31 0 V +4007 0 R +-31 0 V +803 3094 M +31 0 V +4007 0 R +-31 0 V +803 3156 M +63 0 V +3975 0 R +-63 0 V +stroke +737 3156 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 2.7e+06)] +] -50.0 MRshow +1.000 UL +LTb +803 3219 M +31 0 V +4007 0 R +-31 0 V +803 3281 M +31 0 V +4007 0 R +-31 0 V +803 3343 M +31 0 V +4007 0 R +-31 0 V +803 3406 M +31 0 V +4007 0 R +-31 0 V +803 3468 M +63 0 V +3975 0 R +-63 0 V +stroke +737 3468 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 3e+06)] +] -50.0 MRshow +1.000 UL +LTb +803 352 M +0 63 V +0 3053 R +0 -63 V +stroke +803 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (CG)] +] -50.0 MCshow +1.000 UL +LTb +1476 352 M +0 63 V +0 3053 R +0 -63 V +stroke +1476 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (MG)] +] -50.0 MCshow +1.000 UL +LTb +2149 352 M +0 63 V +0 3053 R +0 -63 V +stroke +2149 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (EP)] +] -50.0 MCshow +1.000 UL +LTb +2822 352 M +0 63 V +0 3053 R +0 -63 V +stroke +2822 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (LU)] +] -50.0 MCshow +1.000 UL +LTb +3495 352 M +0 63 V +0 3053 R +0 -63 V +stroke +3495 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (BT)] +] -50.0 MCshow +1.000 UL +LTb +4168 352 M +0 63 V +0 3053 R +0 -63 V +stroke +4168 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (SP)] +] -50.0 MCshow +1.000 UL +LTb +4841 352 M +0 63 V +0 3053 R +0 -63 V +stroke +4841 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (FT)] +] -50.0 MCshow +1.000 UL +LTb +1.000 UL +LTb +803 3468 N +803 352 L +4038 0 V +0 3116 V +-4038 0 V +Z stroke +LCb setrgbcolor +88 1910 M +currentpoint gsave translate -270 rotate 0 0 moveto +[ [(Helvetica) 180.0 0.0 true true 0 (Energy consumption [J])] +] -60.0 MCshow +grestore +LTb +LCb setrgbcolor +2822 77 M +[ [(Helvetica) 180.0 0.0 true true 0 (NAS parallel benchmarks)] +] -60.0 MCshow +LTb +1.000 UP +1.000 UL +LTb +% Begin plot #1 +1.000 UP +1.000 UL +LT0 +0.10 0.10 0.44 C LCb setrgbcolor +2767 3298 M +[ [(Helvetica) 140.0 0.0 true true 0 (One core per node scenario)] +] -46.7 MRshow +LT0 +0.10 0.10 0.44 C 2833 3298 M +327 0 V +803 768 M +1476 427 L +673 92 V +673 625 V +3495 610 L +673 1288 V +4841 705 L +803 768 Pls +1476 427 Pls +2149 519 Pls +2822 1144 Pls +3495 610 Pls +4168 1898 Pls +4841 705 Pls +2996 3298 Pls +% End plot #1 +% Begin plot #2 +1.000 UP +1.000 UL +LT1 +1.00 0.00 0.00 C LCb setrgbcolor +2767 3166 M +[ [(Helvetica) 140.0 0.0 true true 0 (Multicores per node scenario)] +] -46.7 MRshow +LT1 +1.00 0.00 0.00 C 2833 3166 M +327 0 V +803 1231 M +1476 494 L +673 48 V +673 355 V +3495 718 L +673 2118 V +4841 631 L +803 1231 Crs +1476 494 Crs +2149 542 Crs +2822 897 Crs +3495 718 Crs +4168 2836 Crs +4841 631 Crs +2996 3166 Crs +% End plot #2 +1.000 UL +LTb +803 3468 N +803 352 L +4038 0 V +0 3116 V +-4038 0 V +Z stroke +1.000 UP +1.000 UL +LTb +stroke +grestore +end +showpage +%%Trailer +%%DocumentFonts: Helvetica +%%Pages: 1 diff --git a/fig/ch3/eng_con_scenarios-eps-converted-to.pdf b/fig/ch3/eng_con_scenarios-eps-converted-to.pdf new file mode 100644 index 0000000000000000000000000000000000000000..ff5a6903d3a5b01535b8b7386de4ca5fbeee89ef GIT binary patch literal 9314 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 matrix makepattern +/Pat1 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke + 0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke} +>> matrix makepattern +/Pat2 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L + 8 8 L 8 0 L 0 0 L fill} +>> matrix makepattern +/Pat3 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L + 0 12 M 12 0 L stroke} +>> matrix makepattern +/Pat4 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L + 0 -4 M 12 8 L stroke} +>> matrix makepattern +/Pat5 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L + 0 12 M 8 -4 L 4 12 M 10 0 L stroke} +>> matrix makepattern +/Pat6 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L + 0 -4 M 8 12 L 4 -4 M 10 8 L stroke} +>> matrix makepattern +/Pat7 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L + 12 0 M -4 8 L 12 4 M 0 10 L stroke} +>> matrix makepattern +/Pat8 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L + -4 0 M 12 8 L -4 4 M 8 10 L stroke} +>> matrix makepattern +/Pat9 exch def +/Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def +/Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def +/Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def +/Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def +/Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def +/Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def +/Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def +} def +% +% +%End of PostScript Level 2 code +% +/PatternBgnd { + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse +} def +% +% Substitute for Level 2 pattern fill codes with +% grayscale if Level 2 support is not selected. +% +/Level1PatternFill { +/Pattern1 {0.250 Density} bind def +/Pattern2 {0.500 Density} bind def +/Pattern3 {0.750 Density} bind def +/Pattern4 {0.125 Density} bind def +/Pattern5 {0.375 Density} bind def +/Pattern6 {0.625 Density} bind def +/Pattern7 {0.875 Density} bind def +} def +% +% Now test for support of Level 2 code +% +Level1 {Level1PatternFill} {Level2PatternFill} ifelse +% +/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont +dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall +currentdict end definefont pop +% +% Encoding for ISO-8859-1 (also called Latin1) +% +/reencodeISO { +dup dup findfont dup length dict begin +{ 1 index /FID ne { def }{ pop pop } ifelse } forall +currentdict /CharStrings known { + CharStrings /Idieresis known { + /Encoding ISOLatin1Encoding def } if +} if +currentdict end definefont +} def +/ISOLatin1Encoding [ +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright +/parenleft/parenright/asterisk/plus/comma/minus/period/slash +/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon +/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N +/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright +/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m +/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve +/dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut +/ogonek/caron/space/exclamdown/cent/sterling/currency/yen/brokenbar +/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot +/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior +/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine +/guillemotright/onequarter/onehalf/threequarters/questiondown +/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla +/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex +/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis +/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute +/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis +/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave +/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex +/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis +/yacute/thorn/ydieresis +] def +/MFshow { + { dup 5 get 3 ge + { 5 get 3 eq {gsave} {grestore} ifelse } + {dup dup 0 get findfont exch 1 get scalefont setfont + [ currentpoint ] exch dup 2 get 0 exch R dup 5 get 2 ne {dup dup 6 + get exch 4 get {Gshow} {stringwidth pop 0 R} ifelse }if dup 5 get 0 eq + {dup 3 get {2 get neg 0 exch R pop} {pop aload pop M} ifelse} {dup 5 + get 1 eq {dup 2 get exch dup 3 get exch 6 get stringwidth pop -2 div + dup 0 R} {dup 6 get stringwidth pop -2 div 0 R 6 get + show 2 index {aload pop M neg 3 -1 roll neg R pop pop} {pop pop pop + pop aload pop M} ifelse }ifelse }ifelse } + ifelse } + forall} def +/Gswidth {dup type /stringtype eq {stringwidth} {pop (n) stringwidth} ifelse} def +/MFwidth {0 exch { dup 5 get 3 ge { 5 get 3 eq { 0 } { pop } ifelse } + {dup 3 get{dup dup 0 get findfont exch 1 get scalefont setfont + 6 get Gswidth pop add} {pop} ifelse} ifelse} forall} def +/MLshow { currentpoint stroke M + 0 exch R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MRshow { currentpoint stroke M + exch dup MFwidth neg 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MCshow { currentpoint stroke M + exch dup MFwidth -2 div 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/XYsave { [( ) 1 2 true false 3 ()] } bind def +/XYrestore { [( ) 1 2 true false 4 ()] } bind def +/Helvetica reencodeISO def +Level1 SuppressPDFMark or +{} { +/SDict 10 dict def +systemdict /pdfmark known not { + userdict /pdfmark systemdict /cleartomark get put +} if +SDict begin [ + /Title () + /Subject (gnuplot plot) + /Creator (gnuplot 4.6 patchlevel 6) + /Author (afanfakh) +% /Producer (gnuplot) +% /Keywords () + /CreationDate (Thu Oct 22 12:39:18 2015) + /DOCINFO pdfmark +end +} ifelse +end +%%EndProlog +%%Page: 1 1 +gnudict begin +gsave +doclip +50 50 translate +0.100 0.100 scale +0 setgray +newpath +(Helvetica) findfont 110 scalefont setfont +BackgroundColor 0 lt 3 1 roll 0 lt exch 0 lt or or not {gsave BackgroundColor C clippath fill grestore} if +1.000 UL +LTb +803 352 M +63 0 V +3975 0 R +-63 0 V +stroke +737 352 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 0)] +] -50.0 MRshow +1.000 UL +LTb +803 427 M +31 0 V +4007 0 R +-31 0 V +803 502 M +31 0 V +4007 0 R +-31 0 V +803 576 M +31 0 V +4007 0 R +-31 0 V +803 651 M +31 0 V +4007 0 R +-31 0 V +803 726 M +63 0 V +3975 0 R +-63 0 V +stroke +737 726 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 300000)] +] -50.0 MRshow +1.000 UL +LTb +803 801 M +31 0 V +4007 0 R +-31 0 V +803 875 M +31 0 V +4007 0 R +-31 0 V +803 950 M +31 0 V +4007 0 R +-31 0 V +803 1025 M +31 0 V +4007 0 R +-31 0 V +803 1100 M +63 0 V +3975 0 R +-63 0 V +stroke +737 1100 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 600000)] +] -50.0 MRshow +1.000 UL +LTb +803 1175 M +31 0 V +4007 0 R +-31 0 V +803 1249 M +31 0 V +4007 0 R +-31 0 V +803 1324 M +31 0 V +4007 0 R +-31 0 V +803 1399 M +31 0 V +4007 0 R +-31 0 V +803 1474 M +63 0 V +3975 0 R +-63 0 V +stroke +737 1474 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 900000)] +] -50.0 MRshow +1.000 UL +LTb +803 1549 M +31 0 V +4007 0 R +-31 0 V +803 1623 M +31 0 V +4007 0 R +-31 0 V +803 1698 M +31 0 V +4007 0 R +-31 0 V +803 1773 M +31 0 V +4007 0 R +-31 0 V +803 1848 M +63 0 V +3975 0 R +-63 0 V +stroke +737 1848 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 1.2e+06)] +] -50.0 MRshow +1.000 UL +LTb +803 1922 M +31 0 V +4007 0 R +-31 0 V +803 1997 M +31 0 V +4007 0 R +-31 0 V +803 2072 M +31 0 V +4007 0 R +-31 0 V +803 2147 M +31 0 V +4007 0 R +-31 0 V +803 2222 M +63 0 V +3975 0 R +-63 0 V +stroke +737 2222 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 1.5e+06)] +] -50.0 MRshow +1.000 UL +LTb +803 2296 M +31 0 V +4007 0 R +-31 0 V +803 2371 M +31 0 V +4007 0 R +-31 0 V +803 2446 M +31 0 V +4007 0 R +-31 0 V +803 2521 M +31 0 V +4007 0 R +-31 0 V +803 2596 M +63 0 V +3975 0 R +-63 0 V +stroke +737 2596 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 1.8e+06)] +] -50.0 MRshow +1.000 UL +LTb +803 2670 M +31 0 V +4007 0 R +-31 0 V +803 2745 M +31 0 V +4007 0 R +-31 0 V +803 2820 M +31 0 V +4007 0 R +-31 0 V +803 2895 M +31 0 V +4007 0 R +-31 0 V +803 2969 M +63 0 V +3975 0 R +-63 0 V +stroke +737 2969 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 2.1e+06)] +] -50.0 MRshow +1.000 UL +LTb +803 3044 M +31 0 V +4007 0 R +-31 0 V +803 3119 M +31 0 V +4007 0 R +-31 0 V +803 3194 M +31 0 V +4007 0 R +-31 0 V +803 3269 M +31 0 V +4007 0 R +-31 0 V +803 3343 M +63 0 V +3975 0 R +-63 0 V +stroke +737 3343 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 2.4e+06)] +] -50.0 MRshow +1.000 UL +LTb +803 3418 M +31 0 V +4007 0 R +-31 0 V +803 352 M +0 63 V +0 3053 R +0 -63 V +stroke +803 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (CG)] +] -50.0 MCshow +1.000 UL +LTb +1476 352 M +0 63 V +0 3053 R +0 -63 V +stroke +1476 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (MG)] +] -50.0 MCshow +1.000 UL +LTb +2149 352 M +0 63 V +0 3053 R +0 -63 V +stroke +2149 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (EP)] +] -50.0 MCshow +1.000 UL +LTb +2822 352 M +0 63 V +0 3053 R +0 -63 V +stroke +2822 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (LU)] +] -50.0 MCshow +1.000 UL +LTb +3495 352 M +0 63 V +0 3053 R +0 -63 V +stroke +3495 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (BT)] +] -50.0 MCshow +1.000 UL +LTb +4168 352 M +0 63 V +0 3053 R +0 -63 V +stroke +4168 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (SP)] +] -50.0 MCshow +1.000 UL +LTb +4841 352 M +0 63 V +0 3053 R +0 -63 V +stroke +4841 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (FT)] +] -50.0 MCshow +1.000 UL +LTb +1.000 UL +LTb +803 3468 N +803 352 L +4038 0 V +0 3116 V +-4038 0 V +Z stroke +LCb setrgbcolor +88 1910 M +currentpoint gsave translate -270 rotate 0 0 moveto +[ [(Helvetica) 180.0 0.0 true true 0 (Energy consumption [J])] +] -60.0 MCshow +grestore +LTb +LCb setrgbcolor +2822 77 M +[ [(Helvetica) 180.0 0.0 true true 0 (NAS parallel benchmarks)] +] -60.0 MCshow +LTb +1.000 UP +1.000 UL +LTb +% Begin plot #1 +1.000 UP +1.000 UL +LT0 +0.10 0.10 0.44 C LCb setrgbcolor +2228 3277 M +[ [(Helvetica) 140.0 0.0 true true 0 (One site/ 16 nodes)] +] -46.7 MRshow +LT0 +0.10 0.10 0.44 C 2294 3277 M +327 0 V +803 804 M +1476 430 L +673 152 V +673 1594 V +673 -817 V +673 683 V +4841 731 L +803 804 Pls +1476 430 Pls +2149 582 Pls +2822 2176 Pls +3495 1359 Pls +4168 2042 Pls +4841 731 Pls +2457 3277 Pls +% End plot #1 +% Begin plot #2 +1.000 UP +1.000 UL +LT1 +1.00 0.00 0.00 C LCb setrgbcolor +2228 3145 M +[ [(Helvetica) 140.0 0.0 true true 0 (One site/ 32 nodes)] +] -46.7 MRshow +LT1 +1.00 0.00 0.00 C 2294 3145 M +327 0 V +803 851 M +1476 442 L +673 111 V +673 750 V +3495 661 L +673 1546 V +4841 776 L +803 851 Crs +1476 442 Crs +2149 553 Crs +2822 1303 Crs +3495 661 Crs +4168 2207 Crs +4841 776 Crs +2457 3145 Crs +% End plot #2 +% Begin plot #3 +1.000 UP +1.000 UL +LT2 +0.00 0.39 0.00 C LCb setrgbcolor +2228 3013 M +[ [(Helvetica) 140.0 0.0 true true 0 (Two sites/ 16 nodes)] +] -46.7 MRshow +LT2 +0.00 0.39 0.00 C 2294 3013 M +327 0 V +803 1202 M +1476 475 L +673 78 V +673 1763 V +673 -909 V +673 1111 V +4841 1228 L +803 1202 Star +1476 475 Star +2149 553 Star +2822 2316 Star +3495 1407 Star +4168 2518 Star +4841 1228 Star +2457 3013 Star +% End plot #3 +% Begin plot #4 +1.000 UP +1.000 UL +LT3 +0.72 0.53 0.04 C LCb setrgbcolor +2228 2881 M +[ [(Helvetica) 140.0 0.0 true true 0 (Two sites/ 32 nodes)] +] -46.7 MRshow +LT3 +0.72 0.53 0.04 C 2294 2881 M +327 0 V +803 1704 M +1476 504 L +673 45 V +673 1278 V +673 -69 V +673 1532 V +4841 1258 L +803 1704 Box +1476 504 Box +2149 549 Box +2822 1827 Box +3495 1758 Box +4168 3290 Box +4841 1258 Box +2457 2881 Box +% End plot #4 +1.000 UL +LTb +803 3468 N +803 352 L +4038 0 V +0 3116 V +-4038 0 V +Z stroke +1.000 UP +1.000 UL +LTb +stroke +grestore +end +showpage +%%Trailer +%%DocumentFonts: Helvetica +%%Pages: 1 diff --git a/fig/ch3/eng_pow-eps-converted-to.pdf b/fig/ch3/eng_pow-eps-converted-to.pdf new file mode 100644 index 0000000000000000000000000000000000000000..de6f852477ab6752dca5b5b56d359f0c1aedc52c GIT binary patch literal 7951 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 matrix makepattern +/Pat1 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke + 0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke} +>> matrix makepattern +/Pat2 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L + 8 8 L 8 0 L 0 0 L fill} +>> matrix makepattern +/Pat3 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L + 0 12 M 12 0 L stroke} +>> matrix makepattern +/Pat4 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L + 0 -4 M 12 8 L stroke} +>> matrix makepattern +/Pat5 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L + 0 12 M 8 -4 L 4 12 M 10 0 L stroke} +>> matrix makepattern +/Pat6 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L + 0 -4 M 8 12 L 4 -4 M 10 8 L stroke} +>> matrix makepattern +/Pat7 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L + 12 0 M -4 8 L 12 4 M 0 10 L stroke} +>> matrix makepattern +/Pat8 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L + -4 0 M 12 8 L -4 4 M 8 10 L stroke} +>> matrix makepattern +/Pat9 exch def +/Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def +/Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def +/Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def +/Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def +/Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def +/Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def +/Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def +} def +% +% +%End of PostScript Level 2 code +% +/PatternBgnd { + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse +} def +% +% Substitute for Level 2 pattern fill codes with +% grayscale if Level 2 support is not selected. +% +/Level1PatternFill { +/Pattern1 {0.250 Density} bind def +/Pattern2 {0.500 Density} bind def +/Pattern3 {0.750 Density} bind def +/Pattern4 {0.125 Density} bind def +/Pattern5 {0.375 Density} bind def +/Pattern6 {0.625 Density} bind def +/Pattern7 {0.875 Density} bind def +} def +% +% Now test for support of Level 2 code +% +Level1 {Level1PatternFill} {Level2PatternFill} ifelse +% +/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont +dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall +currentdict end definefont pop +% +% Encoding for ISO-8859-1 (also called Latin1) +% +/reencodeISO { +dup dup findfont dup length dict begin +{ 1 index /FID ne { def }{ pop pop } ifelse } forall +currentdict /CharStrings known { + CharStrings /Idieresis known { + /Encoding ISOLatin1Encoding def } if +} if +currentdict end definefont +} def +/ISOLatin1Encoding [ +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright +/parenleft/parenright/asterisk/plus/comma/minus/period/slash +/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon +/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N +/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright +/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m +/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve +/dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut +/ogonek/caron/space/exclamdown/cent/sterling/currency/yen/brokenbar +/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot +/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior +/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine +/guillemotright/onequarter/onehalf/threequarters/questiondown +/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla +/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex +/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis +/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute +/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis +/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave +/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex +/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis +/yacute/thorn/ydieresis +] def +/MFshow { + { dup 5 get 3 ge + { 5 get 3 eq {gsave} {grestore} ifelse } + {dup dup 0 get findfont exch 1 get scalefont setfont + [ currentpoint ] exch dup 2 get 0 exch R dup 5 get 2 ne {dup dup 6 + get exch 4 get {Gshow} {stringwidth pop 0 R} ifelse }if dup 5 get 0 eq + {dup 3 get {2 get neg 0 exch R pop} {pop aload pop M} ifelse} {dup 5 + get 1 eq {dup 2 get exch dup 3 get exch 6 get stringwidth pop -2 div + dup 0 R} {dup 6 get stringwidth pop -2 div 0 R 6 get + show 2 index {aload pop M neg 3 -1 roll neg R pop pop} {pop pop pop + pop aload pop M} ifelse }ifelse }ifelse } + ifelse } + forall} def +/Gswidth {dup type /stringtype eq {stringwidth} {pop (n) stringwidth} ifelse} def +/MFwidth {0 exch { dup 5 get 3 ge { 5 get 3 eq { 0 } { pop } ifelse } + {dup 3 get{dup dup 0 get findfont exch 1 get scalefont setfont + 6 get Gswidth pop add} {pop} ifelse} ifelse} forall} def +/MLshow { currentpoint stroke M + 0 exch R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MRshow { currentpoint stroke M + exch dup MFwidth neg 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MCshow { currentpoint stroke M + exch dup MFwidth -2 div 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/XYsave { [( ) 1 2 true false 3 ()] } bind def +/XYrestore { [( ) 1 2 true false 4 ()] } bind def +/Helvetica reencodeISO def +Level1 SuppressPDFMark or +{} { +/SDict 10 dict def +systemdict /pdfmark known not { + userdict /pdfmark systemdict /cleartomark get put +} if +SDict begin [ + /Title () + /Subject (gnuplot plot) + /Creator (gnuplot 4.6 patchlevel 6) + /Author (afanfakh) +% /Producer (gnuplot) +% /Keywords () + /CreationDate (Thu Oct 22 12:43:52 2015) + /DOCINFO pdfmark +end +} ifelse +end +%%EndProlog +%%Page: 1 1 +gnudict begin +gsave +doclip +50 50 translate +0.100 0.100 scale +0 setgray +newpath +(Helvetica) findfont 110 scalefont setfont +BackgroundColor 0 lt 3 1 roll 0 lt exch 0 lt or or not {gsave BackgroundColor C clippath fill grestore} if +1.000 UL +LTb +473 352 M +63 0 V +4305 0 R +-63 0 V +stroke +407 352 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 0)] +] -50.0 MRshow +1.000 UL +LTb +473 421 M +31 0 V +4337 0 R +-31 0 V +473 490 M +31 0 V +4337 0 R +-31 0 V +473 560 M +31 0 V +4337 0 R +-31 0 V +473 629 M +31 0 V +4337 0 R +-31 0 V +473 698 M +63 0 V +4305 0 R +-63 0 V +stroke +407 698 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 5)] +] -50.0 MRshow +1.000 UL +LTb +473 767 M +31 0 V +4337 0 R +-31 0 V +473 837 M +31 0 V +4337 0 R +-31 0 V +473 906 M +31 0 V +4337 0 R +-31 0 V +473 975 M +31 0 V +4337 0 R +-31 0 V +473 1044 M +63 0 V +4305 0 R +-63 0 V +stroke +407 1044 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 10)] +] -50.0 MRshow +1.000 UL +LTb +473 1114 M +31 0 V +4337 0 R +-31 0 V +473 1183 M +31 0 V +4337 0 R +-31 0 V +473 1252 M +31 0 V +4337 0 R +-31 0 V +473 1321 M +31 0 V +4337 0 R +-31 0 V +473 1391 M +63 0 V +4305 0 R +-63 0 V +stroke +407 1391 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 15)] +] -50.0 MRshow +1.000 UL +LTb +473 1460 M +31 0 V +4337 0 R +-31 0 V +473 1529 M +31 0 V +4337 0 R +-31 0 V +473 1598 M +31 0 V +4337 0 R +-31 0 V +473 1668 M +31 0 V +4337 0 R +-31 0 V +473 1737 M +63 0 V +4305 0 R +-63 0 V +stroke +407 1737 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 20)] +] -50.0 MRshow +1.000 UL +LTb +473 1806 M +31 0 V +4337 0 R +-31 0 V +473 1875 M +31 0 V +4337 0 R +-31 0 V +473 1945 M +31 0 V +4337 0 R +-31 0 V +473 2014 M +31 0 V +4337 0 R +-31 0 V +473 2083 M +63 0 V +4305 0 R +-63 0 V +stroke +407 2083 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 25)] +] -50.0 MRshow +1.000 UL +LTb +473 2152 M +31 0 V +4337 0 R +-31 0 V +473 2222 M +31 0 V +4337 0 R +-31 0 V +473 2291 M +31 0 V +4337 0 R +-31 0 V +473 2360 M +31 0 V +4337 0 R +-31 0 V +473 2429 M +63 0 V +4305 0 R +-63 0 V +stroke +407 2429 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 30)] +] -50.0 MRshow +1.000 UL +LTb +473 2499 M +31 0 V +4337 0 R +-31 0 V +473 2568 M +31 0 V +4337 0 R +-31 0 V +473 2637 M +31 0 V +4337 0 R +-31 0 V +473 2706 M +31 0 V +4337 0 R +-31 0 V +473 2776 M +63 0 V +4305 0 R +-63 0 V +stroke +407 2776 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 35)] +] -50.0 MRshow +1.000 UL +LTb +473 2845 M +31 0 V +4337 0 R +-31 0 V +473 2914 M +31 0 V +4337 0 R +-31 0 V +473 2983 M +31 0 V +4337 0 R +-31 0 V +473 3053 M +31 0 V +4337 0 R +-31 0 V +473 3122 M +63 0 V +4305 0 R +-63 0 V +stroke +407 3122 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 40)] +] -50.0 MRshow +1.000 UL +LTb +473 3191 M +31 0 V +4337 0 R +-31 0 V +473 3260 M +31 0 V +4337 0 R +-31 0 V +473 3330 M +31 0 V +4337 0 R +-31 0 V +473 3399 M +31 0 V +4337 0 R +-31 0 V +473 3468 M +63 0 V +4305 0 R +-63 0 V +stroke +407 3468 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 45)] +] -50.0 MRshow +1.000 UL +LTb +1019 352 M +0 63 V +0 3053 R +0 -63 V +stroke +1019 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (CG)] +] -50.0 MCshow +1.000 UL +LTb +1565 352 M +0 63 V +0 3053 R +0 -63 V +stroke +1565 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (MG)] +] -50.0 MCshow +1.000 UL +LTb +2111 352 M +0 63 V +0 3053 R +0 -63 V +stroke +2111 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (EP)] +] -50.0 MCshow +1.000 UL +LTb +2657 352 M +0 63 V +0 3053 R +0 -63 V +stroke +2657 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (LU)] +] -50.0 MCshow +1.000 UL +LTb +3203 352 M +0 63 V +0 3053 R +0 -63 V +stroke +3203 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (BT)] +] -50.0 MCshow +1.000 UL +LTb +3749 352 M +0 63 V +0 3053 R +0 -63 V +stroke +3749 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (SP)] +] -50.0 MCshow +1.000 UL +LTb +4295 352 M +0 63 V +0 3053 R +0 -63 V +stroke +4295 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (FT)] +] -50.0 MCshow +1.000 UL +LTb +1.000 UL +LTb +473 3468 N +473 352 L +4368 0 V +0 3116 V +-4368 0 V +Z stroke +LCb setrgbcolor +88 1910 M +currentpoint gsave translate -270 rotate 0 0 moveto +[ [(Helvetica) 180.0 0.0 true true 0 (Energy saving)] +] -60.0 MCshow +grestore +LTb +LCb setrgbcolor +2657 77 M +[ [(Helvetica) 180.0 0.0 true true 0 (NAS parallel benchmarks)] +] -60.0 MCshow +LTb +1.000 UP +1.000 UL +LTb +% Begin plot #1 +1.000 UL +LT0 +0.10 0.10 0.44 C LCb setrgbcolor +1652 3333 M +[ [(Helvetica) 140.0 0.0 true true 0 (10% static power)] +] -46.7 MRshow +LT0 +0.10 0.10 0.44 C 1.000 1718 3300 327 66 BoxColFill +0.10 0.10 0.44 C 1.000 921 352 88 2602 BoxColFill +0.10 0.10 0.44 C 1.000 1467 352 88 2605 BoxColFill +0.10 0.10 0.44 C 1.000 2013 352 88 1788 BoxColFill +0.10 0.10 0.44 C 1.000 2559 352 88 2310 BoxColFill +0.10 0.10 0.44 C 1.000 3105 352 88 2771 BoxColFill +0.10 0.10 0.44 C 1.000 3651 352 88 2706 BoxColFill +0.10 0.10 0.44 C 1.000 4197 352 88 2566 BoxColFill +% End plot #1 +% Begin plot #2 +1.000 UL +LT1 +0.24 0.70 0.44 C LCb setrgbcolor +1652 3201 M +[ [(Helvetica) 140.0 0.0 true true 0 (20% static power)] +] -46.7 MRshow +LT1 +0.24 0.70 0.44 C 1.000 1718 3168 327 66 BoxColFill +0.24 0.70 0.44 C 1.000 1030 352 88 2096 BoxColFill +0.24 0.70 0.44 C 1.000 1576 352 88 2371 BoxColFill +0.24 0.70 0.44 C 1.000 2122 352 88 1740 BoxColFill +0.24 0.70 0.44 C 1.000 2668 352 88 1676 BoxColFill +0.24 0.70 0.44 C 1.000 3214 352 88 2497 BoxColFill +0.24 0.70 0.44 C 1.000 3760 352 88 2360 BoxColFill +0.24 0.70 0.44 C 1.000 4306 352 88 1665 BoxColFill +% End plot #2 +% Begin plot #3 +1.000 UL +LT0 +1.00 0.71 0.76 C LCb setrgbcolor +1652 3069 M +[ [(Helvetica) 140.0 0.0 true true 0 (30% static power)] +] -46.7 MRshow +LT0 +1.00 0.71 0.76 C 1.000 1718 3036 327 66 BoxColFill +1.00 0.71 0.76 C 1.000 1139 352 88 671 BoxColFill +1.00 0.71 0.76 C 1.000 1685 352 88 942 BoxColFill +1.00 0.71 0.76 C 1.000 2231 352 88 1468 BoxColFill +1.00 0.71 0.76 C 1.000 2777 352 88 326 BoxColFill +1.00 0.71 0.76 C 1.000 3323 352 88 1464 BoxColFill +1.00 0.71 0.76 C 1.000 3869 352 88 1038 BoxColFill +1.00 0.71 0.76 C 1.000 4415 352 88 640 BoxColFill +% End plot #3 +1.000 UL +LTb +473 3468 N +473 352 L +4368 0 V +0 3116 V +-4368 0 V +Z stroke +1.000 UP +1.000 UL +LTb +stroke +grestore +end +showpage +%%Trailer +%%DocumentFonts: Helvetica +%%Pages: 1 diff --git a/fig/ch3/eng_s-eps-converted-to.pdf b/fig/ch3/eng_s-eps-converted-to.pdf new file mode 100644 index 0000000000000000000000000000000000000000..eb9dd932f64ce5090b557364801317d3464f5268 GIT binary patch literal 24410 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 m=s-2<1a_JHV_Xy}N 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 literal 0 HcmV?d00001 diff --git a/fig/ch3/eng_s.eps b/fig/ch3/eng_s.eps new file mode 100644 index 0000000..f944e95 --- /dev/null +++ b/fig/ch3/eng_s.eps @@ -0,0 +1,949 @@ +%!PS-Adobe-2.0 +%%Creator: gnuplot 4.6 patchlevel 6 +%%CreationDate: Thu Oct 22 12:40:02 2015 +%%DocumentFonts: (atend) +%%BoundingBox: 50 50 554 410 +%%Orientation: Portrait +%%Pages: (atend) +%%EndComments +%%BeginProlog +/gnudict 256 dict def +gnudict begin +% +% The following true/false flags may be edited by hand if desired. +% The unit line width and grayscale image gamma correction may also be changed. +% +/Color false def +/Blacktext false def +/Solid false def +/Dashlength 1 def +/Landscape false def +/Level1 false def +/Rounded false def +/ClipToBoundingBox false def +/SuppressPDFMark false def +/TransparentPatterns false def +/gnulinewidth 5.000 def +/userlinewidth gnulinewidth def +/Gamma 1.0 def +/BackgroundColor {-1.000 -1.000 -1.000} def +% +/vshift -36 def +/dl1 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if +} def +/dl2 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul add } if +} def +/hpt_ 31.5 def +/vpt_ 31.5 def +/hpt hpt_ def +/vpt vpt_ def +/doclip { + ClipToBoundingBox { + newpath 50 50 moveto 554 50 lineto 554 410 lineto 50 410 lineto closepath + clip + } if +} def +% +% Gnuplot Prolog Version 4.6 (September 2012) +% +%/SuppressPDFMark true def +% +/M {moveto} bind def +/L {lineto} bind def +/R {rmoveto} bind def +/V {rlineto} bind def +/N {newpath moveto} bind def +/Z {closepath} bind def +/C {setrgbcolor} bind def +/f {rlineto fill} bind def +/g {setgray} bind def +/Gshow {show} def % May be redefined later in the file to support UTF-8 +/vpt2 vpt 2 mul def +/hpt2 hpt 2 mul def +/Lshow {currentpoint stroke M 0 vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Rshow {currentpoint stroke M dup stringwidth pop neg vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def + /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def +/DL {Color {setrgbcolor Solid {pop []} if 0 setdash} + {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse} def +/BL {stroke userlinewidth 2 mul setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/AL {stroke userlinewidth 2 div setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/UL {dup gnulinewidth mul /userlinewidth exch def + dup 1 lt {pop 1} if 10 mul /udl exch def} def +/PL {stroke userlinewidth setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +3.8 setmiterlimit +% Default Line colors +/LCw {1 1 1} def +/LCb {0 0 0} def +/LCa {0 0 0} def +/LC0 {1 0 0} def +/LC1 {0 1 0} def +/LC2 {0 0 1} def +/LC3 {1 0 1} def +/LC4 {0 1 1} def +/LC5 {1 1 0} def +/LC6 {0 0 0} def +/LC7 {1 0.3 0} def +/LC8 {0.5 0.5 0.5} def +% Default Line Types +/LTw {PL [] 1 setgray} def +/LTb {BL [] LCb DL} def +/LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def +/LT0 {PL [] LC0 DL} def +/LT1 {PL [4 dl1 2 dl2] LC1 DL} def +/LT2 {PL [2 dl1 3 dl2] LC2 DL} def +/LT3 {PL [1 dl1 1.5 dl2] LC3 DL} def +/LT4 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def +/LT5 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC5 DL} def +/LT6 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC6 DL} def +/LT7 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC7 DL} def +/LT8 {PL [2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 4 dl2] LC8 DL} def +/Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def +/Dia {stroke [] 0 setdash 2 copy vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke + Pnt} def +/Pls {stroke [] 0 setdash vpt sub M 0 vpt2 V + currentpoint stroke M + hpt neg vpt neg R hpt2 0 V stroke + } def +/Box {stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke + Pnt} def +/Crs {stroke [] 0 setdash exch hpt sub exch vpt add M + hpt2 vpt2 neg V currentpoint stroke M + hpt2 neg 0 R hpt2 vpt2 V stroke} def +/TriU {stroke [] 0 setdash 2 copy vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke + Pnt} def +/Star {2 copy Pls Crs} def +/BoxF {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath fill} def +/TriUF {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath fill} def +/TriD {stroke [] 0 setdash 2 copy vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke + Pnt} def +/TriDF {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath fill} def +/DiaF {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath fill} def +/Pent {stroke [] 0 setdash 2 copy gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore Pnt} def +/PentF {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath fill grestore} def +/Circle {stroke [] 0 setdash 2 copy + hpt 0 360 arc stroke Pnt} def +/CircleF {stroke [] 0 setdash hpt 0 360 arc fill} def +/C0 {BL [] 0 setdash 2 copy moveto vpt 90 450 arc} bind def +/C1 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + vpt 0 360 arc closepath} bind def +/C2 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C3 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C4 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C5 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc + 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc} bind def +/C6 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C7 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C8 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C9 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 450 arc closepath fill + vpt 0 360 arc closepath} bind def +/C10 {BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill + 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C11 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C12 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C13 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C14 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 360 arc closepath fill + vpt 0 360 arc} bind def +/C15 {BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/Rec {newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto + neg 0 rlineto closepath} bind def +/Square {dup Rec} bind def +/Bsquare {vpt sub exch vpt sub exch vpt2 Square} bind def +/S0 {BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare} bind def +/S1 {BL [] 0 setdash 2 copy vpt Square fill Bsquare} bind def +/S2 {BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S3 {BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare} bind def +/S4 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S5 {BL [] 0 setdash 2 copy 2 copy vpt Square fill + exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S6 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S7 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S8 {BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare} bind def +/S9 {BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S10 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill + Bsquare} bind def +/S11 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill + Bsquare} bind def +/S12 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare} bind def +/S13 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S14 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S15 {BL [] 0 setdash 2 copy Bsquare fill Bsquare} bind def +/D0 {gsave translate 45 rotate 0 0 S0 stroke grestore} bind def +/D1 {gsave translate 45 rotate 0 0 S1 stroke grestore} bind def +/D2 {gsave translate 45 rotate 0 0 S2 stroke grestore} bind def +/D3 {gsave translate 45 rotate 0 0 S3 stroke grestore} bind def +/D4 {gsave translate 45 rotate 0 0 S4 stroke grestore} bind def +/D5 {gsave translate 45 rotate 0 0 S5 stroke grestore} bind def +/D6 {gsave translate 45 rotate 0 0 S6 stroke grestore} bind def +/D7 {gsave translate 45 rotate 0 0 S7 stroke grestore} bind def +/D8 {gsave translate 45 rotate 0 0 S8 stroke grestore} bind def +/D9 {gsave translate 45 rotate 0 0 S9 stroke grestore} bind def +/D10 {gsave translate 45 rotate 0 0 S10 stroke grestore} bind def +/D11 {gsave translate 45 rotate 0 0 S11 stroke grestore} bind def +/D12 {gsave translate 45 rotate 0 0 S12 stroke grestore} bind def +/D13 {gsave translate 45 rotate 0 0 S13 stroke grestore} bind def +/D14 {gsave translate 45 rotate 0 0 S14 stroke grestore} bind def +/D15 {gsave translate 45 rotate 0 0 S15 stroke grestore} bind def +/DiaE {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke} def +/BoxE {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke} def +/TriUE {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke} def +/TriDE {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke} def +/PentE {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore} def +/CircE {stroke [] 0 setdash + hpt 0 360 arc stroke} def +/Opaque {gsave closepath 1 setgray fill grestore 0 setgray closepath} def +/DiaW {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V Opaque stroke} def +/BoxW {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V Opaque stroke} def +/TriUW {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V Opaque stroke} def +/TriDW {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V Opaque stroke} def +/PentW {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + Opaque stroke grestore} def +/CircW {stroke [] 0 setdash + hpt 0 360 arc Opaque stroke} def +/BoxFill {gsave Rec 1 setgray fill grestore} def +/Density { + /Fillden exch def + currentrgbcolor + /ColB exch def /ColG exch def /ColR exch def + /ColR ColR Fillden mul Fillden sub 1 add def + /ColG ColG Fillden mul Fillden sub 1 add def + /ColB ColB Fillden mul Fillden sub 1 add def + ColR ColG ColB setrgbcolor} def +/BoxColFill {gsave Rec PolyFill} def +/PolyFill {gsave Density fill grestore grestore} def +/h {rlineto rlineto rlineto gsave closepath fill grestore} bind def +% +% PostScript Level 1 Pattern Fill routine for rectangles +% Usage: x y w h s a XX PatternFill +% x,y = lower left corner of box to be filled +% w,h = width and height of box +% a = angle in degrees between lines and x-axis +% XX = 0/1 for no/yes cross-hatch +% +/PatternFill {gsave /PFa [ 9 2 roll ] def + PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate + PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse + clip + currentlinewidth 0.5 mul setlinewidth + /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def + 0 0 M PFa 5 get rotate PFs -2 div dup translate + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 M 0 PFs V} for + 0 PFa 6 get ne { + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 2 1 roll M PFs 0 V} for + } if + stroke grestore} def +% +/languagelevel where + {pop languagelevel} {1} ifelse + 2 lt + {/InterpretLevel1 true def} + {/InterpretLevel1 Level1 def} + ifelse +% +% PostScript level 2 pattern fill definitions +% +/Level2PatternFill { +/Tile8x8 {/PaintType 2 /PatternType 1 /TilingType 1 /BBox [0 0 8 8] /XStep 8 /YStep 8} + bind def +/KeepColor {currentrgbcolor [/Pattern /DeviceRGB] setcolorspace} bind def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke} +>> matrix makepattern +/Pat1 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke + 0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke} +>> matrix makepattern +/Pat2 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L + 8 8 L 8 0 L 0 0 L fill} +>> matrix makepattern +/Pat3 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L + 0 12 M 12 0 L stroke} +>> matrix makepattern +/Pat4 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L + 0 -4 M 12 8 L stroke} +>> matrix makepattern +/Pat5 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L + 0 12 M 8 -4 L 4 12 M 10 0 L stroke} +>> matrix makepattern +/Pat6 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L + 0 -4 M 8 12 L 4 -4 M 10 8 L stroke} +>> matrix makepattern +/Pat7 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L + 12 0 M -4 8 L 12 4 M 0 10 L stroke} +>> matrix makepattern +/Pat8 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L + -4 0 M 12 8 L -4 4 M 8 10 L stroke} +>> matrix makepattern +/Pat9 exch def +/Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def +/Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def +/Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def +/Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def +/Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def +/Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def +/Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def +} def +% +% +%End of PostScript Level 2 code +% +/PatternBgnd { + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse +} def +% +% Substitute for Level 2 pattern fill codes with +% grayscale if Level 2 support is not selected. +% +/Level1PatternFill { +/Pattern1 {0.250 Density} bind def +/Pattern2 {0.500 Density} bind def +/Pattern3 {0.750 Density} bind def +/Pattern4 {0.125 Density} bind def +/Pattern5 {0.375 Density} bind def +/Pattern6 {0.625 Density} bind def +/Pattern7 {0.875 Density} bind def +} def +% +% Now test for support of Level 2 code +% +Level1 {Level1PatternFill} {Level2PatternFill} ifelse +% +/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont +dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall +currentdict end definefont pop +% +% Encoding for ISO-8859-1 (also called Latin1) +% +/reencodeISO { +dup dup findfont dup length dict begin +{ 1 index /FID ne { def }{ pop pop } ifelse } forall +currentdict /CharStrings known { + CharStrings /Idieresis known { + /Encoding ISOLatin1Encoding def } if +} if +currentdict end definefont +} def +/ISOLatin1Encoding [ +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright +/parenleft/parenright/asterisk/plus/comma/minus/period/slash +/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon +/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N +/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright +/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m +/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve +/dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut +/ogonek/caron/space/exclamdown/cent/sterling/currency/yen/brokenbar +/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot +/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior +/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine +/guillemotright/onequarter/onehalf/threequarters/questiondown +/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla +/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex +/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis +/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute +/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis +/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave +/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex +/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis +/yacute/thorn/ydieresis +] def +/MFshow { + { dup 5 get 3 ge + { 5 get 3 eq {gsave} {grestore} ifelse } + {dup dup 0 get findfont exch 1 get scalefont setfont + [ currentpoint ] exch dup 2 get 0 exch R dup 5 get 2 ne {dup dup 6 + get exch 4 get {Gshow} {stringwidth pop 0 R} ifelse }if dup 5 get 0 eq + {dup 3 get {2 get neg 0 exch R pop} {pop aload pop M} ifelse} {dup 5 + get 1 eq {dup 2 get exch dup 3 get exch 6 get stringwidth pop -2 div + dup 0 R} {dup 6 get stringwidth pop -2 div 0 R 6 get + show 2 index {aload pop M neg 3 -1 roll neg R pop pop} {pop pop pop + pop aload pop M} ifelse }ifelse }ifelse } + ifelse } + forall} def +/Gswidth {dup type /stringtype eq {stringwidth} {pop (n) stringwidth} ifelse} def +/MFwidth {0 exch { dup 5 get 3 ge { 5 get 3 eq { 0 } { pop } ifelse } + {dup 3 get{dup dup 0 get findfont exch 1 get scalefont setfont + 6 get Gswidth pop add} {pop} ifelse} ifelse} forall} def +/MLshow { currentpoint stroke M + 0 exch R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MRshow { currentpoint stroke M + exch dup MFwidth neg 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MCshow { currentpoint stroke M + exch dup MFwidth -2 div 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/XYsave { [( ) 1 2 true false 3 ()] } bind def +/XYrestore { [( ) 1 2 true false 4 ()] } bind def +/Helvetica reencodeISO def +Level1 SuppressPDFMark or +{} { +/SDict 10 dict def +systemdict /pdfmark known not { + userdict /pdfmark systemdict /cleartomark get put +} if +SDict begin [ + /Title () + /Subject (gnuplot plot) + /Creator (gnuplot 4.6 patchlevel 6) + /Author (afanfakh) +% /Producer (gnuplot) +% /Keywords () + /CreationDate (Thu Oct 22 12:40:02 2015) + /DOCINFO pdfmark +end +} ifelse +end +%%EndProlog +%%Page: 1 1 +gnudict begin +gsave +doclip +50 50 translate +0.100 0.100 scale +0 setgray +newpath +(Helvetica) findfont 110 scalefont setfont +BackgroundColor 0 lt 3 1 roll 0 lt exch 0 lt or or not {gsave BackgroundColor C clippath fill grestore} if +1.000 UL +LTb +473 352 M +63 0 V +4305 0 R +-63 0 V +stroke +407 352 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 0)] +] -50.0 MRshow +1.000 UL +LTb +473 421 M +31 0 V +4337 0 R +-31 0 V +473 490 M +31 0 V +4337 0 R +-31 0 V +473 560 M +31 0 V +4337 0 R +-31 0 V +473 629 M +31 0 V +4337 0 R +-31 0 V +473 698 M +63 0 V +4305 0 R +-63 0 V +stroke +407 698 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 5)] +] -50.0 MRshow +1.000 UL +LTb +473 767 M +31 0 V +4337 0 R +-31 0 V +473 837 M +31 0 V +4337 0 R +-31 0 V +473 906 M +31 0 V +4337 0 R +-31 0 V +473 975 M +31 0 V +4337 0 R +-31 0 V +473 1044 M +63 0 V +4305 0 R +-63 0 V +stroke +407 1044 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 10)] +] -50.0 MRshow +1.000 UL +LTb +473 1114 M +31 0 V +4337 0 R +-31 0 V +473 1183 M +31 0 V +4337 0 R +-31 0 V +473 1252 M +31 0 V +4337 0 R +-31 0 V +473 1321 M +31 0 V +4337 0 R +-31 0 V +473 1391 M +63 0 V +4305 0 R +-63 0 V +stroke +407 1391 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 15)] +] -50.0 MRshow +1.000 UL +LTb +473 1460 M +31 0 V +4337 0 R +-31 0 V +473 1529 M +31 0 V +4337 0 R +-31 0 V +473 1598 M +31 0 V +4337 0 R +-31 0 V +473 1668 M +31 0 V +4337 0 R +-31 0 V +473 1737 M +63 0 V +4305 0 R +-63 0 V +stroke +407 1737 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 20)] +] -50.0 MRshow +1.000 UL +LTb +473 1806 M +31 0 V +4337 0 R +-31 0 V +473 1875 M +31 0 V +4337 0 R +-31 0 V +473 1945 M +31 0 V +4337 0 R +-31 0 V +473 2014 M +31 0 V +4337 0 R +-31 0 V +473 2083 M +63 0 V +4305 0 R +-63 0 V +stroke +407 2083 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 25)] +] -50.0 MRshow +1.000 UL +LTb +473 2152 M +31 0 V +4337 0 R +-31 0 V +473 2222 M +31 0 V +4337 0 R +-31 0 V +473 2291 M +31 0 V +4337 0 R +-31 0 V +473 2360 M +31 0 V +4337 0 R +-31 0 V +473 2429 M +63 0 V +4305 0 R +-63 0 V +stroke +407 2429 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 30)] +] -50.0 MRshow +1.000 UL +LTb +473 2499 M +31 0 V +4337 0 R +-31 0 V +473 2568 M +31 0 V +4337 0 R +-31 0 V +473 2637 M +31 0 V +4337 0 R +-31 0 V +473 2706 M +31 0 V +4337 0 R +-31 0 V +473 2776 M +63 0 V +4305 0 R +-63 0 V +stroke +407 2776 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 35)] +] -50.0 MRshow +1.000 UL +LTb +473 2845 M +31 0 V +4337 0 R +-31 0 V +473 2914 M +31 0 V +4337 0 R +-31 0 V +473 2983 M +31 0 V +4337 0 R +-31 0 V +473 3053 M +31 0 V +4337 0 R +-31 0 V +473 3122 M +63 0 V +4305 0 R +-63 0 V +stroke +407 3122 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 40)] +] -50.0 MRshow +1.000 UL +LTb +473 3191 M +31 0 V +4337 0 R +-31 0 V +473 3260 M +31 0 V +4337 0 R +-31 0 V +473 3330 M +31 0 V +4337 0 R +-31 0 V +473 3399 M +31 0 V +4337 0 R +-31 0 V +473 3468 M +63 0 V +4305 0 R +-63 0 V +stroke +407 3468 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 45)] +] -50.0 MRshow +1.000 UL +LTb +1019 352 M +0 63 V +0 3053 R +0 -63 V +stroke +1019 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (CG)] +] -50.0 MCshow +1.000 UL +LTb +1565 352 M +0 63 V +0 3053 R +0 -63 V +stroke +1565 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (MG)] +] -50.0 MCshow +1.000 UL +LTb +2111 352 M +0 63 V +0 3053 R +0 -63 V +stroke +2111 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (EP)] +] -50.0 MCshow +1.000 UL +LTb +2657 352 M +0 63 V +0 3053 R +0 -63 V +stroke +2657 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (LU)] +] -50.0 MCshow +1.000 UL +LTb +3203 352 M +0 63 V +0 3053 R +0 -63 V +stroke +3203 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (BT)] +] -50.0 MCshow +1.000 UL +LTb +3749 352 M +0 63 V +0 3053 R +0 -63 V +stroke +3749 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (SP)] +] -50.0 MCshow +1.000 UL +LTb +4295 352 M +0 63 V +0 3053 R +0 -63 V +stroke +4295 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (FT)] +] -50.0 MCshow +1.000 UL +LTb +1.000 UL +LTb +473 3468 N +473 352 L +4368 0 V +0 3116 V +-4368 0 V +Z stroke +LCb setrgbcolor +88 1910 M +currentpoint gsave translate -270 rotate 0 0 moveto +[ [(Helvetica) 180.0 0.0 true true 0 (Energy saving)] +] -60.0 MCshow +grestore +LTb +LCb setrgbcolor +2657 77 M +[ [(Helvetica) 180.0 0.0 true true 0 (NAS parallel benchmarks)] +] -60.0 MCshow +LTb +1.000 UP +1.000 UL +LTb +% Begin plot #1 +1.000 UL +LT0 +0.10 0.10 0.44 C LCb setrgbcolor +1816 3264 M +[ [(Helvetica) 140.0 0.0 true true 0 (One site / 16 nodes)] +] -46.7 MRshow +LT0 +0.10 0.10 0.44 C 1882 3231 327 66 40 45 2 PatternFill +0.10 0.10 0.44 C 892 352 73 2096 40 45 2 PatternFill +0.10 0.10 0.44 C 1438 352 73 2371 40 45 2 PatternFill +0.10 0.10 0.44 C 1984 352 73 1740 40 45 2 PatternFill +0.10 0.10 0.44 C 2530 352 73 1676 40 45 2 PatternFill +0.10 0.10 0.44 C 3076 352 73 2497 40 45 2 PatternFill +0.10 0.10 0.44 C 3622 352 73 2360 40 45 2 PatternFill +0.10 0.10 0.44 C 4168 352 73 1665 40 45 2 PatternFill +% End plot #1 +% Begin plot #2 +1.000 UL +LT1 +0.10 0.10 0.44 C LCb setrgbcolor +1816 3132 M +[ [(Helvetica) 140.0 0.0 true true 0 (One site / 32 nodes)] +] -46.7 MRshow +LT1 +0.10 0.10 0.44 C 1.000 1882 3099 327 66 BoxColFill +0.10 0.10 0.44 C 1.000 983 352 73 1472 BoxColFill +0.10 0.10 0.44 C 1.000 1529 352 73 1339 BoxColFill +0.10 0.10 0.44 C 1.000 2075 352 73 1946 BoxColFill +0.10 0.10 0.44 C 1.000 2621 352 73 1919 BoxColFill +0.10 0.10 0.44 C 1.000 3167 352 73 1983 BoxColFill +0.10 0.10 0.44 C 1.000 3713 352 73 2633 BoxColFill +0.10 0.10 0.44 C 1.000 4259 352 73 1306 BoxColFill +% End plot #2 +% Begin plot #3 +1.000 UL +LT0 +0.00 0.39 0.00 C LCb setrgbcolor +1816 3000 M +[ [(Helvetica) 140.0 0.0 true true 0 (Two sites / 16 nodes)] +] -46.7 MRshow +LT0 +0.00 0.39 0.00 C 1882 2967 327 66 80 -45 1 PatternFill +0.00 0.39 0.00 C 1074 352 73 1376 80 -45 1 PatternFill +0.00 0.39 0.00 C 1620 352 73 1503 80 -45 1 PatternFill +0.00 0.39 0.00 C 2166 352 73 2184 80 -45 1 PatternFill +0.00 0.39 0.00 C 2712 352 73 547 80 -45 1 PatternFill +0.00 0.39 0.00 C 3258 352 73 1560 80 -45 1 PatternFill +0.00 0.39 0.00 C 3804 352 73 2211 80 -45 1 PatternFill +0.00 0.39 0.00 C 4350 352 73 1186 80 -45 1 PatternFill +% End plot #3 +% Begin plot #4 +1.000 UL +LT3 +0.94 0.50 0.50 C LCb setrgbcolor +1816 2868 M +[ [(Helvetica) 140.0 0.0 true true 0 (Two sites / 32 nodes)] +] -46.7 MRshow +LT3 +0.94 0.50 0.50 C 1.000 1882 2835 327 66 BoxColFill +0.94 0.50 0.50 C 1.000 1165 352 73 651 BoxColFill +0.94 0.50 0.50 C 1.000 1711 352 73 1432 BoxColFill +0.94 0.50 0.50 C 1.000 2257 352 73 2069 BoxColFill +0.94 0.50 0.50 C 1.000 2803 352 73 625 BoxColFill +0.94 0.50 0.50 C 1.000 3349 352 73 741 BoxColFill +0.94 0.50 0.50 C 1.000 3895 352 73 2471 BoxColFill +0.94 0.50 0.50 C 1.000 4441 352 73 741 BoxColFill +% End plot #4 +1.000 UL +LTb +473 3468 N +473 352 L +4368 0 V +0 3116 V +-4368 0 V +Z stroke +1.000 UP +1.000 UL +LTb +stroke +grestore +end +showpage +%%Trailer +%%DocumentFonts: Helvetica +%%Pages: 1 diff --git a/fig/ch3/eng_s_mc-eps-converted-to.pdf b/fig/ch3/eng_s_mc-eps-converted-to.pdf new file mode 100644 index 0000000000000000000000000000000000000000..386f43dbc1b435223e58dae1175cc0102dda7415 GIT binary patch literal 7889 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 N;Snk-M%KoN{|9wQh@=1j literal 0 HcmV?d00001 diff --git a/fig/ch3/eng_s_mc.eps b/fig/ch3/eng_s_mc.eps new file mode 100644 index 0000000..aa7c105 --- /dev/null +++ b/fig/ch3/eng_s_mc.eps @@ -0,0 +1,889 @@ +%!PS-Adobe-2.0 +%%Creator: gnuplot 4.6 patchlevel 6 +%%CreationDate: Thu Oct 22 17:39:34 2015 +%%DocumentFonts: (atend) +%%BoundingBox: 50 50 554 410 +%%Orientation: Portrait +%%Pages: (atend) +%%EndComments +%%BeginProlog +/gnudict 256 dict def +gnudict begin +% +% The following true/false flags may be edited by hand if desired. +% The unit line width and grayscale image gamma correction may also be changed. +% +/Color false def +/Blacktext false def +/Solid false def +/Dashlength 1 def +/Landscape false def +/Level1 false def +/Rounded false def +/ClipToBoundingBox false def +/SuppressPDFMark false def +/TransparentPatterns false def +/gnulinewidth 5.000 def +/userlinewidth gnulinewidth def +/Gamma 1.0 def +/BackgroundColor {-1.000 -1.000 -1.000} def +% +/vshift -36 def +/dl1 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if +} def +/dl2 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul add } if +} def +/hpt_ 31.5 def +/vpt_ 31.5 def +/hpt hpt_ def +/vpt vpt_ def +/doclip { + ClipToBoundingBox { + newpath 50 50 moveto 554 50 lineto 554 410 lineto 50 410 lineto closepath + clip + } if +} def +% +% Gnuplot Prolog Version 4.6 (September 2012) +% +%/SuppressPDFMark true def +% +/M {moveto} bind def +/L {lineto} bind def +/R {rmoveto} bind def +/V {rlineto} bind def +/N {newpath moveto} bind def +/Z {closepath} bind def +/C {setrgbcolor} bind def +/f {rlineto fill} bind def +/g {setgray} bind def +/Gshow {show} def % May be redefined later in the file to support UTF-8 +/vpt2 vpt 2 mul def +/hpt2 hpt 2 mul def +/Lshow {currentpoint stroke M 0 vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Rshow {currentpoint stroke M dup stringwidth pop neg vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def + /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def +/DL {Color {setrgbcolor Solid {pop []} if 0 setdash} + {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse} def +/BL {stroke userlinewidth 2 mul setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/AL {stroke userlinewidth 2 div setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/UL {dup gnulinewidth mul /userlinewidth exch def + dup 1 lt {pop 1} if 10 mul /udl exch def} def +/PL {stroke userlinewidth setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +3.8 setmiterlimit +% Default Line colors +/LCw {1 1 1} def +/LCb {0 0 0} def +/LCa {0 0 0} def +/LC0 {1 0 0} def +/LC1 {0 1 0} def +/LC2 {0 0 1} def +/LC3 {1 0 1} def +/LC4 {0 1 1} def +/LC5 {1 1 0} def +/LC6 {0 0 0} def +/LC7 {1 0.3 0} def +/LC8 {0.5 0.5 0.5} def +% Default Line Types +/LTw {PL [] 1 setgray} def +/LTb {BL [] LCb DL} def +/LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def +/LT0 {PL [] LC0 DL} def +/LT1 {PL [4 dl1 2 dl2] LC1 DL} def +/LT2 {PL [2 dl1 3 dl2] LC2 DL} def +/LT3 {PL [1 dl1 1.5 dl2] LC3 DL} def +/LT4 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def +/LT5 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC5 DL} def +/LT6 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC6 DL} def +/LT7 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC7 DL} def +/LT8 {PL [2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 4 dl2] LC8 DL} def +/Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def +/Dia {stroke [] 0 setdash 2 copy vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke + Pnt} def +/Pls {stroke [] 0 setdash vpt sub M 0 vpt2 V + currentpoint stroke M + hpt neg vpt neg R hpt2 0 V stroke + } def +/Box {stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke + Pnt} def +/Crs {stroke [] 0 setdash exch hpt sub exch vpt add M + hpt2 vpt2 neg V currentpoint stroke M + hpt2 neg 0 R hpt2 vpt2 V stroke} def +/TriU {stroke [] 0 setdash 2 copy vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke + Pnt} def +/Star {2 copy Pls Crs} def +/BoxF {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath fill} def +/TriUF {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath fill} def +/TriD {stroke [] 0 setdash 2 copy vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke + Pnt} def +/TriDF {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath fill} def +/DiaF {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath fill} def +/Pent {stroke [] 0 setdash 2 copy gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore Pnt} def +/PentF {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath fill grestore} def +/Circle {stroke [] 0 setdash 2 copy + hpt 0 360 arc stroke Pnt} def +/CircleF {stroke [] 0 setdash hpt 0 360 arc fill} def +/C0 {BL [] 0 setdash 2 copy moveto vpt 90 450 arc} bind def +/C1 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + vpt 0 360 arc closepath} bind def +/C2 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C3 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C4 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C5 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc + 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc} bind def +/C6 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C7 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C8 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C9 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 450 arc closepath fill + vpt 0 360 arc closepath} bind def +/C10 {BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill + 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C11 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C12 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C13 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C14 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 360 arc closepath fill + vpt 0 360 arc} bind def +/C15 {BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/Rec {newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto + neg 0 rlineto closepath} bind def +/Square {dup Rec} bind def +/Bsquare {vpt sub exch vpt sub exch vpt2 Square} bind def +/S0 {BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare} bind def +/S1 {BL [] 0 setdash 2 copy vpt Square fill Bsquare} bind def +/S2 {BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S3 {BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare} bind def +/S4 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S5 {BL [] 0 setdash 2 copy 2 copy vpt Square fill + exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S6 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S7 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S8 {BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare} bind def +/S9 {BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S10 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill + Bsquare} bind def +/S11 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill + Bsquare} bind def +/S12 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare} bind def +/S13 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S14 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S15 {BL [] 0 setdash 2 copy Bsquare fill Bsquare} bind def +/D0 {gsave translate 45 rotate 0 0 S0 stroke grestore} bind def +/D1 {gsave translate 45 rotate 0 0 S1 stroke grestore} bind def +/D2 {gsave translate 45 rotate 0 0 S2 stroke grestore} bind def +/D3 {gsave translate 45 rotate 0 0 S3 stroke grestore} bind def +/D4 {gsave translate 45 rotate 0 0 S4 stroke grestore} bind def +/D5 {gsave translate 45 rotate 0 0 S5 stroke grestore} bind def +/D6 {gsave translate 45 rotate 0 0 S6 stroke grestore} bind def +/D7 {gsave translate 45 rotate 0 0 S7 stroke grestore} bind def +/D8 {gsave translate 45 rotate 0 0 S8 stroke grestore} bind def +/D9 {gsave translate 45 rotate 0 0 S9 stroke grestore} bind def +/D10 {gsave translate 45 rotate 0 0 S10 stroke grestore} bind def +/D11 {gsave translate 45 rotate 0 0 S11 stroke grestore} bind def +/D12 {gsave translate 45 rotate 0 0 S12 stroke grestore} bind def +/D13 {gsave translate 45 rotate 0 0 S13 stroke grestore} bind def +/D14 {gsave translate 45 rotate 0 0 S14 stroke grestore} bind def +/D15 {gsave translate 45 rotate 0 0 S15 stroke grestore} bind def +/DiaE {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke} def +/BoxE {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke} def +/TriUE {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke} def +/TriDE {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke} def +/PentE {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore} def +/CircE {stroke [] 0 setdash + hpt 0 360 arc stroke} def +/Opaque {gsave closepath 1 setgray fill grestore 0 setgray closepath} def +/DiaW {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V Opaque stroke} def +/BoxW {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V Opaque stroke} def +/TriUW {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V Opaque stroke} def +/TriDW {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V Opaque stroke} def +/PentW {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + Opaque stroke grestore} def +/CircW {stroke [] 0 setdash + hpt 0 360 arc Opaque stroke} def +/BoxFill {gsave Rec 1 setgray fill grestore} def +/Density { + /Fillden exch def + currentrgbcolor + /ColB exch def /ColG exch def /ColR exch def + /ColR ColR Fillden mul Fillden sub 1 add def + /ColG ColG Fillden mul Fillden sub 1 add def + /ColB ColB Fillden mul Fillden sub 1 add def + ColR ColG ColB setrgbcolor} def +/BoxColFill {gsave Rec PolyFill} def +/PolyFill {gsave Density fill grestore grestore} def +/h {rlineto rlineto rlineto gsave closepath fill grestore} bind def +% +% PostScript Level 1 Pattern Fill routine for rectangles +% Usage: x y w h s a XX PatternFill +% x,y = lower left corner of box to be filled +% w,h = width and height of box +% a = angle in degrees between lines and x-axis +% XX = 0/1 for no/yes cross-hatch +% +/PatternFill {gsave /PFa [ 9 2 roll ] def + PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate + PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse + clip + currentlinewidth 0.5 mul setlinewidth + /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def + 0 0 M PFa 5 get rotate PFs -2 div dup translate + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 M 0 PFs V} for + 0 PFa 6 get ne { + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 2 1 roll M PFs 0 V} for + } if + stroke grestore} def +% +/languagelevel where + {pop languagelevel} {1} ifelse + 2 lt + {/InterpretLevel1 true def} + {/InterpretLevel1 Level1 def} + ifelse +% +% PostScript level 2 pattern fill definitions +% +/Level2PatternFill { +/Tile8x8 {/PaintType 2 /PatternType 1 /TilingType 1 /BBox [0 0 8 8] /XStep 8 /YStep 8} + bind def +/KeepColor {currentrgbcolor [/Pattern /DeviceRGB] setcolorspace} bind def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke} +>> matrix makepattern +/Pat1 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke + 0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke} +>> matrix makepattern +/Pat2 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L + 8 8 L 8 0 L 0 0 L fill} +>> matrix makepattern +/Pat3 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L + 0 12 M 12 0 L stroke} +>> matrix makepattern +/Pat4 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L + 0 -4 M 12 8 L stroke} +>> matrix makepattern +/Pat5 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L + 0 12 M 8 -4 L 4 12 M 10 0 L stroke} +>> matrix makepattern +/Pat6 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L + 0 -4 M 8 12 L 4 -4 M 10 8 L stroke} +>> matrix makepattern +/Pat7 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L + 12 0 M -4 8 L 12 4 M 0 10 L stroke} +>> matrix makepattern +/Pat8 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L + -4 0 M 12 8 L -4 4 M 8 10 L stroke} +>> matrix makepattern +/Pat9 exch def +/Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def +/Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def +/Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def +/Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def +/Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def +/Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def +/Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def +} def +% +% +%End of PostScript Level 2 code +% +/PatternBgnd { + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse +} def +% +% Substitute for Level 2 pattern fill codes with +% grayscale if Level 2 support is not selected. +% +/Level1PatternFill { +/Pattern1 {0.250 Density} bind def +/Pattern2 {0.500 Density} bind def +/Pattern3 {0.750 Density} bind def +/Pattern4 {0.125 Density} bind def +/Pattern5 {0.375 Density} bind def +/Pattern6 {0.625 Density} bind def +/Pattern7 {0.875 Density} bind def +} def +% +% Now test for support of Level 2 code +% +Level1 {Level1PatternFill} {Level2PatternFill} ifelse +% +/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont +dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall +currentdict end definefont pop +% +% Encoding for ISO-8859-1 (also called Latin1) +% +/reencodeISO { +dup dup findfont dup length dict begin +{ 1 index /FID ne { def }{ pop pop } ifelse } forall +currentdict /CharStrings known { + CharStrings /Idieresis known { + /Encoding ISOLatin1Encoding def } if +} if +currentdict end definefont +} def +/ISOLatin1Encoding [ +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright +/parenleft/parenright/asterisk/plus/comma/minus/period/slash +/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon +/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N +/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright +/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m +/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve +/dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut +/ogonek/caron/space/exclamdown/cent/sterling/currency/yen/brokenbar +/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot +/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior +/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine +/guillemotright/onequarter/onehalf/threequarters/questiondown +/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla +/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex +/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis +/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute +/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis +/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave +/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex +/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis +/yacute/thorn/ydieresis +] def +/MFshow { + { dup 5 get 3 ge + { 5 get 3 eq {gsave} {grestore} ifelse } + {dup dup 0 get findfont exch 1 get scalefont setfont + [ currentpoint ] exch dup 2 get 0 exch R dup 5 get 2 ne {dup dup 6 + get exch 4 get {Gshow} {stringwidth pop 0 R} ifelse }if dup 5 get 0 eq + {dup 3 get {2 get neg 0 exch R pop} {pop aload pop M} ifelse} {dup 5 + get 1 eq {dup 2 get exch dup 3 get exch 6 get stringwidth pop -2 div + dup 0 R} {dup 6 get stringwidth pop -2 div 0 R 6 get + show 2 index {aload pop M neg 3 -1 roll neg R pop pop} {pop pop pop + pop aload pop M} ifelse }ifelse }ifelse } + ifelse } + forall} def +/Gswidth {dup type /stringtype eq {stringwidth} {pop (n) stringwidth} ifelse} def +/MFwidth {0 exch { dup 5 get 3 ge { 5 get 3 eq { 0 } { pop } ifelse } + {dup 3 get{dup dup 0 get findfont exch 1 get scalefont setfont + 6 get Gswidth pop add} {pop} ifelse} ifelse} forall} def +/MLshow { currentpoint stroke M + 0 exch R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MRshow { currentpoint stroke M + exch dup MFwidth neg 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MCshow { currentpoint stroke M + exch dup MFwidth -2 div 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/XYsave { [( ) 1 2 true false 3 ()] } bind def +/XYrestore { [( ) 1 2 true false 4 ()] } bind def +/Helvetica reencodeISO def +Level1 SuppressPDFMark or +{} { +/SDict 10 dict def +systemdict /pdfmark known not { + userdict /pdfmark systemdict /cleartomark get put +} if +SDict begin [ + /Title () + /Subject (gnuplot plot) + /Creator (gnuplot 4.6 patchlevel 6) + /Author (afanfakh) +% /Producer (gnuplot) +% /Keywords () + /CreationDate (Thu Oct 22 17:39:34 2015) + /DOCINFO pdfmark +end +} ifelse +end +%%EndProlog +%%Page: 1 1 +gnudict begin +gsave +doclip +50 50 translate +0.100 0.100 scale +0 setgray +newpath +(Helvetica) findfont 110 scalefont setfont +BackgroundColor 0 lt 3 1 roll 0 lt exch 0 lt or or not {gsave BackgroundColor C clippath fill grestore} if +1.000 UL +LTb +473 352 M +63 0 V +4305 0 R +-63 0 V +stroke +407 352 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 0)] +] -50.0 MRshow +1.000 UL +LTb +473 430 M +31 0 V +4337 0 R +-31 0 V +473 508 M +31 0 V +4337 0 R +-31 0 V +473 586 M +31 0 V +4337 0 R +-31 0 V +473 664 M +31 0 V +4337 0 R +-31 0 V +473 742 M +63 0 V +4305 0 R +-63 0 V +stroke +407 742 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 5)] +] -50.0 MRshow +1.000 UL +LTb +473 819 M +31 0 V +4337 0 R +-31 0 V +473 897 M +31 0 V +4337 0 R +-31 0 V +473 975 M +31 0 V +4337 0 R +-31 0 V +473 1053 M +31 0 V +4337 0 R +-31 0 V +473 1131 M +63 0 V +4305 0 R +-63 0 V +stroke +407 1131 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 10)] +] -50.0 MRshow +1.000 UL +LTb +473 1209 M +31 0 V +4337 0 R +-31 0 V +473 1287 M +31 0 V +4337 0 R +-31 0 V +473 1365 M +31 0 V +4337 0 R +-31 0 V +473 1443 M +31 0 V +4337 0 R +-31 0 V +473 1521 M +63 0 V +4305 0 R +-63 0 V +stroke +407 1521 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 15)] +] -50.0 MRshow +1.000 UL +LTb +473 1598 M +31 0 V +4337 0 R +-31 0 V +473 1676 M +31 0 V +4337 0 R +-31 0 V +473 1754 M +31 0 V +4337 0 R +-31 0 V +473 1832 M +31 0 V +4337 0 R +-31 0 V +473 1910 M +63 0 V +4305 0 R +-63 0 V +stroke +407 1910 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 20)] +] -50.0 MRshow +1.000 UL +LTb +473 1988 M +31 0 V +4337 0 R +-31 0 V +473 2066 M +31 0 V +4337 0 R +-31 0 V +473 2144 M +31 0 V +4337 0 R +-31 0 V +473 2222 M +31 0 V +4337 0 R +-31 0 V +473 2300 M +63 0 V +4305 0 R +-63 0 V +stroke +407 2300 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 25)] +] -50.0 MRshow +1.000 UL +LTb +473 2377 M +31 0 V +4337 0 R +-31 0 V +473 2455 M +31 0 V +4337 0 R +-31 0 V +473 2533 M +31 0 V +4337 0 R +-31 0 V +473 2611 M +31 0 V +4337 0 R +-31 0 V +473 2689 M +63 0 V +4305 0 R +-63 0 V +stroke +407 2689 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 30)] +] -50.0 MRshow +1.000 UL +LTb +473 2767 M +31 0 V +4337 0 R +-31 0 V +473 2845 M +31 0 V +4337 0 R +-31 0 V +473 2923 M +31 0 V +4337 0 R +-31 0 V +473 3001 M +31 0 V +4337 0 R +-31 0 V +473 3079 M +63 0 V +4305 0 R +-63 0 V +stroke +407 3079 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 35)] +] -50.0 MRshow +1.000 UL +LTb +473 3156 M +31 0 V +4337 0 R +-31 0 V +473 3234 M +31 0 V +4337 0 R +-31 0 V +473 3312 M +31 0 V +4337 0 R +-31 0 V +473 3390 M +31 0 V +4337 0 R +-31 0 V +473 3468 M +63 0 V +4305 0 R +-63 0 V +stroke +407 3468 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 40)] +] -50.0 MRshow +1.000 UL +LTb +1019 352 M +0 63 V +0 3053 R +0 -63 V +stroke +1019 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (CG)] +] -50.0 MCshow +1.000 UL +LTb +1565 352 M +0 63 V +0 3053 R +0 -63 V +stroke +1565 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (MG)] +] -50.0 MCshow +1.000 UL +LTb +2111 352 M +0 63 V +0 3053 R +0 -63 V +stroke +2111 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (EP)] +] -50.0 MCshow +1.000 UL +LTb +2657 352 M +0 63 V +0 3053 R +0 -63 V +stroke +2657 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (LU)] +] -50.0 MCshow +1.000 UL +LTb +3203 352 M +0 63 V +0 3053 R +0 -63 V +stroke +3203 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (BT)] +] -50.0 MCshow +1.000 UL +LTb +3749 352 M +0 63 V +0 3053 R +0 -63 V +stroke +3749 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (SP)] +] -50.0 MCshow +1.000 UL +LTb +4295 352 M +0 63 V +0 3053 R +0 -63 V +stroke +4295 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (FT)] +] -50.0 MCshow +1.000 UL +LTb +1.000 UL +LTb +473 3468 N +473 352 L +4368 0 V +0 3116 V +-4368 0 V +Z stroke +LCb setrgbcolor +88 1910 M +currentpoint gsave translate -270 rotate 0 0 moveto +[ [(Helvetica) 180.0 0.0 true true 0 (Energy saving)] +] -60.0 MCshow +grestore +LTb +LCb setrgbcolor +2657 77 M +[ [(Helvetica) 180.0 0.0 true true 0 (NAS parallel benchmarks)] +] -60.0 MCshow +LTb +1.000 UP +1.000 UL +LTb +% Begin plot #1 +1.000 UL +LT0 +0.10 0.10 0.44 C LCb setrgbcolor +2362 3246 M +[ [(Helvetica) 140.0 0.0 true true 0 (One core per node scenario)] +] -46.7 MRshow +LT0 +0.10 0.10 0.44 C 1.000 2428 3213 327 66 BoxColFill +0.10 0.10 0.44 C 1.000 964 352 111 1656 BoxColFill +0.10 0.10 0.44 C 1.000 1510 352 111 1506 BoxColFill +0.10 0.10 0.44 C 1.000 2056 352 111 2190 BoxColFill +0.10 0.10 0.44 C 1.000 2602 352 111 2159 BoxColFill +0.10 0.10 0.44 C 1.000 3148 352 111 2231 BoxColFill +0.10 0.10 0.44 C 1.000 3694 352 111 2962 BoxColFill +0.10 0.10 0.44 C 1.000 4240 352 111 1469 BoxColFill +% End plot #1 +% Begin plot #2 +1.000 UL +LT1 +0.94 0.50 0.50 C LCb setrgbcolor +2362 3114 M +[ [(Helvetica) 140.0 0.0 true true 0 (Multicores per node scenario)] +] -46.7 MRshow +LT1 +0.94 0.50 0.50 C 1.000 2428 3081 327 66 BoxColFill +0.94 0.50 0.50 C 1.000 1101 352 110 1453 BoxColFill +0.94 0.50 0.50 C 1.000 1647 352 110 1873 BoxColFill +0.94 0.50 0.50 C 1.000 2193 352 110 2153 BoxColFill +0.94 0.50 0.50 C 1.000 2739 352 110 2263 BoxColFill +0.94 0.50 0.50 C 1.000 3285 352 110 1512 BoxColFill +0.94 0.50 0.50 C 1.000 3831 352 110 2584 BoxColFill +0.94 0.50 0.50 C 1.000 4377 352 110 1864 BoxColFill +% End plot #2 +1.000 UL +LTb +473 3468 N +473 352 L +4368 0 V +0 3116 V +-4368 0 V +Z stroke +1.000 UP +1.000 UL +LTb +stroke +grestore +end +showpage +%%Trailer +%%DocumentFonts: Helvetica +%%Pages: 1 diff --git a/fig/ch3/grid5000-2.pdf b/fig/ch3/grid5000-2.pdf new file mode 100644 index 0000000000000000000000000000000000000000..76478ae4ace07085490769d0a3c58bfdb19f0050 GIT binary patch literal 29146 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 BYbgK# literal 0 HcmV?d00001 diff --git a/fig/ch3/grid5000.pdf b/fig/ch3/grid5000.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a276e6a9f1e63232f65149dc7cefcde0c5d61a59 GIT binary patch literal 62669 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 literal 0 HcmV?d00001 diff --git a/fig/ch3/heter-eps-converted-to.pdf b/fig/ch3/heter-eps-converted-to.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a145a721b831f13d8f4d9d8eea7890f9f471f377 GIT binary patch literal 6838 zcmb_h2{@GN+wZSMO-0cr(u)}Dyt6Qy?O-TblD$NYnRmu8X2#6OsBl`8rBp|>IHgDm zC0WW^A!$LIIz)w1qO_-Q`kr^9ROkPF*LPiK=EC#d&wc-%`@Og4d2YIH39%#tgzk!oXmRg$3-42)NQ9hzuz1umg`TMZ^&7z-LMk2Er1u5i2W#Xg<+p|uViA%>YbPK8z#AV6m4r5DCAas z;#j2VOiqHH8T3C%tt<^cUCNylO}u1T!Bsf5{}yJ?`?d?I2H9QaewN8~Cpd!46G+XT z3zM#Aq)#^|I(HndNcEGM@6@t{sy8$cr*5AU;c)3TVb8`-sg(({-uHfr_#kK$s4T!n z>DZlDPnotzJMv)A<4Y}xQ>YjHHkilntS)ze)OOfxREga*W80Y_v5LO&y_DGWGdEff zd1md?Nycz-vt9UxQrbcT*{-{FnSbPJPj&5)Fw=r0*-QJRayp(vnNU|YAsi(?>2hPwC2wpZqFA?Y(J$=UUvGglaFpp z4^dcqEh)(Jn0HvO*%HC+mZtVMOzXCq=;^&j%&pdzKT&OiGt1j2-A$ZOVjLh2-SnvX zcT?TQ%QZFri>6q+TVOu!g&ym=CFi%KC`mO_I<#NR3>j?eZGQ*AM z3`+}?JTIvY+78{gaBm6c(xPm&PM1FQWbSYDdC!)v%fA{N^Aab7xGfEDl^VzUJ$3J0 zU-sti;O+HHyW_sA397Z}>WdZTmZuTYkLq8U(35*}?jk3zBg@Yv-Y+Pwy0Plg;h^y! zyDPMs%J8#84VQlquWvZI{Yqx?{=Ijso+Q7BrZf3e$2MA;$}&n~@UxI(T05NgY`xo6 z?=*NLr$|}%*tm=hT5h!9D<#3|C$05II zp0DUt2ZElcq}Qj!X3S}Pn&un1eS07>=xm%)U@>X^v2Y80v#2SiSK@WAos=T0GXt)1vVWaopa*mOnp*q$f-etE@JpT@Zy}2xbzh$0oV_n|x_<_s# zO6K|hjGJ2Sfe6?mkqt&@HlR6x{-qG{m=Tic_eAlG6d|x1lZ(JE2%E>W70Mt#JeVd@ z@DPDY^T&WmF(QycBs7&Uusb3VhKpH<1SFZ8Sjh4~q<%0+LkRXnWKzIxFOx3zkb*>m z2q+E^aS#G=0zv)&@(#8G&j3*Zq50~L0i+SN&?Ua+FF*r&L2|_;5bVTbOCUcCs1S_i% zCFO55vXnaogUY#ohmpVL=qwdO{c#q39GSFbN)XgAu=C0#PPR*pmLUAKh?K`-%FV?< zBrGvcBo&Gw8VVsdhkOQ@lP8u)?ShzMh(v^)nImHYkqGg0-n(o&G6sHs6Hqi#2k=BWzfG= z5^0qCo31331|&x%&@uXzqv7#r@CiV1=LxvL6apK8g!k>)BRo)wMmicCz?Y*DhZ=WG z*!*OB`J*c{6!~W-*@9#Nxne>jP$3E#n8B3bkM1#C3GfUCwvn*Vya7}Y@=VbZgvSjU zc|_fd&Y_|h*bzi3k7Xm^@(~D+fjy*1s5i(LQw;3FlSshZ$o-1GH3s$_fiWY|04fLq zkbnBHE4&Q$g1uoT90;>uHjKdX#b6H10m%w;VIItfLtz0dgoOeG7QrG!%oDQVFjx#r zUAE)X~-Zko&>iN3NU>by^-`*1P9zVQ~wM);l#t^Q}e7-&Ix7q#j+- z@)CiU%^{-W$tI7SJ@E&wE1aZ%R8F2&<9su}DH5i@=MTG8=CH$gb=odN2d?+ALlYYB zHCaCjMRrkYYDrVB2kPy13{1seamFNHWf0%)Gu2Co+#Ao?u7sbz2U( zFfNR9bo+(+d2=0Vo!9(1k7Br}=GJs`wPbxyPs921-`~}Le>^lWOSbvkrN%3`TQ86L zr?FGnJCE-0za(Jh7g`#3xR=7`$Paejd(~bM_U_irkRx+iXq|d?S^>9pU-V5;|J`yJ zS1rPl>$hm;GRHkHjVYE|1)p4f@{i=0k1SnoLP*%&sWnG}P6#3w3A>-Y9MbG-)}gaD z=_Su|?I00}4G(uPcIy|a%c_fx?49wSsR{wR)Dqg6XBMukuBUbuQSV$fFHoGY>j7TL zhz~hfwCjhKEI$`4p1JNod;oczS6}Sox{9^6n|oO^Y$h`%R_kZDO|Dt4ALd_YTSeKv z**&Fi@V+FDq*fl3lyCcNfAN48b>r=ZZ5(y{O?Bwjq(fd>Cy5t}|1MQtwI!e;rPFWe zQwK?PVXxYh^o9ssv9-3=?nQmO)$7YodA3utp<<1&vs>ylA5PYC4?It0r#5BuUzn-! z@?BKEXv<>H63@b-&EmB)Cz&iJ3NZCj)ihfRv{c2Pdn^gBh0VZCnHkrKOvq-7Es z`WVyDp&I+f<;lWSVSX34V12yZVBkLIVl`{gmr_C{^SOb2{p)=?pH+_ws-J9a{ZK;s ztc!>jA8+WdzI{I{y_&4DG-*X4iV=wGWxoLBe7>cWxA9< zSiGTIQL%T{Z<>`k!nt?nI`)68dGL3f;JMN&s;ew%y3J!uwsV4#?_sN$Wl5z_uHsyg zbq_ZuTP0%cwo_ZlUz<+3TGH3Hu|y}}OLSz4!b?#N!6(jmmDjG_x=q(U{dSg=vT)7En5dGvxPh0S z-#g8osBzV>?erQWwZbFp%VjQ!;^J#=)8JX_i|f9$wtBW~aKf!}Zt+RE*SBug0-Ske zI`-uZ9lPGMsomYTk=8!1{_N5^UU1r}dtTO7dH99&lCz)jU#_M)P4h*zoW}4Z5e(~9 znGcNlCC}J8bXWZs0#@u+`=@E|{7*p(6{aw3eIGe#r+;*HwcV-^Och}#wY&2$Exw&EWtY$VjCs_ML%CUhN=FfX>Xz8BY zC=pUBBHajS?bP*Ibj)ijr?QUeA|BbQr{c8Xo5MR)o>wRN-&(1`d0%@9XRDZ$-IjN1 zw`lk5NshVA0V*47%Hnpb(jSHNL7y^h&!6=%c(7DgW&Y-RM{=&g3Hkx|{g0P17Hwgq z#Z5k@zvY(jM#}BE{cqnc6dj$F+taDliZs@Ce8fpA-nOg8W+Kyxz8Qv$hX)GUj7yx4 zo-53&$!k_qc4}KJ#=73Umwqo4>^3`antHlwM6$D3CX?itf-O~h5q*j&a7?un|t=< zbf~I7!1sB1)u*!Ph0%Ahbo1@kwq25K%3?T}*6xrc2f9ytrxbF%GCRM`{auN_ z!jw$~7DKW6YxGtaDVL1@k{)lle78Pj-CI2?kBgdtS|27>M&ADIL{@{!ZKYHGw^&6! zH9_#2fh}{O!#ju1bpF*cy#B_it~W}jWc}UkS#ipKhcu78+L_c-gzLS0&ABZ%uXh4B zZ9&l8=6#QZ<2x)%^4@06>o9%xGUwrm_;6j-p~=gt6^t^~QwUt><62#Zix16R*R&cZoR}R? zO;Skij6HMYn5fhC&*U2JCtT$0K9jo3@6yD)CG!&wA6{~Y4sGq(elSbV+tndj{Q)hx-~zcexpd(l`H>E}Q&n$0Zk_Y~ z%Dnk6n=)>``RILoK=I2C=gj4I@DsxA0*{v%rh@p zVv1)zp7;)9%HgfCDxvSKd4!Syt{Ho@}s7+|%Q6-*Kz4lf9_kc&ptx zXO0QUFBR8a#PBTI=xq4JtK^=x>Z$&j9gnmK4_JS!SX`(mhz{VEefD@e5JO)5!d6de z)L-^F?=$~-f$!sOf%lNwr@`dx{y#6LwOH=`*sPJ0#~;Yanetj$h~0`k8Re65;+3PW zW}#1=K(|Wu^xeCG_2Ujz`r7LZYawrDRI?XdpT>mOx4*hdO_KVl>ORm|)tj<=)f{oh zgWkB`&Fi9TbTXe+vw{vkF7Y_%v{AVqnuf8zIltI2Dth@iZ6c#ib85cNL6?eLvsR^H zuJuNRy20tHTI(ELa~ulPyGw?;Xl04>iB>y0c&jE{os_0hG1S%7Jpty&1Xe{|X7^^^ z>mM5W&ttW$aJw+O(}@8=Q3XbtCcR~%H`9WGfrBcGK!zsa6q!*4UB{byJmRJx)0ID)G}= z_Zxi!i_TvdP#+#X>vuhW<)_&Ccec|UVYWwh)tUuwjS7w^%<(>MxT0&{#e%w>FJ34r z|7DK99y6|HPFNj!X8-YKE5F2zJ-&}#@4g=>eO;VKPm=^QJn`FU(!yE>PP`$A6beKS zv6k5W^7B}T$F{`!n7QCxM0Q9JZ^=3_;<3)vleI2{MPp;FtuPkWOmL+}Ok_-v2{`S7 zrji5#M|n$aJ9lRXZInSqmxYQ#!7US#h4KXwy37(Q7omeON`|qJoJAU9iS>1HgQP+s zKZGZRh&URKU_u}nLmV-pjB$bNjFdPvPfr}vF zgkmmCpwVbBo(L0(CV<045-E@}WhMfN4p>jF2+#MMm_UM)>x5$oLt&mTOu*sc(S=4Y zo;;xdLKkKR3d5zA*zj;3n@%;uQ-}l-(}c)oA|?a^hhTyS9}^B0&kQ6o@f>_0X>>W! z7&U)b4@`gsNx%+ZLF^E zg^T&}3}LfigpZ)QNr0;fKw~zG&Jl`3nIOKIA`!TPGo>KxVGx&CD+@3wwZLeDw#PXZ3X;mxRBgfe{N05ux}i zpa&8*ifqN?Fa;cDNYGCZauyWgn;;moM><46<6nVBqX!M4{|5F0z(2&0oCN9)2q*Yk zRkOlC|I+8*1NvUd!3JT8jX(?aFIxrLx)|9hMr)4#Kb0H<&{aX*1I&u%us)i@4oDzG zpn>)Wn!b2b2$Tdfzz2$ioP|M0YXqJ|q!9=ts=Pd4@pvrY@I(Vh|9fbRf(ym^qaOM> zzX1#Ag#;rk={FYCiGXYqE)4>LqcLLetsyBBBOK6L1N|bj8h`yjWHU388N`7`Xaqb7 zG*8hFBp9WU2~^N@`;msHQ9x7nCmNObi!2_P;8#BUFEj$423l-C;t_~w+wLbC84o(R zKhX%Lzw!}4Tl!}{8u=GlQ!*YjAV=|}VkT%tiNXJcAlQSq4s@nXA=q6A%B#F74Z)5A zju4V}w?H?J0r^=lh<0Qf8#5Y_YGY$hVVKzxY$> matrix makepattern +/Pat1 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke + 0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke} +>> matrix makepattern +/Pat2 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L + 8 8 L 8 0 L 0 0 L fill} +>> matrix makepattern +/Pat3 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L + 0 12 M 12 0 L stroke} +>> matrix makepattern +/Pat4 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L + 0 -4 M 12 8 L stroke} +>> matrix makepattern +/Pat5 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L + 0 12 M 8 -4 L 4 12 M 10 0 L stroke} +>> matrix makepattern +/Pat6 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L + 0 -4 M 8 12 L 4 -4 M 10 8 L stroke} +>> matrix makepattern +/Pat7 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L + 12 0 M -4 8 L 12 4 M 0 10 L stroke} +>> matrix makepattern +/Pat8 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L + -4 0 M 12 8 L -4 4 M 8 10 L stroke} +>> matrix makepattern +/Pat9 exch def +/Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def +/Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def +/Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def +/Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def +/Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def +/Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def +/Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def +} def +% +% +%End of PostScript Level 2 code +% +/PatternBgnd { + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse +} def +% +% Substitute for Level 2 pattern fill codes with +% grayscale if Level 2 support is not selected. +% +/Level1PatternFill { +/Pattern1 {0.250 Density} bind def +/Pattern2 {0.500 Density} bind def +/Pattern3 {0.750 Density} bind def +/Pattern4 {0.125 Density} bind def +/Pattern5 {0.375 Density} bind def +/Pattern6 {0.625 Density} bind def +/Pattern7 {0.875 Density} bind def +} def +% +% Now test for support of Level 2 code +% +Level1 {Level1PatternFill} {Level2PatternFill} ifelse +% +/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont +dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall +currentdict end definefont pop +Level1 SuppressPDFMark or +{} { +/SDict 10 dict def +systemdict /pdfmark known not { + userdict /pdfmark systemdict /cleartomark get put +} if +SDict begin [ + /Title (heter2.eps) + /Subject (gnuplot plot) + /Creator (gnuplot 4.6 patchlevel 0) + /Author (afanfakh) +% /Producer (gnuplot) +% /Keywords () + /CreationDate (Thu Feb 19 12:00:04 2015) + /DOCINFO pdfmark +end +} ifelse +end +%%EndProlog +%%Page: 1 1 +gnudict begin +gsave +doclip +50 50 translate +0.050 0.050 scale +0 setgray +newpath +(Helvetica) findfont 140 scalefont setfont +BackgroundColor 0 lt 3 1 roll 0 lt exch 0 lt or or not {BackgroundColor C 1.000 0 0 5400.00 3780.00 BoxColFill} if +1.000 UL +LTb +686 737 M +63 0 V +4398 0 R +-63 0 V +/Helvetica findfont 220 scalefont setfont +602 737 M +( 0.4) Rshow +/Helvetica findfont 140 scalefont setfont +1.000 UL +LTb +686 1456 M +63 0 V +4398 0 R +-63 0 V +/Helvetica findfont 220 scalefont setfont +-4482 0 R +( 0.6) Rshow +/Helvetica findfont 140 scalefont setfont +1.000 UL +LTb +686 2174 M +63 0 V +4398 0 R +-63 0 V +/Helvetica findfont 220 scalefont setfont +-4482 0 R +( 0.8) Rshow +/Helvetica findfont 140 scalefont setfont +1.000 UL +LTb +686 2893 M +63 0 V +4398 0 R +-63 0 V +/Helvetica findfont 220 scalefont setfont +-4482 0 R +( 1) Rshow +/Helvetica findfont 140 scalefont setfont +1.000 UL +LTb +686 3611 M +63 0 V +4398 0 R +-63 0 V +/Helvetica findfont 220 scalefont setfont +-4482 0 R +( 1.2) Rshow +/Helvetica findfont 140 scalefont setfont +1.000 UL +LTb +1.000 UL +LTb +686 3611 N +686 378 L +4461 0 V +0 3233 V +-4461 0 V +Z stroke +LCb setrgbcolor +/Helvetica findfont 220 scalefont setfont +112 1994 M +currentpoint gsave translate -270 rotate 0 0 M +(Normalized energy and performance) Cshow +grestore +/Helvetica findfont 140 scalefont setfont +LTb +LCb setrgbcolor +/Helvetica findfont 220 scalefont setfont +3016 98 M +(Vectors of frequency scaling factors) Cshow +/Helvetica findfont 140 scalefont setfont +LTb +1.000 UP +/Helvetica findfont 220 scalefont setfont +1801 558 M +(Optimal vector of scaling factors) Lshow +/Helvetica findfont 140 scalefont setfont +/Helvetica findfont 220 scalefont setfont +5147 1497 M +() Lshow +/Helvetica findfont 140 scalefont setfont +/Helvetica findfont 190 scalefont setfont +820 3277 M +( Upper bound) Lshow +/Helvetica findfont 140 scalefont setfont +1.000 UL +LTb +1734 2688 M +0 -1265 V +stroke +LT2 +1702 517 M +32 -121 V +32 121 V +-32 2171 R +0 -2292 V +stroke +gsave [] 0 setdash +1702 517 M +32 -121 V +32 121 V +stroke +grestore +1.000 UL +LT2 +1355 2976 M +22 -83 V +22 83 V +-22 204 R +0 -287 V +stroke +gsave [] 0 setdash +1355 2976 M +22 -83 V +22 83 V +stroke +grestore +1.000 UL +LT0 +1623 2688 M +234 0 V +1623 1423 M +234 0 V +stroke +LTb +% Begin plot #1 +1.000 UL +LT2 +LC2 setrgbcolor +LCb setrgbcolor +/Helvetica findfont 220 scalefont setfont +4496 3443 M +(Normalized performance) Rshow +/Helvetica findfont 140 scalefont setfont +LT2 +LC2 setrgbcolor +4580 3443 M +399 0 V +686 2893 M +93 0 V +101 0 V +110 0 V +121 0 V +133 0 V +146 0 V +163 -32 V +183 -173 V +205 -178 V +232 -183 V +266 -190 V +306 -195 V +357 -201 V +423 -129 V +507 -79 V +619 -36 V +% End plot #1 +% Begin plot #2 +stroke +2.000 UL +LT0 +1.00 0.00 0.00 C LCb setrgbcolor +/Helvetica findfont 220 scalefont setfont +4496 3233 M +(Normalize energy) Rshow +/Helvetica findfont 140 scalefont setfont +LT0 +1.00 0.00 0.00 C 4580 3233 M +399 0 V +686 2893 M +93 -144 V +880 2494 L +990 2292 L +121 -159 V +133 -203 V +146 -177 V +163 -151 V +183 -177 V +205 -129 V +232 -89 V +266 -67 V +306 -43 V +357 -36 V +423 -33 V +507 -28 V +619 0 V +% End plot #2 +% Begin plot #3 +stroke +1.000 UL +LT0 +1.00 1.00 1.00 C 5147 641 M +% End plot #3 +stroke +LTb +686 3611 N +686 378 L +4461 0 V +0 3233 V +-4461 0 V +Z stroke +1.000 UP +1.000 UL +LTb +stroke +grestore +end +showpage diff --git a/fig/ch3/heter2-eps-converted-to.pdf b/fig/ch3/heter2-eps-converted-to.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a128a004d75e0bbcd4349a32da24dfa0812e3493 GIT binary patch literal 7119 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 matrix makepattern +/Pat1 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke + 0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke} +>> matrix makepattern +/Pat2 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L + 8 8 L 8 0 L 0 0 L fill} +>> matrix makepattern +/Pat3 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L + 0 12 M 12 0 L stroke} +>> matrix makepattern +/Pat4 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L + 0 -4 M 12 8 L stroke} +>> matrix makepattern +/Pat5 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L + 0 12 M 8 -4 L 4 12 M 10 0 L stroke} +>> matrix makepattern +/Pat6 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L + 0 -4 M 8 12 L 4 -4 M 10 8 L stroke} +>> matrix makepattern +/Pat7 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L + 12 0 M -4 8 L 12 4 M 0 10 L stroke} +>> matrix makepattern +/Pat8 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L + -4 0 M 12 8 L -4 4 M 8 10 L stroke} +>> matrix makepattern +/Pat9 exch def +/Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def +/Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def +/Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def +/Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def +/Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def +/Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def +/Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def +} def +% +% +%End of PostScript Level 2 code +% +/PatternBgnd { + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse +} def +% +% Substitute for Level 2 pattern fill codes with +% grayscale if Level 2 support is not selected. +% +/Level1PatternFill { +/Pattern1 {0.250 Density} bind def +/Pattern2 {0.500 Density} bind def +/Pattern3 {0.750 Density} bind def +/Pattern4 {0.125 Density} bind def +/Pattern5 {0.375 Density} bind def +/Pattern6 {0.625 Density} bind def +/Pattern7 {0.875 Density} bind def +} def +% +% Now test for support of Level 2 code +% +Level1 {Level1PatternFill} {Level2PatternFill} ifelse +% +/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont +dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall +currentdict end definefont pop +Level1 SuppressPDFMark or +{} { +/SDict 10 dict def +systemdict /pdfmark known not { + userdict /pdfmark systemdict /cleartomark get put +} if +SDict begin [ + /Title (heter2.eps) + /Subject (gnuplot plot) + /Creator (gnuplot 4.6 patchlevel 0) + /Author (afanfakh) +% /Producer (gnuplot) +% /Keywords () + /CreationDate (Fri May 15 14:32:08 2015) + /DOCINFO pdfmark +end +} ifelse +end +%%EndProlog +%%Page: 1 1 +gnudict begin +gsave +doclip +50 50 translate +0.050 0.050 scale +0 setgray +newpath +(Helvetica) findfont 140 scalefont setfont +BackgroundColor 0 lt 3 1 roll 0 lt exch 0 lt or or not {BackgroundColor C 1.000 0 0 5400.00 3780.00 BoxColFill} if +1.000 UL +LTb +686 737 M +63 0 V +4398 0 R +-63 0 V +/Helvetica findfont 220 scalefont setfont +602 737 M +( 0.4) Rshow +/Helvetica findfont 140 scalefont setfont +1.000 UL +LTb +686 1456 M +63 0 V +4398 0 R +-63 0 V +/Helvetica findfont 220 scalefont setfont +-4482 0 R +( 0.6) Rshow +/Helvetica findfont 140 scalefont setfont +1.000 UL +LTb +686 2174 M +63 0 V +4398 0 R +-63 0 V +/Helvetica findfont 220 scalefont setfont +-4482 0 R +( 0.8) Rshow +/Helvetica findfont 140 scalefont setfont +1.000 UL +LTb +686 2893 M +63 0 V +4398 0 R +-63 0 V +/Helvetica findfont 220 scalefont setfont +-4482 0 R +( 1) Rshow +/Helvetica findfont 140 scalefont setfont +1.000 UL +LTb +686 3611 M +63 0 V +4398 0 R +-63 0 V +/Helvetica findfont 220 scalefont setfont +-4482 0 R +( 1.2) Rshow +/Helvetica findfont 140 scalefont setfont +1.000 UL +LTb +1.000 UL +LTb +686 3611 N +686 378 L +4461 0 V +0 3233 V +-4461 0 V +Z stroke +LCb setrgbcolor +/Helvetica findfont 220 scalefont setfont +112 1994 M +currentpoint gsave translate -270 rotate 0 0 M +(Normalized energy and performance) Cshow +grestore +/Helvetica findfont 140 scalefont setfont +LTb +LCb setrgbcolor +/Helvetica findfont 220 scalefont setfont +3016 98 M +(Vectors of frequency scaling factors) Cshow +/Helvetica findfont 140 scalefont setfont +LTb +1.000 UP +/Helvetica findfont 220 scalefont setfont +1435 558 M +(Optimal vector of scaling factors) Lshow +/Helvetica findfont 140 scalefont setfont +/Helvetica findfont 220 scalefont setfont +4255 1497 M +() Lshow +/Helvetica findfont 140 scalefont setfont +/Helvetica findfont 190 scalefont setfont +793 3277 M +( Upper bound) Lshow +/Helvetica findfont 140 scalefont setfont +/Helvetica findfont 190 scalefont setfont +3541 1887 M +( Lower bound) Lshow +/Helvetica findfont 140 scalefont setfont +1384 2246 M +( Max.) Lshow +1384 2102 M +( distance) Lshow +1.000 UL +LTb +1378 2821 M +0 -1153 V +stroke +LT2 +1346 517 M +32 -121 V +32 121 V +-32 2304 R +0 -2425 V +stroke +gsave [] 0 setdash +1346 517 M +32 -121 V +32 121 V +stroke +grestore +1.000 UL +LT2 +1217 2976 M +22 -83 V +22 83 V +-22 204 R +0 -287 V +stroke +gsave [] 0 setdash +1217 2976 M +22 -83 V +22 83 V +stroke +grestore +1.000 UL +LT2 +4011 1534 M +30 -114 V +30 114 V +-30 281 R +0 -395 V +stroke +gsave [] 0 setdash +4011 1534 M +30 -114 V +30 114 V +stroke +grestore +1.000 UL +LT0 +1311 2821 M +142 0 V +1311 1668 M +142 0 V +stroke +LTb +% Begin plot #1 +1.000 UL +LT2 +LC2 setrgbcolor +LCb setrgbcolor +/Helvetica findfont 220 scalefont setfont +4496 3443 M +(Normalized performance) Rshow +/Helvetica findfont 140 scalefont setfont +LT2 +LC2 setrgbcolor +4580 3443 M +399 0 V +686 2893 M +74 0 V +81 0 V +88 0 V +97 0 V +106 0 V +117 0 V +131 -72 V +146 -142 V +164 -135 V +186 -171 V +212 -164 V +245 -148 V +286 -164 V +338 -170 V +406 -135 V +495 -135 V +620 -135 V +312 -63 V +% End plot #1 +% Begin plot #2 +stroke +2.000 UL +LT0 +1.00 0.00 0.00 C LCb setrgbcolor +/Helvetica findfont 220 scalefont setfont +4496 3233 M +(Normalized energy) Rshow +/Helvetica findfont 140 scalefont setfont +LT0 +1.00 0.00 0.00 C 4580 3233 M +399 0 V +686 2893 M +74 -248 V +81 -193 V +88 -182 V +97 -170 V +106 -156 V +117 -144 V +131 -129 V +146 -115 V +164 -100 V +186 -82 V +212 -64 V +245 -43 V +286 -20 V +338 7 V +406 39 V +495 80 V +620 131 V +312 59 V +% End plot #2 +% Begin plot #3 +stroke +1.000 UL +LT0 +1.00 1.00 1.00 C 5147 641 M +% End plot #3 +stroke +LTb +686 3611 N +686 378 L +4461 0 V +0 3233 V +-4461 0 V +Z stroke +1.000 UP +1.000 UL +LTb +stroke +grestore +end +showpage +%%Trailer +%%DocumentFonts: Helvetica +%%Trailer +%%DocumentFonts: Helvetica diff --git a/fig/ch3/homo.pdf b/fig/ch3/homo.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2d4cb51c2213e8f66c25e56daa59b0a3e872fae5 GIT binary patch literal 6975 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 A{{R30 literal 0 HcmV?d00001 diff --git a/fig/ch3/init_freq.pdf b/fig/ch3/init_freq.pdf new file mode 100644 index 0000000000000000000000000000000000000000..20ec64e149bf5c9f43eab7f93198e435a2cc8dc3 GIT binary patch literal 71016 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 NP|_<`l(khz|35;UO`iY& literal 0 HcmV?d00001 diff --git a/fig/ch3/per_d.eps b/fig/ch3/per_d.eps new file mode 100644 index 0000000..8fb93bb --- /dev/null +++ b/fig/ch3/per_d.eps @@ -0,0 +1,897 @@ +%!PS-Adobe-2.0 +%%Creator: gnuplot 4.6 patchlevel 6 +%%CreationDate: Thu Oct 22 12:39:50 2015 +%%DocumentFonts: (atend) +%%BoundingBox: 50 50 554 410 +%%Orientation: Portrait +%%Pages: (atend) +%%EndComments +%%BeginProlog +/gnudict 256 dict def +gnudict begin +% +% The following true/false flags may be edited by hand if desired. +% The unit line width and grayscale image gamma correction may also be changed. +% +/Color false def +/Blacktext false def +/Solid false def +/Dashlength 1 def +/Landscape false def +/Level1 false def +/Rounded false def +/ClipToBoundingBox false def +/SuppressPDFMark false def +/TransparentPatterns false def +/gnulinewidth 5.000 def +/userlinewidth gnulinewidth def +/Gamma 1.0 def +/BackgroundColor {-1.000 -1.000 -1.000} def +% +/vshift -36 def +/dl1 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if +} def +/dl2 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul add } if +} def +/hpt_ 31.5 def +/vpt_ 31.5 def +/hpt hpt_ def +/vpt vpt_ def +/doclip { + ClipToBoundingBox { + newpath 50 50 moveto 554 50 lineto 554 410 lineto 50 410 lineto closepath + clip + } if +} def +% +% Gnuplot Prolog Version 4.6 (September 2012) +% +%/SuppressPDFMark true def +% +/M {moveto} bind def +/L {lineto} bind def +/R {rmoveto} bind def +/V {rlineto} bind def +/N {newpath moveto} bind def +/Z {closepath} bind def +/C {setrgbcolor} bind def +/f {rlineto fill} bind def +/g {setgray} bind def +/Gshow {show} def % May be redefined later in the file to support UTF-8 +/vpt2 vpt 2 mul def +/hpt2 hpt 2 mul def +/Lshow {currentpoint stroke M 0 vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Rshow {currentpoint stroke M dup stringwidth pop neg vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def + /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def +/DL {Color {setrgbcolor Solid {pop []} if 0 setdash} + {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse} def +/BL {stroke userlinewidth 2 mul setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/AL {stroke userlinewidth 2 div setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/UL {dup gnulinewidth mul /userlinewidth exch def + dup 1 lt {pop 1} if 10 mul /udl exch def} def +/PL {stroke userlinewidth setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +3.8 setmiterlimit +% Default Line colors +/LCw {1 1 1} def +/LCb {0 0 0} def +/LCa {0 0 0} def +/LC0 {1 0 0} def +/LC1 {0 1 0} def +/LC2 {0 0 1} def +/LC3 {1 0 1} def +/LC4 {0 1 1} def +/LC5 {1 1 0} def +/LC6 {0 0 0} def +/LC7 {1 0.3 0} def +/LC8 {0.5 0.5 0.5} def +% Default Line Types +/LTw {PL [] 1 setgray} def +/LTb {BL [] LCb DL} def +/LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def +/LT0 {PL [] LC0 DL} def +/LT1 {PL [4 dl1 2 dl2] LC1 DL} def +/LT2 {PL [2 dl1 3 dl2] LC2 DL} def +/LT3 {PL [1 dl1 1.5 dl2] LC3 DL} def +/LT4 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def +/LT5 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC5 DL} def +/LT6 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC6 DL} def +/LT7 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC7 DL} def +/LT8 {PL [2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 4 dl2] LC8 DL} def +/Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def +/Dia {stroke [] 0 setdash 2 copy vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke + Pnt} def +/Pls {stroke [] 0 setdash vpt sub M 0 vpt2 V + currentpoint stroke M + hpt neg vpt neg R hpt2 0 V stroke + } def +/Box {stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke + Pnt} def +/Crs {stroke [] 0 setdash exch hpt sub exch vpt add M + hpt2 vpt2 neg V currentpoint stroke M + hpt2 neg 0 R hpt2 vpt2 V stroke} def +/TriU {stroke [] 0 setdash 2 copy vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke + Pnt} def +/Star {2 copy Pls Crs} def +/BoxF {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath fill} def +/TriUF {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath fill} def +/TriD {stroke [] 0 setdash 2 copy vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke + Pnt} def +/TriDF {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath fill} def +/DiaF {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath fill} def +/Pent {stroke [] 0 setdash 2 copy gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore Pnt} def +/PentF {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath fill grestore} def +/Circle {stroke [] 0 setdash 2 copy + hpt 0 360 arc stroke Pnt} def +/CircleF {stroke [] 0 setdash hpt 0 360 arc fill} def +/C0 {BL [] 0 setdash 2 copy moveto vpt 90 450 arc} bind def +/C1 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + vpt 0 360 arc closepath} bind def +/C2 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C3 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C4 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C5 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc + 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc} bind def +/C6 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C7 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C8 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C9 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 450 arc closepath fill + vpt 0 360 arc closepath} bind def +/C10 {BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill + 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C11 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C12 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C13 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C14 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 360 arc closepath fill + vpt 0 360 arc} bind def +/C15 {BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/Rec {newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto + neg 0 rlineto closepath} bind def +/Square {dup Rec} bind def +/Bsquare {vpt sub exch vpt sub exch vpt2 Square} bind def +/S0 {BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare} bind def +/S1 {BL [] 0 setdash 2 copy vpt Square fill Bsquare} bind def +/S2 {BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S3 {BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare} bind def +/S4 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S5 {BL [] 0 setdash 2 copy 2 copy vpt Square fill + exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S6 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S7 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S8 {BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare} bind def +/S9 {BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S10 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill + Bsquare} bind def +/S11 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill + Bsquare} bind def +/S12 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare} bind def +/S13 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S14 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S15 {BL [] 0 setdash 2 copy Bsquare fill Bsquare} bind def +/D0 {gsave translate 45 rotate 0 0 S0 stroke grestore} bind def +/D1 {gsave translate 45 rotate 0 0 S1 stroke grestore} bind def +/D2 {gsave translate 45 rotate 0 0 S2 stroke grestore} bind def +/D3 {gsave translate 45 rotate 0 0 S3 stroke grestore} bind def +/D4 {gsave translate 45 rotate 0 0 S4 stroke grestore} bind def +/D5 {gsave translate 45 rotate 0 0 S5 stroke grestore} bind def +/D6 {gsave translate 45 rotate 0 0 S6 stroke grestore} bind def +/D7 {gsave translate 45 rotate 0 0 S7 stroke grestore} bind def +/D8 {gsave translate 45 rotate 0 0 S8 stroke grestore} bind def +/D9 {gsave translate 45 rotate 0 0 S9 stroke grestore} bind def +/D10 {gsave translate 45 rotate 0 0 S10 stroke grestore} bind def +/D11 {gsave translate 45 rotate 0 0 S11 stroke grestore} bind def +/D12 {gsave translate 45 rotate 0 0 S12 stroke grestore} bind def +/D13 {gsave translate 45 rotate 0 0 S13 stroke grestore} bind def +/D14 {gsave translate 45 rotate 0 0 S14 stroke grestore} bind def +/D15 {gsave translate 45 rotate 0 0 S15 stroke grestore} bind def +/DiaE {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke} def +/BoxE {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke} def +/TriUE {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke} def +/TriDE {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke} def +/PentE {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore} def +/CircE {stroke [] 0 setdash + hpt 0 360 arc stroke} def +/Opaque {gsave closepath 1 setgray fill grestore 0 setgray closepath} def +/DiaW {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V Opaque stroke} def +/BoxW {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V Opaque stroke} def +/TriUW {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V Opaque stroke} def +/TriDW {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V Opaque stroke} def +/PentW {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + Opaque stroke grestore} def +/CircW {stroke [] 0 setdash + hpt 0 360 arc Opaque stroke} def +/BoxFill {gsave Rec 1 setgray fill grestore} def +/Density { + /Fillden exch def + currentrgbcolor + /ColB exch def /ColG exch def /ColR exch def + /ColR ColR Fillden mul Fillden sub 1 add def + /ColG ColG Fillden mul Fillden sub 1 add def + /ColB ColB Fillden mul Fillden sub 1 add def + ColR ColG ColB setrgbcolor} def +/BoxColFill {gsave Rec PolyFill} def +/PolyFill {gsave Density fill grestore grestore} def +/h {rlineto rlineto rlineto gsave closepath fill grestore} bind def +% +% PostScript Level 1 Pattern Fill routine for rectangles +% Usage: x y w h s a XX PatternFill +% x,y = lower left corner of box to be filled +% w,h = width and height of box +% a = angle in degrees between lines and x-axis +% XX = 0/1 for no/yes cross-hatch +% +/PatternFill {gsave /PFa [ 9 2 roll ] def + PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate + PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse + clip + currentlinewidth 0.5 mul setlinewidth + /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def + 0 0 M PFa 5 get rotate PFs -2 div dup translate + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 M 0 PFs V} for + 0 PFa 6 get ne { + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 2 1 roll M PFs 0 V} for + } if + stroke grestore} def +% +/languagelevel where + {pop languagelevel} {1} ifelse + 2 lt + {/InterpretLevel1 true def} + {/InterpretLevel1 Level1 def} + ifelse +% +% PostScript level 2 pattern fill definitions +% +/Level2PatternFill { +/Tile8x8 {/PaintType 2 /PatternType 1 /TilingType 1 /BBox [0 0 8 8] /XStep 8 /YStep 8} + bind def +/KeepColor {currentrgbcolor [/Pattern /DeviceRGB] setcolorspace} bind def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke} +>> matrix makepattern +/Pat1 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke + 0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke} +>> matrix makepattern +/Pat2 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L + 8 8 L 8 0 L 0 0 L fill} +>> matrix makepattern +/Pat3 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L + 0 12 M 12 0 L stroke} +>> matrix makepattern +/Pat4 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L + 0 -4 M 12 8 L stroke} +>> matrix makepattern +/Pat5 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L + 0 12 M 8 -4 L 4 12 M 10 0 L stroke} +>> matrix makepattern +/Pat6 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L + 0 -4 M 8 12 L 4 -4 M 10 8 L stroke} +>> matrix makepattern +/Pat7 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L + 12 0 M -4 8 L 12 4 M 0 10 L stroke} +>> matrix makepattern +/Pat8 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L + -4 0 M 12 8 L -4 4 M 8 10 L stroke} +>> matrix makepattern +/Pat9 exch def +/Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def +/Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def +/Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def +/Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def +/Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def +/Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def +/Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def +} def +% +% +%End of PostScript Level 2 code +% +/PatternBgnd { + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse +} def +% +% Substitute for Level 2 pattern fill codes with +% grayscale if Level 2 support is not selected. +% +/Level1PatternFill { +/Pattern1 {0.250 Density} bind def +/Pattern2 {0.500 Density} bind def +/Pattern3 {0.750 Density} bind def +/Pattern4 {0.125 Density} bind def +/Pattern5 {0.375 Density} bind def +/Pattern6 {0.625 Density} bind def +/Pattern7 {0.875 Density} bind def +} def +% +% Now test for support of Level 2 code +% +Level1 {Level1PatternFill} {Level2PatternFill} ifelse +% +/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont +dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall +currentdict end definefont pop +% +% Encoding for ISO-8859-1 (also called Latin1) +% +/reencodeISO { +dup dup findfont dup length dict begin +{ 1 index /FID ne { def }{ pop pop } ifelse } forall +currentdict /CharStrings known { + CharStrings /Idieresis known { + /Encoding ISOLatin1Encoding def } if +} if +currentdict end definefont +} def +/ISOLatin1Encoding [ +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright +/parenleft/parenright/asterisk/plus/comma/minus/period/slash +/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon +/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N +/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright +/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m +/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve +/dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut +/ogonek/caron/space/exclamdown/cent/sterling/currency/yen/brokenbar +/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot +/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior +/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine +/guillemotright/onequarter/onehalf/threequarters/questiondown +/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla +/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex +/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis +/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute +/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis +/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave +/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex +/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis +/yacute/thorn/ydieresis +] def +/MFshow { + { dup 5 get 3 ge + { 5 get 3 eq {gsave} {grestore} ifelse } + {dup dup 0 get findfont exch 1 get scalefont setfont + [ currentpoint ] exch dup 2 get 0 exch R dup 5 get 2 ne {dup dup 6 + get exch 4 get {Gshow} {stringwidth pop 0 R} ifelse }if dup 5 get 0 eq + {dup 3 get {2 get neg 0 exch R pop} {pop aload pop M} ifelse} {dup 5 + get 1 eq {dup 2 get exch dup 3 get exch 6 get stringwidth pop -2 div + dup 0 R} {dup 6 get stringwidth pop -2 div 0 R 6 get + show 2 index {aload pop M neg 3 -1 roll neg R pop pop} {pop pop pop + pop aload pop M} ifelse }ifelse }ifelse } + ifelse } + forall} def +/Gswidth {dup type /stringtype eq {stringwidth} {pop (n) stringwidth} ifelse} def +/MFwidth {0 exch { dup 5 get 3 ge { 5 get 3 eq { 0 } { pop } ifelse } + {dup 3 get{dup dup 0 get findfont exch 1 get scalefont setfont + 6 get Gswidth pop add} {pop} ifelse} ifelse} forall} def +/MLshow { currentpoint stroke M + 0 exch R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MRshow { currentpoint stroke M + exch dup MFwidth neg 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MCshow { currentpoint stroke M + exch dup MFwidth -2 div 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/XYsave { [( ) 1 2 true false 3 ()] } bind def +/XYrestore { [( ) 1 2 true false 4 ()] } bind def +/Helvetica reencodeISO def +Level1 SuppressPDFMark or +{} { +/SDict 10 dict def +systemdict /pdfmark known not { + userdict /pdfmark systemdict /cleartomark get put +} if +SDict begin [ + /Title () + /Subject (gnuplot plot) + /Creator (gnuplot 4.6 patchlevel 6) + /Author (afanfakh) +% /Producer (gnuplot) +% /Keywords () + /CreationDate (Thu Oct 22 12:39:50 2015) + /DOCINFO pdfmark +end +} ifelse +end +%%EndProlog +%%Page: 1 1 +gnudict begin +gsave +doclip +50 50 translate +0.100 0.100 scale +0 setgray +newpath +(Helvetica) findfont 110 scalefont setfont +BackgroundColor 0 lt 3 1 roll 0 lt exch 0 lt or or not {gsave BackgroundColor C clippath fill grestore} if +1.000 UL +LTb +473 352 M +63 0 V +4305 0 R +-63 0 V +stroke +407 352 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 0)] +] -50.0 MRshow +1.000 UL +LTb +473 441 M +31 0 V +4337 0 R +-31 0 V +473 530 M +31 0 V +4337 0 R +-31 0 V +473 619 M +31 0 V +4337 0 R +-31 0 V +473 708 M +31 0 V +4337 0 R +-31 0 V +473 797 M +63 0 V +4305 0 R +-63 0 V +stroke +407 797 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 5)] +] -50.0 MRshow +1.000 UL +LTb +473 886 M +31 0 V +4337 0 R +-31 0 V +473 975 M +31 0 V +4337 0 R +-31 0 V +473 1064 M +31 0 V +4337 0 R +-31 0 V +473 1153 M +31 0 V +4337 0 R +-31 0 V +473 1242 M +63 0 V +4305 0 R +-63 0 V +stroke +407 1242 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 10)] +] -50.0 MRshow +1.000 UL +LTb +473 1331 M +31 0 V +4337 0 R +-31 0 V +473 1420 M +31 0 V +4337 0 R +-31 0 V +473 1509 M +31 0 V +4337 0 R +-31 0 V +473 1598 M +31 0 V +4337 0 R +-31 0 V +473 1687 M +63 0 V +4305 0 R +-63 0 V +stroke +407 1687 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 15)] +] -50.0 MRshow +1.000 UL +LTb +473 1776 M +31 0 V +4337 0 R +-31 0 V +473 1865 M +31 0 V +4337 0 R +-31 0 V +473 1955 M +31 0 V +4337 0 R +-31 0 V +473 2044 M +31 0 V +4337 0 R +-31 0 V +473 2133 M +63 0 V +4305 0 R +-63 0 V +stroke +407 2133 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 20)] +] -50.0 MRshow +1.000 UL +LTb +473 2222 M +31 0 V +4337 0 R +-31 0 V +473 2311 M +31 0 V +4337 0 R +-31 0 V +473 2400 M +31 0 V +4337 0 R +-31 0 V +473 2489 M +31 0 V +4337 0 R +-31 0 V +473 2578 M +63 0 V +4305 0 R +-63 0 V +stroke +407 2578 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 25)] +] -50.0 MRshow +1.000 UL +LTb +473 2667 M +31 0 V +4337 0 R +-31 0 V +473 2756 M +31 0 V +4337 0 R +-31 0 V +473 2845 M +31 0 V +4337 0 R +-31 0 V +473 2934 M +31 0 V +4337 0 R +-31 0 V +473 3023 M +63 0 V +4305 0 R +-63 0 V +stroke +407 3023 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 30)] +] -50.0 MRshow +1.000 UL +LTb +473 3112 M +31 0 V +4337 0 R +-31 0 V +473 3201 M +31 0 V +4337 0 R +-31 0 V +473 3290 M +31 0 V +4337 0 R +-31 0 V +473 3379 M +31 0 V +4337 0 R +-31 0 V +473 3468 M +63 0 V +4305 0 R +-63 0 V +stroke +407 3468 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 35)] +] -50.0 MRshow +1.000 UL +LTb +1019 352 M +0 63 V +0 3053 R +0 -63 V +stroke +1019 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (CG)] +] -50.0 MCshow +1.000 UL +LTb +1565 352 M +0 63 V +0 3053 R +0 -63 V +stroke +1565 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (MG)] +] -50.0 MCshow +1.000 UL +LTb +2111 352 M +0 63 V +0 3053 R +0 -63 V +stroke +2111 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (EP)] +] -50.0 MCshow +1.000 UL +LTb +2657 352 M +0 63 V +0 3053 R +0 -63 V +stroke +2657 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (LU)] +] -50.0 MCshow +1.000 UL +LTb +3203 352 M +0 63 V +0 3053 R +0 -63 V +stroke +3203 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (BT)] +] -50.0 MCshow +1.000 UL +LTb +3749 352 M +0 63 V +0 3053 R +0 -63 V +stroke +3749 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (SP)] +] -50.0 MCshow +1.000 UL +LTb +4295 352 M +0 63 V +0 3053 R +0 -63 V +stroke +4295 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (FT)] +] -50.0 MCshow +1.000 UL +LTb +1.000 UL +LTb +473 3468 N +473 352 L +4368 0 V +0 3116 V +-4368 0 V +Z stroke +LCb setrgbcolor +88 1910 M +currentpoint gsave translate -270 rotate 0 0 moveto +[ [(Helvetica) 180.0 0.0 true true 0 (Performance degradation)] +] -60.0 MCshow +grestore +LTb +LCb setrgbcolor +2657 77 M +[ [(Helvetica) 180.0 0.0 true true 0 (NAS parallel benchmarks)] +] -60.0 MCshow +LTb +1.000 UP +1.000 UL +LTb +% Begin plot #1 +1.000 UL +LT0 +0.10 0.10 0.44 C LCb setrgbcolor +1816 3224 M +[ [(Helvetica) 140.0 0.0 true true 0 (One site / 16 nodes)] +] -46.7 MRshow +LT0 +0.10 0.10 0.44 C 1882 3191 327 66 40 45 2 PatternFill +0.10 0.10 0.44 C 892 352 73 575 40 45 2 PatternFill +0.10 0.10 0.44 C 1438 352 73 496 40 45 2 PatternFill +0.10 0.10 0.44 C 1984 352 73 135 40 45 2 PatternFill +0.10 0.10 0.44 C 2530 352 73 310 40 45 2 PatternFill +0.10 0.10 0.44 C 3076 352 73 253 40 45 2 PatternFill +0.10 0.10 0.44 C 3622 352 73 160 40 45 2 PatternFill +0.10 0.10 0.44 C 4168 352 73 88 40 45 2 PatternFill +% End plot #1 +% Begin plot #2 +1.000 UL +LT1 +0.10 0.10 0.44 C LCb setrgbcolor +1816 3092 M +[ [(Helvetica) 140.0 0.0 true true 0 (One site / 32 nodes)] +] -46.7 MRshow +LT1 +0.10 0.10 0.44 C 1.000 1882 3059 327 66 BoxColFill +0.10 0.10 0.44 C 1.000 983 352 73 1243 BoxColFill +0.10 0.10 0.44 C 1.000 1529 352 73 671 BoxColFill +0.10 0.10 0.44 C 1.000 2075 352 73 1640 BoxColFill +0.10 0.10 0.44 C 1.000 2621 352 73 1115 BoxColFill +0.10 0.10 0.44 C 1.000 3167 352 73 1369 BoxColFill +0.10 0.10 0.44 C 1.000 3713 352 73 28 BoxColFill +0.10 0.10 0.44 C 1.000 4259 352 73 585 BoxColFill +% End plot #2 +% Begin plot #3 +1.000 UL +LT0 +0.00 0.39 0.00 C LCb setrgbcolor +1816 2960 M +[ [(Helvetica) 140.0 0.0 true true 0 (Two sites / 16 nodes)] +] -46.7 MRshow +LT0 +0.00 0.39 0.00 C 1882 2927 327 66 80 -45 1 PatternFill +0.00 0.39 0.00 C 1074 352 73 374 80 -45 1 PatternFill +0.00 0.39 0.00 C 1620 352 73 1197 80 -45 1 PatternFill +0.00 0.39 0.00 C 2166 352 73 2409 80 -45 1 PatternFill +0.00 0.39 0.00 C 2712 352 73 37 80 -45 1 PatternFill +0.00 0.39 0.00 C 3258 352 73 538 80 -45 1 PatternFill +0.00 0.39 0.00 C 3804 352 73 574 80 -45 1 PatternFill +0.00 0.39 0.00 C 4350 352 73 71 80 -45 1 PatternFill +% End plot #3 +% Begin plot #4 +1.000 UL +LT3 +0.94 0.50 0.50 C LCb setrgbcolor +1816 2828 M +[ [(Helvetica) 140.0 0.0 true true 0 (Two sites / 32 nodes)] +] -46.7 MRshow +LT3 +0.94 0.50 0.50 C 1.000 1882 2795 327 66 BoxColFill +0.94 0.50 0.50 C 1.000 1165 352 73 227 BoxColFill +0.94 0.50 0.50 C 1.000 1711 352 73 28 BoxColFill +0.94 0.50 0.50 C 1.000 2257 352 73 2212 BoxColFill +0.94 0.50 0.50 C 1.000 2803 352 73 54 BoxColFill +0.94 0.50 0.50 C 1.000 3349 352 73 250 BoxColFill +0.94 0.50 0.50 C 1.000 3895 352 73 54 BoxColFill +0.94 0.50 0.50 C 1.000 4441 352 73 100 BoxColFill +% End plot #4 +1.000 UL +LTb +473 3468 N +473 352 L +4368 0 V +0 3116 V +-4368 0 V +Z stroke +1.000 UP +1.000 UL +LTb +stroke +grestore +end +showpage +%%Trailer +%%DocumentFonts: Helvetica +%%Pages: 1 diff --git a/fig/ch3/per_d_mc-eps-converted-to.pdf b/fig/ch3/per_d_mc-eps-converted-to.pdf new file mode 100644 index 0000000000000000000000000000000000000000..4bc6d6c31fdb901a5d6b536dd366379d524ca7c1 GIT binary patch literal 7684 zcmb_>2|Sc*^naz2Q7A3~QQf-#-|zGLeC{xxdEWD!^F8M|=RD_qpYtl(7#N{2YU&8Z z%Avz&5qJO%a6Nqx+S;H6gX1Oe1_%(v4m4u11q>bl8nLMYh5>`dr8CH61Yf{oQ2h`g z=^4qbybXp@u_IF|y;wJT%IVpn%?=M&>|2~5DwWS(o|OLZOi1K~Pl6G%b?48X*fN@P zl|0hmMa z>W#+?3U)Ir9^H+ydfvBhnzU|tyjrkSmejBe(M1*g#Fp4h+&b9jO+d4I*y~(gJgsAU zG(Kv&($&(?`<18>Pe3IyMQAP^?dV*W-i!6cEl$rX<;LgaKj!V33aT@8aJ|;}ph<~4 znEX{rl)EkyQcP9#(h9p;f6SYZXJP(vq8=ef+y0v872BBHz;`2kDh}&mXLDYjnd6*d zOvuzM-Itp_{A`GzGG|H66-peWemkW8^7>)Y@?o@<(Ja=PJm(0n6)-?D1tAsL{ z7NxJI6<-yIIkUUihljZYW1;%+tyP=CA=C$ZBtK8H{+1dd9ZU{aec%HbntM;v7}D=K zB?l=eUy8JL&um(CyoI}s>YFt9ZqVuZ7dQX<+P)8mN0KIN)S5^{pKP09gVOxtcB%EZ zO4Kqme7%7DVClI2#fI6vs#<%po2G6Dl}6qTN^;9Rel7^nVAbub#ZQTQLW-V=95{Ht zIU&VB5Odak>}1B#&u&k(+SxCjq_QPVpIe=I6&K;>Wy;se93Cb$uPz>zgFqYH6C)U2 zh^WNTzs9m_dIB}K*vl+Adhu5M&Yj$k{OL|DPL~9E##im^HMN)1={zNs(7U>=x|tHq zU7V4(lakrPt&?M2V@K1HYjpPMecpEZazszEET^?{nDuG=dNeP3=x~XyWOIEx_<0S> zqUA%F+im`2MDY6dO~FYe0}WRz?=N{^k0s^KbUjKl=&&LXwh%f}XV?28zCTHj}Uy7}=s(U&x9 zVqz%cW8uMs54WE@Fzhz97JRPr-1Gb0?&4Y!r|*>b#I4#RX`4K?>C-Xh4(ln8`|_Wy zeOc^L9v|puzEkp@Zpr8JaoJDRFB2IY`dnFnMsO*C3kdv+LE|(Kb2RnuWyT@Yp8?uX zy%?Y+gU+Jrb3*`EG&GGzs{=R!+8qH+@)#TefP;v32+)qf=LYg<3_et%Y<>TReY^} z5E^6`AT*2*faWYZA8W7CFW~Y3A`BsPhj0dRCyU1yP`s%;0EY!FsB>cs zMgw$W(FNXoR|HlAR`fsoA@Fzt@Z%SXH$?dt2?QD-5Hy5e4J;Po5MDv6)c8RMEUSsb z0Wb$dN5DKV);C_Ec{x^FzG|v1==krEJhR1 zAV7;($GF4yXfHk#8w9Awr@=c1qC!be^*3R#yu9Zw;Q+&PuqXmFg>sce)8lxt82}mq z+6x$d+o2t!jsPuLd_J@qVPxS|B0%Rk7(9*$p+ac@?LcKv57Y-Kpdn}k8iN*~C1?d& zgEpW&=m0u`RL~Qofpm}oGC?LQhyi+m-XII~1=*k<$N{+^m%{-4K_18l`TkTI0~CM) zZyp2s4d#M@U>JkPRS`M@dJ19S01TW4Kcu{(KEsQ}nXd~ZfC+H{%5X`5^Bb0d9sCCd ztAY@U&UyRmBh8ObG|<9-j1gu25eSDtqsioN4?B+A#T@J_*O$t5_r@QItjP46a-T>uDMno>!pBxNCdO4`rT0nWdkd62 z?R{NcB1baQ`(@V5!gcI!XswYhqs)xu0s4D0vd+tMtN( zy{q8ii~B=ym#F6?!daotD|Q^)c}y|n$uYA6vu#5=c;i`S?{LkcI~IK?u+lek&f8Dj zEyB6_q%vp9P$zPR;_p#w%YJjeVO2n8R@k!C*xB1nV;2jEM18Xv{DB_*^3=2^cGp-- z%xwH5x)196TIk3;r^M}i&W(wxcR7CUgW;@0Z9!|lOG9k$gRxhG{cEvGh2iQv&z8_h zx5_;O7w`OOIGWPwR`!R!l(EYW=_2IrRm-Gz8m|bqUiV^c#993+8uKtN*Ao;}6gyX3SDXe3O=~Oa?s!kX`%K<>ZsDsH5t@fK zDAG?)u~%8d94ffKruWe8T_>g9j-}sv{OF6KZp%2*zN))_&FM{;NMLClD#Ntb!>XZw z6sI$CDUKUdZgO_1to6oGy(`{DShX$M%6<~^K?fQ&YKA3BfB)h>X}|b#9jJSHujZ4C z*5i3v=L~Y=OA_TPm8dAj?V6n2?G}feMHv32F9K8L?k;TE4J2}W#(($k8PBY*6ltN zqmGF)*C(u8D4!@(ch918iJ0z`#zeGgZh&;lnPsONS}Hm2XRSTJ9eRQ4i2ce35~y$O zpxeT@YeM=Vu0v~skLrvAIJ`0`@|N#x^8xeb$XljMyN}kI9r)zz4isxG6BTuuwAaZ{J;*Bde(!^!bTBLch;S+JGEBsF^ zy&I$Jck*`0h{!m(^Ep@c^2z(j`u5%%jxILn&N^?-F9^Oo>DRHZkV?G^ON4ud=kQGEyzQ{r8E(PbO0nwd_VuemLyI*Gf-3cWzDKe$CG1 zXI7oKk*#S=*{_1TdG}5o>rf~A)1eE~mBx$*3P_0;vKzgor+sA3h(zaJJQv&pxMd5T zj-W4Z1|9VS0!DPUN3e$f4w{HW9!cD_VA1{PQE~YdVXEQo@yplm?Xb9{cp;$FSZ!?j zkNmEn^BUqe&MtgZyx7du+0bcCaJUT!2$Zg?K@ng~`%TK}-^uAfQ{D>VpR8zdSvkd z$F)5QTO1>P3o@;}7w%-PM%R8{^43f`VCOd59j4pKDNDxgMdgV%`ozaG13g`Si#K+) zVz{em7ED#o47wR6ch?qZ{UIr5H5=I98R^|V6Pb@0*rD1VDoti~cCmWp#cYo>RqR=P zO#e@=34ZeBjn<C0orqJ_t4IP<&6*G0U;<(-1E`;=`Gva*IljZCe>G?oNz)-O`ibi0a=Yic6k2T4eW(igIbJ zTDwJV=Z9O7$20%o& zxSD8o-o2&NZ5K0C_99J-`=`}-;dGLfn(Kj>_SU4UPwY9WVd5$_52!V9WwdZ|=L;M9S{CW}5oM)2gQ9V{;hvGKw9ag5f4#=2i)#5edEeL+x`QkCGh2u^PdAZWIakV&DPK9A&cv!1#{v$Hht!- zBW)acwoLudyEAR+fS9rEo9Bnp6!2q}TYa7`SXmz7UvHmyB1V1WQw8^Yj^E&$a;d_y zNmhbZoLrg)=s#idS*%m8v}d3mvnoY8#J}R9etBWva?@xcH)FzRvV} zHIdpwT4j}@%U3;KeDnQew&gzGyMo)3{K^}j##fJYx0#SK1ySX3=<8Ckj0*-m%8zco z74JMawEMCwUM44}XuR-MP{oRfmC{lrG<$>8YQ9Loj(ikbax`_{Nt&XWDE^MkGh|u* z(FTR*VpL@RX4wMEo)|Ab*Yl=e9egvCe7P=8W*PEKXZRUz45c= zHt!>G##+9!uO^2D{?0*}nn#HXRS$gHZ>QiIHPDfB*xCnlBL|8E6ercFO2<2>a3Ax6 zRdo-v=yJAu)b7sSz5h%9+5(j;Yc~+uu#WGJe7QYQ&?R_L55B05igZ6;65ScQJ0i9G zXn*;R1}*SGWVXzo#OjYd#9O;tx{R?3a-qpSC4X%qAUZBhM0Na`bH8D`r_u8~QpxMM zV%?@@NvBuVo~NQklo+=z!)LmGHa~>N{2z~Z^9_LSXANgdi}`~FMxChs?VzEp8v-4M zd>I136F%SQAV*5>A^{d%2kC^jL|gh(7~U+CFdoA`%*ufl=1U{ek-B7rwk{Rwx-d{7 zRDTq75Q3Vvd;mJ?>Bv*;ER5t~h7eMSpT8f}hX6wS*c?77L1=5O2)JCfFG~Pm)re{s6b82yVDg{?X)u@P3t-d;NC=WgXOiro^VU~D=t>9aEfDyV zKrlEsSS=W*#^rf|7$T7fqOl+ri-I^%{7{a78iL~R6(D^=Ls-t=#5jC4p-pNut{=#9 z1~F=Aa9+`TYl6k)0I*`JCpS=_gA5F0(Me1KS`&k#VNh5G0gJ+5m>3iq`k>G_G#1U! z#A#qX)#ugu|6t}n^g$DlLLB4=Xhec~O!Pn+gQtTuwy^+=y}5kB*VYI?R6`Sx;N0^6 zE32T`{JR&RfX=x=8{#2ZLQMu{r~%aGB4g1Q0<=OD4()&@lAwRQrYagsLZh|8pE#l5 zL!uO@X%98=VNnO~KmcV;LkR!}ES3adNE##@fkYwzUqyf5{6UnWBMZV_-dYwiv)Uu%^At<eN6ZE*wuDg}6m4=N5q76TGo8_+l$8cjqKg=GPWMkD8uxIE?gaQwW9 zAr=QXx0Im))D-h!&;;Lj;m|>3y+DCCgfO2OD&HE^Av^{XYOO-uL%8;S{Qv|!9)|~* zz#I*O!$a$aKLBT*rh!)fg@(Zrp+@;X`Jle!FMMcd;lJ|1&D)=3)iF?O_$L}3>Yn~g zBVwVB{!e`B_+Rui~ zFDU@fl*8l#kn!-_3sVEYRU0~DqbWpnG@gKiZlgrJkvay8Ho{Q|h7`1(K9NZN-#Ogj Yw-tN=l_wAeNCS(4>aHvJ^%m! literal 0 HcmV?d00001 diff --git a/fig/ch3/per_d_mc.eps b/fig/ch3/per_d_mc.eps new file mode 100644 index 0000000..19d87f1 --- /dev/null +++ b/fig/ch3/per_d_mc.eps @@ -0,0 +1,845 @@ +%!PS-Adobe-2.0 +%%Creator: gnuplot 4.6 patchlevel 6 +%%CreationDate: Thu Oct 22 17:36:36 2015 +%%DocumentFonts: (atend) +%%BoundingBox: 50 50 554 410 +%%Orientation: Portrait +%%Pages: (atend) +%%EndComments +%%BeginProlog +/gnudict 256 dict def +gnudict begin +% +% The following true/false flags may be edited by hand if desired. +% The unit line width and grayscale image gamma correction may also be changed. +% +/Color false def +/Blacktext false def +/Solid false def +/Dashlength 1 def +/Landscape false def +/Level1 false def +/Rounded false def +/ClipToBoundingBox false def +/SuppressPDFMark false def +/TransparentPatterns false def +/gnulinewidth 5.000 def +/userlinewidth gnulinewidth def +/Gamma 1.0 def +/BackgroundColor {-1.000 -1.000 -1.000} def +% +/vshift -36 def +/dl1 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if +} def +/dl2 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul add } if +} def +/hpt_ 31.5 def +/vpt_ 31.5 def +/hpt hpt_ def +/vpt vpt_ def +/doclip { + ClipToBoundingBox { + newpath 50 50 moveto 554 50 lineto 554 410 lineto 50 410 lineto closepath + clip + } if +} def +% +% Gnuplot Prolog Version 4.6 (September 2012) +% +%/SuppressPDFMark true def +% +/M {moveto} bind def +/L {lineto} bind def +/R {rmoveto} bind def +/V {rlineto} bind def +/N {newpath moveto} bind def +/Z {closepath} bind def +/C {setrgbcolor} bind def +/f {rlineto fill} bind def +/g {setgray} bind def +/Gshow {show} def % May be redefined later in the file to support UTF-8 +/vpt2 vpt 2 mul def +/hpt2 hpt 2 mul def +/Lshow {currentpoint stroke M 0 vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Rshow {currentpoint stroke M dup stringwidth pop neg vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def + /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def +/DL {Color {setrgbcolor Solid {pop []} if 0 setdash} + {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse} def +/BL {stroke userlinewidth 2 mul setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/AL {stroke userlinewidth 2 div setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/UL {dup gnulinewidth mul /userlinewidth exch def + dup 1 lt {pop 1} if 10 mul /udl exch def} def +/PL {stroke userlinewidth setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +3.8 setmiterlimit +% Default Line colors +/LCw {1 1 1} def +/LCb {0 0 0} def +/LCa {0 0 0} def +/LC0 {1 0 0} def +/LC1 {0 1 0} def +/LC2 {0 0 1} def +/LC3 {1 0 1} def +/LC4 {0 1 1} def +/LC5 {1 1 0} def +/LC6 {0 0 0} def +/LC7 {1 0.3 0} def +/LC8 {0.5 0.5 0.5} def +% Default Line Types +/LTw {PL [] 1 setgray} def +/LTb {BL [] LCb DL} def +/LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def +/LT0 {PL [] LC0 DL} def +/LT1 {PL [4 dl1 2 dl2] LC1 DL} def +/LT2 {PL [2 dl1 3 dl2] LC2 DL} def +/LT3 {PL [1 dl1 1.5 dl2] LC3 DL} def +/LT4 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def +/LT5 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC5 DL} def +/LT6 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC6 DL} def +/LT7 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC7 DL} def +/LT8 {PL [2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 4 dl2] LC8 DL} def +/Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def +/Dia {stroke [] 0 setdash 2 copy vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke + Pnt} def +/Pls {stroke [] 0 setdash vpt sub M 0 vpt2 V + currentpoint stroke M + hpt neg vpt neg R hpt2 0 V stroke + } def +/Box {stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke + Pnt} def +/Crs {stroke [] 0 setdash exch hpt sub exch vpt add M + hpt2 vpt2 neg V currentpoint stroke M + hpt2 neg 0 R hpt2 vpt2 V stroke} def +/TriU {stroke [] 0 setdash 2 copy vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke + Pnt} def +/Star {2 copy Pls Crs} def +/BoxF {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath fill} def +/TriUF {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath fill} def +/TriD {stroke [] 0 setdash 2 copy vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke + Pnt} def +/TriDF {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath fill} def +/DiaF {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath fill} def +/Pent {stroke [] 0 setdash 2 copy gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore Pnt} def +/PentF {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath fill grestore} def +/Circle {stroke [] 0 setdash 2 copy + hpt 0 360 arc stroke Pnt} def +/CircleF {stroke [] 0 setdash hpt 0 360 arc fill} def +/C0 {BL [] 0 setdash 2 copy moveto vpt 90 450 arc} bind def +/C1 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + vpt 0 360 arc closepath} bind def +/C2 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C3 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C4 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C5 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc + 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc} bind def +/C6 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C7 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C8 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C9 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 450 arc closepath fill + vpt 0 360 arc closepath} bind def +/C10 {BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill + 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C11 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C12 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C13 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C14 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 360 arc closepath fill + vpt 0 360 arc} bind def +/C15 {BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/Rec {newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto + neg 0 rlineto closepath} bind def +/Square {dup Rec} bind def +/Bsquare {vpt sub exch vpt sub exch vpt2 Square} bind def +/S0 {BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare} bind def +/S1 {BL [] 0 setdash 2 copy vpt Square fill Bsquare} bind def +/S2 {BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S3 {BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare} bind def +/S4 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S5 {BL [] 0 setdash 2 copy 2 copy vpt Square fill + exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S6 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S7 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S8 {BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare} bind def +/S9 {BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S10 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill + Bsquare} bind def +/S11 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill + Bsquare} bind def +/S12 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare} bind def +/S13 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S14 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S15 {BL [] 0 setdash 2 copy Bsquare fill Bsquare} bind def +/D0 {gsave translate 45 rotate 0 0 S0 stroke grestore} bind def +/D1 {gsave translate 45 rotate 0 0 S1 stroke grestore} bind def +/D2 {gsave translate 45 rotate 0 0 S2 stroke grestore} bind def +/D3 {gsave translate 45 rotate 0 0 S3 stroke grestore} bind def +/D4 {gsave translate 45 rotate 0 0 S4 stroke grestore} bind def +/D5 {gsave translate 45 rotate 0 0 S5 stroke grestore} bind def +/D6 {gsave translate 45 rotate 0 0 S6 stroke grestore} bind def +/D7 {gsave translate 45 rotate 0 0 S7 stroke grestore} bind def +/D8 {gsave translate 45 rotate 0 0 S8 stroke grestore} bind def +/D9 {gsave translate 45 rotate 0 0 S9 stroke grestore} bind def +/D10 {gsave translate 45 rotate 0 0 S10 stroke grestore} bind def +/D11 {gsave translate 45 rotate 0 0 S11 stroke grestore} bind def +/D12 {gsave translate 45 rotate 0 0 S12 stroke grestore} bind def +/D13 {gsave translate 45 rotate 0 0 S13 stroke grestore} bind def +/D14 {gsave translate 45 rotate 0 0 S14 stroke grestore} bind def +/D15 {gsave translate 45 rotate 0 0 S15 stroke grestore} bind def +/DiaE {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke} def +/BoxE {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke} def +/TriUE {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke} def +/TriDE {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke} def +/PentE {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore} def +/CircE {stroke [] 0 setdash + hpt 0 360 arc stroke} def +/Opaque {gsave closepath 1 setgray fill grestore 0 setgray closepath} def +/DiaW {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V Opaque stroke} def +/BoxW {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V Opaque stroke} def +/TriUW {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V Opaque stroke} def +/TriDW {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V Opaque stroke} def +/PentW {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + Opaque stroke grestore} def +/CircW {stroke [] 0 setdash + hpt 0 360 arc Opaque stroke} def +/BoxFill {gsave Rec 1 setgray fill grestore} def +/Density { + /Fillden exch def + currentrgbcolor + /ColB exch def /ColG exch def /ColR exch def + /ColR ColR Fillden mul Fillden sub 1 add def + /ColG ColG Fillden mul Fillden sub 1 add def + /ColB ColB Fillden mul Fillden sub 1 add def + ColR ColG ColB setrgbcolor} def +/BoxColFill {gsave Rec PolyFill} def +/PolyFill {gsave Density fill grestore grestore} def +/h {rlineto rlineto rlineto gsave closepath fill grestore} bind def +% +% PostScript Level 1 Pattern Fill routine for rectangles +% Usage: x y w h s a XX PatternFill +% x,y = lower left corner of box to be filled +% w,h = width and height of box +% a = angle in degrees between lines and x-axis +% XX = 0/1 for no/yes cross-hatch +% +/PatternFill {gsave /PFa [ 9 2 roll ] def + PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate + PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse + clip + currentlinewidth 0.5 mul setlinewidth + /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def + 0 0 M PFa 5 get rotate PFs -2 div dup translate + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 M 0 PFs V} for + 0 PFa 6 get ne { + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 2 1 roll M PFs 0 V} for + } if + stroke grestore} def +% +/languagelevel where + {pop languagelevel} {1} ifelse + 2 lt + {/InterpretLevel1 true def} + {/InterpretLevel1 Level1 def} + ifelse +% +% PostScript level 2 pattern fill definitions +% +/Level2PatternFill { +/Tile8x8 {/PaintType 2 /PatternType 1 /TilingType 1 /BBox [0 0 8 8] /XStep 8 /YStep 8} + bind def +/KeepColor {currentrgbcolor [/Pattern /DeviceRGB] setcolorspace} bind def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke} +>> matrix makepattern +/Pat1 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke + 0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke} +>> matrix makepattern +/Pat2 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L + 8 8 L 8 0 L 0 0 L fill} +>> matrix makepattern +/Pat3 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L + 0 12 M 12 0 L stroke} +>> matrix makepattern +/Pat4 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L + 0 -4 M 12 8 L stroke} +>> matrix makepattern +/Pat5 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L + 0 12 M 8 -4 L 4 12 M 10 0 L stroke} +>> matrix makepattern +/Pat6 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L + 0 -4 M 8 12 L 4 -4 M 10 8 L stroke} +>> matrix makepattern +/Pat7 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L + 12 0 M -4 8 L 12 4 M 0 10 L stroke} +>> matrix makepattern +/Pat8 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L + -4 0 M 12 8 L -4 4 M 8 10 L stroke} +>> matrix makepattern +/Pat9 exch def +/Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def +/Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def +/Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def +/Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def +/Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def +/Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def +/Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def +} def +% +% +%End of PostScript Level 2 code +% +/PatternBgnd { + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse +} def +% +% Substitute for Level 2 pattern fill codes with +% grayscale if Level 2 support is not selected. +% +/Level1PatternFill { +/Pattern1 {0.250 Density} bind def +/Pattern2 {0.500 Density} bind def +/Pattern3 {0.750 Density} bind def +/Pattern4 {0.125 Density} bind def +/Pattern5 {0.375 Density} bind def +/Pattern6 {0.625 Density} bind def +/Pattern7 {0.875 Density} bind def +} def +% +% Now test for support of Level 2 code +% +Level1 {Level1PatternFill} {Level2PatternFill} ifelse +% +/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont +dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall +currentdict end definefont pop +% +% Encoding for ISO-8859-1 (also called Latin1) +% +/reencodeISO { +dup dup findfont dup length dict begin +{ 1 index /FID ne { def }{ pop pop } ifelse } forall +currentdict /CharStrings known { + CharStrings /Idieresis known { + /Encoding ISOLatin1Encoding def } if +} if +currentdict end definefont +} def +/ISOLatin1Encoding [ +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright +/parenleft/parenright/asterisk/plus/comma/minus/period/slash +/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon +/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N +/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright +/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m +/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve +/dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut +/ogonek/caron/space/exclamdown/cent/sterling/currency/yen/brokenbar +/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot +/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior +/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine +/guillemotright/onequarter/onehalf/threequarters/questiondown +/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla +/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex +/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis +/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute +/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis +/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave +/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex +/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis +/yacute/thorn/ydieresis +] def +/MFshow { + { dup 5 get 3 ge + { 5 get 3 eq {gsave} {grestore} ifelse } + {dup dup 0 get findfont exch 1 get scalefont setfont + [ currentpoint ] exch dup 2 get 0 exch R dup 5 get 2 ne {dup dup 6 + get exch 4 get {Gshow} {stringwidth pop 0 R} ifelse }if dup 5 get 0 eq + {dup 3 get {2 get neg 0 exch R pop} {pop aload pop M} ifelse} {dup 5 + get 1 eq {dup 2 get exch dup 3 get exch 6 get stringwidth pop -2 div + dup 0 R} {dup 6 get stringwidth pop -2 div 0 R 6 get + show 2 index {aload pop M neg 3 -1 roll neg R pop pop} {pop pop pop + pop aload pop M} ifelse }ifelse }ifelse } + ifelse } + forall} def +/Gswidth {dup type /stringtype eq {stringwidth} {pop (n) stringwidth} ifelse} def +/MFwidth {0 exch { dup 5 get 3 ge { 5 get 3 eq { 0 } { pop } ifelse } + {dup 3 get{dup dup 0 get findfont exch 1 get scalefont setfont + 6 get Gswidth pop add} {pop} ifelse} ifelse} forall} def +/MLshow { currentpoint stroke M + 0 exch R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MRshow { currentpoint stroke M + exch dup MFwidth neg 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MCshow { currentpoint stroke M + exch dup MFwidth -2 div 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/XYsave { [( ) 1 2 true false 3 ()] } bind def +/XYrestore { [( ) 1 2 true false 4 ()] } bind def +/Helvetica reencodeISO def +Level1 SuppressPDFMark or +{} { +/SDict 10 dict def +systemdict /pdfmark known not { + userdict /pdfmark systemdict /cleartomark get put +} if +SDict begin [ + /Title () + /Subject (gnuplot plot) + /Creator (gnuplot 4.6 patchlevel 6) + /Author (afanfakh) +% /Producer (gnuplot) +% /Keywords () + /CreationDate (Thu Oct 22 17:36:36 2015) + /DOCINFO pdfmark +end +} ifelse +end +%%EndProlog +%%Page: 1 1 +gnudict begin +gsave +doclip +50 50 translate +0.100 0.100 scale +0 setgray +newpath +(Helvetica) findfont 110 scalefont setfont +BackgroundColor 0 lt 3 1 roll 0 lt exch 0 lt or or not {gsave BackgroundColor C clippath fill grestore} if +1.000 UL +LTb +473 352 M +63 0 V +4305 0 R +-63 0 V +stroke +407 352 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 0)] +] -50.0 MRshow +1.000 UL +LTb +473 449 M +31 0 V +4337 0 R +-31 0 V +473 547 M +31 0 V +4337 0 R +-31 0 V +473 644 M +31 0 V +4337 0 R +-31 0 V +473 742 M +31 0 V +4337 0 R +-31 0 V +473 839 M +63 0 V +4305 0 R +-63 0 V +stroke +407 839 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 5)] +] -50.0 MRshow +1.000 UL +LTb +473 936 M +31 0 V +4337 0 R +-31 0 V +473 1034 M +31 0 V +4337 0 R +-31 0 V +473 1131 M +31 0 V +4337 0 R +-31 0 V +473 1228 M +31 0 V +4337 0 R +-31 0 V +473 1326 M +63 0 V +4305 0 R +-63 0 V +stroke +407 1326 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 10)] +] -50.0 MRshow +1.000 UL +LTb +473 1423 M +31 0 V +4337 0 R +-31 0 V +473 1521 M +31 0 V +4337 0 R +-31 0 V +473 1618 M +31 0 V +4337 0 R +-31 0 V +473 1715 M +31 0 V +4337 0 R +-31 0 V +473 1813 M +63 0 V +4305 0 R +-63 0 V +stroke +407 1813 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 15)] +] -50.0 MRshow +1.000 UL +LTb +473 1910 M +31 0 V +4337 0 R +-31 0 V +473 2007 M +31 0 V +4337 0 R +-31 0 V +473 2105 M +31 0 V +4337 0 R +-31 0 V +473 2202 M +31 0 V +4337 0 R +-31 0 V +473 2300 M +63 0 V +4305 0 R +-63 0 V +stroke +407 2300 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 20)] +] -50.0 MRshow +1.000 UL +LTb +473 2397 M +31 0 V +4337 0 R +-31 0 V +473 2494 M +31 0 V +4337 0 R +-31 0 V +473 2592 M +31 0 V +4337 0 R +-31 0 V +473 2689 M +31 0 V +4337 0 R +-31 0 V +473 2786 M +63 0 V +4305 0 R +-63 0 V +stroke +407 2786 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 25)] +] -50.0 MRshow +1.000 UL +LTb +473 2884 M +31 0 V +4337 0 R +-31 0 V +473 2981 M +31 0 V +4337 0 R +-31 0 V +473 3079 M +31 0 V +4337 0 R +-31 0 V +473 3176 M +31 0 V +4337 0 R +-31 0 V +473 3273 M +63 0 V +4305 0 R +-63 0 V +stroke +407 3273 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 30)] +] -50.0 MRshow +1.000 UL +LTb +473 3371 M +31 0 V +4337 0 R +-31 0 V +473 3468 M +31 0 V +4337 0 R +-31 0 V +1019 352 M +0 63 V +0 3053 R +0 -63 V +stroke +1019 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (CG)] +] -50.0 MCshow +1.000 UL +LTb +1565 352 M +0 63 V +0 3053 R +0 -63 V +stroke +1565 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (MG)] +] -50.0 MCshow +1.000 UL +LTb +2111 352 M +0 63 V +0 3053 R +0 -63 V +stroke +2111 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (EP)] +] -50.0 MCshow +1.000 UL +LTb +2657 352 M +0 63 V +0 3053 R +0 -63 V +stroke +2657 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (LU)] +] -50.0 MCshow +1.000 UL +LTb +3203 352 M +0 63 V +0 3053 R +0 -63 V +stroke +3203 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (BT)] +] -50.0 MCshow +1.000 UL +LTb +3749 352 M +0 63 V +0 3053 R +0 -63 V +stroke +3749 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (SP)] +] -50.0 MCshow +1.000 UL +LTb +4295 352 M +0 63 V +0 3053 R +0 -63 V +stroke +4295 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (FT)] +] -50.0 MCshow +1.000 UL +LTb +1.000 UL +LTb +473 3468 N +473 352 L +4368 0 V +0 3116 V +-4368 0 V +Z stroke +LCb setrgbcolor +88 1910 M +currentpoint gsave translate -270 rotate 0 0 moveto +[ [(Helvetica) 180.0 0.0 true true 0 (Performance degradation)] +] -60.0 MCshow +grestore +LTb +LCb setrgbcolor +2657 77 M +[ [(Helvetica) 180.0 0.0 true true 0 (NAS parallel benchmarks)] +] -60.0 MCshow +LTb +1.000 UP +1.000 UL +LTb +% Begin plot #1 +1.000 UL +LT0 +0.10 0.10 0.44 C LCb setrgbcolor +2362 3305 M +[ [(Helvetica) 140.0 0.0 true true 0 (One core per node scenario)] +] -46.7 MRshow +LT0 +0.10 0.10 0.44 C 1.000 2428 3272 327 66 BoxColFill +0.10 0.10 0.44 C 1.000 964 352 111 1359 BoxColFill +0.10 0.10 0.44 C 1.000 1510 352 111 734 BoxColFill +0.10 0.10 0.44 C 1.000 2056 352 111 1794 BoxColFill +0.10 0.10 0.44 C 1.000 2602 352 111 1219 BoxColFill +0.10 0.10 0.44 C 1.000 3148 352 111 1498 BoxColFill +0.10 0.10 0.44 C 1.000 3694 352 111 30 BoxColFill +0.10 0.10 0.44 C 1.000 4240 352 111 640 BoxColFill +% End plot #1 +% Begin plot #2 +1.000 UL +LT1 +0.94 0.50 0.50 C LCb setrgbcolor +2362 3173 M +[ [(Helvetica) 140.0 0.0 true true 0 (Multicores per node scenario)] +] -46.7 MRshow +LT1 +0.94 0.50 0.50 C 1.000 2428 3140 327 66 BoxColFill +0.94 0.50 0.50 C 1.000 1101 352 110 434 BoxColFill +0.94 0.50 0.50 C 1.000 1647 352 110 771 BoxColFill +0.94 0.50 0.50 C 1.000 2193 352 110 2586 BoxColFill +0.94 0.50 0.50 C 1.000 2739 352 110 636 BoxColFill +0.94 0.50 0.50 C 1.000 3285 352 110 258 BoxColFill +0.94 0.50 0.50 C 1.000 3831 352 110 20 BoxColFill +0.94 0.50 0.50 C 1.000 4377 352 110 406 BoxColFill +% End plot #2 +1.000 UL +LTb +473 3468 N +473 352 L +4368 0 V +0 3116 V +-4368 0 V +Z stroke +1.000 UP +1.000 UL +LTb +stroke +grestore +end +showpage +%%Trailer +%%DocumentFonts: Helvetica +%%Pages: 1 diff --git a/fig/ch3/per_deg-eps-converted-to.pdf b/fig/ch3/per_deg-eps-converted-to.pdf new file mode 100644 index 0000000000000000000000000000000000000000..821f861df737eb39cd535e8739a850c0ac32188e GIT binary patch literal 9333 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 literal 0 HcmV?d00001 diff --git a/fig/ch3/per_deg.eps b/fig/ch3/per_deg.eps new file mode 100644 index 0000000..e1ef706 --- /dev/null +++ b/fig/ch3/per_deg.eps @@ -0,0 +1,820 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: per_deg.eps +%%Creator: gnuplot 4.6 patchlevel 0 +%%CreationDate: Thu Feb 19 16:42:46 2015 +%%DocumentFonts: (atend) +%%BoundingBox: 50 50 320 239 +%%EndComments +%%BeginProlog +/gnudict 256 dict def +gnudict begin +% +% The following true/false flags may be edited by hand if desired. +% The unit line width and grayscale image gamma correction may also be changed. +% +/Color false def +/Blacktext false def +/Solid false def +/Dashlength 1 def +/Landscape false def +/Level1 false def +/Rounded false def +/ClipToBoundingBox false def +/SuppressPDFMark false def +/TransparentPatterns false def +/gnulinewidth 5.000 def +/userlinewidth gnulinewidth def +/Gamma 1.0 def +/BackgroundColor {-1.000 -1.000 -1.000} def +% +/vshift -46 def +/dl1 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if +} def +/dl2 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul add } if +} def +/hpt_ 31.5 def +/vpt_ 31.5 def +/hpt hpt_ def +/vpt vpt_ def +/doclip { + ClipToBoundingBox { + newpath 50 50 moveto 320 50 lineto 320 239 lineto 50 239 lineto closepath + clip + } if +} def +% +% Gnuplot Prolog Version 4.4 (August 2010) +% +%/SuppressPDFMark true def +% +/M {moveto} bind def +/L {lineto} bind def +/R {rmoveto} bind def +/V {rlineto} bind def +/N {newpath moveto} bind def +/Z {closepath} bind def +/C {setrgbcolor} bind def +/f {rlineto fill} bind def +/g {setgray} bind def +/Gshow {show} def % May be redefined later in the file to support UTF-8 +/vpt2 vpt 2 mul def +/hpt2 hpt 2 mul def +/Lshow {currentpoint stroke M 0 vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Rshow {currentpoint stroke M dup stringwidth pop neg vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def + /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def +/DL {Color {setrgbcolor Solid {pop []} if 0 setdash} + {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse} def +/BL {stroke userlinewidth 2 mul setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/AL {stroke userlinewidth 2 div setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/UL {dup gnulinewidth mul /userlinewidth exch def + dup 1 lt {pop 1} if 10 mul /udl exch def} def +/PL {stroke userlinewidth setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +3.8 setmiterlimit +% Default Line colors +/LCw {1 1 1} def +/LCb {0 0 0} def +/LCa {0 0 0} def +/LC0 {1 0 0} def +/LC1 {0 1 0} def +/LC2 {0 0 1} def +/LC3 {1 0 1} def +/LC4 {0 1 1} def +/LC5 {1 1 0} def +/LC6 {0 0 0} def +/LC7 {1 0.3 0} def +/LC8 {0.5 0.5 0.5} def +% Default Line Types +/LTw {PL [] 1 setgray} def +/LTb {BL [] LCb DL} def +/LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def +/LT0 {PL [] LC0 DL} def +/LT1 {PL [4 dl1 2 dl2] LC1 DL} def +/LT2 {PL [2 dl1 3 dl2] LC2 DL} def +/LT3 {PL [1 dl1 1.5 dl2] LC3 DL} def +/LT4 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def +/LT5 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC5 DL} def +/LT6 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC6 DL} def +/LT7 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC7 DL} def +/LT8 {PL [2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 4 dl2] LC8 DL} def +/Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def +/Dia {stroke [] 0 setdash 2 copy vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke + Pnt} def +/Pls {stroke [] 0 setdash vpt sub M 0 vpt2 V + currentpoint stroke M + hpt neg vpt neg R hpt2 0 V stroke + } def +/Box {stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke + Pnt} def +/Crs {stroke [] 0 setdash exch hpt sub exch vpt add M + hpt2 vpt2 neg V currentpoint stroke M + hpt2 neg 0 R hpt2 vpt2 V stroke} def +/TriU {stroke [] 0 setdash 2 copy vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke + Pnt} def +/Star {2 copy Pls Crs} def +/BoxF {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath fill} def +/TriUF {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath fill} def +/TriD {stroke [] 0 setdash 2 copy vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke + Pnt} def +/TriDF {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath fill} def +/DiaF {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath fill} def +/Pent {stroke [] 0 setdash 2 copy gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore Pnt} def +/PentF {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath fill grestore} def +/Circle {stroke [] 0 setdash 2 copy + hpt 0 360 arc stroke Pnt} def +/CircleF {stroke [] 0 setdash hpt 0 360 arc fill} def +/C0 {BL [] 0 setdash 2 copy moveto vpt 90 450 arc} bind def +/C1 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + vpt 0 360 arc closepath} bind def +/C2 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C3 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C4 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C5 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc + 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc} bind def +/C6 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C7 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C8 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C9 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 450 arc closepath fill + vpt 0 360 arc closepath} bind def +/C10 {BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill + 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C11 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C12 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C13 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C14 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 360 arc closepath fill + vpt 0 360 arc} bind def +/C15 {BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/Rec {newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto + neg 0 rlineto closepath} bind def +/Square {dup Rec} bind def +/Bsquare {vpt sub exch vpt sub exch vpt2 Square} bind def +/S0 {BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare} bind def +/S1 {BL [] 0 setdash 2 copy vpt Square fill Bsquare} bind def +/S2 {BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S3 {BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare} bind def +/S4 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S5 {BL [] 0 setdash 2 copy 2 copy vpt Square fill + exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S6 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S7 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S8 {BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare} bind def +/S9 {BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S10 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill + Bsquare} bind def +/S11 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill + Bsquare} bind def +/S12 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare} bind def +/S13 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S14 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S15 {BL [] 0 setdash 2 copy Bsquare fill Bsquare} bind def +/D0 {gsave translate 45 rotate 0 0 S0 stroke grestore} bind def +/D1 {gsave translate 45 rotate 0 0 S1 stroke grestore} bind def +/D2 {gsave translate 45 rotate 0 0 S2 stroke grestore} bind def +/D3 {gsave translate 45 rotate 0 0 S3 stroke grestore} bind def +/D4 {gsave translate 45 rotate 0 0 S4 stroke grestore} bind def +/D5 {gsave translate 45 rotate 0 0 S5 stroke grestore} bind def +/D6 {gsave translate 45 rotate 0 0 S6 stroke grestore} bind def +/D7 {gsave translate 45 rotate 0 0 S7 stroke grestore} bind def +/D8 {gsave translate 45 rotate 0 0 S8 stroke grestore} bind def +/D9 {gsave translate 45 rotate 0 0 S9 stroke grestore} bind def +/D10 {gsave translate 45 rotate 0 0 S10 stroke grestore} bind def +/D11 {gsave translate 45 rotate 0 0 S11 stroke grestore} bind def +/D12 {gsave translate 45 rotate 0 0 S12 stroke grestore} bind def +/D13 {gsave translate 45 rotate 0 0 S13 stroke grestore} bind def +/D14 {gsave translate 45 rotate 0 0 S14 stroke grestore} bind def +/D15 {gsave translate 45 rotate 0 0 S15 stroke grestore} bind def +/DiaE {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke} def +/BoxE {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke} def +/TriUE {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke} def +/TriDE {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke} def +/PentE {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore} def +/CircE {stroke [] 0 setdash + hpt 0 360 arc stroke} def +/Opaque {gsave closepath 1 setgray fill grestore 0 setgray closepath} def +/DiaW {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V Opaque stroke} def +/BoxW {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V Opaque stroke} def +/TriUW {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V Opaque stroke} def +/TriDW {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V Opaque stroke} def +/PentW {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + Opaque stroke grestore} def +/CircW {stroke [] 0 setdash + hpt 0 360 arc Opaque stroke} def +/BoxFill {gsave Rec 1 setgray fill grestore} def +/Density { + /Fillden exch def + currentrgbcolor + /ColB exch def /ColG exch def /ColR exch def + /ColR ColR Fillden mul Fillden sub 1 add def + /ColG ColG Fillden mul Fillden sub 1 add def + /ColB ColB Fillden mul Fillden sub 1 add def + ColR ColG ColB setrgbcolor} def +/BoxColFill {gsave Rec PolyFill} def +/PolyFill {gsave Density fill grestore grestore} def +/h {rlineto rlineto rlineto gsave closepath fill grestore} bind def +% +% PostScript Level 1 Pattern Fill routine for rectangles +% Usage: x y w h s a XX PatternFill +% x,y = lower left corner of box to be filled +% w,h = width and height of box +% a = angle in degrees between lines and x-axis +% XX = 0/1 for no/yes cross-hatch +% +/PatternFill {gsave /PFa [ 9 2 roll ] def + PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate + PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec + gsave 1 setgray fill grestore clip + currentlinewidth 0.5 mul setlinewidth + /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def + 0 0 M PFa 5 get rotate PFs -2 div dup translate + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 M 0 PFs V} for + 0 PFa 6 get ne { + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 2 1 roll M PFs 0 V} for + } if + stroke grestore} def +% +/languagelevel where + {pop languagelevel} {1} ifelse + 2 lt + {/InterpretLevel1 true def} + {/InterpretLevel1 Level1 def} + ifelse +% +% PostScript level 2 pattern fill definitions +% +/Level2PatternFill { +/Tile8x8 {/PaintType 2 /PatternType 1 /TilingType 1 /BBox [0 0 8 8] /XStep 8 /YStep 8} + bind def +/KeepColor {currentrgbcolor [/Pattern /DeviceRGB] setcolorspace} bind def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke} +>> matrix makepattern +/Pat1 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke + 0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke} +>> matrix makepattern +/Pat2 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L + 8 8 L 8 0 L 0 0 L fill} +>> matrix makepattern +/Pat3 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L + 0 12 M 12 0 L stroke} +>> matrix makepattern +/Pat4 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L + 0 -4 M 12 8 L stroke} +>> matrix makepattern +/Pat5 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L + 0 12 M 8 -4 L 4 12 M 10 0 L stroke} +>> matrix makepattern +/Pat6 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L + 0 -4 M 8 12 L 4 -4 M 10 8 L stroke} +>> matrix makepattern +/Pat7 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L + 12 0 M -4 8 L 12 4 M 0 10 L stroke} +>> matrix makepattern +/Pat8 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L + -4 0 M 12 8 L -4 4 M 8 10 L stroke} +>> matrix makepattern +/Pat9 exch def +/Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def +/Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def +/Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def +/Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def +/Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def +/Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def +/Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def +} def +% +% +%End of PostScript Level 2 code +% +/PatternBgnd { + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse +} def +% +% Substitute for Level 2 pattern fill codes with +% grayscale if Level 2 support is not selected. +% +/Level1PatternFill { +/Pattern1 {0.250 Density} bind def +/Pattern2 {0.500 Density} bind def +/Pattern3 {0.750 Density} bind def +/Pattern4 {0.125 Density} bind def +/Pattern5 {0.375 Density} bind def +/Pattern6 {0.625 Density} bind def +/Pattern7 {0.875 Density} bind def +} def +% +% Now test for support of Level 2 code +% +Level1 {Level1PatternFill} {Level2PatternFill} ifelse +% +/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont +dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall +currentdict end definefont pop +Level1 SuppressPDFMark or +{} { +/SDict 10 dict def +systemdict /pdfmark known not { + userdict /pdfmark systemdict /cleartomark get put +} if +SDict begin [ + /Title (per_deg.eps) + /Subject (gnuplot plot) + /Creator (gnuplot 4.6 patchlevel 0) + /Author (afanfakh) +% /Producer (gnuplot) +% /Keywords () + /CreationDate (Thu Feb 19 16:42:46 2015) + /DOCINFO pdfmark +end +} ifelse +end +%%EndProlog +%%Page: 1 1 +gnudict begin +gsave +doclip +50 50 translate +0.050 0.050 scale +0 setgray +newpath +(Helvetica) findfont 140 scalefont setfont +BackgroundColor 0 lt 3 1 roll 0 lt exch 0 lt or or not {BackgroundColor C 1.000 0 0 5400.00 3780.00 BoxColFill} if +1.000 UL +LTb +602 674 M +63 0 V +4482 0 R +-63 0 V +/Helvetica findfont 190 scalefont setfont +518 674 M +( 0) Rshow +/Helvetica findfont 140 scalefont setfont +1.000 UL +LTb +602 1538 M +63 0 V +4482 0 R +-63 0 V +/Helvetica findfont 190 scalefont setfont +-4566 0 R +( 5) Rshow +/Helvetica findfont 140 scalefont setfont +1.000 UL +LTb +602 2402 M +63 0 V +4482 0 R +-63 0 V +/Helvetica findfont 190 scalefont setfont +-4566 0 R +( 10) Rshow +/Helvetica findfont 140 scalefont setfont +1.000 UL +LTb +602 3266 M +63 0 V +4482 0 R +-63 0 V +/Helvetica findfont 190 scalefont setfont +-4566 0 R +( 15) Rshow +/Helvetica findfont 140 scalefont setfont +1.000 UL +LTb +604 588 M +0 63 V +0 2960 R +0 -63 V +/Helvetica findfont 190 scalefont setfont +604 448 M +( 0) Cshow +/Helvetica findfont 140 scalefont setfont +1.000 UL +LTb +1088 588 M +0 63 V +0 2960 R +0 -63 V +/Helvetica findfont 190 scalefont setfont +0 -3100 R +( 16) Cshow +/Helvetica findfont 140 scalefont setfont +1.000 UL +LTb +1572 588 M +0 63 V +0 2960 R +0 -63 V +/Helvetica findfont 190 scalefont setfont +0 -3100 R +( 32) Cshow +/Helvetica findfont 140 scalefont setfont +1.000 UL +LTb +2057 588 M +0 63 V +0 2960 R +0 -63 V +/Helvetica findfont 190 scalefont setfont +0 -3100 R +( 48) Cshow +/Helvetica findfont 140 scalefont setfont +1.000 UL +LTb +2541 588 M +0 63 V +0 2960 R +0 -63 V +/Helvetica findfont 190 scalefont setfont +0 -3100 R +( 64) Cshow +/Helvetica findfont 140 scalefont setfont +1.000 UL +LTb +3026 588 M +0 63 V +0 2960 R +0 -63 V +/Helvetica findfont 190 scalefont setfont +0 -3100 R +( 80) Cshow +/Helvetica findfont 140 scalefont setfont +1.000 UL +LTb +3510 588 M +0 63 V +0 2960 R +0 -63 V +/Helvetica findfont 190 scalefont setfont +0 -3100 R +( 96) Cshow +/Helvetica findfont 140 scalefont setfont +1.000 UL +LTb +3995 588 M +0 63 V +0 2960 R +0 -63 V +/Helvetica findfont 190 scalefont setfont +0 -3100 R +( 112) Cshow +/Helvetica findfont 140 scalefont setfont +1.000 UL +LTb +4479 588 M +0 63 V +0 2960 R +0 -63 V +/Helvetica findfont 190 scalefont setfont +0 -3100 R +( 128) Cshow +/Helvetica findfont 140 scalefont setfont +1.000 UL +LTb +4964 588 M +0 63 V +0 2960 R +0 -63 V +/Helvetica findfont 190 scalefont setfont +0 -3100 R +( 144) Cshow +/Helvetica findfont 140 scalefont setfont +1.000 UL +LTb +1.000 UL +LTb +602 3611 N +602 588 L +4545 0 V +0 3023 V +-4545 0 V +Z stroke +LCb setrgbcolor +/Helvetica findfont 210 scalefont setfont +112 2099 M +currentpoint gsave translate -270 rotate 0 0 M +(Performance degradation) Cshow +grestore +/Helvetica findfont 140 scalefont setfont +LTb +LCb setrgbcolor +/Helvetica findfont 210 scalefont setfont +2974 98 M +( Number of nodes) Cshow +/Helvetica findfont 140 scalefont setfont +LTb +1.000 UP +/Helvetica findfont 190 scalefont setfont +649 752 M +( ) Lshow +/Helvetica findfont 140 scalefont setfont +1.000 UL +LTb +% Begin plot #1 +1.500 UP +2.000 UL +LT0 +0.00 0.00 1.00 C LCb setrgbcolor +/Helvetica findfont 190 scalefont setfont +1259 3443 M +(CG) Rshow +/Helvetica findfont 140 scalefont setfont +LT0 +0.00 0.00 1.00 C 709 3443 M +298 0 V +725 1835 M +121 70 V +242 423 V +484 -737 V +2541 965 L +4479 865 L +725 1835 Box +846 1905 Box +1088 2328 Box +1572 1591 Box +2541 965 Box +4479 865 Box +858 3443 Box +% End plot #1 +% Begin plot #2 +1.500 UP +2.000 UL +LT0 +1.00 0.00 0.00 C LCb setrgbcolor +/Helvetica findfont 190 scalefont setfont +1893 3443 M +(MG) Rshow +/Helvetica findfont 140 scalefont setfont +LT0 +1.00 0.00 0.00 C 1343 3443 M +298 0 V +725 1424 M +121 359 V +242 -63 V +484 483 V +969 951 V +4479 2469 L +725 1424 TriD +846 1783 TriD +1088 1720 TriD +1572 2203 TriD +2541 3154 TriD +4479 2469 TriD +1492 3443 TriD +% End plot #2 +% Begin plot #3 +1.500 UP +2.000 UL +LT0 +0.50 0.00 0.50 C LCb setrgbcolor +/Helvetica findfont 190 scalefont setfont +2527 3443 M +(EP) Rshow +/Helvetica findfont 140 scalefont setfont +LT0 +0.50 0.00 0.50 C 1977 3443 M +298 0 V +725 1199 M +846 760 L +242 12 V +484 -94 V +969 534 V +4479 680 L +725 1199 Star +846 760 Star +1088 772 Star +1572 678 Star +2541 1212 Star +4479 680 Star +2126 3443 Star +% End plot #3 +% Begin plot #4 +1.500 UP +2.000 UL +LT0 +0.18 0.31 0.31 C LCb setrgbcolor +/Helvetica findfont 190 scalefont setfont +3161 3443 M +(LU) Rshow +/Helvetica findfont 140 scalefont setfont +LT0 +0.18 0.31 0.31 C 2611 3443 M +298 0 V +725 1739 M +846 676 L +242 1132 V +484 -709 V +969 211 V +4479 1082 L +725 1739 TriUF +846 676 TriUF +1088 1808 TriUF +1572 1099 TriUF +2541 1310 TriUF +4479 1082 TriUF +2760 3443 TriUF +% End plot #4 +% Begin plot #5 +1.500 UP +2.000 UL +LT0 +0.18 0.55 0.34 C LCb setrgbcolor +/Helvetica findfont 190 scalefont setfont +3795 3443 M +(BT) Rshow +/Helvetica findfont 140 scalefont setfont +LT0 +0.18 0.55 0.34 C 3245 3443 M +298 0 V +725 2140 M +876 2038 L +212 -362 V +606 6 V +847 1114 V +4964 896 L +725 2140 BoxF +876 2038 BoxF +1088 1676 BoxF +1694 1682 BoxF +2541 2796 BoxF +4964 896 BoxF +3394 3443 BoxF +% End plot #5 +% Begin plot #6 +1.500 UP +2.000 UL +LT0 +0.85 0.65 0.13 C LCb setrgbcolor +/Helvetica findfont 190 scalefont setfont +4429 3443 M +(SP) Rshow +/Helvetica findfont 140 scalefont setfont +LT0 +0.85 0.65 0.13 C 3879 3443 M +298 0 V +725 1658 M +876 1155 L +212 180 V +606 -64 V +2541 680 L +2423 3 V +725 1658 Circle +876 1155 Circle +1088 1335 Circle +1694 1271 Circle +2541 680 Circle +4964 683 Circle +4028 3443 Circle +% End plot #6 +% Begin plot #7 +1.500 UP +2.000 UL +LT0 +0.55 0.00 0.00 C LCb setrgbcolor +/Helvetica findfont 190 scalefont setfont +5063 3443 M +(FT) Rshow +/Helvetica findfont 140 scalefont setfont +LT0 +0.55 0.00 0.00 C 4513 3443 M +298 0 V +725 847 M +121 267 V +242 680 V +484 -617 V +969 339 V +4479 1166 L +725 847 CircleF +846 1114 CircleF +1088 1794 CircleF +1572 1177 CircleF +2541 1516 CircleF +4479 1166 CircleF +4662 3443 CircleF +% End plot #7 +1.000 UL +LTb +602 3611 N +602 588 L +4545 0 V +0 3023 V +-4545 0 V +Z stroke +1.000 UP +1.000 UL +LTb +stroke +grestore +end +showpage +%%Trailer +%%DocumentFonts: Helvetica diff --git a/fig/ch3/per_pow-eps-converted-to.pdf b/fig/ch3/per_pow-eps-converted-to.pdf new file mode 100644 index 0000000000000000000000000000000000000000..472848b59aa09735a3bf00225391954637c80ca3 GIT binary patch literal 7911 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 literal 0 HcmV?d00001 diff --git a/fig/ch3/per_pow.eps b/fig/ch3/per_pow.eps new file mode 100644 index 0000000..6f42b28 --- /dev/null +++ b/fig/ch3/per_pow.eps @@ -0,0 +1,828 @@ +%!PS-Adobe-2.0 +%%Creator: gnuplot 4.6 patchlevel 6 +%%CreationDate: Thu Oct 22 12:44:35 2015 +%%DocumentFonts: (atend) +%%BoundingBox: 50 50 554 410 +%%Orientation: Portrait +%%Pages: (atend) +%%EndComments +%%BeginProlog +/gnudict 256 dict def +gnudict begin +% +% The following true/false flags may be edited by hand if desired. +% The unit line width and grayscale image gamma correction may also be changed. +% +/Color false def +/Blacktext false def +/Solid false def +/Dashlength 1 def +/Landscape false def +/Level1 false def +/Rounded false def +/ClipToBoundingBox false def +/SuppressPDFMark false def +/TransparentPatterns false def +/gnulinewidth 5.000 def +/userlinewidth gnulinewidth def +/Gamma 1.0 def +/BackgroundColor {-1.000 -1.000 -1.000} def +% +/vshift -36 def +/dl1 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if +} def +/dl2 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul add } if +} def +/hpt_ 31.5 def +/vpt_ 31.5 def +/hpt hpt_ def +/vpt vpt_ def +/doclip { + ClipToBoundingBox { + newpath 50 50 moveto 554 50 lineto 554 410 lineto 50 410 lineto closepath + clip + } if +} def +% +% Gnuplot Prolog Version 4.6 (September 2012) +% +%/SuppressPDFMark true def +% +/M {moveto} bind def +/L {lineto} bind def +/R {rmoveto} bind def +/V {rlineto} bind def +/N {newpath moveto} bind def +/Z {closepath} bind def +/C {setrgbcolor} bind def +/f {rlineto fill} bind def +/g {setgray} bind def +/Gshow {show} def % May be redefined later in the file to support UTF-8 +/vpt2 vpt 2 mul def +/hpt2 hpt 2 mul def +/Lshow {currentpoint stroke M 0 vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Rshow {currentpoint stroke M dup stringwidth pop neg vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def + /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def +/DL {Color {setrgbcolor Solid {pop []} if 0 setdash} + {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse} def +/BL {stroke userlinewidth 2 mul setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/AL {stroke userlinewidth 2 div setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/UL {dup gnulinewidth mul /userlinewidth exch def + dup 1 lt {pop 1} if 10 mul /udl exch def} def +/PL {stroke userlinewidth setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +3.8 setmiterlimit +% Default Line colors +/LCw {1 1 1} def +/LCb {0 0 0} def +/LCa {0 0 0} def +/LC0 {1 0 0} def +/LC1 {0 1 0} def +/LC2 {0 0 1} def +/LC3 {1 0 1} def +/LC4 {0 1 1} def +/LC5 {1 1 0} def +/LC6 {0 0 0} def +/LC7 {1 0.3 0} def +/LC8 {0.5 0.5 0.5} def +% Default Line Types +/LTw {PL [] 1 setgray} def +/LTb {BL [] LCb DL} def +/LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def +/LT0 {PL [] LC0 DL} def +/LT1 {PL [4 dl1 2 dl2] LC1 DL} def +/LT2 {PL [2 dl1 3 dl2] LC2 DL} def +/LT3 {PL [1 dl1 1.5 dl2] LC3 DL} def +/LT4 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def +/LT5 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC5 DL} def +/LT6 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC6 DL} def +/LT7 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC7 DL} def +/LT8 {PL [2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 4 dl2] LC8 DL} def +/Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def +/Dia {stroke [] 0 setdash 2 copy vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke + Pnt} def +/Pls {stroke [] 0 setdash vpt sub M 0 vpt2 V + currentpoint stroke M + hpt neg vpt neg R hpt2 0 V stroke + } def +/Box {stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke + Pnt} def +/Crs {stroke [] 0 setdash exch hpt sub exch vpt add M + hpt2 vpt2 neg V currentpoint stroke M + hpt2 neg 0 R hpt2 vpt2 V stroke} def +/TriU {stroke [] 0 setdash 2 copy vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke + Pnt} def +/Star {2 copy Pls Crs} def +/BoxF {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath fill} def +/TriUF {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath fill} def +/TriD {stroke [] 0 setdash 2 copy vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke + Pnt} def +/TriDF {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath fill} def +/DiaF {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath fill} def +/Pent {stroke [] 0 setdash 2 copy gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore Pnt} def +/PentF {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath fill grestore} def +/Circle {stroke [] 0 setdash 2 copy + hpt 0 360 arc stroke Pnt} def +/CircleF {stroke [] 0 setdash hpt 0 360 arc fill} def +/C0 {BL [] 0 setdash 2 copy moveto vpt 90 450 arc} bind def +/C1 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + vpt 0 360 arc closepath} bind def +/C2 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C3 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C4 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C5 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc + 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc} bind def +/C6 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C7 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C8 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C9 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 450 arc closepath fill + vpt 0 360 arc closepath} bind def +/C10 {BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill + 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C11 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C12 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C13 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C14 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 360 arc closepath fill + vpt 0 360 arc} bind def +/C15 {BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/Rec {newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto + neg 0 rlineto closepath} bind def +/Square {dup Rec} bind def +/Bsquare {vpt sub exch vpt sub exch vpt2 Square} bind def +/S0 {BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare} bind def +/S1 {BL [] 0 setdash 2 copy vpt Square fill Bsquare} bind def +/S2 {BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S3 {BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare} bind def +/S4 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S5 {BL [] 0 setdash 2 copy 2 copy vpt Square fill + exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S6 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S7 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S8 {BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare} bind def +/S9 {BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S10 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill + Bsquare} bind def +/S11 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill + Bsquare} bind def +/S12 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare} bind def +/S13 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S14 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S15 {BL [] 0 setdash 2 copy Bsquare fill Bsquare} bind def +/D0 {gsave translate 45 rotate 0 0 S0 stroke grestore} bind def +/D1 {gsave translate 45 rotate 0 0 S1 stroke grestore} bind def +/D2 {gsave translate 45 rotate 0 0 S2 stroke grestore} bind def +/D3 {gsave translate 45 rotate 0 0 S3 stroke grestore} bind def +/D4 {gsave translate 45 rotate 0 0 S4 stroke grestore} bind def +/D5 {gsave translate 45 rotate 0 0 S5 stroke grestore} bind def +/D6 {gsave translate 45 rotate 0 0 S6 stroke grestore} bind def +/D7 {gsave translate 45 rotate 0 0 S7 stroke grestore} bind def +/D8 {gsave translate 45 rotate 0 0 S8 stroke grestore} bind def +/D9 {gsave translate 45 rotate 0 0 S9 stroke grestore} bind def +/D10 {gsave translate 45 rotate 0 0 S10 stroke grestore} bind def +/D11 {gsave translate 45 rotate 0 0 S11 stroke grestore} bind def +/D12 {gsave translate 45 rotate 0 0 S12 stroke grestore} bind def +/D13 {gsave translate 45 rotate 0 0 S13 stroke grestore} bind def +/D14 {gsave translate 45 rotate 0 0 S14 stroke grestore} bind def +/D15 {gsave translate 45 rotate 0 0 S15 stroke grestore} bind def +/DiaE {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke} def +/BoxE {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke} def +/TriUE {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke} def +/TriDE {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke} def +/PentE {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore} def +/CircE {stroke [] 0 setdash + hpt 0 360 arc stroke} def +/Opaque {gsave closepath 1 setgray fill grestore 0 setgray closepath} def +/DiaW {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V Opaque stroke} def +/BoxW {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V Opaque stroke} def +/TriUW {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V Opaque stroke} def +/TriDW {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V Opaque stroke} def +/PentW {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + Opaque stroke grestore} def +/CircW {stroke [] 0 setdash + hpt 0 360 arc Opaque stroke} def +/BoxFill {gsave Rec 1 setgray fill grestore} def +/Density { + /Fillden exch def + currentrgbcolor + /ColB exch def /ColG exch def /ColR exch def + /ColR ColR Fillden mul Fillden sub 1 add def + /ColG ColG Fillden mul Fillden sub 1 add def + /ColB ColB Fillden mul Fillden sub 1 add def + ColR ColG ColB setrgbcolor} def +/BoxColFill {gsave Rec PolyFill} def +/PolyFill {gsave Density fill grestore grestore} def +/h {rlineto rlineto rlineto gsave closepath fill grestore} bind def +% +% PostScript Level 1 Pattern Fill routine for rectangles +% Usage: x y w h s a XX PatternFill +% x,y = lower left corner of box to be filled +% w,h = width and height of box +% a = angle in degrees between lines and x-axis +% XX = 0/1 for no/yes cross-hatch +% +/PatternFill {gsave /PFa [ 9 2 roll ] def + PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate + PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse + clip + currentlinewidth 0.5 mul setlinewidth + /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def + 0 0 M PFa 5 get rotate PFs -2 div dup translate + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 M 0 PFs V} for + 0 PFa 6 get ne { + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 2 1 roll M PFs 0 V} for + } if + stroke grestore} def +% +/languagelevel where + {pop languagelevel} {1} ifelse + 2 lt + {/InterpretLevel1 true def} + {/InterpretLevel1 Level1 def} + ifelse +% +% PostScript level 2 pattern fill definitions +% +/Level2PatternFill { +/Tile8x8 {/PaintType 2 /PatternType 1 /TilingType 1 /BBox [0 0 8 8] /XStep 8 /YStep 8} + bind def +/KeepColor {currentrgbcolor [/Pattern /DeviceRGB] setcolorspace} bind def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke} +>> matrix makepattern +/Pat1 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke + 0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke} +>> matrix makepattern +/Pat2 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L + 8 8 L 8 0 L 0 0 L fill} +>> matrix makepattern +/Pat3 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L + 0 12 M 12 0 L stroke} +>> matrix makepattern +/Pat4 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L + 0 -4 M 12 8 L stroke} +>> matrix makepattern +/Pat5 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L + 0 12 M 8 -4 L 4 12 M 10 0 L stroke} +>> matrix makepattern +/Pat6 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L + 0 -4 M 8 12 L 4 -4 M 10 8 L stroke} +>> matrix makepattern +/Pat7 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L + 12 0 M -4 8 L 12 4 M 0 10 L stroke} +>> matrix makepattern +/Pat8 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L + -4 0 M 12 8 L -4 4 M 8 10 L stroke} +>> matrix makepattern +/Pat9 exch def +/Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def +/Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def +/Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def +/Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def +/Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def +/Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def +/Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def +} def +% +% +%End of PostScript Level 2 code +% +/PatternBgnd { + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse +} def +% +% Substitute for Level 2 pattern fill codes with +% grayscale if Level 2 support is not selected. +% +/Level1PatternFill { +/Pattern1 {0.250 Density} bind def +/Pattern2 {0.500 Density} bind def +/Pattern3 {0.750 Density} bind def +/Pattern4 {0.125 Density} bind def +/Pattern5 {0.375 Density} bind def +/Pattern6 {0.625 Density} bind def +/Pattern7 {0.875 Density} bind def +} def +% +% Now test for support of Level 2 code +% +Level1 {Level1PatternFill} {Level2PatternFill} ifelse +% +/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont +dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall +currentdict end definefont pop +% +% Encoding for ISO-8859-1 (also called Latin1) +% +/reencodeISO { +dup dup findfont dup length dict begin +{ 1 index /FID ne { def }{ pop pop } ifelse } forall +currentdict /CharStrings known { + CharStrings /Idieresis known { + /Encoding ISOLatin1Encoding def } if +} if +currentdict end definefont +} def +/ISOLatin1Encoding [ +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright +/parenleft/parenright/asterisk/plus/comma/minus/period/slash +/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon +/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N +/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright +/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m +/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve +/dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut +/ogonek/caron/space/exclamdown/cent/sterling/currency/yen/brokenbar +/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot +/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior +/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine +/guillemotright/onequarter/onehalf/threequarters/questiondown +/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla +/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex +/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis +/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute +/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis +/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave +/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex +/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis +/yacute/thorn/ydieresis +] def +/MFshow { + { dup 5 get 3 ge + { 5 get 3 eq {gsave} {grestore} ifelse } + {dup dup 0 get findfont exch 1 get scalefont setfont + [ currentpoint ] exch dup 2 get 0 exch R dup 5 get 2 ne {dup dup 6 + get exch 4 get {Gshow} {stringwidth pop 0 R} ifelse }if dup 5 get 0 eq + {dup 3 get {2 get neg 0 exch R pop} {pop aload pop M} ifelse} {dup 5 + get 1 eq {dup 2 get exch dup 3 get exch 6 get stringwidth pop -2 div + dup 0 R} {dup 6 get stringwidth pop -2 div 0 R 6 get + show 2 index {aload pop M neg 3 -1 roll neg R pop pop} {pop pop pop + pop aload pop M} ifelse }ifelse }ifelse } + ifelse } + forall} def +/Gswidth {dup type /stringtype eq {stringwidth} {pop (n) stringwidth} ifelse} def +/MFwidth {0 exch { dup 5 get 3 ge { 5 get 3 eq { 0 } { pop } ifelse } + {dup 3 get{dup dup 0 get findfont exch 1 get scalefont setfont + 6 get Gswidth pop add} {pop} ifelse} ifelse} forall} def +/MLshow { currentpoint stroke M + 0 exch R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MRshow { currentpoint stroke M + exch dup MFwidth neg 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MCshow { currentpoint stroke M + exch dup MFwidth -2 div 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/XYsave { [( ) 1 2 true false 3 ()] } bind def +/XYrestore { [( ) 1 2 true false 4 ()] } bind def +/Helvetica reencodeISO def +Level1 SuppressPDFMark or +{} { +/SDict 10 dict def +systemdict /pdfmark known not { + userdict /pdfmark systemdict /cleartomark get put +} if +SDict begin [ + /Title () + /Subject (gnuplot plot) + /Creator (gnuplot 4.6 patchlevel 6) + /Author (afanfakh) +% /Producer (gnuplot) +% /Keywords () + /CreationDate (Thu Oct 22 12:44:35 2015) + /DOCINFO pdfmark +end +} ifelse +end +%%EndProlog +%%Page: 1 1 +gnudict begin +gsave +doclip +50 50 translate +0.100 0.100 scale +0 setgray +newpath +(Helvetica) findfont 110 scalefont setfont +BackgroundColor 0 lt 3 1 roll 0 lt exch 0 lt or or not {gsave BackgroundColor C clippath fill grestore} if +1.000 UL +LTb +473 352 M +63 0 V +4305 0 R +-63 0 V +stroke +407 352 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 0)] +] -50.0 MRshow +1.000 UL +LTb +473 477 M +31 0 V +4337 0 R +-31 0 V +473 601 M +31 0 V +4337 0 R +-31 0 V +473 726 M +31 0 V +4337 0 R +-31 0 V +473 851 M +31 0 V +4337 0 R +-31 0 V +473 975 M +63 0 V +4305 0 R +-63 0 V +stroke +407 975 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 3)] +] -50.0 MRshow +1.000 UL +LTb +473 1100 M +31 0 V +4337 0 R +-31 0 V +473 1224 M +31 0 V +4337 0 R +-31 0 V +473 1349 M +31 0 V +4337 0 R +-31 0 V +473 1474 M +31 0 V +4337 0 R +-31 0 V +473 1598 M +63 0 V +4305 0 R +-63 0 V +stroke +407 1598 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 6)] +] -50.0 MRshow +1.000 UL +LTb +473 1723 M +31 0 V +4337 0 R +-31 0 V +473 1848 M +31 0 V +4337 0 R +-31 0 V +473 1972 M +31 0 V +4337 0 R +-31 0 V +473 2097 M +31 0 V +4337 0 R +-31 0 V +473 2222 M +63 0 V +4305 0 R +-63 0 V +stroke +407 2222 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 9)] +] -50.0 MRshow +1.000 UL +LTb +473 2346 M +31 0 V +4337 0 R +-31 0 V +473 2471 M +31 0 V +4337 0 R +-31 0 V +473 2596 M +31 0 V +4337 0 R +-31 0 V +473 2720 M +31 0 V +4337 0 R +-31 0 V +473 2845 M +63 0 V +4305 0 R +-63 0 V +stroke +407 2845 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 12)] +] -50.0 MRshow +1.000 UL +LTb +473 2969 M +31 0 V +4337 0 R +-31 0 V +473 3094 M +31 0 V +4337 0 R +-31 0 V +473 3219 M +31 0 V +4337 0 R +-31 0 V +473 3343 M +31 0 V +4337 0 R +-31 0 V +473 3468 M +63 0 V +4305 0 R +-63 0 V +stroke +407 3468 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 15)] +] -50.0 MRshow +1.000 UL +LTb +1019 352 M +0 63 V +0 3053 R +0 -63 V +stroke +1019 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (CG)] +] -50.0 MCshow +1.000 UL +LTb +1565 352 M +0 63 V +0 3053 R +0 -63 V +stroke +1565 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (MG)] +] -50.0 MCshow +1.000 UL +LTb +2111 352 M +0 63 V +0 3053 R +0 -63 V +stroke +2111 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (EP)] +] -50.0 MCshow +1.000 UL +LTb +2657 352 M +0 63 V +0 3053 R +0 -63 V +stroke +2657 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (LU)] +] -50.0 MCshow +1.000 UL +LTb +3203 352 M +0 63 V +0 3053 R +0 -63 V +stroke +3203 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (BT)] +] -50.0 MCshow +1.000 UL +LTb +3749 352 M +0 63 V +0 3053 R +0 -63 V +stroke +3749 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (SP)] +] -50.0 MCshow +1.000 UL +LTb +4295 352 M +0 63 V +0 3053 R +0 -63 V +stroke +4295 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (FT)] +] -50.0 MCshow +1.000 UL +LTb +1.000 UL +LTb +473 3468 N +473 352 L +4368 0 V +0 3116 V +-4368 0 V +Z stroke +LCb setrgbcolor +88 1910 M +currentpoint gsave translate -270 rotate 0 0 moveto +[ [(Helvetica) 180.0 0.0 true true 0 (Performance degradation)] +] -60.0 MCshow +grestore +LTb +LCb setrgbcolor +2657 77 M +[ [(Helvetica) 180.0 0.0 true true 0 (NAS parallel benchmarks)] +] -60.0 MCshow +LTb +1.000 UP +1.000 UL +LTb +% Begin plot #1 +1.000 UL +LT0 +0.10 0.10 0.44 C LCb setrgbcolor +1652 3194 M +[ [(Helvetica) 140.0 0.0 true true 0 (10% static power)] +] -46.7 MRshow +LT0 +0.10 0.10 0.44 C 1.000 1718 3161 327 66 BoxColFill +0.10 0.10 0.44 C 1.000 921 352 88 1999 BoxColFill +0.10 0.10 0.44 C 1.000 1467 352 88 2321 BoxColFill +0.10 0.10 0.44 C 1.000 2013 352 88 302 BoxColFill +0.10 0.10 0.44 C 1.000 2559 352 88 705 BoxColFill +0.10 0.10 0.44 C 1.000 3105 352 88 1100 BoxColFill +0.10 0.10 0.44 C 1.000 3651 352 88 936 BoxColFill +0.10 0.10 0.44 C 1.000 4197 352 88 942 BoxColFill +% End plot #1 +% Begin plot #2 +1.000 UL +LT1 +0.24 0.70 0.44 C LCb setrgbcolor +1652 3062 M +[ [(Helvetica) 140.0 0.0 true true 0 (20% static power)] +] -46.7 MRshow +LT1 +0.24 0.70 0.44 C 1.000 1718 3029 327 66 BoxColFill +0.24 0.70 0.44 C 1.000 1030 352 88 1341 BoxColFill +0.24 0.70 0.44 C 1.000 1576 352 88 1156 BoxColFill +0.24 0.70 0.44 C 1.000 2122 352 88 315 BoxColFill +0.24 0.70 0.44 C 1.000 2668 352 88 707 BoxColFill +0.24 0.70 0.44 C 1.000 3214 352 88 589 BoxColFill +0.24 0.70 0.44 C 1.000 3760 352 88 373 BoxColFill +0.24 0.70 0.44 C 1.000 4306 352 88 205 BoxColFill +% End plot #2 +% Begin plot #3 +1.000 UL +LT0 +1.00 0.71 0.76 C LCb setrgbcolor +1652 2930 M +[ [(Helvetica) 140.0 0.0 true true 0 (30% static power)] +] -46.7 MRshow +LT0 +1.00 0.71 0.76 C 1.000 1718 2897 327 66 BoxColFill +1.00 0.71 0.76 C 1.000 1139 352 88 1301 BoxColFill +1.00 0.71 0.76 C 1.000 1685 352 88 109 BoxColFill +1.00 0.71 0.76 C 1.000 2231 352 88 321 BoxColFill +1.00 0.71 0.76 C 1.000 2777 352 88 22 BoxColFill +1.00 0.71 0.76 C 1.000 3323 352 88 485 BoxColFill +1.00 0.71 0.76 C 1.000 3869 352 88 250 BoxColFill +1.00 0.71 0.76 C 1.000 4415 352 88 188 BoxColFill +% End plot #3 +1.000 UL +LTb +473 3468 N +473 352 L +4368 0 V +0 3116 V +-4368 0 V +Z stroke +1.000 UP +1.000 UL +LTb +stroke +grestore +end +showpage +%%Trailer +%%DocumentFonts: Helvetica +%%Pages: 1 diff --git a/fig/ch3/power_consumption.pdf b/fig/ch3/power_consumption.pdf new file mode 100644 index 0000000000000000000000000000000000000000..3e67d4672aeb7b5f02bdb8e6179efab9b9efbdfa GIT binary patch literal 42619 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 literal 0 HcmV?d00001 diff --git a/fig/ch3/sen_comp.pdf b/fig/ch3/sen_comp.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f25c19b11f5393c83c4494bc3ddad7ca0b9c9e73 GIT binary patch literal 17551 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 literal 0 HcmV?d00001 diff --git a/fig/ch3/start_freq.pdf b/fig/ch3/start_freq.pdf new file mode 100644 index 0000000000000000000000000000000000000000..66c24cd8740a8ffdd9842714ad5e3aae37504aa9 GIT binary patch literal 21938 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⪙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 a48Nb?@o8NCyn~1Y=mm_TqP~Rz;{O3z5B&T9 literal 0 HcmV?d00001 diff --git a/fig/ch3/time.eps b/fig/ch3/time.eps new file mode 100644 index 0000000..99cea89 --- /dev/null +++ b/fig/ch3/time.eps @@ -0,0 +1,935 @@ +%!PS-Adobe-2.0 +%%Creator: gnuplot 4.6 patchlevel 6 +%%CreationDate: Thu Oct 22 17:45:34 2015 +%%DocumentFonts: (atend) +%%BoundingBox: 50 50 554 410 +%%Orientation: Portrait +%%Pages: (atend) +%%EndComments +%%BeginProlog +/gnudict 256 dict def +gnudict begin +% +% The following true/false flags may be edited by hand if desired. +% The unit line width and grayscale image gamma correction may also be changed. +% +/Color false def +/Blacktext false def +/Solid false def +/Dashlength 1 def +/Landscape false def +/Level1 false def +/Rounded false def +/ClipToBoundingBox false def +/SuppressPDFMark false def +/TransparentPatterns false def +/gnulinewidth 5.000 def +/userlinewidth gnulinewidth def +/Gamma 1.0 def +/BackgroundColor {-1.000 -1.000 -1.000} def +% +/vshift -36 def +/dl1 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if +} def +/dl2 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul add } if +} def +/hpt_ 31.5 def +/vpt_ 31.5 def +/hpt hpt_ def +/vpt vpt_ def +/doclip { + ClipToBoundingBox { + newpath 50 50 moveto 554 50 lineto 554 410 lineto 50 410 lineto closepath + clip + } if +} def +% +% Gnuplot Prolog Version 4.6 (September 2012) +% +%/SuppressPDFMark true def +% +/M {moveto} bind def +/L {lineto} bind def +/R {rmoveto} bind def +/V {rlineto} bind def +/N {newpath moveto} bind def +/Z {closepath} bind def +/C {setrgbcolor} bind def +/f {rlineto fill} bind def +/g {setgray} bind def +/Gshow {show} def % May be redefined later in the file to support UTF-8 +/vpt2 vpt 2 mul def +/hpt2 hpt 2 mul def +/Lshow {currentpoint stroke M 0 vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Rshow {currentpoint stroke M dup stringwidth pop neg vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def + /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def +/DL {Color {setrgbcolor Solid {pop []} if 0 setdash} + {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse} def +/BL {stroke userlinewidth 2 mul setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/AL {stroke userlinewidth 2 div setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/UL {dup gnulinewidth mul /userlinewidth exch def + dup 1 lt {pop 1} if 10 mul /udl exch def} def +/PL {stroke userlinewidth setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +3.8 setmiterlimit +% Default Line colors +/LCw {1 1 1} def +/LCb {0 0 0} def +/LCa {0 0 0} def +/LC0 {1 0 0} def +/LC1 {0 1 0} def +/LC2 {0 0 1} def +/LC3 {1 0 1} def +/LC4 {0 1 1} def +/LC5 {1 1 0} def +/LC6 {0 0 0} def +/LC7 {1 0.3 0} def +/LC8 {0.5 0.5 0.5} def +% Default Line Types +/LTw {PL [] 1 setgray} def +/LTb {BL [] LCb DL} def +/LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def +/LT0 {PL [] LC0 DL} def +/LT1 {PL [4 dl1 2 dl2] LC1 DL} def +/LT2 {PL [2 dl1 3 dl2] LC2 DL} def +/LT3 {PL [1 dl1 1.5 dl2] LC3 DL} def +/LT4 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def +/LT5 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC5 DL} def +/LT6 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC6 DL} def +/LT7 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC7 DL} def +/LT8 {PL [2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 4 dl2] LC8 DL} def +/Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def +/Dia {stroke [] 0 setdash 2 copy vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke + Pnt} def +/Pls {stroke [] 0 setdash vpt sub M 0 vpt2 V + currentpoint stroke M + hpt neg vpt neg R hpt2 0 V stroke + } def +/Box {stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke + Pnt} def +/Crs {stroke [] 0 setdash exch hpt sub exch vpt add M + hpt2 vpt2 neg V currentpoint stroke M + hpt2 neg 0 R hpt2 vpt2 V stroke} def +/TriU {stroke [] 0 setdash 2 copy vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke + Pnt} def +/Star {2 copy Pls Crs} def +/BoxF {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath fill} def +/TriUF {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath fill} def +/TriD {stroke [] 0 setdash 2 copy vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke + Pnt} def +/TriDF {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath fill} def +/DiaF {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath fill} def +/Pent {stroke [] 0 setdash 2 copy gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore Pnt} def +/PentF {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath fill grestore} def +/Circle {stroke [] 0 setdash 2 copy + hpt 0 360 arc stroke Pnt} def +/CircleF {stroke [] 0 setdash hpt 0 360 arc fill} def +/C0 {BL [] 0 setdash 2 copy moveto vpt 90 450 arc} bind def +/C1 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + vpt 0 360 arc closepath} bind def +/C2 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C3 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C4 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C5 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc + 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc} bind def +/C6 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C7 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C8 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C9 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 450 arc closepath fill + vpt 0 360 arc closepath} bind def +/C10 {BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill + 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C11 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C12 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C13 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C14 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 360 arc closepath fill + vpt 0 360 arc} bind def +/C15 {BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/Rec {newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto + neg 0 rlineto closepath} bind def +/Square {dup Rec} bind def +/Bsquare {vpt sub exch vpt sub exch vpt2 Square} bind def +/S0 {BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare} bind def +/S1 {BL [] 0 setdash 2 copy vpt Square fill Bsquare} bind def +/S2 {BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S3 {BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare} bind def +/S4 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S5 {BL [] 0 setdash 2 copy 2 copy vpt Square fill + exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S6 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S7 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S8 {BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare} bind def +/S9 {BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S10 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill + Bsquare} bind def +/S11 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill + Bsquare} bind def +/S12 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare} bind def +/S13 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S14 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S15 {BL [] 0 setdash 2 copy Bsquare fill Bsquare} bind def +/D0 {gsave translate 45 rotate 0 0 S0 stroke grestore} bind def +/D1 {gsave translate 45 rotate 0 0 S1 stroke grestore} bind def +/D2 {gsave translate 45 rotate 0 0 S2 stroke grestore} bind def +/D3 {gsave translate 45 rotate 0 0 S3 stroke grestore} bind def +/D4 {gsave translate 45 rotate 0 0 S4 stroke grestore} bind def +/D5 {gsave translate 45 rotate 0 0 S5 stroke grestore} bind def +/D6 {gsave translate 45 rotate 0 0 S6 stroke grestore} bind def +/D7 {gsave translate 45 rotate 0 0 S7 stroke grestore} bind def +/D8 {gsave translate 45 rotate 0 0 S8 stroke grestore} bind def +/D9 {gsave translate 45 rotate 0 0 S9 stroke grestore} bind def +/D10 {gsave translate 45 rotate 0 0 S10 stroke grestore} bind def +/D11 {gsave translate 45 rotate 0 0 S11 stroke grestore} bind def +/D12 {gsave translate 45 rotate 0 0 S12 stroke grestore} bind def +/D13 {gsave translate 45 rotate 0 0 S13 stroke grestore} bind def +/D14 {gsave translate 45 rotate 0 0 S14 stroke grestore} bind def +/D15 {gsave translate 45 rotate 0 0 S15 stroke grestore} bind def +/DiaE {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke} def +/BoxE {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke} def +/TriUE {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke} def +/TriDE {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke} def +/PentE {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore} def +/CircE {stroke [] 0 setdash + hpt 0 360 arc stroke} def +/Opaque {gsave closepath 1 setgray fill grestore 0 setgray closepath} def +/DiaW {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V Opaque stroke} def +/BoxW {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V Opaque stroke} def +/TriUW {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V Opaque stroke} def +/TriDW {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V Opaque stroke} def +/PentW {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + Opaque stroke grestore} def +/CircW {stroke [] 0 setdash + hpt 0 360 arc Opaque stroke} def +/BoxFill {gsave Rec 1 setgray fill grestore} def +/Density { + /Fillden exch def + currentrgbcolor + /ColB exch def /ColG exch def /ColR exch def + /ColR ColR Fillden mul Fillden sub 1 add def + /ColG ColG Fillden mul Fillden sub 1 add def + /ColB ColB Fillden mul Fillden sub 1 add def + ColR ColG ColB setrgbcolor} def +/BoxColFill {gsave Rec PolyFill} def +/PolyFill {gsave Density fill grestore grestore} def +/h {rlineto rlineto rlineto gsave closepath fill grestore} bind def +% +% PostScript Level 1 Pattern Fill routine for rectangles +% Usage: x y w h s a XX PatternFill +% x,y = lower left corner of box to be filled +% w,h = width and height of box +% a = angle in degrees between lines and x-axis +% XX = 0/1 for no/yes cross-hatch +% +/PatternFill {gsave /PFa [ 9 2 roll ] def + PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate + PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse + clip + currentlinewidth 0.5 mul setlinewidth + /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def + 0 0 M PFa 5 get rotate PFs -2 div dup translate + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 M 0 PFs V} for + 0 PFa 6 get ne { + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 2 1 roll M PFs 0 V} for + } if + stroke grestore} def +% +/languagelevel where + {pop languagelevel} {1} ifelse + 2 lt + {/InterpretLevel1 true def} + {/InterpretLevel1 Level1 def} + ifelse +% +% PostScript level 2 pattern fill definitions +% +/Level2PatternFill { +/Tile8x8 {/PaintType 2 /PatternType 1 /TilingType 1 /BBox [0 0 8 8] /XStep 8 /YStep 8} + bind def +/KeepColor {currentrgbcolor [/Pattern /DeviceRGB] setcolorspace} bind def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke} +>> matrix makepattern +/Pat1 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke + 0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke} +>> matrix makepattern +/Pat2 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L + 8 8 L 8 0 L 0 0 L fill} +>> matrix makepattern +/Pat3 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L + 0 12 M 12 0 L stroke} +>> matrix makepattern +/Pat4 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L + 0 -4 M 12 8 L stroke} +>> matrix makepattern +/Pat5 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L + 0 12 M 8 -4 L 4 12 M 10 0 L stroke} +>> matrix makepattern +/Pat6 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L + 0 -4 M 8 12 L 4 -4 M 10 8 L stroke} +>> matrix makepattern +/Pat7 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L + 12 0 M -4 8 L 12 4 M 0 10 L stroke} +>> matrix makepattern +/Pat8 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L + -4 0 M 12 8 L -4 4 M 8 10 L stroke} +>> matrix makepattern +/Pat9 exch def +/Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def +/Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def +/Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def +/Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def +/Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def +/Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def +/Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def +} def +% +% +%End of PostScript Level 2 code +% +/PatternBgnd { + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse +} def +% +% Substitute for Level 2 pattern fill codes with +% grayscale if Level 2 support is not selected. +% +/Level1PatternFill { +/Pattern1 {0.250 Density} bind def +/Pattern2 {0.500 Density} bind def +/Pattern3 {0.750 Density} bind def +/Pattern4 {0.125 Density} bind def +/Pattern5 {0.375 Density} bind def +/Pattern6 {0.625 Density} bind def +/Pattern7 {0.875 Density} bind def +} def +% +% Now test for support of Level 2 code +% +Level1 {Level1PatternFill} {Level2PatternFill} ifelse +% +/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont +dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall +currentdict end definefont pop +% +% Encoding for ISO-8859-1 (also called Latin1) +% +/reencodeISO { +dup dup findfont dup length dict begin +{ 1 index /FID ne { def }{ pop pop } ifelse } forall +currentdict /CharStrings known { + CharStrings /Idieresis known { + /Encoding ISOLatin1Encoding def } if +} if +currentdict end definefont +} def +/ISOLatin1Encoding [ +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright +/parenleft/parenright/asterisk/plus/comma/minus/period/slash +/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon +/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N +/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright +/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m +/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve +/dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut +/ogonek/caron/space/exclamdown/cent/sterling/currency/yen/brokenbar +/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot +/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior +/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine +/guillemotright/onequarter/onehalf/threequarters/questiondown +/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla +/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex +/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis +/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute +/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis +/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave +/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex +/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis +/yacute/thorn/ydieresis +] def +/MFshow { + { dup 5 get 3 ge + { 5 get 3 eq {gsave} {grestore} ifelse } + {dup dup 0 get findfont exch 1 get scalefont setfont + [ currentpoint ] exch dup 2 get 0 exch R dup 5 get 2 ne {dup dup 6 + get exch 4 get {Gshow} {stringwidth pop 0 R} ifelse }if dup 5 get 0 eq + {dup 3 get {2 get neg 0 exch R pop} {pop aload pop M} ifelse} {dup 5 + get 1 eq {dup 2 get exch dup 3 get exch 6 get stringwidth pop -2 div + dup 0 R} {dup 6 get stringwidth pop -2 div 0 R 6 get + show 2 index {aload pop M neg 3 -1 roll neg R pop pop} {pop pop pop + pop aload pop M} ifelse }ifelse }ifelse } + ifelse } + forall} def +/Gswidth {dup type /stringtype eq {stringwidth} {pop (n) stringwidth} ifelse} def +/MFwidth {0 exch { dup 5 get 3 ge { 5 get 3 eq { 0 } { pop } ifelse } + {dup 3 get{dup dup 0 get findfont exch 1 get scalefont setfont + 6 get Gswidth pop add} {pop} ifelse} ifelse} forall} def +/MLshow { currentpoint stroke M + 0 exch R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MRshow { currentpoint stroke M + exch dup MFwidth neg 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MCshow { currentpoint stroke M + exch dup MFwidth -2 div 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/XYsave { [( ) 1 2 true false 3 ()] } bind def +/XYrestore { [( ) 1 2 true false 4 ()] } bind def +/Helvetica reencodeISO def +Level1 SuppressPDFMark or +{} { +/SDict 10 dict def +systemdict /pdfmark known not { + userdict /pdfmark systemdict /cleartomark get put +} if +SDict begin [ + /Title () + /Subject (gnuplot plot) + /Creator (gnuplot 4.6 patchlevel 6) + /Author (afanfakh) +% /Producer (gnuplot) +% /Keywords () + /CreationDate (Thu Oct 22 17:45:34 2015) + /DOCINFO pdfmark +end +} ifelse +end +%%EndProlog +%%Page: 1 1 +gnudict begin +gsave +doclip +50 50 translate +0.100 0.100 scale +0 setgray +newpath +(Helvetica) findfont 110 scalefont setfont +BackgroundColor 0 lt 3 1 roll 0 lt exch 0 lt or or not {gsave BackgroundColor C clippath fill grestore} if +1.000 UL +LTb +605 352 M +63 0 V +4173 0 R +-63 0 V +stroke +539 352 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 0)] +] -50.0 MRshow +1.000 UL +LTb +605 421 M +31 0 V +4205 0 R +-31 0 V +605 490 M +31 0 V +4205 0 R +-31 0 V +605 560 M +31 0 V +4205 0 R +-31 0 V +605 629 M +31 0 V +4205 0 R +-31 0 V +605 698 M +63 0 V +4173 0 R +-63 0 V +stroke +539 698 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 500)] +] -50.0 MRshow +1.000 UL +LTb +605 767 M +31 0 V +4205 0 R +-31 0 V +605 837 M +31 0 V +4205 0 R +-31 0 V +605 906 M +31 0 V +4205 0 R +-31 0 V +605 975 M +31 0 V +4205 0 R +-31 0 V +605 1044 M +63 0 V +4173 0 R +-63 0 V +stroke +539 1044 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 1000)] +] -50.0 MRshow +1.000 UL +LTb +605 1114 M +31 0 V +4205 0 R +-31 0 V +605 1183 M +31 0 V +4205 0 R +-31 0 V +605 1252 M +31 0 V +4205 0 R +-31 0 V +605 1321 M +31 0 V +4205 0 R +-31 0 V +605 1391 M +63 0 V +4173 0 R +-63 0 V +stroke +539 1391 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 1500)] +] -50.0 MRshow +1.000 UL +LTb +605 1460 M +31 0 V +4205 0 R +-31 0 V +605 1529 M +31 0 V +4205 0 R +-31 0 V +605 1598 M +31 0 V +4205 0 R +-31 0 V +605 1668 M +31 0 V +4205 0 R +-31 0 V +605 1737 M +63 0 V +4173 0 R +-63 0 V +stroke +539 1737 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 2000)] +] -50.0 MRshow +1.000 UL +LTb +605 1806 M +31 0 V +4205 0 R +-31 0 V +605 1875 M +31 0 V +4205 0 R +-31 0 V +605 1945 M +31 0 V +4205 0 R +-31 0 V +605 2014 M +31 0 V +4205 0 R +-31 0 V +605 2083 M +63 0 V +4173 0 R +-63 0 V +stroke +539 2083 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 2500)] +] -50.0 MRshow +1.000 UL +LTb +605 2152 M +31 0 V +4205 0 R +-31 0 V +605 2222 M +31 0 V +4205 0 R +-31 0 V +605 2291 M +31 0 V +4205 0 R +-31 0 V +605 2360 M +31 0 V +4205 0 R +-31 0 V +605 2429 M +63 0 V +4173 0 R +-63 0 V +stroke +539 2429 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 3000)] +] -50.0 MRshow +1.000 UL +LTb +605 2499 M +31 0 V +4205 0 R +-31 0 V +605 2568 M +31 0 V +4205 0 R +-31 0 V +605 2637 M +31 0 V +4205 0 R +-31 0 V +605 2706 M +31 0 V +4205 0 R +-31 0 V +605 2776 M +63 0 V +4173 0 R +-63 0 V +stroke +539 2776 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 3500)] +] -50.0 MRshow +1.000 UL +LTb +605 2845 M +31 0 V +4205 0 R +-31 0 V +605 2914 M +31 0 V +4205 0 R +-31 0 V +605 2983 M +31 0 V +4205 0 R +-31 0 V +605 3053 M +31 0 V +4205 0 R +-31 0 V +605 3122 M +63 0 V +4173 0 R +-63 0 V +stroke +539 3122 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 4000)] +] -50.0 MRshow +1.000 UL +LTb +605 3191 M +31 0 V +4205 0 R +-31 0 V +605 3260 M +31 0 V +4205 0 R +-31 0 V +605 3330 M +31 0 V +4205 0 R +-31 0 V +605 3399 M +31 0 V +4205 0 R +-31 0 V +605 3468 M +63 0 V +4173 0 R +-63 0 V +stroke +539 3468 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 4500)] +] -50.0 MRshow +1.000 UL +LTb +605 352 M +0 63 V +0 3053 R +0 -63 V +stroke +605 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (CG)] +] -50.0 MCshow +1.000 UL +LTb +1311 352 M +0 63 V +0 3053 R +0 -63 V +stroke +1311 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (MG)] +] -50.0 MCshow +1.000 UL +LTb +2017 352 M +0 63 V +0 3053 R +0 -63 V +stroke +2017 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (EP)] +] -50.0 MCshow +1.000 UL +LTb +2723 352 M +0 63 V +0 3053 R +0 -63 V +stroke +2723 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (LU)] +] -50.0 MCshow +1.000 UL +LTb +3429 352 M +0 63 V +0 3053 R +0 -63 V +stroke +3429 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (BT)] +] -50.0 MCshow +1.000 UL +LTb +4135 352 M +0 63 V +0 3053 R +0 -63 V +stroke +4135 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (SP)] +] -50.0 MCshow +1.000 UL +LTb +4841 352 M +0 63 V +0 3053 R +0 -63 V +stroke +4841 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (FT)] +] -50.0 MCshow +1.000 UL +LTb +1.000 UL +LTb +605 3468 N +605 352 L +4236 0 V +0 3116 V +-4236 0 V +Z stroke +LCb setrgbcolor +88 1910 M +currentpoint gsave translate -270 rotate 0 0 moveto +[ [(Helvetica) 180.0 0.0 true true 0 (Execution time [s])] +] -60.0 MCshow +grestore +LTb +LCb setrgbcolor +2723 77 M +[ [(Helvetica) 180.0 0.0 true true 0 (NAS parallel benchmarks)] +] -60.0 MCshow +LTb +1.000 UP +1.000 UL +LTb +% Begin plot #1 +1.000 UP +1.000 UL +LT0 +0.10 0.10 0.44 C LCb setrgbcolor +2546 3264 M +[ [(Helvetica) 140.0 0.0 true true 0 (One core per node scenario)] +] -46.7 MRshow +LT0 +0.10 0.10 0.44 C 2612 3264 M +327 0 V +605 1208 M +1311 445 L +706 78 V +706 595 V +3429 907 L +706 930 V +706 52 V +605 1208 Pls +1311 445 Pls +2017 523 Pls +2723 1118 Pls +3429 907 Pls +4135 1837 Pls +4841 1889 Pls +2775 3264 Pls +% End plot #1 +% Begin plot #2 +1.000 UP +1.000 UL +LT1 +1.00 0.00 0.00 C LCb setrgbcolor +2546 3132 M +[ [(Helvetica) 140.0 0.0 true true 0 (Multicores per node scenario)] +] -46.7 MRshow +LT1 +1.00 0.00 0.00 C 2612 3132 M +327 0 V +605 2089 M +1311 592 L +706 30 V +706 951 V +706 -482 V +706 1385 V +706 -120 V +605 2089 Crs +1311 592 Crs +2017 622 Crs +2723 1573 Crs +3429 1091 Crs +4135 2476 Crs +4841 2356 Crs +2775 3132 Crs +% End plot #2 +1.000 UL +LTb +605 3468 N +605 352 L +4236 0 V +0 3116 V +-4236 0 V +Z stroke +1.000 UP +1.000 UL +LTb +stroke +grestore +end +showpage +%%Trailer +%%DocumentFonts: Helvetica +%%Pages: 1 diff --git a/fig/ch3/time_scenarios-eps-converted-to.pdf b/fig/ch3/time_scenarios-eps-converted-to.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e51998a7b971241d4cf04f3ceada14120948c7f1 GIT binary patch literal 8725 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 literal 0 HcmV?d00001 diff --git a/fig/ch3/time_scenarios.eps b/fig/ch3/time_scenarios.eps new file mode 100644 index 0000000..a9b8da9 --- /dev/null +++ b/fig/ch3/time_scenarios.eps @@ -0,0 +1,937 @@ +%!PS-Adobe-2.0 +%%Creator: gnuplot 4.6 patchlevel 6 +%%CreationDate: Thu Oct 22 12:39:30 2015 +%%DocumentFonts: (atend) +%%BoundingBox: 50 50 554 410 +%%Orientation: Portrait +%%Pages: (atend) +%%EndComments +%%BeginProlog +/gnudict 256 dict def +gnudict begin +% +% The following true/false flags may be edited by hand if desired. +% The unit line width and grayscale image gamma correction may also be changed. +% +/Color false def +/Blacktext false def +/Solid false def +/Dashlength 1 def +/Landscape false def +/Level1 false def +/Rounded false def +/ClipToBoundingBox false def +/SuppressPDFMark false def +/TransparentPatterns false def +/gnulinewidth 5.000 def +/userlinewidth gnulinewidth def +/Gamma 1.0 def +/BackgroundColor {-1.000 -1.000 -1.000} def +% +/vshift -36 def +/dl1 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if +} def +/dl2 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul add } if +} def +/hpt_ 31.5 def +/vpt_ 31.5 def +/hpt hpt_ def +/vpt vpt_ def +/doclip { + ClipToBoundingBox { + newpath 50 50 moveto 554 50 lineto 554 410 lineto 50 410 lineto closepath + clip + } if +} def +% +% Gnuplot Prolog Version 4.6 (September 2012) +% +%/SuppressPDFMark true def +% +/M {moveto} bind def +/L {lineto} bind def +/R {rmoveto} bind def +/V {rlineto} bind def +/N {newpath moveto} bind def +/Z {closepath} bind def +/C {setrgbcolor} bind def +/f {rlineto fill} bind def +/g {setgray} bind def +/Gshow {show} def % May be redefined later in the file to support UTF-8 +/vpt2 vpt 2 mul def +/hpt2 hpt 2 mul def +/Lshow {currentpoint stroke M 0 vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Rshow {currentpoint stroke M dup stringwidth pop neg vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def + /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def +/DL {Color {setrgbcolor Solid {pop []} if 0 setdash} + {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse} def +/BL {stroke userlinewidth 2 mul setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/AL {stroke userlinewidth 2 div setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/UL {dup gnulinewidth mul /userlinewidth exch def + dup 1 lt {pop 1} if 10 mul /udl exch def} def +/PL {stroke userlinewidth setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +3.8 setmiterlimit +% Default Line colors +/LCw {1 1 1} def +/LCb {0 0 0} def +/LCa {0 0 0} def +/LC0 {1 0 0} def +/LC1 {0 1 0} def +/LC2 {0 0 1} def +/LC3 {1 0 1} def +/LC4 {0 1 1} def +/LC5 {1 1 0} def +/LC6 {0 0 0} def +/LC7 {1 0.3 0} def +/LC8 {0.5 0.5 0.5} def +% Default Line Types +/LTw {PL [] 1 setgray} def +/LTb {BL [] LCb DL} def +/LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def +/LT0 {PL [] LC0 DL} def +/LT1 {PL [4 dl1 2 dl2] LC1 DL} def +/LT2 {PL [2 dl1 3 dl2] LC2 DL} def +/LT3 {PL [1 dl1 1.5 dl2] LC3 DL} def +/LT4 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def +/LT5 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC5 DL} def +/LT6 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC6 DL} def +/LT7 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC7 DL} def +/LT8 {PL [2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 4 dl2] LC8 DL} def +/Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def +/Dia {stroke [] 0 setdash 2 copy vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke + Pnt} def +/Pls {stroke [] 0 setdash vpt sub M 0 vpt2 V + currentpoint stroke M + hpt neg vpt neg R hpt2 0 V stroke + } def +/Box {stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke + Pnt} def +/Crs {stroke [] 0 setdash exch hpt sub exch vpt add M + hpt2 vpt2 neg V currentpoint stroke M + hpt2 neg 0 R hpt2 vpt2 V stroke} def +/TriU {stroke [] 0 setdash 2 copy vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke + Pnt} def +/Star {2 copy Pls Crs} def +/BoxF {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath fill} def +/TriUF {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath fill} def +/TriD {stroke [] 0 setdash 2 copy vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke + Pnt} def +/TriDF {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath fill} def +/DiaF {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath fill} def +/Pent {stroke [] 0 setdash 2 copy gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore Pnt} def +/PentF {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath fill grestore} def +/Circle {stroke [] 0 setdash 2 copy + hpt 0 360 arc stroke Pnt} def +/CircleF {stroke [] 0 setdash hpt 0 360 arc fill} def +/C0 {BL [] 0 setdash 2 copy moveto vpt 90 450 arc} bind def +/C1 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + vpt 0 360 arc closepath} bind def +/C2 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C3 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C4 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C5 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc + 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc} bind def +/C6 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C7 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C8 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C9 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 450 arc closepath fill + vpt 0 360 arc closepath} bind def +/C10 {BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill + 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C11 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C12 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C13 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C14 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 360 arc closepath fill + vpt 0 360 arc} bind def +/C15 {BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/Rec {newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto + neg 0 rlineto closepath} bind def +/Square {dup Rec} bind def +/Bsquare {vpt sub exch vpt sub exch vpt2 Square} bind def +/S0 {BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare} bind def +/S1 {BL [] 0 setdash 2 copy vpt Square fill Bsquare} bind def +/S2 {BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S3 {BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare} bind def +/S4 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S5 {BL [] 0 setdash 2 copy 2 copy vpt Square fill + exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S6 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S7 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S8 {BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare} bind def +/S9 {BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S10 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill + Bsquare} bind def +/S11 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill + Bsquare} bind def +/S12 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare} bind def +/S13 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S14 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S15 {BL [] 0 setdash 2 copy Bsquare fill Bsquare} bind def +/D0 {gsave translate 45 rotate 0 0 S0 stroke grestore} bind def +/D1 {gsave translate 45 rotate 0 0 S1 stroke grestore} bind def +/D2 {gsave translate 45 rotate 0 0 S2 stroke grestore} bind def +/D3 {gsave translate 45 rotate 0 0 S3 stroke grestore} bind def +/D4 {gsave translate 45 rotate 0 0 S4 stroke grestore} bind def +/D5 {gsave translate 45 rotate 0 0 S5 stroke grestore} bind def +/D6 {gsave translate 45 rotate 0 0 S6 stroke grestore} bind def +/D7 {gsave translate 45 rotate 0 0 S7 stroke grestore} bind def +/D8 {gsave translate 45 rotate 0 0 S8 stroke grestore} bind def +/D9 {gsave translate 45 rotate 0 0 S9 stroke grestore} bind def +/D10 {gsave translate 45 rotate 0 0 S10 stroke grestore} bind def +/D11 {gsave translate 45 rotate 0 0 S11 stroke grestore} bind def +/D12 {gsave translate 45 rotate 0 0 S12 stroke grestore} bind def +/D13 {gsave translate 45 rotate 0 0 S13 stroke grestore} bind def +/D14 {gsave translate 45 rotate 0 0 S14 stroke grestore} bind def +/D15 {gsave translate 45 rotate 0 0 S15 stroke grestore} bind def +/DiaE {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke} def +/BoxE {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke} def +/TriUE {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke} def +/TriDE {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke} def +/PentE {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore} def +/CircE {stroke [] 0 setdash + hpt 0 360 arc stroke} def +/Opaque {gsave closepath 1 setgray fill grestore 0 setgray closepath} def +/DiaW {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V Opaque stroke} def +/BoxW {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V Opaque stroke} def +/TriUW {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V Opaque stroke} def +/TriDW {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V Opaque stroke} def +/PentW {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + Opaque stroke grestore} def +/CircW {stroke [] 0 setdash + hpt 0 360 arc Opaque stroke} def +/BoxFill {gsave Rec 1 setgray fill grestore} def +/Density { + /Fillden exch def + currentrgbcolor + /ColB exch def /ColG exch def /ColR exch def + /ColR ColR Fillden mul Fillden sub 1 add def + /ColG ColG Fillden mul Fillden sub 1 add def + /ColB ColB Fillden mul Fillden sub 1 add def + ColR ColG ColB setrgbcolor} def +/BoxColFill {gsave Rec PolyFill} def +/PolyFill {gsave Density fill grestore grestore} def +/h {rlineto rlineto rlineto gsave closepath fill grestore} bind def +% +% PostScript Level 1 Pattern Fill routine for rectangles +% Usage: x y w h s a XX PatternFill +% x,y = lower left corner of box to be filled +% w,h = width and height of box +% a = angle in degrees between lines and x-axis +% XX = 0/1 for no/yes cross-hatch +% +/PatternFill {gsave /PFa [ 9 2 roll ] def + PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate + PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse + clip + currentlinewidth 0.5 mul setlinewidth + /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def + 0 0 M PFa 5 get rotate PFs -2 div dup translate + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 M 0 PFs V} for + 0 PFa 6 get ne { + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 2 1 roll M PFs 0 V} for + } if + stroke grestore} def +% +/languagelevel where + {pop languagelevel} {1} ifelse + 2 lt + {/InterpretLevel1 true def} + {/InterpretLevel1 Level1 def} + ifelse +% +% PostScript level 2 pattern fill definitions +% +/Level2PatternFill { +/Tile8x8 {/PaintType 2 /PatternType 1 /TilingType 1 /BBox [0 0 8 8] /XStep 8 /YStep 8} + bind def +/KeepColor {currentrgbcolor [/Pattern /DeviceRGB] setcolorspace} bind def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke} +>> matrix makepattern +/Pat1 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke + 0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke} +>> matrix makepattern +/Pat2 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L + 8 8 L 8 0 L 0 0 L fill} +>> matrix makepattern +/Pat3 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L + 0 12 M 12 0 L stroke} +>> matrix makepattern +/Pat4 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L + 0 -4 M 12 8 L stroke} +>> matrix makepattern +/Pat5 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L + 0 12 M 8 -4 L 4 12 M 10 0 L stroke} +>> matrix makepattern +/Pat6 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L + 0 -4 M 8 12 L 4 -4 M 10 8 L stroke} +>> matrix makepattern +/Pat7 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L + 12 0 M -4 8 L 12 4 M 0 10 L stroke} +>> matrix makepattern +/Pat8 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L + -4 0 M 12 8 L -4 4 M 8 10 L stroke} +>> matrix makepattern +/Pat9 exch def +/Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def +/Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def +/Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def +/Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def +/Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def +/Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def +/Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def +} def +% +% +%End of PostScript Level 2 code +% +/PatternBgnd { + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse +} def +% +% Substitute for Level 2 pattern fill codes with +% grayscale if Level 2 support is not selected. +% +/Level1PatternFill { +/Pattern1 {0.250 Density} bind def +/Pattern2 {0.500 Density} bind def +/Pattern3 {0.750 Density} bind def +/Pattern4 {0.125 Density} bind def +/Pattern5 {0.375 Density} bind def +/Pattern6 {0.625 Density} bind def +/Pattern7 {0.875 Density} bind def +} def +% +% Now test for support of Level 2 code +% +Level1 {Level1PatternFill} {Level2PatternFill} ifelse +% +/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont +dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall +currentdict end definefont pop +% +% Encoding for ISO-8859-1 (also called Latin1) +% +/reencodeISO { +dup dup findfont dup length dict begin +{ 1 index /FID ne { def }{ pop pop } ifelse } forall +currentdict /CharStrings known { + CharStrings /Idieresis known { + /Encoding ISOLatin1Encoding def } if +} if +currentdict end definefont +} def +/ISOLatin1Encoding [ +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright +/parenleft/parenright/asterisk/plus/comma/minus/period/slash +/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon +/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N +/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright +/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m +/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve +/dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut +/ogonek/caron/space/exclamdown/cent/sterling/currency/yen/brokenbar +/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot +/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior +/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine +/guillemotright/onequarter/onehalf/threequarters/questiondown +/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla +/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex +/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis +/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute +/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis +/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave +/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex +/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis +/yacute/thorn/ydieresis +] def +/MFshow { + { dup 5 get 3 ge + { 5 get 3 eq {gsave} {grestore} ifelse } + {dup dup 0 get findfont exch 1 get scalefont setfont + [ currentpoint ] exch dup 2 get 0 exch R dup 5 get 2 ne {dup dup 6 + get exch 4 get {Gshow} {stringwidth pop 0 R} ifelse }if dup 5 get 0 eq + {dup 3 get {2 get neg 0 exch R pop} {pop aload pop M} ifelse} {dup 5 + get 1 eq {dup 2 get exch dup 3 get exch 6 get stringwidth pop -2 div + dup 0 R} {dup 6 get stringwidth pop -2 div 0 R 6 get + show 2 index {aload pop M neg 3 -1 roll neg R pop pop} {pop pop pop + pop aload pop M} ifelse }ifelse }ifelse } + ifelse } + forall} def +/Gswidth {dup type /stringtype eq {stringwidth} {pop (n) stringwidth} ifelse} def +/MFwidth {0 exch { dup 5 get 3 ge { 5 get 3 eq { 0 } { pop } ifelse } + {dup 3 get{dup dup 0 get findfont exch 1 get scalefont setfont + 6 get Gswidth pop add} {pop} ifelse} ifelse} forall} def +/MLshow { currentpoint stroke M + 0 exch R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MRshow { currentpoint stroke M + exch dup MFwidth neg 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MCshow { currentpoint stroke M + exch dup MFwidth -2 div 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/XYsave { [( ) 1 2 true false 3 ()] } bind def +/XYrestore { [( ) 1 2 true false 4 ()] } bind def +/Helvetica reencodeISO def +Level1 SuppressPDFMark or +{} { +/SDict 10 dict def +systemdict /pdfmark known not { + userdict /pdfmark systemdict /cleartomark get put +} if +SDict begin [ + /Title () + /Subject (gnuplot plot) + /Creator (gnuplot 4.6 patchlevel 6) + /Author (afanfakh) +% /Producer (gnuplot) +% /Keywords () + /CreationDate (Thu Oct 22 12:39:30 2015) + /DOCINFO pdfmark +end +} ifelse +end +%%EndProlog +%%Page: 1 1 +gnudict begin +gsave +doclip +50 50 translate +0.100 0.100 scale +0 setgray +newpath +(Helvetica) findfont 110 scalefont setfont +BackgroundColor 0 lt 3 1 roll 0 lt exch 0 lt or or not {gsave BackgroundColor C clippath fill grestore} if +1.000 UL +LTb +605 352 M +63 0 V +4173 0 R +-63 0 V +stroke +539 352 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 0)] +] -50.0 MRshow +1.000 UL +LTb +605 441 M +31 0 V +4205 0 R +-31 0 V +605 530 M +31 0 V +4205 0 R +-31 0 V +605 619 M +31 0 V +4205 0 R +-31 0 V +605 708 M +31 0 V +4205 0 R +-31 0 V +605 797 M +63 0 V +4173 0 R +-63 0 V +stroke +539 797 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 1000)] +] -50.0 MRshow +1.000 UL +LTb +605 886 M +31 0 V +4205 0 R +-31 0 V +605 975 M +31 0 V +4205 0 R +-31 0 V +605 1064 M +31 0 V +4205 0 R +-31 0 V +605 1153 M +31 0 V +4205 0 R +-31 0 V +605 1242 M +63 0 V +4173 0 R +-63 0 V +stroke +539 1242 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 2000)] +] -50.0 MRshow +1.000 UL +LTb +605 1331 M +31 0 V +4205 0 R +-31 0 V +605 1420 M +31 0 V +4205 0 R +-31 0 V +605 1509 M +31 0 V +4205 0 R +-31 0 V +605 1598 M +31 0 V +4205 0 R +-31 0 V +605 1687 M +63 0 V +4173 0 R +-63 0 V +stroke +539 1687 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 3000)] +] -50.0 MRshow +1.000 UL +LTb +605 1776 M +31 0 V +4205 0 R +-31 0 V +605 1865 M +31 0 V +4205 0 R +-31 0 V +605 1955 M +31 0 V +4205 0 R +-31 0 V +605 2044 M +31 0 V +4205 0 R +-31 0 V +605 2133 M +63 0 V +4173 0 R +-63 0 V +stroke +539 2133 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 4000)] +] -50.0 MRshow +1.000 UL +LTb +605 2222 M +31 0 V +4205 0 R +-31 0 V +605 2311 M +31 0 V +4205 0 R +-31 0 V +605 2400 M +31 0 V +4205 0 R +-31 0 V +605 2489 M +31 0 V +4205 0 R +-31 0 V +605 2578 M +63 0 V +4173 0 R +-63 0 V +stroke +539 2578 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 5000)] +] -50.0 MRshow +1.000 UL +LTb +605 2667 M +31 0 V +4205 0 R +-31 0 V +605 2756 M +31 0 V +4205 0 R +-31 0 V +605 2845 M +31 0 V +4205 0 R +-31 0 V +605 2934 M +31 0 V +4205 0 R +-31 0 V +605 3023 M +63 0 V +4173 0 R +-63 0 V +stroke +539 3023 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 6000)] +] -50.0 MRshow +1.000 UL +LTb +605 3112 M +31 0 V +4205 0 R +-31 0 V +605 3201 M +31 0 V +4205 0 R +-31 0 V +605 3290 M +31 0 V +4205 0 R +-31 0 V +605 3379 M +31 0 V +4205 0 R +-31 0 V +605 3468 M +63 0 V +4173 0 R +-63 0 V +stroke +539 3468 M +[ [(Helvetica) 150.0 0.0 true true 0 ( 7000)] +] -50.0 MRshow +1.000 UL +LTb +605 352 M +0 63 V +0 3053 R +0 -63 V +stroke +605 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (CG)] +] -50.0 MCshow +1.000 UL +LTb +1311 352 M +0 63 V +0 3053 R +0 -63 V +stroke +1311 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (MG)] +] -50.0 MCshow +1.000 UL +LTb +2017 352 M +0 63 V +0 3053 R +0 -63 V +stroke +2017 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (EP)] +] -50.0 MCshow +1.000 UL +LTb +2723 352 M +0 63 V +0 3053 R +0 -63 V +stroke +2723 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (LU)] +] -50.0 MCshow +1.000 UL +LTb +3429 352 M +0 63 V +0 3053 R +0 -63 V +stroke +3429 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (BT)] +] -50.0 MCshow +1.000 UL +LTb +4135 352 M +0 63 V +0 3053 R +0 -63 V +stroke +4135 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (SP)] +] -50.0 MCshow +1.000 UL +LTb +4841 352 M +0 63 V +0 3053 R +0 -63 V +stroke +4841 242 M +[ [(Helvetica) 150.0 0.0 true true 0 (FT)] +] -50.0 MCshow +1.000 UL +LTb +1.000 UL +LTb +605 3468 N +605 352 L +4236 0 V +0 3116 V +-4236 0 V +Z stroke +LCb setrgbcolor +88 1910 M +currentpoint gsave translate -270 rotate 0 0 moveto +[ [(Helvetica) 180.0 0.0 true true 0 (Execution time [s])] +] -60.0 MCshow +grestore +LTb +LCb setrgbcolor +2723 77 M +[ [(Helvetica) 180.0 0.0 true true 0 (NAS parallel benchmarks)] +] -60.0 MCshow +LTb +1.000 UP +1.000 UL +LTb +% Begin plot #1 +1.000 UP +1.000 UL +LT0 +0.10 0.10 0.44 C LCb setrgbcolor +2123 3268 M +[ [(Helvetica) 140.0 0.0 true true 0 (One site/ 16 nodes)] +] -46.7 MRshow +LT0 +0.10 0.10 0.44 C 2189 3268 M +327 0 V +605 1101 M +1311 464 L +706 162 V +706 975 V +706 -161 V +706 672 V +706 79 V +605 1101 Pls +1311 464 Pls +2017 626 Pls +2723 1601 Pls +3429 1440 Pls +4135 2112 Pls +4841 2191 Pls +2352 3268 Pls +% End plot #1 +% Begin plot #2 +1.000 UP +1.000 UL +LT1 +1.00 0.00 0.00 C LCb setrgbcolor +2123 3136 M +[ [(Helvetica) 140.0 0.0 true true 0 (One site/ 32 nodes)] +] -46.7 MRshow +LT1 +1.00 0.00 0.00 C 2189 3136 M +327 0 V +605 902 M +1311 412 L +706 50 V +706 383 V +3429 709 L +706 598 V +706 33 V +605 902 Crs +1311 412 Crs +2017 462 Crs +2723 845 Crs +3429 709 Crs +4135 1307 Crs +4841 1340 Crs +2352 3136 Crs +% End plot #2 +% Begin plot #3 +1.000 UP +1.000 UL +LT2 +0.00 0.39 0.00 C LCb setrgbcolor +2123 3004 M +[ [(Helvetica) 140.0 0.0 true true 0 (Two sites/ 16 nodes)] +] -46.7 MRshow +LT2 +0.00 0.39 0.00 C 2189 3004 M +327 0 V +605 2263 M +1311 584 L +706 25 V +706 1112 V +706 613 V +706 291 V +706 343 V +605 2263 Star +1311 584 Star +2017 609 Star +2723 1721 Star +3429 2334 Star +4135 2625 Star +4841 2968 Star +2352 3004 Star +% End plot #3 +% Begin plot #4 +1.000 UP +1.000 UL +LT3 +0.72 0.53 0.04 C LCb setrgbcolor +2123 2872 M +[ [(Helvetica) 140.0 0.0 true true 0 (Two sites/ 32 nodes)] +] -46.7 MRshow +LT3 +0.72 0.53 0.04 C 2189 2872 M +327 0 V +605 2203 M +1311 512 L +706 -41 V +706 576 V +706 390 V +706 448 V +706 161 V +605 2203 Box +1311 512 Box +2017 471 Box +2723 1047 Box +3429 1437 Box +4135 1885 Box +4841 2046 Box +2352 2872 Box +% End plot #4 +1.000 UL +LTb +605 3468 N +605 352 L +4236 0 V +0 3116 V +-4236 0 V +Z stroke +1.000 UP +1.000 UL +LTb +stroke +grestore +end +showpage +%%Trailer +%%DocumentFonts: Helvetica +%%Pages: 1 diff --git a/my_reference.bib b/my_reference.bib index 74b780a..12b779b 100644 --- a/my_reference.bib +++ b/my_reference.bib @@ -519,6 +519,8 @@ author = {Andreas Frommer and Daniel B. Szyld} issn = {1542-7730}, pages = {54--62}, numpages = {9}, + url = {http://doi.acm.org/10.1145/1095408.1095421}, + doi = {10.1145/1095408.1095421}, acmid = {1095421}, publisher = {ACM}, address = {New York, NY, USA} @@ -1071,4 +1073,42 @@ ISSN={1550-6533}, month={Oct} } - +@MISC{ref101, + title = {{TOP500 Supercomputers Sites}}, + url = {http://www.top500.org} +} + +@MISC{ref102, + title = {{U.S. Energy Information Administration, Annual Energy Outlook 2015}}, + url = {http://www.eia.gov/} +} + + +@ARTICLE{ref103, +author={Zapater, M. and Tuncer, O. and Ayala, J.L. and Moya, J.M. and Vaidyanathan, K. and Gross, K. and Coskun, A.K.}, +journal={Parallel and Distributed Systems, IEEE Transactions on}, +title={Leakage-Aware Cooling Management for Improving Server Energy Efficiency}, +year={2015}, +volume={26}, +number={10}, +pages={2764-2777}, +month={Oct} +} + +@inproceedings{ref104, + author = {Zapater, Marina and Ayala, Jose L. and Moya, Jos{\'e} M. and Vaidyanathan, Kalyan and Gross, Kenny and Coskun, Ayse K.}, + title = {Leakage and Temperature Aware Server Control for Improving Energy Efficiency in Data Centers}, + booktitle = {Proceedings of the Conference on Design, Automation and Test in Europe}, + year = {2013}, + isbn = {978-1-4503-2153-2}, + location = {Grenoble, France}, + pages = {266--269}, + numpages = {4}, + address = {San Jose, CA, USA} +} + +@MISC{ref105, + title = {{The Green500 List of Heterogeneous Supercomputing Systems}}, + url = {http://www.green500.org} +} + -- 2.39.5