Il documento presenta il lavoro di tesi svolto da Michele Damian presso la facoltà di Ingegneria Informatica dell'università di Bologna. Lo scopo della dissertazione è quello di analizzare il comportamento di tuProlog (un interprete per il linguaggio di programmazione logica Prolog) e individuarne i punti critici al fine di migliorarne le prestazioni sia in termini di tempi di esecuzione che di gestione della memoria.
Progetto E Realizzazione Di Strumenti E Funzioni Per Facilitare La Trascrizio...
Analisi di prestazione dell'interprete tuProlog su piattaforma Java - Presentazione
1. Analisi di prestazione dell’interprete tuProlog su
piattaforma Java
Michele Damian
`
ALMA MATER STUDIORUM - UNIVERSITA DI BOLOGNA
` di Ingegneria
Facolta
Corso di Laurea Triennale in Ingegneria Informatica
Relatore: Chiar.mo Prof. Enrico Denti
Anno Accademico 2007/2008
19 marzo 2009
Michele Damian Analisi di prestazione dell’interprete tuProlog su piattaforma Java
2. Obiettivi
Obiettivi
Porre delle basi utili per il miglioramento delle prestazioni di tuProlog.
Attraverso l’analisi dei tempi di esecuzione. . .
e attraverso l’analisi dell’utilizzo della memoria.
Confrontare le performance delle versioni 2.1 e 1.3 dell’interprete.
Michele Damian Analisi di prestazione dell’interprete tuProlog su piattaforma Java
3. Obiettivi
Obiettivi
Porre delle basi utili per il miglioramento delle prestazioni di tuProlog.
Attraverso l’analisi dei tempi di esecuzione. . .
e attraverso l’analisi dell’utilizzo della memoria.
Confrontare le performance delle versioni 2.1 e 1.3 dell’interprete.
Michele Damian Analisi di prestazione dell’interprete tuProlog su piattaforma Java
4. Obiettivi
Obiettivi
Porre delle basi utili per il miglioramento delle prestazioni di tuProlog.
Attraverso l’analisi dei tempi di esecuzione. . .
e attraverso l’analisi dell’utilizzo della memoria.
Confrontare le performance delle versioni 2.1 e 1.3 dell’interprete.
Michele Damian Analisi di prestazione dell’interprete tuProlog su piattaforma Java
5. Obiettivi
Obiettivi
Porre delle basi utili per il miglioramento delle prestazioni di tuProlog.
Attraverso l’analisi dei tempi di esecuzione. . .
e attraverso l’analisi dell’utilizzo della memoria.
Confrontare le performance delle versioni 2.1 e 1.3 dell’interprete.
Michele Damian Analisi di prestazione dell’interprete tuProlog su piattaforma Java
6. L’interprete tuProlog
L’interprete tuProlog
Interprete per il linguaggio di programmazione logica Prolog, ideato per
creare componenti in un’infrastruttura internet dinamica.
Caratteristiche principali
Scritto interamente in Java.
Interoperabile con le librerie Java.
Portabile.
Leggero.
Configurabile.
Michele Damian Analisi di prestazione dell’interprete tuProlog su piattaforma Java
7. L’interprete tuProlog
L’interprete tuProlog
Interprete per il linguaggio di programmazione logica Prolog, ideato per
creare componenti in un’infrastruttura internet dinamica.
Caratteristiche principali
Scritto interamente in Java.
Interoperabile con le librerie Java.
Portabile.
Leggero.
Configurabile.
Michele Damian Analisi di prestazione dell’interprete tuProlog su piattaforma Java
8. L’interprete tuProlog
L’interprete tuProlog
Interprete per il linguaggio di programmazione logica Prolog, ideato per
creare componenti in un’infrastruttura internet dinamica.
Caratteristiche principali
Scritto interamente in Java.
Interoperabile con le librerie Java.
Portabile.
Leggero.
Configurabile.
Michele Damian Analisi di prestazione dell’interprete tuProlog su piattaforma Java
9. L’interprete tuProlog
L’interprete tuProlog
Interprete per il linguaggio di programmazione logica Prolog, ideato per
creare componenti in un’infrastruttura internet dinamica.
Caratteristiche principali
Scritto interamente in Java.
Interoperabile con le librerie Java.
Portabile.
Leggero.
Configurabile.
Michele Damian Analisi di prestazione dell’interprete tuProlog su piattaforma Java
10. L’interprete tuProlog
L’interprete tuProlog
Interprete per il linguaggio di programmazione logica Prolog, ideato per
creare componenti in un’infrastruttura internet dinamica.
Caratteristiche principali
Scritto interamente in Java.
Interoperabile con le librerie Java.
Portabile.
Leggero.
Configurabile.
Michele Damian Analisi di prestazione dell’interprete tuProlog su piattaforma Java
11. L’interprete tuProlog
L’interprete tuProlog
Interprete per il linguaggio di programmazione logica Prolog, ideato per
creare componenti in un’infrastruttura internet dinamica.
Caratteristiche principali
Scritto interamente in Java.
Interoperabile con le librerie Java.
Portabile.
Leggero.
Configurabile.
Michele Damian Analisi di prestazione dell’interprete tuProlog su piattaforma Java
12. Profiling di tuProlog Benchmark
Teorie di test
Parte del benchmark ` composto da teorie utilizzate precedentemente
e
per confrontare le prestazioni di tuProlog con altri interpreti Prolog.
Al fine di rispecchiare maggiormente l’utilizzo di tuProlog su sistemi
di calcolo moderni il benchmark ` stato completato con nuove teorie
e
che aumentano il carico di lavoro.
Altre teorie sono state scritte per analizzare in modo adeguato la
scalabilit` delle prestazioni del motore confrontando il numero di stati
a
dell’albero di ricerca della soluzione con i tempi di esecuzione.
Michele Damian Analisi di prestazione dell’interprete tuProlog su piattaforma Java
13. Profiling di tuProlog Benchmark
Teorie di test
Parte del benchmark ` composto da teorie utilizzate precedentemente
e
per confrontare le prestazioni di tuProlog con altri interpreti Prolog.
Al fine di rispecchiare maggiormente l’utilizzo di tuProlog su sistemi
di calcolo moderni il benchmark ` stato completato con nuove teorie
e
che aumentano il carico di lavoro.
Altre teorie sono state scritte per analizzare in modo adeguato la
scalabilit` delle prestazioni del motore confrontando il numero di stati
a
dell’albero di ricerca della soluzione con i tempi di esecuzione.
Michele Damian Analisi di prestazione dell’interprete tuProlog su piattaforma Java
14. Profiling di tuProlog Benchmark
Teorie di test
Parte del benchmark ` composto da teorie utilizzate precedentemente
e
per confrontare le prestazioni di tuProlog con altri interpreti Prolog.
Al fine di rispecchiare maggiormente l’utilizzo di tuProlog su sistemi
di calcolo moderni il benchmark ` stato completato con nuove teorie
e
che aumentano il carico di lavoro.
Altre teorie sono state scritte per analizzare in modo adeguato la
scalabilit` delle prestazioni del motore confrontando il numero di stati
a
dell’albero di ricerca della soluzione con i tempi di esecuzione.
Michele Damian Analisi di prestazione dell’interprete tuProlog su piattaforma Java
15. Profiling di tuProlog Benchmark
Il profiler HPROF
`
E uno strumento per il profiling di applicazioni Java in grado di iniettare
bytecode nel codice da eseguire.
Pregi
Essendo distribuito liberamente nel JDK ` facilmente accessibile per
e
future estensioni del lavoro.
Consente l’analisi dei tempi di esecuzione e dell’utilizzo della memoria.
Permette un’analisi classe per classe e metodo per metodo.
Mostra il trace dello stack che ha generato la chiamata ad un metodo
o una allocazione.
Difetti
Misura in modo errato il numero di oggetti live allocati, mostrando gli
oggetti non ancora garbage collected.
Michele Damian Analisi di prestazione dell’interprete tuProlog su piattaforma Java
16. Profiling di tuProlog Benchmark
Il profiler HPROF
`
E uno strumento per il profiling di applicazioni Java in grado di iniettare
bytecode nel codice da eseguire.
Pregi
Essendo distribuito liberamente nel JDK ` facilmente accessibile per
e
future estensioni del lavoro.
Consente l’analisi dei tempi di esecuzione e dell’utilizzo della memoria.
Permette un’analisi classe per classe e metodo per metodo.
Mostra il trace dello stack che ha generato la chiamata ad un metodo
o una allocazione.
Difetti
Misura in modo errato il numero di oggetti live allocati, mostrando gli
oggetti non ancora garbage collected.
Michele Damian Analisi di prestazione dell’interprete tuProlog su piattaforma Java
17. Profiling di tuProlog Benchmark
Il profiler HPROF
`
E uno strumento per il profiling di applicazioni Java in grado di iniettare
bytecode nel codice da eseguire.
Pregi
Essendo distribuito liberamente nel JDK ` facilmente accessibile per
e
future estensioni del lavoro.
Consente l’analisi dei tempi di esecuzione e dell’utilizzo della memoria.
Permette un’analisi classe per classe e metodo per metodo.
Mostra il trace dello stack che ha generato la chiamata ad un metodo
o una allocazione.
Difetti
Misura in modo errato il numero di oggetti live allocati, mostrando gli
oggetti non ancora garbage collected.
Michele Damian Analisi di prestazione dell’interprete tuProlog su piattaforma Java
18. Profiling di tuProlog Benchmark
Il profiler HPROF
`
E uno strumento per il profiling di applicazioni Java in grado di iniettare
bytecode nel codice da eseguire.
Pregi
Essendo distribuito liberamente nel JDK ` facilmente accessibile per
e
future estensioni del lavoro.
Consente l’analisi dei tempi di esecuzione e dell’utilizzo della memoria.
Permette un’analisi classe per classe e metodo per metodo.
Mostra il trace dello stack che ha generato la chiamata ad un metodo
o una allocazione.
Difetti
Misura in modo errato il numero di oggetti live allocati, mostrando gli
oggetti non ancora garbage collected.
Michele Damian Analisi di prestazione dell’interprete tuProlog su piattaforma Java
19. Profiling di tuProlog Benchmark
Il profiler HPROF
`
E uno strumento per il profiling di applicazioni Java in grado di iniettare
bytecode nel codice da eseguire.
Pregi
Essendo distribuito liberamente nel JDK ` facilmente accessibile per
e
future estensioni del lavoro.
Consente l’analisi dei tempi di esecuzione e dell’utilizzo della memoria.
Permette un’analisi classe per classe e metodo per metodo.
Mostra il trace dello stack che ha generato la chiamata ad un metodo
o una allocazione.
Difetti
Misura in modo errato il numero di oggetti live allocati, mostrando gli
oggetti non ancora garbage collected.
Michele Damian Analisi di prestazione dell’interprete tuProlog su piattaforma Java
20. Profiling di tuProlog Benchmark
Il profiler HPROF
`
E uno strumento per il profiling di applicazioni Java in grado di iniettare
bytecode nel codice da eseguire.
Pregi
Essendo distribuito liberamente nel JDK ` facilmente accessibile per
e
future estensioni del lavoro.
Consente l’analisi dei tempi di esecuzione e dell’utilizzo della memoria.
Permette un’analisi classe per classe e metodo per metodo.
Mostra il trace dello stack che ha generato la chiamata ad un metodo
o una allocazione.
Difetti
Misura in modo errato il numero di oggetti live allocati, mostrando gli
oggetti non ancora garbage collected.
Michele Damian Analisi di prestazione dell’interprete tuProlog su piattaforma Java
21. Profiling di tuProlog Analisi dei tempi di esecuzione
Scalabilit`
a
Sono stati analizzati i tempi di
esecuzione per risoluzioni di obiettivi
3 + 6! stati 248 s
sempre pi` complessi.
u
Struct.unify 1947041
Var.unify 2584249 La funzione (tempo di
Var.free 1802505 esecuzione)/(numero di stati) ` lineare
e
3 + 2 ∗ 6! stati 489 s per obiettivi semplici.
Struct.unify 3876572
Ma per obiettivi pi` complessi le
u
Var.unify 5181011
prestazioni degradano.
Var.free 3601750
Anche il numero delle chiamate ai
3 + 3 ∗ 6! stati 1898 s
metodi ` proporzionale al numero
e
Object.wait 2
degli stati.
ReferenceQueue.remove 4
Struct.unify 5813154 I metodi Object.wait e
Var.unify 7768221 ReferenceQueue.remove chiamati dal
Var.free 5398379 Garbage Collector sono fra le cause
principali del degrado.
Michele Damian Analisi di prestazione dell’interprete tuProlog su piattaforma Java
22. Profiling di tuProlog Analisi dei tempi di esecuzione
Scalabilit`
a
Sono stati analizzati i tempi di
esecuzione per risoluzioni di obiettivi
3 + 6! stati 248 s
sempre pi` complessi.
u
Struct.unify 1947041
Var.unify 2584249 La funzione (tempo di
Var.free 1802505 esecuzione)/(numero di stati) ` lineare
e
3 + 2 ∗ 6! stati 489 s per obiettivi semplici.
Struct.unify 3876572
Ma per obiettivi pi` complessi le
u
Var.unify 5181011
prestazioni degradano.
Var.free 3601750
Anche il numero delle chiamate ai
3 + 3 ∗ 6! stati 1898 s
metodi ` proporzionale al numero
e
Object.wait 2
degli stati.
ReferenceQueue.remove 4
Struct.unify 5813154 I metodi Object.wait e
Var.unify 7768221 ReferenceQueue.remove chiamati dal
Var.free 5398379 Garbage Collector sono fra le cause
principali del degrado.
Michele Damian Analisi di prestazione dell’interprete tuProlog su piattaforma Java
23. Profiling di tuProlog Analisi dei tempi di esecuzione
Scalabilit`
a
Sono stati analizzati i tempi di
esecuzione per risoluzioni di obiettivi
3 + 6! stati 248 s
sempre pi` complessi.
u
Struct.unify 1947041
Var.unify 2584249 La funzione (tempo di
Var.free 1802505 esecuzione)/(numero di stati) ` lineare
e
3 + 2 ∗ 6! stati 489 s per obiettivi semplici.
Struct.unify 3876572
Ma per obiettivi pi` complessi le
u
Var.unify 5181011
prestazioni degradano.
Var.free 3601750
Anche il numero delle chiamate ai
3 + 3 ∗ 6! stati 1898 s
metodi ` proporzionale al numero
e
Object.wait 2
degli stati.
ReferenceQueue.remove 4
Struct.unify 5813154 I metodi Object.wait e
Var.unify 7768221 ReferenceQueue.remove chiamati dal
Var.free 5398379 Garbage Collector sono fra le cause
principali del degrado.
Michele Damian Analisi di prestazione dell’interprete tuProlog su piattaforma Java
24. Profiling di tuProlog Analisi dei tempi di esecuzione
Scalabilit`
a
Sono stati analizzati i tempi di
esecuzione per risoluzioni di obiettivi
3 + 6! stati 248 s
sempre pi` complessi.
u
Struct.unify 1947041
Var.unify 2584249 La funzione (tempo di
Var.free 1802505 esecuzione)/(numero di stati) ` lineare
e
3 + 2 ∗ 6! stati 489 s per obiettivi semplici.
Struct.unify 3876572
Ma per obiettivi pi` complessi le
u
Var.unify 5181011
prestazioni degradano.
Var.free 3601750
Anche il numero delle chiamate ai
3 + 3 ∗ 6! stati 1898 s
metodi ` proporzionale al numero
e
Object.wait 2
degli stati.
ReferenceQueue.remove 4
Struct.unify 5813154 I metodi Object.wait e
Var.unify 7768221 ReferenceQueue.remove chiamati dal
Var.free 5398379 Garbage Collector sono fra le cause
principali del degrado.
Michele Damian Analisi di prestazione dell’interprete tuProlog su piattaforma Java
25. Profiling di tuProlog Analisi dei tempi di esecuzione
Scalabilit`
a
Sono stati analizzati i tempi di
esecuzione per risoluzioni di obiettivi
3 + 6! stati 248 s
sempre pi` complessi.
u
Struct.unify 1947041
Var.unify 2584249 La funzione (tempo di
Var.free 1802505 esecuzione)/(numero di stati) ` lineare
e
3 + 2 ∗ 6! stati 489 s per obiettivi semplici.
Struct.unify 3876572
Ma per obiettivi pi` complessi le
u
Var.unify 5181011
prestazioni degradano.
Var.free 3601750
Anche il numero delle chiamate ai
3 + 3 ∗ 6! stati 1898 s
metodi ` proporzionale al numero
e
Object.wait 2
degli stati.
ReferenceQueue.remove 4
Struct.unify 5813154 I metodi Object.wait e
Var.unify 7768221 ReferenceQueue.remove chiamati dal
Var.free 5398379 Garbage Collector sono fra le cause
principali del degrado.
Michele Damian Analisi di prestazione dell’interprete tuProlog su piattaforma Java
26. Profiling di tuProlog Analisi dei tempi di esecuzione
Analisi dei metodi
N. Nome metodo Esec %
- Object.wait 12,15
0 Var.occurCheck 3,70
1 Struct.getTerm 3,06
2 Var.unify 3,05
3 2,82
AbstractStringBuilder.append
4 Var.free 2,61
5 Struct.unify 2,25
Il metodo Object.wait ` mediamente quello che occupa la maggior parte del tempo
e
di esecuzione delle teorie.
Le classi Var e Struct sono complessivamente le pi` utilizzate.
u
L’implementazione della struttura Term, Var e Struct deve essere rivista.
Michele Damian Analisi di prestazione dell’interprete tuProlog su piattaforma Java
27. Profiling di tuProlog Analisi dei tempi di esecuzione
Analisi dei metodi
N. Nome metodo Esec %
- Object.wait 12,15
0 Var.occurCheck 3,70
0
1 Struct.getTerm 3,06
2 Var.unify 3,05
3 2,82
AbstractStringBuilder.append
4 Var.free 2,61
5 Struct.unify 2,25
Il metodo Object.wait ` mediamente quello che occupa la maggior parte del tempo
e
di esecuzione delle teorie.
Le classi Var e Struct sono complessivamente le pi` utilizzate.
u
L’implementazione della struttura Term, Var e Struct deve essere rivista.
Michele Damian Analisi di prestazione dell’interprete tuProlog su piattaforma Java
28. Profiling di tuProlog Analisi dei tempi di esecuzione
Analisi dei metodi
N. Nome metodo Esec %
- Object.wait 12,15
0 Var.occurCheck 3,70
0
1 Struct.getTerm 3,06
2 Var.unify 3,05
3 2,82
AbstractStringBuilder.append
4 Var.free 2,61
5 Struct.unify 2,25 1
Il metodo Object.wait ` mediamente quello che occupa la maggior parte del tempo
e
di esecuzione delle teorie.
Le classi Var e Struct sono complessivamente le pi` utilizzate.
u
L’implementazione della struttura Term, Var e Struct deve essere rivista.
Michele Damian Analisi di prestazione dell’interprete tuProlog su piattaforma Java
29. Profiling di tuProlog Analisi dei tempi di esecuzione
Analisi dei metodi
Int.unify
2
N. Nome metodo Esec %
- Object.wait 12,15
0 Var.occurCheck 3,70
0
1 Struct.getTerm 3,06
2 Var.unify 3,05
3 2,82
AbstractStringBuilder.append
4 Var.free 2,61
5 Struct.unify 2,25 1
Il metodo Object.wait ` mediamente quello che occupa la maggior parte del tempo
e
di esecuzione delle teorie.
Le classi Var e Struct sono complessivamente le pi` utilizzate.
u
L’implementazione della struttura Term, Var e Struct deve essere rivista.
Michele Damian Analisi di prestazione dell’interprete tuProlog su piattaforma Java
30. Profiling di tuProlog Analisi dei tempi di esecuzione
Analisi dei metodi
Int.unify
2 3
Term.match
N. Nome metodo Esec %
- Object.wait 12,15
0 Var.occurCheck 3,70
0
1 Struct.getTerm 3,06
2 Var.unify 3,05
3 2,82
AbstractStringBuilder.append
4 Var.free 2,61
5 Struct.unify 2,25 1
Il metodo Object.wait ` mediamente quello che occupa la maggior parte del tempo
e
di esecuzione delle teorie.
Le classi Var e Struct sono complessivamente le pi` utilizzate.
u
L’implementazione della struttura Term, Var e Struct deve essere rivista.
Michele Damian Analisi di prestazione dell’interprete tuProlog su piattaforma Java
31. Profiling di tuProlog Analisi dei tempi di esecuzione
Analisi dei metodi
Int.unify
2 3
Term.match
N. Nome metodo Esec %
- Object.wait 12,15
0 Var.occurCheck 3,70
0
1 Struct.getTerm 3,06
Var.rename
2 Var.unify 3,05
3 2,82
AbstractStringBuilder.append
4 Var.free 2,61
Struct.toString Struct.<init>
5 Struct.unify 2,25 1 4
Il metodo Object.wait ` mediamente quello che occupa la maggior parte del tempo
e
di esecuzione delle teorie.
Le classi Var e Struct sono complessivamente le pi` utilizzate.
u
L’implementazione della struttura Term, Var e Struct deve essere rivista.
Michele Damian Analisi di prestazione dell’interprete tuProlog su piattaforma Java
32. Profiling di tuProlog Analisi dei tempi di esecuzione
Analisi dei metodi
Int.unify
2 3
Term.match
N. Nome metodo Esec %
- Object.wait 12,15
0 Var.occurCheck 3,70 Term.match
5 0
1 Struct.getTerm 3,06
Var.rename
2 Var.unify 3,05
3 2,82
AbstractStringBuilder.append
4 Var.free 2,61
Struct.toString Struct.<init>
5 Struct.unify 2,25 1 4
Il metodo Object.wait ` mediamente quello che occupa la maggior parte del tempo
e
di esecuzione delle teorie.
Le classi Var e Struct sono complessivamente le pi` utilizzate.
u
L’implementazione della struttura Term, Var e Struct deve essere rivista.
Michele Damian Analisi di prestazione dell’interprete tuProlog su piattaforma Java
33. Profiling di tuProlog Analisi dei tempi di esecuzione
Analisi dei metodi
Int.unify
2 3
Term.match
N. Nome metodo Esec %
- Object.wait 12,15
0 Var.occurCheck 3,70 Term.match
5 0
1 Struct.getTerm 3,06
Var.rename
2 Var.unify 3,05
3 2,82
AbstractStringBuilder.append
4 Var.free 2,61
Struct.toString Struct.<init>
5 Struct.unify 2,25 1 4
Il metodo Object.wait ` mediamente quello che occupa la maggior parte del tempo
e
di esecuzione delle teorie.
Le classi Var e Struct sono complessivamente le pi` utilizzate.
u
L’implementazione della struttura Term, Var e Struct deve essere rivista.
Michele Damian Analisi di prestazione dell’interprete tuProlog su piattaforma Java
34. Profiling di tuProlog Analisi dell’utilizzo della memoria
Analisi degli oggetti allocati
Nove classi istanziano il 75% della
memoria totale allocata.
Nome oggetto M. allocata %
Le classi ArrayList e AbstractList$Itr
Object[] 27,40
vengono utilizzate in maggior modo
char[] 14,71
dallo stesso metodo.
ArrayList 7,90
ArrayList istanzia uno o pi` oggetti
u
AbstractList$Itr 6,95
Object[] nel suo tempo di vita.
Struct 5,37
String 4,15 Lo stesso vale per String e
Term[] 3,82 StringBuffer che istanziano oggetti
Var 3,50 char[].
StringBuffer 1,82
Le classi Struct e Var sono
specializzazioni di Term e la stessa
Struct contiene array di Term.
Michele Damian Analisi di prestazione dell’interprete tuProlog su piattaforma Java
35. Profiling di tuProlog Analisi dell’utilizzo della memoria
Analisi degli oggetti allocati
Nove classi istanziano il 75% della
memoria totale allocata.
Nome oggetto M. allocata %
Le classi ArrayList e AbstractList$Itr
Object[] 27,40
vengono utilizzate in maggior modo
char[] 14,71
dallo stesso metodo.
ArrayList 7,90
ArrayList istanzia uno o pi` oggetti
u
AbstractList$Itr 6,95
Object[] nel suo tempo di vita.
Struct 5,37
String 4,15 Lo stesso vale per String e
Term[] 3,82 StringBuffer che istanziano oggetti
Var 3,50 char[].
StringBuffer 1,82
Le classi Struct e Var sono
specializzazioni di Term e la stessa
Struct contiene array di Term.
Michele Damian Analisi di prestazione dell’interprete tuProlog su piattaforma Java
36. Profiling di tuProlog Analisi dell’utilizzo della memoria
Analisi degli oggetti allocati
Nove classi istanziano il 75% della
memoria totale allocata.
Nome oggetto M. allocata %
Le classi ArrayList e AbstractList$Itr
Object[] 27,40
vengono utilizzate in maggior modo
char[] 14,71
dallo stesso metodo.
ArrayList 7,90
ArrayList istanzia uno o pi` oggetti
u
AbstractList$Itr 6,95
Object[] nel suo tempo di vita.
Struct 5,37
String 4,15 Lo stesso vale per String e
Term[] 3,82 StringBuffer che istanziano oggetti
Var 3,50 char[].
StringBuffer 1,82
Le classi Struct e Var sono
specializzazioni di Term e la stessa
Struct contiene array di Term.
Michele Damian Analisi di prestazione dell’interprete tuProlog su piattaforma Java
37. Profiling di tuProlog Analisi dell’utilizzo della memoria
Analisi degli oggetti allocati
Nove classi istanziano il 75% della
memoria totale allocata.
Nome oggetto M. allocata %
Le classi ArrayList e AbstractList$Itr
Object[] 27,40
vengono utilizzate in maggior modo
char[] 14,71
dallo stesso metodo.
ArrayList 7,90
ArrayList istanzia uno o pi` oggetti
u
AbstractList$Itr 6,95
Object[] nel suo tempo di vita.
Struct 5,37
String 4,15 Lo stesso vale per String e
Term[] 3,82 StringBuffer che istanziano oggetti
Var 3,50 char[].
StringBuffer 1,82
Le classi Struct e Var sono
specializzazioni di Term e la stessa
Struct contiene array di Term.
Michele Damian Analisi di prestazione dell’interprete tuProlog su piattaforma Java
38. Profiling di tuProlog Analisi dell’utilizzo della memoria
Analisi degli oggetti allocati
Nove classi istanziano il 75% della
memoria totale allocata.
Nome oggetto M. allocata %
Le classi ArrayList e AbstractList$Itr
Object[] 27,40
vengono utilizzate in maggior modo
char[] 14,71
dallo stesso metodo.
ArrayList 7,90
ArrayList istanzia uno o pi` oggetti
u
AbstractList$Itr 6,95
Object[] nel suo tempo di vita.
Struct 5,37
String 4,15 Lo stesso vale per String e
Term[] 3,82 StringBuffer che istanziano oggetti
Var 3,50 char[].
StringBuffer 1,82
Le classi Struct e Var sono
specializzazioni di Term e la stessa
Struct contiene array di Term.
Michele Damian Analisi di prestazione dell’interprete tuProlog su piattaforma Java
39. Profiling di tuProlog Analisi dell’utilizzo della memoria
Cause delle allocazioni
ClauseStore.deunify
N. Nome oggetto 2
0 Object[]
1 char[]
Var.free
2 ArrayList
3 AbstractList$Itr
Term.match
Term.match
4 Struct
5 String
6 Term[]
ClauseStore.deunify
7 Var
0
3
8 StringBuffer
ClauseStore.deunify
I metodi ClauseStore.deunify e Term.match causano la maggior parte
dell’allocazione della memoria.
Escludendo poche eccezioni Var.rename ` l’unico metodo ad allocare oggetti
e
String, StringBuilder e char[] che vale il 20% della memoria totale allocata.
Come per i tempi di esecuzione la struttura Term - Struct - Var dovrebbe essere
resa pi` leggera.
u
Michele Damian Analisi di prestazione dell’interprete tuProlog su piattaforma Java
40. Profiling di tuProlog Analisi dell’utilizzo della memoria
Cause delle allocazioni
Var.rename
N. Nome oggetto 1
0 Object[]
1 char[]
2 ArrayList
3 AbstractList$Itr
4 Struct
5 String
6 Term[]
7 Var Var.rename
5 8
8 StringBuffer Var.rename
I metodi ClauseStore.deunify e Term.match causano la maggior parte
dell’allocazione della memoria.
Escludendo poche eccezioni Var.rename ` l’unico metodo ad allocare oggetti
e
String, StringBuilder e char[] che vale il 20% della memoria totale allocata.
Come per i tempi di esecuzione la struttura Term - Struct - Var dovrebbe essere
resa pi` leggera.
u
Michele Damian Analisi di prestazione dell’interprete tuProlog su piattaforma Java
41. Profiling di tuProlog Analisi dell’utilizzo della memoria
Cause delle allocazioni
N. Nome oggetto 4
0 Object[]
1 char[]
2 ArrayList
3 AbstractList$Itr
4 Struct
5 String
6 Term[]
7 Var
7
6
8 StringBuffer
I metodi ClauseStore.deunify e Term.match causano la maggior parte
dell’allocazione della memoria.
Escludendo poche eccezioni Var.rename ` l’unico metodo ad allocare oggetti
e
String, StringBuilder e char[] che vale il 20% della memoria totale allocata.
Come per i tempi di esecuzione la struttura Term - Struct - Var dovrebbe essere
resa pi` leggera.
u
Michele Damian Analisi di prestazione dell’interprete tuProlog su piattaforma Java
42. Profiling di tuProlog Confronto con la versione 1.3
Confronto con la versione 1.3
Sono stati messi a confronto i tempi di escuzione e l’utilizzo della
memoria delle versioni 2.1 e 1.3 di tuProlog.
Nelle teorie sottoposte a test la nuova versione ` risultata pi` lenta
e u
della vecchia, con un aumento dei tempi medio del 20%.
Anche per quanto concerne la memoria allocata si ` visto un aumento
e
medio del 20% nella versione 2.1 rispetto alla 1.3.
Michele Damian Analisi di prestazione dell’interprete tuProlog su piattaforma Java
43. Profiling di tuProlog Confronto con la versione 1.3
Confronto con la versione 1.3
Sono stati messi a confronto i tempi di escuzione e l’utilizzo della
memoria delle versioni 2.1 e 1.3 di tuProlog.
Nelle teorie sottoposte a test la nuova versione ` risultata pi` lenta
e u
della vecchia, con un aumento dei tempi medio del 20%.
Anche per quanto concerne la memoria allocata si ` visto un aumento
e
medio del 20% nella versione 2.1 rispetto alla 1.3.
Michele Damian Analisi di prestazione dell’interprete tuProlog su piattaforma Java
44. Profiling di tuProlog Confronto con la versione 1.3
Confronto con la versione 1.3
Sono stati messi a confronto i tempi di escuzione e l’utilizzo della
memoria delle versioni 2.1 e 1.3 di tuProlog.
Nelle teorie sottoposte a test la nuova versione ` risultata pi` lenta
e u
della vecchia, con un aumento dei tempi medio del 20%.
Anche per quanto concerne la memoria allocata si ` visto un aumento
e
medio del 20% nella versione 2.1 rispetto alla 1.3.
Michele Damian Analisi di prestazione dell’interprete tuProlog su piattaforma Java
45. Conclusioni
Conclusioni
Il garbage collector causa un degrado consistente dei tempi di
esecuzione.
Un miglioramento dell’efficienza in termini di allocazione di memoria
causa indirettamente un miglioramento dei tempi di esecuzione.
Term e le sue specializzazioni Struct e Var vanno reimplementate.
In particolare il metodo Term.match causa sia un aumento
considerevole dei tempi di esecuzione sia della memoria utilizzata.
Suggerimenti
Aumentare la capacit` iniziale della struttura dati ArrayList in modo
a
da limitare il numero di Object[] che essa alloca.
Sostituire la classe String in Var.rename con StringBuilder, pi` veloce
u
e meno avida di memoria nelle operazioni di append.
Michele Damian Analisi di prestazione dell’interprete tuProlog su piattaforma Java
46. Conclusioni
Conclusioni
Il garbage collector causa un degrado consistente dei tempi di
esecuzione.
Un miglioramento dell’efficienza in termini di allocazione di memoria
causa indirettamente un miglioramento dei tempi di esecuzione.
Term e le sue specializzazioni Struct e Var vanno reimplementate.
In particolare il metodo Term.match causa sia un aumento
considerevole dei tempi di esecuzione sia della memoria utilizzata.
Suggerimenti
Aumentare la capacit` iniziale della struttura dati ArrayList in modo
a
da limitare il numero di Object[] che essa alloca.
Sostituire la classe String in Var.rename con StringBuilder, pi` veloce
u
e meno avida di memoria nelle operazioni di append.
Michele Damian Analisi di prestazione dell’interprete tuProlog su piattaforma Java
47. Conclusioni
Conclusioni
Il garbage collector causa un degrado consistente dei tempi di
esecuzione.
Un miglioramento dell’efficienza in termini di allocazione di memoria
causa indirettamente un miglioramento dei tempi di esecuzione.
Term e le sue specializzazioni Struct e Var vanno reimplementate.
In particolare il metodo Term.match causa sia un aumento
considerevole dei tempi di esecuzione sia della memoria utilizzata.
Suggerimenti
Aumentare la capacit` iniziale della struttura dati ArrayList in modo
a
da limitare il numero di Object[] che essa alloca.
Sostituire la classe String in Var.rename con StringBuilder, pi` veloce
u
e meno avida di memoria nelle operazioni di append.
Michele Damian Analisi di prestazione dell’interprete tuProlog su piattaforma Java
48. Conclusioni
Conclusioni
Il garbage collector causa un degrado consistente dei tempi di
esecuzione.
Un miglioramento dell’efficienza in termini di allocazione di memoria
causa indirettamente un miglioramento dei tempi di esecuzione.
Term e le sue specializzazioni Struct e Var vanno reimplementate.
In particolare il metodo Term.match causa sia un aumento
considerevole dei tempi di esecuzione sia della memoria utilizzata.
Suggerimenti
Aumentare la capacit` iniziale della struttura dati ArrayList in modo
a
da limitare il numero di Object[] che essa alloca.
Sostituire la classe String in Var.rename con StringBuilder, pi` veloce
u
e meno avida di memoria nelle operazioni di append.
Michele Damian Analisi di prestazione dell’interprete tuProlog su piattaforma Java
49. Conclusioni
Conclusioni
Il garbage collector causa un degrado consistente dei tempi di
esecuzione.
Un miglioramento dell’efficienza in termini di allocazione di memoria
causa indirettamente un miglioramento dei tempi di esecuzione.
Term e le sue specializzazioni Struct e Var vanno reimplementate.
In particolare il metodo Term.match causa sia un aumento
considerevole dei tempi di esecuzione sia della memoria utilizzata.
Suggerimenti
Aumentare la capacit` iniziale della struttura dati ArrayList in modo
a
da limitare il numero di Object[] che essa alloca.
Sostituire la classe String in Var.rename con StringBuilder, pi` veloce
u
e meno avida di memoria nelle operazioni di append.
Michele Damian Analisi di prestazione dell’interprete tuProlog su piattaforma Java
50. Conclusioni
Conclusioni
Il garbage collector causa un degrado consistente dei tempi di
esecuzione.
Un miglioramento dell’efficienza in termini di allocazione di memoria
causa indirettamente un miglioramento dei tempi di esecuzione.
Term e le sue specializzazioni Struct e Var vanno reimplementate.
In particolare il metodo Term.match causa sia un aumento
considerevole dei tempi di esecuzione sia della memoria utilizzata.
Suggerimenti
Aumentare la capacit` iniziale della struttura dati ArrayList in modo
a
da limitare il numero di Object[] che essa alloca.
Sostituire la classe String in Var.rename con StringBuilder, pi` veloce
u
e meno avida di memoria nelle operazioni di append.
Michele Damian Analisi di prestazione dell’interprete tuProlog su piattaforma Java