我现在开始使用 DSP 编程,并且正在编写我的第一个低级类和函数。 由于我希望函数速度快(或者至少不是低效的),所以我经常想知道在每个样本调用的函数中我应该使用什么以及应该避免什么。
我知道指令的速度差异很大,但我认为你们中的一些人至少可以分享经验法则或经验。 :)
条件语句
如果我必须使用条件,switch
应该比 if/else if
block 更快,对吗?
使用两个 if
语句或一个 if-else
之间有区别吗?我在某处读到应该避免使用 else
但我不知道为什么。
此外,与乘法相比,是否有一个粗略的估计 if block 需要多少时间?因为在某些情况下,可以使用乘以零来代替 if 语句:
//something could be an int either 1 or 0:
if(something) {
signal += something_else;
}
// or:
signa+ += something*something_else;
函数和函数指针
您可以使用函数指针代替条件语句。指针可以重定向到特定函数,而不是在每次调用中都使用条件。但是,对于每次调用,都必须解释指针才能调用正确的函数。所以我不知道这是否有帮助。
我还想知道调用函数是否有影响。如果是这样,应该避免装箱功能,对吗?
变量
我认为在一个函数中定义和使用多个变量并没有真正的影响,至少相对于计算而言。这是真的?如果不是,重用声明的变量会比更多的声明更好。
计算
计算类型是否有执行时间的顺序?我确信这在很大程度上取决于上下文,但经验法则会很好。我经常读到人们只计算算法中的乘法。这是因为加法真的很快吗?
乘法和除法有区别吗? (*0.5
或 /2.0
)
希望大家分享soem经验。
干杯
最佳答案
部分答案如下:
计算(谈论处理器的 native 精度,例如 32 位):
- 大多数 DSP 微处理器都有单周期乘法器,这意味着 就周期而言,乘法成本与加法完全相同。
- 乘法通常比除法快。
条件语句:
if/else - 在查看汇编代码时,您可以看到默认情况下通常会加载 if 条件的内存,因此在使用 if else 时,请确保更频繁发生的条件将在 if 中。
但通常情况下,如果可能,您应该避免在循环中使用 if/else 来改进管道衬里。
祝你好运。
关于c++ - DSP性能,应该避免什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25645708/