【发布时间】:2011-06-25 09:18:22
【问题描述】:
大家好:)
我试图掌握一些关于浮点、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
【问题讨论】:
标签: gcc simd intrinsics fast-math