我现在开始使用dsp编程,并正在编写我的第一个低级类和函数。 因为我想要的功能是快速的(或最终不是低效的),我经常想知道我应该使用什么,我应该避免在函数中调用每个样本。DSP性能,应该避免什么?
我知道指令的速度差异很大,但我认为你们中的一些人至少可以分享经验法则或经验。 :)
条件语句
如果我不得不使用条件,switch
应该比一个if/else if
块更快,对不对? 使用两个if
-statements或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的经验。
干杯
先实施,再优化。也就是说,除非你有工作代码,否则不要担心性能。然后分析您的工作代码并优化瓶颈。 – dohashi 2014-09-03 13:33:49
现在有了复杂的优化编译器,回答这个问题的唯一方法就是告诉你简介。一个编译器通常“知道”如果可以将浮点运算部分转换为乘法运算,并且在现代CPU上使用分支预测等,则很难以一般而有用的方式回答您的问题。 – 2014-09-03 13:34:30
就像我说过的,我不会从算法中挤出纳秒,但是对于设计类和函数,一些基本规则会帮助你。 :) – 2014-09-03 13:36:23