From 064df3f39aeb33bbb4e16e4b8c8b5eb46efecd3f Mon Sep 17 00:00:00 2001
From: "baptiste.coudray" <baptiste.coudray@etu.hesge.ch>
Date: Fri, 23 Jul 2021 07:18:27 +0200
Subject: [PATCH] Updated doc

---
 src/config.yaml                        |  18 ++--
 src/figs/simple_automate.png           | Bin 12291 -> 12414 bytes
 src/my.bib                             | 111 +++----------------------
 src/templates/default.latex            |  12 +--
 src/text/00-preface.md                 |   2 +-
 src/text/01-references.md              |   2 +
 src/text/02-introduction.md            |   1 +
 src/text/03-programmation-parallele.md |   4 +-
 src/text/04-mpi.md                     |   2 +
 src/text/05-futhark.md                 |  12 +--
 src/text/06-mpi-x-futhark.md           |  13 +--
 src/text/07-automate-elementaire.md    |  40 ++++++---
 src/text/08-jeu-de-la-vie.md           |  26 +++---
 src/text/09-lattice-boltzmann.md       |   8 +-
 src/text/ZZ-glossaire.tex              |   1 +
 15 files changed, 97 insertions(+), 155 deletions(-)

diff --git a/src/config.yaml b/src/config.yaml
index 3ce788d..834079e 100644
--- a/src/config.yaml
+++ b/src/config.yaml
@@ -1,27 +1,27 @@
 ---
 author:
   - Baptiste Coudray
-title: "FUTHARK-MPI : LE CALCUL HAUTE PERFORMANCE DISTRIBUÉ POUR LES GENS" # Le titre de votre travail
-smallTitle: "LE CALCUL HAUTE PERFORMANCE DISTRIBUÉ POUR LES GENS" # Le "petit" titre de votre travail, càd le titre qui sera affiché en haut de chaque page
-institute: Haute École du Paysage, d'Ingénierie et d'Architecture de Genève
+title: "Futhark-MPI: Distributed High-Performance Computing For People"
+smallTitle: "Distributed High-Performance Computing For People"
+institute: University of Applied Sciences and Arts Western Switzerland
 name: Baptiste
 surname: Coudray
-keywords: [ HEPIA, Rapport, bachelor, Futhark, MPI, Programmation parallèle ]
-orientation: logicielle
-projectMonth: Mars
+keywords: [Report, bachelor, HEPIA, HESSO]
+orientation: Software and Complex Systems
+projectMonth: August
 year: 2021
 sensei: "Dr. Orestis Malaspinas"
 frontLogoLegend: "Jeu de la vie" # La légende de l'image de couverture
 frontLogoSourceURL: "https://upload.wikimedia.org/wikipedia/commons/e/e5/Gospers_glider_gun.gif" # La source de l'image de couverture
-workTitle: "Travail de bachelor"
+workTitle: "Bachelor thesis"
 workFor: "..."
 bibliography: my.bib
 csl: iso690.csl
-biblio-title: Références documentaires
+biblio-title: Bibliographical references
 link-citations: true
 autoSectionLabels: false
 autoEqnLabels: true
-lang: fr
+lang: en
 documentclass: report
 papersize: A4
 cref: false
diff --git a/src/figs/simple_automate.png b/src/figs/simple_automate.png
index 26a180559c12381a574ab5de24e929c7765b6aa6..4dbb2ece7c6e98fb84dea290376fdd25ed3f39d2 100644
GIT binary patch
delta 11780
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
TWm7o=0|SGntDnm{r-UW|YIThr

delta 11656
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

diff --git a/src/my.bib b/src/my.bib
index 4d6eefd..e63c6fa 100644
--- a/src/my.bib
+++ b/src/my.bib
@@ -12,7 +12,6 @@ Depuis 2020, une nouvelle version de {MPI} est disponible, {MPI}-4, qui apporte
 	urldate = {2021-07-22},
 	date = {2021-03-17},
 	langid = {french},
-	note = {Page Version {ID}: 180967726},
 	file = {Snapshot:/Users/baptistecdr/Zotero/storage/GLQPSHE4/index.html:text/html},
 }
 
