Prendendo spunto da una discussione relativa alle varie famiglie di processori PowerPC, ho iniziato a scrivere un programmino di benchmark. So che ne esistono a bizzeffe già, per tutti i gusti, le forme e le misure, ma questo qui ha alcune caratteristiche interessanti...
1) E' totalmente multipiattaforma: al momento compila e funziona su Linux (x86) e AmigaOS (PPC), ma con un po' di tempo lo farò girare anche su AROS, MorphOS, Windows e tutto quello su cui riuscirò a mettere le mani.
2) E' open source: rilascerò il sorgente, una volta completato, in modo da poterlo studiare tutti insieme e migliorarlo, aggiungendo nuove funzioni.
3) E' a riga di comando: quindi non è legato a nessuna particolare interfaccia grafica, eliminando quindi possibili problemi di compatibilità con librerie grafiche strane, e portando quindi al minimo possibile le interferenze del gestore grafico e delle finestre.
4) E' nostro: questo topic raccoglierà le richieste ed i suggerimenti di tutti gli interessati, in modo tale da avere un benchmark veramente personalizzato, in cui possiamo mettere tutto quello che vogliamo per testare ogni aspetto delle nostre macchine, sia PC che AmigaNG.
5) E' facile da usare: doppio click sull'icona e fa tutto da solo. In caso di particolari necessità si potranno specificare dei parametri sulla riga di comando per personalizzare la modalità del benchmark (ad esempio per escludere uno o più test, o per modificare altri parametri).
Al momento ho inserito dei test per le operazioni fondamentali sui numeri interi e sulle operazioni floating point a singola e doppia precisione. Ecco un esempio dell'output del programma, facendo un test sui soli numeri interi:
- Codice: Seleziona tutto
TKBench ver. 1.0 alpha
(c) 2010 by Antonio Barba
loopCount = 100000000
calibration = 346608159 ns (346608.159 us, 346.608 ms)
Integer Sum and Subtraction
* raw time = 457445435 ns (457445.435 us, 457.445 ms)
* calib. time = 110837276 ns (110837.276 us, 110.837 ms)
Integer Multiplication
* raw time = 428426941 ns (428426.941 us, 428.427 ms)
* calib. time = 81818782 ns (81818.782 us, 81.819 ms)
Integer Division
* raw time = 1349348445 ns (1349348.445 us, 1349.348 ms)
* calib. time = 1002740286 ns (1002740.286 us, 1002.740 ms)
Basic Integer operations
* total time = 1195396344 ns (1195396.344 us, 1195.396 ms)
La fase di calibrazione serve per eliminare dalla misurazione i tempi morti dovuti al "codice di contorno". Questi tempi morti vengono misurati lanciando un benchmark vuoto, e misurando quindi solo il tempo necessario per effettuare un loop vuoto. La misurazione del tempo grezzo (raw time) al momento è lì solo per questioni di debugging, ma i tempi reali da prendere in considerazione sono quelli calibrati.
La precisione delle misurazioni dipende dal timer del sistema operativo.
Su Linux viene usato un timer ad alta risoluzione (nell'ordine dei nanosecondi), mentre su AmigaOS la risoluzione è più bassa, ma ciò non inficia la bontà dei risultati in quanto basta semplicemente aumentare il numero di operazioni di calcolo per avere tempi apprezzabili e misurabili con un buon margine di approssimazione.
Commenti, richieste e suggerimenti sono ben accetti da parte di tutti :-)