Мне даны две функции для нахождения произведения двух матриц:
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];
}
Я выполнил и профилировал два исполняемых файла, используя gprof
, каждый с идентичным кодом, кроме этой функции. Вторая из них значительно (примерно в 5 раз) быстрее для матриц размером 2048 x 2048. Любые идеи относительно того, почему?