2019-09-03 15:56:11 botao_li 阅读数 103
  • 使用Snapdragon Profiler深度分析优化你的游戏

    Snapdragon Profiler提供四种分析模式,几十种硬件指标帮助分析调试应用性能以及渲染等问题。对于开发者尤其是和功耗、图形图像处理相关的开发者来说,Snapdragon Profiler将是您一个很好的帮手,它允许开发者分析CPU、GPU、DSP、memory、power、thermal和network数据等,从而帮助开发者根据这些数据进一步进行修改和优化。

    971 人正在学习 去看看 CSDN讲师

概述

目前实时图像处理的硬件主要是 FPGA、GPU 和 DSP 三类。从笔者的开发经验来看,FPGA 以其实时性和灵活性占据主流;GPU 虽然不及DSP应用广泛,但是随着开发技术逐步升级和性能逐步提升,以及 DSP 技术自身的没落(个人观点,不讨论),GPU 在某些特定场景下可能是更优于 FPGA 的首选。

本系列文章主要说明基于 Xilinx FPGA 的实时图像处理。虽然 FPGA 开发用的 HDL 语言与 Intel FPGA(前身 Altera)通用,但是比较开发工具软件差异的话,还是 Xilinx 开发效率更高。

相关程序的开发软件环境为:

  • Vivado 2018.2.1 System Edition
  • Matlab 2017b

算法中的计算部分主要使用 Vivado 中的 System Generator 工具软件(下文简称sysgen),其具体使用方法见Xilinx官方文档:UG897 和 UG958。

sysgen 的开发基于 Matlab 的 Simulink 环境,使用 Xilinx 提供的功能模块在图形化界面进行 FPGA 开发,从原理上来说是使用图像化的功能模块来模拟 HDL 语言的功能

Xilinx 的原文说的是 Model Based DSP Design,虽然主要应用于 DSP(数字信号处理),不是ISP(Image Signal Processing),但是数字图像也是数字信号的一种,计算方法和原理差异不大。

使用 sysgen 的好处在于直观的图形开发环境以及与 Matlab 环境的完美融合,在仿真激励的生成和仿真结果分析时可以直接使用 Matlab 强大的数学计算库。相比较传统的基于 HDL 的仿真使用数据文件进行数据导入导出后才能进行仿真处理,sysgen 可以将这部分过程直接融入仿真流程,大幅减少了仿真的工作量。但是 sysgen 相比较灵活的 HDL 语言,也有一个比较大的劣势在于很难实现复杂的 FPGA 逻辑(比如状态机)。

除了 sysgen 以外,Xilinx 还有许多基于高级语言(c 语言,相较于 HDL 语言)的新的开发工具软件,如 HLS、SDSoc 等,笔者接触不多(无实际项目经验),但是直觉上认为这些软件只是用于降低 FPGA 的入门难度,提升开发效率,却在运行效率上做出了较大的妥协。随着编译器(或者综合工具)技术的提升,未来一定会成为 FPGA 开发的主流,但是现阶段还是有限使用为好。

本系列文章主要分为3个部分,首先说明了基本设计原则,包括代码、端口定义和数据缓冲等;之后是的主要内容,包括常用功能模块和常用算法模块。

注意:全部文章内容源于笔者自身的设计经验,并非“标准答案”,也许有更好的设计方法,欢迎各位朋友讨论。

基本设计原则

Verilog + sysgen

本系列全部设计使用 Verilog 语言,每个算法模块都以 Verilog 语言模块包含 sysgen IP 的方式构成。

根据 Verilog 和 sysgen 各自的开发优势,由 Verilog 负责复杂的逻辑处理(数据缓冲、状态机、参数更新等),由 sysgen 负责数值计算。

图像数据流水线格式

所有的图像处理算法按顺序串联成流水线依次执行,流水线上的图像数据使用统一的格式。

//输入图像数据
input [7:0] in_pix;//输入像素值,如果单通道灰度则只有1个端口in_gray,如果3通道RGB,则有3个并行端口in_r/in_g/in_b;数据位宽根据实际情况设置
input in_fv;//输入高电平有效帧同步,表示in_pix在1帧图像内的范围;上升沿与1帧内首个lv上升沿对齐,下降沿与1帧内最后1个lv下降沿对齐;2帧之间fv至少有1个时钟周期的低电平
input in_lv;//输入高电平有效行同步,表示in_pix在1行图像数据内的范围;2行之间lv至少有1个时钟周期的低电平
input [15:0] in_x;//输入列坐标,如果列数目为COLS,则数值范围0~(COLS-1);为保证通用性,数据位宽固定为16位;在fv与lv同时有效时数值有效,不考虑非有效情况下的坐标值
input [15:0] in_y;//输入行坐标,如果行数目为ROWS,则数值范围0~(ROWS-1);为保证通用性,数据位宽固定为16位;在fv与lv同时有效时数值有效,不考虑非有效情况下的坐标值
//输出图像数据
output [7:0] out_pix;
output out_fv;
output out_lv;
output [15:0] out_x;
output [15:0] out_y;

