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