首页->【向日葵云课堂】

80 0

       自1985年首款FPGA诞生以来,FPGA已经是一名在电子信息领域征战了30年的老兵,这名战功赫赫的老兵如今已经正式开赴了一个新的战场。从2011年Altera公司发布支持利用OpenCL来开发FPGA的SDK工具以后,采用CPU+FPGA构成异构计算系统成为另一种具有竞争力的解决方案。为了让更多网友了解FPGA异构计算系统的原理、架构和开发流程,《电子技术应用》特别邀请了电子科技大学黄乐天博士和电子科技大学“成电杰出学生”蒲宇亮电子技术应用·云课堂进行了一场公益演讲。

       虽然开讲时间安排在9月25日,一个周日晚上的八点,仍有100多网友参与了学习,随后几天学习人数已经超过200人。

       在演讲过程中,很多网友都提出了自己在学习CPU+FPGA异构计算中遇到的问题,授课讲师黄乐天、蒲宇亮都进行了详细的解答。

       感兴趣的网友还可以通过以下网址观看学习视频:

       http://webinar.chinaaet.com/zh-CN/Chinaaet/Youke/CourseDetail?courseId=541
授课讲师简介:

图片1.png

黄乐天,电子科技大学,讲师,博士,《FPGA异构计算》一书的第一作者。

