Skip to content
Snippets Groups Projects
TERANTE LEVI's avatar
TERANTE LEVI authored
8a5e367c
Forked from 101 / P4a
This fork has diverged from the upstream repository.

P4a : Analyse de performances de différentes structures

Grille d'évaluation P4a

Problème

Description du problème :

Dans un code java, nous pouvons utiliser plusieurs types de liste mais nous ne savons pas quelle structure est la plus performante (temps d'excutione et consommation mémoire). Nous allons donc analyser les comportements de différentes structures :

- ArrayList
- LinkedList
- Vector

Pour différentes opérations :

- Add
- Contains
- Remove

Et avec différents paramètres de test :

- Le type de la structure (ArrayList, LinkedList, Vector)
- Le nombre de tests (5 ou plus)
- Le nombre d'éléments (100000, 1000000, 10000000)

Dispositif expérimental

Application

code source de l'application

Description de l'application et des arguments

Ce code Java prend 3 arguments en entrées :
    - le type de la structure à utiliser (arraylist, linkedlist ou vector)
    - le type de la commande (add, acces ou supprimer)
    - le nombre d'éléments à ajouter, supprimer ou accéder

Environnement de test

Description de la plateforme de test

Extrait pertinent de /proc/cpuinfo

processor       : 31
vendor_id       : GenuineIntel
cpu family      : 6
model           : 63
model name      : Intel(R) Xeon(R) CPU E5-2630L v3 @ 1.80GHz
stepping        : 2
microcode       : 0x31
cpu MHz         : 1198.504
cache size      : 20480 KB

Description de la démarche systématique

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

Nous commencons par la génération des fichier .dat qui seront utilisés pour générer les fichiers png(plots).

La commande : ./test.sh type_List opération taille | tee

test.sh

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

#!/bin/bash

type1=1 # ArrayList
type2=2 # LinkedList
type3=3 # Vector

op1=1 # add
op2=2 # contains
op3=3 # remove

size="1000 10000 100000"

nbTest=5

echo "taille\tiTest\tTempsDexecution\trealtime\tMemoire"

javac Main.java # générer le fichier .class

commande="java Main"
struct=$1
op=$2
res=""

for iSize in $size
  do
    for iTest in `seq 1 $nbTest`
      do
        res="$iSize\t$iTest\t"
        res="$res`( /usr/bin/time -f "%U\t%e\t%M" $commande $struct $op $iSize > /dev/null ) 2>&1`"
        echo "$res"
      done
  done

Résultats préalables

Temps d'exécution

Opération ArrayList LinkedList Vector
add plot plot plot
contains plot plot plot
delete plot plot plot

Consommation mémoire

Opération ArrayList LinkedList Vector
add plot plot plot
contains plot plot plot
delete plot plot 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

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