`
cloudtech
  • 浏览: 4611325 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

Linux内核模拟浮点运算

 
阅读更多

最近在阅读Linux内核的龙芯改进版时,发现内核中有模拟浮点运算的模块,略作记录。

在arch/mips/math-emu/目录,内核用整数运算对浮点运算进行了模拟实现。这是为什么?


原来,很多嵌入式芯片是没有浮点运算的。这又是为什么?浮点运算的功耗和成本是很大的,对于嵌入式芯片,这有时值得通过牺牲效率节约成本。

但是,这些运算在内核中实现,普通应用程序如何使用?用户进程用到浮点运算时,首先编译成浮点运算指令,但是芯片没有这些指令,于是产生异常,异常的处理函数入口即为上述模块的入口(这是在内核初始化时设置的)。

于是,用户态转移到内核态进行模拟运算,将结果返回。但是,到这里,都注意到了一个问题:这个效率高吗?

的确,这个效率比较低,原因有二:

每进行一次浮点运算,需要产生一个异常,在用户态与内核态切换;

内核模拟浮点运算是通过整形实现的,而且,对不同指令逐个进行case比较,这个效率也是相对一般的指令很低的。

由于以上问题,据称,有的采用软模拟,即以库的形式进行链接。使用交叉编译,给定正确参数,正如数学库-lm这样编译,这样免去了上述的异常切换。本人未曾涉猎,不作过多猜测。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics