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

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