C++ Coder

HCP高性能计算架构,实现,编译器指令优化,算法优化, LLVM CLANG OpenCL CUDA OpenACC C++AMP OpenMP MPI

C++博客 首页 新随笔 联系 聚合 管理
  98 Posts :: 0 Stories :: 0 Comments :: 0 Trackbacks
http://www.csdn.net/article/2013-02-17/2814154-AMD_creat_HSA

摘要:在PC产业日渐颓势和移动行业方兴未艾的大环境下,AMD作为PC CPU芯片行业的两个供应商之一,如何在上下夹击的态势下突出重围,大家一直拭目以待。经过近两年的调整,AMD并非没有出路,他们已经为自己规划了三个快速发展的机遇:双核、异构、低功耗。而开放和开源的思维贯穿始终。

开放才是未来

早在2012年,AMD就高调宣布要设计基于64-bit ARM架构的处理器,而为了在2014年处理器问世前打造一条完整的软硬件生态链,AMD更是同ARM一起成立了HSA基金会(异构系统架构基金会)。HSA基金会倡导的是一种更简单、开放,同时还可以涵盖PC与移动设备(不光是跨 OS)的标准。目的在于通过基于GPU的并行运算来提升处理器的表现。比如图像处理器将不仅仅用于图像、游戏等方面,普通的任务和应用也可以用到它。


图:HSA帮助从服务器端到移动端提升效率、降低功耗

“虽然用OpenCL这个工业标准已经能达到这种效果,但这样的做法仍旧太复杂,而且主流的开发者也不容易接受。NVIDIA虽然大力推进自己的CUDA运算架构,不过CUDA和OpenCL是同一层面的技术,而基于私有架构的开发栈终将没落。”

AMD中国开发合作与解决方案中心总监楚含进坦言,目前AMD所有做的事情都是为将来某一段时间产品集中爆发做技术上系统储备。在HSA基金会中,其中的厂商从服务器到PC到手机厂商都会有,AMD将帮助各个伙伴更好的去驱动软件生态系统,促使软件里面的工具、软件里面的库、软件里面的开发环境让更多的人更容易的去使用。

“其次,我们将一直致力于降低功耗,这两年我们会把生态链去闭环运营。在中国来说,我们有一个开发团队会帮助国内的开发人员能够学会如何在GPU上进行编程;而在技术层面上,我们更希望能够向着平板电脑这个方向进行过度。 最终目的是在低功耗上推出AMD的一系列产品,x86和ARM双核并行战略。”

而从市场的直接反馈结果来看,AMD拥抱开放技术的策略也受到了开发者的一致欢迎。

作为软件开发人员尤其是学生开发人群,是AMD首先取悦的人群,在前不久举行的异构编程大赛上,AMD收到了40多个作品,从开发者的关注点来看,他们也正向着云计算、多媒体、移动互联网应用这些深层次的产品优化的方向,同目前的行业热点是有很好的契合点的。并且在相当多的参赛作品中,无论是学生本人,还是在导师的带领下,这些行业还是都比较容易产生有创意或者是有深度有质量的软件实现的算法或者产品的核心技术,而这些注定是未来软件公司差异化的核心。

从作品的类型来看,有数据搜索和数据的作品,也有算法优化方面的内容。而在多媒体、图形图像方面,比如损失图像的修复、二维图像的三维化、图像的拼接以及细化和分割,这些(技术)在很多领域无论是移动还是多媒体领域有着深远的意义。

对于此次大赛的结果,楚含进表示,“大赛只是AMD对异构编程技术的一个普及推广形式。根据以往的大赛经验,在作品的推广中,学生是不利的。一般参赛的大部人是年轻人,年轻人有干劲,但是他们有时只见树木不见森林。如果把大赛中学生的每一件作品拿出来,稍加深化补充,都可以成为一个很好的分子。但是把分子作为一个产品还要花一段时间的。所以AMD一直在思考能不能把学生做的引擎收集起来,不论是计划上的还是部分实现上的,让他们能够沿着这个方向更好的研究下去,产生一些有影响力的,不论是论文还是实际案例,抑或在他们自己的产品中能够把它延伸到自己研究的领域。”

