Ingegneria degli Algoritmi

Corso di Laurea in Ingegneria Informatica e Automatica - A.A. 2012-2013

HomePage | Avvisi | Diario lezioni | Programma | Materiale didattico | Esami | Forum | Login
Most recent edit on 2013-02-28 15:00:07 by CamilDemetrescu

Additions:
Dopo un'ampia introduzione al linguaggio C, il corso affronterà come i costrutti di alto livello si mappano su codice assembly x64-64 e come il programmatore può sfruttare tecnologie come cache e pipeline per estrarre il massimo delle prestazioni dalla macchina, imparando a conoscere quali ottimizzazioni sono fatte automaticamente dai compilatori e quali invece vanno effettuate esplicitamente nel codice. Verrà inoltre mostrato come gestire la memoria in modo efficiente, studiando in particolare il funzionamento degli allocatori dinamici di memoria. Il corso verrà completato da un'introduzione alla programmazione parallela sfruttando le schede grafiche GPU come strumento di calcolo general-purpose. Lo studente verrà introdotto all'uso di vari tool come profiler e debugger.

Deletions:
Dopo un'ampia introduzione al linguaggio C, il corso affronterà come i costrutti di alto livello si mappano su codice macchina e come il programmatore può sfruttare tecnologie come cache e pipeline per estrarre il massimo delle prestazioni dalla macchina, imparando a conoscere quali ottimizzazioni sono fatte automaticamente dai compilatori e quali invece vanno effettuate esplicitamente nel codice. Verrà inoltre mostrato come gestire la memoria in modo efficiente, studiando in particolare il funzionamento degli allocatori dinamici di memoria. Il corso verrà completato da un'introduzione alla programmazione parallela sfruttando le schede grafiche GPU come strumento di calcolo general-purpose. Lo studente verrà introdotto all'uso di vari tool come profiler e debugger.



Edited on 2013-02-28 14:56:50 by CamilDemetrescu

Additions:
Dopo un'ampia introduzione al linguaggio C, il corso affronterà come i costrutti di alto livello si mappano su codice macchina e come il programmatore può sfruttare tecnologie come cache e pipeline per estrarre il massimo delle prestazioni dalla macchina, imparando a conoscere quali ottimizzazioni sono fatte automaticamente dai compilatori e quali invece vanno effettuate esplicitamente nel codice. Verrà inoltre mostrato come gestire la memoria in modo efficiente, studiando in particolare il funzionamento degli allocatori dinamici di memoria. Il corso verrà completato da un'introduzione alla programmazione parallela sfruttando le schede grafiche GPU come strumento di calcolo general-purpose. Lo studente verrà introdotto all'uso di vari tool come profiler e debugger.

Deletions:
Dopo un'ampia introduzione al linguaggio C, il corso affronterà come i costrutti di alto livello si mappano su codice macchina e come il programmatore può sfruttare tecnologie come cache e pipeline per estrarre il massimo delle prestazioni dalla macchina, imparando a conoscere quali ottimizzazioni sono fatte automaticamente dai compilatori e quali invece vanno effettuate esplicitamente nel codice. Verrà inoltre mostrato come gestire la memoria in modo efficiente, studiando in particolare il funzionamento degli allocatori dinamici di memoria. Il corso verrà completato da una trattazione introduttiva alla programmazione parallela sfruttando le schede grafiche GPU come strumento di calcolo general-purpose. Lo studente verrà introdotto all'uso di vari tool come profiler e debugger.



Edited on 2013-02-28 14:56:06 by CamilDemetrescu

Additions:
Dopo un'ampia introduzione al linguaggio C, il corso affronterà come i costrutti di alto livello si mappano su codice macchina e come il programmatore può sfruttare tecnologie come cache e pipeline per estrarre il massimo delle prestazioni dalla macchina, imparando a conoscere quali ottimizzazioni sono fatte automaticamente dai compilatori e quali invece vanno effettuate esplicitamente nel codice. Verrà inoltre mostrato come gestire la memoria in modo efficiente, studiando in particolare il funzionamento degli allocatori dinamici di memoria. Il corso verrà completato da una trattazione introduttiva alla programmazione parallela sfruttando le schede grafiche GPU come strumento di calcolo general-purpose. Lo studente verrà introdotto all'uso di vari tool come profiler e debugger.

