Por que a ordem dos loops em um algoritmo de multiplicação de matrizes afeta o desempenho? [duplicado
Esta pergunta já tem uma resposta aqui:
or que a ordem dos loops afeta o desempenho ao iterar em uma matriz 2 respostasRecebo duas funções para encontrar o produto de duas matrizes:
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];
}
Eu corri e criei o perfil de dois executáveis usandogprof
, cada um com código idêntico, exceto para esta função. O segundo deles é significativamente (cerca de 5 vezes) mais rápido para matrizes de tamanho 2048 x 2048. Alguma idéia do porquê?