【IT168 评论】在不久前结束的IDF上,英特尔信誓旦旦的表示,在面向多任务并行计算领域他们已经与很多合作伙伴共同测试并完善了MIC系列产品(Knights Ferry),并将与今年年底推出正式面向商用领域和客户的正式产品“Knights Corner”。但是在这之前,远在大洋彼岸的Nvidia Tesla事业部首席技术官Steve Scott先生的一篇博客则对提出了质疑。
他在博客中撰文表示:英特尔的MIC众核计算加速器并不代表免费的“午餐”——所谓用MIC运行x86程序无需更改代码是无稽之谈。
Steve先生在博文中引用登纳德缩放比例定律 (Dennard Scaling)表示,虽然摩尔定律仍然还在(可以继续增加晶体管密度),但是晶体管已经不能因为体积缩小而降低电压,因此尽管集成的晶体管越来越多,但也意味着功耗越来越大。这就导致了目前的处理器全都受到功率的限制——每一次制程工艺的切换,都会加重这个问题。
其实有悟性的读者肯定想到了之前英特尔和AMD狂攀主频高峰的情形——大家只要把主频坐上去,性能就上去了。然后碰到功耗瓶颈,开始转而在架构和内核上做文章,现在又再次碰到了功耗的壁垒(内核增多需要增加晶体管数量)。因此包括Nvidia和AMD在内提出了混合架构——数百个简单的并行计算核心为高吞吐量的负载做优化,而将CPU内核来做常驻的串行操作,这样就各有所长的发挥了GPU和CPU的性能。
Steve表示,英特尔的MIC加速计算单元,实际上是用15年前的奔腾核心加上宽幅向量单元,再靠数量来堆积并行计算优势,来获得更高的浮点性能。他认为这种做法挺好,但是如果只因为x86指令集而误解为不需要更改程序代码就能运行,那就大错特错了。
Nvidia公司亚太区技术市场经理邓培智先生对笔者表示,目前的很多程序都是串行编程,而不论是GPU还是MIC在做并行化运算的过程中,都需要对源程序代码中并行的部分做标记——采用标记化的语言来标记并行化代码是目前最常用的方法。标记化语言可以将串行指令交给CPU执行,将并行度高的指令交给MIC执行。
而如果不做更改,顺序指令执行程序的话,阿姆达尔定律就会使得并行计算的其他内核无法得到足够的计算资源,成为瓶颈。OpenMP方式进行重编译要稍好,但是扩展到更多核心会造成性能提升瓶颈。
那么Nvidia的Tesla GPU是如何做的呢?邓培智表示,GPU和MIC相比,寄存器容量会高很多,缓存会少很多。这一方面是由于指令集决定的,更多是设计架构上的区别。在编译上,Nvidia采用的是OpenACC的方式来做标记化语言,因此程序员可以简单的让并行化的部分执行在GPU内。
他再三强调:如果想让一部分程序在英特尔MIC上运行,另一部分在至强上运行,就会带来手工的编译操作,至少要把并行和创新来分开。按照MIC的架构,只有标记注释是个好选择——因此如果说不需要改代码就能获得并行化的效果,是天方夜谭。