FPU 与软件仿真的性能比较

2023-11-25

虽然我知道(所以我被告知)浮点协处理器的工作速度比任何浮点算术的软件实现都快,但我完全不知道这种差异有多大(以数量级而言)。

答案可能取决于微处理器和超级计算机之间的应用程序以及您的工作地点。我对计算机模拟特别感兴趣。

你能指出这个问题的文章或论文吗?


一般性的答案显然会非常模糊,因为性能取决于很多因素。

然而,根据我的理解,在不在硬件中实现浮点(FP)运算的处理器中,软件实现通常是慢10到100倍(或者更糟糕的是,如果实现很糟糕)比整数运算总是在 CPU 上的硬件中实现。

确切的性能取决于许多因素,例如整数硬件的功能 - 某些 CPU 缺少 FPU,但其整数运算中具有有助于实现 FP 计算的快速软件模拟的功能。

njuffa提到的论文,Cristina Iordache 和 Ping Tak Peter Tang,英特尔 XScale 架构上的浮点支持和数学库概述支持这一点。对于英特尔XScale将列表处理为延迟(摘录):

integer addition or subtraction:  1 cycle
integer multiplication:           2-6 cycles
fp addition (emulated):           34 cycles
fp multiplication (emulated):     35 cycles

因此,这会导致整数和 FP 算术之间存在约 10-30 的系数。该论文还提到,GNU 实现(GNU 编译器默认使用的实现)大约慢 10 倍,总系数为 100-300。

最后,请注意,以上是针对 FP 仿真的情况编译到程序中由编译器。一些操作系统(例如 Linux 和 WindowsCE)也有 FP 模拟在操作系统内核中。优点是,即使没有 FP 模拟(即使用 FPU 指令)编译的代码也可以在没有 FPU 的进程上运行 - 内核将透明地模拟软件中不支持的 FPU 指令。然而,由于额外的开销,这种仿真比编译到程序中的软件仿真还要慢(大约是另一个因素 10)。显然,这种情况仅与处理器架构相关,其中一些处理器具有 FPU,而另一些则没有(例如 x86 和 ARM)。

Note:该答案将(模拟)FP 运算与同一处理器上的整数运算的性能进行了比较。您的问题也可能被理解为关于性能 (模拟) FP 操作与硬件 FP 操作相比(不确定您的意思)。然而,结果大致相同,因为如果 FP 在硬件中实现,它通常(几乎)与整数运算一样快。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FPU 与软件仿真的性能比较 的相关文章

