updated benchmark script and beginning method 5

This commit is contained in:
Phuntsok Drak-pa
2019-04-09 02:20:33 +02:00
parent 41cbb90213
commit 4201e5476e
12 changed files with 174 additions and 90 deletions
Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 21 KiB

+93 -46
View File
@@ -39,10 +39,10 @@ $$\sqrt{\sum_{i=0}^n(v_i - w_i)^2}$$
~V~ étant le vecteur de pixels de l’image de référence, ~W~ étant le vecteur de
pixels de l’image générée, et ~n~ la taille de ces deux vecteurs.
Les tests de temps sont réalisés sur un Thinkpad x220, disposant d’un processeur
Intel® Core™ i5-2540M à 2.6GHz, composé de deux cœurs supportant chacun deux
threads, et de 4Go de RAM. Le programme est compilé avec les options
d’optimisation ~-O3~ et ~-flto~.
Les tests de temps sont réalisés sur un Lenovo Ideapad Y700, disposant d’un
processeur Intel® Core™ i7-6700HQ à 2.6GHz et un turbo à 3.5GHz, composé de
quatre cœurs supportant chacun deux threads, et de 16Go de RAM. Le programme est
compilé avec les options d’optimisation ~-O3~ et ~-flto~.
Voici également ci-dessous la liste des options et arguments possibles
concernant l’exécution du logiciel.
@@ -57,21 +57,12 @@ concernant l’exécution du logiciel.
-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
Voici le script grâce auquel les valeurs de temps d’exécution ont été obtenues :
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
#+INCLUDE: ../benchmarks.fish src shell -n
Quelques-unes de ces lignes commençasont là uniquement pour de la mise en forme des
données afin que je puisse
** Méthode naïve
@@ -86,15 +77,15 @@ de référence.
Voici les moyennes de temps d’exécution selon le nombre d’itérations réussies
sur le nombre d’exécutions indiqué.
| / | < | < | < |
| Nb d’améliorations | Temps d’exécution (s) | Variation (s) | Nb d’exécutions |
|--------------------+-----------------------+---------------+-----------------|
| 10 | 0.060847 | 0.000498 | 200 |
| 50 | 0.29823 | 0.00453 | 100 |
| 100 | 0.7093 | 0.0135 | 50 |
| 200 | 1.9584 | 0.0559 | 20 |
| 500 | 8.739 | 0.291 | 10 |
| 1000 | 27.930 | 0.582 | 5 |
| / | < | < |
| Nb d’améliorations | Nb d’exécutions | Temps d’exécution (s) |
|--------------------+-----------------+-----------------------|
| 10 | 200 | 0.065881 |
| 50 | 100 | 0.130041 |
| 100 | 50 | 0.186012 |
| 200 | 20 | 0.385982 |
| 500 | 10 | 1.437486 |
| 1000 | 5 | 3.608983 |
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
@@ -120,17 +111,17 @@ de rapidité à l’exécution. Cette méthode est celle implémentée dans la f
Voici les moyennes de temps d’exécution selon le nombre d’itérations réussies
sur le nombre d’exécutions indiqué.
| / | < | < | < |
| Nb d’améliorations | Temps d’exécution (s) | Variation (s) | Nb d’exécutions |
|--------------------+-----------------------+---------------+-----------------|
| 10 | 0.074951 | 0.000533 | 200 |
| 50 | 0.26385 | 0.00401 | 100 |
| 100 | 0.6385 | 0.0148 | 50 |
| 200 | 1.6145 | 0.0348 | 20 |
| 500 | 6.747 | 0.235 | 10 |
| 1000 | 19.608 | 0.327 | 5 |
| / | < | < |
| Nb d’améliorations | Nb d’exécutions | Temps d’exécution (s) |
|--------------------+-----------------+-----------------------|
| 10 | 200 | 0.072979 |
| 50 | 100 | 0.114426 |
| 100 | 50 | 0.157965 |
| 200 | 20 | 0.290475 |
| 500 | 10 | 0.785426 |
| 1000 | 5 | 2.664046 |
On peut remarquer une amélioration dans la rapidité d’exécution du logiciel.
On peut remarquer une amélioration quant à la rapidité d’exécution du logiciel.
Cependant, le résultat n’est pas aussi important qu’escompté. Je suppose que
cela est dû au fait que l’algorithme précédent peut considérer un rapprochement
d’une zone déjà colorée vers la couleur d’origine comme une amélioration, avec
@@ -164,15 +155,15 @@ $$taille=Rand([\![tailleMinimale;tailleMaximale[\![)$$
Voici les moyennes de temps d’exécution selon le nombre d’itérations réussies
sur le nombre d’exécutions indiqué.
| / | < | < | < |
| Nb d’améliorations | Temps d’exécution (s) | Variation (s) | Nb d’exécutions |
|--------------------+-----------------------+---------------+-----------------|
| 10 | | | 200 |
| 50 | | | 100 |
| 100 | | | 50 |
| 200 | | | 20 |
| 500 | | | 10 |
| 1000 | | | 5 |
| / | < | < |
| Nb d’améliorations | Nb d’exécutions | Temps d’exécution (s) |
|--------------------+-----------------+-----------------------|
| 10 | 200 | 0.082068 |
| 50 | 100 | 0.244236 |
| 100 | 50 | 0.418075 |
| 200 | 20 | 1.453703 |
| 500 | 10 | 4.777205 |
| 1000 | 5 | 20.33209 |
Cette version du logiciel est nettement plus lente que ses versions précédentes
du fait de la contrainte de taille pour les formes pouvant potentiellement
@@ -196,14 +187,70 @@ résultats sont récupérés et évalués, et parmi les résultats améliorant l
générée, celle avec le meilleur score est conservée. Cela permet ainsi de
multiplier les chances d’avoir une amélioration de l’image par tentative.
Voici les benchmarks d’exécution de cette méthode sans contrôle de la taille des
formes aléatoires :
| / | < | < |
| Nb d’améliorations | Nb d’exécutions | Temps d’exécution (s) |
|--------------------+-----------------+-----------------------|
| 10 | 200 | 0.080525 |
| 50 | 100 | 0.139892 |
| 100 | 50 | 0.169113 |
| 200 | 20 | 0.273342 |
| 500 | 10 | 0.610812 |
| 1000 | 5 | 1.403816 |
Et voici les benchmarks d’exécution de cette même méthode avec contrôle de la
taille des formes aléatoires :
| / | < | < |
| Nb d’améliorations | Nb d’exécutions | Temps d’exécution (s) |
|--------------------+-----------------+-----------------------|
| 10 | 200 | 0.085981 |
| 50 | 100 | 0.156099 |
| 100 | 50 | 0.29183 |
| 200 | 20 | 0.59844 |
| 500 | 10 | 2.513782 |
| 1000 | 5 | 6.457168 |
Pour résumer, ces deux tableaux montrent la parallélisation de la seconde
méthode et de la troisième méthode respectivement via des threads
concurrentiels. On peut remarquer que le temps d’exécution s’est nettement
amélioré, avec un temps d’exécution à peu près deux fois plus rapide pour
l’exécution sans contrôle de taille des formes que la seconde méthode, et
pouvant être jusqu’à trois fois plus rapide que la troisième méthode avec le
contrôle de la taille des formes activée. On a donc une véritable amélioration
significative avec cette nouvelle version parallèle.
** Collaboration entre threads
Une différente approche au parallélisme peut être réalisée : plutôt que
d’essayer de mettre en concurrence plusieurs threads, il serait possible
d’essayer de plutôt les mettre en collaboration. Cela implique par exemple de
diviser l’image d’entrée en plusieurs zones sur laquelle chacun des threads
lancés travailleraient, appliquant chacun le nombre d’améliorations demandé sur
sa zone dédiée. Puis, une fois que chacun des threads a terminé son travail, les
différentes zones sont unifiées en une seule image.
* Annexes
** Images
*** Image de référence
#+CAPTION: Image de référence utilisée pour les tests du logiciel
[[../img/mahakala-monochrome.jpg]]
*** Méthode 1
#+CAPTION: Image générée à partir de ~img/mahakala-monochrome.png~ avec 2000 améliorations avec la première méthode
[[./output1.png]]
*** Méthode 2
#+CAPTION: Image générée à partir de ~img/mahakala-monochrome.png~ avec 2000 améliorations avec la seconde méthode
[[./output2.png]]
*** Méthode 3
#+CAPTION: Image générée à partir de ~img/mahakala-monochrome.png~ avec 2000 améliorations avec la troisième méthode
[[./output3.png]]
*** Méthode 4
**** Taille des formes non contrôlée
#+CAPTION: Image générée à partir de ~img/mahakala-monochrome.png~ avec 2000 améliorations avec la quatrième méthode sans l’option ~-s~
[[./output4-1.png]]
**** Taille des formes contrôlée
#+CAPTION: Image générée à partir de ~img/mahakala-monochrome.png~ avec 2000 améliorations avec la quatrième méthode avec l’option ~-s~
[[./output4-2.png]]
BIN
View File
Binary file not shown.