gpt4 book ai didi

gcc、simd 内在函数和快速数学概念

转载 作者:行者123 更新时间:2023-12-04 02:19:51 33 4
gpt4 key购买 nike

大家好 :)
我正在尝试了解有关浮点、SIMD/数学内在函数和 gcc 的快速数学标志的一些概念。更具体地说,我在 x86 cpu 上使用 MinGW 和 gcc v4.5.0。

我已经搜索了一段时间,这就是我(认为我)此刻的理解:

当我在没有标志的情况下编译时,任何 fp 代码都将是标准的 x87,没有 simd 内在函数,并且 math.h 函数将从 msvcrt.dll 链接。

当我使用 mfpmath、mssen 和/或 March 以便启用 mmx/sse/avx 代码时,gcc 实际上使用了 simd 指令 只有如果我还指定了一些优化标志,例如 On 或 ftree-vectorize。在这种情况下,gcc 会自动选择内在函数,并且一些数学函数(我仍在谈论 math.h 上的标准数学函数)将成为内在函数或通过内联代码优化,其他一些仍将来自 msvcrt。 dll。
如果我不指定优化标志,这有什么变化吗?

当我使用特定的 simd 数据类型(那些作为 gcc 扩展可用,如 v4si 或 v8qi)时,我可以选择直接调用内部函数,或者再次将自动决定留给 gcc。如果我没有通过正确的标志启用 simd 指令,Gcc 仍然可以选择标准的 x87 代码。
同样,如果我不指定优化标志,这是否会发生任何变化?

如果我的任何陈述有误,请纠正我:p

现在的问题:

  • 我是否必须包含 x86intrin.h 才能使用内在函数?
  • 我是否必须链接 libm?
  • 快速数学与什么有什么关系?我知道它放宽了 IEEE 标准,但是,具体来说,如何放宽?使用其他标准功能?链接了其他一些库?或者只是在某处设置了几个标志并且标准库的行为不同?

  • 感谢任何愿意提供帮助的人:D

    最佳答案

    好的,我正在为像我这样在掌握这些概念上有些挣扎的人回答。

    Ox 优化适用于任何类型的代码、fpu 或 sse

    快速数学似乎只适用于 x87 代码。此外,它似乎没有改变 fpu 控制字 o_O

    内置函数始终包括在内。对于某些内置函数,可以使用一些标志来避免这种行为,例如严格或非内置函数。

    libm.a 用于一些未包含在 glibc 中的内容,但对于 mingw,它只是一个虚拟文件,因此目前链接到它是没用的

    使用 gcc 的特殊向量类型似乎只有在直接调用内部函数时才有用,否则代码无论如何都会被向量化。

    欢迎任何更正:)

    有用的链接:
    fpu / sse control
    gcc math
    以及关于“矢量扩展”、“X86 内置函数”和“其他内置函数”的 gcc 手册

    关于gcc、simd 内在函数和快速数学概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4966489/

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