参数更新流程

如果对于单帧图像数据精确性要求不高,在不会导致进出算法模块数据流错误的情况下(即不影响上下游算法模块),算法模块可以从模块端口直接取用参数。

但是如果对于单帧图像数据精确性较高要求,则参数更新流程应当保证在一帧图像计算过程中参数值固定不变。

典型的算法模块参数端口定义如下:

input param_valid;//高有效参数有效标记,在外部模块或者外围设备更新参数开始之前,将valid信号置为低电平无效,所有参数更新完成后将valid信号回复高电平有效
input param_en;//高有效算法使能,在算法非使能情况下,将输入图像数据直接送出至输出端口;在非使能情况下,是否与使能情况下保持一致的数据延迟根据项目需求而定
input [7:0] param_a;//根据算法原理定义的1个或者多个算法参数;如果有浮点数参数,在Verilog中不作特殊处理,而是参数进入sysgen后将其定义为浮点数
input [31:0] param_b;

外部模块或者外围设备更新参数的流程:

  1. valid 信号置为低电平;
  2. 更新全部参数值;
  3. valid 信号置为高电平,表示参数有效。

算法模块内,对包括算法使能参数在内的全部算法参数定义对应的参数寄存器,算法模块使用参数寄存器中的参数值,而不是模块端口的参数值。在**输入 fv(in_fv)的下降沿(不是输出fv)**处检查 valid 信号是否有效:如果为高电平有效,则将当前模块端口的参数值写入参数寄存器;如果为低电平无效,则保持当前参数寄存器值。

注意:valid 信号即可以针对当前项目中所有的算法参数,也可以为每个算法单独定义 valid 信号。但是每个算法独立的 valid 信号没有必要,因为在单独更新某一个算法的参数过程中,如果其它算法模块发现 valid 无效依然会保持其原有的参数寄存器值,不受参数更新影响,在参数更新完成后,也只有指定的算法模块参数被新参数替换。

片外缓冲设计

许多图像处理算法或者输入输出逻辑都需要进行数据缓冲,如果 FPGA 片上 RAM 资源足够,使用 RAM 缓冲数据当然是最理想的情况,但是大多数情况需要缓冲的数据量实在太大。

因此片外 DDR 数据缓冲基本上是 FPGA 图像处理的标配。

这种情况下 DDR 缓冲的数据读写,及其与算法或者输入输出流程的匹配将是除图像算法以外最复杂的逻辑设计。

DDR 缓冲逻辑为了保证读写效率,必须与算法及数据流深度耦合,因此几乎没有太大的通用性考量,但是所有的片外缓冲设计必须包含数据流反压,数据流下游模块在处理不及时的情况下必须要求上游模块暂停数据下传,否则将造成数据丢失,甚至破坏整个图像处理的数据流水线。

2018-12-26 22:09:03 xu_fengyu 阅读数 185
  • 使用Snapdragon Profiler深度分析优化你的游戏

    Snapdragon Profiler提供四种分析模式,几十种硬件指标帮助分析调试应用性能以及渲染等问题。对于开发者尤其是和功耗、图形图像处理相关的开发者来说,Snapdragon Profiler将是您一个很好的帮手,它允许开发者分析CPU、GPU、DSP、memory、power、thermal和network数据等,从而帮助开发者根据这些数据进一步进行修改和优化。

    971 人正在学习 去看看 CSDN讲师

简单的微处理器件有51单片机、AVR单片机等,复杂的微处理器有电脑或手机中使用的不同架构的CPU,介于二者之间的还有诸如STM32等功能强大的嵌入式微控制器芯片。当然,有数据处理功能的芯片还有应用于信号处理领域的DSP,应用于特殊芯片设计的FPGA以及图像处理并行运算的GPU等,以上这些都可以统称为微处理器件。当然,与微处理器件相关的概念还有架构、内核、指令集等等,本篇博客的主要目的就是梳理这些概念之间的联系以及简单介绍各种微处理器件,并不深入具体的定义。

CPU/微控制器

一般而言,微控制器与微处理器的概念界限并不十分明显,但本文里面微控制器的概念则指较简单一点的嵌入式处理器如STM32、51、飞思卡尔等单片机。复杂的控制器芯片如电脑应用的基于X86架构的Intel处理器或手机里面基于ARM架构或ARM授权二次开发的各种芯片如华为的麒麟980、高通晓龙等比较习惯称为CPU。

上面是从应用的角度阐述这部分微处理器件的,但不管是CPU还是微控制器,从最基本的逻辑角度来分类的话,它们的内核可以被分为两大类,即所谓的基于“复杂指令集(CISC)”的内核与基于“精简指令集(RISC)”的内核。

CISC架构的代表: X86, X86-64, C51等;
RISC架构的代表: ARM, MIPS, AVR等;

