P4a : Analyse de performances de différentes structures
Problème
Description du Problème:
C’est la comparaison des performances de différentes structures de données et différentes implantations, pour différentes opérations, en termes de consommation CPU et de consommation mémoire. Dans notre cas, l'objectif sera donc de comparer les performances de différentes opérations pour différentes implémentations de l'interface List.
Description de tous les paramètres exploratoires du problème:
Les paramètres modifiables seront:
- Le choix de la structure
- Le choix de l'opération à éxecuter
- Le nombre de répétion de l'opération choisi
- La taille de la structure
Dispositif expérimental
Plan de travail:
Tout d'abord, l'objectif sera de faire de simples comparaisons sur les temps d'exécutions (et ressources utilisées) des opérations entre deux implémentations de l'interface List. Nous prendrons ici les classes ArrayList et LinkedList et travaillerons en Java. Suite à cela, nous créerons notre propre implémentation de List, nottament une classe qui reprendra le concept de tableau. L'implémentation de l'interface List pour une classe utilisant un tableau peut, à première vue, sembler étrange, mais cela nous permettra de tester cette classe de la même manière que toutes les autres, et ce, de manière simplifiée.
Organisation objet
note: gerer les tableaux sans debordements. (-> ArrayList se comporte comme un simple tableau)
Description de l'organisation des classes et interfaces, ou diagramme de classes:
Application
L'application permet de faire des opérations sur different type de structure: Lorsqu'on lance l'application, on passe en paramètre:
- la taille de la structure (le nombre d'élément present par defaut dans la structure)
- le nom de la structure (array, ArrayList ou OurLinkedList (une liste chainée crée par nous même))
- le nombre de répétition
- l'action a effectuer (les actions sont get, inserthead, insertqueue, insertrandom, remove)
Note: remove supprime un élément au hasard dans la structure, si le nombre d'element à supprimer est suppérieur à la taille de la liste,
on passe l'opération.
Environnement de test
Description de la plateforme de test
La plateforme utilisé pour générer nos données est le bureau à distance (sous Unix)
Extrait pertinent de /proc/cpuinfo:
cpuinfo:
Nom de modèle : Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz
Description de la démarche systématique
Description de la démarche systématique et de l'espace d'exploration pour chaque paramètres:
Afin d'obtenir les données nécessaires à la génération des graphiques, il est nécessaire de generer un fichier de valeur (.csv), que l'on obtient en éxecutant un scrpit, prenant en paramètre simplement le nombre de répétitions des opérations
Script utilisé:
[ $# -eq 1 ] || { echo "Usage: $(basename $0) <amount of repetition>" 1>&2
exit 1
}
NTEST=50
size=10000
repetition=$1
echo -e "Test\tTaille\tRep\tType\tOpe\tCPU\tMem"
for structType in "array" "ourlinkedlist" "arraylist"
do
for structOp in "get" "remove" "inserthead" "insertrandom" "insertqueue"
do
for i in `seq $NTEST`
do
res=`(/usr/bin/time -f "%U\t%M" java -jar P4a.jar $size $structType $repetition $structOp > /dev/null) 2>&1`
echo -e "$i\t$size\t$repetition\t$structType\t$structOp\t$res"
repetition=$((repetition + 1000))
done
repetition=$1
done
done
Résultats préalables
Temps d'exécution
Consommation mémoire
Analyse des résultats préalables
La mémoire se comporte exactement pareil sur les 4 versions. Les temps d'exécutions dépendent essentiellement de l'affichage des valeurs du tableau. La version 2 de recherche semble un peu plus rapide.
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.