《电子技术应用》著名专家博主:老莫(http://blog.chinaaet.com/molf)主要研究方向为:多处理器片上系统与片上网络;高能效并行计算系统;基于FPGA的新型异构计算系统设计与实现。

图片2.png

蒲宇亮,电子科技大学“成电杰出学生”,中兴通讯公司工程师。

研究生期就读于电子科技大学——Altera联合实验室,主要研究方向为基于FPGA的新型异构计算系统,是《FPGA异构计算》一书的主要作者之一。2016年7月以 “蓝剑”精英人才计划(该计划全国仅招50人)身份入职中兴通讯。

精华问答整理

问题:使用的平台是SoC还是PCIe的FPGA?

黄乐天(以下简称黄):我们两个平台都有使用过。SoC版本使用的是友晶公司提供的DE1-SoC开发板,基于PCIe的版本使用的是友晶公司提供的DE5-net,这二者在开发方法上并无本质区别,只是在开发流程和BSP支持上稍有不同。友晶公司的技术人员提供了很好的支持。

蒲宇亮(以下简称蒲):两者都可以,SoC资源较少,采用串口传输数据。若是对计算时间有严格要求则需采用PCIe传输的FPGA进行实现。

 

问题:FPGA异构计算目前在中国主要应用在那些领域?异构计算能够给这些领域带来那些新变化?

黄:FPGA异构计算在中国目前还处于“试用阶段”,有部分公司(因为他们没有公开报道也不太好直接点名)在预研或者实验阶段尝试在使用这一计算模式。但基于GPU的传统异构计算已经在并行计算领域得到了较大规模的应用,如超级计算机、高性能服务器以及某些专用仿真设备。

蒲:基于OpenCL的FPGA异构计算比较适合用在算法中存在大规模并行计算特性的系统中,类似传统的GPU并行系统,相比GPU系统能够带来更低的功耗和更好的计算能效,能降低运维成本。

 

问题:多核异构是指不同的处理器集成到一起?CPU与DSP、FPGA算异构吗?

黄:不同的处理器集成到一起只不过是异构计算的一个要素而已,更重要的是要用这些不同的处理器组合到一起去实现通用计算。这就涉及到一系列开发方法、流程和工具。如果不是去实现通用计算,其实就是一种独特形式的“嵌入式系统设计”而已。这部分内容在课程视频中有专门讲到。

蒲:目前研究主要是用专用硬件如DSP、FPGA对原来的CPU系统进行加速,但并没有进一步挖掘原系统的计算能力,未来商用的异构计算系统应该是主机端和设备端各司其职,将计算密度大的模块放在设备端进行加速,而将逻辑控制多的模块放在主机端,这样才能充分发挥异构系统的优势。

 

问题:异构的处理器时钟如何同步?

黄:并不需要时钟级别的同步,而是在系统级别解决同步的问题。利用的是多层存储结构,基于barrier的编程方法等使数据一致性得到保证即可。这是在任何多核心系统或者复杂SoC设计中都被经常采用的方法。如果对这个问题希望有深入的了解,应该阅读多核片上系统设计方面的书籍或论文。

 

问题:用ARM体系结构和X86体系结构作为Host,有什么区别吗?

黄:本质上没有区别,Host需要是一个处理器来实现“主控”的功能,完成一些“准备性”和“总结性”的工作。区别只在于ARM体系结构的处理器和X86体系结构的处理器在执行程序时本身性能以及能效上的差别。

蒲:Altera的SoC-de1开发板将ARM和FPGA集成到片上,相比X86体系中需要将数据在Host端和设备端传输,带来的好处是传输速度快,延迟小。

 

问题:Host和Device对OpenCL的效能哪个影响大?

黄:由于运算加速主要依靠Device来实现,因此Device的影响更大。但反过来说,OpenCL编程的时候需要考虑到不同Device的特性来对代码结构和代码风格加以优化。我们之前发表过多篇论文来讨论这个问题,在视频课程的最后部分有所介绍。

蒲:Device端影响更大,因为其计算密度大,在系统设计时研究将哪些模块放在Device端是一个关键点。

 

问题:异构计算主要用于哪些领域?

黄:目前主要用于运算加速,也就是高性能计算。但由于高性能计算用途广泛,因此也可以说异构计算可以被用于很多领域。包括但不限于金融分析、天气预报、大规模仿真等。

 

问题:KNN算法中FPGA仍然是加速器,多核异构与X86+FPGA有啥区别?

黄:我猜想这位朋友想问的是异构计算和利用传统的设计方法在FPGA上实现一个加速器之间有什么区别?这其实就是代表了开发方法的不同。用传统的设计方法在FPGA上实现一个加速器是将CPU上的软件和FPGA上的加速器分开设计,也就是传统的嵌入式系统的设计方法。而异构计算是在统一的开发平台,统一的编程模型下开发。使用OpenCL的编程框架使得CPU+FPGA架构开发“一体化”。

 

问题:开发者在适应异构计算时,采用的程序开发有哪些需要特别注意到的地方吗?

黄:这个问题很大,首先需要符合编程规范,其次需要根据器件的特点做一些代码结构上的优化。具体内容可以阅读《FPGA异构计算》这本书以及OpenCL编程相关章节。

蒲:需要具备并行编程的思想,在系统设计时最需要考虑的是模块划分。

 

问题:如果我必须处理大稀疏矩阵,最好是用循环双向链表,否则内存放不下,我已在CPU上实现算法了,有没有可能实现异构运算?

黄:这种情况下需要你改变算法,在适合于矩阵运算的编程方法(如向量运算)来加以处理,才有可能实现算法的并行化。这方面的并行编程技巧和算法优化需要学习,当然这比单纯的写CPU上的串行处理程序还是要难很多。

 

问题:GPU的OpenCL内核可以直接移植到FPGA上吗?

黄:很多时候需要修改,并不能保证能直接移植。但修改的部分并不一定太多,取决于具体的代码。

蒲:GPU的内核代码经过一定修改可以移植到FPGA上,这也是OpenCL强调通用性的表现。

 

问题:老师好!我想问的是,对于一个初学者。如果想进行FPGA异构计算的学习和开发,我所需要做的工作都应该包括那几个方面呢

黄:建议首先把OpenCL的编程方法学会。由于FPGA综合一次时间太长,所以调试代码很困难。因此如果学习OpenCL更好的平台是GPU,可以选择AMD公司支持OpenCL的GPU。

蒲:1.有C\C++编程基础2.熟悉GPU并行编程思想3.对FPGA硬件架构有一定了解即可。

 

问题:处理器之间的数据传输消耗的时间,是否会抵消耗费心血优化程序所带来的性能提升呢?

黄:这确实是一个问题。所以现在要靠几个方面来解决这一问题。首先就是单片化,把CPU和FPGA集成到一个芯片上,两者之间的传输时间可以下降。第二就是采用“设备间流水”方法来适当降低这方面的影响。第三就是异构计算的适用范围,目前更多的适用于高吞吐率的应用而非低延迟的应用。最新的研究还包括一些体系结构级的研究。

蒲:目前的内存访问机制限制了子系统之间的频繁交互,所以设计时应尽量将计算密度高的模块放在一起,从而减少传输延迟。相信随着硬件加速应用需求的增多,业界能够给出更可靠完善的解决方案。

 

问题:从前面讲的,异构更多的工作是在优化吧?

黄:一定程度上可以这么说,在AMD公司内部从事异构计算相关开发工作的工程师也常常被称为“算法优化工程师”。但从广义来讲大部分做实现的工程师其实都是在做优化,传统的FPGA工程师在实现算法的过程也可以认为是一个算法优化的过程。

 

问题:做异构计算开发与平常的FPGA开发来说,从思维、观念上需要哪些改变?

黄:需要从更高的层级,也就是体系结构的层级上面去理解整个系统的运行过程。而不是传统的RTL级关注的那些点。

 

问题:我现在想的是先对OpenCL在GPU的开发中具有一定的了解后,再进行移植到FPGA上。这样的思路对么?

黄:在初期学习OpenCL的时候这样的思路是对的,但是后期要想发挥FPGA的最大能效还需要对FPGA内部结构和OpenCL到FPGA内部资源的映射关系有全面的了解。

 

问题:FPGA可以运行多个内核程序吗?

黄:请蒲宇亮回答。

蒲:目前一个FPGA能串行运行多个内核程序,但无法同时并行执行多个内核程序。相信随着硬件虚拟化需求的增加以及技术的跟进,以后的标准中会对这方面有所支持。

作者于2016-10-10 11:47:34修改!
楼主可见