当前位置: 首页 > 知识库问答 >
问题:

“修复”浮标是什么意思?

郎磊
2023-03-14

我正在查看AVX-512中的指令集,并注意到一组修复指令。一些例子:

_mm512_fixupimm_pd, 
_mm512_mask_fixupimm_pd, 
_mm512_maskz_fixupimm_pd

_mm512_fixupimm_round_pd, 
_mm512_mask_fixupimm_round_pd, 
_mm512_maskz_fixupimm_round_pd

这里的“修复”是什么意思?

共有2个答案

司马狐若
2023-03-14

英特尔在其“未来扩展”指令集参考手册中的描述具有通常的操作部分,该部分完全指定了哪些位去哪里。

《本质指南》还复制了Operation一节,这是对本质指南中其他一些记录不佳的条目的一个很好的改变。或者可能是最近增加的。它仍然省略了表格和图表。我通常认为insn参考手册更有用,但有时在搜索我可能没有想到或不知道的指令时除外。

本说明书的操作部分篇幅较长,难以理解,英文文本描述只是一个粗略的总结:

使用在第二个源操作数(第三个操作数)的相应四字元素中指定的32位两级查找表,使用异常报告说明符imm8,对第一个源操作(第二个操作数

...

两级查找表通过将输入数据编码解码成8种令牌类型,对第一源操作数中的每个DP FP输入数据进行修正。为每种标记类型定义一个响应表,该表使用16个响应动作之一转换第一个源操作数中的输入编码。

预期使用情况是:

  • dest=RCPPD(或类似)牛顿-拉夫森迭代的结果
  • src=近似细化的输入
  • =修正表。可以是广播内存操作数,因此在您希望向量的每个元素使用相同的表的常见情况下,只需要 64 或 32 位内存。(对于单精度和双精度,该表只有 32b,但 DP 版本的广播选项是 m64bcst。上面的 32 位是垃圾是可以的,但不能让它越过页面边界进入未映射的页面:这可能会出错。

也许更详细的英文描述将有助于弥补非常粗略的总结和完整伪代码之间的差距:

对于每个src元素:

> < li>

tsrc =如果< code>MXCSR,则将反规格化刷新为零。DAZ已设置。在这之后,原始的src根本没有使用:没有< code>dest=src动作,只有< code>dest=tsrc。

tsrc 归类为八种“令牌”类型之一(QNAN、SNAN、零、1、-Inf、Inf、负值、正值)。如果 imm8 不为零,则在找到匹配类型的令牌时将触发异常

使用该类别标记在第3个操作数的对应元素中查找操作(这是一个由8个4位代码组成的表,每个标记对应一个代码)。

操作可以是dest=dest、dest=tsrc、dest=NaN、dest=/-Inf、dest=Inf中的一个,符号为tsrc、dest=/-0、dest=[-1、dest=1/2、dest=90.0、dest=pi/2或dest=MAX/MIN_FLOAT。请参阅英特尔的文档,了解哪些代码映射到哪些操作。

对每个矢量元素分别进行这一过程。

典型的用法是将 dest=dest 代码用于我们正在修复的结果已经正确的所有情况。请注意,dest 也是一个输入操作数,即使没有写掩码,因为 dest=dest 操作。

华季同
2023-03-14

这是一个很好的问题。英特尔的答案(我的粗体)在这里:

此指令专门用于固定涉及一个源的算术计算结果,以使其符合规范,但通常用于固定多个指令序列的结果以反映特殊数字输入。例如,考虑rcp(0)。输入0到rcp,您应该根据DX10规范获得INF。然而,通过Newton-Raphson评估rcp,其中x=近似值(1/0),会产生错误的结果。为了解决这个问题,可以在N-R倒数序列之后使用VFIXUPIMMPS将结果设置为正确的值(即,当输入为0时为INF)。

在中查找VFIXUPIMMPD:

https://software.intel.com/sites/default/files/managed/0d/53/319433-022.pdf

 类似资料:
  • 问题内容: 通过阅读Backbone.js源代码,我看到了以下内容: 什么啊 在这里使用它的目的是什么? 问题答案: 什么意思 [MDN]是带一个参数且始终返回的前缀关键字。 例子 有什么意义呢? 似乎很没用,不是吗?如果它总是返回,那么仅使用自身又有什么问题呢? 在理想的世界中,我们将能够安全地使用它:它比更加简单易懂。但是,如果您以前从未注意到过,这不是一个完美的世界,尤其是在涉及Javasc

  • 我不知道问号(< code >?)在java里代表,我在做一个小程序,一个Nim-game。我们在一本书里寻求帮助,看到了这样一句话: 我不明白,表示,它可以与if语句有关但您将其放在变量中吗?并且可以是“其他”?(我刚才说的这些事情可能会很误导)

  • 那么,在Java中,你们都用什么来处理它们呢?

  • 问题内容: 在整数文字中使用“ 0”(零)作为前缀会将其基数更改为八进制。这就是为什么 将打印。但是使用“ F”作为后缀 将使其失去八进制基数(返回十进制)并进行打印。 有什么区别和?使用浮点运算时,“ 0”前缀有任何含义吗? 问题答案: 来自Java语言规范,关于浮点文字 FloatingPointLiteral: DecimalFloatingPointLiteral 十六进制浮点数 Deci

  • 问题内容: 我写Java已有一段时间了,今天我遇到了以下声明: 请注意数组声明中的“点点点”,而不是通常的括号[]。显然可以。实际上,我写了一个小测试并验证了它的有效性。因此,我提取了Java语法,以查看参数声明语法的位置,但未找到任何内容。 那么对那里的专家来说,这是如何工作的呢?它是语法的一部分吗?另外,虽然我可以像这样声明函数,但不能像这样在函数体内声明数组。 无论如何,您知道在哪里记录了此

  • 但是得到了错误:

  • 我很难理解<代码> 结果是15 但是怎么会变成15呢?