Misura del tempo di calcolo e elaborazione dati

Transcript

Misura del tempo di calcolo e elaborazione dati
Tecnologie digitali
Scheda di laboratorio n. 2/2009
Misura del tempo di calcolo e elaborazione dati
Orologi di MatLab
In MatLab esistono alcune functions che accedono a un orologio dell’elaboratore. Una di esse è la funzione
clock che restituisce un vettore X di 6 elementi con il tempo attuale, secondo la ora definita dall’utente nel
sistema,
X = [anno, mese, giorno, ora, minuto, secondi]
I primi cinque elementi sono interi e l’ultimo ha tre cifre decimali, ossia segna nominalmente i millisecondi. In
alternativa, esistono due funzioni che agiscono come i pulsanti di un cronometro. Esse sono tic che fa partire il
cronometro e toc che restituisce il tempo trascorso dal momento in cui è stato eseguito tic, espresso in secondi
con tre cifre decimali.
Tempo di una operazione
Una operazione binaria elementare su un calcolatore è, ad esempio, una moltiplicazione di due numeri reali. Le
prestazioni numeriche di un calcolatore (più precisamente della sua CPU - Central Processing Unit) possono
essere espresse in multipli dei flops, ossia operazioni tra due numeri reali al secondo1 . E’ evidente l’interesse
a determinare questa potenza di calcolo. Anche se il tempo per una singola operazione non è quasi mai nella
pratica quello dichiarato nelle specifiche del processore fornite dal produttore, esso è comunque molto piccolo,
inferiore alla risoluzione degli orologi a nostra disposizione.
Es. 1
Si scriva sul quaderno una definizione per il termine risoluzione di uno strumento di misura. Usando il righello per disegno
quale valore attribuireste alla sua risoluzione (nella misura di una distanza).
Quando si deve misurare un intervallo di tempo cosı̀ corto e il fenomeno che ha quella durata può essere
ripetuto, conviene misurare la durata di un numero N prefissato di eventi e dividere il tempo
totale misurato per N . Dunque, un modo comune di realizzare una misura di tempo di calcolo è attraverso
un ciclo for che ripete N volte una istruzione (o un gruppo di istruzioni).
Es. 2
Si scriva una function che abbia come argomento di ingresso un intero N e includa un ciclo for con indice che va da 1 ad N .
Il corpo del for sia costituito dalla moltiplicazione di due numeri. Immediatamente prima e dopo il ciclo si usino, rispettivamente,
le funzione tic e toc. Si costruisca la tabella avente per colonne il valore di N e il tempo di esecuzione delle N operazioni letto
dalla funzione toc. Si usino per il calcolo almeno i quattro valori: per N = 103 , 105 , 106 , 107 . Realizzata la tabella si faccia il grafico
del tempo di calcolo in funzione di N e si commenti il risultato.
Es. 3
Nell’esercizio precedente non si è misurato il tempo delle sole moltiplicazioni, ma anche quello per controllare l’esecuzione
del ciclo for. Si ripeta l’esperimento facendo la differenza tra il tempo misurato prima e quello di un ciclo for vuoto per lo stesso
valore di N . Si costruisca una tabella che dia al variare di N il risultato in moltiplicazioni al secondo (flops) e la si trascriva sul
quaderno.
Moltiplicazione tra vettori
Un modo alternativo di eseguire N moltiplicazioni è di disporre i fattori ordinatamente in due vettori ed usare
la operazione di moltiplicazione elemento per elemento (con il comando .* tra i due fattori). Per costruire
1
I moderni supercomputer hanno raggiunto e superato le migliaia di Teraflops ossia i milioni di miliardi di operazioni al secondo,
cioè i Petaflops (Peta = 1015 ).
1
2
i vettori si può usare, da esempio l’istruzione v1 = a ∗ ones(1, N ) e v2 = b ∗ ones(1, N ) usando il comando
ones(N,M) che restituisce una matrice con N righe ed M colonne di elementi uguali a 1.
Es. 4
Con gli stessi valori di N del primo esercizio si esegua una function in cui si costruiscono due vettori riga 1 × N e si misuri
il tempo impiegato a moltiplicarli elemento per elemento con l’operazione built-in .* . Costruendo una tabella avente come colonne
il tempo di calcolo e la lunghezza N , si confrontino i valori con quelli trovati nel primo esercizio. Si faccia la stessa cosa con due
vettori colonna N × 1 e si dica se si nota qualche differenza. Cambia qualcosa nel tempo di calcolo se oltre alla moltiplicazione si
fa anche una assegnazione del risultato ad un terzo vettore? E se il terzo vettore viene inizializzato a zero, prima dell’assegnazione,
ad esempio con l’istruzione v3 = zeros(1, N ), c’è qualche variazione nel tempo di elaborazione?
L’efficienza degli algoritmi che operano sui vettori spesso dipende dalle dimensioni dei vettori stessi.
Es. 5
Avendo misurato con l’esercizio precedente il tempo di moltiplicazione elemento per elemento tra due vettori riga in
funzione della loro lunghezza N , si faccia il grafico della velocità di calcolo, espressa in flops, in funzione di N . Commentare il
risultato.
Analisi del procedimento di misura
Con l’esperimento numerico si sono effettuate delle misure di tempo con l’orologio interno del calcolatore su
un evento, il completamento di una serie di operazioni di calcolo, che avviene anche esso nei circuiti interni
dell’elaboratore. Tuttavia, la situazione si presenta del tutto identica anche se si dovesse misurare con un
cronometro azionato a mano la durata di un fenomeno osservato in natura. Usiamo dunque la situazione che
abbiamo creato per illustrare alcune particolarità generali di una operazione di misura.
Ad esempio, una proprietà che un procedimento di misura per essere ben formato deve avere è che — se
si esegue la stessa misura in condizioni equivalenti — esso ha un certo grado di ripetibilità. Se i risultati della
misura non sono stabili, occorre sottoporre a revisione critica il procedimento.
Es. 6
Si scelga una delle misura svolte in precedenza e la si ripeta k volte, inserendola ad esempio in un ciclo for. Di quanto varia,
al massimo, la lettura dell’orologio? Si usi la funzione hist per rappresentare quante volte la lettura dell’orologio capita in ciascuno
degli intervalli tra il valore minimo e quello massimo. Commentare il grafico. Per perturbare in modo significativo l’elaborazione si
mandi in esecuzione contemporaneamente a MatLab una applicazione, ad esempio un browser, che richieda una parte delle risorse
del sistema. Come cambia la variabilità delle misure?
Parametri rappresentativi di un insieme di misure
Accertato che esiste un certo grado di variabilità delle misure, un modo per rappresentarne l’insieme utilizza
due parametri rappresentativi. Il primo è familiare allo studente ed è la media aritmetica delle misure. In
MatLab se le misure sono disposte in un vettore X la media m si ottiene con la funzione m = mean(X). Una
misura della variabilità si ottiene con la cosiddetta deviazione standard2 che MatLab calcola sul vettore delle
misure con la funzione d = std(X).
Es. 7
Con i dati dell’ultimo esercizio si calcoli media e deviazione standard, usando le funzioni mean e std. Si individui sull’asse
delle ascisse dell’istogramma il valore corrispondente alla media e si tracci un segmento orizzontale con centro la media e con
lunghezza pari a due volte la deviazione standard.
Per salvare una tabella di dati in un file, si può ricorrere alla funzione di MatLab
possibilità di uso, la sintassi
save . Tra le molte
save FNAME -ascii VAR
crea il file FNAME e vi mette in formato leggibile la variabile VAR.
Es. 8
Scrivere una function che chiamando ripetutamente e per diversi valori di N il programma utilizzato per risolvere l’esercizio
4, costruisca una matrice contenente nella prima colonna i valori di N e nella seconda il risultato (flops). Salvare questa matrice
con il comando save e commentare il risultato.
2
Per il momento lo studente digiuno di statistica consideri queste due nozioni alla stregua di ricette pratiche che, peraltro, sono
assai ben fondate teoricamente.
A.Di Lieto, F.Maccarrone - Tecnologie Digitali I - 2008/09