c - Visual Studio 2017 VC++ 平台工具集 v141 比 v100 慢,为什么?

标签 c visual-studio optimization compiler-optimization

我正在重写一些 S3TC 算法,并且在分析我正在测试的优化时,我使用的是 vs2010。在我完成代码编写后,决定在平台工具集 v141 上对其进行概要分析。克隆单独的解决方案,并将项目文件作为原始文件的克隆,并将解决方案加载到 vs2017 中。将配置文件的项目重新定位到平台工具集 v141、Windows SDK 10,清理并重建所有内容,做了几次...

分析仅因 Release 版本的性能下降而导致,而 Debug 版本的值与 vs2010 调试非常相似。 Release 版本的测量降幅约为 11%,并且保持不变。检查项目属性中的优化。一切都与 vs2010 中完全相同。 之后,我将目标重新定位回平台工具集 v100,离开 Windows SDK 10 并重新构建所有内容。分析结果与 vs2010 分析结果相同。回到 v141,性能下降了约 11%。这告诉我,与 v100 平台工具集相比,平台工具集 v141 的 c/c++ 编译器效率较低。

以前有人遇到过这种情况,并发现了新一代编译器出现这种行为的原因吗?

有没有对文件进行任何预处理并比较两者的代码,并找出 v141 缺少什么?

这是 MS 编译器团队中优秀编码人员的垮台,还是我在这里遗漏了什么?

最佳答案

针对 CPU 中的推测执行的漏洞利用最近出现在新闻中,著名的例子是 Spectre 和 Meltdown。

解决这些问题的一种方法是在编译器中

Understanding the performance impact of Spectre and Meltdown mitigations on Windows Systems

“这里是 [Microsoft] 迄今为止发现的内容的摘要:

•在较新芯片(配备 Skylake、Kabylake 或较新 CPU 的 2016 年代 PC)上运行 Windows 10 时,基准测试显示速度下降个位数,但我们预计大多数用户不会注意到变化,因为这些百分比以毫秒为单位反射(reflect).

•在较旧芯片(配备 Haswell 或较旧 CPU 的 2015 年代 PC)上运行 Windows 10 时,一些基准测试显示出更明显的减速,我们预计一些用户会注意到系统性能下降。

•在旧芯片上运行 Windows 8 和 Windows 7(配备 Haswell 或旧 CPU 的 2015 年代 PC),我们预计大多数用户会注意到系统性能下降。

•当您启用缓解措施以隔离 Windows Server 实例中不受信任的代码时,任何硅片上的 Windows Server,尤其是任何 IO 密集型应用程序,都会显示出更显着的性能影响。这就是为什么您要谨慎评估每个 Windows Server 实例的不受信任代码的风险,并平衡您环境的安全性和性能权衡。”

因此,使用包含这些缓解措施的编译器重新编译的程序很可能会对性能造成很小的影响。

关于c - Visual Studio 2017 VC++ 平台工具集 v141 比 v100 慢,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52523850/

相关文章:

SQL Oracle - 优化 SQL View

performance - 什么时候性能提升足以实现该优化?

包含指向堆分配内存的指针的 C 结构体的按值调用

c++ - open() 函数的 _sopen_s() 等价物是什么?

c++ - 创建良好的目录结构

visual-studio - 更改 UWP 应用面向的设备

python - 如何在 cython 中指定列表和元组类型

c - 按位运算帮助/建议

c - 以螺旋方式打印二维数组的元素

visual-studio - 在 Dynamics AX 中调试