我使用CUDA,C,C#和Java做一些基准测试,并使用MATLAB进行验证和矩阵生成。但是当我乘以MATLAB,2048×2048和甚至更大的矩阵几乎立即相乘。
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#结果。该算法与C和Java相同,但是从1024开始有一个巨大的跳跃2048?
编辑2:
更新了MATLAB和4096×4096结果