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

Informazioni generali


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.

Orario: lunedì 10:15-13:30 e venerdì 12:00-13:30 in aula 29 della sede di Via Eudossiana, 18
Docente: Camil Demetrescu
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)

Contesto e obiettivi

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 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.

Prerequisiti

Conoscenza di almeno un linguaggio di programmazione procedurale/orientato agli oggetti. Tecniche di programmazione. Architetture dei calcolatori elettronici. Algoritmi e strutture dati.

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

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