Deletions:
Dopo un'ampia introduzione al linguaggio C, il corso affronterà come i costrutti di alto livello si mappano su codice macchina e come il programmatore può sfruttare tecnologie come cache e pipeline per estrarre il massimo delle prestazioni dalla macchina, imparando a conoscere quali ottimizzazioni sono fatte automaticamente dai compilatori e quali invece vanno effettuate esplicitamente nel codice. Verrà inoltre mostrato come gestire la memoria in modo efficiente, studiando in particolare il funzionamento degli allocatori dinamici di memoria. Il corso verrà completato da una trattazione introduttiva della programmazione parallela sfruttando le schede grafiche GPU come strumento di calcolo general-purpose. Lo studente verrà introdotto all'uso di vari tool come profiler e debugger.



Edited on 2013-02-28 14:54:47 by CamilDemetrescu

Additions:
I moderni sistemi di calcolo forniscono una grande potenza computazionale frutto di una notevole complessità architetturale. Sfruttare anche in parte questa potenza è una sfida che richiede una conoscenza interna dell'hardware, una comprensione profonda degli algoritmi alla base delle computazioni, e una buona dose di creatività per ottenere implementazioni che utilizzino in modo ottimale le risorse di calcolo disponibili. La ricompensa che si ha nell'investire su queste competenze è la capacità di scrivere programmi in grado di processare grandi quantità di dati più efficientemente anche di vari ordini di grandezza rispetto alle tecniche di programmazione convenzionali, acquisendo alcune delle capacità di base per confrontarsi con la sfida del big data computing che sta rivoluzionando il modo in cui si sviluppano i moderni sistemi software.

Deletions:
I sistemi di calcolo moderni forniscono una grande potenza di calcolo frutto di una notevole complessità architetturale. Sfruttare anche in parte questa potenza è una sfida che richiede una conoscenza interna dell'hardware, una comprensione profonda degli algoritmi alla base delle computazioni, e una buona dose di creatività per ottenere implementazioni che utilizzino in modo ottimale le risorse di calcolo disponibili. La ricompensa che si ha nell'investire su queste competenze è la capacità di scrivere programmi in grado di processare grandi quantità di dati più efficientemente anche di vari ordini di grandezza rispetto alle tecniche di programmazione convenzionali, acquisendo alcune delle capacità di base per confrontarsi con la sfida del big data computing che sta rivoluzionando il modo in cui si sviluppano i sistemi software nella società moderna.



Edited on 2013-02-28 14:52:27 by CamilDemetrescu

Additions:
I sistemi di calcolo moderni forniscono una grande potenza di calcolo frutto di una notevole complessità architetturale. Sfruttare anche in parte questa potenza è una sfida che richiede una conoscenza interna dell'hardware, una comprensione profonda degli algoritmi alla base delle computazioni, e una buona dose di creatività per ottenere implementazioni che utilizzino in modo ottimale le risorse di calcolo disponibili. La ricompensa che si ha nell'investire su queste competenze è la capacità di scrivere programmi in grado di processare grandi quantità di dati più efficientemente anche di vari ordini di grandezza rispetto alle tecniche di programmazione convenzionali, acquisendo alcune delle capacità di base per confrontarsi con la sfida del big data computing che sta rivoluzionando il modo in cui si sviluppano i sistemi software nella società moderna.
Dopo un'ampia introduzione al linguaggio C, il corso affronterà come i costrutti di alto livello si mappano su codice macchina e come il programmatore può sfruttare tecnologie come cache e pipeline per estrarre il massimo delle prestazioni dalla macchina, imparando a conoscere quali ottimizzazioni sono fatte automaticamente dai compilatori e quali invece vanno effettuate esplicitamente nel codice. Verrà inoltre mostrato come gestire la memoria in modo efficiente, studiando in particolare il funzionamento degli allocatori dinamici di memoria. Il corso verrà completato da una trattazione introduttiva della programmazione parallela sfruttando le schede grafiche GPU come strumento di calcolo general-purpose. Lo studente verrà introdotto all'uso di vari tool come profiler e debugger.