(关于CISC与RISC的区别以及详细内容,这里就不做赘述了,可以查看相关的词条。)
在这里插入图片描述
对于基于不同指令集架构开发出来的核,个人电脑方面则是英特尔一家独大,掌控着X86核,并且只授权给了AMD一家公司,所以其他任何厂商都无法生产X86架构的芯片。移动领域,则是ARM架构一家独大,不管是苹果、华为、高通、还是三星、联发科都是基于ARM的架构开发自己的处理器的。

这里稍微提一下X86与ARM核的应用现状,传统上来看,X86架构的CPU比ARM架构的在系统性能方面要有优势,更适用于复杂的操作环境。但ARM的优势不在于性能强大而在于效率,具有低成本和低耗电的特性。前者追求大而全,后者追求小而精。ARM采用的RISC流水线指令集,在完成综合性工作方面本来就处于劣势,但在一些任务相对固定的应用场合例如移动通信领域,其优势就能发挥得淋漓尽致,这也是当前手机芯片采用ARM架构的原因。
在这里插入图片描述
基于RISC指令集的ARM架构结构简单,布局紧凑,可以模块化设计,故设计周期短且易于采用最新技术,这也是各个手机厂商发布手机芯片频率很高的原因,相对而言电脑的CPU性能提升就比较缓慢了。虽然ARM构架CPU性能的一路跃进,在某些测试中可以媲美X86/X64 CPU,但从目前乃至可见的未来一段时间内,电脑CPU的强大性能是手机CPU不可能替代的,因为复杂的使用需求多种多样,手机CPU依然属于专精于部分计算功能,而不是全面手。举个例子,手机支持4K高清解码还不太耗电,这是因为专门做了特殊的算法优化和硬件上的调整才实现的,换句话说,重点功能需要什么特定功能,手机CPU可以有针对性的做出调整,电脑CPU则在这方面的能力就要差一些,毕竟它追求的是通用性,要照顾所有功能需求。1

DSP

DSP严格来说是一门技术,中文译为数字信号处理,DSP模块不仅可以在DSP芯片中,其他类型的处理器也可以包含DSP模块,不过人们习惯将专用的DSP芯片简称为DSP。
DSP芯片(digital singnal processor)是一种独特的微处理器,有自己的完整指令系统,可以采用C语言开发,是以数字信号来处理大量信息的器件。DSP芯片在一块不大的芯片内包括有控制单元、运算单元、各种寄存器以及一定数量的存储单元等等,在其外围还可以连接若干存储器,并可以与一定数量的外部设备互相通信,有软、硬件的全面功能,某种意义上说DSP就是一个微型计算机。
DSP采用的是哈佛设计,即数据总线和地址总线分开,使程序和数据分别存储在两个分开的空间,允许取指令和执行指令完全重叠。也就是说在执行上一条指令的同时就可取出下一条指令,并进行译码,这大大的提高了微处理器的速度。另外还允许在程序空间和数据空间之间进行传输,因为增加了器件的灵活性。
其工作原理是接收模拟信号,转换为0或1的数字信号,再对数字信号进行修改、删除、强化,并在其他系统芯片中把数字数据解译回模拟数据或实际环境格式。它不仅具有可编程性,而且其实时运行速度可达每秒数以千万条复杂指令程序,远远超过通用微处理器,是数字化电子世界中日益重要的电脑芯片。它的强大数据处理能力和高运行速度,是最值得称道的两大特色。当然,与通用微处理器相比,DSP芯片的其他通用功能相对较弱些。根据数字信号处理的要求,DSP芯片一般具有如下主要特点:
(1)在一个指令周期内可完成一次乘法和一次加法;
(2)程序和数据空间分开,可以同时访问指令和数据;
(3)片内具有快速RAM,通常可通过独立的数据总线在两块中同时访问;
(4)具有低开销或无开销循环及跳转的硬件支持;
(5)快速的中断处理和硬件I/O支持;
(6)具有在单周期内操作的多个硬件地址产生器;
(7)可以并行执行多个操作;
(8)支持流水线操作,使取指、译码和执行等操作可以重叠执行。2

FPGA

FPGA是英文Field Programmable Gate Array(现场可编程门阵列)的缩写,它是在PAL、GAL、PLD等可编程器件的基础上进一步发展的产物,采用专用的硬件设计语言Verlog VHDL等进行开发,是专用集成电路(ASIC)中集成度最高的一种。
FPGA采用了逻辑单元阵列LCA(Logic Cell Array)这样一个新概念,内部包括可配置逻辑模块CLB(Configurable Logic Block)、输出输入模块IOB (Input Output Block)和内部连线(Interconnect)三个部分。用户可对FPGA内部的逻辑模块和I/O模块重新配置,以实现用户的逻辑。它还具有静态可重复编程和动态在系统重构的特性,使得硬件的功能可以像软件一样通过编程来修改。作为专用集成电路(ASIC)领域中的一种半定制电路,FPGA既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。
ALTER公司的FPGA

FPGA能完成任何数字器件的功能,上至高性能CPU,下至简单的74电路,都可以用FPGA来实现。 FPGA如同一张白纸或是一堆积木,工程师可以通过传统的原理图输入法,或是硬件描述语言自由的设计一个数字系统。
FPGA是由存放在片内RAM中的程序来设置其工作状态的,因此工作时需要对片内的RAM进行编程。用户可以根据不同的配置模式,采用不同的编程方式。加电时,FPGA芯片将EPROM中数据读入片内编程RAM 中,配置完成后,FPGA进入工作状态。掉电后,FPGA恢复成白片,内部逻辑关系消失,因此,FPGA能够反复使用。当需要修改FPGA功能时,只需换一片EPROM即可。这样,同一片FPGA,不同的编程数据,可以产生不同的电路功能。因此,FPGA的使用非常灵活。可以说,FPGA芯片是小批量系统提高系统集成度、可靠性的最佳选择之一。目前FPGA的品种很多,有XILINX的XC系列、TI公司的TPC系列、ALTERA公司的FIEX系列等。3

GPU

GPU英文全称Graphic Processing Unit,中文翻译为“图形处理器”,严格来讲GPU并不算是微处理器,一般不会单独应用,更多的时候是一种专用芯片的角色。GPU是显示卡的“大脑”,它决定了该显卡的档次和大部分性能,在手机主板上,GPU芯片一般都是紧挨着CPU芯片的。
在这里插入图片描述
GPU最初应用于图像处理领域,这些年,在深度学习中进行并行加速计算是其新兴起的应用。GPU 加速计算是指同时利用图形处理器 (GPU) 和 CPU,加快科学、分析、工程、消费和企业应用程序的运行速度。GPU 加速器于 2007 年由 NVIDIA率先推出,能够使从汽车、手机和平板电脑到无人机和机器人等平台的应用程序加速运行。4


  1. https://www.sohu.com/a/207845368_116178 ↩︎

  2. http://www.elecfans.com/pld/679394.html ↩︎

  3. http://cumt04071770.spaces.eepw.com.cn/articles/article/item/97268 ↩︎

  4. https://www.nvidia.cn/object/what-is-gpu-computing-cn.html ↩︎

2012-10-14 12:42:36 wuhualong1314 阅读数 942
  • 使用Snapdragon Profiler深度分析优化你的游戏

    Snapdragon Profiler提供四种分析模式,几十种硬件指标帮助分析调试应用性能以及渲染等问题。对于开发者尤其是和功耗、图形图像处理相关的开发者来说,Snapdragon Profiler将是您一个很好的帮手,它允许开发者分析CPU、GPU、DSP、memory、power、thermal和network数据等,从而帮助开发者根据这些数据进一步进行修改和优化。

    971 人正在学习 去看看 CSDN讲师

GPU在图像处理方面进行了专门的优化,个人认为可以作为协处理器,应用场景主要在于娱乐等对视觉效果要求较高的方面。

dsp 的优势在于处理速度快,灵活性高,便于调试和系统升级。DSP专用性较强,数字处理方面比前两者要优势更多些。但控制能力较弱,不过这个弱点也在后续发展中慢慢的增强,比如增加外部设备控制部分等。在高速运算场景还是必备的芯片。但是它的主频到1.2G 已经很难上去的,能做的只是多核 和 协处理器。

而fpga则时序控制精准,固定模块的设计最好采用fpga,比较稳定,但调试起来不是太灵活。fpga只适合做一些prototye,或者一些低速率的东西。

嵌入式计算看好cpu+dsp的soc,通用计算不清楚,目前看来cpu+gpu比较流行。

异构计算(Heterogeneous computing)主要是指使用不同类型指令集体系架构的计算单元组成系统的计算方式。常见的计算单元类别包括CPU、GPU等协处理器、DSP、ASIC、FPGA等。其实还有一些专门做加解密或者java语言的加速器,固件算不算其他的计算单元呢?

2012-11-03 17:21:44 renshengrumenglibing 阅读数 10887
  • 使用Snapdragon Profiler深度分析优化你的游戏

    Snapdragon Profiler提供四种分析模式,几十种硬件指标帮助分析调试应用性能以及渲染等问题。对于开发者尤其是和功耗、图形图像处理相关的开发者来说,Snapdragon Profiler将是您一个很好的帮手,它允许开发者分析CPU、GPU、DSP、memory、power、thermal和network数据等,从而帮助开发者根据这些数据进一步进行修改和优化。

    971 人正在学习 去看看 CSDN讲师

        计算机视觉系统通常需要进行大量的信息处理才能够得到所需要的信息。目前主要有CPU、GPU、ASIC、DSP、FPGA等计算平台。

常用的计算机视觉系统通过通用计算机进行视觉信息处理,但是,由于CPU的计算能力有限,对于一些计算复杂度很高的视觉算法,其处理速度常常难以满足系统的实时性需要。

GPU具有高度的并行计算能力,可以较好地解决计算速度的问题,然而,基于GPU的计算机视觉系统存在着功耗较高、体积较大的缺点,难以满足依靠自身所带电池供电并长时间工作的服务机器人等应用系统的需要。

利用专用集成电路ASIC实现视觉处理算法,可以解决视觉系统性能和体积、功耗之间的矛盾,是高性能嵌入式视觉系统的一种有效的解决方案。然而,ASIC开发周期长、修改不方便,通用性较差。

FPGA可以通过编程方便地修改其内部的逻辑功能,从而实现高速的硬件计算和并行运算,是高性能嵌入式视觉系统的一种更加方便的解决方案。基于FPGA的嵌入式视觉系统的功耗远远低于基于CPU和GPU的视觉系统,FPGA的功耗通常不到1W,而高性能CPU和GPU的功耗通常都在100W以上。随着技术的不断进步,FPGA的集成度越来越高,可以实现的设计规模越来越大,而功耗则越来越低。因此,基于FPGA的嵌入式视觉系统将是计算机视觉系统的重要发展方向。

        使用FPGA进行图像处理时,既要对赢家有很深的了解,同时又需要对图像处理的算法很熟悉。即使如此,如果打算使用HDL语言去实现图像处理的算法,依然有很大的难度。而MathWorks公司和Xilinx公司联合推出的System Generator则刚好可以解决这个问题。在System Generator和Matlab安装之后,会在Simulink中添加一些Xilinx公司提供的模块,使用类似Simulinlk的方式搭建图像处理算法,可以进行仿真、硬件协仿真、直接生成HDL代码、生成TestBench,极大的提高开发的效率。



一、 System Generator简介

目前的FPGA芯片不再扮演胶合逻辑的角色,而成为数字信号处理系统的核心器件。在芯片内,不仅包含了逻辑资源,还有多路复用器、存储器、硬核乘加单元以及内嵌的处理器等设备,并且还具备高度并行计算的能力,使得FPGA已成为高性能数字信号处理的理想器件,特别适合于完成数字滤波、快速傅立叶变换等。但遗憾的是,FPGA并未在数字信号处理领域获得广泛应用,主要原因就是:首先,大部分DSP设计者通常对C语言或MATBLAB工具很熟悉,却不了解硬件描述语言VHDL和Verilog HDL;其次,部分DSP工程师认为对HDL语言在语句可综合方面的要求限制了其编写算法的思路。基于此,Xilinx公司推出了简化FPGA数字处理系统的集成开发工具System Generator for DSP,快速、简易地将DSP系统的抽象算法转化成可综合的、可靠的硬件系统,为DSP设计者扫清了编程的障碍。

System Generator for DSP 是业内领先的高级系统级FPGA开发工具,借助 FPGA 来设计高性能 DSP 系统,其强大的提取功能可利用最先进的FPGA芯片来开发高度并行的系统,并和Simulink(MathWorks公司产品)实现无缝链接,快速建模并自动生成代码。此外,System Generator是Xilinx公司XtremeDSP解决方案的关键组成,集成了先进的FPGA设计工具以及IP 核,支持Xilinx公司全系列的FPGA芯片,提供从初始算法验证到硬件设计的通道。System Generator最大的特点就是可利用Simulink建模和仿真环境来实现FPGA设计,而无需了解和使用 RTL级硬件语言,让DSP设计者能够发挥基于FPGA的DSP的最大性能和灵活性,并缩短整个设计的周期。

典型的System Generator工程设计实例如图8-1所示。可以将System Generato看成MATLAB软件中的一个硬件设计工具包,提供了丰富的应用子模块,所有的硬件综合和实现信息都将被自动添加到芯片配置文件中,用户不必熟悉FPGA的设计流程以及HDL语言,只需要经过拖拽和连接将子模块搭成应用系统即可。



图7-1 典型的System Generator工程设计实例示意图

二、System Generator的主要特征

System Generator是用高性能DSP系统的快速建模和实现工具,是DSP高层系统和Xilinx FPGA之间的桥梁,其作用如图8-2所示。可在MATLAB/Simulink环境下对算法以及系统建模,并生成相应的工程,再调用ISE相应的组件进行仿真、综合、实现,并完成芯片的配置。整个开发的过程肯定是反复迭代、修正的,其中不可缺少的纽带就是System Generator。



图7-2 System Generator的作用

System Generator在Simulink中可当作一个用户程序包,自动将模型化的数字系统设计转换成硬件电路,其主要特征如下:

1.丰富的DSP模块

提供了包含信号处理(如FIR滤波器、FFT)、纠错(如Viterbi 解码器、Reed-Solomon编码器/解码器)、算法、存储器(如FIFO、RAM、ROM)及数字逻辑功能的Xilinx模块集,可快速、高效地在Simulink内构建和调试高性能DSP系统。此外,Xilinx模块集提供的模块可以使用户导入.m函数及HDL模块

2.Simulink设计的VHDL或Verilog的自动代码生成

设计人员无需掌握HDL语言即可开发数字处理系统,且所得到的设计具备HDL设计所有的优点。用户也可以通过基本的子模块生成功能特征明确的System Generator IP Core,作为大型设计的一部分使用。同样,掌握了RTL设计的用户,可更好地利用System Generator。

3.硬件协仿真

提供了创建“FPGA 在环路(FPGA-in-the-loop)”仿真对象的代码生成功能,可加速用户的硬件验证工作并加速其在Simulink与MATLAB中的仿真。目前,System Generator支持以太网(10/100/吉比特)、PCI、Cardbus及硬件平台与Simulink之间的JTAG通信。

4.嵌入式系统的硬件/软件协设计

提供了嵌入式系统的硬件/软件协设计能力,可直接加载Xilinx公司的MicroBlaze 32位 RISC处理器,甚至构建和调试DSP协处理器。System Generator提供了硬件/软件接口的共享存储器提取功能,自动生成DSP协处理器、总线接口逻辑、软件驱动器以及协处理器使用方面的软件技术文档。


System Generator软件的安装和配置

1.软件需求

System Generator软件版本必须和ISE版本一致,同时要有匹配的MATLAB版本才能正常工作。对于System Generator 9.1,需要以下的软件环境:

  • MATLAB的版本为MATLAB v7.3/Simulink v6.5(R2006b)或者MATLAB v7.4/ Simulink v6.6(R2007a)。注意:MATLAB软件的安装路径上不能出现空格。(如:可以为C:\MATLAB\R2007a);
  • ISE的版本为9.1.01i或者更高版本,ISE Simulator的版本为完全版;
  • IP核库的版本为ISE IP 9.1i Update 1或者更高版本。
    需要注意的是:系统环境变量$XILINX必须设置为ISE的安装目录。
    同样,System Generator对常用的第三方软件也有相应的版本要求:
  • 综合工具Synplify Pro的版本为v8.6.2或者v8.8.0.4;
  • 仿真工具ModelSim的版本至少为PE或者SE v6.1f以及更高版本。

2.System Generator的安装

System Generator的安装软件只能通过网站下载的方式得到,网址为http://www.xilinx.com/ise/optional_prod/system_generator.htm。在安装System Generator之前,需要关闭所有的ISE以及MATLAB应用程序,然后双击安装软件的图标,即弹出图8-3所示的欢迎界面。



图7-3 System Generator的安装欢迎界面                          图7-4 System Generator安装时的MATLAB版本选择界面

点击“Next”按键进入软件安装协议说明界面,选中“I Agree”选项进入MATLAB版本选择界面,安装程序会自动列出已安装的MATLAB代码,如图8-4所示(由于只安装了MATLAB 2006b版本,所以只有一个版本)。

继续点击“Next”按键,进入安装路径选择界面,同时安装程序会给出所需的磁盘空间大小,对于9.1版需要118M字节的空间。再点击“Next”按键进入安装进程界面,安装完成后的界面如图8-5所示,点击“Close”按键完成安装。



图7-5 System Generator安转完成提示界面

3.Xilinx HDL库的编译和配置

如果要在ModelSim中完成System Generator设计的仿真,则需要编译所有的IP库模块。由于ModelSim存在PE、SE以及XE等不同的版本,下面分别介绍其编译方法。

1)ModelSim(PE or EE/SE)

Xilinx提供了名为compxlib的库编译工具,在DOS模式下完成库的编译。例如命令:

compxlib –s mti_se –f all –l all

可编译生成ModelSim SE版本中VHDL以及Verilog HDL两种语言的库。完成的compxlib编译指令可查阅Xilinx软件文档《Synthesis and Simulation Design Guide》,也可以直接在http://toolbox.xilinx.com/docsan/xilinx82/books/docs/sim/sim.pdf的网址中在线查阅。

2)ModelSim(XE)

对于ModelSim XE(Xilinx Edition)版本,则可直接从Xilinx网站上下载已经过编译的库压缩包,其网址为:
http://www.xilinx.com/xlnx/xil_sw_updates_home.jsp?update=mxe_libs。然后将其解压缩到ModelSim XE的安装文件夹中,这是ModelSim的默认寻找路径,因此不用对modelsim.ini文件作任何修改。

三、System Generator开发流程简介

本节介绍使用System Generator设计数字系统的常用步骤。在Simulink的可视化环境中,根据系统设计功能将Xilinx模块连接成所设计的系统,并定义合适的系统参数;而后运用System Generator将Simulink模型转换成硬件可执行模型,将系统定义的参数对应至硬件实现的实体以及输入输出端口,并会自动完成综合、仿真与实现。整个开发流程分为浮点算法开发、定点算法实现、硬件系统设计以及代码优化4个步骤。

