Question

prend vraiment mon temps. Je ne pouvais pas trouver un moyen simple d'estimation FLOPS un code suivant (la boucle), Combien FLOPS sont pour une seule itération de la boucle:

float func(float * atominfo, float energygridItem, int xindex, int yindex)
{
   ...
   for (atomid=0; atomid<numatoms*4; atomid+=4) 
   {
       float dy = coory - atominfo[atomid+2];
       float dysqpdzsq = (dy * dy) + atominfo[atomid+3];
       float dx1 = coorx1 - atominfo[atomid+1];

       float s, y, t;
       s = atominfo[atomid] * (1.0f / sqrtf(dx1*dx1 + dysqpdzsq));
       y = s - energycomp1;
       t = energyvalx1 + y;
       energycomp1 = (t - energyvalx1)  - y;
       energyvalx1 = t;
    }
    ...
}

Il semble simple, mais je me suis confondu avec d'autres chiffres donnés plus tôt, donc ce serait bien si quelqu'un peut donner un nombre exact.

Merci.

Était-ce utile?

La solution

Je vois (dans l'ordre de complexité croissante):

  • 8 additions (inc. Soustractions)
  • 3 multiplications
  • 1 racine réciproque carré

Comment ceux-ci sont liées entre elles dépend fortement de la famille de CPU.

Autres conseils

essayer de prendre soit le code assembleur intermédiaire ou décompilation exe.

Comptez ensuite toutes les opérations à virgule flottante (en code assembleur x86, ils commencent par le préfixe de F comme FSIN).

Je compte 12 plus un sqrt (qui utilise probablement la méthode de Newton, qui est une boucle), mais cela dépend des types de données de certaines variables que vous ne spécifiez pas, et le résultat de la compilation (qui peut ajouter, ou optimiser certaines opérations).

Je compte chaque +, /, -., Ou * où l'expression contient au moins une variable à virgule flottante, de sorte que les indices de tableau et l'invariant de boucle ne comptent pas, et ceux qui sont des nombres entiers opérations

Essayez d'utiliser une bibliothèque de mesure du rendement comme PAPI, ils donnent des abstractions aux compteurs matériels qui seraient mieux votre mieux pour mesurer la FLOPS. PAPI_FLOPS.

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