Deletions:
I moderni sistemi di calcolo forniscono una grande potenza computazionale frutto di una notevole complessità architetturale. Sfruttare anche in parte questa potenza è una sfida che richiede una conoscenza interna dell'hardware, una comprensione profonda degli algoritmi alla base delle computazioni e una buona dose di creatività per ottenere implementazioni che utilizzino in modo ottimale le risorse di calcolo disponibili. La ricompensa che si ha nell'investire su queste competenze è la capacità di scrivere programmi in grado di processare grandi quantità di dati più efficientemente anche di vari ordini di grandezza rispetto alle tecniche di programmazione convenzionali, acquisendo alcune delle capacità di base per confrontarsi con la sfida del big data computing che sta rivoluzionando il modo in cui si sviluppano i moderni sistemi software.
Dopo un'ampia introduzione al linguaggio C, il corso affronterà come i costrutti di alto livello si mappano su codice assembly x86-64 e come il programmatore può sfruttare tecnologie come cache e pipeline per estrarre il massimo delle prestazioni dalla macchina, imparando a conoscere quali ottimizzazioni sono fatte automaticamente dai compilatori e quali invece vanno effettuate esplicitamente nel codice. Verrà inoltre mostrato come gestire la memoria in modo efficiente, studiando in particolare come funziona un allocatore dinamico di memoria. Il corso verrà completato da una trattazione introduttiva della programmazione parallela sfruttando le schede grafiche GPU come strumento di calcolo general-purpose. Lo studente verrà introdotto all'uso di vari tool come profiler e debugger.




Edited on 2013-02-28 14:41:54 by CamilDemetrescu

Additions:
I moderni sistemi di calcolo forniscono una grande potenza computazionale frutto di una notevole complessità architetturale. Sfruttare anche in parte questa potenza è una sfida che richiede una conoscenza interna dell'hardware, una comprensione profonda degli algoritmi alla base delle computazioni e una buona dose di creatività per ottenere implementazioni che utilizzino in modo ottimale le risorse di calcolo disponibili. La ricompensa che si ha nell'investire su queste competenze è la capacità di scrivere programmi in grado di processare grandi quantità di dati più efficientemente anche di vari ordini di grandezza rispetto alle tecniche di programmazione convenzionali, acquisendo alcune delle capacità di base per confrontarsi con la sfida del big data computing che sta rivoluzionando il modo in cui si sviluppano i moderni sistemi software.

Deletions:
I sistemi di calcolo moderni forniscono una grande potenza computazionale frutto di una notevole complessità architetturale. Sfruttare anche in parte questa potenza è una sfida che richiede una conoscenza interna dell'hardware, una comprensione profonda degli algoritmi alla base delle computazioni e una buona dose di creatività per ottenere implementazioni che utilizzino in modo ottimale le risorse di calcolo disponibili. La ricompensa che si ha nell'investire su queste competenze è la capacità di scrivere programmi in grado di processare grandi quantità di dati più efficientemente anche di vari ordini di grandezza rispetto alle tecniche di programmazione convenzionali, acquisendo alcune delle capacità di base per confrontarsi con la sfida del big data computing che sta rivoluzionando il modo in cui si sviluppano i moderni sistemi software.



Edited on 2013-02-28 14:40:50 by CamilDemetrescu

Additions:
I sistemi di calcolo moderni forniscono una grande potenza computazionale frutto di una notevole complessità architetturale. Sfruttare anche in parte questa potenza è una sfida che richiede una conoscenza interna dell'hardware, una comprensione profonda degli algoritmi alla base delle computazioni e una buona dose di creatività per ottenere implementazioni che utilizzino in modo ottimale le risorse di calcolo disponibili. La ricompensa che si ha nell'investire su queste competenze è la capacità di scrivere programmi in grado di processare grandi quantità di dati più efficientemente anche di vari ordini di grandezza rispetto alle tecniche di programmazione convenzionali, acquisendo alcune delle capacità di base per confrontarsi con la sfida del big data computing che sta rivoluzionando il modo in cui si sviluppano i moderni sistemi software.

