是否有任何架构使用相同的寄存器空间来进行标量整数和浮点运算?

2024-01-21

我见过的大多数支持本机标量硬件 FP 支持的架构将它们推入完全独立的寄存器空间,与主寄​​存器集分开。

我见过的大多数支持本机标量硬件 FP 支持的架构将它们推入完全独立的寄存器空间,与主寄​​存器集分开。

  • X86 的传统 x87 FPU 使用带有寄存器的部分独立浮点“堆栈机”(读作:基本上是固定大小的 8 项环形缓冲区)st(0)通过st(7)为每个项目建立索引。这可能是最不同的流行的。它只能通过加载/存储到内存或通过将比较结果发送到 EFLAGS 来与其他寄存器交互。 (286)fnstsw ax http://felixcloutier.com/x86/FSTSW:FNSTSW.html和 i686fcomi http://felixcloutier.com/x86/FCOMI:FCOMIP:FUCOMI:FUCOMIP.html).
  • 支持 FPU 的 ARM 有一个独立的 FP 寄存器空间,其工作方式与其整数空间类似。主要区别是专门用于浮点的单独指令集,但即使是习惯用法也大多一致。
  • MIPS 介于两者之间浮点 https://www.doc.ic.ac.uk/lab/secondyear/spim/node20.html从技术上讲,是通过协处理器(至少明显地)完成的,并且它的使用规则略有不同(例如使用两个浮点寄存器而不是单个扩展寄存器进行双精度运算),但它们的工作方式与 ARM 非常相似。
  • X86 较新的 SSE 标量指令的操作方式与其矢量指令类似,使用类似的助记符和习惯用法。它可以自由地加载和存储到标准寄存器和内存,并且您可以使用 64 位内存引用作为许多标量操作的操作数,例如addsd xmm1, m64 https://www.felixcloutier.com/x86/ADDSD.html or subsd xmm1, m64 https://www.felixcloutier.com/x86/SUBSD.html,但您只能通过以下方式从寄存器加载和存储到寄存器movq xmm1, r/m64, movq r/m64, xmm1, 和朋友 https://www.felixcloutier.com/x86/MOVD:MOVQ.html。这与 ARM64 NEON 类似,尽管它与 ARM 的标准标量指令集略有不同。

相反,许多矢量化指令甚至不关心这种区别,只是区分标量和矢量。对于 x86、ARM 和 MIPS 这三个:

  • 它们将标量和向量寄存器空间分开。
  • 它们重用相同的寄存器空间进行矢量化整数和浮点运算。
  • 他们仍然可以访问适用的整数堆栈。
  • 标量操作只是从相关的寄存器空间(或者 x86 FP 常量的情况下的内存)中提取它们的标量。

但我想知道:是否有任何 CPU 架构可以重用相同的寄存器空间进行整数和浮点运算?

如果不是(由于兼容性之外的原因),什么会阻止硬件设计人员选择走这条路?


Motorola 88100 有一个用于浮点和整数值的寄存器文件(三十一个 32 位条目加上一个硬连线零寄存器)。对于 32 位寄存器和对双精度的支持,必须使用寄存器对来提供值,这极大地限制了寄存器中可以保存的双精度值的数量。

后续的 88110 添加了 32 个 80 位扩展寄存器,用于附加(和更大)浮点值。

参与 Motorola 88k 开发的 Mitch Alsup 开发了自己的加载存储 ISA(至少部分出于教学原因),如果我没记错的话,它使用统一的寄存器文件。

还应该注意的是,Power ISA(PowerPC 的后代)定义了“嵌入式浮点设施”,它使用 GPR 来表示浮点值。这降低了核心实现成本和上下文切换开销。

