Я делаю некоторые тесты с CUDA, C++, С# и Java, и использую MATLAB для проверки и генерации матрицы. Но когда я умножаю с помощью MATLAB, матрицы 2048x2048
и даже больше умножаются практически мгновенно.
1024x1024 2048x2048 4096x4096
--------- --------- ---------
CUDA C (ms) 43.11 391.05 3407.99
C++ (ms) 6137.10 64369.29 551390.93
C# (ms) 10509.00 300684.00 2527250.00
Java (ms) 9149.90 92562.28 838357.94
MATLAB (ms) 75.01 423.10 3133.90
Только CUDA конкурентоспособна, но я думал, что по крайней мере C++ будет несколько ближе, а не в 60x
медленнее.
Поэтому мой вопрос - как MATLAB делает это так быстро?
C++ Код:
float temp = 0;
timer.start();
for(int j = 0; j < rozmer; j++)
{
for (int k = 0; k < rozmer; k++)
{
temp = 0;
for (int m = 0; m < rozmer; m++)
{
temp = temp + matice1[j][m] * matice2[m][k];
}
matice3[j][k] = temp;
}
}
timer.stop();
Изменение: я также не знаю, что думать о результатах С#. Алгоритм такой же, как C++ и Java, но там гигантский скачок 2048
с 1024
?
Edit2: обновлены результаты MATLAB и 4096x4096