Pregunta

Actualmente estoy medir el rendimiento de un cierto código en FLOPS. Este código presenta algunas instrucciones Negate aritméticas como ésta:

d = -a

donde d y a están flotando variables de punto. La arquitectura Actualmente estoy usando no tener instrucciones específicas Negate. Si tuviera que tener en cuenta este tipo de operaciones a medida FLOPS? ¿Qué tipo de operaciones representan el FLOP? ¿Hay una convención o algo?

¿Fue útil?

Solución

Como @Andrey dijo, para asegurarse de que usted debe comprobar el código desensamblado.

Pero, en general, sí, la instrucción sería probable que ejecutar en un FPU. Simplemente se voltea un poco, por lo que podría se haga en una unidad de enteros así, pero ya que está operando en los valores de punto flotante, éstos son los más probable es que ya cargado en los registros de FP, y por lo que hay' d una buena cantidad de gastos generales a moverlos a registros de propósito general, el cambio del bit y en movimiento de nuevo.

No sé si hay una guía universal completa a "lo que debería ser considerado como un fracaso", pero esto es más probable una instrucción que se ejecuta en un FPU, y por lo que está compitiendo con otras instrucciones de PF para los recursos en la CPU, así que sí, me gustaría incluirlo en un recuento FLOPS.

Otros consejos

intente desmontar el código y comprobar cómo se realiza esta operación.

si se utiliza la instrucción FCHS (cambio de signo) entonces se puede considerar que la operación flotante punto.

MSVC (Visual Studio 2008)

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

FCHS - ver eso?

Hay un tipo de convención para calcular el FLOPS usando LINPACK como una especie de punto de referencia estándar.

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