Compiler construction 使用硬件FP和软件VFP的不同ARM交叉编译器的基准测试差异

Compiler construction 使用硬件FP和软件VFP的不同ARM交叉编译器的基准测试差异,compiler-construction,arm,cross-compiling,Compiler Construction,Arm,Cross Compiling,我目前正在使用模拟ARM处理器的开放虚拟平台,我正在用不同的交叉编译器对FreeRTOS启动的一个简单任务进行一些基准测试 所以我遇到了一些奇怪的事情,当我使用GCC工具链时,我不得不使用标志 -mhard float编译软件时,因为gcc的库是使用硬件FP编译的。在我的基准测试中,我得到了1000万条指令 但是,当我切换到CodeSourceRY的ARM eabi工具链时,我必须使用标志-mfloat abi=soft来编译软件,因为它的库不是用硬浮点编译的。在这个基准测试中,我得到了3000

我目前正在使用模拟ARM处理器的开放虚拟平台,我正在用不同的交叉编译器对FreeRTOS启动的一个简单任务进行一些基准测试

所以我遇到了一些奇怪的事情,当我使用GCC工具链时,我不得不使用标志 -mhard float编译软件时,因为gcc的库是使用硬件FP编译的。在我的基准测试中,我得到了1000万条指令

但是,当我切换到CodeSourceRY的ARM eabi工具链时,我必须使用标志-mfloat abi=soft来编译软件,因为它的库不是用硬浮点编译的。在这个基准测试中,我得到了3000万条指令,速度慢了三倍

该软件非常简单,不测试任何浮点数,它只是启动一个freeRTOS任务,并通过一个循环打印出0到10000的数字。整数的简单加法

有人能解释硬浮点和软浮点的区别吗?为什么编译器之间的基准差异如此之大

致意
Gigu先生

你能提供示例源代码来演示这个问题吗?我用其他几个软件进行了测试,所有的基准测试似乎都支持硬浮动。使用硬浮动编译时,所有软件都会变得更快,这是真的吗?我使用的是免费的codesourcerys lite版本,它不支持带有硬浮动的库,因此您需要支付1600$:/这是速度差异的一个因素还是常量开销。例如,如果您让您的程序打印0到100000之间的数字。差异仍然是3倍,还是仅仅多了2000万条指令?可能其中一个库需要一些初始化代码(例如,对于某些sin/cos表),这需要一定的开销(2000万行)。当然,硬件FP比软件仿真快。所以问题不应该是为什么,而应该是在哪里。实际上从哪里得到一些被调用的浮点函数?也许你应该分解你的代码,检查对某个fp操作的函数调用隐藏在哪里(正如我在另一篇文章中提到的,如果它是一些初始化代码,我不会感到惊讶)。如果你提供一个示例程序,那么我们可以解释原因。