我正在重写一些S3TC算法,并且在测试所进行的性能优化分析时,我正在使用vs2010。完成代码编写后,决定在平台工具集v141上进行分析。克隆了单独的解决方案,并将项目文件作为原始克隆,并将解决方案加载到vs2017中。将已概要分析的项目重新定向到平台工具集v141,Windows SDK 10,清理并重建了所有内容,并做了多次...
仅由 Release 版本的性能下降导致的性能分析,而Debug版本的值与vs2010调试非常相似。 发布版本的实际下降约为11%,并保持不变。检查项目属性中的优化。一切都与vs2010中的完全相同。 之后,我将目标重新定位到平台工具集v100,离开Windows SDK 10并重新构建了所有内容。分析结果与vs2010分析相同。回到v141,性能下降了约11%。这告诉我,与v100平台工具集相比,平台工具集v141的c / c ++编译器效率较低。
以前有人遇到过这种情况,并且发现了新一代编译器具有这种行为的原因吗?
是否已对文件进行了任何预处理并比较了两者的代码,并找出缺少的v141?
这是MS编译器团队中优秀编码人员的垮台,还是我在这里遗漏了一些东西?
答案 0 :(得分:2)
最近,针对CPU中的投机执行的攻击已成为新闻,例如Spectre和Meltdown。
解决这些问题的一种方法是在编译器中
Understanding the performance impact of Spectre and Meltdown mitigations on Windows Systems
”“以下是[Microsoft已经发现]的摘要:
•在更新版本的Windows 10(配备Skylake,Kabylake或更新的CPU的2016年代PC)上使用Windows 10时,基准测试显示了个位数的速度下降,但是我们不希望大多数用户注意到变化,因为这些百分比以毫秒为单位
•在旧版Windows 10(具有Haswell或更旧CPU的2015年代PC)上使用Windows 10时,一些基准测试显示出更慢的速度,并且我们希望一些用户会注意到系统性能下降。
•在较旧的硅片上使用Windows 8和Windows 7(具有Haswell或更旧的CPU的2015年代PC),我们希望大多数用户注意到系统性能下降。
•当您启用缓解措施以隔离Windows Server实例中的不受信任的代码时,任何硅片上的Windows Server(尤其是在任何IO密集型应用程序中)都会对性能产生更大的影响。这就是为什么您要谨慎评估每个Windows Server实例不受信任的代码的风险,并在您的环境中平衡安全性与性能之间的权衡。”
因此,使用包含这些缓解措施的编译器重新编译的程序很有可能对性能造成小的影响。