分析帮助:缓慢的矩阵标量分配

时间:2014-05-02 11:02:47

标签: arrays matlab profiling

我正在微观优化内部循环,并在分析器(R2013b)中遇到了一些我不理解的东西:

profiler output

C是2x2矩阵,x和y是数据,其他一切都是标量。为什么第33行和第34行之间的速度差异都在做同样的事情 - 为数组中的条目指定标量。如果我交换这两行的行为是相同的,第二行是慢得多。

这是一个分析器错误还是有什么事情我不明白?即使我扩展到几分钟(例如,第32行和第34行占用相同的时间),该比率也是相同的。我无法看到如何在这里触发写入时复制或类似操作,因此速度差异对我没有任何意义。在这里节省30%对我来说将是一个巨大的胜利。

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

我认为第二个较慢的原因不在于行的内容,而是在实际使用矩阵时更多。在第一行中,matlab'知道'它不需要做任何事情,因为下一行是C中的独立变化。

如果你想验证它不在行的内容中,可以在下面添加C(1,1)=Cxy之类的东西作为第三行,可能现在前两行都会快速显示。

基本上这意味着你可能不会太多地提高速度。

也许您可以尝试逻辑索引,因为它可能稍快(未经测试)。

C([false true; true false]) = Cxy;

或者可能是线性逻辑索引:

C([false true true false]) = Cxy;

对于它的价值,我猜想整个效果是由于Matlab遵循的及时原则。