Cerca

modulo attività

modulo tecnica

Login Form

esperimenti

In questo articolo si illustrano i risultati di ulteriori esperimenti eseguiti con Scratch per sondarne alcune caratteristiche di velocità in aggiunta a quelli esaminati qui link1.

Viene provocata una rotazione di 7 gradi più volte e si cerca di misurare il tempo impiegato a compiere tutte le rotazioni richieste (nota 1) utilizzando script differenti.

La rotazione multipla può essere effettuata vantaggiosamente utilizzando i cicli di ripetizione ma si va a scoprire che i comandi di controllo del flusso delle istruzioni hanno una notevole incidenza sui tempi di calcolo.

Può accadere di chiedersi quanto sia veloce Scratch ad eseguire dei calcoli.velocita scratch

Scratch è un linguaggio interpretato che provvede a tenere aggiornato un output grafico.

La grafica di Scratch deve permettere la rappresentazione di azioni in modo tale da assicurare una sufficiente fluidità dei movimenti da rappresentare.

Per assicurare questo requisito Scratch deve aggiornare il grafico con un ritmo minimo che sia sufficiente ad ingannare il cervello umano per assicurare la sensazione di movimento.

 

Con un piccolo progetto di Scratch link1 si fanno alcuni esperimenti nei quali viene inserita un'operazione da ripetere più volte fino allo scadere del tempo di un secondo. Scaduto il tempo si contano i cicli realizzati e si misura la velocità intesa come numero di cicli che si possono completare in un secondo per effettuare un gruppo di operazioni. (nota 1)

con sprite1 vengono eseguite operazioni ridotte al minimo

[tasto 1]: si avvia l'esempio base con il minimo necessario di operazioni. Si prova la velocità facendo effettuare in ciascun ciclo un semplice calcolo di integrazione di un valore senza modificare la grafica da rappresentare in quanto non si agisce sull'immagine visualizzata: la velocità misurata è dell'ordine delle centinaia di migliaia di cicli eseguiti in un secondo (nota 2).

[tasto 2]: si aggiunge una operazione grafica di rotazione dello sprite; la velocità deve diminuire perchè sono aumentate le operazioni da effettuare in ciascun ciclo. In questo caso si impedisce la visualizzazione dello sprite: la velocità è di alcune decine di migliaia di cicli al secondo (35.000).

[tasto 3]: come il caso precedente ma si consente la visualizzazione della grafica che mostra lo sprite in rotazione: la velocità si attesta sui valori di 30 e 31 cicli al secondo.

 

con sprite2 vengono eseguiti calcoli che utilizzano numerose funzioni trascendenti.

[tasto 4]: non viene modificata alcuna grafica in quanto lo sprite viene nascosto. La velocità ne risulta fortemente diminuita rispetto ai casi precedenti ma ancora elevata trattandosi di circa 100.000 cicli al secondo.

[tasto 5]: viene introdotta una modifica della grafica ma senza la sua visualizzazione: la velocità diminuisce, come ci si poteva aspettare dato che il ciclo comprende una ulteriore operazione, ma rimane elevata intorno a 25000 cicli al secondo.

[tasto 6]: come il caso precedente ma con la visualizzazione della rotazione grafica dello sprite: la velocità si attesta sui valori di 30 e 31 cicli al secondo.

 

con sprite3 si introduce l'uso dei blocchi funzione (quelli viola). Dato che la chiamata del blocco viola implica una complicazione del software che deve introdurre una operazione di salto, ci si aspetta un rallentamento ulteriore.

[tasto 7]: i valori di velocità si attestano intorno a 90.000-100.000 cicli al secondo.

[tasto 8]: la presenza di un calcolo di rotazione non mostrato porta la velocità intorno ai 25.000 cicli al secondo.

[tasto 9]: la presenza del movimento dello sprite attesta la velocità sui valori di 30 e 31 cicli al secondo.

 

Cosa succede se si usa la funzione turbo?velocita tabella

Si prova e si rileva che laddove la grafica viene mostrata e deve essere modificata, la velocità non è più limitata a 30-31 cicli al secondo ed il movimento diventa erratico. 

In particolare ne risulta la tabella di confronto a fianco riprodotta.

Si vede che la funzione turbo svolge il proprio compito sospendendo la visualizzazione della grafica per privilegiare il calcolo.

Il disegno della grafica avviene a cadenza regolare che può non corripondere al passaggio da un frame di immagine al successivo compromettendo la comprensibilità della visione.

link1 ad un secondo articolo con altri esperimenti.

