Améliorer le calcul d'une multiplication (32*32)bits ?
Bonjour à tous !
Je cherche un algorithme qui me permette de calculer une multiplication de deux nombres de 32 bits.
J'ai pensé décomposer chaque terme en deux (ou quatre) termes de 16 bits (ou 8 bits) afin de faire de plus petite multiplications, beaucoup plus rapides sur le processeur qui les implémentera (1 cycle pour du 16*16, 2 cycles pour du 32*8, 5 pour du 32*16 et 35 ! pour du 32*32).
Les instructions de décalage durent également un cycle.
Des idées ?
Re: Améliorer le calcul d'une multiplication (32*32)bits ?
Citation:
Envoyé par progman
Bonjour à tous !
Je cherche un algorithme qui me permette de calculer une multiplication de deux nombres de 32 bits.
J'ai pensé décomposer chaque terme en deux (ou quatre) termes de 16 bits (ou 8 bits) afin de faire de plus petite multiplications, beaucoup plus rapides sur le processeur qui les implémentera (1 cycle pour du 16*16, 2 cycles pour du 32*8, 5 pour du 32*16 et 35 ! pour du 32*32).
Les instructions de décalage durent également un cycle.
Des idées ?
Où est-ce que tu as trouvé ces chiffres? (C'est une question sincère: chaque fois que j'ai cherché de la doc précise sur ces sujets sur les sites d'Intel et d'AMD, j'ai abandonné).
Citation:
j'arrive à 10 cycles
Tu n'oublierais pas de tenir compte des effets tels que:
- les additions ne sont pas sur 32 bits
- il y a des dépendances entre les données qui font que les pipelines ont nécessairement des bulles
Quels sont les résultats des mesures sur ton programme?
Re: Améliorer le calcul d'une multiplication (32*32)bits ?
Citation:
Envoyé par Jean-Marc.Bourguet
Citation:
Envoyé par progman
Bonjour à tous !
Je cherche un algorithme qui me permette de calculer une multiplication de deux nombres de 32 bits.
J'ai pensé décomposer chaque terme en deux (ou quatre) termes de 16 bits (ou 8 bits) afin de faire de plus petite multiplications, beaucoup plus rapides sur le processeur qui les implémentera (1 cycle pour du 16*16, 2 cycles pour du 32*8, 5 pour du 32*16 et 35 ! pour du 32*32).
Les instructions de décalage durent également un cycle.
Des idées ?
Où est-ce que tu as trouvé ces chiffres? (C'est une question sincère: chaque fois que j'ai cherché de la doc précise sur ces sujets sur les sites d'Intel et d'AMD, j'ai abandonné).
Citation:
j'arrive à 10 cycles
Tu n'oublierais pas de tenir compte des effets tels que:
- les additions ne sont pas sur 32 bits
- il y a des dépendances entre les données qui font que les pipelines ont nécessairement des bulles
Quels sont les résultats des mesures sur ton programme?
L'architecture sur laquelle c'est porté n'est pas x86.
C'est du Leon, donc, pas la même chose au niveau cycles.
Donc, oui, je suis certain des chiffres ;)
Re: Améliorer le calcul d'une multiplication (32*32)bits ?
Citation:
Envoyé par progman
L'architecture sur laquelle c'est porté n'est pas x86.
C'est du Leon, donc, pas la même chose au niveau cycles.
Donc, oui, je suis certain des chiffres ;)
Bizarre... Tu peux me dire de quelle doc tu as extrait tes chiffres? Si je prends le manuel de l'utilisateur sur le site de Gaisler je ne vois pas comment tu peux avoir une configuration avec les caractéristiques que tu donnes.
Pour commencer, quelles instructions as-tu pour sparc V8 qui font du 32*8 et du 32*16? Il y a une instruction "pas de multiplication" qui fait du 32*1, deux instructions de multiplications qui font du 32*32 et une multiplication accumulation faisant du 16*16 avec accumulation dans 40 bits.
Ensuite, pour avoir 35 cycles pour la multiplication 32x32, il faut avoir configuré léon avec un multiplieur itératif, ce qui empèche d'avoir les multiplications accumulations et je ne vois pas comment alors faire du 16x16 en un cycle.