使用SIMD技术提高C++程序性能

作者:张银奎,《软件调试》和《格蠹汇编》作者,从事软件开发和研究十余年,对IA-32架构、操作系统内核、虚拟技术,尤其对软件调试有较深入的研究。微博ID:@dbgger
本文为《程序员》原创文章,未经允许不得转载,更多精彩文章请订阅《程序员》

今天和C++同行谈谈如何提高自己的身价。编程语言只是工具,要把工具用到最合适的地方,扬其长且避其短,打造出有价值的软件产品,那么使用这工具的人自然身价就高了。

C++语言的优势

C++语言有哪些优势呢?当然有很多,不然早消亡了。但泛泛地说“有很多”没意义。到底有哪些呢?不同人可能有不同的回答。同一个人在不同时间也可能回答不同。这里我们不妨听听C++之父Bjarne Stroustrup先生如何说。在前不久举办的“2016 C++及系统软件技术大会”上,Bjarne先生做了题为《What C++ is and what it will become》的主题演讲。他很深刻地阐释了到底什么是C++,解说了C++语言的根本特征和优势。有一页讲稿的题目叫“C++ in two lines”(用两行话来描述C++),可谓画龙点睛之笔。这两行是什么呢?第一行是“Direct map to hardware”,第二行是“Zero overhead abstraction”。粗浅翻译一下,就是“直接映射到硬件”和“0负担抽象”。

“直接映射到硬件”是说C++语言和硬件之间直接对应,C++的语句可以直接对应到CPU指令,C++的数据类型也可以直接对应到CPU支持的数据类型。也就是说,C++语言的代码和数据可以很直接地翻译到CPU支持的指令和数据,不需要做这样那样的转换。概言之,就是效率很高。

单纯从效率来讲,最直接的语言当然要属汇编,但汇编语言的问题是缺乏高级抽象,代码难以组织。所以Bjarne先生的第二行是“0负担抽象”,我想这一行又包含两层意思,第一层意思是C++是有抽象的,第二层意思是支持抽象的负担为0。在今天的软件大生产时代,即使是比较小型的软件项目,使用抽象也是必须的。今天流行的编程语言几乎无不支持抽象,不论Java还是C#、F#。虽然都支持抽象,但有些语言为了抽象付出的代价很大,资源消耗多,运行速度慢,也就是额外开销高。而C++是0负担抽象,0额外开销。Bjarne先生一定也知道Java的流行,一定也听见过关于C++和Java孰是孰非的争论。说C++是0额外开销略微有些夸张,但相对其他额外开销高的语言来说,相当于是0了。不这样说的话,说抽象负担远远低于其他语言,岂不啰嗦?一代宗师此言一出,言简意赅,料也无人敢出来说半个不是。

图1  C++之父Bjarne先生在介绍C++的根本优势

图1 C++之父Bjarne先生在介绍C++的根本优势

这两行话简单有力,一个是效率高,一个是负担小,加起来一起托出C++的核心优势:锐利无比,性能一流。

怀着虔诚的心,我一边聆听Bjarne先生论述上面两行话,一边用手机拍下了这个历史瞬间。地点是上海浦东外高桥的喜来登酒店,时间是2016年10月28日上午10点12分。

大师的话值得反复体味,每个C++程序员都应该牢记。在做设计时,我们应该用这两句话来检查自己的设计,是否大道至简,能否发挥硬件的性能。编写和检查代码时,我们更应该想起这两句话,把杂乱的逻辑理顺,把冗余的代码删掉,反复优化每行代码,把硬件的性能发挥到极致。不然的话,怎么对得起C++语言,怎么对得起Bjarne先生?

图2  C++之父Bjarne先生希望加入到C++17中的语言特征

图2 C++之父Bjarne先生希望加入到C++17中的语言特征

有人说,硬件太强大了,写代码时不需要那么在意性能问题。这话

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值