Deletions:
I sistemi di calcolo moderni forniscono una grande potenza di calcolo frutto di una notevole complessità architetturale. Sfruttare anche in parte questa potenza è una sfida che richiede una conoscenza interna dell'hardware, una comprensione profonda degli algoritmi alla base delle computazioni e una buona dose di creatività per ottenere implementazioni che utilizzino in modo ottimale le risorse di calcolo disponibili. La ricompensa che si ha nell'investire su queste competenze è la capacità di scrivere programmi in grado di processare grandi quantità di dati più efficientemente anche di vari ordini di grandezza rispetto alle tecniche di programmazione convenzionali, acquisendo alcune delle capacità di base per confrontarsi con la sfida del big data computing che sta rivoluzionando il modo in cui si sviluppano i moderni sistemi software.



Edited on 2013-02-28 14:35:38 by CamilDemetrescu

Additions:
I sistemi di calcolo moderni forniscono una grande potenza di calcolo frutto di una notevole complessità architetturale. Sfruttare anche in parte questa potenza è una sfida che richiede una conoscenza interna dell'hardware, una comprensione profonda degli algoritmi alla base delle computazioni e una buona dose di creatività per ottenere implementazioni che utilizzino in modo ottimale le risorse di calcolo disponibili. La ricompensa che si ha nell'investire su queste competenze è la capacità di scrivere programmi in grado di processare grandi quantità di dati più efficientemente anche di vari ordini di grandezza rispetto alle tecniche di programmazione convenzionali, acquisendo alcune delle capacità di base per confrontarsi con la sfida del big data computing che sta rivoluzionando il modo in cui si sviluppano i moderni sistemi software.

Deletions:
I sistemi di calcolo moderni forniscono una grande potenza di calcolo frutto di una notevole complessità architetturale. Sfruttare anche in parte questa potenza è una sfida che richiede una conoscenza interna dell'hardware, una comprensione profonda degli algoritmi alla base delle computazioni e una buona dose di creatività per ottenere implementazioni che utilizzino in modo ottimale le risorse di calcolo disponibili. La ricompensa che si ha nell'investire su queste competenze è la capacità di scrivere programmi in grado di processare grandi quantità di dati più efficientemente anche di vari ordini di grandezza rispetto alle tecniche di programmazione convenzionali, acquisendo alcune delle capacità di base per confrontarsi con la sfida del big data computing che sta rivoluzionando il modo in cui si sviluppano i sistemi software nella società moderna.



Edited on 2013-02-28 14:33:26 by CamilDemetrescu

Additions:
Dopo un'ampia introduzione al linguaggio C, il corso affronterà come i costrutti di alto livello si mappano su codice assembly x86-64 e come il programmatore può sfruttare tecnologie come cache e pipeline per estrarre il massimo delle prestazioni dalla macchina, imparando a conoscere quali ottimizzazioni sono fatte automaticamente dai compilatori e quali invece vanno effettuate esplicitamente nel codice. Verrà inoltre mostrato come gestire la memoria in modo efficiente, studiando in particolare come funziona un allocatore dinamico di memoria. Il corso verrà completato da una trattazione introduttiva della programmazione parallela sfruttando le schede grafiche GPU come strumento di calcolo general-purpose. Lo studente verrà introdotto all'uso di vari tool come profiler e debugger.

Deletions:
Dopo un'ampia introduzione al linguaggio C, il corso affronterà come i costrutti di alto livello si mappano su codice macchina e come il programmatore può sfruttare tecnologie come cache e pipeline per estrarre il massimo delle prestazioni dalla macchina, imparando a conoscere quali ottimizzazioni sono fatte automaticamente dai compilatori e quali invece vanno effettuate esplicitamente nel codice. Verrà inoltre mostrato come gestire la memoria in modo efficiente, studiando in particolare come funziona un allocatore dinamico di memoria. Il corso verrà completato da una trattazione introduttiva della programmazione parallela sfruttando le schede grafiche GPU come strumento di calcolo general-purpose. Lo studente verrà introdotto all'uso di vari tool come profiler e debugger.



Edited on 2013-02-28 14:18:05 by CamilDemetrescu

