Commit b9f85403 authored by david's avatar david
Browse files

Python analysis

parent e813401f
......@@ -48,8 +48,8 @@ public:
bool memory_reduction = false;
if(!data.empty()){
if( do_we_need_to_reduce_capacity() ){
memory_reduction = true;
reduce_capacity();
memory_reduction = true;
reduce_capacity();
}
data.pop_back();
}
......
......@@ -10,8 +10,8 @@ public class Main {
Analyzer time_analysis = new Analyzer();
// Analyse du nombre de copies faites par les opérations.
Analyzer copy_analysis = new Analyzer();
// Analyse de l'espace mémoire inutilisé.
Analyzer memory_analysis = new Analyzer();
// Analyse de l'espace mémoire inutilisé.
Analyzer memory_analysis = new Analyzer();
long before, after;
// Booléen permettant de savoir si une allocation a été effectuée.
boolean memory_allocation;
......
# Cette classe est un simple proxy vers le type "list" de python
# Le langage ne permettant pas de manipuler l'espace memoire d'une "list",
# on se contente ici d'observer son comportement.
class ArrayListProxy:
# Constructeur de la classe ArraylistProxy
def __init__(self):
self.data = []
# Ajoute l'element x au tableau
# Complexite en temps/espace, pire cas : O(data.size)
# Complexite en temps/espace, meilleur cas : O(1)
# Complexite amortie : O(1)
def append(self, x):
self.data.append(x)
# Supprime le dernier element du tableau
def pop_back(self):
self.data.pop()
# Renvoie l'element situe a la position 'pos' dans le tableau
def get(self, pos):
return self.data[pos]
# Renvoie le nombre d'elements dans le tableau
def get_size(self):
return len(data)
import time
import sys
from arraylist import ArrayListProxy
from analyzer import Analyzer
# Tableau dynamique.
a = []
# Analyse du temps pris par les operations.
time_analysis = Analyzer();
# Analyse de la mémoire gaspillée à un instant t.
memory_analysis = Analyzer();
# Analyse de la mémoire gaspillée à un instant t.
copy_analysis = Analyzer();
# Taille supposée de l'en-tête d'une list en Python
__list_header_size__ = 64
# Taille supposée d'une entrée dans une list en Python
__list_entry_size__ = 8
wasted_memory = sys.getsizeof(a)-__list_header_size__
for i in range(1000000):
before = time.time()
a.append(i)
after = time.time()
# Enregistrement du temps pris par l'operation
time_analysis.append((after - before)*10**9)
# Enregistrement du nombre de copie effectuées par l'opération
# S'il n'y avait pas d'espace gaspillé à l'étape précédente,
# alors une réallocation a eu lieu à cette étape.
if wasted_memory == 0:
copy_analysis.append(i+1)
else:
copy_analysis.append(1)
# Enregistrement de l'espace mémoire gaspillé à un instant donné
wasted_memory = sys.getsizeof(a)-__list_header_size__ - __list_entry_size__*i
memory_analysis.append(wasted_memory)
# Affichage de quelques statistiques sur l'experience.
sys.stderr.write("Total cost : " + str(time_analysis.get_total_cost())+"\n")
......@@ -24,3 +46,5 @@ sys.stderr.write("Standard deviation :" + str(time_analysis.get_standard_deviati
# Sauvegarde les donnees de l'experience.
time_analysis.save_values("../plots/dynamic_array_time_python.plot")
memory_analysis.save_values("../plots/dynamic_array_memory_python.plot")
copy_analysis.save_values("../plots/dynamic_array_copy_python.plot")
# Script GNUPLOT
# Dire que le fichier de sortie est un fichier Postscript
set terminal postscript color
set terminal pdf color
set xlabel "Nombre d'elements ajoutes" font "Helvetica,24"
......@@ -12,28 +12,28 @@ set xlabel "Nombre d'elements ajoutes" font "Helvetica,24"
set ylabel "Temps amorti" font "Helvetica,24"
# Nom du fichier Postscript en sortie
set output 'eps/dynamic_array_amortized_time_alpha_2.eps'
set output 'pdf/dynamic_array_amortized_time_alpha_2.pdf'
plot [0:1000000][0:1000] 'dynamic_array_time_c.plot' using 1:3 w lines title "Amortized C", 'dynamic_array_time_cpp.plot' using 1:3 w lines title "Amortized C++", 'dynamic_array_time_java.plot' using 1:3 w lines title "Amortized JAVA", 'dynamic_array_time_python.plot' using 1:3 w lines title "Amortized Python"
plot [0:1000000][0:600] 'dynamic_array_time_c.plot' using 1:3 w lines title "Amortized C", 'dynamic_array_time_cpp.plot' using 1:3 w lines title "Amortized C++", 'dynamic_array_time_java.plot' using 1:3 w lines title "Amortized JAVA", 'dynamic_array_time_python.plot' using 1:3 w lines title "Amortized Python"
###############################################################
########### Affichage de l'espace mémoire gaspillé ###########
###############################################################
# Titre de l'axe des ordonnées
set ylabel "Mémoire gaspillée" font "Helvetica,24"
set ylabel "Memoire gaspillee" font "Helvetica,24"
# Nom du fichier Postscript en sortie
set output 'eps/dynamic_array_wasted_memory_alpha_2.eps'
set output 'pdf/dynamic_array_wasted_memory_alpha_2.pdf'
plot 'dynamic_array_memory_c.plot' using 1:2 w lines title "Espace memoire inutilise"
plot 'dynamic_array_memory_c.plot' using 1:2 w lines title "Espace memoire inutilise C", 'dynamic_array_memory_python.plot' using 1:2 w lines title "Espace memoire inutilise Python"
#################################################################
########### Affichage du nombre de copies effectuées ###########
#################################################################
# Titre de l'axe des ordonnées
set ylabel "Nombre de copie effectuée" font "Helvetica,24"
set ylabel "Nombre de copies effectuees" font "Helvetica,24"
# Nom du fichier Postscript en sortie
set output 'eps/dynamic_copy_alpha_2.eps'
set output 'pdf/dynamic_array_copy_alpha_2.pdf'
plot 'dynamic_array_copy_c.plot' using 1:2 w boxes title "Nombre de copies de valeurs effectuees"
\ No newline at end of file
plot 'dynamic_array_copy_c.plot' using 1:2 w boxes title "Nombre de copies de valeurs effectuees C", 'dynamic_array_copy_python.plot' using 1:2 w boxes title "Nombre de copies de valeurs effectuees Python"
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment