- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想暂时启用 FTZ
/DAZ
模式,以便在严格遵守 IEEE 754 的某些代码中获得性能提升。标准不是问题,无需更改可能正在执行代码的其他线程的行为,其中合规性很重要。
我一直在阅读 this关于如何启用/禁用这些模式和 this关于非正规处理对性能的影响,但不幸的是,我在多线程环境中有一个混合代码,我无法一劳永逸地启用这些模式。
我的理解是,由于 MXCSR
寄存器的标志决定了硬件的行为,并且由于每个线程都有自己的寄存器上下文,因此设置这些标志只会影响当前线程的行为。
是否正确?
最佳答案
是的,MXCSR
是通过上下文切换保存/恢复的每线程架构状态的一部分,以及 xmm/ymm/zmm 和 x87 堆栈寄存器(使用 xsave
/xrstor
)。不同的线程有自己的 FPU 状态。
有趣的想法,我一直认为 DAZ 仅在您具有非正规常量或其他内容(或来自文件的数据)时才有用,但是让其他线程在没有 FTZ 的情况下运行是非正规的另一个来源。
您可能还想使用 -ffast-math
或这些选项的子集来编译一些文件。请注意,链接 与 gcc 中的 -ffast-math
将包括一个 CRT 函数,该函数在 main()
之前设置 DAZ/FTZ,所以不要这样做。
fast-math 启用的优化主要与是否将非正规化清零相关。即使只是 -fno-math-errno
也可以让更多的数学函数内联(更好/完全),例如sqrtf
,如果您不关心 errno
的设置以及获得 NaN 结果,它是完全安全的。
关于multithreading - 我可以暂时为线程启用 FTZ 和 DAZ 浮点模式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47101001/
如果我有 2 个具有不同位模式的非正规浮点数并比较它们是否相等,结果是否会受到非正规数-零标志、刷新到零标志或常用处理器上的其他标志的影响? 还是这些标志只影响计算而不影响相等性检查? 最佳答案 DA
我想暂时启用 FTZ/DAZ 模式,以便在严格遵守 IEEE 754 的某些代码中获得性能提升。标准不是问题,无需更改可能正在执行代码的其他线程的行为,其中合规性很重要。 我一直在阅读 this关于如
我已阅读 This article和 do-denormal-flags-like-denormals-are-zero-daz-affect-comparisons-for-equality我了解
我是一名优秀的程序员,十分优秀!