为什么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

只有CUDA具有竞争力,但是我认为至少C ++会比较接近,并且速度不会慢60倍。我也不知道如何考虑C#结果。该算法与C ++和Java相同,但是与相比有很大2048的不同1024

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();
埃德里克

这是在装有Tesla C2070的计算机使用MATLAB R2011a +并行计算工具箱的结果

>> A = rand(1024); gA = gpuArray(A);
% warm up by executing the operations a couple of times, and then:
>> tic, C = A * A; toc
Elapsed time is 0.075396 seconds.
>> tic, gC = gA * gA; toc
Elapsed time is 0.008621 seconds.

MATLAB使用高度优化的库进行矩阵乘法,这就是为什么简单的MATLAB矩阵乘法如此之快的原因。gpuArray版本使用MAGMA

在配备Tesla K20c的计算机上使用R2014a进行更新,以及新功能timeitgputimeit功能:

>> A = rand(1024); gA = gpuArray(A);
>> timeit(@()A*A)
ans =
    0.0324
>> gputimeit(@()gA*gA)
ans =
    0.0022

在具有16个物理核心和Tesla V100的WIN64计算机上使用R2018b更新

>> timeit(@()A*A)
ans =
    0.0229
>> gputimeit(@()gA*gA)
ans =
   4.8019e-04

(注意:在某些时候(我忘记了确切的时间)gpuArray从MAGMA切换到cuBLAS-gpuArray尽管MAGMA仍用于某些操作)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么在Python 3中“范围(10000000000000001)”如此之快?

是什么让gcc std :: list排序实现如此之快?

是什么使Java编译器如此之快?

为什么这个C ++程序如此之快?

为什么从内存映射文件读取如此之快?

为什么三元运算符如此之快?

是什么使Python的列表附加方法如此之快?

为什么C ++模板计算如此之快?

为什么在Python 3中复数求幂如此之快?

为什么Dask的执行速度如此之慢,而多处理的执行速度却如此之快?

与较新的libstdc ++。so链接时,为什么C ++可执行文件的运行速度如此之快?

为什么使用JavaScript对32位数字进行排序比对33位数字进行排序如此之快?

为什么在摩托罗拉68k中dbra对于这么大的循环计数如此之快?

为什么只有1个预配置读取容量单位的DynamoDB扫描速度如此之快?

当测试值与预测值之间的差异如此之近时,为什么我的MSE如此之高?

为什么随后用youtube-dl下载的速度如此之快?

为什么Repa的矩阵乘法比hmatrix的矩阵乘法快?

当今计算机如此之快,为什么查看PDF文件仍然很慢?

为什么USB串行在Linux中如此之快?

为什么查询在Entity Framework中花费这么长时间,而在SQL中却如此之快呢?

为什么列表乘法如此之快?

为什么Ubuntu内核中的快照如此之少?它停止发展了吗?

为什么Spark从S3读取和写入如此之快

为什么默认的最大堆大小如此之小

为什么 Pandas 的速度如此之快?如何定义这样的函数?

为什么此代码在进行优化编译时运行得如此之快?

海龟动画在python中如此之快

为什么我的矩形形状在 java graphics 2d 中如此之小

Python Pandas MySQL - 为什么在将数据帧写入数据库时 SQLite 速度如此之快