0

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

VS2013预览完成的性能分析

VS2013 preview 的分析表明,减法运算比乘法(mul)运算成本更高。

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

4

1 回答 1

1

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

  • t1需要在subtract调用过程中分配,这需要一些时间
  • t1在调用期间很可能已经在缓存中t1.mul(t1),因此访问速度更快
  • 我不确定是什么类型td,但我敢打赌,当您添加;saturate_cast时,矩阵中的每个元素都会发生变化1。通话td中不需要强制转换.mul()
  • 减法和乘法都是内存绑定操作,因此对于除最小矩阵之外的所有矩阵,经过适当优化的代码将隐藏乘法指令的较高延迟,以实现两种操作的相同吞吐量,其他条件相同(例如,缓存等)。 )
  • .mul()调用是就地操作,这对于缓存具有显着优势
  • 如果这是项目的发布版本,则优化器可能会重新排列代码,从而使分析器混淆哪些耗时的机器指令对应于哪些代码行。您会对 OpenCV 中矩阵算术运算的优化实现所涉及的那种深奥的魔法感到惊讶。
于 2013-09-18T17:41:22.650 回答