首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有CPU架构使用元数据吗?

有CPU架构使用元数据吗?
EN

Stack Overflow用户
提问于 2020-05-09 19:45:15
回答 2查看 210关注 0票数 5

最近,我一直在研究一个称为磨坊的CPU体系结构的概念。

磨坊(虽然可能是蒸气软件) 使用元数据用于CPU中的各种东西,例如软件推测负载产生标记为非结果的值(NaR)。如果以后的指令试图非投机性地存储该结果,硬件就会检测到这一点和错误。

我想知道在架构中使用元数据时,其他CPU是否类似。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-09 21:02:30

我所知道的几个随机例子,当然不是详尽无遗的清单。如果有谁使用元数据来处理磨坊所做的所有事情的话,那就去看看吧。“磨坊”所做的一些工作是独一无二的,但有些想法在其他“国际审计准则”中以类似的形式出现。

是的,IA-64 Itanium也有not-a-thing加载结果,如果你读它们的话会出错,因为和磨坊一样的软件推测的原因。它的建筑师把它描述为史诗般的ISA。(EPIC =显式并行指令计算,而不是CISC或RISC。(这也是一个VLIW.) 从维基百科

该体系结构实现了大量寄存器:

  • 128个通用整数寄存器,它是64位加一个陷阱位("NaT",表示"not one thing"),用于投机性执行。其中32是静态的,其余的96是使用可变大小的寄存器窗口堆叠的,或者是用于流水线循环的旋转。gr0总是读取0。
  • 128个浮点寄存器。浮点寄存器长82位,以保持中间结果的精度。不同于像整数寄存器那样的专用"NaT“陷阱位,浮点寄存器有一个名为"NaTVal”(“非事物值”)的陷阱值,类似于(但不同于) NaN。它们还有32个静态寄存器和96个窗口或旋转寄存器。fr0总是读取+0.0,而fr1总是读取+1.0。

因此,对于整数,确实存在独立的元数据。对于FP,元数据是在带内编码的.

其他与软件可见猜测无关的元数据示例包括:

x87 FPU有8个体系结构寄存器,但普通指令以寄存器堆栈的形式访问它们,其中st(0)的底层寄存器由x87状态字中的一个字段确定。(也就是说,元数据在体系结构上是可见的,可以用fincstp修改以旋转“左轮手枪桶”。)有关良好的图表和x87设计的介绍,请参见x87。另外,x87对每个寄存器都有一个免费/正在使用的标志;试图将其加载到已在使用的寄存器中会产生一个FP异常(如果隐藏了异常,则会产生一个NaN )。通常,正在使用的标志是通过“弹出”注册堆栈( fstp )来清除的,以便存储和弹出,或者其他什么,但是也有ffree将任何x87寄存器标记为空闲。

微观结构(仅影响性能):

显然,一个微体系结构必须保存大量关于正在运行的指令的信息,比如它们是否已经完成执行。但至少有一个关于数据的元数据(而不是代码)的有趣例子:

在AMD Bulldozer家族和Bobcat/Jaguar中,SIMD FPU显然在实际架构注册值的同时保留了一些额外的元数据。正如阿格纳·福格在他的微结构PDF中所解释的那样(Bulldozer系列) 19.11不同执行域之间的数据延迟()

如果将浮点计算的输出输入到具有不同精度的浮点计算,例如,如果双精度浮点加法的输出输入到单个精度加法,则会造成很大的惩罚。这几乎没有任何实际意义,因为这样的序列很可能是编程错误,但它表明处理器在XMM寄存器中存储有关浮点数的额外信息,超过128位。在英特尔处理器上没有看到这种效果。

这可能与以下事实有关:当从FMA单元指令转发到另一个FMA指令时,Bulldozer的FP延迟1周期更低,比如mulps转发到addps,其间没有sqrtpsxorps

此外,在L1 i-缓存中,各种AMD都标记了指令边界,从而减少了反复解码的延迟。英特尔西尔佛蒙特也是这么做的。

票数 5
EN

Stack Overflow用户

发布于 2020-05-11 16:37:00

有许多标记的体系结构,大多数主要是研究项目。有些有最小的标记,例如Tera,它支持每64位字额外四个位--“完全/空”位、“间接”位和两个“陷阱”位。“完整/空”位是最重要的,它允许比缓存系统中更高效的生产者-消费者事务。

我所见过的最先进的标记架构仍在开发中。它最初是由BAE系统在DARPA资助下开发的,在“坠机安全”项目下有许多重要和有趣的发展/论文:

这是一种“标记丰富”的方法,每64个数据位有64个标记位,如果需要的话,可以使用64个标记位作为指向任意大标记结构的指针。该方法为“数据”和“标记”提供了几乎完全独立的管道,“安全管道”将来自输入数据的标记与输入指令类型相结合,以确定执行是否有效,如果有效,则确定输出标记应该是什么。

在事故安全项目(2015年)结束后,德雷珀工业( Draper )接手了这个项目,将其转化为“多佛固有安全处理器”(https://www.draper.com/explore-solutions/inherently-secure-processor)。2017年,德雷珀剥离了https://www.dovermicrosystems.com/,在那里,这项技术继续以"CoreGuard“的名义为各种体系结构开发。我感兴趣的两个项目是:

第一个是有趣的,因为它将这些想法推入RISC-V开源处理器社区,第二个原因是行业重量级(Cadence)的支持和与(被低估的)Ten二氧化硅体系结构的链接。

这种方法背后的动机是安全,一旦你意识到这能在安全世界中“修复”多少,就很难理解为什么你会尝试以其他方式制造计算机。但它并不局限于安全性--标记对于非常高级的数据类型方法非常有用,例如“维度分析”或多维数组的不同维度的单独索引变量类型。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61702729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档