随机推荐

  • ASP.net MVC 4(Web api)OData 配置

    一直在玩 单页应用程序 BigShelf样本 我发现真正有趣的是 GetBooksForSearch 方法 api BigShelf GetBooksForSearch 它需要额外的 filter inlinecount top skip寻
  • 在服务器端 Blazor 中,如何取消页面或组件长时间运行的后台任务?

    假设我有一个长时间运行的任务 该任务已初始化并从派生自 Microsoft AspNetCore Components ComponentBase 的页面类的 OnInitializedAsync 方法启动 我用它来收集数据 它会不时更新
  • 在Python中设置时区

    Python 是否可以像 PHP 中那样设置时区 date default timezone set Europe London Year date y Month date m Day date d Hour date H Minute
  • 使用触发器更改插入的值

    我几周前才开始学习 SQL 我正在尝试制作一个触发器 如果 插入的值小于 10 则将其更改为 10 我现在搜索了 4h 找到了很多答案 但没有很好 对我来说 我实在不明白问题出在哪里 这是代码 CREATE OR REPLACE TRIGG
  • 在 C 中初始化以 NULL 结尾的字符串数组的正确方法

    这段代码正确吗 char argv foo bar NULL 它在语法上是正确的 并且它确实创建了一个以 NULL 结尾的字符串数组 argv 被传递给main as char 或同等地 char 但将字符串文字视为 更正确 const c
  • Android Studio 添加库通用图像加载器失败

    Android 通用图像加载器 https github com nostra13 Android Universal Image Loader 是我最喜欢的图书馆 但是当我使用Android Studio 使用0 1 5版本 时它无法添加
  • Django 目录结构?

    我想实现一个特定于项目的简单排队服务 代码应该放在 Django 目录结构中的哪个位置 目前的结构是 sound init py models py tests py views py static 编辑 我问将我在上面的目录结构中创建的队
  • myVar = !!someOtherVar [重复]

    这个问题在这里已经有答案了 我可以澄清为什么我想使用它吗 myVar someOtherVar 在非严格类型语言中 运算符将值转换为布尔值 做两次就相当于说 myVar boolean someOtherVar 请注意 为了代码清晰 不建议
  • 如何计算列表项的出现次数?

    给定一个项目 如何在 Python 中计算它在列表中的出现次数 A related but different problem is counting occurrences of each different element in a c
  • 错误:nodejs 中的 getaddrinfo ENOTFOUND 用于 get 调用

    我正在节点上运行一个 Web 服务器 其代码如下 var restify require restify var server restify createServer var quotes author Audrey Hepburn te
  • 在每个应用程序中的对象使用后为其分配“null”

    你总是分配null达到其范围后的对象 或者依赖 JVM 进行垃圾收集 您是否对所有类型的应用程序都执行此操作 无论其长度如何 如果是这样 这总是一个好的做法吗 除非有非常具体的原因 否则没有必要将对象显式标记为 null 此外 我从未见过一
  • 从 C# 客户端在 Solr 中索引 pdf 文档

    基本上我试图在 Solr 中索引 word 或 pdf 文档并找到 ExtractingRequestHandler 但无法弄清楚如何在 c 中编写执行 HTTP POST 请求的代码 如 Solr wiki 中所示 http wiki a
  • C 中最快的解交错操作?

    我有一个指向字节数组的指针mixed包含两个不同数组的交错字节array1 and array2 Say mixed看起来像这样 a1b2c3d4 我需要做的是对字节进行去交错 这样我就得到了array1 abcd and array2 1
  • Android 开发:Keytool,创建密钥库?

    我正在尝试为谷歌市场准备我的应用程序 但事实证明它比预期更具挑战性 我似乎无法掌握签署应用程序的整个概念 但更具体地说 我的问题是我已经安装了 Eclipse 的 keytool 插件 但是当我想创建一个证书时 它要求我选择一个密钥库 输入
  • 如何在 OpenCV 中裁剪 CvMat?

    我有一个图像转换为CvMat矩阵说CVMat source 一旦我得到一个感兴趣的区域source我希望算法的其余部分仅应用于该感兴趣的区域 为此 我想我将不得不以某种方式裁剪source我无法这样做的矩阵 有没有一种方法或函数可以裁剪Cv
  • C 中的参数传递 - 指针、地址、别名

    有人可以解释一下参数传递之间的区别吗C请 根据教授的笔记 有 4 种不同的方式来传递参数 按值调用 按地址调用 指针 按别名呼叫 全局变量 静态变量 如果您能举个例子 我将不胜感激 并且您的工作将受到赞扬 按值调用 将值作为参数传递给函数
  • jquery .stop() 不工作

    我正在尝试构建一个菜单 其中默认情况下仅显示第一个项目 当您将鼠标悬停在其上时 其余项目会滑出 并在鼠标离开时再次隐藏 它大部分工作正常 但如果鼠标在完成滑出之前退出 则不会调用隐藏函数 我想stop 本来应该解决这个问题 但似乎没有任何影
  • Python 中内置类型的自定义比较函数

    我正在使用 Python 的内置集合来保存我定义的类的对象 对于这个类 我定义了 eq ne and hash 这样我就可以通过自定义比较函数来比较对象 这很好用 直到我发现我确实需要two比较函数集 这些函数将在我的代码中的不同时间以不同
  • 如何在 jQuery.each 函数的每个循环之间设置延迟?

    我有这样的代码 li each function var data this text requestFunction data function status if status OK do stuff 所以 我需要在使用函数 reque
  • FPU 与软件仿真的性能比较

    虽然我知道 所以我被告知 浮点协处理器的工作速度比任何浮点算术的软件实现都快 但我完全不知道这种差异有多大 以数量级而言 答案可能取决于微处理器和超级计算机之间的应用程序以及您的工作地点 我对计算机模拟特别感兴趣 你能指出这个问题的文章或论