异构计算是解决计算能力和功耗瓶颈的有效途径之一,尤其随着大数据时代的到来在未来将会获得更进一步的发展。日前,CSDN专访了清华大学电子系电路与系统研究所副教授汪玉,他就异构计算的技术演变、开发现状、AMD新推出的hUMA技术等话题分享了自己的看法。他认为异构计算的发展趋势是硬件先行、软件作用日趋凸显的一个过程。

1.  CSDN:请您先简单介绍一下自己以及目前主要关注研究的领域。

汪玉:大家好,我叫汪玉,清华大学电子系电路与系统研究所副教授,所带小组主要从事异构硬件计算、三维集成电路设计等领域的科学研究。具体关注研究的领域有:图论分析方法的并行加速及其在脑网络分析领域的应用;基于FPGA,CPU,GPU的多核异构计算;数值计算,稀疏矩阵算法等。

2. CSDN:您如何看待异构计算/编程领域这些年来的技术演变、应用拓展状况及未来发展?

汪玉:异构计算是解决计算能力和功耗瓶颈的有效途径之一,尤其随着大数据时代的到来在未来必会获得更进一步的发展。异构计算的发展过程来看,异构计算从单纯挖掘并行潜力、到具有加速器的异构计算、再到针对特定应用域定制的计算平台、到多种平台的高效融合,这种发展趋势是硬件先行、软件作用日趋凸显的一个过程,目前的编程已经可以对多种平台的高效利用。

但是目前异构计算基本还是停留在科研层次上,应用拓展状况要远逊于科研的脚步,缺乏大公司、出货量大的产品是最重要的一个问题,当然基于异构计算平台的编程比较困难也是制约其普遍应用的原因之一。所以缺乏终端消费者的支持,异构计算的产品环节可谓刚刚开始。未来的复杂应用必然促使异构计算走到台前,但这可能未必是一个百花齐放的过程,真正的寡头应该会出现。而部分定制化的需求应该是具备虽少量却高端的特征,由高性能的硬件可重构来完成。

3.  CSDN:作为领域内的专业人士,您认为哪些开发者应该优先学习异构编程的技能?未来异构编程的技能会成为开发者的通用技能吗?

汪玉:图形计算、认知计算、大规模数值计算等相关内容的研究者。异构编程可能还不会成为开发者的通用技能,因为目前可能只有较为少数的数值计算问题通过特定的加速器比如GPU可以达到非常好的效果,但是对于一些较为复杂的解决实用问题的算法(比如启发式算法等等),每一步的关联性可能比较紧密,访存的不规则性比较严重,很难利用并行化进行加速。同时,复杂的数据结构也很难在其他非CPU平台是实现。而且不涉及大规模数据计算的开发者可能没有使用异构编程的必要。

但是未来的异构编程可能也会有更加完善和更加方便的工具来支持。对于一些特定的pattern,相应的工具可以自动的找寻最优策略从而不需要研究人员在并行计算上有丰富的经验,也就是说可能会出现某种编程模型比目前的常用的编程模型更为简单且完美支持异构平台及单独的CPU平台,不需要开发者过于底层的编程技能。有一个中间层可以有效地调度用户的编程需求,因此除了会对体系结构、compiler、EDA等领域带来一定压力外,编程人员掌握的基本技能也不需要过多扩展。这样的编程模型可能会成为主流。

4. CSDN:您如何看待AMD最新推出的hUMA(异构统一内存访问)技术对GPUCPU融合带来的影响力,它有哪些优势和劣势?

汪玉:优点:编程更加方便,节省了CPU和GPU的通信代价。如果CPU和GPU能够统一虚拟地址空间,这对GPU的编程大有好处,可以省去对指针类数据结构的重构和CPU与GPU之间的数据传输,CPU与GPU可以更好的协调工作,方便了开发者对于数据的重复利用。

可能的缺点有:当前独立显存都采用大带宽的GDDR5,如果统一内存访问,GPU将采用主机内存作为显存,不再具有这样的带宽优势,需要以大容量的高速缓存作为补充。也就是说目前存在的PCIE的带宽瓶颈无法解决,在统一访存的基础上,可能需要降低GPU的访存带宽以匹配CPU的访存。所以,这一技术如果不匹配大量高速缓存,有可能对于数据占主要的计算(throughput computing)并没有太大的好处。

5. CSDN:HSA帮助开发者更高效、更容易的进行开发,并获得可观的性能提升及功耗降低,但这还需要一至两代产品更新才能实现。在当下,开发者学习和使用异构编程有价值吗?

