gpt4 book ai didi

c++ - Visual C++ 2008/2010 编译器的优化程度如何?

转载 作者:太空狗 更新时间:2023-10-29 20:18:43 26 4
gpt4 key购买 nike

我只是想知道 MSVC++ 编译器可以优化代码(带有代码示例)有多好,或者他不能优化什么以及为什么。

例如,我将 SSE-intrinsics 与类似的东西一起使用(var 是一个 __m128 值)(它用于截头体剔除测试):

if( var.m128_f32[0] > 0.0f && var.m128_f32[1] > 0.0f && var.m128_f32[2] > 0.0f && var.m128_f32[3] > 0.0f ) {
...
}

当我查看 asm-output 时,我看到它确实编译成一个丑陋的非常跳跃的版本(而且我知道 CPU 只是讨厌紧跳跃)而且我也知道我可以用 SSE4 优化它。 1 PTEST 指令,但为什么编译器不执行它(即使编译器编写者定义了 PTEST 内在指令,所以他们知道该指令)?

它不能做哪些优化(直到现在)。

这是否意味着我使用当今的技术被迫使用内部函数和内联 ASM 以及链接的 ASM 函数,并且编译器会找到这样的东西(我不这么认为)?

我在哪里可以阅读更多关于 MSVC++ 编译器优化的信息?

(编辑 1):我使用了 SSE2 开关和 FP:fast 开关

最佳答案

编译器的默认设置是生成将在“最低公分母”CPU 上运行的代码 - 即没有 SSE 4.1 指令的代码。

您可以通过仅在构建选项中定位更高版本的 CPU 来更改它。

也就是说,在 SSE optimisation 方面,MS 编译器传统上“不是最好的” .我什至不确定它是否完全支持 SSE 4。该链接为 GCC 的 SSE 优化提供了良好的信誉:

As a side note about GCC’s near perfection in code generation – I was quite surprised seeing it surpass even Intel’s own compiler

也许您需要更改编译器!

关于c++ - Visual C++ 2008/2010 编译器的优化程度如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3250988/

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