2016-12-25 6 views
0

Lors de la mesure d'un algorithme, s'il existe des opérations de division, comment calculer le nombre total de FOP et la performance en virgule flottante? Par exemple, multiplication matricielle n2, le calcul de n3 * 2 flops (une multiplication, une addition), en supposant que l'utilisation du même ensemble de données n2, nous changeons les opérations de multiplication de la multiplication matricielle dans les opérations de division, comment calculer flops. Est-ce la même chose avec le résultat de la multiplication matricielle?Comment calculer le nombre total de FOP et la performance en virgule flottante des opérations spéciales (exp sin sqrt)?

Répondre

1

Il n'y a pas de standard qui spécifie ce qu'est une opération en virgule flottante.
Cela est dû au fait que différentes architectures peuvent avoir un support natif pour un ensemble différent d'opérations.
Ainsi, par exemple, l'architecture A mai prend en charge tous les quatre opérations de base, A que l'ajout et A toutes les opérations de base plus exponentiation.

En général, le terme opérations en virgule flottante est hautement contextualisé et lié à une machine spécifique.

Cependant, vous pouvez faire une bonne analyse indépendante de la machine en comptant séparément chaque type d'opération.
Cela nécessite un peu d'expertise et de vaudou, par exemple l'addition et la soustraction sont comptées ensemble car elles sont fondamentalement la même opération pour le matériel.
Les multiplications et les divisions sont comptées séparément, comme le sont les opérations plus complexes (exponentiation, fonctions trigonométriques, etc.).

À la fin, vous aurez un compte pour toutes les différentes opérations.
Par exemple multiplier un n × m matrice par un m × k une implique n · k · m multiplications et n · k · (m -1) additions. de sorte que le résultat est n ·k · m + MULn ·k · (m -1) ADD. De cette expression "full-information", qui est généralement un bon résultat en soi, vous pouvez obtenir une approximation du nombre d '"opérations à virgule flottante" en saisissant une machine de référence et l'unité de mesure.

Par exemple, la micro-architecture Skylake d'Intel a cela, très simplifié timings table:

Operation    Cycles 

Addition    0.5 
Subtraction   0.5 
Division    3 
Multiplication  0.5 

Si nous prenons l'ajout de l'unité de mesure pour un FLOP, on peut dire qu'une division est aussi longue comme 6 ajouts, donc c'est comme 6 FLOPs.

Operation    FLOPs 

Addition    1 (By definition) 
Subtraction   1 
Division    6 
Multiplication  1 

Ainsi, l'exemple ci-dessus réduit à n · k · (2 ​​· m-1) depuis la multiplication et l'addition tous prennent seulement 1 FLOP pour terminer.

Ceci est une vue simplifiée, les machines réelles sont beaucoup plus compliquées (par exemple Skylake a des unités vectorielles et un support FMA qui peut changer l'unité de mesure et les minutages). Quoi qu'il en soit, l'expression en termes de types d'opérations différents est indépendante de la machine et peut être convertie en un seul nombre plus tard lors de la création d'un cas spécifique.