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 tenendo il gattino fermo; così facendo non si agisce sull'immagine visualizzata. Con la versione online si arriva a misurare milioni di addizioni in un secondo (nota 2).

[tasto 2]: si aggiunge una operazione grafica di rotazione dello sprite ma lo sprite viene tenuto nascosto; 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à supera il milione di cicli al secondo, ancora tanti ma meno di prima.

[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 (nota 3).

 

con sprite2 vengono eseguiti calcoli che utilizzano numerose funzioni trascendenti scelte apposta perchè di elaborazione più complessa di un conteggio.

[tasto 4]: con lo sprite viene nascosto non viene modificata alcuna grafica. Dato che i calcoli sono più complessi la velocità ne risulta fortemente diminuita rispetto ai casi precedenti ma ancora elevata trattandosi di molte centinaia di  migliaia di 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.

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

 

con sprite3 si introduce l'uso dei blocchi funzione (quelli magenta). Dato che la chiamata del blocco di colore magenta 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 ancora intorno alle centinaia di migliaia di cicli al secondo anche se un po' meno del caso 4.

[tasto 8]: la presenza di un calcolo di rotazione non mostrato porta la velocità ancora intorno alle centinaia di migliaia cicli al secondo.

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

 

La visualizzazione della grafica che impone il framerate a 30 fps si traduce in un rallentamento drastico della velocità di elaborazione dei dati.

 

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 però la modalità turbo, annullando la sincronizzazione fra calcoli ed aggiornamento della grafica, rende erratico il movimento rovinando le animazioni. 

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

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

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

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: le misurazioni eseguite sul progetto online o su progetti residenti sul PC sono affetti da differenze che dipendono dalle condizioni di esecuzione come la velocità del processore o l'impiego dello stesso in altre operazioni di servizio del PC ed anche dalla modalità editor in confronto con la modalità player di Scratch.

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. I valori misurati sono stati rilevati utilizzando Scratch 2. Alcuni valori sono sensibilmente inferiori se si lavora in modalità editor.

nota 3: 30 è il valore del framerate del monitor del PC.

nota 4: 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