Vedi articolo di approfondimento.

 

Conclusioni.

Per ora si può affermare che la grafica rappresenta una potente limitazione alla velocità di esecuzione di calcoli ripetitivi.

La grafica, però, è una delle ragioni che portano a ritenere Scratch essere un potente strumento di simulazione animata.

Il valore di 30 cicli al secondo coincide con la velocità di ripetizione dei quadri video (frame) impostati con FLASH PLAYER che è proprio di 30fps per scelta del team di Scratch, suppongo.

Scratch effettua una modifica dello stage al termine di un ciclo di ripetizione sia esso un "per sempre" o un "ripeti__ volte" o un "ripeti fino a quando__" ... solo non so quale criterio venga utilizzato nel caso ci siano diversi cicli in atto simultaneamente (nota 3).

Se non ci sono cicli, Scratch esegue il rinfresco dello stage 30 volte al secondo.

Se si è in presenza di molti calcoli matematici da effettuare per realizzare delle animazioni complesse è opportuno sospendere l'aggiornamento del quadro da disegnare.

 

Note

nota 1: per queste misurazioni è stato usato Scratch2 offline su un iMac 2,5GHz Intel Core i5 con DDR3 1333MHz. In un progetto online i alori possono essere leggermente diversi.

nota 2: la velocità dipende dal computer utilizzato e da altre operazioni che il suo processore deve effettuare nel frattempo per cui non è nemmeno costante sullo stesso computer.

nota 3: in realtà non c'è nulla di simultaneo in un processo di calcolo, per cui, probabilmente l'affermazione significa che Scratch attende il termine di tutti i blocchi di controllo

In un articolo precedente si è visto come disegnare poligoni e circonferenze sfruttando alcune caratteristiche di Scratch link1

Per approfondire la conoscenza del funzionamento di Scratch si possono sperimentare delle modifiche aglli script peer vedere cosa accade.


Già si è visto che verrà visionato solo l'ultimo comando del ciclo, come visibile in questo esperimento link1. Infatti, premendo [tasto 1] si realizza il moto orbitale previsto perchè l'ultima istruzione prima del termine del ciclo è "fai cento passi".

cerchi conTrucco

Scambiando l'ordine delle istruzioni interne al ciclo (quelle blu) le cose cambiano.

Con [tasto 2] oppure [tasto 3] si agisce su un ciclo dove l'ultima istruzione è diversa da "fai cento passi". In questo caso si osserva che l'oggetto ruotare su se stesso nella posizione centrale.

Con [tasto 4] si osserva l'effetto di una istruzione di attesa, seppur per un tempo nullo.

Anche l'istruzione di attesa consente il ridisegno dello stage.

L'oggetto viene posizionato al centro, lo stage viene ridisegnato, poi l'oggetto viene posizionato fuori e, di nuovo, lo stage viene ridisegnato.

Risultato: si vedono i percorsi a raggiera compiuti dall'oggetto.

 

Con [tasto 5] si prova a vedere cosa fa entro il termine di un secondo.

Risultato: compie 30-31 cicli di disegno. L'argomento è stato trattato in un altro articolo link1.

 

Con [tasto 6] si esegue più volte la sequenza principale senza l'uso di un ciclo ma disponendo una ripetizione continua tramite un messaggio di richiamo della sequenza stessa.

Quello che si osserva è fortemente dipendente dall'angolo di rotazione scelto. Non esiste più la circonferenza o il poligono ma varie figure geometriche regolari o spiraliformi.

Interessante è notare come si comporta con multipli di 9 o 36.

L'assenza di un ciclo e quindi della forzatura del ridisegno al termine di esso porta Scratch ad eseguiire il ridisegno al ritmo di 30 frame per secondo.

 

 

 

 

 

Lavorando con Scratch può accadere di imbattersi nel calcolo di derivate di funzioni trigonometriche.limSixSux

Nel libro "Cinematica 2 con Scratch" viene costruito il moto armonico a partire dalla velocià calcolata con

\[V_M*\cos(\omega*t)\]

Con una successiva costruzione puramente numerica si calcolano l'accelerazione e lo spazio percorso.

I risultati di queste due operazioni numeriche vengono confrontati con i risultati delle corrispondenti operazioni analitiche di derivazione ed integrazione.

Per considerare i risultati del calcolo numerico occorre ricordare che Scratch esegue calcoli con gli angoli espressi in gradi sessagesimali.

Nell'espressione di cui sopra, la grandezza ω è misurata in gradi/sec e non in rad/sec.