Skip to content
Snippets Groups Projects
Commit b9f85403 authored by david's avatar david
Browse files

Python analysis

parent e813401f
No related branches found
No related tags found
No related merge requests found
......@@ -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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment