SDAccel 开发环境运用.docx

上传人:lao****ou 文档编号:834518 上传时间:2024-06-12 格式:DOCX 页数:7 大小:50.48KB
下载 相关 举报
SDAccel 开发环境运用.docx_第1页
第1页 / 共7页
SDAccel 开发环境运用.docx_第2页
第2页 / 共7页
SDAccel 开发环境运用.docx_第3页
第3页 / 共7页
SDAccel 开发环境运用.docx_第4页
第4页 / 共7页
SDAccel 开发环境运用.docx_第5页
第5页 / 共7页
亲,该文档总共7页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《SDAccel 开发环境运用.docx》由会员分享,可在线阅读,更多相关《SDAccel 开发环境运用.docx(7页珍藏版)》请在第一文库网上搜索。

1、SDAcce1开发环境运用赛灵思的SDAcce1开发环境为FPGA提供软件应用设计流程。赛灵思FPGA器件主要由可蝇逻辑架构组成,能让应用设计人员利用空间和时间并行性,最大化篁法性能或大型应用中关键内核的性能。位于这种架构核心的是由基于查找表的逻辑元、分布式存储器单元和乘法-累加单元构成的阵列。设计人员可以用不同方式组合这些元件,把逻辑实现在算法中,同时满足功耗、吞吐量和时延方面的设计目标要求。把FPGA架构元件组合为逻辑功能一直是便性工程人员的工作范畴,这个过程更类似于汇编层面的编码,与现代软件设计实务相去甚远。虽然常用软件设计流程早已脱离汇编编码的层面,但由于CPU编译和FPGA编译之间内

2、在的差异,FPGA设计实践的发展步伐要缓慢一些。在CPU和型领域,硬件是固定的,所有的程序均根据静态指令集架构(ISA)编译。虽然CPU和GPU之间的ISA不同,但基本的底层编译方法是相同的。这种相似性促使设计实践从手动汇编编码向使用OpenC1TMC、C和也等软件开发常用的编程语言进行编译、调试和优化的设计流程发展演化。在FPGA设计方面,设计人员能够为运行特定工作负载开发自己的处理架构。FPGA的一大重要优势就是能够根据特定系统需求定制架构,但这不利于FPGA应用开发中采用软件开发实践方法。六年前赛灵思开始积极的研发工作,通过开发一种把直观的软件开发设计循环引入FPGA的开发环境,来打破这

3、一障碍。面向OpenC1C、C和C的赛灵思SDAcce1TM能够让FPGA器件的应用编译、调试与优化方式类似于CPU和GPU的流程,而且在用于数据中心应用加速时,可将性能功耗比提升高达25倍。软件设计人员可以使用SDAcce1开发环境开发和加速众多功能与应用。下面介绍如何使用SDAcce1环境实现中值滤波器应用的编译、调试与优化设计循环。中值滤波器中值滤波器是一种常在图像处理中用于降噪目的的空间函数(图1)。中值滤波器使用的算法用围绕中心像素的3x3像素窗口,根据所有相邻像素的中值计算中心像素值。这一计算公式为:OutputPixe1ij=median(inputPixe1i-1j-1,inp

4、utPixe1i-1j,inputPixe1i-1j1,inputPixe1ij-1,inputPixe1ij,inputPixe1ij+1,inputPixe1i+1j1,inputPixe1i+1j,inputPixe1i+1j+1);编译运用OpenC1C等语言编写中值滤波器函数后,就进入开发的第一个阶段一编译。在CPU或GPU上,编译是软件设计流程中的一个必要的也是必然的步骤。目标ISA是固定而公开的,编程人员只需关心可用的处理内核数量和算法的高速缓存缺失情况。FPGA编译更像一个开放问题:在编译时目标ISA并不存在,逻辑资源还有待组合成处理架构,系统存储器架构也尚未定义。SDAcce

