`
hilyhoo
  • 浏览: 13704 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Linux内核模拟浮点运算

阅读更多

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

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


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

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

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

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

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

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

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

分享到:
评论

相关推荐

    浅谈linux kernel对于浮点运算的支持

    对于带有FPU的处理器,如X86架构,Linux内核默认使用`-msoft-float`编译选项,这意味着内核编译为软浮点程序,即依赖于GCC编译器模拟浮点运算。然而,这并不意味着内核本身的性能受到影响,因为内核代码中通常较少...

    quad.rar_floating

    总结来说,"quad.rar_floating" 提供了一个用于Linux内核的浮点运算软件模拟驱动,它允许在无硬件浮点单元的系统上执行浮点计算。"quad.c" 是实现这个功能的核心源代码文件,版本2.13.6可能包含了一些优化和改进。...

    山东大学linux内核实验指导书和答案1

    - 浮点运算在内核中处理起来较为复杂,因为它涉及到额外的硬件支持和上下文切换,因此除非必要,通常避免在内核中使用浮点数。 - **容量小而且长度固定的内核栈** - 内核栈的大小是固定的,且通常比用户空间的栈...

    mips软浮点文档详细说明

    3. **浮点模拟**: 异常处理函数中包含的是用整数运算来模拟浮点运算的逻辑。具体实现上,该模块首先需要根据异常类型确定对应的浮点运算操作(例如加、减、乘、除等),然后通过一系列整数运算完成模拟。 4. **结果...

    sp_tint.rar_floating

    软件仿真,即通过软件模拟浮点运算,虽然效率较低,但在没有硬件FPU的处理器上是必要的。硬件加速则是利用处理器的浮点单元直接执行浮点指令,速度更快,但需要操作系统和编译器的支持。 `sp_tint.c`源代码可能包含...

    dp_add.rar_floating

    2. **软浮点库**:如果硬件没有集成FPU,驱动可能会依赖于软件模拟,如Glibc的软浮点库,通过整数运算模拟浮点运算。 3. **Linux内核接口**:驱动程序需要与Linux内核进行交互,这涉及到内核模块的加载、卸载、注册...

    emergency-restart.rar_floating

    浮点模拟器使得这些设备能够运行需要浮点运算的Linux应用,通过软件模拟浮点运算指令,尽管性能可能比硬件支持的浮点运算慢,但至少提供了兼容性。 在压缩包内的文件"emergency-restart.c"可能包含了用于紧急重启...

    ieee754d.rar_floating

    标题中的“ieee754d.rar_floating”表明这是一个与IEEE 754浮点数标准相关的文件,可能是一个源代码或文档,用于在Linux内核版本2.13.6中实现对浮点运算的支持。描述中提到的"MIPS floating point support"进一步...

    op-common.rar_floating

    总之,"op-common.rar_floating"提供的软件浮点模拟代码是为Linux内核提供在没有硬件浮点支持情况下的浮点运算能力,这对于老式或低成本的处理器尤为关键。开发者通过分析和利用这些代码,可以为那些不支持浮点运算...

    ieee754m.rar_floating

    描述中提到的“MIPS floating point support Kernel Device Driver for linux v2.13.6”揭示了这个压缩包包含的是一个Linux内核设备驱动程序,版本为2.13.6,专门用于在MIPS平台上提供浮点运算支持。内核设备驱动是...

    clk11c.pdf linux 0.11内核学习手册

    - **math-emulation.c**:数学协处理器仿真程序,用于在没有专用硬件支持的情况下实现浮点运算。 #### 9. 文件系统 - **fs/**:这一章涵盖了文件系统的实现,包括文件系统的挂载、卸载、访问控制等功能,是理解...

    hppa.rar_floating

    2. **状态管理**:模拟浮点寄存器和状态标志,确保浮点运算的正确性和一致性。 3. **异常处理**:处理浮点运算中可能出现的异常,如除零错误、溢出、下溢、无效操作等。 4. **精度控制**:浮点运算的精度可能受到...

    CPU Bug与Linux Kernel

    本文将探讨几种在x86架构下的CPU bug,并介绍Linux内核是如何处理这些问题的。 #### FDIV Bug — Intel奔腾处理器浮点除法的bug 在1994年,Intel的奔腾处理器被发现存在一个浮点运算除法错误,即所谓的“FDIV Bug...

    ARM linux的有关电子文档。有ARM的入门笔记,arm的调试过程,

    - ARM 指令集:了解 ARM 架构的基础指令集,包括数据处理、加载/存储、分支和浮点运算指令等。 - CPU 模式:ARM 处理器有多种运行模式,如用户模式、系统模式、中断模式等,理解这些模式在 Linux 下的作用。 2. *...

    linux汇编教程(英)

    这部分内容介绍了x86处理器中的浮点运算单元(FPU),以及如何使用汇编指令进行浮点运算。 ##### 7. 系统调用 系统调用是应用程序与操作系统交互的主要手段,它提供了访问底层硬件和系统服务的功能。这部分内容将...

    MIPS跑LINUX-MIPS体系结构剖析

    8. MIPS应用开发:了解MIPS架构有助于编写更高效的应用程序,因为开发者需要考虑指令集的特性,如向量扩展、浮点运算等,并利用内核提供的API进行系统调用。 通过《MIPS跑LINUX——MIPS体系结构剖析》这份资料,...

    ieee754.rar_Linux/Unix编程_Unix_Linux_

    在描述中提到的“MIPS floating point support for Linux v2.13.6.”,意味着这个压缩包可能包含了针对MIPS架构(一种常见的处理器架构)的Linux内核版本2.13.6的浮点运算支持代码。MIPS架构常用于嵌入式系统和...

    嵌入式设计及linux驱动开发指南——基于ARM9处理器.pdf

    6.5.9 和浮点运算相关的选项 6.5.10 用户空间使用的二进制文件格式的选项 6.5.11 和电源管理相关的选项 6.5.12 和网络协议相关的选项 6.5.13 和设备驱动程序相关的选项 6.5.14 和文件系统相关的选项 6.5.15 和...

Global site tag (gtag.js) - Google Analytics