33Fermer35
GodzilLe 15/05/2009 à 10:52
travaille sur des long words et non des words et plus besoin d'un and

ou ton "and" fait le a la toute fin, quand le hash est fini de calculer

mais bon comme dit plus haut 5 ou 10 cycle c'est rien, ie si gagner "20 cycles" ne t'a fait gagner que 5% c'est que le bottleneck est ailleurs

Un bref calcul sachant qu'on prend une HW1 a 10Mhz, qu'il faut entre 4 et 5 cycle d'horloge pour executer un cycle d'instruction sur un 68000 (donc je prend 4.5 front d'horloge pour faire une moyenne)

On a donc

(1 / (10 MHz)) * 4.5 = 100 nanosecondes

100 ns pour chaques cycles

Si on prend dans la doc officielle de motorola/freescale

andi #xx, dx

Il faut pour un byte/word 8 cycles

donc 8 * 100 ns soit 800 nanosecondes

si on prend un fichier de 65533 Octets, l'execution des 65533 andi prendras 52,4 ms

Si on prend le nombre total de cycles de:

move.l a2,a0		; 4
move.b (a0)+,d0		; 8
add.w d0,d0		; 4
add.w d0,d0		; 4
moveq #0,d1		; 4
move.b (a0)+,d1		; 8
add.w d1,d0		; 4
add.w d0,d0		; 4
add.w d0,d0		; 4
move.b (a0),d1		; 8
add.w d1,d0		; 4
andi.w #$0FFF,d0	; 8
add.w d0,d0		; 4
add.w d0,d0		; 4
lea 0(a6,d0.w),a1	; 12


soit 84 cycles, autant dire que les 8 cycles sont quand meme ridicules...

sachant que la le code prendrait 550 ms pour lui tout seul.. 52 ms de plus ou de moins ne change plus grand chose, sachant que ce n'est pas le seul code utilisé

Je sais pas comment tu obtiens 58Ko/s mais la rien que théoriquement juste sur le calcul du hash ce n'est pas possible...

La on obtiens du 25 a 26Ko/s max juste pour le calcul du hash...


edit: #phoque#