¿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 respuestas

Me 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é?

Respuestas a la pregunta(4)

Su respuesta a la pregunta