Additions:
I sistemi di calcolo moderni forniscono una grande potenza di calcolo frutto di una notevole complessità architetturale. Sfruttare anche in parte questa potenza è una sfida che richiede una conoscenza interna dell'hardware, una comprensione profonda degli algoritmi alla base delle computazioni e una buona dose di creatività per ottenere implementazioni che utilizzino in modo ottimale le risorse di calcolo disponibili. La ricompensa che si ha nell'investire su queste competenze è la capacità di scrivere programmi in grado di processare grandi quantità di dati più efficientemente anche di vari ordini di grandezza rispetto alle tecniche di programmazione convenzionali, acquisendo alcune delle capacità di base per confrontarsi con la sfida del big data computing che sta rivoluzionando il modo in cui si sviluppano i sistemi software nella società moderna.

Deletions:
I sistemi di calcolo moderni forniscono una grande potenza di calcolo frutto di una notevole complessità architetturale. Sfruttare anche in parte questa potenza è una sfida che richiede una conoscenza interna del sistema di calcolo, una comprensione profonda degli algoritmi alla base delle computazioni e una buona dose di creatività per ottenere implementazioni che utilizzino in modo ottimale le risorse di calcolo disponibili. La ricompensa che si ha nell'investire su queste competenze è la capacità di scrivere programmi in grado di processare grandi quantità di dati più efficientemente anche di vari ordini di grandezza rispetto alle tecniche di programmazione convenzionali, acquisendo alcune delle capacità di base per confrontarsi con la sfida del big data computing che sta rivoluzionando il modo in cui si sviluppano i sistemi software nella società moderna.



Edited on 2013-02-28 12:54:31 by CamilDemetrescu

Additions:
Dopo un'ampia introduzione al linguaggio C, il corso affronterà come i costrutti di alto livello si mappano su codice macchina e come il programmatore può sfruttare tecnologie come cache e pipeline per estrarre il massimo delle prestazioni dalla macchina, imparando a conoscere quali ottimizzazioni sono fatte automaticamente dai compilatori e quali invece vanno effettuate esplicitamente nel codice. Verrà inoltre mostrato come gestire la memoria in modo efficiente, studiando in particolare come funziona un allocatore dinamico di memoria. Il corso verrà completato da una trattazione introduttiva della programmazione parallela sfruttando le schede grafiche GPU come strumento di calcolo general-purpose. Lo studente verrà introdotto all'uso di vari tool come profiler e debugger.

Deletions:
Dopo un'ampia introduzione al linguaggio C, il corso affronterà come i costrutti di alto livello si mappano su codice macchina e come il programmatore può sfruttare tecnologie come cache e pipeline per estrarre il massimo delle prestazioni dalla macchina, imparando a conoscere quali ottimizzazioni sono fatte automaticamente dai compilatori e quali invece vanno effettuate esplicitamente nel codice. Verrà inoltre mostrato come gestire la memoria in modo efficiente, studiando in particolare come funziona un allocatore dinamico di memoria. Il corso verrà completato da una trattazione introduttiva della programmazione parallela sfruttando le schede grafiche GPU come strumento di calcolo general-purpose. Il corso introdurrà lo studente all'uso di vari tool come profiler e debugger.



Edited on 2013-02-28 12:48:32 by CamilDemetrescu

Additions:
I sistemi di calcolo moderni forniscono una grande potenza di calcolo frutto di una notevole complessità architetturale. Sfruttare anche in parte questa potenza è una sfida che richiede una conoscenza interna del sistema di calcolo, una comprensione profonda degli algoritmi alla base delle computazioni e una buona dose di creatività per ottenere implementazioni che utilizzino in modo ottimale le risorse di calcolo disponibili. La ricompensa che si ha nell'investire su queste competenze è la capacità di scrivere programmi in grado di processare grandi quantità di dati più efficientemente anche di vari ordini di grandezza rispetto alle tecniche di programmazione convenzionali, acquisendo alcune delle capacità di base per confrontarsi con la sfida del big data computing che sta rivoluzionando il modo in cui si sviluppano i sistemi software nella società moderna.
Dopo un'ampia introduzione al linguaggio C, il corso affronterà come i costrutti di alto livello si mappano su codice macchina e come il programmatore può sfruttare tecnologie come cache e pipeline per estrarre il massimo delle prestazioni dalla macchina, imparando a conoscere quali ottimizzazioni sono fatte automaticamente dai compilatori e quali invece vanno effettuate esplicitamente nel codice. Verrà inoltre mostrato come gestire la memoria in modo efficiente, studiando in particolare come funziona un allocatore dinamico di memoria. Il corso verrà completato da una trattazione introduttiva della programmazione parallela sfruttando le schede grafiche GPU come strumento di calcolo general-purpose. Il corso introdurrà lo studente all'uso di vari tool come profiler e debugger.