1.浮点算法开发:利用MATLAB软件及其提供的工具包快速地完成浮点算法的开发、验证以及性能评估,借助于Simulink可快速完成原型设计和模型分析。
2.定点算法实现:将MATLAB浮点算法通过AccelDSP在Xilinx器件上实现定点逻辑。AccelDSP直接将浮点MATLAB算法的M-文文件自动生成可综合的RTL模型。AccelDSP综合工具是基于高级MATLAB语言的工具,用于设计针对Xilinx FPGA的DSP块。该工具可自动地进行浮点-定点转换,生成可综合的VHDL或Verilog HDL设计,并创建用于验证的测试平台。并且,还能以报告的形式提供资源利用率、吞吐量和延迟等指标,从而根据实际工程需要来设置系统级要求,借助于IP-Explorer技术来实现面积和速度的折中,快速地选择最佳的芯片设计。
3.硬件系统设计与实现:定义使用Xilinx IP的详细硬件架构,采用System Generator for DSP 划分协处理器和可编程器件之间的设计。System Generator可满足FPGA流程中所有需要的功能要求,对于用户而言,通过点击按键即可将模型设计转换成HDL语言,在此过程中会生成下列文件:

  • 设计所对应的HDL程序代码。
  • 时钟处理模块,包括系统时钟处理操作以及生成设计中所需的不同频率的时钟信号。
  • 用于测试设计的HDL测试代码,可直接将其仿真结果和Simulink输出比较。
  • 工程文件以及综合、实现过程所产生的各种脚本文件。

4.代码优化:利用ISE RTL设计环境生成优化的FPGA设计,属于高级应用,要求设计者不仅要熟悉算法的架构、瓶颈,还需要精通RTL设计。对于一般设计,如果系统硬件资源够用,再加上设计周期短,则可忽略这一步。

在Simulink可视化设计环境中,重要的是:在Simulink环境中实现定点算法,根据系统设计功能将Xilinx模块连接成设计系统,并定义合适的系统参数;而后利用System Generator将Simulink模型转换为可执行的硬件模型,将系统定义的参数对应到硬件实现的模块、输入/输出端口等属性;再借助于ModelSim软件验证相应的设计是否和Similink输出一致,否则需要重新修改设计;最后将设计生成可对器件编程的比特流文件,将其下载到目标芯片中。因此,典型的开发流程如图8-6所示,其中System Generator会自动为FPGA的综合、HDL仿真以及实现生成命令文件,用户只需完成Simulink设计以及比较最终的RTL输出结果。整个开发流程都是在可视化的环境中完成的。



图7-6 典型的System Generator设计流程


2015-10-28 14:17:57 zhang0311 阅读数 10895
  • 使用Snapdragon Profiler深度分析优化你的游戏

    Snapdragon Profiler提供四种分析模式,几十种硬件指标帮助分析调试应用性能以及渲染等问题。对于开发者尤其是和功耗、图形图像处理相关的开发者来说,Snapdragon Profiler将是您一个很好的帮手,它允许开发者分析CPU、GPU、DSP、memory、power、thermal和network数据等,从而帮助开发者根据这些数据进一步进行修改和优化。

    971 人正在学习 去看看 CSDN讲师

1.       深度学习

        深度学习是机器学习研究中的一个新的领域,其动机在于建立、模拟人脑进行分析学习的神经网络,它模仿人脑的机制来解释数据,例如图像,声音和文本。深度学习典型应用为图像识别和语音识别。(由于本人不是深度学习专业人士,对深度学习理论知识不多介绍,说多了就班门弄斧了,后面主要介绍下这些深度学习算法如何进行并行化设计和优化)

2.       CPU+GPU异构协同计算简介

         近年来,计算机图形处理器(GPU,GraphicsProcess Unit)正在以大大超过摩尔定律的速度高速发展(大约每隔半年 GPU 的性能增加一倍),远远超过了CPU 的发展速度。

         CPU+GPU异构协同计算模式(图1),利用CPU进行复杂逻辑和事务处理等串行计算,利用 GPU 完成大规模并行计算,即可以各尽其能,充分发挥计算系统的处理能力。

图1 CPU+GPU异构体系结构

        目前,主流的GPU具有强大的计算能力和内存带宽,如图2所示,无论性能还是内存带宽,均远大于同代的CPU。对于GPU, Gflop/$和Gflops/w均高于CPU。

图2 GPU计算能力

3.       深度学习中的CPU+GPU集群架构

        CPU+GPU集群工作模式(图3),每个节点内采用CPU+GPU异构模式,并且每个节点可以配置多块GPU卡。节点间采用高速InfiniBand网络互连,速度可以达到双向56Gb/s,实测双向5GB/s。后端采用并行文件系统。采用数据划分、任务划分的方式对应用进行并行化,适用于大规模数据并行计算。

图3 CPU+GPU集群架构

