Почему очень сильно падает производительность при умножении массивов 2048x2048 по сравнению с умножением 2047x2047?

Я провожу сравнительный анализ умножения матриц, как ранее упоминалось в Почему MATLAB так быстро справляется с умножением матриц?

Теперь у меня возникла другая проблема: при умножении двух матриц 2048x2048 существует большая разница между C # и другими. Когда я пытаюсь перемножить только матрицы 2047x2047, это кажется нормальным. Также добавлены другие для сравнения.

1024x1024 - 10 секунд.

1027x1027 - 10 секунд.

2047x2047 - 90 секунд.

2048x2048 - 300 секунд.

2049x2049 - 91 секунда. (обновление)

2500x2500 - 166 секунд

То есть разница в три с половиной минуты для случая 2k на 2k.

с использованием массивов 2dim

//Array init like this
int rozmer = 2048;
float[,] matice = new float[rozmer, rozmer];

//Main multiply code
for(int j = 0; j < rozmer; j++)
{
   for (int k = 0; k < rozmer; k++)
   {
     float temp = 0;
     for (int m = 0; m < rozmer; m++)
     {
       temp = temp + matice1[j,m] * matice2[m,k];
     }
     matice3[j, k] = temp;
   }
 }

127
задан Community 23 May 2017 в 10:34
поделиться