Sapete quante operazioni può eseguire un computer in un secondo?

Un bel quiz che mette alla prova gli sviluppatori: provate a valutare, con un buon grado di approssimazione, quante operazioni può eseguire un computer al secondo. Prendendo in esame varie tipologie di programmi.

Il numero di operazioni che un computer può eseguire in un secondo dipende da diversi fattori: caratteristiche del processore (architettura, frequenza di clock, numero di core), memoria RAM, efficienza e ottimizzazione del software, algoritmi e complessità dei calcoli. Alcune elaborazioni richiedono infatti tempi maggiori, quindi il numero effettivo di operazioni al secondo può variare in base al tipo di carico di lavoro.

Un quiz per gli sviluppatori: sapete dire quante operazioni può svolgere il computer ogni secondo?

Supponiamo di avere una serie di programmi scritti in C, Python oppure dei semplici script da eseguire dalla shell di un sistema operativo Unix-like. Per ciascuno di essi, sapreste assegnare un valore il più possibile corretto alla variabile NUMBER che indica il numero di operazioni eseguite in un secondo?

Il quiz per sviluppatori lo trovate nella pagina Do you know how much your computer can do in one second?

Come potete vedere, è possibile scegliere valori per la variabile NUMBER compresi tra 1 e 1 miliardo. Per superare il test è sufficiente inquadrare correttamente il giusto ordine di grandezza. Se la risposta corretta fosse, ad esempio, 38.000 il quiz riconosce come valide le risposte 10.000 e 100.000. L’obiettivo è insomma non sbagliare di un fattore superiore a 10.

Il punto di riferimento per i calcoli sono i PC che tutti possediamo, anche i più performanti. Non certo macchine server ultraperformanti o supercomputer. Nel caso dei “normali” computer, il numero delle operazioni effettuabili ogni secondo può variare in modo significativo ma l’ordine di grandezza resta complessivamente inalterato.

Cicli loop, dizionari, richieste HTTP, byte scritti su disco, ricerca, serializzazione, database, hashing e accesso alla memoria: tutto ha un “costo” diverso

Anche chi sviluppa da tempo potrebbe rimanere sorpreso da qualche quesito e delle relative risposte corrette. Provate il test e mettetevi alla prova: scoprirete alcune cose molto interessanti.

Il quiz, che ad oggi contiene 18 domande totali e altrettanti “mini-programmi” da prendere in esame, comincia con l’invito a valutare il numero di iterazioni che possono essere eseguite in un secondo.

Nel primo esercizio, ad esempio, viene chiesto di specificare quante operazioni di somma (incremento di un’unità del precedente valore) possono essere effettuate in un secondo. Supponendo che il sistema in cui il codice viene eseguito abbia una velocità di clock di 1 GHz e che l’operazione di incremento richieda un ciclo di clock, possiamo dire che il ciclo for impiegherebbe approssimativamente 1 secondo per eseguire 1 miliardo di iterazioni.

La seconda proposta chiede di indicare le iterazioni di un ciclo vuoto Python che vengono eseguite in un secondo. Ecco, in un secondo il computer ne esegue mediamente 68 milioni ovvero 68.000 in un millisecondo.

Operazioni che esegue computer in un secondo

Successivamente il quiz presenta casi un po’ più realistici. Viene dapprima richiesto quanti elementi possiamo aggiungere a un dizionario in Python in un secondo. Si passa poi al numero di richieste HTTP che possono essere inviate nello stesso lasso di tempo.

Quante operazioni di scrittura su disco e in memoria vengono eseguite in un secondo

Sappiamo tutti che scrivere dati nella memoria RAM è più veloce, ma quanto quanto rispetto a un’operazione effettuata su unità a stato solido (SSD)?

Simpatici sono quindi i test write_to_disk.py e write_to_memory.py: il primo scrive su disco o su unità stato solido, il secondo in memoria RAM. Ecco, il primo esempio proposto presenta un codice che Python che crea un file di output chiamato out in cui viene scritto un chunk di dati (1.000.000 byte) ripetutamente fino a raggiungere la dimensione specificata da NUMBER. Dopo ogni scrittura, viene eseguita una sincronizzazione forzata per assicurarsi che i dati siano scritti effettivamente su disco.

Per ottenere una stima approssimativa del valore di NUMBER dopo un secondo di esecuzione, possiamo fare alcune considerazioni. Supponiamo che la velocità di scrittura su disco del sistema sia di 100 MB/s. In tal caso, il numero di byte scritti in un secondo sarebbe di 100.000.000 byte che equivale a una stima del valore della variabile NUMBER.

Viceversa, quando la scrittura viene effettuata in memoria anziché su disco, le performance saranno molto più elevate rispetto alla scrittura su disco. Si può quindi stimare con un sistema sia in grado di scrivere 1 GB al secondo in memoria.

Velocità scrittura su disco, SSD e RAM

Le unità di memorizzazione sono più lente della RAM, anche se si prendono in considerazione dispositivi performanti. La differenza è evidente soprattutto quando si utilizza un linguaggio intrinsecamente lento come Python. Ciò diventa ancora più evidente quando si utilizzando comandi come grep e find.

Altre attività comuni sulle quali è incentrato il quiz

Impegnative sono anche le attività di serializzazione e deserializzazione dei dati. Si tratti di processi utilizzati per convertire un oggetto o una struttura dati in un formato adatto per la memorizzazione o la trasmissione (serializzazione). La deserializzazione ripristina invece l’oggetto o la struttura dati originale dal formato serializzato.

Per non parlare degli accessi a database, alle procedure di hashing, all’utilizzo della memoria (comprese le cache L1, L2). A questo proposito è opportuno consultare i valori di latenza che ogni programmatore dovrebbe conoscere.

Ti consigliamo anche

Link copiato negli appunti