2012-09-30 65 views
7

¿Cómo puedo calcular FLOPS de mi aplicación? Si tengo el número total de instrucciones ejecutadas, puedo dividirlas por el tiempo de ejecución. Pero, ¿cómo contar el número de instrucciones ejecutadas?Cálculo de FLOPS (Operaciones de coma flotante por segundos)

Mi pregunta es general y la respuesta para cualquier idioma es muy apreciada. Pero estoy buscando una solución para mi aplicación desarrollada por C/C++ y CUDA.

No sé si las etiquetas son correctas, corríjanme si me equivoco.

+0

posible duplicado de [Cómo calcular Gflops de un kernel] (http://stackoverflow.com/questions/7875607/how-to-calculate-gflops-of-a-kernel) – talonmies

+0

¡Estoy al tanto de esa pregunta! Mi pregunta es general. Cómo calcular FLOPS? Incluso multi-core. La respuesta también puede ayudar a mi caso 'CUDA'. – ahmad

+3

Publiqué sobre cómo se pueden usar las herramientas de NVIDIA para reunir FLOP en [Cálculo del ancho de banda logrado y FLOPS ...] (http://stackoverflow.com/questions/12539300/calculating-achieved-bandwidth-and-flops-gflops-and -evaluate-cuda-kernel-perfor). Para x86 hay varias bibliotecas de Linux para calcular FLOP. El monitor de rendimiento x86 admite conteo de FLOP, pero deberá leer el manual para comprender los detalles (instrucciones especulativas, lo que se cuenta, ...) –

Respuesta

7

Lo que hago si el número de operaciones de punto flotante no se modela fácilmente es producir dos ejecutables: uno que es la versión de producción y me da el tiempo de ejecución, y uno instrumentado que cuenta todas las operaciones de punto flotante (seguramente eso será lento, pero eso no tiene importancia para nuestro propósito). Luego puedo calcular el valor de FLOP/s dividiendo el número de operaciones de punto flotante del segundo ejecutable por el tiempo desde el primero.

Esto probablemente podría ser automatizado, pero hasta ahora no lo había necesitado.

6

Debe modelar matemáticamente lo que se hace con sus datos. Aislar una iteración de bucle Luego cuente todas las adiciones, multiplicaciones, divisiones, etc. de coma flotante. Por ejemplo, y = x * 2 * (y + z*w) son 4 operaciones de coma flotante. Multiplique el número resultante por el número de iteraciones. El resultado será la cantidad de instrucciones que estás buscando.

+0

Bueno para un flujo de control coherente y ramas deterministas. No es aplicable en el código con ramas condicionales dependientes de la entrada (el tiempo de ejecución dinámico determina cuántos PF se realizan). – ahmad

+0

ignoras declaraciones condicionales como if (i MySchizoBuddy

Cuestiones relacionadas