4.       利用GPU加速深度学习算法


4.1.       单GPU并行

图4 单GPU计算流程

        针对每次训练数据,模型内计算通过多次GPU 内核的调用完成计算。权重W值一直存在GPU内存中,直到所有训练数据计算完毕之后回传到系统内存中。Data为图像或语音数据。

4.2.       多GPU卡并行

       多GPU并行计算时,各GPU有自己独立的内存,卡之间的并行属于分布式计算模式。针对深度学习算法,采用多GPU卡计算可以采用两种并行方法:数据并行和模型并行。

4.2.1.       数据并行

       数据并行是指不同的GPU计算不同的训练数据,即把训练数据划分给不同的GPU进行分别计算,由于训练是逐步训练的,后一个训练数据的计算需要前一个训练数据更新的W,数据并行改变了这个计算顺序,多GPU计算需要进行W的互相通信,满足训练的特点,使训练可以收敛。

       数据并行如图5所示,多GPU训练不同的数据,每训练一次需要同步W,使得后面的训练始终为最新的W。

图5 数据并行

数据并行的特点:

1)        优点

            a)        实现比较容易,也比较容易扩展

            b)        只需要进行W的通信,模型内的数据不需要通信

2)        缺点

           a)        当模型较大时,GPU内存无法满足存储要求,无法完成计算

        根据多GPU卡之间的W通信,下面介绍两种通信方法:主从模式和令牌环模式。

1)        主从模式

       主从模式:选择一个进程或线程作为主进程或线程,各个GPU把每次训练得到的ΔW发给主进程或线程,主进程或线程进行W更新,然后再发送给GPU,GPU再进行下一个数据的训练。如图6所示。

图6 主从模式

2)        令牌环模式

       令牌环模式:每个GPU把自己训练得到的ΔW更新到W上,并且发送到下一个GPU,保证令牌环上的W始终为最新的W。如图7所示。

图7 令牌环模式

两种模式对比如表1

表1 主从模式和令牌环模式对比

模式

优点

缺点

主从模式

收敛速度更快

GPU计算需要等待,影响GPU计算;主进程或线程压力较大

令牌环模式

GPU计算不需要等待通信,性能更好

通信速度影响收敛的速度

4.2.2.       模型并行

        模型并行是指多个GPU同时计算同一个训练数据,多个GPU对模型内的数据进行划分,如图8所示。Kernel计算和通信流程如图9所示,在一次训练数据多层计算过程中,每个GPU内核计算之后需要互相交换数据才能进行下一次的计算。

图8 模型并行

图9 模型并行:多GPU计算内核和通信示意图

模型并行特点:

1)        优点

           a)        可以处理大模型的情况

2)        缺点

           a)        需要更频繁的通信,增加通信压力

           b)        实现难度较大

4.3.       GPU集群并行

          GPU集群并行模式即为多GPU并行中各种并行模式的扩展,如表2所示。节点间采用InfiniBand通信,节点间的GPU通过RMDA通信,节点内多GPU之间采用P2P通信。

表2 GPU集群并行模式

模式

节点间

节点内

特点

模式1

令牌环

单一模式的缺点放大

模式2

主从

模式3

模型并行

模式4

令牌环

主从

结合各种模式的有点,避免某一模式的缺点放大

模式5

主从

令牌环

模式6

令牌环

模型并行

模式7

主从

模型并行

4.4.       性能分享

4.4.1.       基于GPU集群的Caffe并行加速

图10 Caffe性能

8节点GPU服务器,2 K20mGPU/节点,56Gb/s InfiniBand网络,Lustre并行文件系统

4.4.2.       基于GPU集群的DNN并行加速

图11 DNN测试性能

4节点GPU服务器,4 K20mGPU/节点,56Gb/s InfiniBand网络

5.       CPU+FPGA协同计算加速线上计算

        相对于训练计算,线上识别的计算是小而众多的任务计算,每次请求的计算比较小,但请求的任务数十分庞大,GPU计算虽然获得很好的性能,但功耗仍然是个严峻的问题。

        目前主流的FPGA卡功耗只有主流GPU的十分之一,性能相差2-3倍,FPGA相对于GPU具有更高的GFlops/W。

利用FPGA解决线上识别计算可以采用分布式+FPGA计算的模式,如图12所示,上层可以采用Hadoop或Spark调度,底层利用FPGA进行计算。

图12 分布式计算+FPGA计算

        目前,FPGA已开始支持高级语言,如AlteraFPGA支持OpenCL,Xilinx FPGA支持HLS,这对程序员利用FPGA开发减低了难度。这些新平台的支持还有很多问题,也许后面会支持的越来越好。

 

备注:由于对深度学习算法了解比较肤浅,以上内容难免无误,请大家理解并提出修改意见。

 QQ:331526010

Email:zhang03_11@163.com

 

 

 

ISP与DSP的区别

阅读数 3756

没有更多推荐了,返回首页