Sistemi di Calcolo

Corso di Laurea in Ingegneria Informatica e Automatica - A.A. 2017-2018

HomePage | Avvisi | Diario lezioni | Programma | Materiale didattico | Esami | Forum | Login

Revision [2554]

Last edited on 2016-12-12 17:55:51 by DanieleDelia
Deletions:
==Lunedì 5 dicembre 2016 (90 min) - memorie e cache==
~- Come è strutturata la memoria? (parte I) [[[http://www.cs.cmu.edu/~213/lectures/10-memory-hierarchy.pdf ref1]], [[http://www.cs.cmu.edu/~213/lectures/12-cache-memories.pdf ref2]]]
~~- astrazione con modello lineare
~~- transazioni di lettura e scrittura:
~~~- trasferimenti da CPU a memoria e viceversa
~~~- uso del bus della memoria
~~~- divario tra velocità CPU (cycle time) e velocità accesso a memoria, evoluzione del trend
~~- cache come buffer per compensare divario tra velocità di processamento e velocità di accesso ai dati sfruttando il principio di località:
~~~- località spaziale e temporale
~~~- cache hit e cache miss, esempi di analisi:
~~~~- somma degli elementi di un array
~~~~- scansione lineare di un array vs. lista collegata
~~~- altri usi delle cache in un sistema di calcolo (es. disco, browser)
==Lunedì 12 dicembre 2016 (90 min) - gerarchie di memoria e ottimizzazioni==
~- Come è strutturata la memoria? (parte II) [[[http://www.cs.cmu.edu/~213/lectures/10-memory-hierarchy.pdf ref1]], [[http://www.cs.cmu.edu/~213/lectures/12-cache-memories.pdf ref2]]]
~~- gerarchie di memoria:
~~~- registri, cache L1 (D+I), L2, L3, memoria, disco
~~~- trasferimento dati a blocchi tra livelli successivi di una memoria gerarchica
~~~- analisi di costo/dimensione/[[https://gist.github.com/hellerbarde/2843375 velocità]] dei livelli di una memoria gerarchica
~~~- caso di studio: Intel Core i7, gerarchia di memoria (L1i, L1d, L2, L3, DDR3) [[[http://www.cs.cmu.edu/~213/lectures/18-vm-systems.pdf ref]]]
~~- ottimizzazioni del codice nell'uso della memoria:
~~~- Tempo di esecuzione
~~~~- sfruttare velocità dei registri: allocazione dei registri
~~~~- scrittura di codice cache-friendly: caso di studio del prodotto di matrice
~~~~- allineamento e padding:
~~~~~- stack frame a 16 byte prima di una call
~~~~~- allineamento dei campi delle struct
~~~- Spazio
~~~~- ridurre la dimensione dei dati: riordinare le struct per ridurre il padding
~~~~- ridurre la dimensione del codice: rimpiazzo di istruzioni con altre che richiedono meno byte (es. movl $1, D -> incl D)


Revision [2523]

Edited on 2016-12-04 18:10:00 by DanieleDelia
Additions:
~- Come è strutturata la memoria? (parte I) [[[http://www.cs.cmu.edu/~213/lectures/10-memory-hierarchy.pdf ref1]], [[http://www.cs.cmu.edu/~213/lectures/12-cache-memories.pdf ref2]]]
~- Come è strutturata la memoria? (parte II) [[[http://www.cs.cmu.edu/~213/lectures/10-memory-hierarchy.pdf ref1]], [[http://www.cs.cmu.edu/~213/lectures/12-cache-memories.pdf ref2]]]
~~~- analisi di costo/dimensione/[[https://gist.github.com/hellerbarde/2843375 velocità]] dei livelli di una memoria gerarchica
~~~- caso di studio: Intel Core i7, gerarchia di memoria (L1i, L1d, L2, L3, DDR3) [[[http://www.cs.cmu.edu/~213/lectures/18-vm-systems.pdf ref]]]
~- Come viene gestita la memoria? [[[http://www.cs.cmu.edu/~213/lectures/17-vm-concepts.pdf ref1]], [[http://www.cs.cmu.edu/~213/lectures/18-vm-systems.pdf ref2]]]
Deletions:
~- Come è strutturata la memoria? (parte I) [ref1, ref2]
~- Come è strutturata la memoria? (parte II) [ref1, ref2]
~~~- analisi di costo/dimensione/velocità dei livelli di una memoria gerarchica
~~~- caso di studio: Intel Core i7, gerarchia di memoria (L1i, L1d, L2, L3, DDR3) [ref]
~- Come viene gestita la memoria? [ref1, ref2]


Revision [2522]

Edited on 2016-12-04 18:07:15 by DanieleDelia
Additions:
~- Come è strutturata la memoria? (parte I) [ref1, ref2]
~~- astrazione con modello lineare
~~~- trasferimenti da CPU a memoria e viceversa
~~~- uso del bus della memoria
~~~- divario tra velocità CPU (cycle time) e velocità accesso a memoria, evoluzione del trend
~~~- altri usi delle cache in un sistema di calcolo (es. disco, browser)
~- Come è strutturata la memoria? (parte II) [ref1, ref2]
~~- gerarchie di memoria:
~~~- registri, cache L1 (D+I), L2, L3, memoria, disco
~~~- caso di studio: Intel Core i7, gerarchia di memoria (L1i, L1d, L2, L3, DDR3) [ref]
~~~- Tempo di esecuzione
~~~~- sfruttare velocità dei registri: allocazione dei registri
~~~~- scrittura di codice cache-friendly: caso di studio del prodotto di matrice
~~~~- allineamento e padding:
~~~~~- stack frame a 16 byte prima di una call
~~~~~- allineamento dei campi delle struct
~~~- Spazio
~~~~- ridurre la dimensione dei dati: riordinare le struct per ridurre il padding
~~~~- ridurre la dimensione del codice: rimpiazzo di istruzioni con altre che richiedono meno byte (es. movl $1, D -> incl D)
~- Come è strutturata la memoria? (parte III)
~~- Ordine dei byte in memoria (endianness)
~~~- storia e motivazioni, usi attuali (es. network byte order)
~~~- esempi di accesso a singoli byte/word in un dato memorizzato
~- Come viene gestita la memoria? [ref1, ref2]
~~~- cenni ad implementazione di un allocatore: malloc/free, sbrk(2)
~~- page fault memoria virtuale e loro gestione, protection fault (SIGSEGV)
==Lunedì 19 dicembre 2016 (90 min) ==
~- esercizi riepilogativi
==Argomenti non più trattati dopo la fine anticipata del semestre==
~- caso di studio: Intel Core i7, paginazione a 4 livelli spazio di indirizzi virtuale a 48 bit
~- come viene gestita la memoria? (parte II) [[[https://www.cs.cmu.edu/afs/cs/academic/class/15213-f10/www/lectures/17-allocation-basic.pdf ref]]] -> dettagli sugli allocatori
~- complementi su metodologie sperimentali:
Deletions:
==Giovedì 17 novembre 2016 (180 min) - processi: PCB, memory layout, prestazioni esecuzione==
~- Dall'eseguibile al processo:
~~- process control block e risorse associate ai processi: PID, registri, PID processo genitore, puntatori alla memoria, privilegi del processo, accounting (tempo speso dal processo, limiti, ecc.), priorità dello scheduling, risorse I/O (file aperti ecc.) [[[https://www.tutorialspoint.com/operating_system/os_processes.htm ref]]]
~~- loader e anatomia dello spazio logico di un processo:
~~~- code, data, heap, librerie dinamiche, stack
~~~- caso di studio Linux/x86: ispezione immagine di un processo mediante ##/proc/pid/maps##
~- Esecuzione di un processo (parte I):
~~- ciclo fetch-decode-execute (ricapitolazione)
~~- aspetti prestazionali
~~~- cicli macchina
~~~- clock e frequenza del processore, evoluzione negli ultimi decenni
~~~~- comando ##time##
==Venerdì 18 novembre 2016 (120 min) - esercitazione: ottimizzazioni (cicli, funzioni, ecc.), profiling, misurazione tempo==
==Lunedì 21 novembre 2016 (90 min) - pipeline e ottimizzazioni==
~- Esecuzione di un processo (parte II):
~~- pipelining e stalli
~~- ottimizzazioni del codice sfruttando la pipeline: istruzioni branchless, instruction scheduling
~~- esecuzione parallela (cenni): CPU multicore e instruction-level parallelism (es. AVX)
~~- esecuzione in modalità utente (user) e in modalità supervisore (kernel) [[[https://www.cs.columbia.edu/~junfeng/11sp-w4118/lectures/trap.pdf ref]]]
==Giovedì 24 novembre 2016 (180 min) - trap, interrupt, context switch, implementazione system call==
~- Esecuzione di un processo (parte III): [[[https://www.cs.cmu.edu/afs/cs/academic/class/15213-f10/www/lectures/12-exceptions.pdf ref1]], [[https://www.cs.columbia.edu/~junfeng/11sp-w4118/lectures/trap.pdf ref2]]]
~~- flusso del controllo normale ed eccezionale
~~- eccezioni recuperabili e non recuperabili
~~- eccezioni sincrone (interne):
~~~- trap: istruzione IA32 INT, invocazione di system call (##INT 0x80##, passaggio dei parametri) [[[https://en.wikibooks.org/wiki/X86_Assembly/Interfacing_with_Linux ref]]]
~~~- fault: es. divisione per zero
~~~- abort: es. parity error
~~- eccezioni asincrone (esterne):
~~~- interrupt: dispositivi I/O, timer, ecc.
~~- tabella delle eccezioni (interrupt vector)
~~- cenni alla tabella delle eccezioni IA32
==Venerdì 25 novembre 2016 - esonero==
~- Argomenti (da inizio corso fino al 10 novembre)
~~- prova al calcolatore:
~~~- programmazione IA32
~~~- profilazione delle prestazioni
~~~- tecniche di ottimizzazione dei programmi per ridurre il numero di istruzioni eseguite
~~~- debugging con gdb e valgrind
~~- domande a risposta multipla:
~~~- concetti di base sull'ambiente Linux (file system, shell, permessi, comandi, variabili di ambienti, canali, redirezione, pipe, ecc.)
~~~- architettura generale di un sistema di calcolo (Von Neumann)
~~~- pipeline di compilazione
~~~- tecniche di ottimizzazione per la riduzione del work, legge di Amdahl
==Lunedì 28 novembre 2016 (90 min) - stati processi e scheduling==
~- Esecuzione di un processo (parte IV):
~~- stati di un processo: running user, running kernel, waiting ([[http://www.linux-tutorial.info/modules.php?name=MContent&pageid=84 diagramma degli stati in Linux]])
~- Esecuzione simultanea di più processi (parte I):
~~- nozione di esecuzione concorrente
~~- multiprogrammazione e scheduling dei processi: [[[https://www.cs.cmu.edu/afs/cs/academic/class/15213-f10/www/lectures/12-exceptions.pdf ref]]]
~~~- context switch: salvataggio dello stato della CPU nel PCB
~~~- altri stati di un processo: started, ready, zombie
~~~- esempio del time sharing round-robin mediante timer e interrupt
~~~- cenni allo scheduling con priorità
~~- albero dei processi
~~- uso dei comandi ##ps## e ##top## per analizzare i processi
==Giovedì 1 dicembre 2016 (180 min) - system call processi==
~- Esecuzione simultanea di più processi (parte II):
~~- system call per il controllo dei processi:
~~~- creazione (fork, [[http://pubs.opengroup.org/onlinepubs/009695399/functions/exec.html exec]])
~~~- terminazione (exit)
~~~- attesa terminazione (wait)
~~~- segnali (##signal##, ##kill##, armatura dei segnali e signal handler)
==Venerdì 2 dicembre 2016 (120 min) - esercitazione: processi, chiamate a sistema, scrittura di una shell==
~- Come è strutturata la memoria? (parte I) [[[http://www.cs.cmu.edu/~213/lectures/10-memory-hierarchy.pdf ref1]], [[http://www.cs.cmu.edu/~213/lectures/12-cache-memories.pdf ref2]]]
~~- astrazione con modello lineare
~~~- trasferimenti da CPU a memoria e viceversa
~~~- uso del bus della memoria
~~~- tipi di cache in un sistema di calcolo: es. memoria, disco, browser, ecc.
~~~- cache nei sistemi di memoria: dati e istruzioni
~- Come è strutturata la memoria? (parte II) [[[http://www.cs.cmu.edu/~213/lectures/10-memory-hierarchy.pdf ref1]], [[http://www.cs.cmu.edu/~213/lectures/12-cache-memories.pdf ref2]]]
~~- gerarchie di memoria:
~~~- registri, cache L1, L2, L3, memoria, disco
~~~- divario tra velocità della CPU e velocità di accesso a memoria: evoluzione negli ultimi decenni
~~~- caso di studio: Intel Core i7, gerarchia di memoria (L1i, L1d, L2, L3, DDR3) [[[http://www.cs.cmu.edu/~213/lectures/18-vm-systems.pdf ref]]]
~~~- sfruttare velocità dei registri: allocazione dei registri
~~~- sfruttare la cache per ottimizzare il codice: caso di studio del prodotto di matrice
~~~- allineamento delle strutture C, degli stack frame (a 16 byte prima di una call)
~~~- ottimizzazione delle strutture C per ridurre lo spazio
~~~- ridurre la dimensione del codice: rimpiazzo di istruzioni con altre che richiedono meno byte (es. ##movl $1, D## -> ##incl D##)
~- Come viene gestita la memoria? (parte I) [[[http://www.cs.cmu.edu/~213/lectures/17-vm-concepts.pdf ref1]], [[http://www.cs.cmu.edu/~213/lectures/18-vm-systems.pdf ref2]]]
~~- page fault memoria virtuale e loro gestione, protection fault (SIGSEGV),
~~- caso di studio: Intel Core i7, paginazione a 4 livelli spazio di indirizzi virtuale a 48 bit
==Lunedì 19 dicembre 2016 (90 min) - allocazione della memoria logica: malloc e free==
~- Come viene gestita la memoria? (parte II) [[[https://www.cs.cmu.edu/afs/cs/academic/class/15213-f10/www/lectures/17-allocation-basic.pdf ref]]]
~~- allocazione nella memoria logica: ##malloc## e ##free##, system call ##sbrk##
==Giovedì 22 dicembre 2016 (180 min) - complementi ed esercizi==
~- Complementi su metodologie sperimentali:
~- Esercizi riepilogativi


Revision [2437]

Edited on 2016-11-28 18:57:14 by DanieleDelia
Additions:
~~~- creazione (fork, [[http://pubs.opengroup.org/onlinepubs/009695399/functions/exec.html exec]])
~~~- segnali (##signal##, ##kill##, armatura dei segnali e signal handler)
Deletions:
~~~- creazione ([[http://pubs.opengroup.org/onlinepubs/009695399/functions/exec.html exec]])
~~~- segnali (##signal##, ##kill##)


Revision [2374]

Edited on 2016-11-21 07:03:36 by CamilDemetrescu
Additions:
~~~- tecniche di ottimizzazione per la riduzione del work, legge di Amdahl
Deletions:
~~~- tecniche di ottimizzazione, legge di amdahl


Revision [2373]

Edited on 2016-11-20 23:56:36 by DanieleDelia
Deletions:
~- uso della LEA per calcolare espressioni aritmetiche (non indirizzi)
~- ABI System V i386 (ho parlato di cdecl)


Revision [2305]

Edited on 2016-11-17 21:14:25 by CamilDemetrescu
Additions:
~- massif, clock_gettime, granularità e risoluzione dei timer
Deletions:
~- Clock e frequenza
~- gprof, massif, clock_gettime, granularità e risoluzione dei timer


Revision [2294]

Edited on 2016-11-14 12:48:13 by CamilDemetrescu
Deletions:
==Lunedì 14 novembre 2016 (90 min) - interfaccia sistema operativo: comandi e system call==
~- Sistema operativo come:
~~- ambiente per consentire l'utilizzo del calcolatore da parte degli utenti
~~- ambiente di esecuzione per i programmi, fornendo risorse e servizi
~- Panoramica sui servizi principali forniti da un sistema operativo: [[[https://www.tutorialspoint.com/operating_system/os_services.htm ref]]]
~~- gestione dei processi (creazione, esecuzione, comunicazione, sincronizzazione, controllo, eliminazione)
~~- gestione della memoria (allocazione della memoria ai processi)
~~- gestione dei file
~~- gestione dei dispositivi di I/O
~~- sicurezza e protezione
~~- controllo delle prestazioni, accounting, gestione degli errori
~- Interfaccia del sistema operativo:
~~- verso l'utente:
~~~- interfaccia dei comandi (es. ##binutil##)
~~~- desktop environment e server grafico (es. ##X##, ##gnome##, ##kde##)
~~- verso i programmi:
~~~- passaggio dei parametri a un programma C: ##argc##/##argv##
~~~- valore di ritorno di un processo: ##exit()##, ##return## della funzione ##main##
~~~- accesso alle variabili di ambiente: ##getenv##, ##setenv##
~~~- programmazione di sistema: system call e standard POSIX
~~~- differenza tra librerie utente (es. ##libc##, fopen, fwrite) e system call (es. open, write)


Revision [2293]

Edited on 2016-11-13 09:28:01 by CamilDemetrescu
Deletions:
==Giovedì 10 novembre 2016 (Lezione 13, 14 - 180 min) - ottimizzazioni numero istruzioni, intro ai sistemi operativi==
~- Quali parti di un programma ottimizzare?
~~- principio di Pareto
~~- speedup e legge di Amdahl
~~- profilazione delle prestazioni: gprof, valgrind massif
~- Ridurre il numero di istruzioni eseguite
~~- espressioni: constant folding, constant propagation, common subexpression elimination
~~- istruzioni: dead code elimination
~~- cicli: loop-invariant code motion (hoisting), loop reverse
~~- funzioni: inlining, tail recursion
~- Organizzazione stratificata di un sistema di calcolo: programmi utente, sistema operativo (kernel, driver), hardware


Revision [2238]

Edited on 2016-11-07 14:32:51 by CamilDemetrescu
Deletions:
==Lunedì 7 novembre 2016 (Lezione 12 - 90 min) - esercizi IA32, legge di Amdahl e profilazione==
~- Discussione delle soluzioni dell'esercitazione 3


Revision [2211]

Edited on 2016-11-06 21:25:18 by CamilDemetrescu
Additions:
~~- esecuzione in modalità utente (user) e in modalità supervisore (kernel) [[[https://www.cs.columbia.edu/~junfeng/11sp-w4118/lectures/trap.pdf ref]]]
~- Esecuzione di un processo (parte III): [[[https://www.cs.cmu.edu/afs/cs/academic/class/15213-f10/www/lectures/12-exceptions.pdf ref1]], [[https://www.cs.columbia.edu/~junfeng/11sp-w4118/lectures/trap.pdf ref2]]]
Deletions:
~~- esecuzione in modalità utente (user) e in modalità supervisore (kernel)
~- Esecuzione di un processo (parte III): [[[https://www.cs.cmu.edu/afs/cs/academic/class/15213-f10/www/lectures/12-exceptions.pdf ref]]]


Revision [2207]

Edited on 2016-11-06 19:45:04 by CamilDemetrescu
Additions:
~~~- ridurre la dimensione del codice: rimpiazzo di istruzioni con altre che richiedono meno byte (es. ##movl $1, D## -> ##incl D##)
Deletions:
~~~- ridurre la dimensione del codice: dead code elimination, rimpiazzo di istruzioni con altre che richiedono meno byte (es. ##movl $1, D## -> ##incl D##)


Revision [2206]

Edited on 2016-11-06 19:04:05 by CamilDemetrescu
Additions:
~~~- tecniche di ottimizzazione, legge di amdahl
Deletions:
~~~- legge di amdahl


Revision [2205]

Edited on 2016-11-06 19:02:00 by CamilDemetrescu
Additions:
~- Argomenti (da inizio corso fino al 10 novembre)
~~- prova al calcolatore:
~~~- programmazione IA32
~~~- profilazione delle prestazioni
~~~- tecniche di ottimizzazione dei programmi per ridurre il numero di istruzioni eseguite
~~~- debugging con gdb e valgrind
~~- domande a risposta multipla:
~~~- concetti di base sull'ambiente Linux (file system, shell, permessi, comandi, variabili di ambienti, canali, redirezione, pipe, ecc.)
~~~- architettura generale di un sistema di calcolo (Von Neumann)
~~~- pipeline di compilazione
~~~- legge di amdahl


Revision [2204]

Edited on 2016-11-06 17:36:03 by CamilDemetrescu
Additions:
==Lunedì 7 novembre 2016 (Lezione 12 - 90 min) - esercizi IA32, legge di Amdahl e profilazione==
==Giovedì 10 novembre 2016 (Lezione 13, 14 - 180 min) - ottimizzazioni numero istruzioni, intro ai sistemi operativi==
Deletions:
==Lunedì 7 novembre 2016 (90 min) - esercizi IA32, legge di Amdahl e profilazione==
==Giovedì 10 novembre 2016 (180 min) - ottimizzazioni numero istruzioni, intro ai sistemi operativi==


Revision [2203]

Edited on 2016-11-06 17:29:09 by CamilDemetrescu
Additions:
==Venerdì 18 novembre 2016 (120 min) - esercitazione: ottimizzazioni (cicli, funzioni, ecc.), profiling, misurazione tempo==
Deletions:
==Venerdì 17 novembre 2016 (120 min) - esercitazione: ottimizzazioni (cicli, funzioni, ecc.), profiling, misurazione tempo==


Revision [2202]

Edited on 2016-11-06 17:21:53 by CamilDemetrescu
Additions:
~- Come viene gestita la memoria? (parte II) [[[https://www.cs.cmu.edu/afs/cs/academic/class/15213-f10/www/lectures/17-allocation-basic.pdf ref]]]
Deletions:
~- Come viene gestita la memoria? (parte II)


Revision [2201]

Edited on 2016-11-06 17:20:36 by CamilDemetrescu
Additions:
~~~- caso di studio: Intel Core i7, gerarchia di memoria (L1i, L1d, L2, L3, DDR3) [[[http://www.cs.cmu.edu/~213/lectures/18-vm-systems.pdf ref]]]
~- Come viene gestita la memoria? (parte I) [[[http://www.cs.cmu.edu/~213/lectures/17-vm-concepts.pdf ref1]], [[http://www.cs.cmu.edu/~213/lectures/18-vm-systems.pdf ref2]]]
Deletions:
~~~- caso di studio: Intel Core i7, gerarchia di memoria (L1i, L1d, L2, L3, DDR3)
~- Come viene gestita la memoria? (parte I) [[[http://www.cs.cmu.edu/~213/lectures/17-vm-concepts.pdf ref]]]


Revision [2199]

Edited on 2016-11-06 17:18:39 by CamilDemetrescu
Additions:
~- Come viene gestita la memoria? (parte I) [[[http://www.cs.cmu.edu/~213/lectures/17-vm-concepts.pdf ref]]]
Deletions:
~- Come viene gestita la memoria? (parte I)


Revision [2196]

The oldest known version of this page was created on 2016-11-06 17:17:11 by CamilDemetrescu
Valid XHTML 1.0 Transitional :: Valid CSS :: Powered by WikkaWiki
Page was generated in 0.0658 seconds