matlab时间复杂度,MATLAB中的矩阵乘法时间复杂度

MATLAB矩阵乘法利用BLAS中的DGEMM例程,具有O(n^3)的时间复杂度。虽然存在更快的算法如Strassen和Coppersmith-Winograd,但因缓存效率问题,实际应用中不如优化的块矩阵乘法算法。视频演示了块矩阵乘法的局部性优势。
摘要由CSDN通过智能技术生成

有谁知道MATLAB用于矩阵乘法的算法及其时间复杂度是多少?

2009年在Matlab Central上回答了这个问题(具体请参见Tim Davis的第二个答复)。 不知道从那以后有什么变化...

为了完整性-如该线程中所述,Matlab使用BLAS(基本线性代数子程序)中的DGEMM(双通用矩阵乘法)例程。

请注意,没有BLAS的单一实现-针对特定的处理器体系结构进行了调整。因此,如果不找出正在使用哪个版本的BLAS,就不能完全确定计算机上正在使用哪种算法。

BLAS规范指定了每个子例程的输入和输出,并为每个子例程的输出提供了可接受的误差范围。只要遵循规范,实现即可自由使用其喜欢的任何算法。

BLAS的参考实现在DGEMM中使用块矩阵乘法算法,该算法具有时间复杂度O(n ^ 3)来将两个n x n矩阵相乘。我认为可以合理地假设,大多数BLAS实现将或多或少地遵循参考实现。

请注意,它不使用朴素矩阵乘法算法

for i = 1:N

for j = 1:N

for k = 1:N

c(i,j) = c(i,j) + a(i,k) * b(k,j);

end

end

end

这是因为通常,整个矩阵都无法放入本地内存。如果不断将数据移入和移出本地内存,该算法将变慢。块矩阵算法将操作分为几个小块,这样每个块都足够小以适合本地内存,从而减少了移入和移出内存的次数。

存在渐近更快的矩阵乘法算法,例如Strassen算法或Coppersmith-Winograd算法,其速率比O(n ^ 3)稍快。但是,它们通常不了解缓存,而忽略局部性-意味着数据需要不断在内存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值