Skip to content
Snippets Groups Projects
user avatar
authored
Forked from MAZZARELLA ENZO / P4a
Source project has a limited visibility.

P4a : Analyse de performances de différentes structures

Grille d'évaluation P4a

Problème

Description du Problème :

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.

Opérations :

  • 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)

Dispositif expérimental

Organisation objet

Voila notre diagramme de classe explicitant l'organisation objet de l'application.

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.

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

code source des fichiers Java

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)

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

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 :

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")

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.

Résultats préalables

Consommation CPU

Ajout de Valeur

Tete de liste Queue de liste
plot plot

Suppression de Valeur

Tete de liste Queue de liste
plot plot

Assignation de valeur (tableau)

Accès de Valeur aleatoire

Consommation mémoire

Ajout de Valeur

Tete de liste Queue de liste
plot plot

Suppression de Valeur

Tete de liste Queue de liste
plot plot

Assignation de valeur (tableau)

Accès de Valeur aleatoire

Analyse des résultats préalables

A faire

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