Skip to content
Snippets Groups Projects
README.md 6.41 KiB
Newer Older
gossa's avatar
gossa committed
# P4a : Analyse de performances de différentes structures

GOSSA JULIEN's avatar
GOSSA JULIEN committed
[Grille d'évaluation P4a](Evaluation.md)
gossa's avatar
gossa committed

## Problème

Julien Dubocage's avatar
Julien Dubocage committed
Description du Problème : 
gossa's avatar
gossa committed

Nous allons comparer les différences de performances sur 3 opérations communes à différentes structures de données (tableaux, LinkedList et ArrayList).
Nous allons également réimplementer ces opérations nous même et à nouveau comparer les différences de performance.
Nous avons choisi d'utiliser le language objet java.
- Ajout d'un élement à une certaine position (n'exite pas pour les tableaux standards, add() pour les LinkedList / ArrayList)
- Suppression d'un élement à une certaine position(n'existe pas pour les tableaux standards, remove() pour les LinkedList / ArrayList)
- Accès d'un élement à une certaine position(tab[position] pour les tableaux, get() pour les LinkedList / ArrayList)
gossa's avatar
gossa committed

## Dispositif expérimental

GOSSA JULIEN's avatar
GOSSA JULIEN committed
### Organisation objet

Voila notre diagramme de classe explicitant l'organisation objet de l'application. 
![](UML/diagramme.svg)

Toutes les structures de données vont implémenter une Interface *"Struture"* que nous allons créer et qui contiendra les opérations choisies.

Dans le package **Standard**, nous appelerons juste les bonnes méthodes déja présentes dans les libraires standards et dans
le package **Perso** nous réimplementerons par nous même ces opérations.
GOSSA JULIEN's avatar
GOSSA JULIEN committed

gossa's avatar
gossa committed
### Application

L'application est divisée en 2 parties : les scripts shells qui appellent nos differentes classes de Main compilées en java. 

Il existe un script shell pour chaque graphique et celui-ci appelle les classes Main choisies avec la commande "/usr/bin/time -f "%U,%M"

[code source des scripts shell](https://git.unistra.fr/jdubocage/P4a/-/tree/master/Scripts_Shell)

[code source des fichiers Java](https://git.unistra.fr/jdubocage/P4a/-/tree/master/P4A/src/p4a)


gossa's avatar
gossa committed
```
Description de l'application et des arguments
```

### Environnement de test

Tout les tests ont été réalisés sur le serveur troglo.iutrs.unistra.fr

Description de la plateforme de test (extrait de /proc/cpuinfo)
gossa's avatar
gossa committed
```
processor       : 1
vendor_id       : GenuineIntel
cpu family      : 15
model           : 6
model name      : Common KVM processor
cpu MHz         : 2095.078
cache size      : 16384 KB
siblings        : 2
cpu cores       : 2
clflush size    : 64
cache_alignment : 128
address sizes   : 40 bits physical, 48 bits virtual
gossa's avatar
gossa committed
```

### Description de la démarche systématique

Voici la démarche que nous avons suivi pour génerer des données puis produire des graphiques : 

gossa's avatar
gossa committed

```
1. Compiler les fichiers source dans le dossier P4A\src\p4a avec la commande javac ./*.java
2. Choisir le script shell de son choix et le copier dans le dossier P4A\src
3. Executer ce script shell pour génerer puis enregistrer les données avec la commande ./nomScript.sh > perf.csv
4. Executer la commande R pour pouvoir générer les graphiques avec ces données
5. Charger la librairie ggplot2 (commande : library(ggplot2)) puis charger les données : perf <- read.csv("perf.csv")
6. Génerer le graphique avec la commande ggplot(perf, arguments) puis exportation avec ggsave("nomGraphique.png")
gossa's avatar
gossa committed
```

Chaque script shell réalise le test sur les différentes structures de données 3 fois (parametrable en changeant la valeur de la variable TESTS).
Le nombre de fois que l'opération testée est executée est également parametrable via la variable NBOPERATIONS.
Cette variable est une séquence de plusieurs nombre permettant d'obtenir plusieurs points sur les graphiques.

gossa's avatar
gossa committed
## Résultats préalables

### Consommation CPU

### Ajout de Valeur


| | Tete de liste    | Queue de liste  |
| ----------------------------------| -------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
|  | ![plot](./graphiques/CPU_Linked_Array_List_Ajout_Debut_Liste.png) | ![plot](./graphiques/CPU_LinkedList_ArrayList_Ajout_Fin.png) |

### Suppression de Valeur
gossa's avatar
gossa committed

| | Tete de liste    | Queue de liste  |
| ----------------------------------| -------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
|  | ![plot](./graphiques/CPU_LinkedList_ArrayList_Remove_Debut.png) | ![plot](./graphiques/CPU_LinkedList_ArrayList_Remove_Fin.png) |

### Assignation de valeur (tableau)

<img src="./graphiques/CPU_Tab_Assign.png" width="700"/>

### Accès de Valeur aleatoire 

<img src="./graphiques/CPU_LinkedList_ArrayList_Tab_Get_Random.png" width="700"/>
gossa's avatar
gossa committed

### Consommation mémoire

### Ajout de Valeur

| | Tete de liste    | Queue de liste  |
| ----------------------------------| -------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
|  | ![plot](./graphiques/Mem_Linked_Array_List_Ajout_Debut_Liste.png) | ![plot](./graphiques/Mem_LinkedList_ArrayList_Ajout_Fin.png) |

### Suppression de Valeur

| | Tete de liste    | Queue de liste  |
| ----------------------------------| -------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
|  | ![plot](./graphiques/Mem_LinkedList_ArrayList_Remove_Debut.png) | ![plot](./graphiques/Mem_LinkedList_ArrayList_Remove_Fin.png) |

### Assignation de valeur (tableau)

<img src="./graphiques/Mem_Tab_Assign.png" width="700"/>

### Accès de Valeur aleatoire 

<img src="./graphiques/Mem_LinkedList_ArrayList_Tab_Get_Random.png" width="700"/>


gossa's avatar
gossa committed

### Analyse des résultats préalables

gossa's avatar
gossa committed

### Discussion des résultats préalables

Explications précises et succinctes sur ce que les limites des résultats
préalables et ce qu'ils ne permettent pas de vérifier.

## Etude approfondie

### Hypothèse

Expression précise et succincte d'une hypothèse.

### Protocole expérimental de vérification de l'hypothèse

Expression précise et succincte du protocole.

```
Suite des commandes, ou script, à exécuter pour produire les données.
```

### Résultats expérimentaux

### Analyse des résultats expérimentaux

### Discussion des résultats expérimentaux

## Conclusion et travaux futurs