Visual Studio如何提高C++性能

[来源] 达内    [编辑] 达内   [时间]2012-12-05

在Build 2012开发者大会上,Jim Radigan和Don McCrady做了一个演讲,讨论了改进的Visual Studio 2012(VS2012)编译器为C++程序开发者带来了哪些益处。

在Build 2012开发者大会上,Jim Radigan和Don McCrady做了一个演讲,讨论了改进的Visual Studio 2012(VS2012)编译器为C++程序开发者带来了哪些益处。Radigan首先从最初的Pentium处理器的出现开始对计算能力不断提高的历史进行了简要的概述,继而引出了自己的话题“一切都是为了性能:使用Visual C++ 2012最大化硬件利用率”。
第一代Pentium处理器有310万个晶体管,而目前这一代Ivy Bridge处理器有14亿个晶体管。正如McCrady之后所提到的,C++ AMP允许开发者通过一种语言来使用这一切——包括CPU以及越来越多地集成于CPU内核(CPU Dies)中的GPU(不包括独立扩展卡之中的GPU)。
与一般的代码相比,以C++ AMP为目标的代码往往能够提供最佳性能,接下来Radigan提到了VS2012中的自动矢量化和自动并行化优化,这意味着在很多情况下仅重新编译已有的C++代码就能直接获益。这也导致了VS2012中优化器的大小是之前版本中的两倍。
开发者想要确保编译器检查代码从而进行加速时,可以对代码片段进行标记。下面的编译器指令
#pragma loop(hint_parallel(4))
允许开发者向编译器提供线索:包含该编译器指令的循环应该被扩展到多个核上(该代码片段中是4个核)。当然,编译器依然会进行全面的分析,所以如果被标记的代码块不适合并行化,那么编译器就不会进行任何优化。
Radigan通过一个光线跟踪的演示证明了仅是简单地在VS2012下重新编译源代码就带来了16倍的性能提升。Radigan强调说,尽管VS2012改进了编译器性能,但是并没有能够自动产生更快速的代码的“灵丹妙药”。编译器团队会继续寻求创新,因为Windows8、SQL Server以及Office都是C++应用程序。
Radigan指出虽然现在并没有任何可用的东西,但是他想向AMP中添加原生的C#支持。(目前C#开发者能够通过P/Invoke使用AMP。)最后,C++ AMP规范是一个开放标准,但是现在Apple的平台(iOS或者Mac OS X)上并没有相应的实现,但是理论上是可以的。 

资源下载