5、1开发环境中的编译器提供三项功能,可帮助编程人员应对如下这些挑战:自动在循环内的语句间和跨循环迭代提取并行性、根据对阵列的读写模式自动调用存储器架构、以及对给定FPGA器件内部基本逻辑元的类型和数量的架构感知能力。这三项功能对中值滤波器的源代码的重要性见图示(图2)Ofor(Inty0;yheight;y+)intoffsety*vid,th;intprevintnextoffset-widh;offset+width;for(intx=0;xwidth;x+)/Getpixe1swithin3x3apertureuintrgbSIZE;rgb0rgb(1rgb2input(prev+x-1)

6、;input;(prev+x;inputprev+U;:gb);rgb3rgb4rgb5rgb6rgb7rgb8inputoffsetinput;(offsetxnpu(offsetinputnext.+input(next;+inputs(next+uintresu1t=0;+x-U;+;+X+1;-U;x;X+1;/Iterateovera11co1orchanne1sfor(intchanne1=0;channe13;channe1+)resu1tI=getMedian(channe1r/Storeresu1tintomemoryoutputoffset+=resu1t;)图2-中值中值

7、滤波器的运算可以表达为由一系列由两个部分组成的嵌套循环。第一个部分负责从名为“输入”的外部存储器中阵列取出数据,然后把值存储在本地阵列“RGB”中。算法第二个部分是一个围绕getMedian函数的“f匹”循环。getMedian就是计算发生的位置。通过分析图2中的代码,SDAce11环境认为RGB阵列上不存在循环-承载数据依赖关系。每次循环迭代都有一个专有RGB副本,这个副本可以存储在不同物理资源上。从这个代码看出的SDAcce1环境的另一大特点是对getMedian函数调用的独立性。图2所示的算法版本在带有固定边界的“for”循环内部执行getMedian函数。根据滤波器的性能目标和所选的F

8、PGA,SDAcce1环境可以跨所有三个通道重复利用计算资源,或是分配更多逻辑,实现空间并行性,同时运行所有通道。这项决定相应地会影响如何为阵列RGB实现存储器存储。从应用编程人员的角度出发,上述步骤是透明的,可视为GNU编译器套件(GCC)中的-O1到-03优化。SDAcce1环境中的printf设计无需耗用额外逻辑资源即可提供此项功能。调试软件开发的一条公理就是应用编译不等同于应用正确。只有在应用在目标硬件上开始运行之后,编程人员才能开始发现、追踪和纠正应用中的错误,换句话说进行调试。CPU应用的调试是一个容易理解的问题,商业匚冏和开源社区提供有大量工具来解决这个问题。FPGA再度成为另类

9、。应用编程人员如何才能调试好创建用于实现一段代码的功能的软件,使之实现既定性能目标呢?SDAcce1开发环境借鉴了CPU环境的两个概念一一printf和GDB调试一一来解决这个问题。printf功能是软件编程人员工具箱中的基本工具。每一种编程语言都会提供printf功能,用于显示程序执行过程中主要应用变量的状态。对CPU器件而言,这就同监测寄存器状态一样简单。printf功能不占用硬件资源。就FPGA的情况来说,实现printf可能会消耗本可用于实现逻辑功能的逻辑资源。在SDAcce1环境中实现printf无需消耗额外的逻辑资源即可提供此项功能。该环境是通过将printf数据生成独立于解码和用

10、户表示层来实现的。就硬件资源而言,为printf生成数据会占用几个寄存器,在寄存器丰富的FPGA架构中这完全可以忽略不计。数据解码在针对FPGA的驱动程序中完成。通过让主机CPU执行printf的数据解码和表示层,软件编程人员可以在基本不占用FPGA资源的情况下使用printf0从CPU借鉴的第二个调试技巧是使用GNU项目调试器(GDB)等工具,在代码中各处插入断点和单步执行。编程人员可以使用SDAcce1环境的仿真模式,将GDB连接到正在运行的仿真流程。该仿真流程是对开发人员准备在FPGA器件上执行的专用硬件的仿真。在仿真流程环境下,GDB能够观察各种变量的状态,在代码各处插入断点和单步执行

11、。从应用编程人员的角度,这与GDB在CPU上工作的方式完全相同。优化完成编译和调试后,软件开发周期的下一步是优化应用。在FPGA上进行应用优化的原理与在CPU上优化应用一致。唯一差别在于方法不同。对CPU来说,需要细调应用代码,使之适应处避的高速缓存和算术单元的边界。在FPGA中,计算逻辑是为当前应用定制汇编的。因此决定优化约束的是FPGA的大小和应用的目标性能。使用SDAcce1的软件编程人员可以借助逻辑架构的灵活性,不必了解有关硬件设计的细节,即可构建高性能、低功耗应用。SDAcce1环境的编译器能自动优化计算逻辑。编程人员可通过对从代码调用的数据传输模式的分析来协助自动优化工作。图3所示

12、的是输入和输出过程中发生的中值滤波器代码与存储器之间的读写事务处理。miI111mi1miIIII11i:IIIIIIII附n勺/Keme1DataTransferg-Ii1I1111WriteOQRead1料工Kerne1ExecuiionKERfME1.medan.OX2B89F80OOF2ORUNNINGIIIIII!图3-存储器访问事务处理跟踪图中的每条垂直线代表一个到存储器的事务处理。绿条所示的是中值滤波器函数的活动时间。从图中可以看出,虽然中值滤波器一直处于活动状态,存储器事务处理之间存在明显的间隔。这些间隔代表的是中值滤波器从一个事务处理切换到下一个事务处理所使用的时间。由于每项

13、对存储器的事务处理只访问一个值,事务处理之间的间隔说明该应用存在严重的性能瓶颈。解决该性能问题的途径之一是在应用代码中明示地声明从外部存储器到本地存储器的突发事务处理。图4所示的代码片段使用了OpenC1C语言内核采用的async_work_group_copy函数。这项功能的目的是通知编译器每项对存储器的事务处包都是一个质含多重值的突发事件。这样能够更高效率地利用目标器件上的可用存储器带宽,并减少对存储器的事务处理总数。在图4的代码中,async_work_group_copy函数把DDR存储器中输入图像的全部行内容提交给内核数施路径向的存宿器。图5中的存储器事务处理迹线体现了使用async

14、_work_group_copy的结果。如图5所示,在存储器事务处理发生之前内核有一个建务时间,但这并没有体现在中值滤波器的原始代码中(图2)。for(int1ine=0;1ineheight;1ine+)1oca1uintIinebuf0MAX_WIDTH;1oca1uintIinebuf1MAX_WIDTH;1oca1uintIinebuf2MAX_WIDTH;1oca1uintIineresMAX_WIDTH;/Fetch1inesif(1ine=0)async_work_group_copy(Iinebuf0rinput,width,0);async_work_group_copy(I

15、inebuf1,input,width,0);async_work_group_copy(Iinebuf2,input+width,width,0);)图4-使用明示突发存储器传输的1这部分建立时间差异用于处理从代码中衍生出的逻辑。在图2的原始代码中,应用立即启动对存储器的单次事务处理,然后等待数据可用。与此相反,图4中的优化代码能判断是否需要进行存储器事务处理或是否内核的本地存储器中的数据已经可用。它还能让生成的逻辑背对背地调度存储器事务处理和覆盖读写事务处理。H;Device-jKerne1DataTransfer0,0GWriteO1ReadO-AKerne1ExecutioniKERNE1.3BO25(RUNNINGIiiiiiiiiiiiiiiiiiiiiiiiiiI11111111111111111iI1i1111111111111111

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 应用文档 > 工作总结

copyright@ 2008-2022 001doc.com网站版权所有   

经营许可证编号:宁ICP备2022001085号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有,必要时第一文库网拥有上传用户文档的转载和下载权。第一文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知第一文库网,我们立即给予删除!



客服