
上QQ阅读APP看书,第一时间看更新
1.7 向量化和多核技术不是万能的
在2003年,Intel曾经预测能够在2010年采用10纳米或更小的制作工艺开发出30GHz的计算机,实现万亿指令级别的性能(即每秒钟处理一万亿条指令)。但是现在Intel和其他的生产商在使用14nm技术生产主频低于5GHz的处理器,虽然Intel和AMD的超频技术使得计算机的瞬间主频远远超过5GHz,但是这不可持续且会降低硬件寿命。
由发热和能量消耗带来的问题,使得硬件生产商采用向量化和多核技术,并且宣称向量化和多核技术延续了摩尔定律。向量化和多核技术部分解决了发热和能耗问题,但是这种解决方案也引来一个棘手的软件问题:如何编程以发挥向量多核处理器的计算能力。
由于应用和硬件中串行运算部分的存在,随着处理器数量的增加和向量宽度的增加,并行程序的效率就会降低一些。对于某个应用,当使用的核心数量达到一定程度时,增加核心反而会减慢应用的速度,硬件上也存在这种问题。可能在制造几百个长向量核心的处理器前,多核向量处理器已经达到了实际限制。
对于软件开发人员来说,一些问题很容易向量化和并行,但是也有一些不行;有些问题适合向量化和并行,但是程序却不容易编写。很难将算法划分为几百、几千个控制流,因为人脑很难维护这些控制流的状态空间。实际上自动向量化和自动并行化是解决这些问题的首选(软件开发人员编写串行代码,编译器或硬件给多个处理器有效地分发指令),但是现在的自动向量化和自动并行化工具仍旧非常弱。
抽象是软件开发中的有效技术。但是,编写并行程序的时候,抽象就不太好用。抽象要求隐藏程序处理的数据对象,而并行必须要处理数据的依赖关系,两者之间存在天然的冲突。