Compact Arrays

View previous topic View next topic Go down

Compact Arrays

Post  Yann on Fri 23 May - 0:47

J'ai fait un contresens récemment, en parlant des Linked Arrays.
En rentrant dans le détail, je me suis rendu compte que ce que proposait Gadiel Seroussi, le monsieur sur la photo, était sensiblement différent.

Un Linked Array est un tableau de pointeurs, où chaque case comporte un lien vers des objets regroupés en fin de tableau. C'est intéressant lorsqu'on répète très fréquemment des données longues identiques. Mais c'est à peu près le seul intérêt.

Cela n'a rien à voir avec le principe du Compact Array, où il s'agit simplement d'un grand ensemble de cellules de tailles fixes, dont l'intérêt principal est la rapidité de traitement, mais également la grande efficacité de stockage, par absence d'entête.

J'ai un tout petit peu personnalisé le mécanisme, en fixant une fois pour toute les tailles de cellules (3 quartets, soit une valeur de 0 à 4096) et en choisissant plutôt de travailler de temps en temps sur du multi-cellule (là on passe à 3 octets, soit une valeur de 0 à 16 millions).

Après reprise du code assembleur d'origine, j'ai fait quelques mesures de performances, et celles-ci sont édifiantes.

En Lecture, cas le plus favorable à la méthode par registre actuelle, le gain de vitesse est de +100%.
Les chiffres : Registre:2.56s/Array:1.48s/Testvide:0.39s, soit un delta de 1.08s pour une base de 1.09s

C'est donc énorme, très supérieur à mes attentes, ou mes premiers tests génériques effectués il y a quelques semaines. Ca valait donc le coup de bien entrer dans le détail, car après comparaison, mes modifications ont permis de cracher de bonnes performances suplémentaires.

Mais ce n'est que le début, car les cas de figures suivants sont bien plus intéressants.

En écriture différentielle, le mécanisme de sauvegarde actuelle, le gain de vitesse est de +230%.
Les chiffres : Registre:1.93s/Array:0.72s/Testvide:0.20s, soit un delta de 1.21s pour une base de 0.52s

Là ça devient énorme. Le programme ne peut que s'en trouver sensiblement affecté, car même s'il ne comporte pas que des appels de variables, celles-ci comptent beaucoup dans le bilan.
En plus, il y a un contrôle de bord automatique, et les valeurs ne viennent pas "baver" sur les voisines lorsqu'elles dépassent leurs bornes (d'ailleurs fortement repoussées). Bref, c'est tout bénéf.

Mais ce n'est pas fini. L'écriture directe est un cas de figure favorable au Compact Array, car il réalise cette fonction en une seule passe, là où pour arriver au même résultat, le registre est obligé de faire une lecture puis une écriture différentielle.
Par extrapolation des chiffres précédents, on calcule un gain de performance d'environ 500%.

C'est donc très sensible.

Dans ces conditions, l'introduction du Compact Array dans le code sera certainement ma prochaine étape, ce qui m'obligera à ré-écrire une bonne quantité de procédures, mais fort heureusement, celles-ci sont relativement bien localisées.

Yann
Admin

Number of posts : 174
Registration date : 2008-05-01

http://phantasie.tonempire.net

Back to top Go down

View previous topic View next topic Back to top

- Similar topics

 
Permissions in this forum:
You cannot reply to topics in this forum