SMLALxy |
Multiplication d'accumulateur long signé |
| ARM |
Syntaxe
|
SMLALxy{cond} RdLo, RdHi, Rn, Rm
|
Paramètres
| Nom |
Description |
| x |
Ce paramètre permet d'indiquer un B ou un T lequel signifie si B est mentionné qu'il faut utiliser la moitié inférieure (bits[15:0]) de Rn ou T est mentionné qu'il faut utiliser la moitié supérieur (bits[31:16]) de Rn. |
| y |
Ce paramètre permet d'indiquer un B ou un T lequel signifie si B est mentionné qu'il faut utiliser la moitié inférieure (bits[15:0]) de Rm ou T est mentionné qu'il faut utiliser la moitié supérieur (bits[31:16]) de Rm. |
| cond |
Ce paramètre optionnel permet d'indiquer le code de condition |
| Rd |
Ce paramètre permet d'indiquer le registre de destination. |
| Rn |
Ce paramètre permet d'indiquer le registre contenant le premier opérande à multiplier. |
| Rm |
Ce paramètre permet d'indiquer le registre contenant le deuxième opérande à multiplier. |
Description
Cette instruction permet d'effectuer une multiplication de deux entiers 16 bits et d'un accumulateur long.
Remarques
- Multiplication partielle sur 16 bits : L'instruction SMLALxy effectue une multiplication entre deux moitiés de registres (16 bits) extraites selon les valeurs
de x et y, ce qui permet une grande souplesse dans le traitement parallèle de sous-parties de données. Elle est très utile pour traiter des flux de données compactes comme
des pixels d'images, des échantillons audio ou des données vectorielles.
- Accumulateur long sur 64 bits : Les résultats sont additionnés à un accumulateur sur 64 bits, réparti dans deux registres (RdLo et RdHi). Cela permet de
traiter de très grandes valeurs, souvent nécessaires dans les calculs itératifs, les produits cumulés, ou les systèmes DSP (traitement du signal numérique), sans perdre
en précision.
- Sélection flexible des moitiés de registres : Le paramètre x permet de sélectionner la moitié inférieure (B) ou supérieure (T) de Rn, et y pour Rm. Cette
flexibilité évite de devoir manipuler les données au préalable (comme faire un décalage), rendant le code plus concis et plus performant. On peut ainsi enchaîner
plusieurs opérations SIMD-like sans traitement préalable.
- Opération de type SIMD : Bien que l'instruction ne fasse qu'une multiplication à la fois, elle s'inscrit dans une logique SIMD (Single Instruction, Multiple
Data) car elle permet de cibler une partie d'un registre pour l'opération. Dans un algorithme, plusieurs SMLALxy peuvent être enchaînées pour simuler des opérations
vectorielles sur plusieurs paires de demi-mots.
- Instruction signée : La multiplication est effectuée sur des entiers signés 16 bits, ce qui est fondamental dans des applications où les valeurs peuvent
être négatives, comme dans les calculs mathématiques, géométriques, ou dans la modulation/démodulation de signaux.
- Utilisation conditionnelle possible : Le suffixe {cond} permet d'exécuter l'instruction sous certaines conditions, selon l'état des drapeaux du processeur.
Cela peut améliorer l'efficacité des structures de contrôle, en évitant des branches conditionnelles classiques, et donc réduire les erreurs de prédiction dans les
pipelines.
- Instruction bien adaptée aux systèmes embarqués : Grâce à sa capacité à manipuler efficacement des morceaux de registres et à accumuler des résultats sur
64 bits, SMLALxy est très adaptée aux systèmes embarqués, où la puissance de calcul est limitée mais les opérations mathématiques précises sont fréquentes (comme dans les
capteurs intelligents, codecs audio, ou microcontrôleurs de drones).
- Utilité dans les algorithmes de machine learning embarqués : Dans des réseaux de neurones quantifiés ou des modèles de machine learning légers, on travaille
souvent sur des entiers 8 ou 16 bits. L'instruction SMLALxy permet de simuler une multiplication/accumulation efficace entre poids et entrées, avec stockage précis sur
64 bits. Elle peut donc être exploitée dans des bibliothèques optimisées de ML embarqué comme CMSIS-NN.
Dernière mise à jour : Dimanche, le 12 novembre 2017