Visual C 2008/2010编译器的优化程度如何?
我只是想知道MSVC编译器可以如何优化代码(使用代码示例)或者他无法优化的原因以及原因.
例如,我使用SSE-intrinsics就像这样(var是一个__m128值)(它用于一个frustrum-culling测试): 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): 解决方法
编译器的默认设置是生成将在“最小公分母”CPU上运行的代码 – 即没有SSE 4.1指令的代码.
您可以通过仅在构建选项中定位以后的CPU来更改它. 也就是说,当涉及到SSE optimisation时,MS编译器传统上“不是最好的”.我甚至不确定它是否支持SSE 4.该链接为GCC的SSE优化提供了良好的信誉:
也许你需要改变编译器! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |