浅谈linux kernel对于浮点运算的支持
作者:kerneler_ 发布时间:2023-08-05 04:52:30
目前大多数CPU都支持浮点运算单元FPU,FPU作为一个单独的协处理器放置在处理器核外,但是对于嵌入式处理器,浮点运算本来就少用,有些嵌入式处理器就会去掉浮点协处理器。
X86处理器一般都是有FPU的。而ARM PPC MIPS处理器就会出现没有FPU的现象。
linux kernel如何处理浮点运算,我们就分为带FPU的处理器和不带FPU的处理器来讨论。
(以下为个人知识总结,研究不深,错误之处希望大家指正,共同学习)
一 对于带FPU的处理器
1 对于linux kernel来说,kernel本身编译默认使用了-msoft-float选项,默认编译为软浮点程序,软浮点含义是有gcc编译器模拟浮点运算(glibc库提供),将浮点运算代码替换为定点运算。
对于带FPU的处理器,我们可以将编译选项-msoft-float去掉,一般是在arch/xxx/Makefile中。将kernel编译为硬浮点,也就是让处理器的浮点指令计算浮点,
硬浮点运算肯定要比模拟的定点运算效率高。(kernel代码中一般不会有浮点运算,所以效率影响不大)
2 对于运行在kernel上的app来说,特别是对于图形程序,如QT,浮点运算较多,我们直接编译即可,因为处理器支持浮点运算,支持浮点运算指令。
二 对于不带FPU处理器
1 对于linux kernel来说,编译默认使用了-msoft-float选项,默认编译为软浮点程序,linux kernel编译不依赖链接任何库,kernel中来实现对应的模拟浮点ABI。
2 对于运行在kernel之上的app来说,如何处理浮点运算,这里就有2种方法了:
(1)由kernel来模拟软浮点.
应用程序使用硬浮点直接编译(编译器默认就是编译成硬浮点程序)。
而对于kernel,我所了解的PPC MIPS处理器都有专门的浮点运算异常处理,程序运行碰到浮点指令,无法运行浮点指令时,硬件会产生相应的中断异常,kernel浮点异常处理程序根据指令内容进行软浮点模拟操作,将运算结果返回之后再恢复到用户空间执行。
对于ARM我在其异常介绍中没有找到对于浮点计算的异常入口,但是kernel中也有对于其软浮点的支持,
在配置ARM Linux内核时,应该都会看到这样的配置:
menu "Floating point emulation"
comment "At least one emulation must be selected"
config FPE_NWFPE
...
这个是用来配置在内核里面模拟浮点处理器。
具体ARM如何实现支持异常模拟软浮点,具体实现有时间还需要仔细看代码,在arch/arm/nwfpe中。
这样的方式好处在于应用程序不需要重新编译,需要在kernel中把浮点模拟打开即可,使用起来非常方便。
但是缺点也很明显,每次浮点操作都要触发中断异常,用户空间和内核空间切换,执行效率太低。
(2)使用软浮点重新编译app
这样可以避免上述问题,app编译时需要连接glibc库的,使用--msoft-float,使用glibc的模拟浮点,替换为定点运算,这样的好处是运行性能上会好一些。
但缺点是因为使用了不同的编译选项,使用的ABI可能就发生了变化,如果某个库或者应用没有使用同样的编译选项(ABI不同),
系统运行时会出现意想不到的情况,甚至造成崩溃。
根据最近对PPC一款处理器的调试记录,kernel正常启动进入console后死在某一地址,用户空间浮点运算多,询问IC后得知FPU去掉,而处理器浮点异常没有使能。
这样遇到浮点指令,处理器不会触发异常,也不知道该如何运行该指令。
所以进行kernel移植时对于处理器有无FPU也要搞清楚,如果处理器去掉了FPU,而核没有做相应的处理(使能浮点异常),那么APP的浮点指令运行结果就是无法预测的,这时可以采用软浮点工具链来编译APP。
这里有一点思考:
对于一款处理器,处理器设计中有浮点异常(MIPS PPC都是),其外也可以接FPU。
在接FPU后,处理器核内就要屏蔽掉浮点异常,不然浮点运算还是产生浮点异常,FPU就没有实用意义了。
无FPU,则处理器核内要使能浮点异常,不然就跟我上面遇到的问题一样,处理器不知道该如何运行该浮点指令,结果就无法预测了。
来源:https://blog.csdn.net/skyflying2012/article/details/45113193


