Pregunta

Esto realmente me está tomando el tiempo. No pude encontrar una manera simple de estimar los fracasos para un código siguiente (el bucle), cuántos flops son para una sola iteración del bucle:

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;
    }
    ...
}

Parece simple, pero me confundí con otros números dados anteriormente, por lo que sería genial si alguien pueda dar un número exacto.

Gracias.

¿Fue útil?

Solución

Ya veo (en orden de creciente complejidad):

  • 8 adiciones (inc. Subtracciones)
  • 3 multiplicaciones
  • 1 Root Reciprocal-Square

La forma en que estos se relacionan entre sí dependen en gran medida de la familia de la CPU.

Otros consejos

Intente tomar el código de ensamblaje intermedio o descompilar EXE.

Luego cuente todas las operaciones de punto flotante (en el código de ensamblaje x86 que comienzan con F prefijo como FSIN).

Cuento 12 más un SQRT (que probablemente esté utilizando el método de Newton, que es un bucle), pero eso depende de los tipos de datos de algunas variables que no especificó, y el resultado de la compilación (que puede agregar más o optimizar algunas operaciones).

Estoy contando cada +, /, -o * donde la expresión contiene al menos una variable de punto flotante, por lo que los índices de matriz y el bucle invariante no cuentan, y esas son operaciones enteras.

Intente usar una biblioteca de medición de rendimiento como PAPI, dan abstracciones a los mostradores de hardware que serían lo mejor para medir los fracasos. Papi_flops.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top