飞天发布时刻:2024年 Forrester 公有云平台Wave™评估报告解读 了解详情
写点什么

Visual Studio 如何提高 C++ 性能

  • 2012-11-28
  • 本文字数:941 字

    阅读完需:约 3 分钟

在 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)上并没有相应的实现,但是理论上是可以的。

英文原文地址 http://www.infoq.com/news/2012/11/vs2012_CPP


感谢臧秀涛对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2012-11-28 07:283402
用户头像

发布了 321 篇内容, 共 123.1 次阅读, 收获喜欢 19 次。

关注

评论

发布
暂无评论
发现更多内容

Spring Boot 精讲,看完你还敢说你不会 Spring Boot ?

Java 程序员 后端

Offer拿来吧你!秒杀系统?这不是必考的嘛,kafka与rabbitmq面试题

Java 程序员 后端

Oracle 常用SQL语句大全(精),java框架学习顺序

Java 程序员 后端

Redis精通系列——info 指令用法,阿里+头条+抖音+百度+蚂蚁+京东面经

Java 程序员 后端

Redis事务详述,java多并发面试题

Java 程序员 后端

Redis从入门到精通,至少要看看这篇,java医疗管理系统技术描述

Java 程序员 后端

Spring boot记录sql探索,java堆和栈面试题

Java 程序员 后端

set集合框架,java消息中间件面试

Java 程序员 后端

quartz-2,linux视频教程百度云

Java 程序员 后端

RocketMQ 5(1),kafka面试题零拷贝

Java 程序员 后端

SDS——Redis源码剖析,java工程师进阶书籍

Java 程序员 后端

Redis 最全性能监控指标:汇总实战,实战java虚拟机葛一鸣第二版pdf

Java 程序员 后端

Redis入门HelloWorld,java入门视频教程

Java 程序员 后端

Redis常用命令总结,kalilinux教程推荐

Java 程序员 后端

Spring Boot 快速入门(二),华为工程师面试经历

Java 程序员 后端

微信朋友圈复杂度分析

abingagl

Offer拿来吧你!秒杀系统?这不是必考的嘛(1)

Java 程序员 后端

RabbitMQ实现即时通讯居然如此简单!后端代码都省得写了

Java 程序员 后端

Redis 中 RDB 和 AOF 持久化有啥区别?看这儿,你就懂了

Java 程序员 后端

Redis实战(五)-字符串,kafka基本原理

Java 程序员 后端

redis实现分布式限流 结合Lua脚本,Java开发还不会这些

Java 程序员 后端

RocketMQ 5,linux端口转发技术

Java 程序员 后端

Nginx架构浅析:为什么不用多线程模型管理连接与处理逻辑业务?

Java 程序员 后端

OpenKruise :SidecarSet 助力 Mesh 容器热升级

Java 程序员 后端

Redis与MySQL数据双写一致性工程落地案例,java最新技术百度云

Java 程序员 后端

Nginx面试三连问:如何工作?负载均衡策略有哪些

Java 程序员 后端

P8大牛带你细谈架构中的限流与计数器的实现方式

Java 程序员 后端

Spring Cloud Gateway修改请求和响应body的内容

Java 程序员 后端

Redis 变慢了?那你这样试试,不行就捶我,java面试问职业规划

Java 程序员 后端

Socket和ServerSocket的简单介绍及例子,mybatis源码面试题

Java 程序员 后端

Spring Boot 项目的这些文件都是干啥用的?,java电子书免费

Java 程序员 后端

Visual Studio如何提高C++性能_语言 & 开发_Jeff Martin_InfoQ精选文章