Optimization 在Linux内核中启用VFP有什么缺点吗?

Optimization 在Linux内核中启用VFP有什么缺点吗?,optimization,floating-point,arm,embedded-linux,Optimization,Floating Point,Arm,Embedded Linux,我正在优化一个运行在ARM Cortex-A8嵌入式Linux系统上的应用程序。该程序执行大量浮点计算,但未使用VFP。我必须在内核中配置它,并设置适当的编译器标志。之后,应用程序的性能显著提高 在内核中启用VFP(即CONFIG_VFP=y)、功耗或其他方面是否有任何缺点?您是在内核中启用VFP,还是在内核中设置一个位以在用户区进程中启用VFP?如果是前者,您真的需要在内核中运行吗?如果是后者,我有点惊讶它还没有启用。广义地说,启用VFP/NEON的唯一真正缺点是需要在上下文开关上保存和恢复更

我正在优化一个运行在ARM Cortex-A8嵌入式Linux系统上的应用程序。该程序执行大量浮点计算,但未使用VFP。我必须在内核中配置它,并设置适当的编译器标志。之后,应用程序的性能显著提高


在内核中启用VFP(即CONFIG_VFP=y)、功耗或其他方面是否有任何缺点?

您是在内核中启用VFP,还是在内核中设置一个位以在用户区进程中启用VFP?如果是前者,您真的需要在内核中运行吗?如果是后者,我有点惊讶它还没有启用。广义地说,启用VFP/NEON的唯一真正缺点是需要在上下文开关上保存和恢复更多的状态,但这是一个相对较小的惩罚。我说的是在内核中启用它以供用户空间应用程序使用。我没有做任何额外的事情,使它在用户的土地。我只是在用VFP,而不是霓虹灯。打开霓虹灯的一个缺点是需要打开电源域,这意味着需要更多的功耗。然而,我没有看到任何关于必须为VFP打开电源域的内容。您几乎肯定也希望在启用霓虹灯的情况下运行。VFP的性能并没有什么特别之处——如果您愿意在某些情况下降低精度,编译器将为单精度操作生成NEON指令。NEON/VFP使用相同的寄存器集。通常情况下,它们会被懒散地保存。如果任务不使用它们,则不会存储它们。请参阅:,它负责VFP/Neon的重载。内核为任务禁用VFP/Neon,当一条指令执行时,它将捕获到一条未定义的指令,Neon/VFP将被记录、启用,代码将按照正常方式恢复。当它被标记为活动时,状态被存储。唯一的缺点是页面锁定的内核代码稍大。我想每个线程信息也会为VFP上下文保留一些空间。它总是在一个8K的块,所以它真的不是一个很大的浪费;内核所做的一切都是4k块,线程信息应该是8k,有/没有VFP;虽然内核进程堆栈会稍微小一些。