gpt4 book ai didi

multithreading - 我可以暂时为线程启用 FTZ 和 DAZ 浮点模式吗?

转载 作者:行者123 更新时间:2023-12-01 10:26:45 26 4
gpt4 key购买 nike

我想暂时启用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com