首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么MATLAB在矩阵乘法上这么快?

为什么MATLAB在矩阵乘法上这么快?
EN

Stack Overflow用户
提问于 2011-05-19 19:46:59
回答 8查看 58.2K关注 0票数 196

我正在使用CUDA、C++、C#、Java进行一些基准测试,并使用MATLAB进行验证和矩阵生成。当我用MATLAB执行矩阵乘法时,2048x2048和更大的矩阵几乎可以立即相乘。

代码语言:javascript
复制
             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++代码:

代码语言:javascript
复制
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();
EN

回答 8

Stack Overflow用户

发布于 2011-05-20 04:58:27

This is why。MATLAB不会像在C++代码中那样,通过循环遍历每个元素来执行简单的矩阵乘法。

当然,我假设您只是使用了C=A*B,而不是自己编写乘法函数。

票数 42
EN

Stack Overflow用户

发布于 2011-05-19 23:50:20

Matlab在一段时间前加入了LAPACK,所以我认为他们的矩阵乘法至少使用了那么快的速度。LAPACK源代码和文档随处可见。

你也可以在http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.140.1785&rep=rep1&type=pdf上看看后藤健二和范德盖恩的论文“高性能矩阵乘法的剖析”

票数 20
EN

Stack Overflow用户

发布于 2012-11-05 00:30:02

在做矩阵乘法时,你使用的是朴素的乘法方法,这会占用O(n^3)的时间。

存在采用O(n^2.4)的矩阵乘法算法。这意味着在n=2000中,您的算法所需的计算量是最佳算法的100倍。

你真的应该查看维基百科的矩阵乘法页面,了解更多关于实现矩阵乘法的有效方法的信息。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6058139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档