Skip to content
Snippets Groups Projects
user avatar
Heyd authored
3be50256
Forked from GOSSA JULIEN / P4a
71 commits ahead of the upstream repository.

P4a : Analyse de performances de différentes structures

Grille d'évaluation P4a

Problème

Langage utilisé

Nous avons choisi d'utiliser le langage Java car il est plus adapté à notre organisation.

Description du problème

Analyse de performance de quatre structures identiques contenant des nombres mais fonctionnant différemment.

Nous aurons plusieurs paramètres au démarrage :

  • Nombre de valeurs dans chaque tableau : chaque structure a une taille fixe de un million d'éléments générés aléatoirement.
  • Nombre d'opérations : à chaque test, on augmente le nombre d'opérations de 100. Le nombre d'opérations varie de 100 à 5000.
  • Type de l'opération : AddTete, AddQueue, RemoveTete, RemoveMiddle ou Get.
  • Type de structure : nous utilisons des structures déjà existante (ArrayList, LinkedList, Table) et que nous avons créées nous-même (ChainedList composée de Link et d'un Cursor).

Contrainte : il faut de l’abstraction, et au moins un tableau ET une liste chaînée (Maillons)

Description des paramètres exploratoires du problème

  • Analyser la différence de temps d'éxécution CPU et de consommation de mémoire sur des opérations simples dans chaque structure (insérer, supprimer, sélectionner).

Organisation du projet

Dispositif expérimental

Organisation objet

Description de l'organisation des classes et interfaces

Nous avons utilisé trois packages différents :

  • Un pour les structures déjà existantes, StandardStructure : ArrayList, LinkedList et Table.
  • Un pour celle que nous avons créée, PersonalStructure : ChainedList et ses composants, Link et Cursor.
  • Un pour ce qui est commun aux deux packages précédents, defaultpackage : Main et Structure.

Pour les structures déjà existantes, nous avons préféré recréer une classe wrapper pour chacune d'entre elles afin de personnaliser les fonctions que nous voulions tester et adapter leur fonctionnement à chaque structure.

Diagramme de classes

Application

code source de l'application

Description de l'application et des arguments

Pour utiliser notre application, il faut lui passer plusieurs paramètres dans l'ordre suivant : le type de structure que l'on souhaite évaluer, le nombre de valeurs (un million), la méthode que l'on va évaluer et le nombre d'opérations.

Le Main va ensuite créer une structure en fonction des paramètres qu'on lui a passé et la remplir de nombres aléatoires. Il va ensuite appeler la fonction choisie en utilisant un switch.

Environnement de test

Description de la plateforme de test

Extrait pertinent de /proc/cpuinfo

Description de la démarche systématique

Description de la démarche systématique et de l'espace d'exploration pour chaque paramètres.

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

Résultats préalables

Temps d'exécution

plot

Consommation mémoire

plot

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

Ainsi, le code nous renverra l’indice qui correspond à l’endroit où la valeur voulue se trouve dans le tableau et nous aurons un résultat correspondant à l'indice de la valeur trouvée dans chaque tableau

  • Temps d'exécution des deux programmes (et leur différence)
  • Types de recherche de chaque programme (une standard et une recherche dichotomique)
  • Comment le “Random” influe sur la performance des structures
  • Comment améliorer la performance des deux structures
  • Déterminer la classe de compléxité des structures
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