2011-07-29 5 views
6

En el libro Programming Massively Parallel Processors se usa la cantidad de gflops para comparar la eficiencia de los diferentes núcleos de multiplicación de matrices. ¿Cómo calculo esto para mis propios granos en mi propia máquina?¿Cómo se miden los gflops de un núcleo de multiplicación de matriz?

En algún lugar de los foros de NVIDIA encontré este 'algoritmo', pero no sé, qué tan válido es o de dónde vienen los dos tiempos.

NumOps = 2 * pow(MatrixSize,3) 
gflops = 1.0e-9 * NumOps/ExecutionTime 

p.s. Por favor, siéntase libre de cambiar las etiquetas ...

Respuesta

8

Puede medir los GFLOP ejecutando el algoritmo con una entrada grande y midiendo el tiempo de ejecución. Luego, coloque el tiempo de ejecución y el tamaño de la matriz en esa fórmula. Para tamaños de matriz lo suficientemente grandes como para mantener toda la máquina ocupada, los FLOP solo dependen débilmente del tamaño de la matriz.

El algoritmo de multiplicación de matriz GPU realiza el mismo número de operaciones de coma flotante que el algoritmo ingenuo.

for (i = 0; i < MatrixSize; i++) 
    for (j = 0; j < MatrixSize; j++) 
    for (k = 0; k < MatrixSize; k++) 
     C[j][i] += A[j][k] * B[k][i]; 

Hay 2 operaciones de punto flotante en el cuerpo del bucle, y MatrixSize * MatrixSize * MatrixSize iteraciones del cuerpo del bucle, que le da la fórmula para NumOps. GFLOPs es solo el número de operaciones por segundo, dividido por 10^9 ('giga').

+1

+1. Permítanme agregar que en el hardware con una instrucción incorporada FMAD (fusionar multiplicar y agregar), que incluye todo el nvidia gpus más nuevo, la gente discutirá si usar o no el factor de 2 delante del término MatrixSize^3. Mientras lo haga de manera consistente, no debería importar mucho. –

Cuestiones relacionadas