【link】http://yarchive.net/comp/linux/kernel_fp.html
(1)Linux kernel默认不支持浮点计算。因为浮点相关寄存器(浮点计算上下文)在系统调用(进程切换)的过程中不会被保存,出于进程切换效率的考虑。
(2)在X86上,kernel可以通过以下方式加入浮点计算:
kernel_fpu_begin(); ... kernel_fpu_end();kernel_fpu_xxx()保证系统抢占被关掉,使得begin和end之间的code不会被中断,从而安全进行浮点计算。但要求begin和end之前的代码不能有休眠或调度操作。
(3)使用浮点计算,需要处理器有浮点运算单元(FPU)。
(4)内核不能直接调用libc,所以kernel浮点计算不能使用libc的任何函数。
(5) 内核不推荐使用浮点计算,除非某些特殊情况,例如需要用MMX/XMM的工作。
(6)已知的内核浮点计算用户是RAID校验码的MMX计算。