removed video option, began benchmarking
This commit is contained in:
@@ -10,6 +10,7 @@
|
||||
#+LATEX_HEADER: \usepackage{xcolor} \usepackage{hyperref}
|
||||
#+LATEX_HEADER: \hypersetup{colorlinks=true,linkbordercolor=red,linkcolor=blue,pdfborderstyle={/S/U/W 1}}
|
||||
#+STARTUP: latexpreview
|
||||
#+OPTIONS: toc:nil |:nil
|
||||
|
||||
* Sujet
|
||||
|
||||
@@ -46,15 +47,30 @@ d’optimisation ~-O3~ et ~-flto~.
|
||||
Voici également ci-dessous la liste des options et arguments possibles
|
||||
concernant l’exécution du logiciel.
|
||||
#+begin_src text
|
||||
$ ./bin/genetic-image -h
|
||||
Allowed options:
|
||||
-h [ --help ] Display this help message
|
||||
-i [ --input ] arg Input image
|
||||
-o [ --output ] arg Image or video output path (default: input path +
|
||||
"_output")
|
||||
-m [ --method ] arg Method number to be used (default: 1)
|
||||
-n [ --iterations ] arg Number of iterations (default: 5000)
|
||||
-v [ --video ] Enable video output
|
||||
$ ./bin/genetic-image -h
|
||||
Allowed options:
|
||||
-h [ --help ] Display this help message
|
||||
-i [ --input ] arg Input image
|
||||
-o [ --output ] arg Image output path (default: input path + "_output")
|
||||
-m [ --method ] arg Method number to be used (default: 1)
|
||||
-n [ --iterations ] arg Number of iterations (default: 5000)
|
||||
-v [ --verbose ] Enables verbosity
|
||||
#+end_src
|
||||
|
||||
Voici la ligne de commande utilisée depuis le répertoire ~build~ afin de pouvoir
|
||||
obtenir un temps d’exécution :
|
||||
#+begin_src shell
|
||||
perf stat -r {nombreExécutions} -B ./bin/genetic-image \
|
||||
-i ../img/mahakala-monochrome.jpg -o output.png \
|
||||
-n {nombreIterations} -m 1
|
||||
#+end_src
|
||||
|
||||
Les deux éléments entre accolades sont à remplacer par leur valeur, par exemple
|
||||
afin d’exécuter dix fois le programme avec vingt améliorations, il faudrait
|
||||
exécuter ceci :
|
||||
#+begin_src shell
|
||||
perf stat -r 1 -B ./bin/genetic-image \
|
||||
-i ../img/mahakala-monochrome.jpg -o output.png -n 20 -m 1
|
||||
#+end_src
|
||||
|
||||
** Méthode naïve
|
||||
@@ -67,25 +83,112 @@ en l’état essaiera d’appliquer des couleurs n’existant pas dans l’image
|
||||
référence, voire complètement à l’opposées de la palette de couleurs de l’image
|
||||
de référence.
|
||||
|
||||
Voici la ligne de commande utilisée depuis le répertoire ~build~ afin de pouvoir
|
||||
obtenir un temps d’exécution :
|
||||
#+begin_src shell
|
||||
perf stat -r nombreDExécutions -B ./bin/genetic-image \
|
||||
-i ../img/mahakala-monochrome.jpg -o output.png -n 200 -m 1
|
||||
Voici les moyennes de temps d’exécution selon le nombre d’itérations réussies
|
||||
sur le nombre d’exécutions indiqué.
|
||||
#+tblname: temps1
|
||||
| / | < | < | < |
|
||||
| Nombre d’itérations | Temps d’exécution | Variation | Nombre d’exécutions |
|
||||
|---------------------+-------------------+-----------+---------------------|
|
||||
| 10 | 0.08371 | 0.00249 | 200 |
|
||||
| 50 | 1.0966 | 0.0320 | 100 |
|
||||
| 100 | 3.835 | 0.118 | 50 |
|
||||
| 200 | 13.274 | 0.547 | 20 |
|
||||
| 500 | 73.47 | 2.49 | 10 |
|
||||
| 1000 | 293.11 | 10.96 | 5 |
|
||||
#+begin_src gnuplot :var data=temps1 :file temps1.png
|
||||
reset
|
||||
set title "Temps d’exécution"
|
||||
set size ratio square
|
||||
set key box linestyle -1
|
||||
set key top left
|
||||
|
||||
set xlabel "Nombre d’itérations"
|
||||
set xrange[0 : 7]
|
||||
set xtics nomirror rotate by -45
|
||||
|
||||
set yrange [0 : *]
|
||||
set ylabel "Temps (s)"
|
||||
set ytics nomirror
|
||||
set log y 2;
|
||||
|
||||
set y2range [* : *]
|
||||
set y2label "Variation (s)"
|
||||
set log y2 2
|
||||
set y2tics 0,0.5,3.5
|
||||
|
||||
set style data points
|
||||
plot data u 2:xticlabels(1) axis x1y1 lw 3 title 'Temps', \
|
||||
data u 3:xticlabels(1) axis x1y2 lw 3 title 'Variation'
|
||||
#+end_src
|
||||
|
||||
| / | < | < |
|
||||
| nombre d’itérations réussies | nombre d’exécutions | temps d’exécution moyen |
|
||||
|------------------------------+---------------------+-------------------------|
|
||||
| 10 | 100 | 0.09447s (±0.02%) |
|
||||
| 50 | 100 | 1.1331s (±2.85%) |
|
||||
| 100 | 50 | |
|
||||
| 200 | 20 | |
|
||||
| 500 | 10 | |
|
||||
| 1000 | 5 | |
|
||||
#+RESULTS:
|
||||
[[file:temps1.png]]
|
||||
|
||||
Naturellement, la variation en temps d’exécution croît en même temps que le
|
||||
nombre d’améliorations nécessaires à apporter à l’image à améliorer, dû à la
|
||||
nature aléatoire de l’algorithme. Cependant, on constate également une
|
||||
croissance importante du temps d’exécution suivant également ce nombre
|
||||
d’itérations réussies.
|
||||
|
||||
** Réduction du panel des couleurs
|
||||
|
||||
Constatant que la majorité des échecs d’ajout de formes de couleur par la
|
||||
première méthode échouent dû à une couleur incorrecte, voire n’appartenant pas à
|
||||
l’image de référence, j’ai décidé de restreindre les possibilités de couleurs
|
||||
parmis lesquelles le hasard peut choisir à la liste des couleurs présentes dans
|
||||
l’image de référence uniquement. Ce choix se fait donc via l’implémentation d’un
|
||||
set de valeurs uniques représentant les couleurs trouvées dans l’image de
|
||||
référence, leur détection étant réalisée avec des threads parallèles pour plus
|
||||
de rapidité à l’exécution. Cette méthode est celle implémentée dans la fonction
|
||||
~method2()~ dans ~src/methods.cc~.
|
||||
|
||||
Voici les moyennes de temps d’exécution selon le nombre d’itérations réussies
|
||||
sur le nombre d’exécutions indiqué.
|
||||
#+tblname: temps2
|
||||
| / | < | < | < |
|
||||
| Nombre d’itérations | Temps d’exécution | Variation | Nombre d’exécutions |
|
||||
|---------------------+-------------------+-----------+---------------------|
|
||||
| 10 | 0.051697 | 0.000413 | 200 |
|
||||
| 50 | | | 100 |
|
||||
| 100 | | | 50 |
|
||||
| 200 | | | 20 |
|
||||
| 500 | | | 10 |
|
||||
| 1000 | | | 5 |
|
||||
#+begin_src gnuplot :var data=temps2 :file temps2.png
|
||||
reset
|
||||
set title "Temps d’exécution"
|
||||
set size ratio square
|
||||
set key box linestyle -1
|
||||
set key top left
|
||||
|
||||
set xlabel "Nombre d’itérations"
|
||||
set xrange[0 : 7]
|
||||
set xtics nomirror rotate by -45
|
||||
|
||||
set yrange [0 : *]
|
||||
set ylabel "Temps (s)"
|
||||
set ytics nomirror
|
||||
set log y 2;
|
||||
|
||||
set y2range [* : *]
|
||||
set y2label "Variation (s)"
|
||||
set log y2 2
|
||||
set y2tics 0,0.5,3.5
|
||||
|
||||
set style data points
|
||||
plot data u 2:xticlabels(1) axis x1y1 lw 3 title 'Temps', \
|
||||
data u 3:xticlabels(1) axis x1y2 lw 3 title 'Variation'
|
||||
#+end_src
|
||||
|
||||
On peut remarquer une très nette amélioration de la rapidité d’exécution du
|
||||
logiciel. Étant donné que cette modification ne sera à priori pas en conflit
|
||||
avec d’autres méthodes, cette amélioration sera conservée pour toutes les autres
|
||||
avancées suivantes.
|
||||
|
||||
** Une taille des formes aléatoire mais contrôlée
|
||||
|
||||
Une autre méthode peut être de limiter
|
||||
|
||||
** Concurrence entre threads
|
||||
|
||||
Une utilisation na
|
||||
|
||||
Binary file not shown.
BIN
report/temps1.png
Normal file
BIN
report/temps1.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 7.6 KiB |
Reference in New Issue
Block a user