猜你喜欢
- 下面的每一条戒律都将有效地影响代码的性能和可伸缩性。换句话说,尽可能不要照着戒律去做!下面,我将解释如何破坏他们以便提高性能和可伸缩性。1、
- 因为对属性了解不多,所以给出我一上午自己琢磨出来的方法。这个方法主要是适合运用在XP系统下无法安装IIS来进行配置ASP环境和不会安装Apa
- 一、修改密码1、修改普通用户密码passwd先输入当前密码确认,然后输入新的密码修改2、修改root用户密码sudo passwd root
- 博客(Blog)、维基(Wiki)、播客(Podcast)、RSS阅读改变了人们对传统门户网站的依赖,那么从Gmail开始,人们将改变传统电
- iptables 是 Linux 管理员用来设置 IPv4 数据包过滤条件和 NAT 的命令行工具。iptables 工具运行在用户态,主要
- 1.配置.htaccess 自定义错误页 我要介绍的.htaccess的第一个应用是自定义错误页面,这将使你可以拥有自
- 我在《Perl、PHP、ASP、JSP技术比较》一文中曾经对四种流行的网站设计语言进行了评测和对比,常言道鱼与熊掌皆我所欲,两者不可兼得,那
- 01、明确内容如果你想成为一个网站设计者,并正想建一个网站的话,首先应该考虑网站的内容,包括网站功能和你的用户需要什么。你的整个设计都应该围
- CNET科技资讯网 3月3日 北京报道(文/张丹):雅虎全球与微软的联姻获批,使得搜索市场谷歌一家独大的不利市场局面获得转机。然而雅虎这家拥
- 网站备案是建立网站的当务之急。在各大论坛、QQ群都有人声称快速备案什么之类的。收费基本上载5RMB到20RMB不等。当然,如果你不会备案,出
- 导航请确保你的网站导航都是以html的形式链接。所有页面之间应该有广泛的互联,如果无法实现这一点,可以考虑建立一个网站地图。首页网站的首页(
- Godaddy主机用户如果想在服务器上恢复干净设置,可以重置服务器。重置会擦除服务器的硬盘驱动上的所有内容。服务器恢复到购买它时的状态。可以
- 需求是:某测试站点,在某个节点的时候需要同步到正式站点去,但是里面的config目录不能覆盖, 方法一:终端命令行下执行以下命令 cp -R
- 有必要给热心站长讲解发布文章的基本办法,以提高收录命中率,获得宝贵的初始流量。 提高引擎有效收录,其中最
- 当前SEO(搜索引擎优化 – Search Engine Optimization)的理念逐渐被国内网站所接受,SEO行
- 概要当用户试图通过 HTTP 或文件传输协议 (FTP) 访问一台正在运行 Internet 信息服务 (IIS) 的服务器上的内容时,II
- 如果要问做什么事是最有吸引力,那就是创建Web应用。毕竟,上次你听到有人称赞某产品的交互设计是什么时候的事了?(除了iPod之外) 它们都很
- centos官网地址https://www.centos.org/首先下载好自己需要的文件开始安装安装过程比较多,很多都是直接点击下一步即可
- 对于绝大部份的网站来说,一个合理点击率就只在乎0.1-1%,我跟其他水帖不同,他们所说的是去优化你的广告位置,从而增加更多的点击。但对于我的
- 6. 修改 advanced.acl.population 以设定管理者帐号# cd /usr/local/twig-2.7.5/setup