我正在使用CUDA、C++、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++应该接近一些,而不是慢60倍。我也不知道如何评价C#的结果。该算法与C++和Java完全相同,但结果从1024跳到2048。
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();