@@ -30,54 +29,26 @@ Depuis 2020, une nouvelle version de {MPI} est disponible, {MPI}-4, qui apporte
 @inreference{noauthor_amdahls_2021,
 	title = {Amdahl's law},
 	rights = {Creative Commons Attribution-{ShareAlike} License},
-	url = {https://en.wikipedia.org/w/index.php?title=Amdahl%27s_law&oldid=1034193438},
+	url = {https://en.wikipedia.org/w/index.php?title=Amdahl%27s_law},
 	abstract = {In computer architecture, Amdahl's law (or Amdahl's argument) is a formula which gives the theoretical speedup in latency of the execution of a task at fixed workload that can be expected of a system whose resources are improved. It is named after computer scientist Gene Amdahl, and was presented at the {AFIPS} Spring Joint Computer Conference in 1967.
-Amdahl's law is often used in parallel computing to predict the theoretical speedup when using multiple processors. For example, if a program needs 20 hours to complete using a single thread, but a one-hour portion of the program cannot be parallelized, therefore only the remaining 19 hours (p = 0.95) of execution time can be parallelized, then regardless of how many threads are devoted to a parallelized execution of this program, the minimum execution time cannot be less than one hour. Hence, the theoretical speedup is limited to at most 20 times the single thread performance, 
-  
-    
-      
-        
-          (
-          
-            
-              
-                
-                  1
-                  
-                    1
-                    −
-                    p
-                  
-                
-              
-            
-            =
-            20
-          
-          )
-        
-      
-    
-    \{{\textbackslash}displaystyle {\textbackslash}left(\{{\textbackslash}dfrac \{1\}\{1-p\}\}=20{\textbackslash}right)\}
-  .},
+Amdahl's law is often used in parallel computing to predict the theoretical speedup when using multiple processors. For example, if a program needs 20 hours to complete using a single thread, but a one-hour portion of the program cannot be parallelized, therefore only the remaining 19 hours (p = 0.95) of execution time can be parallelized, then regardless of how many threads are devoted to a parallelized execution of this program, the minimum execution time cannot be less than one hour. Hence, the theoretical speedup is limited to at most 20 times the single thread performance,
+},
 	booktitle = {Wikipedia},
 	urldate = {2021-07-22},
 	date = {2021-07-18},
 	langid = {english},
-	note = {Page Version {ID}: 1034193438},
 	file = {Snapshot:/Users/baptistecdr/Zotero/storage/4KJVD4JN/index.html:text/html},
 }
 
 @inreference{noauthor_gustafsons_2021,
 	title = {Gustafson's law},
 	rights = {Creative Commons Attribution-{ShareAlike} License},
-	url = {https://en.wikipedia.org/w/index.php?title=Gustafson%27s_law&oldid=1031307338},
+	url = {https://en.wikipedia.org/w/index.php?title=Gustafson%27s_law},
 	abstract = {In computer architecture, Gustafson's law (or Gustafson–Barsis's law) gives the theoretical speedup in latency of the execution of a task at fixed execution time that can be expected of a system whose resources are improved. It is named after computer scientist John L. Gustafson and his colleague Edwin H. Barsis, and was presented in the article Reevaluating Amdahl's Law in 1988.},
 	booktitle = {Wikipedia},
 	urldate = {2021-07-22},
 	date = {2021-06-30},
 	langid = {english},
-	note = {Page Version {ID}: 1031307338},
 	file = {Snapshot:/Users/baptistecdr/Zotero/storage/FGKVKJQD/index.html:text/html},
 }
 
@@ -124,35 +95,33 @@ Amdahl's law is often used in parallel computing to predict the theoretical spee
 @inreference{noauthor_jeu_2021,
 	title = {Jeu de la vie},
 	rights = {Creative Commons Attribution-{ShareAlike} License},
-	url = {https://fr.wikipedia.org/w/index.php?title=Jeu_de_la_vie&oldid=183190635},
+	url = {https://fr.wikipedia.org/w/index.php?title=Jeu_de_la_vie},
 	abstract = {Le jeu de la vie est un automate cellulaire imaginé par John Horton Conway en 1970 et qui est probablement le plus connu de tous les automates cellulaires. Malgré des règles très simples, le jeu de la vie est Turing-complet.
 Le jeu de la vie est un jeu de simulation au sens mathématique plutôt que ludique. Bien que n'étant pas décrit par la théorie des jeux, certains le décrivent comme un « jeu à zéro joueur ».},
 	booktitle = {Wikipédia},
 	urldate = {2021-07-22},
 	date = {2021-05-23},
 	langid = {french},
-	note = {Page Version {ID}: 183190635},
 	file = {Snapshot:/Users/baptistecdr/Zotero/storage/HDKB5PPW/index.html:text/html},
 }
 
 @inreference{noauthor_automate_2021,
 	title = {Automate cellulaire},
 	rights = {Creative Commons Attribution-{ShareAlike} License},
-	url = {https://fr.wikipedia.org/w/index.php?title=Automate_cellulaire&oldid=183026782},
+	url = {https://fr.wikipedia.org/w/index.php?title=Automate_cellulaire},
 	abstract = {Un automate cellulaire consiste en une grille régulière de « cellules » contenant chacune un « état » choisi parmi un ensemble fini et qui peut évoluer au cours du temps. L'état d'une cellule au temps t+1 est fonction de l'état au temps t d'un nombre fini de cellules appelé son « voisinage ». À chaque nouvelle unité de temps, les mêmes règles sont appliquées simultanément à toutes les cellules de la grille, produisant une nouvelle « génération » de cellules dépendant entièrement de la génération précédente.
 Étudiés en mathématiques et en informatique théorique, les automates cellulaires sont à la fois un modèle de système dynamique discret et un modèle de calcul. Le modèle des automates cellulaires est remarquable par l'écart entre la simplicité de sa définition et la complexité que peuvent atteindre certains comportements macroscopiques : l'évolution dans le temps de l'ensemble des cellules ne se réduit pas (simplement) à la règle locale qui définit le système. À ce titre il constitue un des modèles standards dans l'étude des systèmes complexes.},
 	booktitle = {Wikipédia},
 	urldate = {2021-07-22},
 	date = {2021-05-18},
 	langid = {french},
-	note = {Page Version {ID}: 183026782},
 	file = {Snapshot:/Users/baptistecdr/Zotero/storage/L5L9W28B/index.html:text/html},
 }
 
 @inreference{noauthor_programmation_2021,
 	title = {Programmation fonctionnelle},
 	rights = {Creative Commons Attribution-{ShareAlike} License},
-	url = {https://fr.wikipedia.org/w/index.php?title=Programmation_fonctionnelle&oldid=183271341},
+	url = {https://fr.wikipedia.org/w/index.php?title=Programmation_fonctionnelle},
 	abstract = {La programmation fonctionnelle est un paradigme de programmation de type déclaratif qui considère le calcul en tant qu'évaluation de fonctions mathématiques.
 Comme le changement d'état et la mutation des données ne peuvent pas être représentés par des évaluations de fonctions la programmation fonctionnelle ne les admet pas, au contraire elle met en avant l'application des fonctions, contrairement au modèle de programmation impérative qui met en avant les changements d'état.
 Un langage fonctionnel est donc un langage de programmation dont la syntaxe et les caractéristiques encouragent la programmation fonctionnelle. Alors que l'origine de la programmation fonctionnelle peut être trouvée dans le lambda-calcul, le langage fonctionnel le plus ancien est Lisp, créé en 1958 par {McCarthy}. Lisp a donné naissance à des variantes telles que Scheme (1975) et Common Lisp (1984) qui, comme Lisp, ne sont pas ou peu typées. Des langages fonctionnels plus récents tels {ML} (1973), Haskell (1987), {OCaml}, Erlang, Clean et Oz, {CDuce}, Scala (2003), F\# ou {PureScript} (2013), Agda (en)  sont fortement typés.},
@@ -160,77 +129,17 @@ Un langage fonctionnel est donc un langage de programmation dont la syntaxe et l
 	urldate = {2021-07-22},
 	date = {2021-05-26},
 	langid = {french},
-	note = {Page Version {ID}: 183271341},
 	file = {Snapshot:/Users/baptistecdr/Zotero/storage/Z4UFD79Y/index.html:text/html},
 }
 
 @inreference{noauthor_maximum_2021,
 	title = {Maximum subarray problem},
 	rights = {Creative Commons Attribution-{ShareAlike} License},
-	url = {https://en.wikipedia.org/w/index.php?title=Maximum_subarray_problem&oldid=1030176929},
-	abstract = {In computer science, the maximum sum subarray problem is the task of finding a contiguous subarray with the largest sum, within a given one-dimensional array A[1...n] of numbers.  Formally, the task is to find indices 
-  
-    
-      
-        i
-      
-    
-    \{{\textbackslash}displaystyle i\}
-   and 
-  
-    
-      
-        j
-      
-    
-    \{{\textbackslash}displaystyle j\}
-   with 
-  
-    
-      
-        1
-        ≤
-        i
-        ≤
-        j
-        ≤
-        n
-      
-    
-    \{{\textbackslash}displaystyle 1{\textbackslash}leq i{\textbackslash}leq j{\textbackslash}leq n\}
-  , such that the sum
-
-  
-    
-      
-        
-          ∑
-          
-            x
-            =
-            i
-          
-          
-            j
-          
-        
-        A
-        [
-        x
-        ]
-      
-    
-    \{{\textbackslash}displaystyle {\textbackslash}sum \_\{x=i\}{\textasciicircum}\{j\}A[x]\}
-  is as large as possible. (Some formulations of the problem also allow the empty subarray to be considered; by convention, the sum of all values of the empty subarray is zero.)  Each number in the input array A could be positive, negative, or zero.For example, for the array of values [−2, 1, −3, 4, −1, 2, 1, −5, 4], the contiguous subarray with the largest sum is [4, −1, 2, 1], with sum 6.
-Some properties of this problem are: 
-
-If the array contains all non-negative numbers, then the problem is trivial; a maximum subarray is the entire array.
-If the array contains all non-positive numbers, then a solution is any subarray of size 1 containing the maximal value of the array (or the empty subarray, if it is permitted).
-Several different sub-arrays may have the same maximum sum.This problem can be solved using several different algorithmic techniques, including brute force, divide and conquer, dynamic programming, and reduction to shortest paths.},
+	url = {https://en.wikipedia.org/w/index.php?title=Maximum_subarray_problem},
+	abstract = {In computer science, the maximum sum subarray problem is the task of finding a contiguous subarray with the largest sum, within a given one-dimensional array A[1...n] of numbers.  Formally, the task is to find indices},
 	booktitle = {Wikipedia},
 	urldate = {2021-07-22},
 	date = {2021-06-24},
 	langid = {english},
-	note = {Page Version {ID}: 1030176929},
 	file = {Snapshot:/Users/baptistecdr/Zotero/storage/LL8NK2KY/index.html:text/html},
-}
\ No newline at end of file
+}
diff --git a/src/templates/default.latex b/src/templates/default.latex
index 0678481..a1924a1 100644
--- a/src/templates/default.latex
+++ b/src/templates/default.latex
@@ -248,7 +248,7 @@ $endif$
   contents={%
     \small{$name$, $surname$ - $smallTitle$ - $workTitle$ - $projectMonth$ $year$}
   },
-  position={3.9, 0.5}
+  position={8, 1}
 }
 % END OF CUSTOM PACKAGE ROUTINES
 
@@ -304,8 +304,8 @@ $endif$
 
 \begin{document}
 % Nom conformes des tables
-\renewcommand*\listfigurename{Liste des illustrations}
-\renewcommand*\listtablename{Liste des tableaux}
+\renewcommand*\listfigurename{List of illustrations}
+\renewcommand*\listtablename{List of tables}
 % Sets the page numbering style to roman
 %\pagestyle{headings}
 \setcounter{page}{1}
@@ -339,19 +339,19 @@ $endif$
     }
 
     \vspace{1mm}
-    \Large{$workTitle$ présenté par}\\
+    \Large{$workTitle$ defended by}\\
     \vspace{1mm}
     \textbf{\Large{$author$}}\\
     \vspace{2mm}
 
     \vspace{3mm}
-    \textbf{\Large{Ingénierie des technologies de l’information avec orientation en $orientation$}}
+    \textbf{\Large{Information technologies engineering with a specialisation in $orientation$}}
 
     \vspace{3mm}
     \large{\textbf{$projectMonth$ $year$}}\\
     \vspace{5mm}
     \begin{tabular}{ p{6cm} }
-      \multicolumn{1}{c}{Professeur HES responsable}\\
+      \multicolumn{1}{c}{Referent HES teacher}\\
       \multicolumn{1}{c}{\textbf{$sensei$}}\\
     \end{tabular}
 \end{center}
diff --git a/src/text/00-preface.md b/src/text/00-preface.md
index de32563..3c0516f 100644
--- a/src/text/00-preface.md
+++ b/src/text/00-preface.md
@@ -14,7 +14,7 @@ I would like to thank the people who helped me during this project:
 \begin{figure} \vspace{.1cm} \begin{center} \includegraphics[width=3.72cm,height=2.4cm]{figs/front-logo.png}
 \end{center} \end{figure} \begin{tabular}{ p{3cm} p{1cm} p{1cm} p{6cm} } \multicolumn{1}{l}{Candidate:}& & &
 \multicolumn{1}{l}{Referent teacher:}\\ \multicolumn{1}{l}{\textbf{Baptiste Coudray}} & & &
-\multicolumn{1}{l}{\textbf{Dr. Orestis Malaspinas}} \\ \multicolumn{1}{l}{Field of study: Information technologies engineering} & & &
+\multicolumn{1}{l}{\textbf{Dr. Orestis Malaspinas}} \\ \multicolumn{1}{l}{Field of study: Information Technologies Engineering} & & &
 \multicolumn{1}{l}{} \\ \end{tabular}
 
 \pagebreak
diff --git a/src/text/01-references.md b/src/text/01-references.md
index dbe3e2e..e09af76 100644
--- a/src/text/01-references.md
+++ b/src/text/01-references.md
@@ -4,6 +4,8 @@
 
 \listoffigures
 
+\listoftables
+
 #### Reference of the URLs {-}
 
 \begin{tabular}{ p{3cm} p{9cm} } \multicolumn{1}{l}{URL01} &
diff --git a/src/text/02-introduction.md b/src/text/02-introduction.md
index d3aeb14..f8b8713 100644
--- a/src/text/02-introduction.md
+++ b/src/text/02-introduction.md
@@ -5,6 +5,7 @@
 Today, most computers are equipped with GPUs. They provide more and more computing cores and have become fundamental embedded high-performance computing tools. In this context, the number of applications taking advantage of these tools seems low at first glance. The problem is that the development tools are heterogeneous, complex, and strongly dependent on the GPU running the code. Futhark is an experimental, functional, and architecture agnostic language; that is why it seems relevant to study it.  It allows generating code allowing a standard sequential execution (on a single-core processor), on GPU (with CUDA and OpenCL backends), on several cores of the same processor (shared memory). To make it a tool that could be used on all high-performance platforms, it lacks support for distributed computing. This work aims to develop a library that can port any Futhark code to an MPI library with as little effort as possible.
 
 To achieve that, we introduce the interest of parallelization --, then what is MPI and Futhark. We decide to implement a library that can parallelize cellular automaton in, one, two or three dimensions. By adding Futhark on top of MPI, the programmer will have the possibilities to compile his code in :
+
 * parallelized-sequential mode,
 * parallelized-multicore mode,
 * parallelized-OpenCL mode,
diff --git a/src/text/03-programmation-parallele.md b/src/text/03-programmation-parallele.md
index d7c1e26..41d241a 100644
--- a/src/text/03-programmation-parallele.md
+++ b/src/text/03-programmation-parallele.md
@@ -8,7 +8,7 @@ In parallel computing, two important laws give the theoretical speedup that can
 
 \cimg{figs/amdahls-law.png}{scale=0.6}{Amdahl's law}{Source: Taken from https://commons.wikimedia.org/, ref. URL02}
 
-Amdahl's law states that the program's overall speed is limited by the code that cannot be parallelized. Indeed, there will almost always be a sequential part in a code that cannot be parallelized. There is, therefore, a relationship between the ratio of parallelizable code and the overall execution speed of the program. [@noauthor_amdahls_2021]
+Amdahl's law states that the program's overall speed is limited by the code that cannot be parallelized. Indeed, there will almost always be a sequential part in a code that cannot be parallelized. There is, therefore, a relationship between the ratio of parallelizable code and the overall execution speed of the program [@noauthor_amdahls_2021].
 
 In the graph above, we notice that if:
 
@@ -21,7 +21,7 @@ In the graph above, we notice that if:
 
 \cimg{figs/gustafson-law.png}{scale=0.75}{Gustafson–Barsis's law}{Source: Taken from https://commons.wikimedia.org/, ref. URL03}
 
-Gustafson's law says that the more significant the amount of data to be processed, the more advantageous it is to use many processors. Thus, the acceleration is linear, as can be seen on the graph.[@noauthor_gustafsons_2021]
+Gustafson's law says that the more significant the amount of data to be processed, the more advantageous it is to use many processors. Thus, the acceleration is linear, as can be seen on the graph [@noauthor_gustafsons_2021].
 On the graph, we notice, for example, that with a code that is 90% parallelized, we have a speedup of at least x100 with 120 processors, where Amdahl's law estimated a maximum speedup of x10 with 512 processors. Gustafson's law is therefore much more optimistic in terms of performance gain.
 
 \pagebreak
diff --git a/src/text/04-mpi.md b/src/text/04-mpi.md
index 0d4c46b..daa45fe 100644
--- a/src/text/04-mpi.md
+++ b/src/text/04-mpi.md
@@ -79,3 +79,5 @@ Process 4 received token -1 from process 3
 Process 0 received token -1 from process 4
 ```
 Thus, we can see that the processes exchange the token each in turn until node zero receives the token again.
+
+\pagebreak
diff --git a/src/text/05-futhark.md b/src/text/05-futhark.md
index 6d345fd..910c022 100644
--- a/src/text/05-futhark.md
+++ b/src/text/05-futhark.md
@@ -13,17 +13,19 @@ The main goal of Futhark is to write generic code that can compile into either:
 
 Although a Futhark code can compile into an executable, this feature reserves for testing purposes because there is no (+^IO). Thus, the main interest is to write particular functions that you would like to speed up thanks to parallel programming and compile in library mode to use in a C program.
 
-To see the performance of Futhark, Here is an example from the Futhark site that compares the resolution time of the (+^MSS) problem. The (+^MSS) problem is the task of finding a contiguous subarray with the largest sum, within a given one-dimensional array A[1...n] of numbers.[@noauthor_maximum_2021]
+\pagebreak
+
+To see the performance of Futhark, Here is an example from the Futhark site that compares the resolution time of the (+^MSS) problem. The (+^MSS) problem is the task of finding a contiguous subarray with the largest sum, within a given one-dimensional array A[1...n] of numbers [@noauthor_maximum_2021].
 
-\cimg{figs/mss_bench.png}{scale=0.60}{MSS runtime (lower is better)}{Source: Taken from https://futhark-lang.org/performance.html, ref. URL04}
+\cimg{figs/mss_bench.png}{scale=0.35}{MSS runtime (lower is better)}{Source: Taken from https://futhark-lang.org/performance.html, ref. URL04}
 
-This graph shows performance of a maximum segment sum implementation in Futhark and Thrust (a C++ library developed by NVIDIA for (+^GPU) programming). The sequential runtime is for Futhark code compiled to sequential (+^CPU) code and the Futhark runtime is for code compiled to (+^CUDA).[@henriksen_gotta_2021] As we can see, the Futhark version is much faster than the sequential and Thrust versions, which justify using this language in this project.
+This graph shows performance of a maximum segment sum implementation in Futhark and Thrust (a C++ library developed by NVIDIA for (+^GPU) programming). The sequential runtime is for Futhark code compiled to sequential (+^CPU) code and the Futhark runtime is for code compiled to (+^CUDA) [@henriksen_gotta_2021]. As we can see, the Futhark version is much faster than the sequential and Thrust versions, which justify using this language in this project.
 
 \pagebreak
 
 ## Example 1
 
-To better understand Futhark, here is a simple example: calculating the factorial of a number. [@henriksen_basic_2021].
+To better understand Futhark, here is a simple example: calculating the factorial of a number [@henriksen_basic_2021].
 
 ```
 let fact (n: i32): i32 = reduce (*) 1 (1...n)
@@ -113,7 +115,7 @@ The program's execution with the factorial of 12 returns the correct value, i.e.
 
 Functional programming is a programming paradigm that considers computation as an evaluation of
 mathematical functions. The origin of functional programming comes from lambda-calculus, a formal system
-invented by Alonzo Church where everything is a function. [@noauthor_programmation_2021]
+invented by Alonzo Church where everything is a function [@noauthor_programmation_2021].
 
 This paradigm avoids side effects by prohibiting the change of the value of a variable that is not defined in the current scope. Thus, it facilitates concurrent programming because shared variables cannot be modified, which reduces the bugs resulting from concurrent programmings, such as data race conditions.
 
diff --git a/src/text/06-mpi-x-futhark.md b/src/text/06-mpi-x-futhark.md
index a5a8afd..fc795dd 100644
--- a/src/text/06-mpi-x-futhark.md
+++ b/src/text/06-mpi-x-futhark.md
@@ -1,10 +1,10 @@
 # Automate cellulaire
 
-A cellular automaton consists of a regular grid of cells, each in one of a finite number of states. The grid can be in any finite number of dimensions. For each cell, a set of cells called its neighborhood is defined relative to the specified cell. An initial state (time $t = 0$) is selected by assigning a state for each cell. A new generation is created (advancing t by 1), according to some fixed rule (generally, a mathematical function) that determines the new state of each cell in terms of the current state of the cell and the states of the cells in its neighborhood. Typically, the rule for updating the state of cells is the same for each cell and does not change over time. [@noauthor_automate_2021]
+A cellular automaton consists of a regular grid of cells, each in one of a finite number of states. The grid can be in any finite number of dimensions. For each cell, a set of cells called its neighborhood is defined relative to the specified cell. An initial state (time $t = 0$) is selected by assigning a state for each cell. A new generation is created (advancing t by 1), according to some fixed rule (generally, a mathematical function) that determines the new state of each cell in terms of the current state of the cell and the states of the cells in its neighborhood. Typically, the rule for updating the state of cells is the same for each cell and does not change over time [@noauthor_automate_2021].
 
 The neighborhood of a cell is defined either by the Moore neighborhood or by the Von Neumann neighborhood. The first one defines that a cell has in a two-dimensional cellular automaton eight neighbors while the second one, four.
 
-\cimg{figs/neighbours.png}{scale=0.60}{Comparison between Von Neumann (left) and Moore (right) neighborhoods}{Source: Created by Baptiste Coudray}
+\cimg{figs/neighbours.png}{scale=0.5}{Comparison between Von Neumann (left) and Moore (right) neighborhoods}{Source: Created by Baptiste Coudray}
 
 The grid on the left represents the Von Neumann neighborhood, i.e., the four neighbors of a cell. These are denoted by the four cardinal points (north, west, south, east).
 The grid on the right represents Moore's neighborhood, i.e., the eight neighbors of a cell. These are denoted by the four cardinal points and the four inter-cardinal points (northwest, southwest, southeast, northeast).
@@ -19,7 +19,8 @@ These values are valid for a cellular automaton of dimension two and a Chebyshev
 
 ## MPI x Futhark
 
-Our library allows parallelizing cellular automata automatically so that the programmer only has to write the Futhark function to update his cellular automaton. Our library supports cellular automata of one, two, and three dimensions. The use of the Futhark language allows to quickly update the state of the cellular automaton thanks to the different backend available. Therefore, several modes are available:
+Our library allows parallelizing cellular automata automatically so that the programmer only has to write the Futhark function to update his cellular automaton. Our library supports cellular automata of one, two, and three dimensions and with any types of data. The use of the Futhark language allows to quickly update the state of the cellular automaton thanks to the different backend available. Therefore, several modes are available:
+
 * parallelized-sequential, the Futhark code executes sequentially,
 * parallelized-multicore, the Futhark code executes concurrently to POSIX threads,
 * parallelized-OpenCL/CUDA, the Futhark code executes on the graphics card.
@@ -29,6 +30,8 @@ Our library allows parallelizing cellular automata automatically so that the pro
 Communication between the different MPI tasks is necessary to recover the missing neighbors and recreate the complete cellular automaton. Therefore, we create a virtual Cartesian topology. 
 "*A virtual topology is a mechanism for naming the processes in a communicator in away that fits the communication pattern better. The main aim of this is to make sub-sequent code simpler. It may also provide hints to the run-time system which allow it to optimise the communication or even hint to the loader how to configure the processes. The virtual topology might also gain us some performance benefit.*" [@macdonald_writing_nodate]
 
+\pagebreak
+
 #### One dimension
 
 \cimg{figs/communication_1d.png}{scale=0.60}{Example of Cartesian virtual topology in one dimension}{Source: Created by Baptiste Coudray}
@@ -72,9 +75,9 @@ For example, a cellular automaton of size $4 \times 4 \times 4$, each process ha
 The envelope of a chunk represents the missing neighbours of the cells at the extremities of the chunk. These missing cells are needed to compute the next iteration of the chunk of the cellular automaton that the process has.
 
 #### One dimension
-\cimg{figs/envelope_1d.png}{scale=0.60}{Example of the envelope of a chunk in one dimension}{Source: Created by Baptiste Coudray}
+\cimg{figs/dispatch_1d.png}{scale=0.60}{Example of the envelope of a chunk in one dimension}{Source: Created by Baptiste Coudray}
 
-In one dimension, the Moore neighborhood of a cell includes the west-neighbor and the east-neighbor. Using the previously described one-dimensional cellular automaton, we notice that the envelope of $R_n$ includes the last cell of $R_{(n-1) % N}$ and the first cell of $R_{(n+1) % N}$. Thus, the ranks exchange data via MPI using the Cartesian virtual topology.
+In one dimension, the Moore neighborhood of a cell includes the west-neighbor and the east-neighbor. Using the previously described one-dimensional cellular automaton, we notice that the envelope of $R_{n}$ includes the last cell of $R_{(n-1) \% N}$ and the first cell of $R_{(n+1) \% N}$. Thus, the ranks exchange data via MPI using the Cartesian virtual topology.
 
 #### Two dimensions
 
diff --git a/src/text/07-automate-elementaire.md b/src/text/07-automate-elementaire.md
index 0587694..0ab8a4e 100644
--- a/src/text/07-automate-elementaire.md
+++ b/src/text/07-automate-elementaire.md
@@ -1,6 +1,6 @@
 # Simple Cellular Automaton
 
-The simplest non-trivial cellular automaton that can be conceived consists of a one-dimensional grid of cells that can take only two states ("0" or "1"), with a neighborhood consisting, for each cell, of itself and the two cells adjacent to it. [@noauthor_automate_2021]
+The simplest non-trivial cellular automaton that can be conceived consists of a one-dimensional grid of cells that can take only two states ("0" or "1"), with a neighborhood consisting, for each cell, of itself and the two cells adjacent to it [@noauthor_automate_2021].
 
 There are $2^3 = 8$ possible configurations (or patterns, rules) of such a neighborhood. In order for the cellular automaton to work, it is necessary to define what the state must be at the next generation of a cell for each of these patterns. The 8 rules/configurations defined is as follows:
 
@@ -14,7 +14,9 @@ There are $2^3 = 8$ possible configurations (or patterns, rules) of such a neigh
 | 6 | 1 | 0 | 1 | 0
 | 7 | 1 | 1 | 0 | 0
 | 8 | 1 | 1 | 1 | 0
-Table: <Evolution rules for a cellule in a one dimensional cellular-automaton>
+Table: Evolution rules for a cellule in a one dimensional cellular-automaton
+
+\pagebreak
 
 ## Example
 
@@ -29,7 +31,7 @@ Iteration 0 is the initial state and only cell two is alive. To perform the next
 
 ## Parallelized version
 
-With the created library, we implement the cellular automaton previously described. To do this, we create a Futhark `elementary.fut` file, which is used to calculate the next state of a part of the cellular automaton.
+With the created library, we implement this (+^SCA) previously described. To do this, we create a Futhark `elementary.fut` file, which is used to calculate the next state of a part of the cellular automaton.
 
 ```
 let compute_next_elems [n] (chunk_elems :[n]i8) :[]i8 = ...
@@ -42,11 +44,14 @@ entry next_chunk_elems [n] (chunk_elems :[n]i8) :[]i8 =
 Therefore, the `elementary.fut` file contains only a function that applies the rules on the cellular automaton. Note that the function returns the cellular automaton without the envelope.
 
 ```c
-void compute_next_chunk_board(struct dispatch_context *dc, struct futhark_context *fc, chunk_info_t *ci) {
-    struct futhark_i8_1d *fut_chunk_with_envelope = get_chunk_with_envelope(dc, fc, 1, futhark_new_i8_1d);
+void compute_next_chunk_board(struct dispatch_context *dc, 
+        struct futhark_context *fc, chunk_info_t *ci) {
+    struct futhark_i8_1d *fut_chunk_with_envelope = 
+            get_chunk_with_envelope(dc, fc, 1, futhark_new_i8_1d);
     
     struct futhark_i8_1d *fut_next_chunk_elems;
-    futhark_entry_next_chunk_elems(fc, &fut_next_chunk_elems, fut_chunk_with_envelope);
+    futhark_entry_next_chunk_elems(fc, &fut_next_chunk_elems, 
+                                   fut_chunk_with_envelope);
     futhark_context_sync(fc);
     
     futhark_values_i8_1d(fc, fut_next_chunk_elems, ci->data);
@@ -60,7 +65,8 @@ int main(int argc, char *argv[]) {
 
     const int N_ITERATIONS = 100;
     int elems_dimensions[1] = {600};
-    struct dispatch_context *disp_context = dispatch_context_new(elems_dimensions, MPI_INT8_T, 1);
+    struct dispatch_context *disp_context = 
+            dispatch_context_new(elems_dimensions, MPI_INT8_T, 1);
     chunk_info_t ci = get_chunk_info(disp_context);
     init_chunk_elems(&ci);
 
@@ -78,6 +84,7 @@ Finally, a C file `main.c` is needed to create the program's entry point. We ini
 
 We perform benchmarks to validate the scalability of our one-dimensional parallelization when compiling in sequential, multicore, (+^OpenCL), or (+^CUDA) mode. The benchmarks are performed on the HES-GE cluster (Baobab/Yggdrasil).
 The sequential and multicore benchmarks are performed as follows:
+
 * the cellular automaton is $300,000,000$ cells in size,
 * the number of tasks varies between $2^0$ and $2^7$,
 * 15 measurements are performed, one measurement corresponds to one iteration,
@@ -93,7 +100,7 @@ The sequential and multicore benchmarks are performed as follows:
 | 32 | 20.938 [s] | ± 0.007 [s] | x31.4 | 15 |
 | 64 | 11.071 [s] | ± 0.024 [s] | x59.4 | 15 |
 | 128 | 5.316 [s] | ± 0.191 [s] | x123.7 | 15 |
-Table: <Results for the parallelized-sequential version of Simple Cellular Automaton>
+Table: Results for the parallelized-sequential version of SCA
 
 | Number of tasks | Average [s] | Standard Derivation [s] | Speedup | Number of measures |
 |:---:|:---:|:---:|:---:|:---:|
@@ -105,9 +112,11 @@ Table: <Results for the parallelized-sequential version of Simple Cellular Autom
 | 32 | 25.776 [s] | ± 0.725 [s] | x27.5 | 15 |
 | 64 | 12.506 [s] | ± 0.554 [s] | x56.7 | 15 |
 | 128 | 5.816 [s] | ± 0.045 [s] | x121.8 | 15 |
-Table: <Results for the parallelized-multicore version of Simple Cellular Automaton>
+Table: Results for the parallelized-multicore version of SCA
+
+\pagebreak
 
-\cimg{figs/elem_result_and_speedup_cpu.png}{width=\linewidth}{Benchmarks of the simple cellular automaton in parallelized-sequential/multicore}{Source: Realized by Baptiste Coudray}
+\cimg{figs/elem_result_and_speedup_cpu.png}{width=\linewidth}{Benchmarks of the SCA in parallelized-sequential/multicore}{Source: Realized by Baptiste Coudray}
 
 Sur le graphique de gauche, nous comparons le temps d'exécution moyen pour chaque tâche et pour chaque version (sequential et multicore). Sur le graphique de droite, nous comparons le speedup idéal avec le speedup de la version parallelized-sequential et multicore. 
 
@@ -116,12 +125,15 @@ The more we increase the number of tasks, the more the execution time is reduced
 ## GPU Benchmark
 
 The (+^OpenCL) and (+^CUDA) benchmarks are performed as follows:
+
 * the cellular automaton has $300'000'000$ cells,
 * the number of tasks varies between $2^0$ and $2^6$.
 * 15 measurements are performed, one measurement corresponds to one iteration,
 * the iteration is computed $50'000$ times.
 * From $2^0$ to $2^3$ tasks, an NVIDIA GeForce RTX 3090 is allocated for each task; beyond that, the eight graphics cards are shared equally among the ranks.
 
+\pagebreak
+
 | Number of tasks | Number of GPUs | Average [s] | Standard Derivation [s] | Speedup | Number of measures |
 |:---:|:---:|:---:|:---:|:---:|:---:|
 | 1 | 1 | 166.086 [s] | ± 0.096 [s] | x1.0 | 15 |
@@ -131,7 +143,7 @@ The (+^OpenCL) and (+^CUDA) benchmarks are performed as follows:
 | 16 | 8 | 31.675 [s] | ± 0.056 [s] | x5.2 | 15 |
 | 32 | 8 | 43.65 [s] | ± 0.102 [s] | x3.8 | 15 |
 | 64 | 8 | 67.096 [s] | ± 0.118 [s] | x2.5 | 15 |
-Table: <Results for the parallelized-OpenCL version of Simple Cellular Automaton>
+Table: Results for the parallelized-OpenCL version of SCA
 
 | Number of tasks | Number of GPUs | Average [s] | Standard Derivation [s] | Speedup | Number of measures |
 |:---:|:---:|:---:|:---:|:---:|:---:|
@@ -142,9 +154,11 @@ Table: <Results for the parallelized-OpenCL version of Simple Cellular Automaton
 | 16 | 8 | 30.749 [s] | ± 0.069 [s] | x5.2 | 15 |
 | 32 | 8 | 42.352 [s] | ± 0.117 [s] | x3.8 | 15 |
 | 64 | 8 | 65.228 [s] | ± 0.042 [s] | x2.5 | 15 |
-Table: <Results for the parallelized-CUDA version of Simple Cellular Automaton>
+Table: Results for the parallelized-CUDA version of SCA
+
+\pagebreak
 
-\cimg{figs/elem_result_and_speedup_gpu.png}{width=\linewidth}{Benchmarks of the simple cellular automaton in parallelized-OpenCL/CUDA}{Source: Realized by Baptiste Coudray}
+\cimg{figs/elem_result_and_speedup_gpu.png}{width=\linewidth}{Benchmarks of the SCA in parallelized-OpenCL/CUDA}{Source: Realized by Baptiste Coudray}
 
 With this performance test, we notice that the computation time is essentially the same in OpenCL as in CUDA. Moreover, the parallelization follows the ideal speedup curve when the number of processes equals the number of graphics cards. However, when the eight graphics cards are shared, the speedup in OpenCL/CUDA crashes, and the computation time increases.
 
diff --git a/src/text/08-jeu-de-la-vie.md b/src/text/08-jeu-de-la-vie.md
index 5bb0a5f..7b41a76 100644
--- a/src/text/08-jeu-de-la-vie.md
+++ b/src/text/08-jeu-de-la-vie.md
@@ -5,15 +5,15 @@ The Game of Life is a zero-player game designed by John Horton Conway in 1970. I
 1. a cell has eight neighbors,
 2. a cell can be either alive or dead,
 3. a dead cell with exactly three living neighbors becomes alive,
-4. a living cell with two or three living neighbors stays alive; otherwise, it dies. [@noauthor_jeu_2021]
-
-\pagebreak
+4. a living cell with two or three living neighbors stays alive; otherwise, it dies [@noauthor_jeu_2021].
 
 ## Example
 
 \cimg{figs/gol_blinker1.png}{scale=0.40}{First state of blinker}{Source: Taken from
 \url{https://commons.wikimedia.org/}, ref. URL05. Re-created by Baptiste Coudray}
 
+\pagebreak
+
 A basic example is a blinker:
 
 * the cell (one, one) and (one, three) die because they have seven dead neighbors and one living neighbor (rule n°4),
@@ -24,8 +24,6 @@ A basic example is a blinker:
 
 Thus, after the application of the rules, the horizontal line becomes a vertical line. Then, at the next iteration, the vertical line becomes a horizontal line again.
 
-\pagebreak
-
 ## Parallelized version
 
 We create the game of life with our library to test it with a two-dimensional cellular automaton.
@@ -36,6 +34,7 @@ The code is relatively the same as the previous example; therefore, it is not ex
 We perform benchmarks to validate the scalability of our two-dimensional parallelization when compiling in sequential, multicore, (+^OpenCL), or (+^CUDA) mode. The benchmarks are performed on the (+^HES-GE) cluster (Baobab/Yggdrasil).
 
 The sequential and multicore benchmarks are performed as follows:
+
 * the cellular automaton is $900,000,000$ cells in size,
 * the number of tasks varies between $2^0$ and $2^7$,
 * 15 measurements are performed, one measurement corresponds to one iteration,
@@ -51,7 +50,7 @@ The sequential and multicore benchmarks are performed as follows:
 | 32 | 100.422 [s] | ± 0.068 [s] | x34.6 | 15 |
 | 64 | 55.986 [s] | ± 1.587 [s] | x62.0 | 15 |
 | 128 | 28.111 [s] | ± 0.263 [s] | x123.5 | 15 |
-*Array of results for the parallelized-sequential version*
+Table: Results for the parallelized-sequential version of Game of Life
 
 | Number of tasks | Average [s] | Standard Derivation [s] | Speedup | Number of measures |
 |:---:|:---:|:---:|:---:|:---:|
@@ -63,23 +62,26 @@ The sequential and multicore benchmarks are performed as follows:
 | 32 | 71.463 [s] | ± 0.485 [s] | x30.2 | 15 |
 | 64 | 39.116 [s] | ± 0.489 [s] | x55.1 | 15 |
 | 128 | 14.008 [s] | ± 0.335 [s] | x153.8 | 15 |
-*Array of results for the parallelized-multicore version*
+Table: Results for the parallelized-multicore version of Game of Life
+
+\pagebreak
 
 \cimg{figs/gol_result_and_speedup_cpu.png}{width=\linewidth}{Benchmarks of the game of life in parallelized-sequential/multicore}{Source: Realized by Baptiste Coudray}
 
 We notice an apparent difference between the parallelized-sequential and multicore version when there is only one task. The multicore version is $1.6$ times faster than the sequential version. Nevertheless, both versions have a perfect speedup. The multicore version even gets a maximum speedup of x154 with 128 tasks. This performance can be explained by the caching of data in the processor and the use of threads.
 
-\pagebreak
-
 ## GPU Benchmarks
 
 The (+^OpenCL) and (+^CUDA) benchmarks are performed as follows:
+
 * the cellular automaton has $900'000'000$ cells,
 * the number of tasks varies between $2^0$ and $2^6$.
 * 15 measurements are performed, one measurement corresponds to one iteration,
 * the iteration is computed $8'000$ times.
 * From $2^0$ to $2^3$ tasks, an NVIDIA GeForce RTX 3090 is allocated for each task; beyond that, the eight graphics cards are shared equally among the ranks.
 
+\pagebreak
+
 | Number of tasks | Number of GPUs | Average [s] | Standard Derivation [s] | Speedup | Number of measures |
 |:---:|:---:|:---:|:---:|:---:|:---:|
 | 1 | 1 | 230.144 [s] | ± 0.225 [s] | x1.0 | 15 |
@@ -89,7 +91,7 @@ The (+^OpenCL) and (+^CUDA) benchmarks are performed as follows:
 | 16 | 8 | 30.579 [s] | ± 0.085 [s] | x7.5 | 15 |
 | 32 | 8 | 32.323 [s] | ± 0.045 [s] | x7.1 | 15 |
 | 64 | 8 | 35.551 [s] | ± 0.133 [s] | x6.5 | 15 |
-Table: <Results for the parallelized-OpenCL version of Game of Life>
+Table: Results for the parallelized-OpenCL version of Game of Life
 
 | Number of tasks | Number of GPUs | Average [s] | Standard Derivation [s] | Speedup | Number of measures |
 |:---:|:---:|:---:|:---:|:---:|:---:|
@@ -100,7 +102,9 @@ Table: <Results for the parallelized-OpenCL version of Game of Life>
 | 16 | 8 | 29.174 [s] | ± 0.079 [s] | x7.5 | 15 |
 | 32 | 8 | 30.844 [s] | ± 0.051 [s] | x7.1 | 15 |
 | 64 | 8 | 34.192 [s] | ± 0.12 [s] | x6.4 | 15 |
-Table: <Results for the parallelized-CUDA version of Game of Life>
+Table: Results for the parallelized-CUDA version of Game of Life
+
+\pagebreak
 
 \cimg{figs/gol_result_and_speedup_gpu.png}{width=\linewidth}{Benchmarks of the game of life in parallelized-OpenCL/CUDA}{Source: Realized by Baptiste Coudray}
 
diff --git a/src/text/09-lattice-boltzmann.md b/src/text/09-lattice-boltzmann.md
index 252b4e1..053d173 100644
--- a/src/text/09-lattice-boltzmann.md
+++ b/src/text/09-lattice-boltzmann.md
@@ -16,6 +16,7 @@ We create the lattice-Boltzmann method with our library to test it with a three-
 
 We perform benchmarks to validate the scalability of our three-dimensional parallelization when compiling in sequential, multicore, (+^OpenCL), or (+^CUDA) mode. The benchmarks are performed on the (+^HES-GE) cluster (Baobab/Yggdrasil).
 The sequential and multicore benchmarks are performed as follows:
+
 * the cellular automaton is $27'000'000$ cells in size,
 * the number of tasks varies between $2^0$ and $2^7$,
 * 15 measurements are performed, one measurement corresponds to one iteration,
@@ -31,7 +32,7 @@ The sequential and multicore benchmarks are performed as follows:
 | 32 | 41.04 [s] | ± 1.59 [s] | x17.4 | 15 |
 | 64 | 22.188 [s] | ± 0.321 [s] | x32.3 | 15 |
 | 128 | 17.415 [s] | ± 4.956 [s] | x41.1 | 15 |
-Table: <Results for the parallelized-sequential version of Lattice-Boltzmann>
+Table: Results for the parallelized-sequential version of Lattice-Boltzmann
 
 | Number of tasks | Average [s] | Standard Derivation [s] | Speedup | Number of measures |
 |:---:|:---:|:---:|:---:|:---:|
@@ -43,7 +44,9 @@ Table: <Results for the parallelized-sequential version of Lattice-Boltzmann>
 | 32 | 46.285 [s] | ± 0.138 [s] | x15.0 | 15 |
 | 64 | 24.059 [s] | ± 0.061 [s] | x28.9 | 15 |
 | 128 | 16.614 [s] | ± 1.088 [s] | x41.9 | 15 |
-Table: <Results for the parallelized-multicore version of Lattice-Boltzmann>
+Table: Results for the parallelized-multicore version of Lattice-Boltzmann
+
+\pagebreak
 
 \cimg{figs/lbm_result_and_speedup_cpu.png}{width=\linewidth}{Benchmarks of the lattice-Boltzmann method in parallelized-sequential/multicore}{Source: Realized by Baptiste Coudray}
 
@@ -52,6 +55,7 @@ Contrairement aux benchmarks précédents, les speedups ne suivent pas la courbe
 ## GPU Benchmark
 
 The (+^OpenCL) and (+^CUDA) benchmarks are performed as follows:
+
 * the cellular automaton has $27'000'000$ cells,
 * the number of tasks varies between $2^0$ and $2^6$.
 * 15 measurements are performed, one measurement corresponds to one iteration,
diff --git a/src/text/ZZ-glossaire.tex b/src/text/ZZ-glossaire.tex
index 2537582..5e1e61b 100644
--- a/src/text/ZZ-glossaire.tex
+++ b/src/text/ZZ-glossaire.tex
@@ -16,3 +16,4 @@
 \newacronym{HES-GE}{HES-GE}{Haute École Spécialisée de GEnève}
 \newacronym{IO}{I/O}{Input/Output}
 \newacronym{MSS}{MSS}{Maximum Segment Sum}
+\newacronym{SCA}{SCA}{Simple Cellular Automaton}
-- 
GitLab