Deletions:
I sistemi di calcolo moderni forniscono una grande potenza di calcolo frutto di una notevole complessità architetturale. Sfruttare anche in parte questa potenza è una sfida che richiede una conoscenza interna del sistema di calcolo, una comprensione profonda degli algoritmi alla base delle computazioni e una buona dose di creatività per ottenere implementazioni che utilizzino in modo ottimale le risorse di calcolo disponibili. La ricompensa che si ha nell'investire su queste competenze è la capacità di scrivere programmi in grado di processare grandi quantità di dati più efficientemente anche di vari ordini di grandezza rispetto alle tecniche di programmazione convenzionali, rispondendo alla sfida del big data computing che sta rivoluzionando la nostra società moderna.



Edited on 2013-02-28 10:11:59 by CamilDemetrescu

Additions:
More computing sins are committed in the name of efficiency (without
necessarily achieving it) than any other single reason - including
blind stupidity.

—Bill Wulf
Le lezioni vengono tenute nel periodo compreso tra il 1 marzo e il 31 maggio 2013 nella sede di Via Eudossiana 18.


Deletions:
People who analyze algorithms have double happiness. First of all they experience
the sheer beauty of elegant mathematical patterns that surround elegant computational
procedures. Then they receive a practical payoff when their theories make it possible to
get other jobs done more quickly and more economically.

—Donald Knuth
Le lezioni vengono tenute nel periodo compreso tra il 1 marzo e il 31 maggio 2013 nella sede di Via Eudossiana 18.




Edited on 2013-02-28 10:01:49 by CamilDemetrescu

Additions:
I sistemi di calcolo moderni forniscono una grande potenza di calcolo frutto di una notevole complessità architetturale. Sfruttare anche in parte questa potenza è una sfida che richiede una conoscenza interna del sistema di calcolo, una comprensione profonda degli algoritmi alla base delle computazioni e una buona dose di creatività per ottenere implementazioni che utilizzino in modo ottimale le risorse di calcolo disponibili. La ricompensa che si ha nell'investire su queste competenze è la capacità di scrivere programmi in grado di processare grandi quantità di dati più efficientemente anche di vari ordini di grandezza rispetto alle tecniche di programmazione convenzionali, rispondendo alla sfida del big data computing che sta rivoluzionando la nostra società moderna.
Conoscenza di almeno un linguaggio di programmazione procedurale/orientato agli oggetti. Tecniche di programmazione. Architetture dei calcolatori elettronici. Algoritmi e strutture dati.


Deletions:
Il modello di costo teorico tradizionale per valutare le prestazioni di programmi si basa sulla stima asintotica del numero di istruzioni eseguite nel caso peggiore, assumendo ad esempio che operazioni aritmetico-logiche, accessi a memoria, allocazione e deallocazione di oggetti, richiedano tempo costante. Sebbene questo modello sia generalmente molto efficace, vi sono tuttavia diversi contesti in cui le assunzioni semplificative su cui si basa possono essere piuttosto irrealistiche.
L'obiettivo del corso è di approfondire aspetti prestazionali legati allo sviluppo del software, coniugando il progetto e l'analisi teorica di algoritmi e strutture dati efficienti con la loro effettiva codifica in un linguaggio di programmazione reale e la loro validazione sperimentale. Il corso affronterà sia aspetti teorici che implementativi e si baserà prevalentemente sul linguaggio C, affiancandosi in modo complementare alla trattazione svolta nel corso di Sistemi Operativi. Alcune tipiche domande che affronteremo nel corso:
Alla fine del corso lo studente sarà in grado di definire e manipolare strutture dati in C per risolvere problemi algoritmici fondamentali che sono alla base dei moderni sistemi software. Acquisirà inoltre la capacità di analizzare le prestazioni di un programma utilizzando da una parte modelli di costo teorici in grado di catturare aspetti architetturali come la presenza di memorie gerarchiche, e dall'altra metodologie sperimentali su piattaforme di calcolo reali.
Conoscenza di almeno un linguaggio di programmazione procedurale/orientato agli oggetti. Tecniche di programmazione. Architetture dei calcolatori elettronici. Algoritmi e strutture dati. Analisi matematica. Calcolo delle probabilità.




