gcc—将双精度复制为整数的高执行时间
我正在实施一个过滤器,我需要尽可能优化实施。我意识到有一条指令需要很多周期,我不明白为什么:gcc—将双精度复制为整数的高执行时间,gcc,floating-point,arm,double,Gcc,Floating Point,Arm,Double,我正在实施一个过滤器,我需要尽可能优化实施。我意识到有一条指令需要很多周期,我不明白为什么: bool filters_apply(...) { short sSample; double dSample; ... ... sSample = (short) dSample; //needs a lot of cycles to execute ... ... } 我正在使用de GCC选项:-mcpu=arm926ej-s-mfloat abi=
bool filters_apply(...)
{
short sSample;
double dSample;
...
...
sSample = (short) dSample; //needs a lot of cycles to execute
...
...
}
我正在使用de GCC选项:-mcpu=arm926ej-s-mfloat abi=softfp-mfpu=vfp
我曾尝试使用FP ABI“hard”进行编译,以查看是否存在差异,但编译器没有实现它
谁能解释一下为什么指令需要这么多周期
非常感谢 只需查看您提供的信息,这可能是因为您将数据从浮点寄存器传输到arm寄存器时发生了暂停 这表明,这种操作大约需要20个周期
尽量使用浮点变量,例如将
sSample
转换为浮点。您的(vfpv2
)应该提供32个单精度(16个双精度)寄存器。可能是因为您将值从fp处理器寄存器移动到arm寄存器吗?我必须稍后将sSample传输到一个短缓冲区,以实现音频设备的帧。这意味着我迟早要从双倍转投到空头。