
Dis, ça existe move.b 3(an),an ?
Thibaut (./193) :
Sur une table de 1024, l'écart type est très très bon, excellent même. Je rappelle que les tests de Godzill sont prévus pour mettre à mal les fonctions, alors que hashtext.exe s'appuie sur la réalitéAvec un modulo premier, ça change que dalle.
Les résultats avec un modulo 1021 sont encore plus serrés :modulo 1021 : Fonction 2 | moyenne : 7.05 | variance : 7.54 modu(attention les numéros des fonctions ont changés, téléchargez hashtest.zip dans le post ./1 si vous voulez la dernière version)
Thibaut (./201) :
pilateurs quand même, car ils traduisent le while comme ça : subq.w #1,d4 tst.w d4 bgt .L4Je suis un peu déçu des deux commoins ça : subq.w #1,d4 bgt .L4Je pensais obtenir au Ou encore mieux, un dbf
Martial, tu vas être content, je vais devoir coder la fonction en assembleur(d'autant plus que TIGCC produit un div dans le code
)
Thibaut (./218) :
J'ai pas encore vraiment d'idée sur quoi ça va aboutir. J'espère y arriver. Pour GTC j'imagine que tu as du écrire un gestionnaire de cette sorte ? Si oui, tu t'es organisé comment ?
Pollux (./221) :
Il y avait déjà un gestionnaire de mémoire, avec un fonctionnement très simple : il n'y a jamais de libération de mémoire, il n'y a que deux "tas" qu'on peut libérer en bloc (un tas local à chaque fonction, et un qui n'est libéré qu'une fois la compilation terminée). Donc ça marche bien parce que c'est rapide et parce qu'il y a pas trop de création d'objets "inutiles"... Du coup j'y ai pas trop touché, j'ai juste amélioré un peu la granularité ^^
Thibaut (./218) :
Oui finalement je vais rester en C, c'est plus élégant
Si ça intéresse des gens, je suis en train d'écrire un gestionnaire de mémoire ultra rapide, qui permettra d'allouer & libérer des zones de mémoire très rapidement. C'est une surcouche au système classique malloc/free (càd qu'il utilise ces fonctions, mais par blocs de 16 ko, et il gère leur organisation interne avec ses propres méthodes).
J'ai pas encore vraiment d'idée sur quoi ça va aboutir. J'espère y arriver. Pour GTC j'imagine que tu as du écrire un gestionnaire de cette sorte ? Si oui, tu t'es organisé comment ?
Kevin Kofler (./223) :Pollux (./221) :
Il y avait déjà un gestionnaire de mémoire, avec un fonctionnement très simple : il n'y a jamais de libération de mémoire, il n'y a que deux "tas" qu'on peut libérer en bloc (un tas local à chaque fonction, et un qui n'est libéré qu'une fois la compilation terminée). Donc ça marche bien parce que c'est rapide et parce qu'il y a pas trop de création d'objets "inutiles"... Du coup j'y ai pas trop touché, j'ai juste amélioré un peu la granularité ^^
Ça ressemble aux obstacks des anciens GCC, ton histoire.
Thibaut (./222) :
Pour l'algo, c'est encore flou, je vais voir au fur et à mesure.
Quel est l'intérêt d'avoir une table de hachage dont la taille est une puissance de 2 ?
Cela accélère énormément le calcul final, celui que vous trouverez à la fin de chaque fonction. Le calcul d'un modulo est parmi les instructions les plus lentes à réaliser pour un microprocesseur. Quand le dénominateur d'un modulo est une puissance de 2, le calcul est sensiblement accéléré (on passe de 70 cycles processeur à 4 ou 6 cycles). Certes, la table est légèrement moins homogène, donc la recherche linéaire est un peu plus longue en moyenne (en pratique la différence d'homogénéité est très très faible, cf le comparatif du post ./216). Mais le temps gagné lors du calcul compense le temps perdu dans la recherche linéaire.Cela est particulièrement vrai quand le nombre de collisions est raisonnable, par exemple quand 10.000 chaînes ou moins sont réparties sur une table de taille 1024. D'une manière générale, il semblerait que plus la table de hachage est grande, plus on a intérêt à lui donner une taille puissance de 2. En effet, le nombre moyen de collisions diminuant, la recherche linéaire est plus rapide et le léger défaut d'homogénéité est moins sensible, donc le temps gagné dans le calcul du modulo est plus flagrant.