“因此,从AMD帮助学生开发技术提高来看,会做三件事,第一是与CSDN一起来探讨利用学生的自身优势和他们本身已经完成的工作,继续能够指导他们做一些成果出来。我们不是只针对TOP10,甚至是TOP20。第二种是扶植学生能够真正的发布自己的作品,以及针对于当前工作真正有用的。我们给予他们业务层面的指导。还有一种想法是把他们的某一些业务成果提交给我们的客户,这样能把他们转化为真正的生产力。第三点是我们希望能够与CSDN形成一个比较切实的基于GPU的异构开发人群,然后把一些作品放在开源的社区来进行一些补充。这个项目本身不会成为一个独立运行的具有某种功能的产品模块,但是我们希望过开源社区的力量,把这些产品形成一种相对来说比较独立通用的一个库,并提供相应的访问接口。这样,越来越多的人就会去很容易的使用它,而且这样可以真正的培养开发人员尤其学生的软件产品意识。”

AMD结盟ARM, 横跨x86和ARM架构?

目前的芯片市场,实际上是有两大芯片阵营,ARM与x86两大阵营在博弈。在智能手机出现之前,是通用处理器的天下,这种通用处理器包括ARM、x86。实际上更多领域用的还是通用处理器,通用处理器时代,CPU的设计是个门槛,决定这个公司的成败。但随着智能手机和移动互联的大量实现,决定这个公司的未来是是否具有设计CPU以及设计多核CPU的能力。

“通用处理器的设计已经不再是门槛了,因为ARM已经把整个CPU体系帮你设计完成了。第二,Intel的x86处理器通用处理器也由于开始受到主机的云应用的影响。用户会问,问什么要用通用处理器来做这种非通用的应用?给我一个理由,这会是一个很大的问题。”从技术层面,这背后其实系统和产品设计日益差异化需求的问题。、

在未来的CPU发展趋势上也许我们可以看到几个趋势:一、像Facebook、Google已经把精力放在整个架构上,希望他们自己的服务器作为行业标准化,个性定制化?开发化,所谓的标准化就是说不需要限定在某种通用处理器,而是需要针对自己应用和系统架构构建专属系统。二、在移动领域,芯片设计的趋势是从通用处理器到SoC,而从SoC又逐渐是往专属领域有独特要求的处理器演变。这种情况下,生产通用处理器的公司会受到非常非常大的挑战,那么将来的局面会是,任何一个行业里面的任何一个公司所生产出来的芯片不会是万能的,应该是在本行业里有独特的特点,符合行业的趋势和需求。比如做手机的核心一定是通信功能,做游戏的核心一定是游戏的引擎,做服务器的核心一定是数据处理能力和带宽和在某个领域具有处理特定需求的能力。

“AMD对于GPU的发展技术上有很独创的见解,在游戏以及图形图像处理上非常的专注,所以这就是AMD能够走SoC和将来走可定制化专用服务器领域的一个信号”,楚含进表示。

可以看到,目前x86上很多的开源项目是集成在服务器领域里面,而传统的ARM则是集中在手机领域。两者本质的区别是x86的开源是集中在通用处理器上,而ARM在完善了基于以linux内核为核心的一套开源系统之后,更多的会布置在专用的领域上,比如基于ARM的多媒体应用、基于ARM的编译器,以及很多开源项目。随着开源的项目越来越多,在这个领域就会形成一定的技术门槛,尤其是软件技术门槛,所以x86面临的问题就是开发者为什么要用通用处理器去做非通用的事情。在这种大的背景下,如果所有的开源都是为通用服务的话,为什么还要用通用的软件去搭建一个需要特定处理能力的平台?所以在目标不一致、指导思想不一致的情况下,研发人员在做开源项目的整个方向就不一样。举个例子,比如开源项目Ubuntu,它在PC上的用户体验与在手机上完全不一样,虽然都是同一套Linux,都是开源搭出来的。它桌面的Xwindow系统都已经不再用在手机上了。如果你把Xwindow强行放在手机上,你所产生的成本,以及所占用的资源都会是很大的。那么在未来,ARM服务器和手机更交融的情况来看,ARM和x86两种开源社区也会出现交融的情况,这种交融会带来更多独创的开源项目。比如在ARM上运行的底层软件,能不能实时的在x86上运行,x86上运行的软件能不能不改动任何代码就放到手机上运行,现在已经有一些好的开源项目在开始做了,比如LLVM项目。

