基于FPGA的OpenCL入门教程_第1页
基于FPGA的OpenCL入门教程_第2页
基于FPGA的OpenCL入门教程_第3页
基于FPGA的OpenCL入门教程_第4页
基于FPGA的OpenCL入门教程_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1 OPe nCL 规范OPe nCL是第一个面向异构系统的通用编程架构。为了给开发者提供一个支 持手机终端GPU开发的通用APl ,苹果公司在2008年的开发者大会上提出了 OPe nCL标准的草案,之后由非盈利性技术组织 KhrO nos Group根据苹果公司的 草案制定为异构计算标准,并一直由该工作组维护升级,目前OPenCL 2.0己于2013年正式发布。OPenCL异构计算标准从发布至今己取得了较大的成功,得到了业界众多企业的支持,包括苹果、 AMD、英伟达、AItera、英特尔、IBM、赛 灵思、ARM、德州仪器等众多知名企业。目前常见的异构计算平台包括GPU,FPGA, DSP

2、 (Digital Sig nal PrOCeSSOr等。OPe nCL规范由四个部分组成,每个部分都有对应的模型进行描述,包括平 台模型、执行模型、内存模型、编程模型。其中,平台模型是对异构系统硬件模 型的高层抽象描述,它定义了异构系统由一个主机(HOSt)和一个(或多个)设备(DeViCe )组成,主机用于协调整个系统,设备用于执行OPe nCL C代码,被设备执行的OPenCL C代码又称为内核(Kernel )。执行模型定义了主机中的 OPenCL 环境是如何配置的,以及设各上的内核是如何执行的,具体包括:在主机端配置上下文、建立主机和设备通信的机制、定义设备端内核并行描述的机制。内存

3、模型定义了内核使用的抽象分层存储模型,此模型虽然比较接近现代GPU的内存结构,但它与具体的硬件架构无关,对其他加速设备不存在任何限制。 编程模型 定义了内核并行执行模型与具体硬件结构的映射关系。2 基于FPGA的OPenCL平台结构OPe nCL异构计算标准最大的优点在于它能支持所有的硬件加速平台,FPGA作为一种新型的异构计算加速平台,其推广和应用正处在起步阶段。FPGA主要组成部分为可编程输入输出单元(IOB,IO Ba nk)、可配置逻辑块(CLB, Configurable Logic Block)、时钟管理模块、嵌入式块 RAM ( BRAM )、布线资源 等如图2.11所示。传统的

4、FPGA开发门槛较高,设计者不但需要掌握硬件电路 的相关知识和FPGA底层硬件结构,还需要了解硬件描述语言等知识。而且传统 的FPGA开发方法较为复杂,开发周期较长,尤其是高性能计算和大数据处理的 相关应用,其FPGA的开发项目将非常复杂,往往需要耗费较多的人力资源。 采 用OPenCL标准进行FPGA的开发大大缩减了开发周期,降低了 FPGA开发的门 槛。ffl 1.11 FKSA % H踣押圏11耳2.1基于FPGA的OPenCL平台的设计流程与传统工具的不同之处在于用户开发的程序并不是在固定架构处理器上运 行的,AOC (Altera's OPenCL Compiler)可以将采

5、用高级语言描述的 OPenCL内核 编译转化为在FPGA上运行的硬件逻辑电路。在处理能力及功耗等方面,有望获 得与制作专用硬件时接近的性能。具体而言,可将按照OPenCL标准开发的程序 中的加速器用程序(在 OPenCL中称为“内核”程序)转换成FPGA上的逻辑电路, 并将其作为FPGA的配置数据输出。运行时,主机端的程序会通过OPenCL用运 行库,要求已被写入这些配置数据的 FPGA进行内核处理。该工具的最大优点是,程序员可在不具备硬件设计知识的情况下生成FPGA的配置数据。使用以前提供的开发工具,也能将以C语言编写的程序转换成FPGA 上的逻辑电路。但是,要让逻辑电路完成数据处理工作,需

6、要由CPU通过某些通信接口收发数据,而且为FPGA连接外部存储器的话,还必须设置存储器控制 器等。因此,程序员需要具备可设计具备各种外围电路的系统LSI的知识。如图3-1所示,C语言自动生成FPGA硬件电路。其中主机程序利用 OPenCL运行库 API以及C/C+语言编写,内核程序使用由C语言扩展而来的“ OPenCL C''语 言编写;在编译器生成的文件中,X86使用的二进制文件与SDK提供的OPenCL 运行库一同运行,而FPGA的对象文件是用来配置FPGA,自动追加外部接口机 内部互联电路的。Ci/) d.FPGAJjf1 WOEk-TJCLUFPGA'dj.UM

7、!1 IMUl S- H "wi4i iI: ii-" JCMWftk ul*¾!Jili. IriUy=JIre;Hfc-FEtTa1r*皿饪僅IJP |WKitlSp< ,rtrtCLiMS*EieC.Qpcofn 5 fllr4 0, 习使用AItera OPenCL SDK的设计流程,可将根据OPenCL的规定编写的外部 设备用内核程序转换成FPGA上的逻辑电路。AItera采用的方法是未降低FPGA 本身所具备的灵活性,而是提高了方便性。2.2基于FPGA的OPenCL平台的访存机制OPenCL内存模型与实际存储器体系结构无关,它定义了内核程序在设

8、备上 执行所用内存空间的抽象内存体系结构。OPe nCL将内核程序中用到的内存分为了全局内存(global memory)、常量内存(COnStant memory)本地内存(local memory) 和私有内存(PriVate memory)四种不同的类型。各类内存的管理和使用如表2-1和2-2所示。表2-1主机对内存空间的管理和使用方式全局常量本地私有Host(主机端)访问:可读写可读写不可访问J不可访问分配动态动态动态不可分配“汩耳#点Wrt1 .再?¼1表2-2 kernel对内存空间的管理和使用方式全局常量本地私有KerneI(主机端)访问可读写只读可读写可读写分配不可分

9、配静态静态静态这些不同的内存区域与平台模型的交互关系如图2-3所示。' jf -Tit 4Siz-J不同内存IK域打TfF横电的交互FPGA的内存层次结构较少,与 OPenCL标准的内存模型有较大的差异,如 表2-1所示为FPGA平台的与OPenCL规范内存模型的映射关系。«2-1内存模型映射关系CPCnCL内奇模眠FPCrA 设 内存位賈全局內存(glbftlInem(Xy)DDR2片孙本地内f UQCiJniemory)M9K片上'2:Jr-内"(ConStLiL niemCIry)C汎甘h片上轧肖内存PriI LIIe eiry )RtJfflster

10、片上因为FPGA和主机在内存结构上是相互独立的,它们对自己的内存空间的操 作一般是互不影响的,但是在很多情况下,主机和FPGA之间的内存空间需要交 互。在OPenCL里有两种方式来实现此类交互:复制数据和内存映射。复制数据是指主机通过相应的API函数将主机里的数据写入到OPenCL设备 的内存中或者主机把OPenCL设备内存中的数据读出到主机内存中。 这种交互方 式是通过命令队列来实现的。内存映射的方式允许将OPenCL设备内存对象通过相应的API函数映射到主 机中的可见内存空间中。这样就可以直接在映射到主机端的内存空间实现对 FPGA内存的读写。2.3基于FPGA的OPenCL的系统实现图

11、2- 基于 FliGA 的 OPalCL 现如图2-9所示为采用OPenCL标准实现FPGA设计的系统框图,主机采用x86 架构或其他架构的处理器,从机为 FPGA设备,主机与从机通过PCIe接口进行 交互,加速设备中内核的实现采用流水结构。从该系统框图中可以看出,基于 OPenCL标准进行FPGA设计的整个系统中包括多组并行执行的内核流水线和连 接它们的逻辑电路,这些逻辑电路将执行相同内核程序的流水线通过存储器互联 结构连接到片外的存储器接口 ;Altera的OPenCL编译器通过建立外部存储器控制 器和PHY的互联结构来实现外部和内部存储器的数据通信,建立交互接口。每 一级流水线上的负载及

12、内存对象里的存储单元通过全局互联结构连至外部的存 储器,并使用该全局互联结构对多个内存访问操作进行仲裁。OPe nCL设备里本地的存储器通过本地专用的本地存储器互联结构来实现对片内的存储单元进行 访问操作;FPGA作为OPenCL的平台设备通过PCIe高速接口实现和X86主机的 交互。AItera提供的OPenCL SDK在编译时还可以在由内核程序转换而来的逻辑 电路上,自动追加用来与主机处理器通信的 PCI EXPreSS接口、外部存储器控制 器、内部互联等固定电路。由此,能够以最终形成系统LSI的形式输出配置数据。 只将内核程序转换成新的逻辑电路。 关于用来和主机交换数据的接口电路、 存储

13、 器互联电路等,均会自动追加固定电路。3 基于FPGA的OPenCL优化技术在数据传输方面,全局内存通常映射为设备上的2片DDR DIMMs, FPGA访问全局内存带宽可以达到12800 MB/seco nd。大多数情况下,为了提升计算吞 吐量,我们需要将系统内存的数据传入设备内存,然后再启动FPGA内核程序进行计算。主机与从机通过 PCI-E接口与主存进行双向数据传递的,然而一个 PCIe2.OX16的数据传输理论带宽是 8GBsecond,小于FPGA访问设备内存的速 度。所以在很多情况下,设计合理的数据传输策略是提升 FPGA计算效率的重要 方法。并行计算并行优化为加速应用的通用手段,通

14、过分析软件算法的可并行性,将计算任务分配到不同的硬件处理单元进行计算, 便可大大地缩短运行时间。针对并行计 算,分为数据并行和计算并行。数据并行指将不同数据分配到具有相同计算功能 的处理单元进行计算,这里处理单元可以指IP核或者IP核内部计算部件;计算并 行指不同非依赖计算任务并行执行或某一计算任务的内部并行性优化,比如说采用加法树来优化累加操作。流水线和向量化在数据处理方面,为了提高硬件资源的利用率,流水线优化是采用FPGA和ASIC设计加速器的一大优势,可以在原有的单流水线基础上进行流水线的复制 形成多流水线,其本身也是通过提高并行性来增加系统的吞吐量。通常情况下, 每一个内核流水线都可以

15、同时被多个工作组执行 (取决于流水线的延时和每个工 作组中工作项的数量)。通常采用引入多组寄存器将组合逻辑分为多个组合逻辑 小块,来降低组合逻辑块内的延时。流水线并不能减少单个数据进行逻辑计算的 时问,事实上考虑寄存器的时间消耗会, 反而会稍微变长,但整体上随着流水线 深度地增加,整体运行时钟周期会大幅度减少。 通过分析计算过程的依赖性,消 除控制和数据冲突,来让流水线以理想状态下运行,保障加速器的高吞吐量。除此之外,还有一种提高硬件资源的利用率的方法:内核向量化,向量化可以 使多个工作组以SIMD的方式进行工作,如图2-14所示为向量化前后数组加法 的结构对比,向量化之后,每个工作项将同时完

16、成 4组元素的加法。全Fi内青-£ f-.IiLiKfJ叫i<+÷+ L_id:徉2 14内權向量化示京胡流水线和向量化这两种方法都可以提高系统的吞吐量,在一个内核中,两种方法是可以同时使用的,然而这两种方法的原理却不相同。如图2-1_5所示为流水线复制与向量化的结果对比图,当使用流水线复制时,此时编译器将根据设计 者指定的次数复制整个内核的流水线, 对不同工作组的工作项进行优化。当使用 向量化时仅对同一个工作组里的工作项进行优化,并且只对流水线的数据通路进行复制,而通过访存聚合共享控制逻辑。 所以通常情况下,使用内核向量化比使 用流水线复制具有更高的硬件利用效率,同

17、时向量化将使编译软件采用访存聚合 进一步优化内核代码43当设计者在使用流水线复制的同时,由于内核流水线的整体复制,全局内存 管理的数量也将随之增加,然而使用内核向量化只是增加了内存读取与存储的宽 度。全局内存管理数量的增加将导致访存系统更加复杂,向量化将减轻这种情况。JJU内咳空 1 IQJ林:F-I S¾S2内f_L2J ±> 1LLaJ陀瑋<l2-1S向流水須复制魏杲对龙存储访问优化通过对软件算法数据局部性分析,获取数据计算时复用频率以及复用距离, 再根据硬件结构,缓存至不同层次的存储结构中,减少运算单元访问内存次数, 从而带来性能提升。首先是合理使用BUf

18、fer类型,避免无谓的数据传输,即在多个内核顺序执行 的情况下,尽量使数据停留在设备内存上面,这样在下一个内核执行前就不需要 重新从系统内存传入数据了。另外,当一个内核计算过程中需要存放中间数据的 时候,可以选择在设备内存上申请空间来存放, 这样这块内存既不用传入数据也 不用传出数据,只要在内核运行完成之后对其进行释放就可以了。其次是在传输数据量不变的情况下,提高在 FPGA上计算量的比重。假设我 们要在数据集A上面进行计算,一共有 P个线程参与,每个线程平均需要访问 Q个数据,那么数据操作的总量为(P*Q)。对数据集A进行操作,一般我们可以 简单的认为传输数据的算法复杂度为 O(P*Q)。而

19、在FPGA中计算的复杂度需要 取决于具体的算法,比如在每个线程上只取2个数据然后进行一次乘法运算,那 么总体的FPGA算法复杂度可以认为是 0(P)。与数据传输相比,这个复杂度明 显过低。如果我们在每个线程上取 Q个数然后进行一次累加运算,那么总体算 法复杂度可以认为是O(P * Q),与数据传输的算法负责度相当。但这样还是不够 理想,因为进行一次内核运算往往需要两次数据传输(不考虑把结果数据停留在设备内存的情况)。所以为了平衡数据传输带来的性能损失, 应该尽量提升FPGA 计算量在总体计算量中的比例。在存储访问方面,对全局内存应尽量利用数据访问的局部性采用内存聚合,一次内存操作即可读取或写入多个数据, 大大提高数据访问的速度,除此之外,内存 聚合还可以减少FPGA中内存管理

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论