像 Denormals-Are-Zero (DAZ) 这样的非正规标志会影响相等比较吗?
Do denormal flags like Denormals-Are-Zero (DAZ) affect comparisons for equality?
如果我有 2 个具有不同位模式的非规范浮点数并比较它们是否相等,结果是否会受到 Denormals-Are-Zero 标志、Flush-to-Zero 标志或其他常见标志的影响使用的处理器?
或者这些标志只影响计算而不影响相等性检查?
DAZ(非正则化 为 零)影响读取输入,因此 DAZ 影响比较 。根据符号,所有非正规化都按字面意思处理为 -0.0
或 +0.0
。
FTZ(清零)仅影响写入输出,因此FTZ 不影响比较。比较不会产生 FP 输出,因此没有什么可刷新的。
(DAZ 和 FTZ 是 SSE MXCSR control/status 寄存器中的标志。x87 没有等效项。)
为什么两个标志分别存在,而不是一个标志控制两者?我不知道,但你肯定需要这两种效果。
您可能正在从文件或网络中读取 FP 数据,因此您可以直接获得非正规输入,而不是计算结果。所以你需要 DAZ。
产生正确的非正规输出(例如减去附近的正规数,或乘以两个小的正规数)可能很慢,所以你需要 FTZ 允许 CPU 下溢到 +-0.0
而不是采用微码辅助来获得正确的值。
或者您可能有一个线程 运行 具有快速数学 (FTZ+DAZ),而另一个线程 运行 具有精确数学以用于某些需要它的计算。如果快速数学线程读取精确线程生成的数据,则这些数字可能是非正规数。
我不确定设置 DAZ 而不是 FTZ 的用例是什么,反之亦然。这肯定会涉及到读取不是您自己生成的数据,或者为您以外的读者写入数据,否则仅 FTZ 就足以避免任何减速。
(只有 DAZ 是不够的:从正常输入产生非正常输出仍然很慢,即使下一个操作将其视为 0。)
如果我有 2 个具有不同位模式的非规范浮点数并比较它们是否相等,结果是否会受到 Denormals-Are-Zero 标志、Flush-to-Zero 标志或其他常见标志的影响使用的处理器?
或者这些标志只影响计算而不影响相等性检查?
DAZ(非正则化 为 零)影响读取输入,因此 DAZ 影响比较 。根据符号,所有非正规化都按字面意思处理为 -0.0
或 +0.0
。
FTZ(清零)仅影响写入输出,因此FTZ 不影响比较。比较不会产生 FP 输出,因此没有什么可刷新的。
(DAZ 和 FTZ 是 SSE MXCSR control/status 寄存器中的标志。x87 没有等效项。)
为什么两个标志分别存在,而不是一个标志控制两者?我不知道,但你肯定需要这两种效果。
您可能正在从文件或网络中读取 FP 数据,因此您可以直接获得非正规输入,而不是计算结果。所以你需要 DAZ。
产生正确的非正规输出(例如减去附近的正规数,或乘以两个小的正规数)可能很慢,所以你需要 FTZ 允许 CPU 下溢到 +-0.0
而不是采用微码辅助来获得正确的值。
或者您可能有一个线程 运行 具有快速数学 (FTZ+DAZ),而另一个线程 运行 具有精确数学以用于某些需要它的计算。如果快速数学线程读取精确线程生成的数据,则这些数字可能是非正规数。
我不确定设置 DAZ 而不是 FTZ 的用例是什么,反之亦然。这肯定会涉及到读取不是您自己生成的数据,或者为您以外的读者写入数据,否则仅 FTZ 就足以避免任何减速。
(只有 DAZ 是不够的:从正常输入产生非正常输出仍然很慢,即使下一个操作将其视为 0。)