我正在实现一个过滤器,我需要尽可能地优化实现。我意识到有一条指令需要很多循环,我不明白为什么:
bool filters_apply(...)
{
short sSample;
double dSample;
...
...
sSample = (short) dSample; //needs a lot of cycles to execute
...
...
}
-mcpu= arm926j -s -mfloat-abi=softfp -mfpu=vfp我试着用FP ABI"硬"编译,看看是否有区别,但编译器没有实现它。
谁能解释一下为什么这条指令需要这么多周期?
非常感谢!
从您提供的信息来看,这可能是因为当您将数据从浮点寄存器传输到臂寄存器时发生了停顿。
这个关于手臂浮动模式的Debian页面声称,这种操作需要大约20个周期。
尽量使用浮点型变量,例如将sSample
转换为浮点型。您的arm926ejs (vfpv2
)应该提供32个单精度(16个双精度)寄存器。