gpt4 book ai didi

c++ - 使用 SSE 内在函数时如何确保 NaN 传播?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:35:02 25 4
gpt4 key购买 nike

我最近读到这篇关于 SSE 算术运算中的 NaN 值的文章:

The result of arithmetic operations acting on two not a number (NAN) arguments is undefined. Therefore, floating-point operations using NAN arguments will not match the expected behavior of the corresponding assembly instructions.

来源:http://msdn.microsoft.com/en-us/library/x5c07e2a(v=vs.100).aspx

这是否意味着,比如说,添加两个 __m128 值可能会将 NaN 转换为实数?

如果计算依赖于 NaN 值,我需要最终结果也为 NaN。有什么办法吗?

最佳答案

在我解释该文本时,它的意思是编译器提供了大致对应于 SSE 指令的各种内在函数。通常,您可以预期编译器将使用 SSE 指令来实现内在函数。然而,这并不严格。内在函数实际上指定了一些抽象计算模型中的操作;他们不直接指定 SSE 指令。在那个抽象模型中,对两个 NaN 进行操作的结果(奇怪的是它似乎不允许一个 NaN 和一个数字)是未定义的。因此,例如,将两个 NaN 相加得到的结果可能不是 NaN。

特别是,抽象模型中的操作将受到编译器优化的影响,这些优化可能会导致 SSE 指令以外的结果(编译时的计算,如果编译器可以推断出 NaN 存在则省略指令,因此它不会需要实际执行添加等)。

看来,如果要保证 SSE 指令的语义,你可能不得不用汇编语言编写,而不是使用微软编译器中的内在函数。

我确实希望供应商不再对浮点语义漠不关心。在没有明确规定的行为的情况下很难进行工程设计。

关于c++ - 使用 SSE 内在函数时如何确保 NaN 传播?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15560567/

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