单独的寄存器文件的一个好处是,这样可以提供显式存储,以减少简单的有限超标量设计中的寄存器端口数量(例如,为每个文件提供三个读取端口将允许所有对一个 FP,甚至三源操作数 FMADD,以及与使用单个寄存器文件的五个读取端口来支持 FMADD 和另外一个双源操作相比,并行启动一个基于 GPR 的操作以及许多常见的基于 GPR 的操作对。另一个因素是容量是额外的并且宽度独立;这既有优点也有缺点。此外,通过将存储与操作耦合,可以以更直接的方式实现高度独特的协处理器。考虑到芯片尺寸的限制,这对于早期微处理器来说更为重要,但 UltraSPARC T1 共享一个具有八个内核的浮点单元,而 AMD 的 Bulldozer 共享一个具有两个整数“内核”的 FP/SIMD 单元。

统一的寄存器文件具有一些调用约定的优点;无论值的类型如何,都可以在同一寄存器中传递值。统一的寄存器文件还允许所有寄存器用于所有操作,从而减少不可用的资源。

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

是否有任何架构使用相同的寄存器空间来进行标量整数和浮点运算? 的相关文章

  • 在 Objective C 中格式化浮点数

    我需要将浮点数 吸引人的标题 他 格式化为小数点后两位 但前提是这些小数位的值不为零 例子 我有一个名为 answer 的 NSTextField 在使用几个浮点进行一些数学运算后 我想将 answerFloat 变量分配给 answer
  • Python,在输出中将所有浮点数打印到小数点后两位

    我需要输出 4 个不同的浮点数到小数点后两位 这就是我所拥有的 print 2f var1 kg 2f var2 lb 2f var3 gal 2f var4 l 这是非常不干净的 而且看起来很糟糕 有没有办法让输出 2f 中出现任何浮动
  • c中的double和float可以存储多大的数字?

    我试图弄清楚我可以使用多大的数字作为浮点数double 但除了整数值之外 它并没有按照我预期的方式存储 double应该保存 8 个字节的信息 足以保存变量 a 但它保存得不正确 表明1234567890123456768其中最后 2 位数
  • 是否可以在不诉诸任意精度数据类型的情况下消除浮点错误?

    我想知道在特定条件下是否可以在不诉诸任意精度数据类型的情况下消除浮点错误 问题是常见的 语言是 Ruby 但它适用于任何语言 f 1829 82 gt 1829 82 f 12 0 gt 152 485 f 12 0 round 2 gt
  • 将浮点数转换为美元和美分

    首先 我已经尝试过这篇文章 除其他外 Python 中的货币格式 https stackoverflow com questions 320929 currency formatting in python 它对我的变量没有影响 我最好的猜
  • CPU寄存器和CPU缓存有什么不同吗? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 CPU寄存器和CPU缓存有什么不同吗 是的 CPU寄存器只是少量的数据存储 方便CPU的一些操作 CPU缓存 它是一种高速易失性存储器 尺寸较大 有助
  • C语言中如何将负零转换为正零?

    你好 我正在学习 Objective C 我正在做经典的计算器示例 问题是 当我将零乘以任何负数时 我得到负零 并将结果放入 双 类型 为了看看发生了什么 我使用了调试器 这就是我得到的结果 gdb 打印 2 0 1 0 gdb 打印 双精
  • 为什么在浮点文字末尾添加 0 会改变它的舍入方式(可能是 GCC bug)?

    我在我的 x86 VM 32 位 上发现以下程序 include
  • x86 汇编中 cmove 指令的用途?

    反汇编可执行文件时我遇到了cmove操作说明 我已经在互联网上搜索过 但我只发现这是一个有条件的移动 如果源和目的地相等mov发生 我还不明白为什么我需要它 因为它不会改变操作数 它的目的是什么 The CMOVcc指令不比较源和目标 它们
  • 为什么 C 给我的答案与我的计算器不同?

    我在这段代码中遇到了一个奇怪的问题 legibIndex 206 385 84 6 countSylb countWord 1 015 countWord countSent 这是给定文本文件的易读性指数的计算 由于这是一项家庭作业 我们被
  • 浮点计算根据编译器的不同而变化

    当我运行在 Windows 和 Solaris 上编译的完全相同的代码执行完全相同的浮点计算 使用双精度 时 我得到的结果略有不同 我知道由于舍入误差 结果并不准确 然而 我本以为舍入误差是与平台无关的 从而在两个平台上给出相同的 稍微不正
  • 尝试在整数后添加字符然后打印结果时出现奇怪的结果

    我正在尝试创建一个简单的欧姆定律计算器 所以我们的想法是你可以填写两个变量 然后它会计算第三个变量 当我创建这个程序时 我发现了一个小问题 我不明白它是如何发生的 不幸的是我无法找到答案 我尝试打印一个显示完整计算的字符串 用户填写的两个变
  • 对浮点数求反总是安全的吗

    考虑 double f foo double g f where foo 可以返回分配给的任何内容f is double g f 在 C 和 C 中安全吗 对于 IEEE 754 类型 显然是这样 但 C 和 C 并不限制浮点实现 与 Ja
  • 在php中将指数数转换为小数

    我有一个指数格式的浮点数 即4 1595246940817E 17我想将其转换为十进制数 例如 2 99 等 任何帮助将不胜感激 format number sprintf 似乎不适合我 你需要像 BC 这样更好的数学扩展数学 GMP ht
  • Python:计算非整数的阶乘

    我想知道是否有一种快速的 Pythonic 的方法来计算非整数的阶乘 例如 3 4 当然 内置的factorial 函数在Math模块可用 但它仅适用于积分 我不关心这里的负数 你想用math gamma x http docs pytho
  • 如何使Python中的浮点值显示.00而不是.0?

    简单的问题 抱歉我无法弄清楚 我有一些数字是由 浮动 字符串 它们显示为 xxx 0 但如果确实是整数 我希望它们以 00 结尾 我该怎么做 Thanks EDIT Python 说 float 没有 cal format gt gt gt
  • Java 双epsilon

    我目前需要一个epsilon http en wikipedia org wiki Machine epsilon类型的double 首选 java 库中的常量 而不是自己的实现 定义 据我所知Double has MIN VALUE an
  • JavaScript 中的整数

    MDN https developer mozilla org en JavaScript A re introduction to JavaScript Numbers states JavaScript 中的数字是 双精度 64 位格式
  • 为什么x86分页没有特权环的概念?

    早在 1982 年 当 Intel 发布 80286 时 他们在分段方案中添加了 4 个特权级别 环 0 3 由全局描述符表 GDT 和局部描述符表 LDT 中的 2 位指定 在 80386 处理器中 Intel 添加了分页功能 但令人惊讶
  • 二进制浮点加法算法

    我试图理解二进制级别的 IEEE 754 浮点加法 我遵循了一些在网上找到的示例算法 并且大量测试用例与经过验证的软件实现相匹配 我的算法目前只处理正数 但是 我没有得到与此测试用例的匹配 0000100011110011011001001

随机推荐

  • getline() 函数在这里如何工作?

    不明白功能如何getline在这里工作 为什么换行符被排除在 for 循环之外以及为什么要在单独的块中测试换行符是否存在 include
  • 如何正确使用 LogonUser 从工作组客户端模拟域用户

    ASP NET 模拟 VMWare 上的域 https stackoverflow com questions 278132 asp net impersonate against a domain on vmware 这个问题就是我要问的
  • 创建线程之前的 Pthread 亲和性

    在创建线程之前 我需要设置亲和力 线程到核心 例如 第一个线程到第一个核心 就像是KMP AFFINITY in OpenMP 是否可以 编辑 我以这种方式尝试 但不起作用 void DoWork void args int nr int
  • 如何在 JSDoc 中描述解构对象参数

    如果我有一个将对象作为参数的 JavaScript 函数 我可以使用 JSDoc 描述该对象的预期属性 如下所示 param bar param bar baz number param bar qux number function fo
  • 没有MMU的内存保护

    我想知道如何在没有 MMU 支持的情况下保护内存 我尝试用谷歌搜索它 但没有看到任何有价值的论文或研究 那些处理它的人只处理错误 例如未初始化的指针 而不是由于软错误而导致的内存损坏 即由于硬件瞬态故障损坏了写入内存位置的指令 我想知道这一
  • 如何在 Spring hibernate 项目中忽略 json jackson 中的 "handler": {}, "hibernateLazyInitializer": {} ?

    我将 fastxml json 与对象映射器一起使用 下面是我的代码 ObjectMapper mapper new ObjectMapper mapper configure SerializationFeature FAIL ON EM
  • 获取 ORA-01033: ORACLE 初始化或关闭正在进行中

    昨天我在笔记本电脑上安装了 Oracle 12c 企业版 当我尝试通过 SQLPLUS 连接到数据库时 出现以下错误 C Users USER gt sqlplus SQL Plus Release 12 1 0 2 0 Productio
  • 错误 1329:无数据 - 提取、选择或处理零行 - 即使所有操作均正确

    在下面 即使所有操作都正确完成 我也会收到 错误 1329 无数据 提取 选择或处理零行 我的其他功能可以正常工作 几天前这个功能也可以正常工作 BEGIN DECLARE Id INT 10 DEFAULT 0 DECLARE Elm I
  • 检查 X509 证书吊销

    是否可以检查任何 X509 证书是否被吊销 实际上 我制作了一个 Java 应用程序 它只获取常规 https 链接并输出 X509 证书 我想在我的应用程序中添加一项服务来检查该证书是否已被吊销 是否有教程或简单的代码可以指导我做到这一点
  • Python Eve - 使用 objectid 的 where 子句

    我在 settings py 中定义了以下资源 builds item title builds schema sources type list schema type objectid data relation resource so
  • 使用 jersey-spring3 从 JerseyTest 容器中检索托管 bean

    这个问题是上一个问题的后续问题指定自定义应用程序上下文 https stackoverflow com questions 18278769 specify custom application context 我们正在将一些数据服务从使用
  • 启动“com.twitter.android.PostActivity”时出错

    我向 Twitter 调用了共享文本的意图 在不更改代码的情况下 一天又一天 此调用已停止工作 意图是 Intent share new Intent Intent ACTION VIEW share setClassName com tw
  • Azure 中的 REST API 日志

    是否有办法查看通过 REST API 完成的所有请求 我希望能够监视客户端 ID 完成的 REST API 调用 我想了解调用了哪些特定 API 如果可能的话 每个调用的请求 响应是什么样的 只是将其发布在这里以帮助将来的问题发布者 这是您
  • 将类切换绑定到窗口滚动事件

    当用户将浏览器窗口滚动到某个点以下时 我将切换 page div 的类 到目前为止我所做的工作正常 http jsfiddle net eTTZj 29 http jsfiddle net eTTZj 29 div div
  • 插入/删除触发器表上的慢连接

    我们有一个触发器 可以为表创建审计记录并连接inserted and deleted表以查看是否有任何列已更改 连接对于小型集合一直运行良好 但现在我要更新大约 100 万行 并且几天之内就不会完成 我尝试更新具有不同数量级的选定行数 很明
  • Android - 未找到活动异常

    我正在使用 startActivity 调用另一个 Activity 但收到 Activity Not Found Exception 这是我的代码 TextView textView TextView itemClicked String
  • 我想在服务器上 24/7 运行 Python 脚本 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在制作一个模拟虚拟货币股票市场的程序 我还没有尝试过任何东西 但我想要一个Python脚本能够24
  • 数据库时区问题

    我在尝试与数据库 MySQL 建立连接时收到此错误 java sql SQLException 服务器时区值 CEST 无法识别或代表多个时区 如果要利用时区支持 则必须配置服务器或 JDBC 驱动程序 通过 serverTimezone
  • 为什么我的 Mac (OS X 10.7.3) 有旧版本 (2.3) 的 Gnu Bison?

    我的 mac 上的 GNU Bison 版本是 2 3 但我知道 Bison 2 5 很久以前就发布了 这本书弗莱克斯和野牛使用2 5版本 我应该自己升级到2 5吗 有必要吗 2 3和2 5有什么区别 我在 MacOSX 10 9 5 上遇
  • 是否有任何架构使用相同的寄存器空间来进行标量整数和浮点运算?

    我见过的大多数支持本机标量硬件 FP 支持的架构将它们推入完全独立的寄存器空间 与主寄 存器集分开 我见过的大多数支持本机标量硬件 FP 支持的架构将它们推入完全独立的寄存器空间 与主寄 存器集分开 X86 的传统 x87 FPU 使用带有