ARM和x86在服务器市场的争夺将愈演愈烈

另一个值得关注的领域在于服务器,标志性的事件是,以Facebook、百度为首的互联网企业已经在服务器端开始大量采用ARM架构作为存储服务器。

对此,楚含进认为,如果把web接入、存储服务器等高并发但轻量级应用作为当前云计算重要的落地形式,则云计算反而是ARM服务器在服务器的主要切入点。而在大数据、科学计算等领域,ARM要走的路很长。毕竟通用处理器在高性能计算,尤其是密集型计算中还是占有得天独厚的优势,包括其软件。但这并不妨碍大家看到,在移动终端硬件竞争和服务器硬件竞争上面,实际上服务器还是属于蓝海。

“百度用ARM不完全是基于价格的考虑,而是基于未来百度把自己的软件按照专属领域的业务特点然后来配备相应的硬件而做的规划,这种规划会使自己从供应链、软件、硬件的生态系统当中变得标准化和开放,同时也会降低整个的成本。毕竟百度是以软件为生存的一个公司,而ARM的服务器也只是有限的部署在在百度的某些服务领域,占很小的一部分。”

那么未来服务器芯片领域的格局是什么呢?以前服务器领域传统的格局只会是HP、DELL、IBM这些公司,而ARM服务器的出现会使得芯片公司有机会在设计服务器,或者说是类服务器的技术门槛降低。因为原来只能在x86服务器上做的东西现在有可能用低成本的ARM服务器来替代。而对于芯片厂商来说,会使许多原来认为“在x86领域做服务器门槛很高”的企业进入这个领域。这也对以前老牌的服务器厂家提出了巨大的挑战,也就是说他如何去面对现在终端和云端这种相互的格局下能够定位自己的产品。第二,在移动端,有着很深厚背景的公司,比如某些移动芯片制造公司,他们进入服务器领域也是有可能的,因为他们本身对ARM的技术并不缺乏,而且对自己所做的业务也很熟悉,软件能力也很成熟,唯一缺乏的是制造服务器芯片的一颗芯。其实,很多公司已经制造出了具有服务器功能的ARM架构芯片,可是我们要看到,这并不代表他们能够制造出真正意义上的基于ARM服务器和打造完整的ARM服务器软件生态系统。

“很多ARM的服务器要考虑的不仅仅是功能上的,还有背板总线、内存技术、主板布置技术、电源布置技术等,这都是做服务器厂家和做移动端厂家不同的地方。现在ARM的服务器刚刚开始,原来的服务器一家独大的场面会逐渐变得市场细分,会使更多的芯片厂商进入服务器领域中来尝试走出自己的红海到另外一个蓝海领域中扩大自己的阵营,AMD是有限的具有制造服务器芯片和打造服务器生态链的基因的公司,这一点是其他厂家无可比拟的,对于AMD 的ARM服务器未来一定会引起产业的格局变化”

从公司的长远技术趋势来看,AMD肯定不会放弃x86的;ARM短期内在科学计算等高性能领域可能不大有很好的作为,因为其指令集架构和应用生态系统不是完全为这方面服务的。那么AMD基于ARM的异构和x86的异构在未来会不会在高性能领域成为主导呢?

楚含进表示,未来基于APU的服务器,不管是ARM异构还是x86异构,一定会为高性能领域带来非常非常重大的影响,会在很多在非结构化数据处理方面能够产生非常深的影响。因为在现在大数据的前提下,一些非结构化数据的处理,有的时候不能完全靠CPU的处理能力,要靠GPU和CPU的协同处理能力才能更好的有效的完成。目前中国有很多客户对异构服务器都非常感兴趣。而其实APU服务器的出现,并不是简单的CPU和GPU的合成,而是整个系统框架的变化,是主板布局的变化,最重要的是业务模型,编程模型的变化,整个业务的部署也会随着在不同级别服务器的部署产生很大的变化。这些都会为业界带来很好的机会。至于下一代高性能计算的趋势,我认为不是简单的CPU的编程或是GPU的编程,而是要看业务,而且业务应该是与云计算绑定在一起的。开发人员与业务人员会去考虑是单纯的利用CPU还是异构服务器。