Edited on 2013-02-28 09:26:35 by CamilDemetrescu

Additions:
—Donald Knuth
Le lezioni vengono tenute nel periodo compreso tra il 1 marzo e il 31 maggio 2013 nella sede di Via Eudossiana 18.
Orario: lunedì 10:15-13:30 e venerdì 12:00-13:30 in aula 29 della sede di Via Eudossiana, 18
Ricevimento studenti: lunedì 14:00-15:30 durante il corso, poi su appuntamento (si prega di prenotarsi in ogni caso scrivendo una email al docente)


Deletions:
—Donald Knuth
Le lezioni vengono tenute nel periodo compreso tra il 6 marzo e il 31 maggio 2012 nella sede di Via Eudossiana 18.
Orario: martedi 15:45-17:15 in aula 8 e giovedi 10:15-13:30 in aula 29 della sede di Via Eudossiana, 18
Ricevimento studenti: giovedi 14:00-15:30 durante il corso, poi su appuntamento (si prega di prenotarsi in ogni caso scrivendo una email al docente)




Edited on 2013-02-28 09:24:38 by CamilDemetrescu

Additions:
[ A.A. 2010-2011 | A.A. 2011-2012 ]

Deletions:
[ A.A. 2010-2011 ]



Edited on 2012-11-03 10:38:20 by CamilDemetrescu

