工具与软件:
尊敬的专家:
我的客户目前正在将浮点变量用于同一电机的位置估算器、这比使用 Q 格式的定点变量长大约10-20%、浮点计算时间是否已被加速?
FPU 已开启。
此致
Anka Zhang
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具与软件:
尊敬的专家:
我的客户目前正在将浮点变量用于同一电机的位置估算器、这比使用 Q 格式的定点变量长大约10-20%、浮点计算时间是否已被加速?
FPU 已开启。
此致
Anka Zhang
尊敬的 Sira:
我的客户希望在其项目中使用浮点、但他们发现它比基于280039C 的修复点(FPU 开启时)慢得多。
我使用 CCS 的时钟逐步对其代码进行计时、结果如下:
int a;int b;
a+b. : 9个周期
a*b>>11. : 9个周期
a*b+a. :10个周期
a+b*b>>11:20 周期
a=b :1个 周期
float32 c;float32 d;
c=d :8cycles
C-d. :11个周期
c*d :11个周期
c*d+c. :23个周期
c*d+c+d. :24个周期
他们的项目即将批量生产、但代码无法满足他们的要求。
他们如何加快代码速度?
此致
Anka
Anka、
一些评论和建议:
1. C28x 上的 int 是16位、因此在定点情况下执行16位运算。 可以参考 spru430f、Add、MPY 是单周期说明
2.在浮点情况下、运算是32位的、以及 ADD、MPY 等。是2p 指令、即存在流水线冲突时为2个周期、没有冲突时为1个周期。 请参阅 spruhs1c。 具体而言、来看看第1.4.7节、它为简单的加法和乘法用例(如示例)展示了没有流水线优化和具有流水线优化的浮点代码。
3.是否已启用优化?
4. 由于流水线效果和潜在的编译器优化,为小操作获取准确的时钟周期数(如在您的示例中)将是一个挑战。 在这种情况下、CCS 时钟为您提供的数字可能不准确。 最好分析大型代码块。 与您的情况一样、整个示例、而不是单个元素。 您还应该查看生成的汇编代码、以查看其是否全部匹配。
我的整体意见是、对于简单运算、您可能会看到定点相对于浮点的优势、但当您往实际系统示例中看时、C28x 上有限数量的定点寄存器会很快成为限制、浮点性能将优于定点性能。
谢谢!
SIRA