- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已阅读 This article和 do-denormal-flags-like-denormals-are-zero-daz-affect-comparisons-for-equality我了解 FTZ 和 DAZ 标志之间的用法和区别。
DAZ 适用于输入,FTZ 适用于 FP 操作的输出。
让我感到困惑的是,如果 ,那么在汇编 View 中非正规值来自哪里自贸区成立 .我认为它只能是作为立即数或来自 .rodata
部分的常量值。 (使用 RIP 相对寻址访问)。
但是我发现在我的二进制文件中,这些地方没有非正规值,但它仍然存在 FP-ASSIST 问题,导致性能不佳。
如果我同时设置 DAZ 和 FTZ,问题就会消失并且性能会变得更好。实际上,我什至没有在我的源代码中找到任何非规范输入。我真的很困惑,非正规值从何而来?
顺便说一句,另一个问题,用于说明 vmovsd 0x9498(%rip),%xmm0
, 假设 0x9498(%rip)
是非正规值,xmm0
会发生什么?这条指令执行后,如果我们分别设置FTZ或DAZ?
在我的理解中,DAZ 会让它花费 0x9498(%rip)
作为零和移动 0
到 xmm0;自贸区搬迁0x9498(%rip)
到 xmm0 发现它是异常的,所以刷新 xmm0
到零。我不确定,是否正确?
最佳答案
非正规又名次正规是 IEEE 二进制格式中指数字段 = 0 的值。 https://en.wikipedia.org/wiki/Double-precision_floating-point_format
当 FP 数学指令(不是移动或纯按位 bool 值)读取这样一个数字作为输入操作数时,它必须在将尾数与另一个操作数对齐时处理这种特殊情况,以及在应用尾数的隐式最高位时指数为 0 或非零暗示。
是的,大部分时间输出上的 FTZ 就足够了,因为大多数浮点值是其他 FP 计算的结果。是的,FTZ 是必要的,因为 mul/div/add/sub 在正常数字 can create a subnormal result 上。 (添加输入需要相反的符号)。另一个 IEEE“基本”精确舍入操作 sqrt 无法创建次正规数,因为它使数字更接近 1.0。
显而易见的事情是使用 perf record
找出您在哪里获得 FP 辅助,并在那里添加一些额外的检查以进行打印,或者当您在那里发现异常时进行其他检查。 (然后在该分支中设置一个断点,以便您可以检查情况。)
设置了 FTZ 的非规范化(非详尽)的可能来源,即除 FP 数学运算之外:
strtod
nextafter
等 FP 位模式的整数操作。也可能作为 exp
实现的内部结构的一部分,该实现将整数填充到 double
的指数字段中。 static double foo = DBL_MIN / 4.0;
将是一个编译时异常。但是您会在 .rodata
或 .data
中找到它们。非常量非零静态/全局变量进入 .data
。 immediate operands
mov rax, imm64
/
movq xmm0, rax
或类似的。但是编译器不会这样做,因为从
.rodata
加载通常更有效。
for instruction
vmovsd 0x9498(%rip),%xmm0
vmovsd
只是一个负载,并且总是精确地复制 64 位;在架构上相当于
vmovq
SIMD 整数负载。
vmovsd
、FP shuffles 等产生任何影响。只有执行实际 FP 数学并可以引发 FP 异常的指令才会受到影响。您可以通过查看 asm 手册条目的异常部分来判断。例如
roundsd
确实遵循 DAZ 可能在根据指定的模式舍入之前将输入舍入为零。
关于floating-point - 当我们考虑对 SSE 浮点使用 DAZ 标志时, "denormal input"在汇编中究竟意味着什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61457985/
我一直认为使用“if”比捕获异常要好得多(就性能而言)。例如,这样做: User u = Users.getUser("Michael Jordan"); if(u!=null) System.
我正在尝试使用下一个格式将字符转换为日期。我有下一个数据框 i (我在最后添加了 dput() 版本的数据框): Date 1 Dec_28_2012_9:
考虑到 PHP 中的日期戳,我如何计算持续时间?我在日期之间使用的日期格式是“Y-m-d H:i:s”, 我的工作代码只能计算时间之间的持续时间而不考虑日期。 下面是我的代码: $assigned_t
我正在尝试解释 GLMM 中的自相关。我的响应变量是 bool 值,它表示一组 hive 的生命周期中是否存在 en 事件。我试图用一组描述每个巢状态的数值变量来预测此类事件的概率。因此,我在广义模型
我对如何解释 undefined variable 感到有点困惑(我不确定你现在是否可以)。我正在尝试使用以下代码底部附近的 if else 语句(已注释掉的行)。 这个想法是,如果请求歌曲的人不是与
Bjarne Stroustrup 的 The C++ Programming Language Fourth Edition 中的以下内容是什么意思? "Consider . (dot) suspe
我想要一个主元素,边 block 漂浮在它的右侧。我不知道边 block 的数量,也不知道它们的最终总高度。但是我的主要元素应该具有相同的高度(请参阅以下示例以更好地理解),而无需使用列。 (虚线部分
我在每个 TextView 上都有以下警告(来自 Lint),在我的 XML 中有一个 ID。 Consider making the text value selectable by specify
目前,我有 6 条曲线,以 6 种不同的颜色显示,如下所示。 这 6 条曲线实际上是由 一个相同实验 的 6 次试验生成的。这意味着,理想情况下它们应该是相同的曲线,但由于噪声和不同的试验参与者,它们
winner of a recent Wikipedia vandalism detection competition建议可以通过“检测考虑到 QWERTY 的随机键盘点击来改进检测键盘布局”。 示
多年来,我一直在编写 C 语言,主要是在嵌入式环境中,并且对指针有一个非常好的心智模型——我不必明确地考虑如何使用它们,我对指针算法 100% 感到满意,指针数组,指针指针等。 我写的 C++ 很少,
我正在使用 Boost.Date_time 来获取两个日期之间的时差。我希望代码在这些天也考虑夏令时的变化,并给我正确的时间间隔。 考虑这个例子。 2015 年 11 月 1 日,美国的 DST 将发
我有一个(人类)名字的向量,全部用大写字母表示: names <- c("FRIEDRICH SCHILLER", "FRANK O'HARA", "HANS-CHRISTIAN ANDERSEN")
我想呈现一个表单小部件。这是我要生成的原始 HTML: 使用这个: {{ form_row(form.email, { 'type' : 'email', 'attr' : { 'class' :
我正在开发一个 python 项目,它使用 pythonnet 和几个 C# dll 作为依赖项。 由于我不想将 dll 推送到 git 存储库,因此我调整了 .gitignore 文件。但是,现在
考虑到上午/下午,我想将字符串转换为 php 数据时间。 我想将 '03/06/2015 12:17 am' 转换为 php datatime。 我试过了, $myDateTime = DateTim
我想排除那些具有相同标题和同一年份的实例。 title votes ranking year 0 Wonderland 19 7.9 1931 1
例如对于一个 EditText,通常指定 android:inputType="numberDecimal"用于文本字段应该包含十进制数。但这假设“。”用作小数点分隔符,在某些国家/地区使用“,”代替
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 9 年前。 Improv
作为练习,我决定学习 Java 中的 lambda 表达式。我想重写我发现笨拙且冗长的旧代码。它检查命令行参数是否是(1)文件路径或(2)目录路径。在(1)场景中,它将命令行参数传递给方法。在 (2)
我是一名优秀的程序员,十分优秀!