Ce programme trace une courbe de Bessel en 3D. Il effectue près de 29.200 calculs de points, 58.200 sinus, 29.198 racines carrées et autres opérations en virgules flottantes.

Sous BeOS en BCC (Sony Vaio PGC-F403, Pentium III cadencé à 450 MHz)

  • Version 1.0 (méthode = tracé direct) :  45 secondes.
  • Version 1.1 (méthode = blit "astucieux") : 28 secondes.
  • Version 1.2 (méthode = blit + nouvelle version du compilateur) : 13 secondes.
  • Version 1.3 (méthode = buffer) : < 3,7 secondes.
  • Version 1.4 (méthode = buffer + commande RefreshMode) : 750 ms (commande time).
  • Version 1.5 (méthode = buffer + commande RefreshMode) : <=170 ms (microtimer).


En fait, il n'y a pas d'accélération entre la version 1.4 et la 1.5, mais la façon de mesurer le temps écoulé est nettement plus précise (nous ne comptons plus les temps de chargement et de création de la fenêtre, mais seulement les temps de calcul et affichage).

À partir de cette version, le seul moyen d'augmenter la vitesse est d'augmenter celle du compilateur ou de diminuer la taille du code (afin de lui permettre de loger facilement dans la mémoire cache du processeur).

Le test reste conforme à l'original : il faut charger le programme, calculer et afficher le dessin et mesurer le temps écoulé. Par contre, le dessin n'est pas affiché point par point, mais dans un buffer recopié ensuite à l'écran.

Sous Epoc32 en OPL (Psion Series 5 - 8 Mo) :

  • 10 minutes 23 secondes. Résultats obtenus à l'aide des fonctions de double buffering.


Le record historique était détenu par un RiscPC StrongArm 202 MHz, sous BBC Basic V (interprété) avec 1,53 seconde en mode 256 couleurs ou inférieur.

Pour information voilà le code source d'origine :

MODE MODE
CLG
TIME=0
K=PI*1.5/144
FOR I=-100 TO 99
  IF I>-64 AND I<64 THEN
    A=I*2.25
    B=SQR(20736-A*A)+0.5
    FOR J=-B TO B
        C=K*SQR(J*J+A*A)
        D=(SIN(C)+0.4*SIN(C*3))*56
        X=820-((J+I+160)+10)*2
        Y=400+((D-I+100)+30)*2
        GCOL 8
        POINT X,Y
        GCOL 0
        LINE X, Y-1, X,Y-20
    NEXT J
  ENDIF
NEXT I
PRINT "Temps du calcul : ";TIME/100;" s.    Qui dit mieux ?"

L'auteur en est Jean Pierre Weber, que nous remercions pour cette excellente idée de test. Notez enfin qu'une version Java avait également été créée par nos soins. Elle a cependant été perdue depuis.