gpt4 book ai didi

c++ - 在 C++ 中函数调用有明显的开销吗?

转载 作者:行者123 更新时间:2023-11-28 03:30:05 24 4
gpt4 key购买 nike

在我的项目中,我有一个类,其中执行时间是首要目标。对于它,我不太关心维护、秩序等等。至少到昨天我才在乎……现在我也有点担心了。

我有一个类,比如 A,它对来自相机的图像执行多次扫描,即一个可变宽度的窗口实时扫描它们。



class A{
// methods and attributes of A:
...
void runiterator(){
...
for{ // change window’s dimension
for{ // rows
for{ // columns
// many lines of code of operations to be executed for each window at each position
...
}
}
}
}
};

性能显示已经有一点延迟,但我可以跳过图像的有限区域来解决它。此外,我还有第二个函数,比如 B,它具有与 A 完全相同的方案,并且在每次扫描时执行不同的操作(幸运的是它比 A 快得多)。

好吧,现在是加入所有操作以使整体结果显着受益的时候了。只是代码真的会变得一团糟,变得庞大并且混合了真正不同的东西。我想定义一个进行迭代的类 X,并在每次扫描时对 A_new 中的一个函数和 B_new 中的一个函数执行函数调用。但我担心每张图像大约 200000x2 次函数调用会导致性能下降。

你有什么建议?

编辑
对于仅调用 Anew 的 X 类(因此它只能与现在的 A 进行比较),我在多次重复中平均得到:

在一系列 56 张图像上执行 X 的时间 = 6.15 秒
在同一系列的 56 张图像上执行 A 的时间 = 5.98 秒

看来我的嫌疑人没有那么天真。
差异大约是 3%,并没有那么多,但仍然为损失感到抱歉。

X 的 __forceinline 时间也是 5.98 秒,但我宁愿不依赖它。

我认为代码已经过优化,进一步改进的余地很小。
事实上,它在相对较短的时间内在图像上做了很多事情。
在 A 类中不可能按顺序处理数据,因为它基于来自图像的不可预测的值。这就是 B 类(设法做到这一点)要快得多的原因。

最佳答案

在担心它之前,您确实必须衡量它是否会导致性能问题。

如果有问题,请尝试使用模板来解决。编写函数的两个变体,然后将它们用作执行迭代的函数模板中的仿函数。您将实例化两个版本,并调用适当的版本。编译器应该内联调用(但最好验证这一点)。

我将其用于医学图像处理,效果非常好。

关于c++ - 在 C++ 中函数调用有明显的开销吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12818665/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com