【问题标题】:Overhead of supporting Floating Point Arithmetic inside the Linux Kernel在 Linux 内核中支持浮点运算的开销
【发布时间】:2011-06-19 01:01:10
【问题描述】:

众所周知,基于 Linux/BSD 的内核不支持浮点 (FP) 算法。在内核中处理 FP 寄存器的开销是多少?

【问题讨论】:

  • 您在哪里看到内核中浮点运算的用例?
  • 我正试图了解事实背后的“原因”。

标签: linux


【解决方案1】:

通常的答案是,如果内核不使用浮点,它不必在进入内核时保存浮点寄存器或在退出时恢复它们。这将所有系统调用的成本减少了数百个周期。

我不知道是否有人尝试将这种节省与内核可以不加选择地使用这些寄存器时可能获得的性能改进进行比较。请注意,如果您采取适当的措施,可以在内核中使用它们,并且这是在可以获得巨大速度优势的情况下完成的,例如使用SSE指令加速memcpy等。 (在 Linux 源代码中查找对 kernel_fpu_begin 的调用。)

【讨论】:

  • 对于实数,当一个内核线程被另一个内核线程抢占时,内核还必须保存寄存器。那么,惩罚在哪里?
  • 啊,但它没有!在硬件的帮助下,内核可以避免在与从未使用过 FPU 的线程之间进行上下文切换时保存 FPU 寄存器。此外,许多系统调用不涉及上下文切换,尤其是系统调用本身的成本占主导地位的真正便宜的系统调用,这正是这种优化很重要的时候。
  • +1 表示正确答案。 @user350129:一个很好的例子是gettimeofday,一个典型的(例如)Web 服务器几乎会连续调用它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-02
  • 2013-03-30
  • 2018-01-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多