而在高性能计算领域,GPU现在还是作为CPU的协作处理器存在,通过PCIE传输数据,对异构计算而言,这似乎是一个严重的瓶颈。

楚含进认为,GPU现在有两个问题。第一,硬件瓶颈问题,就是GPU与CPU之间的通讯和数据搬迁造成成性能功耗的问题。第二,GPU作为一个协处理器或者将来作为一个可编程处理器,如何让用户更容易编程,这是GPU如何作为通用处理器的第二个瓶颈。

“AMD目前做了两件事情,公司的大策略是低功耗,包括嵌入式,所做的一切都是为了低功耗。APU实际上是把CPU和GPU结合起来做了一个架构叫做Heterogeneous System Architecture(HSA),这是一个异构的架构。目前LG、三星、高通都已经和AMD在加入HSA基金会之力于异构系统结构的标准化,涵盖服务器终端到桌面的领域。这个架构最大的解决了两个问题,第一,把CPU与GPU进行更紧密的结合,不仅在实际上减少了数据在CPU和GPU之间传输时产生的功耗,更对很多程序来说是莫大的帮助;第二,我们在HSA上为GPU开发出一套非常容易让高层的编程语言人员能够使用的工具,这个工具不用太多的考虑GPU里专有的编程语言。我们立足于希望这些开发人员利用这种工具能够对自己的业务了解即可,而不用考虑GPU,而最终把GPU变成通用编程的模型。为了做到这一点,我们提供了HSA编译工具、可调式的工具、基于开源的中间件。”

“在未来,我们真正的基于HSA的APU产品出来之后,你会看到对GPU的编程模型会彻底的改变。因为在CPU和GPU的通讯架构上做了很彻底的改变,而使得CPU和GPU的数据的传输可以不通过内存拷贝,这也就达到了省电和低功耗的目的。AMD把这种技术作为长足的发展,这种技术会用在我们的服务器领域,也会用在未来的PC机领域,同时也会用到低功耗的产品领域。”同时不要忘了,当我们说异构,不单单是指GPU和CPU,AMD的APU的SoC内同时集成了如入视频编码,解码,音频处理,内容安全等专用的处理模块,同时提供特定的编程接口,这也是异构的表现。

给开发人员的建议:如何避免同质化开发?

在中国,好的开发人员非常多,这一点从异构大赛可以看出,有些产品的创意,性能和应用领域都非常有商业和学术价值;好的产品规划师也很多。但是中国做出来的产品同质化非常严重,针对某一应用领域做出自己专属产品的框架前提的指导下,以前只要掌握编程可能就能开发出应用,但是现在就不一样了。楚含进认为,对目前的中国软件开发人员而言,目前的市场大环境对他们提出了几个方面的需求:

首先,架构人员应该有全局观,不但要对业务领域有所熟悉,而且更需要拓展与此专业领域相关的知识领域,要想办法利用现有的各种技术来时自己产品在性能,特性产生差异化和提高技术门槛,从硬件,软件,算法,性能综合考虑,而不是单纯吧摸个产品功能实现就可以。这样就能使你们的产品变得与众不同。

第二,要有原创精神,培养自己内功,现在的技术,流派太多了,软件人员一辈子也学完,等你学会了这个,结果新的潮流来了,好像总是落伍。有一个例子,大家都去学hadoop, 我问了很多人去学Hadoop干什么,居然没有几个回答我,只是觉得这个东西很热,所以去看看,盲从的心理不会产生好的软件产品。所以我建议要对自己学习的东西有所判断,要关注新的技术产生,对新技术要敏感,用于尝试。现在的代码程序员太多,思想成员太少了。

最后,对于软件人员,我特别希望无论你是应用层还是底层的开发人员, 都应该去了解计算机体系结构,了解CPU和GPU的方向。CPU和GPU一定是未来硬件的两大软件承载核心,所谓先知者先行。以前GPU很多停留在游戏行业,但是随着异构计算的到来,GPU和CPU融合产生应用的变化,很多有前瞻性的软件人员早已开始涉足此领域来占领先机。(文/谭茂 责编/包研)

posted on 2013-02-19 08:40 jackdong 阅读(409) 评论(0)  编辑 收藏 引用 所属分类: 杂文收藏

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理