小编Wol*_*olf的帖子

为什么MATLAB在矩阵乘法中如此之快?

我正在使用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
Run Code Online (Sandbox Code Playgroud)

只有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 …
Run Code Online (Sandbox Code Playgroud)

performance matlab cuda matrix-multiplication

184
推荐指数
7
解决办法
5万
查看次数

为什么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]; …
Run Code Online (Sandbox Code Playgroud)

c# arrays matrix-multiplication

127
推荐指数
5
解决办法
6473
查看次数

标签 统计

matrix-multiplication ×2

arrays ×1

c# ×1

cuda ×1

matlab ×1

performance ×1