YTM32B1MD1浮点计算负载问题
-
近期在现有项目上将原有部分定点计算改为浮点计算。但修改后发现负载率非常高。
原定点计算时100us周期下负载率大概50~60%。改为浮点后,周期放宽到200us,负载率还是达到80~90%。翻了将近4倍
目前相关设置如下,启用了硬件FPU,优化O1。还有哪些地方我设置不对的么?
-
请检查一下你代码中浮点数的定义和调用,YTM32B1MD14的CM33内核仅支持单精度浮点数,也是就是32bit的float类型,不支持双精度64bit的double类型:
因此,正确的写法应该是:float a, b; a = 1.0f * 5U; b = 0.32f * 0.8f;
而不能是:
float a, b; a = 1.0 * 5U; b = 0.32 * 0.8;
因为C语言默认1.0,0.32,0.8为double类型,将使用C语言的math库的软件算法实现,而不是编译为FPU硬件指令。
具体可以参考如下公众号文章(点击链接即可直接调整阅读) -
多谢提醒,按您说的,我把初始化部分和常量部分都改为.0f的格式,改完后实测负载率从200us 80~90%降到了200us 65~70%左右。
还有哪些设置会导致负载率增大么?
快速上手云途开发生态
发帖前请查看
帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...