Chinaunix首页 | 论坛 | 博客
  • 博客访问: 509935
  • 博文数量: 35
  • 博客积分: 3472
  • 博客等级: 中校
  • 技术积分: 935
  • 用 户 组: 普通用户
  • 注册时间: 2007-08-04 06:54
文章分类
文章存档

2014年(4)

2013年(2)

2011年(3)

2010年(9)

2009年(9)

2008年(8)

分类: LINUX

2010-06-09 11:33:40


目前大多数主流CPU都支持浮点运算单元,或者具备浮点运算功能的辅助运算单元,比如PowerPC e500的SPE APU。在这样的机器上,浮点操作一般被编译成硬浮点指令,但是有的时候为了调试方便,或者由于fpu工作不正常而需要关闭硬浮点,就需要使用软浮点指令来模拟浮点操作。

在Linux下,一般有两种软浮点方式:
1。由kernel来模拟软浮点,应用程序仍然使用硬浮点来编译。在运行的时候,碰到浮点指令或者使用了浮点运算单元的CPU,硬件会产生相应的中断异常,kernel处理这个中断异常,然后根据指令内容进行软浮点操作,将结果保存好之后再恢复原来的执行。

这样的方式好处在于应用程序不需要重新编译,只需要在kernel中把浮点模拟的开关打开即可,所以使用起来非常方便。但是缺点也很明显,每次浮点操作都要触发中断异常,执行过程就要慢很多。另外在有些CPU上,并非所有的浮点指令都会触发中断异常,那么这些指令就没办法用这种方式进行模拟。

2。另一种方式是使用软浮点重新编译所有应用程序,这样可以避免上述问题,而且使用gcc的浮点模拟性能上也会好一些。但缺点是因为使用了不同的编译选项,使用的ABI可能就发生了变化,如果某个库或者应用没有使用同样的编译选项(ABI不同),系统运行时会出现意想不到的情况,甚至造成崩溃。
阅读(4427) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~