]> AND Private Git Repository - ThesisAhmed.git/blob - CHAPITRE_01.tex
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
8c68324a2308d867a1567dd91081375b487ba80b
[ThesisAhmed.git] / CHAPITRE_01.tex
1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2 %%                          %%
3 %%       CHAPITRE 01        %%
4 %%                          %%
5 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6
7 \chapter{Parallel Architectures and  Iterative Applications}
8 \label{ch1}
9 %% Introduction
10 %\lettrine[lines=2]{A}{u} 
11
12 \section{Introduction}
13 \label{ch1:1}
14
15 Referred to the state of the art, specifically Von Neumann report in 1993 \cite{ref50}, most of the software applications are structured as sequential programs.
16 The structure of the program code is understandable by the human brain as a series of instructions that
17 are executed successively one after the other. For many years until a short time,
18 with each new generation of microprocessors,  users of  sequential applications have believed that these applications must run faster over them than previous ones.
19 Nowadays, this idea is no longer valid  since  recent releases of  microprocessors have many computing units that are embedded in one chip and  programs are  running  only over one computing unit sequentially.
20 Indeed, new applications have significantly improved  their performance over  new architectures in parallel compared to traditional applications.
21 In this context,  the aim of improving the performance  of parallel applications is executed simultaneously over all available  computing units. 
22  Furthermore, the concurrency revolution has been referred to the drastic improvement in the performance of new applications side by side to  new parallel architectures \cite{ref51}. Therefore, parallel applications and parallel architectures are closely tied together. 
23 Moreover, thinking about parallel applications is directly related to think about  parallel  hardware that  must support them. 
24 For example, the energy consumption of one parallel system mainly depends on both: (1) parallel applications and (2) parallel architectures. Indeed, an energy consumption model or any measurement system depends on many specifications, some of them are related to the  parallel hardware features such as: (1) the frequency of  processor, (2) the  power consumption of processor and (3) the communication model.  Others are relied to  the parallel application such as: (1) the computation time and (2) the communication time of the application. 
25
26
27 This work is focused on studying the iterative parallel  applications, where different parallel architectures
28 are used to run them in parallel, which is considered as ultimate goal to optimize their energy consumptions.   
29
30 In this context, this chapter gives a brief overview about parallel hardware architectures and  parallel iterative applications. Also, it discusses an energy model proposed by other authors used to measure the energy consumption of these applications. 
31 The reminder of this chapter is organized as follows: section \ref{ch1:2} describes different types of  parallelism and different types of  parallel platforms. It also explains some models of parallel programming.  Section \ref{ch1:3} discusses both types of parallel iterative methods, synchronous and asynchronous one and comparing them. Section \ref{ch1:4}, presents a well accepted energy model from the state of the art that can be used to measure the energy consumption of parallel iterative applications when  the frequency of  processor is changed. Finally, section \ref{ch1:5} summarizes this chapter.
32
33
34 \section{Parallel Computing  Architectures} 
35 \label{ch1:2}
36 The process of executing the calculations simultaneously is called  parallel computing.
37 Its main principle refers to the ability of dividing a large problem into a smaller sub-problems that can be solved at the same time \cite{ref2}. 
38 Mainly, solving  sub-problems of one main problem in  parallel computing is carried out on multiple parallel processors.
39 Indeed, parallel processor architecture can be defined as a computer system that is composed of many processing elements,
40 which are connected via network model in addition to  software tools that are required to make the processing units work together  \cite{ref1}.
41 In other words, the parallel computing architecture consists of a software and hardware resources. 
42 Hardware resources are: (1) the processing units, (2) the memory model and (3) the network system that is used to connect them. Software resources include (1) the specific operating system, (2) the programming language and (3) the compile or the runtime libraries. Besides,  parallel computing may have different levels of parallelism that can be performed in a software or a hardware level. In this context, five types of parallelism levels have been defined as follows:
43 \begin{itemize}
44
45 \item \textbf{Bit-level parallelism (BLP)}: The appearance of  very-large-scale integration (VLSI) in 1970s has been viewed as the first step towards  parallel computing. It is used to increase the number of bits  in the word size which is processed by a processor as illustrated in the figure~\ref{fig:ch1:1}. For many successive years, the number of bits have been increased starting from 4 bit to 64 bit microprocessors. For example nowadays, recent x86-64 architecture becomes the most familiar architecture. Noting that, the biggest word size is  the more parallelism level. Thus, it reflects to less instructions to be executed by a processor. 
46  
47 \begin{figure}[h!]
48 \centering
49 \includegraphics[scale=1]{fig/ch1/bits-para.pdf}
50 \caption{Bit-level parallelism }
51 \label{fig:ch1:1}
52 \end{figure}
53
54 \item \textbf{Data-level parallelism (DLP)}: Data parallelism is the process of distributing  data vector between different parallel processors, where each one performs the same operations on its data sub-vector. Therefore, many arithmetic operations can be performed on the same data vector in a simultaneous manner. This type of parallelism can be used in many programs, especially in the area of scientific computing. Usually, data-parallel operations are only provided to arrays operations, for example, as shown in figure \ref{fig:ch1:2}.  Vector multiplication, image and signal processing can be considered as an example of applications that use this type of parallelism. 
55
56 \begin{figure}[h!]
57 \centering
58 \includegraphics[scale=1]{fig/ch1/data-para.pdf}
59 \caption{Data-level parallelism }
60 \label{fig:ch1:2}
61 \end{figure}
62
63
64 \item \textbf{Instruction-level parallelism (ILP)}: Generally, a sequential program is composed of many instructions. These instructions can be executed in  parallel at the same time, if each of them is independent from  others. In particular, the parallelism can be achieved in  instruction level by using a pipeline. It means all independent instructions of a program are overlapped the execution of each others. For example, if we have two instructions: $I_1$ and $I_2$, they are independent if there is no control and no data dependency between them.
65 In pipeline stages, the execution of each instruction is divided into multiple steps. Then, they can be overlapped with the steps of other instructions by a pipeline hardware unit.
66 Figure~\ref{fig:ch1:3} demonstrates four instructions, where each one has four steps denoted as: (1) fetch, (2) decode, (3) execute and  (4) write. Thus, they are implemented in hardware units by pipeline. 
67
68 \begin{figure}[h!]
69 \centering
70 \includegraphics[scale=1]{fig/ch1/pipelines.pdf}
71 \caption{Instruction-level parallelism by pipelines}
72 \label{fig:ch1:3}
73 \end{figure}
74
75
76
77 \item \textbf{Thread-level parallelism (TLP)}: It is also known as  task-level parallelism.
78 According to  Moore’s law \cite{ref9}, the processor can have a number of transistors
79 that must doubled each two years to increase the frequency of processor, and consequently its improving 
80 performance. Besides, cache and main memory sizes  must be increased together to response to this new change. 
81 However, this provides some issues: (1) the first issue is related to drastically  increase in  cache size, which leads to a large access time. (2) the second issue is related to the huge increase in the number of the transistors per CPU, which  can increase significantly the heat dissipation. For that reasons,  programmers subdivided their programs into multiple tasks which can be then executed in parallel over distributed processors or shared multi-cores processors to improve the performance, see figure~\ref{fig:ch1:4}. Each processor can have individual threads or multiple threads dedicated to each task. A thread can be defined as a part of the parallel program that shares processor resources with other threads. 
82
83 \begin{figure}[h!]
84 \centering
85 \includegraphics[scale=1]{fig/ch1/thread-para.pdf}
86 \caption{Thread-level parallelism}
87 \label{fig:ch1:4}
88 \end{figure}
89
90 Therefore, the execution time of a sequential program that is composed of $N$ tasks, is the sum of the execution times of all tasks. Thus, it is expressed as  follows:
91
92 \begin{equation}
93 \label{ch1:eq1}
94     Sequential~execution~time = \sum_{i=1}^{N} T_i
95 \end{equation}
96
97 Whereas, if tasks are executed synchronously over multiple processing units in parallel, the execution time of the program is defined as the execution time of the task that has  maximum execution time (the slowest task) as follows:
98
99 \begin{equation}
100 \label{ch1:eq2}
101     Parallel~execution~time = \max_{i=1,\dots,N} T_i
102 \end{equation}
103
104 \item \textbf{Loop-level parallelism (LLP)}:
105 The numerical algorithms and many other algorithms are executed iteratively the same program portion,  computations, using different forms of the loop statements that are allowed in the programming languages. At each iteration, the program needs to scan a large data structure such as  array structure to perform the arithmetic calculations. Inside the loop structure, there are many instructions that are  dependent or independent. In a sequential loop execution,  the $i$ iteration must be executed after the completion of 
106 $(i-1)$ iteration. 
107 Whereas, if each iteration is independent from  others, then  all  iterations' instructions are distributed over many  processors to be executed in  parallel 
108 for example, see figure\ref{fig:ch1:5}. In the parallel programming languages, this type of loop is  called $parallel~loop$.
109
110 \begin{figure}[h!]
111 \centering
112 \includegraphics[scale=0.85]{fig/ch1/loop-para.pdf}
113 \caption{Loop-level parallelism}
114 \label{fig:ch1:5}
115 \end{figure}
116
117 The execution time of the parallel loop portion can be computed as 
118 the execution time of a sequential loop portion has $N_{iter}$ iterations divided by the number of the processing units $N_{processors}$ as follows:
119
120 \begin{equation}
121 \label{ch1:eq3}
122  Parallel~loop~time = \frac{Sequential~loop~time}{N_{processors}}
123                   =\frac{\sum_{i=1}^{N_{iter}} Time~of~iter_i}               
124                    {N_{processors}}
125 \end{equation}
126
127 For more details about the levels of parallelism see \cite{ref3,ref4,ref6,ref7}.
128 \end{itemize}
129
130 \subsection{Types of Parallel platforms} 
131 \label{ch1:2:1}
132 The main goal behind using parallel computer is to solve the bigger problem faster.
133 A collection of processing elements must  work together to perform the final solution of the main problem. However, many different architectures have been proposed  
134 and classified according to  parallelism in  instruction and data
135 streams. In 1966, Michel Flynn has proposed a simple model to categorize all computers  models that still useful until now \cite{ref10}. His taxonomy is based on considering the data and the operations performed on this data to produce four types of computer systems as follows:
136
137 \begin{itemize}
138  
139 \item \textbf{Single instruction, single data (SISD) stream}: A single processor that executes a single instruction stream (i.e executing one data stream stored in an individual memory model, see figure \ref{fig:ch1:6}). 
140 The conventional sequential computer, according to Von Neumann model, also called the Uniprocessors can de viewed as an example of this type.
141 \begin{figure}[h!]
142 \centering
143 \includegraphics[scale=1]{fig/ch1/sisd.pdf}
144 \caption{SISD machine architecture}
145 \label{fig:ch1:6}
146 \end{figure}
147  
148 \item \textbf{Single instruction, multiple data (SIMD) stream}: All  processors execute the same instructions on different data. 
149 Each processor stores the data in its local memory. Then, it communicates with each others typically via a simple communication model, see figure \ref{fig:ch1:7}. Many scientific and engineering
150 applications are referred to this type of parallel scheme.
151 Vector and array processors are well known  examples of this type. 
152 Examples about the applications executed over this architecture: (1) graphics processing, (2) video compression and (3) medical image analysis applications.
153
154 \begin{figure}[h!]
155 \centering
156 \includegraphics[scale=1]{fig/ch1/simd.pdf}
157 \caption{SIMD machine architecture}
158 \label{fig:ch1:7}
159 \end{figure}
160
161 \item \textbf{Multiple instruction, single data (MISD) stream}: Many operations from multiple processing elements are executed over the same data stream. Each processing element has its local memory to store the private program instructions. Then, these instructions are applied to unique global memory data stream as in figure \ref{fig:ch1:8}. While the MISD machine is not commonly used,  there are some interesting uses such as the systolic arrays and dataflow machines.
162
163 \begin{figure}[h!]
164 \centering
165 \includegraphics[scale=1]{fig/ch1/misd.pdf}
166 \caption{MISD machine architecture}
167 \label{fig:ch1:8}
168 \end{figure}
169
170
171 \item \textbf{Multiple instruction, Multiple data (MIMD) stream}: There are multiple processing elements, each one has a separate instruction  and  local data memories.
172 At any time, different processing elements may be used to execute different instructions on  different data fragment, see figure \ref{fig:ch1:9}. There are two types of MIMD machines: the shared memory and the message passing MIMD machines. 
173 In the former, processors are communicated via a shared memory model, while in the latter, each processor has its own local memory and all processors communicate with each other via a communication network model. The  multi-core processors, local clusters and grid systems are  some examples for  MIMD machine.
174 Many applications have been provided based on this architecture 
175 such as computer-aided design, computer-aided manufacturing, simulation, modeling, iterative applications and so on.
176
177  \begin{figure}[h!]
178 \centering
179 \includegraphics[scale=1]{fig/ch1/mimd.pdf}
180 \caption{MIMD machine architecture}
181 \label{fig:ch1:9}
182 \end{figure}
183 \end{itemize}
184  For more details about this architectural taxonomy see \cite{ref11,ref5,ref13,ref14}.
185
186 The work of this thesis is dedicated to MIMD machine's architecture. Therefore, we discuss in
187 this chapter some of the commonly used parallel architectures that belong to MIMD machines.
188 As explained before,  MIMD architectures can be classified into two types, the shared memory and the distributed message passing ones. Furthermore, these classifications are based on 
189 how MIMD processors access the memory model. The shared MIMD machine communication topology can be bus-based, extended or hierarchical type. Whereas, the distributed memory MIMD machine may have hypercube or mesh interconnected networks. In the following  some well known MIMD parallel computing platforms are explained:
190
191 \begin{itemize}
192 \item \textbf{Multi-core processors}:
193 The multi-core processor is a single chip component with two or more processing units. These processing units are called cores, which are connected to each other via a main memory model as in the figure \ref{fig:ch1:10}. Each individual core has its cache memory to store its data to execute different data or instruction streams in parallel. Moreover, each core may have  one or more threads to execute a specific programming task as shown in the thread-level parallelism. Historically, the multi-cores of the CPU began as a two-core processors, with an increase in the number of cores approximately by double with each semiconductor process generation \cite{ref12}. The very quick improvements in the performance and  the increase in the number of cores  are devoted in the graphics processing unit (GPU). A current exemplar of the GPU  is the NVIDIA  GeForce TITAN Z with 5700 cores in the year of 2015 \cite{ref17}. While, in the same year the general-purpose microprocessor (CPU) has been appeared with less number of the cores, for example the TILE-MX processor from Tilera has 100 cores  \cite{ref16}.
194 For more details about the multi-core processors see \cite{ref15}.
195
196 \begin{figure}[h!]
197 \centering
198 \includegraphics[scale=1]{fig/ch1/multicores.pdf}
199 \caption{Multi-core processor architecture}
200 \label{fig:ch1:10}
201 \end{figure}
202
203
204 \item \textbf{Local Cluster}:
205  is a collection of independent  computers that are connected
206 to each other  via standard network switches and cables, which is a high speed  
207 local area network (LAN) with low latency and big bandwidth. Moreover, each node is distributed from each other and communicates with other nodes  using distributed message passing model. All the nodes in the cluster must be controlled by one node called the master node, which is a specific node used to handle the scheduling and the management of the other nodes as shown in the figure \ref{fig:ch1:11}. Usually, the hardware specifications of all nodes are homogeneous in term of  computing power and memory. Thus, it is called tightly-coupled fashion. Also, each computing node in the cluster has the same copy of the operating system. See \cite{ref18, ref19} for more information about the cluster and its applications.
208
209 \begin{figure}[h!]
210 \centering
211 \includegraphics[scale=1]{fig/ch1/cluster.pdf}
212 \caption{Local cluster architecture}
213 \label{fig:ch1:11}
214 \end{figure}
215
216
217 \item \textbf{Grid (Distributed clusters)}:
218 Grid is a collection of local computing clusters from different sites that are connected via a wide area network (WAN), which can be appeared virtually to the benefit of users  to form a complete computing system  \cite{ref20}. 
219 In particular, different local clusters compose the grid are geographically located far away from each others. Usually, each local cluster is composed of homogeneous nodes, which are different from  nodes of the other clusters located in different sites. These nodes can be different in its hardware and software specifications (i.e its computing power, its memory size, its operating system and its local network latency and bandwidth. Figure \ref{fig:ch1:12} presents an example of a grid that is composed of three heterogeneous local clusters that are located in  different sites and  connected via a wide area network.  Furthermore, the grid can be referred to an infrastructure  that applies the integration and the collaboration by using  a collection  of different computers, networks, database servers  and scientific devices, which are belong to  many companies and universities. Therefore, wide heterogeneous computing resources are available to be used simultaneously by different user. Let's indicates that, the only bottleneck of the grid is the high latency communications between the nodes from different sites. The grid is also called the loosely-coupled fashion platform. However, the fault tolerance  is required to guarantee the process of sending and receiving  of messages between the computing nodes. Thus, it safely protects  all  messages against loss.
220
221 \begin{figure}[h!]
222 \centering
223 \includegraphics[scale=0.85]{fig/ch1/grid.pdf}
224 \caption{Grid architecture}
225 \label{fig:ch1:12}
226 \end{figure}
227
228
229 \begin{figure}[h!]
230 \centering
231 \includegraphics[scale=1]{fig/ch1/grid5000.pdf}
232 \caption{Grid5000's sites distribution in France and Luxembourg}
233 \label{fig:ch1:13}
234 \end{figure}
235 \end{itemize}
236
237
238 Grid'5000 \cite{ref21} can be considered as a good example of this distributed platform. 
239 It is a large-scale testbed that consists of ten sites distributed
240 all over metropolitan France and Luxembourg. These sites are: Grenoble, Lille, Luxembourg, Lyon, Nancy, Reims, Rennes , Sophia, Toulouse, Bordeaux. Figure \ref{fig:ch1:13} 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
241 National Telecommunication Network for Technology. Each site in the grid is
242 composed of a few heterogeneous computing clusters and each cluster contains
243 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
244 are connected via high speed local area networks. Two types of local networks
245 are used, Ethernet or Infiniband networks, which have different characteristics
246 in terms of bandwidth and latency.
247 Grid'5000 is dedicated as a test-bed for grid computing and thus users can book the required nodes from different sites. 
248 It also gives the opportunity to the users to deploy their configured image of the operating system over the reserved nodes.
249 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.
250
251
252 \subsection{Parallel programming Models} 
253 \label{ch1:2:2}
254 There are many parallel programming languages and libraries that have been developed 
255 to explore the computing power of the parallel architectures. In this section,
256 two types of parallel programming languages are investigated: (1) shared and (2) distributed programming models. Moreover, each  type is divided  into two subcategories according to their supporting level for the number of computing units from which  the parallel platform is composed.
257 Figure \ref{fig:ch1:14} presents this classification hierarchy of the parallel programming 
258 models. Three parallel language examples for each subcategory are shown.
259
260
261 \begin{figure}[h!]
262 \centering
263 \includegraphics[scale=0.75]{fig/ch1/classification.pdf}
264 \caption{The classification of the parallel Programming Models}
265 \label{fig:ch1:14}
266 \end{figure}
267
268
269 Many programming interfaces and libraries have been developed to compile and run the 
270 parallel applications over the parallel architectures. In the following, 
271 some examples for each type of the parallel programming models are discussed:
272
273 \begin{itemize}
274 \item \textbf{Local cluster programming models}
275   \begin{itemize}
276     \item \textbf{MPI} \cite{ref23} is the Message Passing Interface and it id considered as a 
277                       standardization 
278                       dedicated to message passing in a distributed memory environment.
279                       The first version of MPI was designed by a group of researchers in
280                       1991. It consist of a library,  not a language and its subroutines 
281                       can be called from many programming languages such as C, Fortran and 
282                       Java. Programmes that write in these languages and 
283                       compile their codes with ordinary compilers are directly  linked to MPI library.  
284                       library functions are not only limited to  peer to peer operations for 
285                       sending and receiving messages, also it is related to many others collective 
286                       operations such as gathering and reduction operations. MPI user, feels
287                       free from the network topology, synchronization and communication
288                       functionality between a group of processes. Furthermore, it has an
289                       asynchronous point to point operations, which make the computations 
290                       to overlap with communications. While MPI is not devoted to grid,
291                        \textbf{MPICH}  is one of the most 
292                       popular implementations of MPI dedicated for grid computing. It has been used
293                       as an extended version of MPI, which has been implemented for fault tolerance  
294                       \cite{ref52}. In this work, both  MPI and MPICH programming libraries 
295                       are used in programming of our algorithms and applications which are included
296                       inside both Fortran and C programming languages.  
297                       
298    \item \textbf{PVM} \cite{ref25} is included Parallel Virtual Machine,  composed of a collection 
299                       of software tools and libraries that allow users to work over a   
300                       heterogeneous set of machines to perform a single high performance 
301                       parallel platform. It is dedicated to a group of machines that are 
302                       distributed  heterogeneously the operating system environments. 
303                       The PVM system is elementary for parallel programming to be used with 
304                        C, C++, and Fortran  languages. 
305                       It supports more robustness in term of fault tolerance tan MPI. 
306                       Also, it is not complicated in term of adding or deleting the crashed
307                       nodes in the host pool  \cite{ref26}.
308                       On the other side, MPI supports more more communication messages and asynchronous 
309                       operations which are not allowed in PVM. 
310                        
311                       
312                       
313    \item \textbf{BLACS} \cite{ref27} is for Basic Linear Algebra Communication Subprograms.                 
314                  It consist of  a collection of libraries that are used to build a linear algebra message 
315                  communication model. Thus, it is effectively applied  over distributed memory architectures.
316                  The primary goal of using BLACS is mapping a linear set or processors or any distributed 
317                  machines into two dimensional arrays or grid. Indeed, it offers an easy tool to build the
318                  linear algebra based applications. 
319                  
320   \end{itemize} 
321   
322 \item \textbf{Grid programming models}
323   \begin{itemize}
324    \item \textbf{Gridsolve} \cite{ref28}  is the first middleware for  grid  and the
325                 high performance computing. It  supports  a good tool to solve complex
326                 scientific applications using distinct distributed machines. Also, it satisfies the
327                 fault tolerance and achieves the load balancing features to ensure the reliability of the
328                 applications  when running over a geographically distributed resources. 
329                 It can be integrated with different programming languages such as C, C++, Java and Fortran. 
330                 
331    \item \textbf{GLOBAS} \cite{ref29,ref30} is the most widely standardization toolkit
332                 for grid computing. It permits the users to share their computing resources securely. 
333                Since, the GLOBAS toolkit has the opportunity to work with grid, then it offers a fault 
334                 detection mechanism to ensure the delivery of  messages. 
335                 The first version of Globus toolkit has been appeared
336                 in 1998. Recently, the sixth version of this toolkit is available now \cite{ref31}. 
337                        
338
339   \item \textbf{Legion} \cite{ref32,ref33} is an object-based, meta-systems software project,
340                 invented by the University of Virginia on November 1997. 
341                 It ensures many features such as security, portability and fault tolerance.
342                 Moreover, it has been created to support a wide degree of parallelism under the use of  
343                 an easy programming tool to build  parallel applications.
344               
345         
346   \end{itemize}
347  
348 \item \textbf{Multi-core CPU programming models} 
349   \begin{itemize}
350    \item \textbf{OpenMP}  \cite{ref34} is a  parallel programming tool dedicated to shared memory 
351                 architectures. The main goal of using this programming model is to provide 
352                 a standard and portable API (application programming interface) to  write
353                 shared memory parallel programs. It can be used with many  programming languages such 
354                 as C, C++ and Fortran in order to support different types of shared memory platforms 
355                 such as multi-core processors.
356                 OpenMP uses multi-threading, which is a method of parallel programming 
357                 that uses a master thread to control a set of slave threads. Each
358                 thread can be executed in parallel by allocating it to one processor.  
359                 Moreover, OpenMP can be  used with MPI to support hybrid platforms which have 
360                 shared and distributed memory models at the same time.
361                 
362   \item \textbf{Cilk} \cite{ref13,ref35} is a linguistic and runtime technology for algorithmic 
363                 multi-threaded programming originally developed by MIT. 
364                 It allows the programmer to focus on building the program in a structured way 
365                 in order to discover the inherent parallelism. Many specifications are used in Cilk 
366                 such as  load balancing, synchronization and communication protocols. 
367                 
368                 
369                 
370             
371                 
372    \item \textbf{TBB} \cite{ref36} Abbreviation of Threading Building Blocks. It is a software library 
373                 used with 
374                 C++ programming language for multi-core parallel programming that has been developed by Intel.
375                 It works on the principle of dividing the computations into many tasks and
376                 executing them in parallel. 
377                 Also, It  has a management library to schedule the parallel task execution. 
378                 The only difference between OpenMP and TBB, is that TBB uses a task-based scheduling 
379                 mechanism. For that reason, TBB is more popular with C++ programming language than 
380                 other languages. Additionally, it has the ability to work with any compiler environments.
381                 Hence, it can be easily supported by any new platform. Therefore, TBB has been supported by 
382                 different types of operating systems and processors. 
383                 Noting that, it is still has some limitations to support vector processing architecture. 
384                 For this reason, it is connected with with OpenMP and Cilk to overcome this limitations.
385                
386   \end{itemize}
387   
388   
389   
390 \item \textbf{GPU programming models} 
391   \begin{itemize}
392    \item \textbf{CUDA} \cite{ref37} Modern graphical processing units (GPUs) have increased its chip-level  
393                        parallelism.  Current  NVIDIA  GPUs  consisted of many-cores processor that have 
394                        thousands of cores. According to this massively core parallelism, in 2007 the NVIDIA 
395                        has  developed CUDA as parallel programming  language, which is Compute Unified Device  
396                        Architecture.  A CUDA program has two parts: hosts and kernels.  The host  is a
397                        set of threads that are sequentially executed  over the CPU. 
398                        While, the kernel is a set of threads that can be executed in parallel over the GPUs.
399  
400    \item \textbf{OpenCL}\cite{ref38} is for Open Computing Language. It is a parallel 
401                        programming language dedicated for heterogeneous platform composed 
402                        of CPUs and GPUs. The first release of this language has initially developed by Apple  
403                        in 2008. Functions that are executed over OpenCL devices are called kernels, 
404                        which can be portable execute on any computing hardware such as CPU or GPU cores. 
405                        This parallel programming language supports the homogeneous shared memory 
406                        platforms and the multi-core processors by using one core for control 
407                        and the others for computing.
408                          
409    \item \textbf{HLSL} \cite{ref39} is named as the  High Level Shading Language and defined as the shader 
410                        programming language for Direct3D, which is a part of
411                        Microsoft’s DirectX API. It supports the shader design with 
412                        C language syntax, types, expressions, statements, and functions and it 
413                        provides a graphical pipeline parallelism.
414                        The last version of HLSL is the version 5.0 of DirectX 11, which has added a new 
415                        general-purpose GPU functions like CUDA. Recently, the new OpenCL 
416                        version has started to replace CUDA as a multi-platform GPU language.
417                                    
418   \end{itemize}
419  
420 \end{itemize}
421
422
423 \section{Iterative Methods} 
424 \label{ch1:3}
425 Numerical methods are defined as a scientific computation methods to solve linear and non-linear problems.
426 Most of the numerical problems can be represented by a mathematical equation form with relations between its components. For example, solving linear equations which are well known in the scientific  area is generally expressed in the following form:
427
428 \begin{equation}
429   \label{eq:linear}
430  A x = b
431 \end{equation}
432
433 Where $A$ is a two dimensional matrix of size $N \times N$, $x$ is the unknown vector,
434 and $b$ is a vector of constant, each of size $N$. There are two types of solution methods to solve this linear system.
435 The first method is called \textbf{Direct methods}, which consist of a finite number of steps depending on the 
436 size  of the linear system to give the exact solution. If the problem size is very big, these methods are expensive or their
437 solutions are impossible in some cases.  The second type is called \textbf{Iterative methods}, which computes 
438 the same block of  operations  several times, starting from the initial vector until reaching  the acceptable 
439 approximation  of the exact solution. However, the iterative methods are faster than direct methods and can be 
440 effectively applied in parallel. Moreover, iterative methods can be used to solve both  linear and non-linear equations.
441 In our work, we are interested to paralleize the iterative methods because they are more popular and more efficient than  direct ones.
442
443 The sequential iterative algorithm is typically organized as a series of steps essentially  of the form:
444
445 \begin{equation}
446   \label{eq:iter}
447    X^{(k+1)} \longleftarrow F(X^k) 
448 \end{equation}
449
450 Where $F$ is one or set of operations applied to the data vector $X^k$ to produce the new data vector $X^{(k+1)}$. The operation $F$ is applied sequentially many times until satisfying the convergence condition as in the   algorithm \ref{sia}.
451
452
453
454 \begin{algorithm}[h!]
455 \begin{algorithmic}[1]
456   
457     \State Initialize the vector $X^0$ randomly  
458     \For {$k:=1$  to \textit{convergence}}
459     
460       \State $X^{(k+1)} = F(X^k)$ 
461    \EndFor
462    \end{algorithmic}
463    \caption{The iterative sequential algorithm}
464   \label{sia}
465    
466 \end{algorithm}
467
468 The sequential iterative algorithm at each iteration computes the value of the relative error, which is called the residual and denoted as $R$. This error value is the maximum difference  between the  data components of the vectors of the last two successive iterations as follows:
469
470  \begin{equation}
471   \label{eq:res}
472    R = \max_{i=1, \dots, N}  \abs{X_i^{(k+1)} - X_i^k}
473 \end{equation}  
474 Where $N$ is the size of the vector $X$. Then, the iterative sequential algorithm stops its iterations if the maximum error between the last two successive solution vectors, as in \ref{eq:res}, is less than or equal to  some threshold values. Otherwise, it replaces the new vector $X^{(k+1)}$ with the old vector $X^k$ and computes the new iteration.
475
476 \subsection{Synchronous Parallel Iterative method} 
477 \label{ch1:3:1}
478 The sequential iterative algorithm \ref{sia}, can be parallelized by executing it on many computing units. To solve this algorithm on $M$ computing units, first the elements of the problem vector $X$ must be subdivided into $M$ sub-vectors, $X^k=(X_1^k,\dots,X_M^k)$. 
479 Each sub-vector can be solved  independently on one computing unit as follows:
480
481 \begin{equation}
482   \label{eq:subvector}
483    X_i^{k+1}= F_i(X_1^k,\dots,X_M^k)  \hspace{1cm} where \hspace{0.2cm} i=1,\dots, M
484 \end{equation}
485
486 Where $X_i^k$ is the sub-vector executed over the $i^{th}$ computing unit at the iteration $k$.
487
488 \begin{algorithm}[h!]
489 \begin{algorithmic}[1]
490   
491   \State Initialize the sub-vectors $(X_1^0,\dots,X_M^0)$ randomly  
492     \For {$k:=1$  step $1$ to \textit{convergence}}
493        \For {$i:=1$   to \textit{M}}
494         \State $X^{(k+1)} = F(X^k)$
495       \EndFor
496     \EndFor  
497
498    
499    \end{algorithmic}
500    \caption{The synchronous parallel iterative algorithm}
501   \label{spia}
502 \end{algorithm}
503
504
505 The algorithm \ref{spia}, represents the synchronous parallel iterative algorithm. Similarly to 
506 the sequential iterative algorithm \ref{spia}, this algorithm stops its iterations when the convergence condition  is satisfied and it computes the residual value $R$ as follows: 
507
508 \begin{equation}
509  \label{eq:res_syn}
510    R = \max_{i=1, \dots, M}  (\max_{j=1, \dots, m}\abs{X_{ij}^{(k+1)} - X_{ij}^k})
511 \end{equation}
512 This algorithm needs to satisfy some convergence condition which  is called the  global convergence condition. In order to detect the global convergence overall computing units, first we need to compute
513 at each iteration the local residual and store it in the local variable at the computing unit $i$. Then at the end of each iteration, all the local residuals  from $M$ computing units must be reduced to one maximum  value represented by the  global residual, which represents the global maximum errors overall maximum local errors from $M$ computing units. Where $m$ is the size of the $i$  sub-vector.
514 For example, in MPI this operation is directly applied using a high level communication procedure  called \textit{AllReduce}. The goal of this communication procedure is to apply the reduction operation on all local variables computed by the computing units.
515
516
517 \begin{figure}[h!]
518 \centering
519 \includegraphics[scale=0.75]{fig/ch1/sisc.pdf}
520 \caption{The SICS Model}
521 \label{fig:ch1:15}
522 \end{figure}
523
524
525 In the synchronous iterative algorithm, computing processors need to communicate with each others to 
526 exchange data at each iteration. Algorithm \ref{spia} can used synchronous iterations and synchronous communications  denoted as \textbf{SISC} model.  At each iteration, the computing processor waits until 
527 it  receives all the  computed data at the previous iteration from other processors to perform the next iteration. This type of communication model uses if there is a dependency between the parallel tasks. Figure \ref{fig:ch1:15}, shows that using SICS model in a heterogeneous platform may result in a big period  of the idle times represented by the white dashed spaces between two successive iterations. Indeed, this happens when the faster computing processor waits for the slower ones to finish their iterations to be able to synchronously send its data to them. 
528 Using this operation, faster processors wast a big amount of their computing power and thus their energy consumption.
529 The increase in the heterogeneity level between  computing powers of the computing processors may increase propositionally these idle times.
530 Accordingly, this algorithm is effectively implemented over a local cluster, where a high speed local network is used to reduce these idle times.  
531
532
533 \begin{figure}[h!]
534 \centering
535 \includegraphics[scale=0.75]{fig/ch1/siac.pdf}
536 \caption{The SIAS Model}
537 \label{fig:ch1:16}
538 \end{figure}
539
540 Furthermore, the communications of the synchronous iterative algorithm can be implemented asynchronously. Therefore, this algorithm is called  Synchronous Iteration and Asynchronous 
541 Communication  and denoted as \textbf{SIAC} algorithm. The main principle of this algorithm is to use a synchronized iterations while exchanging the data between the computing units asynchronously.
542 Moreover, each computing unit doesn't need to wait for its neighbours to receive the data messages 
543 that it has sent, while it only waits to receive  data from them. This can be implemented with SISC algorithm that is programmed in MPI by replacing the synchronous send of the messages by asynchronous ones, while keeping  
544 the synchronous receive. The only advantage of this technique is to reduce the idle times between iterations by allowing the communications to overlap partially
545 with computations, see figure \ref{fig:ch1:16}. The idle times are not totally eliminated  because the
546 fast computing nodes must  wait for slow ones to send their data messages. 
547 SISC and SIAC algorithms are not tolerated to the loss of data messages. Consequently, if one node is crashed,  all the other computing nodes are blocked together and all the system is crashed.
548
549
550  
551 \subsection{Asynchronous Parallel Iterative method} 
552 \label{ch1:3:2}
553 The asynchronous iterations mean that all processors perform their iterations without considering the works of  other processors. Each processor doesn't have to wait to receive 
554 data messages from  other processors and continues to compute the next iteration depending on its own data received at a specific time. While all processors don't have  to wait 
555 for data delivery from each other, there are not existence of the idle times at all between the iterations as in figure \ref{fig:ch1:17}.  This figure indicates that  fast processors can perform more iterations than  others at the same time. 
556 Hence, the asynchronous iterative algorithm that uses an asynchronous communications  is called  \textbf{AIAC} algorithm. Similarly to the SISC algorithm, the AIAC algorithm subdivides the global vectors $X$ into $M$ sub-vectors between the computing units. The main difference between the two algorithms is that these $M$ sub-vectors are not updated at each iteration in the AIAC algorithm because both  iterations and communications are asynchronous. 
557 However, there are two mechanisms to update  data vectors in AIAC algorithm which are:
558  \begin{itemize}
559  \item  The local vectors can be updated randomly on the order of $M$ computing units.
560         Indeed,  some of these local vectors may be not able to update at a certain time. 
561  \item  According to the time period $t$, each computing unit checks if one of its 
562         dependencies components has been updated. If the computing node detects any update, 
563         then it updates its own local vector data using the last received data messages.
564         Otherwise, nothing is occurred at the time $t$.
565  \end{itemize}
566
567
568 \begin{figure}[h!]
569 \centering
570 \includegraphics[scale=0.75]{fig/ch1/aiac.pdf}
571 \caption{The AIAC Model}
572 \label{fig:ch1:17}
573 \end{figure}
574
575 The global convergence of the parallel iterative method depends on the scientific application.
576 For more information about the convergence detection techniques of the asynchronous iterative methods, refer to \cite{ref40,ref41,ref42,ref43} for more details. 
577
578
579 The implementation of the AIAC method is not easy, but it gives many advantages over the traditional synchronous iterative method. These features can be summarized as follows:
580
581 \begin{itemize}
582 \item It prevents the existence of the  idle times, since each processor doesn't have to wait 
583       for  others to receive the data messages. Then, there are no idle times between each two  
584       successive iterations.
585       
586 \item Less sensitive for the heterogeneous communications and nodes' computing powers. In heterogeneous 
587       platform, the faster nodes don't need to wait for the slow ones, so it can  perform more iterations compared 
588       to them. While in the traditional synchronous iterative methods, the fast computing nodes perform the same 
589       number of iterations as the slow ones because they are blocked together. 
590
591 \item The loss of the data messages is totally tolerant because each computing unit can not to be 
592       blocked by others. If the message is lost, the destination node doesn't have to wait  
593       for this data message and it uses the last received data to perform its iteration  
594       independently.
595       
596 \item In the distributed grid architecture, the local clusters from different sites are 
597       connected via slow network with a high latency. On the other hand, the use of the AIAC model 
598       reduces the delay of sending the data message over such slow network link and thus the performance 
599       of  applications is improved.
600 \end{itemize}
601
602
603 In addition to the difficulty of applying the asynchronous iterative method, it has some 
604 disadvantages that can be summarized by these points:
605
606 \begin{itemize}
607 \item It is not compatible with all types of the iterative applications because some of these 
608       applications need to receive  data messages from its neighbours at each iteration.   
609       Therefore, they required a fix number of iterations to converge. Otherwise, the 
610       application performs  an infinity number of iterations which provides a system crash.
611  
612 \item The application of an asynchronous iterative method requires more iterations compared 
613       to the synchronous ones to converge  when it is executed over the local cluster. 
614       The increase in the number of iterations may increase proportionally 
615       the execution time of the application. 
616       Especially, the local computing cluster uses a high speed network, then running the 
617       synchronous version over such platform is quicker to converge.
618     
619 \item While the process  doesn't receive the new data messages at each iteration, the mechanism of 
620        synchronous iterative methods for detecting the global convergence cannot be used for 
621       asynchronous ones. Therefore, in AIAC algorithm a process can perform many iterations    
622       without receiving any data messages from its neighbours. The absence of receiving new 
623       data messages makes the data component invariant at the computing units and thus it provides 
624       a false local convergence. This means that the local residual value is less than the   
625       required threshold. This fake convergence is conflicted at the reception of the first data message 
626       because the local subsystem will locally diverge after computing the next iteration. 
627       Therefore, special mechanisms are required for detecting the global convergence of a parallel 
628       iterative algorithm implemented according to the asynchronous iteration model.
629
630
631 \end{itemize}
632
633 Generally, the interested readers can find more details about both of synchronous and asynchronous 
634 iterative methods in \cite{ref44,ref45}.
635
636 In our works, we are interested to implement both synchronous and asynchronous 
637 iterative methods to solve different problems over local homogeneous cluster, local heterogeneous cluster and distributed grid. Accordingly, the process of optimizing their energy consumptions and their performance is the main objective of this work as will be discussed in the next chapters. 
638
639
640 \section{The energy consumption model of the parallel applications } 
641 \label{ch1:4}
642
643 Many researchers~\cite{ref46,ref47,ref48,ref49} divide the power consumed by a processor into
644 two power metrics:  static power and  dynamic power.  The first one is
645 consumed as long as the computing unit is on, the latter is only consumed during
646 computation times.  The dynamic power $P_{dyn}$ is related to the switching
647 activity $\alpha$, load capacitance $C_L$, the supply voltage $V$ and
648 operational frequency $F$, as shown in EQ~(\ref{eq:pd}).
649 \begin{equation}
650   \label{eq:pd}
651   P_\textit{dyn} = \alpha \cdot C_L \cdot V^2 \cdot F
652 \end{equation}
653 The static power $P_{static}$ captures the leakage power as follows:
654 \begin{equation}
655   \label{eq:ps}
656    P_\textit{static}  = V \cdot N_{trans} \cdot K_{design} \cdot I_{leak}
657 \end{equation}
658 Where V is the supply voltage, $N_{trans}$ is the number of transistors,
659 $K_{design}$ is a design dependent parameter and $I_{leak}$ is a
660 technology-dependent parameter.  
661
662
663 The dynamic voltage and frequency scaling technique (\textbf{DVFS}) is a process that is allowed in modern processors to reduce the dynamic
664 power by scaling down the voltage and frequency.  Its main objective is to
665 reduce the overall energy consumption of the CPU~\cite{ref77}.  The operational frequency $F$
666 depends linearly on the supply voltage $V$ as follows:
667 \begin{equation} 
668 \label{eq:v}
669 V = \beta \cdot F
670 \end{equation}
671
672  Where $\beta$ is some of constant.  This equation is used to study the change of the dynamic
673 voltage with respect to various frequency values in~\cite{ref47}.  The reduction
674 process of the frequency can be expressed by the scaling factor $S$ which is the
675 ratio between the maximum and the new frequency as in EQ~(\ref{eq:s}).
676 \begin{equation}
677   \label{eq:s}
678  S = \frac{F_\textit{max}}{F_\textit{new}}
679 \end{equation}
680 The value of the scaling factor $S$ is greater than 1 when changing the
681 frequency of the CPU to any new frequency value~(\emph{P-state}) in the
682 governor.  The CPU governor is an interface driver supplied by the operating
683 system's kernel to lower a core's frequency \cite{ref8}.  
684
685 Depending on the equation \ref{eq:s}, the new frequency $F_{new}$ can be calculates as follows:
686
687 \begin{equation}
688   \label{eq:fnew}
689   F_\textit{new}= S^{-1} \cdot  F_\textit{max}
690 \end{equation}
691
692
693 Replacing $V$  in \ref{eq:pd} as in \ref{eq:v} gives the following equation of the dynamic power consumption
694 as a function of the constant $\beta$ instead of $V$: 
695
696 \begin{equation}
697   \label{eq:pd-beta}
698    P_{dyn}= \alpha \cdot C_L \cdot (\beta \cdot F) ^2 \cdot  F  =\alpha \cdot C_L \cdot \beta^2 \cdot  F^3
699 \end{equation}
700
701 Replacing $F_{new}$ in \ref{eq:pd-beta} as in \ref{eq:fnew} gives the following equation for dynamic power consumption:
702
703 \begin{multline}
704   \label{eq:pdnew}
705    P_{dynNew} = \alpha \cdot C_L \cdot \beta^2 \cdot  F_{new}^3 = 
706    \alpha \cdot C_L \cdot \beta^2 \cdot  F_{max}^3 \cdot S^{-3} =
707    \alpha \cdot C_L \cdot (\beta \cdot  F_{max})^2 \cdot F_{max} \cdot S^{-3} \\
708    {} =\alpha \cdot C_L \cdot V^2 \cdot F_{max} \cdot S^{-3} = P_{dyn} \cdot S^{-3}
709 \end{multline}
710
711 Where $P_{dynNew}$  and $P_{dyn}$ are the  dynamic power consumed with the
712 new frequency and the maximum frequency respectively.
713
714 According to (\ref{eq:pdnew}) the dynamic power is reduced by a factor of
715 $S^{-3}$ when reducing the frequency of a processor by a factor of $S$.
716 The energy consumption is measured in Joule, and can be calculated by
717 multiplying the power consumption, measured in watts, by the  execution time of the program as follows:
718
719 \begin{equation}
720   \label{eq:E}
721   Energy = Power \cdot T
722 \end{equation}
723
724 According to the equation \ref{eq:E}, the dynamic energy consumption of the program executed in the time $T$ over one processor is the dynamic power multiply by the execution time. Moreover, the frequency scaling factor $S$ increases the execution time of the processor linearly, then the new dynamic energy consumption can be computed as follows:
725
726 \begin{equation}
727   \label{eq:Edyn}
728    E_{dynNew} = P_{dyn} \cdot S^{-3} \cdot (T \cdot S)= S^{-2} \cdot P_{dyn} \cdot  T
729 \end{equation}
730
731
732 According to \cite{ref46,ref47}, the static power consumption $P_{static}$  does not changed when the frequency of the processors is scaled down. Therefore, the static energy consumption can be computed as follows:
733 \begin{equation}
734   \label{eq:Estatic}
735    E_{static} = S \cdot  P_{static}  \cdot T
736 \end{equation}
737
738
739 Therefore, the energy consumption of the individual task running over one processor 
740 is the sum of both static and dynamic energies that  can be computed as follows:
741 \begin{equation}
742  \label{eq:Eind}
743   E_{ind} =  E_{dynNew} + E_{static} = S^{-2} \cdot P_{dyn} \cdot  T + S \cdot  P_{static}  \cdot T
744 \end{equation}
745
746  
747 Depending on \ref{eq:Eind}, the total energy consumption of $N$  parallel task  running on $N$ processors is the summation  of the individual energies consumed by all processors. This model is developed and used by  Rauber and Rünger~\cite{ref47}. They modeled 
748 the total energy consumption for parallel tasks running on a homogeneous platform by sorting the execution time of the all parallel tasks in a descending order, then their model can be  written as a function of the scaling factor $S$, as in EQ~(\ref{eq:energy}).
749
750 \begin{equation}
751   \label{eq:energy}
752   E_\textit{~all~tasks} = P_\textit{dyn} \cdot S_1^{-2} \cdot
753     \left( T_1 + \sum_{i=2}^{N} \frac{T_i^3}{T_1^2} \right) +
754     P_\textit{static} \cdot T_1 \cdot S_1 \cdot N
755  \hfill
756 \end{equation}
757
758 Where $N$ is the number of parallel tasks, $T_i$  for $i=1,\dots,N$ are
759 the execution times of the sorted tasks.  Therefore, $T1$ is
760 the time of the slowest task, and $S_1$ its scaling factor which should be the
761 highest because they are proportional to the time values $T_i$. 
762 Finally, model \ref{eq:energy}  can be used to measure the energy consumed by any parallel application such as the iterative parallel applications with respect to the new scaled frequency value. 
763
764 There are two drawbacks of this energy model as follows:
765 \begin{itemize}
766 \item The message passing iterative program consists of the communication and computation times.
767       This energy model is assumed that the dynamic power consumes during both these times.
768       While the processor during the communication times involved remain idle and only consumes the static 
769       power, for more details see \cite{ref53}. 
770
771
772 \item It is not well adapted to a heterogeneous architectures when there are different 
773       types of the processors, which are consumed different dynamic and static powers. Then, this model is 
774       not able to measure the energy consumption of all the parallel systems  because it depends on 
775       one value for the static and dynamic powers.
776 \end{itemize}
777
778 Therefore, one of the more important goals of this work is to develop a new energy models that 
779 must be taken into consideration the communication times in addition to the  computation times in order to modelize and measure the energy consumptions of the parallel iterative methods. These models must be suitable to efficiently integrate with all parallel architectures such as the homogeneous and heterogeneous platforms, with its  local or distributed computing clusters.  
780
781 \section{Conclusion}
782 \label{ch1:5}
783 In this chapter, three sections have been presented to describe the parallel hardware architectures, parallel iterative applications and the energy consumption model used to measure the energies of these applications. 
784 The different types of parallelism levels that can be implemented in  software and hardware techniques have been explained in the first section. Furthermore, different types of  parallel architectures have been discussed and classified according to the connection between the computation units and the memory model.  
785 Both  shared and distributed platforms as well as its depending parallel programming models have been categorized.
786 In the second section, the two types of parallel iterative methods: synchronous and asynchronous ones are investigated.
787 The synchronous iterative methods are well implemented over local homogeneous cluster with a high speed network link, while the asynchronous iterative methods are more conventional to implement over the distributed heterogeneous clusters. 
788 Finally, in the third section, an energy consumption model proposed in the state of the art to  measure the energy consumption of parallel applications is explained. This model  cannot be used for all types of parallel architectures. Since, it assumes  to measure the dynamic power during both of the communication and computation times, while the processor involved remains idle during the communication times and  only consumes the static power. Moreover, it is not well adapted to  heterogeneous architectures when there are different types of the processors, that consume different dynamic and static powers at the same time.
789
790 For these reasons, in the next chapters of this thesis a new energy consumption models are developed to effectively integrate in modeling and measuring the energy consumptions by parallel iterative methods running on both homogeneous and heterogeneous architectures.  Additionally, these energy models are used in a method to optimize  both  energy consumption and performance of the iterative message passing applications.