¿Por qué el orden de los bucles en un algoritmo de multiplicación matricial afecta el rendimiento? [duplicar
Esta pregunta ya tiene una respuesta aquí:
¿Por qué el orden de los bucles afecta el rendimiento al iterar sobre una matriz 2D? 7 respuestasMe dan dos funciones para encontrar el producto de dos matrices:
void MultiplyMatrices_1(int **a, int **b, int **c, int n){
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
for (int k = 0; k < n; k++)
c[i][j] = c[i][j] + a[i][k]*b[k][j];
}
void MultiplyMatrices_2(int **a, int **b, int **c, int n){
for (int i = 0; i < n; i++)
for (int k = 0; k < n; k++)
for (int j = 0; j < n; j++)
c[i][j] = c[i][j] + a[i][k]*b[k][j];
}
Ejecuté y perfilé dos ejecutables usandogprof
, cada uno con un código idéntico a excepción de esta función. El segundo de estos es significativamente (aproximadamente 5 veces) más rápido para matrices de tamaño 2048 x 2048. ¿Alguna idea de por qué?