Deletions:
~- Consideriamo una sequenza di operazioni su una collezione di dati (ad esempio, interrogazioni a un motore di ricerca): alcune operazioni potrebbero essere molto lente, mentre altre molto veloci. Misurare il tempo di picco nel caso peggiore (come avviene nell'analisi tradizionale) potrebbe essere pessimistico e lontano dalla realtà. Non avrebbe più senso misurare il tempo medio per operazione sull'intera sequenza?



Edited on 2012-11-03 10:36:59 by CamilDemetrescu

Additions:
Il modello di costo teorico tradizionale per valutare le prestazioni di programmi si basa sulla stima asintotica del numero di istruzioni eseguite nel caso peggiore, assumendo ad esempio che operazioni aritmetico-logiche, accessi a memoria, allocazione e deallocazione di oggetti, richiedano tempo costante. Sebbene questo modello sia generalmente molto efficace, vi sono tuttavia diversi contesti in cui le assunzioni semplificative su cui si basa possono essere piuttosto irrealistiche.
L'obiettivo del corso è di approfondire aspetti prestazionali legati allo sviluppo del software, coniugando il progetto e l'analisi teorica di algoritmi e strutture dati efficienti con la loro effettiva codifica in un linguaggio di programmazione reale e la loro validazione sperimentale. Il corso affronterà sia aspetti teorici che implementativi e si baserà prevalentemente sul linguaggio C, affiancandosi in modo complementare alla trattazione svolta nel corso di Sistemi Operativi. Alcune tipiche domande che affronteremo nel corso:


Deletions:
Il modello di costo teorico tradizionale per valutare le prestazioni di programmi si basa sulla stima asintotica del numero di istruzioni eseguite nel caso peggiore, assumendo ad esempio che operazioni aritmetico-logiche, accessi a memoria, allocazione e deallocazione di oggetti, richiedano tempo costante. Sebbene questo modello sia generalmente molto efficace, vi sono tuttavia diversi contesti in cui le assunzioni semplificative su cui si basa possono essere piuttosto irrealistiche. Alcune tipiche domande che affronteremo nel corso:
L'obiettivo del corso è di approfondire aspetti prestazionali legati allo sviluppo del software, coniugando il progetto e l'analisi teorica di algoritmi e strutture dati efficienti con la loro effettiva codifica in un linguaggio di programmazione reale e la loro validazione sperimentale. Il corso affronterà sia aspetti teorici che implementativi e si baserà prevalentemente sul linguaggio C, affiancandosi in modo complementare alla trattazione svolta nel corso di Sistemi Operativi.




Edited on 2012-06-07 12:32:06 by CamilDemetrescu

Additions:
Orario: martedi 15:45-17:15 in aula 8 e giovedi 10:15-13:30 in aula 29 della sede di Via Eudossiana, 18

Deletions:
Orario: giovedi 8:30-11:45 e venerdi 8:30-10:00 in aula 33 della sede di Via Eudossiana, 18



Oldest known version of this page was edited on 2012-06-07 12:31:24 by CamilDemetrescu []
Page view:

Informazioni generali


People who analyze algorithms have double happiness. First of all they experience
the sheer beauty of elegant mathematical patterns that surround elegant computational
procedures. Then they receive a practical payoff when their theories make it possible to
get other jobs done more quickly and more economically.


—Donald Knuth
Le lezioni vengono tenute nel periodo compreso tra il 6 marzo e il 31 maggio 2012 nella sede di Via Eudossiana 18.

Orario: giovedi 8:30-11:45 e venerdi 8:30-10:00 in aula 33 della sede di Via Eudossiana, 18
Docente: Camil Demetrescu
Ricevimento studenti: giovedi 14:00-15:30 durante il corso, poi su appuntamento (si prega di prenotarsi in ogni caso scrivendo una email al docente)

Contesto e obiettivi

Il modello di costo teorico tradizionale per valutare le prestazioni di programmi si basa sulla stima asintotica del numero di istruzioni eseguite nel caso peggiore, assumendo ad esempio che operazioni aritmetico-logiche, accessi a memoria, allocazione e deallocazione di oggetti, richiedano tempo costante. Sebbene questo modello sia generalmente molto efficace, vi sono tuttavia diversi contesti in cui le assunzioni semplificative su cui si basa possono essere piuttosto irrealistiche. Alcune tipiche domande che affronteremo nel corso:

  • Quali ottimizzazioni del codice vengono effettuate automaticamente dai compilatori e quali invece devono essere effettuate manualmente dai programmatori per ottenere le massime prestazioni per un problema di calcolo?
  • Le operazioni di allocazione e deallocazione di memoria (malloc/free) hanno veramente costo costante? Come funziona un allocatore di memoria reale?
  • Molte applicazioni su larga scala, come ad esempio l'Earth Observing System della NASA o motori di ricerca come Google, richiedono di processare enormi quantità di dati mantenuti in memorie secondarie. I tempi di accesso a disco sono almeno tre ordini di grandezza maggiori dei tempi di accesso a memoria centrale: come progettare e misurare realisticamente le prestazioni di algoritmi in scenari di questo tipo?
  • Consideriamo una sequenza di operazioni su una collezione di dati (ad esempio, interrogazioni a un motore di ricerca): alcune operazioni potrebbero essere molto lente, mentre altre molto veloci. Misurare il tempo di picco nel caso peggiore (come avviene nell'analisi tradizionale) potrebbe essere pessimistico e lontano dalla realtà. Non avrebbe più senso misurare il tempo medio per operazione sull'intera sequenza?

L'obiettivo del corso è di approfondire aspetti prestazionali legati allo sviluppo del software, coniugando il progetto e l'analisi teorica di algoritmi e strutture dati efficienti con la loro effettiva codifica in un linguaggio di programmazione reale e la loro validazione sperimentale. Il corso affronterà sia aspetti teorici che implementativi e si baserà prevalentemente sul linguaggio C, affiancandosi in modo complementare alla trattazione svolta nel corso di Sistemi Operativi.

Alla fine del corso lo studente sarà in grado di definire e manipolare strutture dati in C per risolvere problemi algoritmici fondamentali che sono alla base dei moderni sistemi software. Acquisirà inoltre la capacità di analizzare le prestazioni di un programma utilizzando da una parte modelli di costo teorici in grado di catturare aspetti architetturali come la presenza di memorie gerarchiche, e dall'altra metodologie sperimentali su piattaforme di calcolo reali.

Prerequisiti

Conoscenza di almeno un linguaggio di programmazione procedurale/orientato agli oggetti. Tecniche di programmazione. Architetture dei calcolatori elettronici. Algoritmi e strutture dati. Analisi matematica. Calcolo delle probabilità.

[ A.A. 2010-2011 ]

Valid XHTML 1.0 Transitional :: Valid CSS :: Powered by Wikka Wakka Wiki 1.1.6.3
Page was generated in 0.1789 seconds