我目前正在使用模拟ARM处理器的Open虚拟平台,我正在为FreeRTOS使用不同交叉编译器启动的简单任务做一些基准测试。
所以我遇到了一些奇怪的事情,当我使用GCC工具链时,我必须使用标志 编译软件时的 -mhard-float ,因为gcc的库是使用硬件FP编译的。在我的基准测试中,我得到了1000万条指令。
然而,当我切换到Codesourcerys ARM eabi工具链时,我必须使用标志 -mfloat-abi = soft 来编译软件,因为它的库不是用硬浮点编译的。在这个基准测试中,我得到了3000万条指令,慢了三倍。
该软件非常简单,不测试任何浮点数,它只是启动一个freeRTOS任务,并通过循环打印出0到10000之间的数字。简单地添加整数。
任何人都可以解释硬浮点和软浮点数的差异以及为什么编译器之间的基准测试差别如此之大?
祝你好运 吉古先生