Opencv减法比乘法更昂贵

时间:2013-09-18 16:22:12

标签: c++ opencv

我正在尝试优化图像处理项目的代码

Performance analysis done by VS2013 preview

VS2013预览分析表明,减法运算比乘法(mul)运算更昂贵。

一般来说,乘法比减法更昂贵。 如果是这样,为什么不在这里。?

1 个答案:

答案 0 :(得分:1)

我认为这可能是几个因素的组合。

  • t1需要在subtract来电期间分配,这需要一些时间
  • t1很可能在t1.mul(t1)调用期间已经在缓存中,因此访问速度更快
  • 我不确定td是什么类型,但我敢打赌,当saturate_cast添加到1时,矩阵中的每个元素都会有td ; .mul()来电
  • 中无需投射
  • 减法和乘法都是内存绑定操作,因此对于除最小矩阵之外的所有矩阵,正确优化的代码将隐藏乘法指令的较高延迟,以实现两个操作的相同吞吐量,其他条件相同(例如,缓存)等等。)
  • .mul()次调用是就地操作,这对缓存具有显着优势
  • 如果这是项目的发布版本,优化器可能会重新安排代码,以便将剖析器与哪些耗时的机器指令对应哪些代码行相混淆。你会对在OpenCV中对矩阵的算术运算的优化实现所涉及的那种深刻的魔法感到惊讶。
相关问题