Question

Je mesure actuellement la performance de code dans FLOPS. Ce code présente des instructions d'arithmétique de Annulez comme celui-ci:

d = -a

d et a sont variables de type flottant. L'architecture que je suis actuellement en utilisant des instructions de ne nions spécifiques. Devrais-je prendre en compte ce genre d'opérations à mesure Flops? Quel genre d'opérations représentent FLOPS? Y at-il une convention ou quoi que ce soit?

Était-ce utile?

La solution

Comme @Andrey dit, pour être sûr que vous devriez vérifier le code désassemblé.

Mais en général, oui, l'instruction serait probablement exécuter sur un FPU. Il retourne simplement un peu, donc il pourrait être fait sur une unité entière aussi bien, mais puisque vous opérez sur des valeurs à virgule flottante, ceux-ci sont très probablement déjà chargé dans les registres FP, et donc il » d un montant équitable des frais généraux pour les déplacer vers des registres à usage général, en retournant le bit et les déplacer en arrière.

Je ne sais pas s'il y a un guide universel complet à « ce qui devrait être considéré comme un FLOP », mais cela est très probablement une instruction qui exécute sur un FPU, et il est en concurrence avec d'autres instructions de PF pour les ressources sur la CPU, donc oui, je l'inclure dans un nombre fLOPS.

Autres conseils

essayer de démonter le code et vérifier comment cette opération est effectuée.

si elle utilise FCHS instruction (changement de signe), vous pouvez considérer l'opération en virgule flottante.

MSVC (Visual Studio 2008)

    double c = -b;
00971397  fld         qword ptr [b] 
0097139A  fchs             
0097139C  fstp        qword ptr [c] 

FCHS - voir ça?

Il y a une sorte de convention pour calculer la Flops en utilisant Linpack comme une sorte de référence standard.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top