汪玉:就我们之前所做的工作带来的经验来看,挖掘算法并行性的思想是有价值的。对于许多数值计算问题,采用GPU进行加速可以很大的提高计算性能。而且算法的思想往往都是通用的,开发者现在学习和使用异构编程,未来面对新的硬件或编程模型会更加有经验。

但是就对底层硬件架构的了解而言,我们目前主要积累的是OPENCL和CUDA方面的编程经验。一个开发工具需要有延续性,先出一个底层工具,再用高层次工具替换,那么编程人员现在根本不需要过多的了解过于底层的信息,就算了解了以后基本也用不上。

6. CSDN:你如何看待未来的芯片格局?

汪玉:如果无法跳脱冯诺依曼体系结构,CPU的地位不会动摇,未来的芯片格局还是会以CPU为主,其他的特定的加速器基本上还是会针对一些特定的应用。而未来的异构芯片可能将由主控核心和多个计算核心组成,即一个CPU外加多个不同功能的辅助芯片。有共享的存储器,每个核也可以有独立的存储空间。计算芯片会向着简单众核的方向发展,以提升效率功耗比。

从商业角度来看,中低端包括移动领域的芯片竞争会比较激烈。所以低功耗、定制的ARM会逐渐凸显优势(当然已经是事实)。性能未必要求多么强大,但各方面成本要足够低。Intel虽然“老态龙钟”,但高性能计算方面依然有他的优势,而且凭借多年的积累,应该有一席之地。ARM会在电视、电器、手机、平板等一系列产品中夺取份额。至于GPU厂商应该也是高性能领域玩玩罢了,低端或者说出货量大的领域可能不会需要过于复杂的GPU的,而且技术不会出现壁垒(做个i7不容易、做个arm还是不难的,一个道理)。

7. CSDN:如何看待在高性能计算计算领域流行的CPU/GPU异构计算并获得高性能低功耗在移动平台的运用?

汪玉:首先需要考虑的是如何定义高性能计算,如果高性能计算代表一些复杂的大数据量的分析,那么移动平台不适合也没有必要用来做高性能计算。

但是如果这里的高性能计算只是代表类似于高画质游戏的渲染等操作,那么就像CPU/GPU的架构在PC机上的应用一样,在移动平台(如智能手机、平板电脑)的运用已经是大势所趋。不过需要保证移动平台对于低功耗的要求。

所以在移动平台上的CPU及GPU往往都是较低端的低功耗版本,性能和功耗间折中,像ARM一样。GPU厂商已经有了低功耗的GPU产品,移动终端肯定没问题。问题是这个技术壁垒小,能抢占的未必是NV和AMD。

8. CSDN:C++大师Herb Sutter曾发表过一篇著名的文章《The Free Lunch Is Over》,他表示程序员不断获取硬件升级带来帮助的日子已经结束了,并行计算或异构计算将是未来的趋势。

汪玉:Intel在内的公司不断推出了多核、众核处理器,虽然包括AMD和Intel等公司做了很大努力,开发者驾驭多线程的编程难度很大,现在学习异构开发的难度依然很大,开发工具、函数、算法成熟吗?现有开发工具基本能够很好进行异构的开发,但是比起单线程的开发,难度大是毋庸置疑的,如何发掘算法的并行性,如何针对特定的硬件进行优化都存在难度。开发工具、函数、算法等只能说还处于发展的阶段,而且基本上每个厂商都会有适于自己硬件的开发工具,缺少统一的标准。

虽然Intel,AMD,Nvidia等都提供了针对自有平台高度优化的常用函数库,能够满足部分需求,但是这些库并不完善,例如稀疏矩阵的算法库就太少。同时对于特定的应用而言,很难有非常合适的函数库相匹配,而现有的官方文档对于异构开发中的性能优化方面的指导又太少。

此外很多用起来成熟的工具本质上不够高效。这也是目前异构计算只在科研机构得到应用而在商业机构没有得到很好应用拓展的原因。异构计算只有硬件、软件同步发展,开发人员才会买账。

9. CSDN:对想学习或入手异构编程的开发者有什么建议吗?

汪玉:对于目前的异构编程而言,还是要先对平台的体系架构,即底层信息,如峰值参数、调度策略等等有一定的了解,因为在例如GPU、FPGA的平台上进行编程,对于硬件的体系架构的理解可以更好的帮助开发者进行针对性的优化。当然也可以只掌握最基本的多线程编程即可,等待较高层次的编程模型及开发工具的完善。(本文由付江采访,夏梦竹整理成文)