CN113138804B - 在传输过程中提取流数据特征的流处理器及其实现方法 - Google Patents
在传输过程中提取流数据特征的流处理器及其实现方法 Download PDFInfo
- Publication number
- CN113138804B CN113138804B CN202110433608.3A CN202110433608A CN113138804B CN 113138804 B CN113138804 B CN 113138804B CN 202110433608 A CN202110433608 A CN 202110433608A CN 113138804 B CN113138804 B CN 113138804B
- Authority
- CN
- China
- Prior art keywords
- instruction
- vector
- binocular
- data
- monocular
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 55
- 230000005540 biological transmission Effects 0.000 title claims abstract description 21
- 239000013598 vector Substances 0.000 claims abstract description 216
- 238000002360 preparation method Methods 0.000 claims abstract description 24
- 238000003860 storage Methods 0.000 claims description 46
- 238000004364 calculation method Methods 0.000 claims description 27
- 238000012545 processing Methods 0.000 claims description 22
- 230000008569 process Effects 0.000 claims description 21
- 238000009825 accumulation Methods 0.000 claims description 15
- 238000006243 chemical reaction Methods 0.000 claims description 12
- 238000013075 data extraction Methods 0.000 claims description 12
- 239000000284 extract Substances 0.000 claims description 12
- 230000033001 locomotion Effects 0.000 claims description 7
- 125000004122 cyclic group Chemical group 0.000 claims description 5
- 239000011159 matrix material Substances 0.000 claims description 5
- 230000003139 buffering effect Effects 0.000 abstract description 2
- 238000000605 extraction Methods 0.000 description 29
- 238000010586 diagram Methods 0.000 description 7
- 238000013473 artificial intelligence Methods 0.000 description 3
- 238000013500 data storage Methods 0.000 description 2
- 238000005265 energy consumption Methods 0.000 description 2
- 239000002699 waste material Substances 0.000 description 2
- 240000001436 Antirrhinum majus Species 0.000 description 1
- 239000008186 active pharmaceutical agent Substances 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000007405 data analysis Methods 0.000 description 1
- 238000013144 data compression Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000012432 intermediate storage Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 229910052754 neon Inorganic materials 0.000 description 1
- GKAOGPIIYCISHV-UHFFFAOYSA-N neon atom Chemical compound [Ne] GKAOGPIIYCISHV-UHFFFAOYSA-N 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000007781 pre-processing Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000002459 sustained effect Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3851—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
Abstract
本发明涉及一种在传输过程中提取流数据特征的流处理器及其实现方法,其特征在于,包括实时流输入端口、指令缓存器、译码器、数据准备模块、执行模块、写回模块和本地存储器;实时流输入端口用于输入实时流数据;指令缓存器用于缓存指令序列,并取出当前需执行的指令;译码器用于提取出当前需执行指令的关键字段;数据准备模块用于提取本地存储器内存储的源操作数向量元素并输入至执行模块,将到达的实时流数据转发至执行模块;执行模块用于对实时流数据、当前需执行指令的立即数或本地存储器内存储的向量进行单目运算或双目运算,得到运算结果,本发明可以广泛应用于传感器数据处理器领域中。
Description
技术领域
本发明是关于一种在传输过程中提取流数据特征的流处理器及其实现方法,属于传感器数据处理器领域。
背景技术
智能传感器将人工智能与传感结合,采用人工智能方法对传感器输出的信号和数据进行分析和识别,实现智能感知,例如:基于雷达传感的手势识别系统,采用人工智能方法对雷达信号进行特征提取和模式识别,得到目标(手)的运动和姿态信息,实现手势识别。在基于人工特征的智能感知算法中,从传感器数据流中提取特征是智能传感器数据感知过程的关键步骤,其计算量在整个计算过程中占有很大比重。在智能传感器芯片(片上系统)中,高效的特征提取模块可以明显提高芯片的能量效率。特征提取本质上是一系列的流运算,即被处理的数据是一个或多个非常长(可以近似看作无限长)的时间数据序列,它们具有固定的到达速率,要接受相似的处理。传感器流数据的计算一般具有以下几个特点:1)运算源操作数据是时间序列,数据串行输入;2)执行的是向量运算,或是每个序列元素执行相同的操作,或是对序列元素进行归约性质的运算(如序列求和),且这些时间序列往往具有较大的长度;3)数据以固定的到达率持续输入,因此,必须在限定的截止时间前完成当前数据的处理,即具有实时性要求,要保证一个和输入数据到达率匹配的吞吐率,否则数据将会积压,最终导致存储器溢出;4)部分计算任务是分层次的,即需要对一组数据进行逐步分层运算。此外,也存在对同一组数据同时进行多种运算的情况。
目前,可以用于执行传感器数据流特征提取的硬件处理器方案主要有支持DSP(数字信号处理)指令或向量指令的通用处理器方案、数字信号处理器、向量处理器和针对传感器数据流特征提取做过指令集扩展的通用处理器。支持DSP指令或向量指令的通用处理器方案是指常规的带有单指令多数据流(Single Instruction Multiple Data,SIMD)指令扩展的处理器,例如高通Snapdragon 400带有的DSP指令、ARM Cortex-A系列处理器的Neon是一种128位SIMD的扩展指令序列,它与无此类指令的普通处理器相比具有明显的性能优势。采用普通SIMD扩展通用处理器方案意味着在系统芯片层面采用运行在CPU(中央处理器)上的软件实现特征提取,其它计算和控制任务和特征提取任务共同运行在一个处理器上。但是,现有常见处理器支持的向量长度相对较短,而传感器数据流的源操作向量长度通常很长——典型值达到数百至数千,处理这样的长向量运算时必须将向量分割为多个子向量,而增加向量指令所支持的向量长度又会降低其他指令和短向量的执行效率。因此将不同类型的指令混合在一个处理器中互相拖累了彼此的性能。
至于专用处理器方案,即在系统中配置一个专门用于特征提取的专用指令序列处理器,可以克服通用处理器的缺点,实现效率更高。现有的适用于特征提取的处理器包括数字信号处理器和向量处理器,前者包含信号处理中常用的运算,包括向量运算,向量处理能力强,但是却不能支持长向量处理。面向图像或视频处理的向量处理器和GPU(图形处理器),往往使用多个通道来挖掘数据并行性,然而物联网系统中传感器数据通常以较低的速率串行到达,不能充分利用并行的运算资源,且这些向量处理器的向量长度也相对较短,不适用于流处理的长向量运算。此外,也有人在通用处理器基础上面向物联网智能传感器场景提出一些针对流处理的指令集优化方法,例如:使用流存储器(Streaming Memory,SM)扩展数据存储空间,以克服有限的寄存器堆(Register File,RF)对向量长度的限制;也有使用便签式存储器(ScratchPad Memory,SPM)的方法实现对长向量的支持。研究人员还实现了用于计算机视觉图像特征提取的垂直和水平SIMD向量处理器体系结构,垂直向量处理器顺序访问数据,而水平向量处理器并行访问数据,可以支持在图像中的各种处理形式。PULP处理器添加了后递增的加载及存储指令和硬件循环,在访问流数据时可以由硬件自动递增地址。此外,它还采用紧密耦合的内存,以节省访问延迟和能量。这些面向传感器数据分析的处理器在传感器数据流计算方面提高了性能。然而,上述分析的3大类处理器均需要从存储器中读取数据才能开始处理,到达的原始数据必须先被缓存到内存之中再被逐个读取,这样的过程造成了大量的存储器访问能耗和延时。
发明内容
针对上述问题,本发明的目的是提供一种能够减少存储器访问能耗和延时的在传输过程中提取流数据特征的流处理器及其实现方法。
为实现上述目的,本发明采取以下技术方案:一种在传输过程中提取流数据特征的流处理器,包括实时流输入端口、指令缓存器、译码器、数据准备模块、执行模块、写回模块和本地存储器;
所述实时流输入端口用于输入实时流数据,得到数据序列;
所述指令缓存器用于缓存指令序列,并取出当前需执行的指令;
所述译码器用于对当前需执行的指令进行分析,提取出当前需执行指令的关键字段;
所述数据准备模块用于根据关键字段提取所述本地存储器内存储的源操作数向量元素并输入至所述执行模块,将到达的实时流数据转发至所述执行模块,以及存储当前需执行指令中的立即数;
所述执行模块用于对实时流数据、当前需执行指令的立即数或本地存储器内存储的向量进行单目运算或双目运算,得到运算结果;
所述写回模块用于根据关键字段指定的地址,将运算结果写入所述本地存储器内;
所述本地存储器用于存储原始实时流数据、运算过程产生的中间结果和运算结果。
进一步地,所述指令序列支持包括V型指令和M型指令;
V型指令为向量运算指令,其源操作数至少包括一个向量或实时流数据,其运算按照源操作数的个数分为单目和双目运算两种,单目运算输入一个向量或实时流数据,输出至少一个标量值;双目运算输入两个等长向量、一个实时流数据和一个向量、一个向量和一个常数标量或一个实时流数据和一个常数标量,输出一个等于输入向量长度的结果向量;
M型指令只包括一个用于数据搬移的M型指令,将源操作数移动到目的存储器地址。
进一步地,所述数据准备模块包括读地址生成器、常数寄存器和数据提取单元;
所述读地址生成器用于根据关键字段中的寻址方式和源操作数地址信息,生成本地存储器中的源操作数元素的读取地址;
所述常数寄存器用于存储当前需执行指令中的立即数,实现立即数寻址;
所述数据提取单元用于将到达的实时流数据转发至所述执行模块,实现实时数据流寻址;以及在指令指示直接寻址和二维阵列寻址时,按照所述读地址生成器生成的源操作数元素读取地址,提取所述本地存储器内存储的源操作数向量元素并输入至所述执行模块。
进一步地,所述读地址生成器实现的寻址方式包括直接寻址和二维阵列寻址;
所述直接寻址用于寻址所述本地存储器中的向量,源操作数的地址信息包括向量的首地址、步长和向量长度,所述读地址生成器输出的源操作数元素的读取地址从首地址开始每次累加一个步长,当累计产生的读取地址总数等于向量长度时,则停止地址累加并通知所述数据提取单元停止数据读取;
所述二维阵列寻址用于矩阵或是相同长度的向量序列,源操作数的地址信息包括起始地址、子序列长度和子序列数目,所述读地址生成器从起始地址开始以1为步长累加,当累计产生的地址个数等于子序列长度和子序列数目的乘积时,则停止地址累加并通知所述数据提取单元停止数据读取。
进一步地,所述执行模块包括两个操作数输入端口、一个操作码输入端口、至少一个单目运算单元、至少一个双目运算单元、一个单目输出端口和一个双目输出端口;
各所述单目运算单元的输入端均通过多路选择器连接一所述操作数输入端口和每一所述双目运算单元的输出端,各所述单目运算单元的输出端均通过并串转换单元连接所述单目输出端口;每一所述双目运算单元的输入端均连接对应所述操作数输入端口,每一所述双目运算单元的输出端均连接所述双目输出端口;所述操作码输入端口连接所述执行模块中的各多路选择器;
一所述操作数输入端口用于在每一时钟周期输入源操作数向量或实时流数据的一个元素,另一所述操作数输入端口用于在每一时钟周期输入另一源操作数向量的一个元素或常数标量;
所述操作码输入端口用于控制各所述单目运算单元和双目运算单元是否执行运算,选择各所述单目运算单元和双目运算单元的操作数,以及选择执行运算的所述单目运算单元和双目运算单元中的多功能运算;
所述单目运算单元用于对每一周期输入的源操作数向量或实时流数据的元素以及内部存储的当前值执行某种运算,并将执行运算的结果替换当前值,当输入向量结束将当前值作为单目运算结果输出;
所述双目运算单元用于对两所述操作数输入端口每一周期输入的两个源操作数向量元素进行相同的双目运算,其中,如果一个源操作数为常数标量,则在每一周期通过对应操作数输入端口重复读取所述数据准备模块中的常数寄存器值,双目运算结果作为结果序列的一个新元素输出;
所述单目输出端口用于输出所有所述单目运算单元的单目运算结果;
所述双目输出端口用于输出所述双目运算单元的双目运算结果向量序列或输出M型指令输出的向量序列。
进一步地,所述执行模块通过所述操作码输入端口输入的操作码的控制,采用普通模式、多操作单数据流模式、级联操作模式或连续操作模式,对实时流数据、当前需执行指令的立即数或本地存储器内存储的向量进行单目运算或双目运算;
其中,所述执行模块的多操作单数据流模式为:
通过指令操作码配置若干所述单目运算单元并行处理同一向量或实时流数据,产生的多个单目运算结果依次通过并串转换单元从所述单目输出端口输出;
级联操作模式为:
通过指令操作码配置所述双目运算单元先对两个向量执行双目运算,然后通过所述单目运算单元对双目运算结果向量执行单目运算,双目运算结果传输至所述单目运算单元,最终的运算结果通过所述单目运算单元的输出端输出;
连续操作模式为:
通过指令操作码配置,所述单目运算单元将在每次累计处理的元素个数到达子序列长度时,将当前结果的值输出至所述并串转换单元进行缓存,并同时将内部中间值寄存器复位,待所有数据计算完毕时,再将所述并串转换单元中的运算结果串行输出。
进一步地,所述本地存储器划分为若干可并行读写的存储块,其中,第1组若干个存储块用于存储不同通道的实时流数据,第2组至少两个存储块用于存储双目运算结果,第3组至少一个存储块用于存储单目运算结果以及连续指令、多操作单数据流指令和级联操作指令的结果;
所述写回模块包括实时流数据地址生成器、双目指令目的地址生成器、连续指令目的地址生成器和循环目的地址生成器;
所述实时流数据地址生成器用于控制所述本地存储器第1组的存储块;
所述双目指令目的地址生成器用于控制所述本地存储器第2组的存储块;
所述连续指令目的地址生成器和循环目的地址生成器控制所述本地存储器第3组的存储块。
进一步地,所述实时流数据地址生成器地址的产生方法为:
对所述本地存储器的第1组存储块写回的起始地址初始化为0,当实时流数据输出时,地址指针进行累加,并对对应地址依次写入输出的实时流数据,累加到指令定义的流序列长度时,地址指针重新回到0,此时完成第1组存储块内的第一个存储块的写入,进入第二个存储块的写入,重复上述内容,直至完成第1组所有存储块的写入,当一帧实时流数据全部记录完成后,地址指针回到第一个存储块的0地址,等待新一帧的实时流数据到来,并重复上述的操作;
所述双目指令目的地址生成器地址的产生方法为:
当执行M型指令时,从关键字段中的目的地址信息的首地址开始进行递增,每次递增的步长为1;当执行双目运算时,每次执行新的指令,双目指令目的地址生成器的地址指针初始化为0,每接收一个新的双目运算结果元素,地址指针递增1;
所述连续指令目的地址生成器地址的产生方法为:
当单目运算结果为连续指令的单目运算结果时,连续指令目的地址生成器将地址指针初始化为首地址,每次递增的步长为1;
所述循环目的地址生成器地址的产生方法为:
当单目运算结果为非连续指令的单目运算结果时,所述译码器提取指令中的“目的存储器地址”、“不同运算单元步长”和“循环步长”三个字段,同一条指令相邻两次执行时当前所述单目运算单元的目的存储器地址在上一帧的基础上添加一个“循环步长”间隔,当“循环步长”等于0时,原地址覆盖,当指令缓存器中的指令循环执行一次后,地址指针将重新回到首地址。
一种在传输过程中提取流数据特征的流处理器的实现方法,包括以下内容:
1)CPU将指令序列写入指令缓存器内,形成一个指令序列,同时配置程序指针寄存器控制指令序列的循环执行次数,当CPU完成流处理器的初始化配置后,由CPU发送启动命令,控制流处理器进入到工作状态;
2)指令缓存器内的程序指针寄存器从起始地址依次递增,该程序指针寄存器指示的指令被取出作为当前需执行的指令;
3)译码器对当前需执行的指令进行分析,提取出当前需执行指令的关键字段;
4)数据准备模块根据关键字段提取本地存储器内存储的源操作数向量元素并输入至执行模块,将到达的实时流数据转发至执行模块,以及存储当前需执行指令中的立即数;
5)执行模块对实时流数据、当前需执行指令的立即数或本地存储器内存储的向量进行单目运算或双目运算,得到运算结果;
6)数据准备模块和执行模块采用流水线的工作方式,执行模块在处理上一时钟周期预取的源操作数时,数据准备模块预取下一时钟周期的源操作数;
7)双目运算执行时,执行模块和写回模块采用流水线的工作方式,执行模块在处理当前时钟周期的元素时,写回模块将上一时钟周期输出的运算结果序列元素写入本地存储器的目的地址;
8)写回模块执行前一条指令的最后一个时钟周期,指令缓存器内的程序指针寄存器值加1,开始执行下一条指令的获取;
9)当指令缓存器内的程序指针寄存器指示指令到达最后一条指令后返回起始地址,同时循环次数计数器加1,当循环次数达到设定边界时则终止,并同时向CPU发出一个中断信号。
进一步地,所述步骤5)中,如果执行的指令为单目运算指令,则:
每一时钟周期,两操作数输入端口从输入向量中取出一个元素送入单目运算单元的输入端,单目运算单元采用中间值寄存器中的中间值与取出的元素进行计算,计算结果写入中间值寄存器覆盖原值;
当最后一个输入向量的元素计算完毕,单目运算单元的中间值寄存器的值作为单目运算结果写入目的存储器地址;
如果执行的指令为双目运算指令,则:
每一时钟周期,两操作数输入端口从两个等长向量或一个实时流和一个向量中各取出相同索引的元素,分别输入至双目运算单元的对应输入端,其中,如果一个源操作数为常数标量,则将指令的关键字段中对应的常数标量输入至双目运算单元的对应输入端;
双目运算单元产生一个双目运算结果作为输出向量对应位置的元素,顺序写入目的存储器地址,写入地址按照指令指定的方式依次递增,当所有输入向量的元素计算完毕运算过程停止时,最终得到一个和输入向量等长的输出向量;
如果执行的指令为连续模式指令,则:
每一时钟周期,两操作数输入端口从两个等长向量或一个实时流和一个向量中各取出相同索引的元素,分别输入至双目运算单元的对应输入端,其中,如果一个源操作数为常数标量,则将指令的关键字段中对应的常数标量输入至双目运算单元的对应输入端;
双目运算单元产生一个双目运算结果送入单目运算单元的输入端,单目运算单元采用中间值寄存器中的中间值与取出的元素进行计算,计算结果写入中间值寄存器覆盖原值;
当所有输入向量的元素均计算完毕时,将单目运算单元的中间值寄存器的值作为单目运算结果写入目的存储器地址;
如果执行的指令为MOVE指令,则:
每一时钟周期,从一操作数输入端口读入输入向量或实时流的一个元素;
将读取的元素直接发送至双目输出端口作为输出向量对应位置的元素,顺序写入目的存储器地址,写入地址按照指令指定的方式依次递增,当所有输入向量的元素移动完毕时,最终得到一个与输入向量相同的输出向量。
本发明由于采取以上技术方案,其具有以下优点:
1、本发明的流处理器在系统中作为执行传感器数据特征提取的协处理器,串联在信号预处理和系统存储器之间的传输路径上,接收预处理好的信号实时流数据,直接进行特征提取,然后将提取后的特征存入供CPU或其它处理器访问的系统存储器中,在这个过程中实现数据的压缩,使得写入存储器和由存储器读出的数据量大幅减少,本发明由于避免不必要的数据存储和读出,能够降低特征提取的平均功耗、缩短计算时间,提高智能传感器芯片特征提取部分的能量效率。
2、本发明支持实时流数据指令、长向量运算,提供多操作单数据流、级联操作、二维阵列寻址模式,减少处理过程中的存储器访问,数据流处理速度更快,提升传感器流数据特征提取类计算任务的执行能量效率。
3、本发明在实时流数据的传输过程中完成特征提取,CPU接收的是已经提前的特征,这种方式能够卸载大量的CPU计算,且能够压缩从主存储器读取和写入主存储器的数据量,降低CPU的负担,减轻对CPU性能的要求,且CPU可以在本发明提取特征的时间处理其它任务,提升整个系统的并行性。
4、本发明采用SRAM(静态随机存取存储器)代替经典向量处理器中的寄存器堆作为中间存储,这是因为在本发明的特征提取过程中,大部分的数据均为长向量,采用寄存器堆进行临时存储则会造成很大面积开销,而SRAM具有更高的存储密度,可开辟足够大的空间,可以克服向量长度的限制,从而支持长向量的运算操作。
5、通过M型指令,本发明的流处理器可以充当简单DMA的角色,也用于执行不同存储块之间的顺序数据移动,增加数据调度的灵活性,根据实际需要,本发明的流处理器的指令序列中没有包含常规处理器中的标量运算指令、分支指令、load/store指令,能够大大简化设计。
6、本发明中双目运算结果和单目的运算结果分别保存至本地存储器的不同存储块内,能够降低寻址逻辑的复杂性,本发明可以广泛应用于传感器数据处理器领域中。
附图说明
图1是本发明一实施例提供的流处理器结构示意图;
图2是本发明一实施例提供的指令执行流程示意图;
图3是本发明一实施例提供的双目运算支持的四种源操作数类型组合示意图;
图4是本发明一实施例提供的单目运算支持的两种源操作数类型示意图;
图5是本发明一实施例提供的执行模块的结构示意图;
图6是本发明一实施例提供的写回模块的结构示意图;
图7是本发明一实施例提供的写回模块的M6地址映射示意图;
图8是本发明一实施例提供的指令编码格式示意图。
具体实施方式
以下结合附图来对本发明进行详细的描绘。然而应当理解,附图的提供仅为了更好地理解本发明,它们不应该理解成对本发明的限制。在本发明的描述中,需要理解的是,术语“第一”、“第二”等仅仅是用于描述的目的,而不能理解为指示或暗示相对重要性。
本发明提出一种在传输过程中提取流数据特征的流处理器,用于传感器数据流的特征提取运算,称为“流计算引擎(stream computing engine,SCE)”,它作为在数据流的流动路径上的通路,对流经它的实时流数据进行各种向量运算。这种方式能够卸载大量的CPU计算,且能够压缩从主存储器读取和写入主存储器的数据量,还支持实时流数据的处理,长向量运算,二维数组寻址,多指令单数据流(Multiple Operations Single Data Stream,MOSD)和级联操作。
实施例1
如图1、图2所示,本实施例提供一种在传输过程中提取流数据特征的流处理器,包括实时流输入端口、指令缓存器、译码器、数据准备模块、执行模块、写回模块和本地存储器(LM)。
实时流输入端口用于输入前级传感器的实时流数据,得到数据序列,其中,实时流为一种特殊操作数类型,数据元素由前级电路主动地发送,以串行方式顺序到达实时流输入端口,每一时钟周期输入一个数据元素值,数据元素值只在对应周期有效,前级电路不保存历史上的实时流数据,数据序列的长度在指令缓存器的指令中给定。由实时流输入端口输入的实时流数据可以不经过本地存储器存储直接由数据准备模块转发至执行模块作为输入的源操作数。
指令缓存器用于缓存指令序列,并通过程序计数器指示当前需执行的指令,指令缓存器中存储的指令由CPU通过系统总线写入,指令缓存器内部的程序计数器由CPU通过系统总线发出的命令控制。其中,本发明的指令集支持V型指令和M型指令,V型指令用于特征提取的向量运算操作,这些特征提取指令的源操作数至少包括一个向量或实时流数据,M型指令用于数据搬移,无需计算处理即可将源操作数移动至目的存储器地址。
译码器用于对当前需执行的指令进行分析,提取出当前需执行指令的指令类型、寻址方式、模式、源操作数地址信息、目的地址信息和立即数(常数标量)等关键字段。
数据准备模块用于根据关键字段提取本地存储器内存储的源操作数向量元素并输入至执行模块,将到达的实时流数据转发至执行模块,以及存储当前需执行指令中的立即数即常数标量。
执行模块用于采用普通模式、多操作单数据流模式、级联操作模式或连续操作模式,对实时流数据、立即数或本地存储器内存储的源操作数向量元素进行单目运算或双目运算,得到运算结果。
写回模块用于根据关键字段中的目的地址信息,将运算结果写入本地存储器内,其中,当写回模块执行前一条需执行的指令的最后一个时钟周期开始,指令缓存器发射下一条需执行的指令。
本地存储器用于存储原始实时流数据、指令序列执行运算过程产生的中间结果和执行模块得到的最终运算结果。
在一个优选的实施例中,本发明的流处理器还包括CPU访问端口,CPU访问端口用于CPU对本地存储器的数据进行读写,使得CPU能够通过总线从本地存储器中读写数据,此功能对于CPU和本发明流处理器的协作计算很有用处。CPU访问端口的访问通过CPU访问控制单元分别与本地存储器的LM对外端口的写和读数据端口连接,CPU访问控制单元用于CPU对本地存储器的访问以及写回模块和数据准备模块对本地存储器的访问进行仲裁,指令缓存器的输入端口通过系统总线连接CPU,该输入端口用于从CPU接收指令序列、循环执行次数和程序执行启动命令。
在一个优选的实施例中,实时流输入端口设置有一有效标志信号valid,每一实时流数据到达时,valid信号会同时升高为高电平;否则,valid信号为低电平。对以实时流数据为源操作数的指令采用数据驱动的方式,即采用实时流输入端口的valid信号作为标记,只有valid信号有效的时钟周期的实时流数据才被接收为实时流数据元素,同时,对应的另一个向量源操作数(如果存在)的地址才相应递增。
在一个优选的实施例中,指令缓存器为一个队列,包括程序指针寄存器,用于指示当前需执行的指令。
在一个优选的实施例中,V型指令为向量运算指令,其源操作数至少包括一个向量或实时流数据,其运算按照源操作数的个数分为单目和双目运算两种,单目运算输入一个向量或实时流数据,输出至少一个标量值;双目运算输入两个等长向量、一个实时流数据和一个向量、一个向量和一个常数标量或一个实时流数据和一个常数标量,输出一个等于输入向量长度的结果向量。M型指令只包括一个用于数据搬移的M型指令,将源操作数移动到目的存储器地址,当源操作数为实时流数据时,执行M型指令的流处理器相当于一个简单DMA(直接存储器访问);当源操作数为向量时,M型指令用于执行不同存储块之间的顺序数据移动。根据实际需要,指令序列中没有包括常规处理器中的标量运算指令、分支指令和load/store指令。如图3和图4所示,向量表示缓存在本地存储器内的一组给定长度、地址等间隔的数据,实时流数据是指来自前级传感器的实时信号数据流,从实时流输入端口以串行方式顺序到达,向量和实时流数据均为向量数据,实时流数据可以看成是一种特殊寻址方式的向量变量,常数项为指令中包含的立即数,只有标量形式,参与运算时通过复制扩展成一个常数向量。实时流数据在本发明中可以不经过本地存储器存储直接参与运算,也可以存储到本地存储器中。
在一个优选的实施例中,数据准备模块包括读地址生成器、常数寄存器和数据提取单元。
读地址生成器用于根据关键字段中的寻址方式和源操作数地址信息,生成本地存储器中的源操作数元素的读取地址,其中,对于涉及向量的指令,读地址生成器自动从源操作数和目的操作数的首地址开始,以固定的步长递增生成读写地址,读地址生成代替了通用处理器中需要用其它指令进行地址计算的做法,大大减少指令数量、提高运行速度。
常数寄存器用于存储当前需执行指令中的立即数,实现立即数寻址。
数据提取单元用于将到达的实时流数据转发至执行模块,优选地,在源操作数地址为0时实现实时数据流寻址;以及在指令指示直接寻址和二维阵列寻址时,按照读地址生成器生成的源操作数元素读取地址,提取本地存储器内存储的源操作数向量元素并输入至执行模块。
在一个优选的实施例中,读地址生成器实现的寻址方式包括实时流寻址、直接寻址、立即数寻址和二维阵列寻址,下面对这四种方式进行介绍:
①直接寻址,该寻址方式用于寻址本地存储器中的向量,源操作数的地址信息包括向量的首地址、步长和向量长度,其中,通过改变步长,不仅可以在连续的地址范围内提取向量即进行寻址,且可以以相等步长在非连续的地址范围提取向量。读地址生成器输出的源操作数元素的读取地址从首地址开始每次累加一个步长,当累计产生的读取地址总数等于向量长度时,则停止地址累加并通知数据提取单元停止数据读取。
②实时流寻址,实时流数据到达后将直接发送至执行模块中进行计算,无需先将数据保存在本地存储器中再从中获取数据的多余步骤。实时流数据固定地从数据输入端口读取,不需要地址,实时流数据用不指向任何真实存储器的特殊值(例如0)作为首地址和流的长度定义,为只读数据,当读入元素个数等于实时流长度时停止接收数据;指令执行采用数据驱动的方式,即每到达一个有效的实时流数据就执行一次相应的操作;对于向量与实时流数据的双目运算,向量的读取与实时流数据的到达同步。
③立即数寻址,常量操作数编码为指令码中的一部分,它在译码阶段被解析,并在数据准备阶段被写入常数寄存器,它将与进入到执行模块的向量中每一数据均进行指令指定的操作。
④二维阵列寻址,该寻址方式用于矩阵或是相同长度的向量序列(例如本地存储器中的向量或实时流数据),通过支持二维阵列寻址的指令实现多个行(或列)的计算;源操作数的地址信息包括起始地址、子序列长度和子序列数目,读地址生成器从起始地址开始以1为步长累加,当累计产生的地址个数等于子序列长度和子序列数目的乘积时,则停止地址累加并通知数据提取单元停止数据读取。关于该寻址方式的设计背景为:距离和多普勒轮廓特征是智能雷达系统中最重要、最常用的特征,且距离和多普勒轮廓均需要对RDM(距离-多普勒图像)的每一行或每一列求和,如果采用常规向量和指令完成,则每一行或每一列的运算均将涉及一个指令,程序中将有多个连续的相似指令,存储这些指令也会造成指令缓存空间的浪费。且整个RDM的数据会以固定速率,即一个时钟周期一个数据的方式进行传输,当开始新的一行或一列数据传输时必须在一个时钟周期内获取和解码一条新指令,这就增加了对取指和译码逻辑的性能要求。而本发明的流处理器通过支持二维阵列寻址的指令实现多个行或列的计算,通过增加这种模式,能够解决连续序列计算引起的冗余指令的问题,大大提高编码和译码的效率。
在一个优选的实施例中,如图5所示,执行模块包括两个操作数输入端口、一个操作码输入端口、至少一个单目运算单元、至少一个双目运算单元、一个单目输出端口和一个双目输出端口,其中,每一单目运算单元均可以包括一个第一输入端口、一个求最值单元、两个乘累加器单元和一个第一输出端口,每一双目运算单元均可以包括两个第二输入端口、一个加法运算单元、一个减法运算单元、一个乘法运算单元和一个第二输出端口。
各第一输入端口均通过多路选择器连接一个操作数输入端口和每一第二输出端口,各第一输出端口均通过并串转换单元连接单目输出端口;每一第二输入端口均连接对应操作数输入端口,每一第二输出端口均连接双目输出端口,当执行M型指令时,旁路各双目运算单元,直接将操作数输入端口的向量或实时流数据由双目输出端口输出。
操作码输入端口连接执行单元内部各多路选择器的选择信号,用于控制各单目运算单元和双目运算单元是否执行运算,选择各单目运算单元和双目运算单元的操作数,以及选择执行运算的单目运算单元和双目运算单元中的多功能运算单元(例如求最值单元、乘累加器单元、加法运算单元、减法运算单元和乘法运算单元等)所执行的具体运算,例如选择乘累加单元是执行累加运算还是平方后累加运算。
两操作数输入端口分别接收两个源操作数向量,一操作数输入端口用于在每一时钟周期输入源操作数向量或实时流数据的一个元素;另一操作数输入端口用于在每一时钟周期输入另一源操作数向量的一个元素或常数标量。当只执行单目运算时,其中一个操作数输入端口数据无效;当执行两个向量或一个向量和一个实时流数据的双目运算时,两个操作数输入端口输入的源操作数向量或实时流数据的长度相等;当执行一个向量或一个实时流数据和一个常数标量的双目运算时,持续周期数等于源操作数向量或实时流数据的长度。
求最值单元用于计算源操作数向量或实时流数据的最大值、最小值以及最大值和最小值的坐标。
乘累加器单元用于根据当前需执行的指令,对源操作数向量或实时流数据进行求和或求平方和。
单目输出端口用于输出求最值结果以及求和或求平方和结果。
加法运算单元用于对两操作数输入端口输入的源操作数向量进行加法运算。
减法运算单元用于对两操作数输入端口输入的源操作数向量进行减法运算。
乘法运算单元用于对两操作数输入端口输入的源操作数向量进行对应元素相乘运算。
双目输出端口用于输出双目运算结果向量序列或输出M型指令输出的向量序列。
在一个优选的实施例中,执行模块通过操作码输入端口输入的操作码的控制,可采用多操作单数据流模式、级联操作模式或连续操作模式,对实时流数据、当前需执行指令的常数标量和本地存储器内存储的向量进行单目运算或双目运算,其中:
①多操作单数据流模式(multiple operation single data,MOSD):通过指令操作码配置最多3个单目运算单元并行处理同一向量或实时流数据,即在执行模块中将输入数据同时送入多个单目运算单元,同时完成多个计算,产生的多个单目运算结果依次通过并串转换单元从单目输出端口输出,从而减少访问本地存储器的时间和相应的硬件开销,实现的方式为在指令的操作码中的对应控制位置为1。
②级联操作模式:通过指令操作码的配置双目运算单元先对两个向量执行双目运算,然后通过单目运算单元对双目运算结果向量执行单目运算,双目运算结果通过执行模块内双目运算单元的第二输出端口和单目运算单元的第一输入端口之间的数据通路传输至单目运算单元,最终的运算结果通过单目运算单元的第一输出端口输出。级联模式避免了将双目运算结果存入本地存储器后再次读出,适用于特征提取中先计算低维特征向量再计算高维特征向量的情况。
③连续操作模式:通过指令操作码配置,求和与求平方和指令可以实现对一个按行(或列)串行输入的二维数据矩阵每行(或列)单独计算其和或平方和,并按照行(或列)的顺序依次通过单目运算单元的第一输出端口串行输出,实现方式为在指令中采用二维阵列寻址方式定义向量或实时流数据。在该模式下,执行模块中的乘累加器单元将在每次累计到达子序列长度时,将当前结果的值输出至并串转换单元进行缓存,并同时将内部中间值寄存器复位,待所有数据计算完毕时,再将并串转换单元中的运算结果串行输出。
除上述特殊模式外,普通模式下,一条指令执行一项非二维寻址的源操作数的单目运算或双目运算。
在一个优选的实施例中,本地存储器采用SRAM,本地存储器被划分为几个可以并行读写的存储块,每一存储块均为一读一写的简单双口模式,这些存储块具有不同的功能用途,其中,第1组若干个存储块用于存储不同通道的实时流数据,典型情况下每一存储块对应一个前级传感器的实时流数据,指令可以读取其存储的实时流数据作为源操作数向量;第2组至少两个存储块,用于存储双目运算结果,这是因为本发明的流处理器支持双目运算,最多需要同时从两个存储块分别读取操作向量,这时至少需要有两个独立的存放向量数据的存储块;第3组至少一个存储块用于存储单目运算结果,也包括上述连续指令、多操作单数据流指令和级联操作指令的结果,因为特征提取的结果一般最终均会经过单目运算变为一系列的标量值,所以该存储块也是特征提取的最终结果存放空间。
在一个优选的实施例中,如图6、图7所示,写回模块包括写地址生成器,写地址生成器包括四个子写地址生成器,用于控制本地存储器内不同组存储块的写回操作,其中,一子写地址生成器为实时流数据地址生成器,用于控制本地存储器第1组的存储块(例如:图6中的M1存储块、M2存储块和M3存储块)的写回操作;一子写地址生成器为双目指令目的地址生成器,用于控制本地存储器第2组的存储块(例如:图6中的M4和M5存储块)的写回操作,另外两个子写地址生成器为连续指令目的地址生成器和循环目的地址生成器,用于控制本地存储器第3组的存储块(例如:图6中的M6存储块)的写回操作。
实时流数据地址生成器地址的产生方法为:对本地存储器的第1组存储块写回的子写地址生成器M1的起始地址初始化为0,当实时流数据输出时,地址指针进行累加,并对对应地址依次写入输出的实时流数据,累加到指令定义的流序列长度时,地址指针重新回到0,此时完成第1组存储块内的第一个存储块的写入,进入第二个存储块的写入,重复上述内容,再次累加到指定实时流数据量时,开始对第三个存储块的写入,……,当一帧实时流数据全部记录完成后,地址指针回到第一个存储块的0地址,等待新一帧的实时流数据到来,并重复上述的操作。
双目指令目的地址生成器对应M型指令的搬移数据以及双目运算结果,地址的产生方法为:当写回数据为M型指令的搬移数据时,双目指令目的地址生成器从关键字段中的目的地址信息的首地址开始进行递增,每次递增的步长为1;当写回数据为双目运算结果时,每次执行新的指令,双目指令目的地址生成器的地址指针初始化为0,每接收一个新的双目运算结果元素,地址指针递增1。
连续指令目的地址生成器用于连续指令的单目运算结果向第3组存储块的写入,地址的产生方法为:当单目运算结果为连续指令的单目运算结果时,连续指令目的地址生成器将地址指针初始化为首地址,每次递增的步长为1。
循环目的地址生成器用于非连续指令的单目运算结果向第3组存储块的写入,地址的产生方法为:当单目运算结果为非连续指令的单目运算结果时,考虑到存在所述多操作单数据模式的情况,如果对每一单目运算单元均分配一个目的存储器地址来指示,则大大增加指令码的长度,造成硬件开销的浪费,因此,本发明在指令中设置“目的存储器地址”字段和“不同运算单元步长”字段,其中“目的存储器地址”字段表示第一个在工作的单目运算单元的单目运算结果的存放地址,“不同运算单元步长”字段表示不同单目运算单元结果存放地址之间的间隔,其他在工作的单目运算单元的单目运算结果的存放地址在前一个单目运算单元目的存储器地址的基础上添加一个步长,由于支持循环功能,为提高效率,循环变量由专用逻辑维护,是非显式的,且不支持任何标量运算,为解决跨循环的地址变化,单目运算指令中再添加“循环步长”字段表示同一条指令相邻两次执行时。译码器提取指令中的“目的存储器地址”、“不同运算单元步长”和“循环步长”三个字段,同一条指令相邻两次执行时当前单目运算单元的目的存储器地址在上一帧的基础上添加一个“循环步长”间隔,当“循环步长”等于0时,即是原地址覆盖;当指令缓存器中的指令循环执行一次后,地址指针将重新回到首地址。
在一个优选的实施例中,本地存储器对系统CPU可见,CPU可以通过本发明的CPU访问控制单元对本地存储器进行访问,从而实现本发明的流处理器与CPU之间的基于共享存储器方式的数据交换。CPU访问控制单元是一个代理内存访问端口,连接至系统总线,将本地存储器虚拟为一个普通的数据存储器,和CPU子系统中的数据SRAM处在一个地址空间。CPU将流处理器的本地存储器视为常规的扩展独立片上内存,系统中为其分配了地址空间,CPU通过AXI4-Lite协议对流处理器的本地存储器进行读写操作。CPU访问控制单元带有仲裁逻辑,在对本地存储器进行读写期间,屏蔽CPU对本地存储器的访问请求,并向CPU反馈“忙”响应。当CPU和流处理器访问本地存储器的不同存储块时,互不影响,可以同时并行完成读写;当CPU和流处理器均需要访问本地存储器的同一存储块时,则存在访问冲突。
实施例2
本实施例提供一种在传输过程中提取流数据特征的流处理器的实现方法,包括以下步骤:
1)用户在软件层面根据所需提取的特征,编写相应的程序,每段程序均为一个指令序列,CPU通过AXI4-Lite总线将指令序列写入指令缓存器的指令缓存区中,指令缓存区的指令按照写入顺序存放,形成一个指令序列。
2)指令缓存器内的程序指针寄存器根据程序指针指示当前需执行的指令在指令序列中的序号,具体为:
2.1)CPU通过配置程序指针寄存器控制指令序列的循环执行次数,当CPU完成对本发明的流处理器的初始化配置后,由CPU发送启动命令,控制流处理器进入到工作状态。
2.2)本发明的流处理器进入到工作状态后,指令缓存器内的程序指针寄存器从起始地址依次递增,该程序指针寄存器指示的指令被取出作为当前需执行的指令,程序指针寄存器从起始地址依次递增,到达最后一条指令后返回起始地址,同时循环次数计数器加1,当循环次数达到设定边界时则终止,并同时向CPU发出一个中断信号。
2.3)为保证指令能够循环使用,即下发一组指令,能够对N帧的数据循环处理N次,本发明的流处理器支持同一组指令循环执行多次,这种循环模式能够有效地降低指令编码的复杂度,同时节省指令缓存的空间,指令码中设置“LP”字段表示相邻两次执行时,目的存储器地址之间的间隔。
3)译码器对当前需执行的指令进行分析,提取出当前需执行指令的指令类型、寻址方式、模式、源操作数地址、目的地址信息和立即数等关键字段。
4)数据准备模块根据关键字段提取本地存储器内存储的源操作数向量元素并输入至执行模块,将到达的实时流数据转发至执行模块,以及存储当前需执行指令中的立即数即常数标量,具体为:
4.1)读地址生成器根据关键字段中的寻址方式和源操作数地址,生成源操作数读取地址。
4.2)常数寄存器存储当前需执行指令中的立即数。
4.3)数据提取单元将到达的实时流数据转发至执行模块,以及按照读地址生成器生成的源操作数读取地址,提取本地存储器内存储的源操作数向量元素并输入至执行模块。
5)执行模块对实时流数据、立即数或本地存储器内存储的源操作数向量元素进行单目运算或双目运算,得到运算结果,其中,对于双目运算的指令,执行模块和写回模块采用流水线的工作方式,每一向量元素依次进行计算,在执行当前向量元素计算的同时将上一时钟周期的运算结果元素写入目的存储器地址空间内;对于单目运算的指令,待执行模块完成后,写回模块将运算结果写入本地存储器内,具体为:
如果执行的指令为单目运算指令,则:
5.1)每一时钟周期,两操作数输入端口从输入向量中取出一个元素送入单目运算单元的第一输入端口,单目运算单元采用中间值寄存器中的中间值与取出的元素进行计算,运算结果写入中间值寄存器覆盖原值。
5.2)当最后一个输入向量的元素计算完毕,单目运算单元的中间值寄存器的值作为单目运算结果写入目的存储器地址。
如果执行的指令为双目运算指令,则:
5.3)每一时钟周期,两操作数输入端口从两个等长向量或一个实时流和一个向量中各取出相同索引的元素,分别输入至双目运算单元的对应第二输入端口,其中,如果一个源操作数为常数标量,则将指令的关键字段中对应的常数标量输入至双目运算单元的对应第二输入端口。
5.4)双目运算单元产生一个双目运算结果作为输出向量对应位置的元素,顺序写入目的存储器地址,写入地址按照指令指定的方式依次递增,当所有输入向量的元素计算完毕运算过程停止时,最终得到一个和输入向量等长的输出向量。
如果执行的指令为连续模式指令,则:
5.5)每一时钟周期,两操作数输入端口从两个等长向量或一个实时流和一个向量中各取出相同索引的元素,分别输入至双目运算单元的对应输入端,其中,如果一个源操作数为常数标量,则将指令的关键字段中对应的常数标量输入至双目运算单元的对应输入端。
5.6)双目运算单元产生一个双目运算结果送入单目运算单元的输入端,单目运算单元采用中间值寄存器中的中间值与取出的元素进行计算,计算结果写入中间值寄存器覆盖原值。
5.7)当所有输入向量的元素均计算完毕时,将单目运算单元的中间值寄存器的值作为单目运算结果写入目的存储器地址。
如果执行的指令为MOVE指令,则:
5.8)每一时钟周期,从一操作数输入端口读入输入向量或实时流的一个元素。
5.9)将读取的元素直接发送至双目输出端口作为输出向量对应位置的元素,顺序写入目的存储器地址,写入地址按照指令指定的方式依次递增,当所有输入向量的元素移动完毕时,最终得到一个与输入向量相同的输出向量。
6)数据准备模块和执行模块采用流水线的工作方式,执行模块在处理上一时钟周期预取的源操作数时,数据准备模块预取下一时钟周期的源操作数。
7)双目运算执行时,执行模块和写回模块采用流水线的工作方式,执行模块在处理当前时钟周期的元素时,写回模块将上一时钟周期输出的运算结果序列元素写入本地存储器的目的地址。
8)写回模块执行前一条指令的最后一个时钟周期,指令缓存器内的程序指针寄存器值加1,开始执行下一条指令的获取。
9)当指令缓存器内的程序指针寄存器指示指令到达最后一条指令后返回起始地址,同时循环次数计数器加1,当循环次数达到设定边界时则终止,并同时向CPU发出一个中断信号。
下面通过具体实施例详细说明本发明的流处理器中两种指令类型的一种指令编码格式:
本实施例给出两种指令类型的一种指令编码格式,如图8所示,指令码的长度为86比特,格式中的基本操作码字段(最高有效6位)表示指令的类型:当其所有位均为1时,该指令属于M型指令;否则,为V型指令。
对于V型指令,主要包括5种字段,其中,指令码的第80至85位独立控制执行模块中6个独立运算单元的工作状态,“0”表示非工作状态,“1”表示工作状态;“S1”和“S2”字段控制两个乘累加器单元为累加器还是平方累加器;“O”、“D”、“C1”和“C2”字段表示寻址模式字段,其中,“C1”和“C2”分别控制两个乘累加器单元的工作对象为连续/不连续序列,“O”字段控制在LM中读取数据的方式是按顺序取还是按固定步数取,如果方法为后者,则步数由“L2”或“NC-L”字段确定,“D”字段表示数据是一维向量还是二维矩阵;“NC-L”、“L1”和“L2”字段表示寻址步长信息,“L1”和“L2”的乘积确定向量的总长度;最后一个字段表示源操作数和目的存储器地址信息,当执行双目运算时,“SP1”和“SP2”分别指向两个源操作数的首地址;“SS1”和“SS2”表示源操作数的片选信号,例如实时流数据的编码为“000”,LM的M1-M5编码从“001”到“110”,常数项编码为“111”,当“SS2”表示数据为常数项时,“SP2”的数据表示常数项的具体数值。“R”表示单目运算单元的输入数据来源,“0”表示取“SS1”和“SP1”指向的数据,“1”表示取双目运算的结果。“DP”表示单目运算结果存放的首地址,“Step”字段是“不同运算单元步长”字段,表示当执行MOSD指令即多个单目运算单元并行工作时,不同单目运算单元结果的存放地址之间的间隔,例如当两个乘累加器单元同时工作时,假设第一个乘累加器单元的结果存放在地址i处,则第二个乘累加器单元的结果则存放在(i+Step)处;为保证指令能够循环使用,即下发一组指令,能够对N帧的数据循环处理N次,本发明的流处理器支持同一组指令循环执行多次,这种循环模式有效地降低指令编码的复杂度,同时节省指令缓存的空间,指令码中的“LP”字段表示相邻两次执行时,目的存储器地址之间的间隔;“DB”字段表示双目结果存放的LM选择,由于只有M4和M5可存放双目结果,因此,该字段仅需1比特表示即可。
对于M型指令,主要包括3种字段,其中,指令码的第80至85位表示指示位,当全为“1”时表示指令为M型指令;“L1”和“L2”的乘积表示搬移数据的总长度,“SP”和“DP”分别为源操作数和目的存储器地址指针,“SS”和“DS”源操作数和目的操作数的片选信号。
本发明的流处理器被集成到基于超声波或雷达的手势识别系统中完成特征提取任务,在该手势识别系统中每帧有35维特征,包括各通道RDM的能量最大值及对应坐标、数据总和、距离标准差、速度标准差、两两通道的RDM之差差分RDM的统计特征、以及距离轮廓和速度轮廓特征等,采用本发明的流处理器对上述特征进行提取,包括以下步骤:
步骤S1:初始化流处理器。
步骤S2:CPU配置流处理器并下发手势识别系统中特征提取所涉及的指令序列。
步骤S3:CPU完成配置并启动流处理器。
步骤S4:流处理器进入到正常的传感器流数据处理过程。
步骤S5:流处理器完成计算任务并重新回到空闲状态。
在上述特征提取过程中,充分利用本发明的结构优势,采用PIC的处理方式对实时流数据进行处理,同时使用MOSD发挥单目运算的并行处理能力,一条指令尽可能多地提取所需的特征,级联的方式减少数据存储访问的次数,最终使用26条指令完成上述每帧的35维特征的提取,利用设置循环,可以实现多帧特征的提取。
上述实施方式的流处理器的电路结构是采用Verilog语言实现的,并通过xc7a100tcsg324-1 FPGA进行了验证。以同样对大小为120×64的RDM上进行上述35维特征的提取,分别采用本发明的流处理器和FPGA内嵌的软核CPU进行提取计算,下表1显示本发明的流处理器和CPU进行特征提取的性能结果:
表1:SCE和CPU进行特征提取的性能结果
结果表明,本发明的流处理器提取每帧特征所需的时间和能耗分别仅为在CPU实现的1/293和1/234,显然,本发明的流处理器的性能远高于CPU。
上述各实施例仅用于说明本发明,其中各部件的结构、连接方式和制作工艺等都是可以有所变化的,凡是在本发明技术方案的基础上进行的等同变换和改进,均不应排除在本发明的保护范围之外。
Claims (10)
1.一种在传输过程中提取流数据特征的流处理器,其特征在于,包括实时流输入端口、指令缓存器、译码器、数据准备模块、执行模块、写回模块和本地存储器;
所述实时流输入端口用于输入实时流数据,得到数据序列;
所述指令缓存器用于缓存指令序列,并取出当前需执行的指令;
所述译码器用于对当前需执行的指令进行分析,提取出当前需执行指令的关键字段;
所述数据准备模块用于根据关键字段提取所述本地存储器内存储的源操作数向量元素并输入至所述执行模块,将到达的实时流数据转发至所述执行模块,以及存储当前需执行指令中的立即数;
所述执行模块用于对实时流数据、当前需执行指令的立即数或本地存储器内存储的向量进行单目运算或双目运算,得到运算结果;
所述写回模块用于根据关键字段指定的地址,将运算结果写入所述本地存储器内;
所述本地存储器用于存储原始实时流数据、运算过程产生的中间结果和运算结果。
2.如权利要求1所述的一种在传输过程中提取流数据特征的流处理器,其特征在于,所述指令序列支持包括V型指令和M型指令;
V型指令为向量运算指令,其源操作数至少包括一个向量或实时流数据,其运算按照源操作数的个数分为单目和双目运算两种,单目运算输入一个向量或实时流数据,输出至少一个标量值;双目运算输入两个等长向量、一个实时流数据和一个向量、一个向量和一个常数标量或一个实时流数据和一个常数标量,输出一个等于输入向量长度的结果向量;
M型指令只包括一个用于数据搬移的M型指令,将源操作数移动到目的存储器地址。
3.如权利要求1所述的一种在传输过程中提取流数据特征的流处理器,其特征在于,所述数据准备模块包括读地址生成器、常数寄存器和数据提取单元;
所述读地址生成器用于根据关键字段中的寻址方式和源操作数地址信息,生成本地存储器中的源操作数元素的读取地址;
所述常数寄存器用于存储当前需执行指令中的立即数,实现立即数寻址;
所述数据提取单元用于将到达的实时流数据转发至所述执行模块,实现实时数据流寻址;以及在指令指示直接寻址和二维阵列寻址时,按照所述读地址生成器生成的源操作数元素读取地址,提取所述本地存储器内存储的源操作数向量元素并输入至所述执行模块。
4.如权利要求3所述的一种在传输过程中提取流数据特征的流处理器,其特征在于,所述读地址生成器实现的寻址方式包括直接寻址和二维阵列寻址;
所述直接寻址用于寻址所述本地存储器中的向量,源操作数的地址信息包括向量的首地址、步长和向量长度,所述读地址生成器输出的源操作数元素的读取地址从首地址开始每次累加一个步长,当累计产生的读取地址总数等于向量长度时,则停止地址累加并通知所述数据提取单元停止数据读取;
所述二维阵列寻址用于矩阵或是相同长度的向量序列,源操作数的地址信息包括起始地址、子序列长度和子序列数目,所述读地址生成器从起始地址开始以1为步长累加,当累计产生的地址个数等于子序列长度和子序列数目的乘积时,则停止地址累加并通知所述数据提取单元停止数据读取。
5.如权利要求3所述的一种在传输过程中提取流数据特征的流处理器,其特征在于,所述执行模块包括两个操作数输入端口、一个操作码输入端口、至少一个单目运算单元、至少一个双目运算单元、一个单目输出端口和一个双目输出端口;
各所述单目运算单元的输入端均通过多路选择器连接一所述操作数输入端口和每一所述双目运算单元的输出端,各所述单目运算单元的输出端均通过并串转换单元连接所述单目输出端口;每一所述双目运算单元的输入端均连接对应所述操作数输入端口,每一所述双目运算单元的输出端均连接所述双目输出端口;所述操作码输入端口连接所述执行模块中的各多路选择器;
一所述操作数输入端口用于在每一时钟周期输入源操作数向量或实时流数据的一个元素,另一所述操作数输入端口用于在每一时钟周期输入另一源操作数向量的一个元素或常数标量;
所述操作码输入端口用于控制各所述单目运算单元和双目运算单元是否执行运算,选择各所述单目运算单元和双目运算单元的操作数,以及选择执行运算的所述单目运算单元和双目运算单元中的多功能运算;
所述单目运算单元用于对每一周期输入的源操作数向量或实时流数据的元素以及内部存储的当前值执行某种运算,并将执行运算的结果替换当前值,当输入向量结束将当前值作为单目运算结果输出;
所述双目运算单元用于对两所述操作数输入端口每一周期输入的两个源操作数向量元素进行相同的双目运算,其中,如果一个源操作数为常数标量,则在每一周期通过对应操作数输入端口重复读取所述数据准备模块中的常数寄存器值,双目运算结果作为结果序列的一个新元素输出;
所述单目输出端口用于输出所有所述单目运算单元的单目运算结果;
所述双目输出端口用于输出所述双目运算单元的双目运算结果向量序列或输出M型指令输出的向量序列。
6.如权利要求5所述的一种在传输过程中提取流数据特征的流处理器,其特征在于,所述执行模块通过所述操作码输入端口输入的操作码的控制,采用普通模式、多操作单数据流模式、级联操作模式或连续操作模式,对实时流数据、当前需执行指令的立即数或本地存储器内存储的向量进行单目运算或双目运算;
其中,所述执行模块的多操作单数据流模式为:
通过指令操作码配置若干所述单目运算单元并行处理同一向量或实时流数据,产生的多个单目运算结果依次通过并串转换单元从所述单目输出端口输出;
级联操作模式为:
通过指令操作码配置所述双目运算单元先对两个向量执行双目运算,然后通过所述单目运算单元对双目运算结果向量执行单目运算,双目运算结果传输至所述单目运算单元,最终的运算结果通过所述单目运算单元的输出端输出;
连续操作模式为:
通过指令操作码配置,所述单目运算单元将在每次累计处理的元素个数到达子序列长度时,将当前结果的值输出至所述并串转换单元进行缓存,并同时将内部中间值寄存器复位,待所有数据计算完毕时,再将所述并串转换单元中的运算结果串行输出。
7.如权利要求1所述的一种在传输过程中提取流数据特征的流处理器,其特征在于,所述本地存储器划分为若干可并行读写的存储块,其中,第1组若干个存储块用于存储不同通道的实时流数据,第2组至少两个存储块用于存储双目运算结果,第3组至少一个存储块用于存储单目运算结果以及连续指令、多操作单数据流指令和级联操作指令的结果;
所述写回模块包括实时流数据地址生成器、双目指令目的地址生成器、连续指令目的地址生成器和循环目的地址生成器;
所述实时流数据地址生成器用于控制所述本地存储器第1组的存储块;
所述双目指令目的地址生成器用于控制所述本地存储器第2组的存储块;
所述连续指令目的地址生成器和循环目的地址生成器控制所述本地存储器第3组的存储块。
8.如权利要求7所述的一种在传输过程中提取流数据特征的流处理器,其特征在于,所述实时流数据地址生成器地址的产生方法为:
对所述本地存储器的第1组存储块写回的起始地址初始化为0,当实时流数据输出时,地址指针进行累加,并对对应地址依次写入输出的实时流数据,累加到指令定义的流序列长度时,地址指针重新回到0,此时完成第1组存储块内的第一个存储块的写入,进入第二个存储块的写入,重复上述内容,直至完成第1组所有存储块的写入,当一帧实时流数据全部记录完成后,地址指针回到第一个存储块的0地址,等待新一帧的实时流数据到来,并重复上述的操作;
所述双目指令目的地址生成器地址的产生方法为:
当执行M型指令时,从关键字段中的目的地址信息的首地址开始进行递增,每次递增的步长为1;当执行双目运算时,每次执行新的指令,双目指令目的地址生成器的地址指针初始化为0,每接收一个新的双目运算结果元素,地址指针递增1;
所述连续指令目的地址生成器地址的产生方法为:
当单目运算结果为连续指令的单目运算结果时,连续指令目的地址生成器将地址指针初始化为首地址,每次递增的步长为1;
所述循环目的地址生成器地址的产生方法为:
当单目运算结果为非连续指令的单目运算结果时,所述译码器提取指令中的“目的存储器地址”、“不同运算单元步长”和“循环步长”三个字段,同一条指令相邻两次执行时当前所述单目运算单元的目的存储器地址在上一帧的基础上添加一个“循环步长”间隔,当“循环步长”等于0时,原地址覆盖,当指令缓存器中的指令循环执行一次后,地址指针将重新回到首地址。
9.一种在传输过程中提取流数据特征的流处理器的实现方法,其特征在于,包括以下内容:
1)CPU将指令序列写入指令缓存器内,形成一个指令序列,同时配置程序指针寄存器控制指令序列的循环执行次数,当CPU完成流处理器的初始化配置后,由CPU发送启动命令,控制流处理器进入到工作状态;
2)指令缓存器内的程序指针寄存器从起始地址依次递增,该程序指针寄存器指示的指令被取出作为当前需执行的指令;
3)译码器对当前需执行的指令进行分析,提取出当前需执行指令的关键字段;
4)数据准备模块根据关键字段提取本地存储器内存储的源操作数向量元素并输入至执行模块,将到达的实时流数据转发至执行模块,以及存储当前需执行指令中的立即数;
5)执行模块对实时流数据、当前需执行指令的立即数或本地存储器内存储的向量进行单目运算或双目运算,得到运算结果;
6)数据准备模块和执行模块采用流水线的工作方式,执行模块在处理上一时钟周期预取的源操作数时,数据准备模块预取下一时钟周期的源操作数;
7)双目运算执行时,执行模块和写回模块采用流水线的工作方式,执行模块在处理当前时钟周期的元素时,写回模块将上一时钟周期输出的运算结果序列元素写入本地存储器的目的地址;
8)写回模块执行前一条指令的最后一个时钟周期,指令缓存器内的程序指针寄存器值加1,开始执行下一条指令的获取;
9)当指令缓存器内的程序指针寄存器指示指令到达最后一条指令后返回起始地址,同时循环次数计数器加1,当循环次数达到设定边界时则终止,并同时向CPU发出一个中断信号。
10.如权利要求9所述的一种在传输过程中提取流数据特征的流处理器的实现方法,其特征在于,所述步骤5)中,如果执行的指令为单目运算指令,则:
每一时钟周期,两操作数输入端口从输入向量中取出一个元素送入单目运算单元的输入端,单目运算单元采用中间值寄存器中的中间值与取出的元素进行计算,计算结果写入中间值寄存器覆盖原值;
当最后一个输入向量的元素计算完毕,单目运算单元的中间值寄存器的值作为单目运算结果写入目的存储器地址;
如果执行的指令为双目运算指令,则:
每一时钟周期,两操作数输入端口从两个等长向量或一个实时流和一个向量中各取出相同索引的元素,分别输入至双目运算单元的对应输入端,其中,如果一个源操作数为常数标量,则将指令的关键字段中对应的常数标量输入至双目运算单元的对应输入端;
双目运算单元产生一个双目运算结果作为输出向量对应位置的元素,顺序写入目的存储器地址,写入地址按照指令指定的方式依次递增,当所有输入向量的元素计算完毕运算过程停止时,最终得到一个和输入向量等长的输出向量;
如果执行的指令为连续模式指令,则:
每一时钟周期,两操作数输入端口从两个等长向量或一个实时流和一个向量中各取出相同索引的元素,分别输入至双目运算单元的对应输入端,其中,如果一个源操作数为常数标量,则将指令的关键字段中对应的常数标量输入至双目运算单元的对应输入端;
双目运算单元产生一个双目运算结果送入单目运算单元的输入端,单目运算单元采用中间值寄存器中的中间值与取出的元素进行计算,计算结果写入中间值寄存器覆盖原值;
当所有输入向量的元素均计算完毕时,将单目运算单元的中间值寄存器的值作为单目运算结果写入目的存储器地址;
如果执行的指令为MOVE指令,则:
每一时钟周期,从一操作数输入端口读入输入向量或实时流的一个元素;
将读取的元素直接发送至双目输出端口作为输出向量对应位置的元素,顺序写入目的存储器地址,写入地址按照指令指定的方式依次递增,当所有输入向量的元素移动完毕时,最终得到一个与输入向量相同的输出向量。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110433608.3A CN113138804B (zh) | 2021-04-20 | 2021-04-20 | 在传输过程中提取流数据特征的流处理器及其实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110433608.3A CN113138804B (zh) | 2021-04-20 | 2021-04-20 | 在传输过程中提取流数据特征的流处理器及其实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113138804A CN113138804A (zh) | 2021-07-20 |
CN113138804B true CN113138804B (zh) | 2022-10-04 |
Family
ID=76813413
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110433608.3A Active CN113138804B (zh) | 2021-04-20 | 2021-04-20 | 在传输过程中提取流数据特征的流处理器及其实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113138804B (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109522254A (zh) * | 2017-10-30 | 2019-03-26 | 上海寒武纪信息科技有限公司 | 运算装置及方法 |
CN111124360A (zh) * | 2019-12-23 | 2020-05-08 | 中国电子科技集团公司第五十八研究所 | 一种可配置矩阵乘法的加速器 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9606803B2 (en) * | 2013-07-15 | 2017-03-28 | Texas Instruments Incorporated | Highly integrated scalable, flexible DSP megamodule architecture |
-
2021
- 2021-04-20 CN CN202110433608.3A patent/CN113138804B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109522254A (zh) * | 2017-10-30 | 2019-03-26 | 上海寒武纪信息科技有限公司 | 运算装置及方法 |
CN111124360A (zh) * | 2019-12-23 | 2020-05-08 | 中国电子科技集团公司第五十八研究所 | 一种可配置矩阵乘法的加速器 |
Also Published As
Publication number | Publication date |
---|---|
CN113138804A (zh) | 2021-07-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109522254B (zh) | 运算装置及方法 | |
US11609862B2 (en) | Method and apparatus to sort a vector for a bitonic sorting algorithm | |
US11429387B2 (en) | Streaming engine with stream metadata saving for context switching | |
KR102258414B1 (ko) | 처리 장치 및 처리 방법 | |
US11113057B2 (en) | Streaming engine with cache-like stream data storage and lifetime tracking | |
US11693660B2 (en) | Data processing apparatus having streaming engine with read and read/advance operand coding | |
US11099933B2 (en) | Streaming engine with error detection, correction and restart | |
US6208772B1 (en) | Data processing system for logically adjacent data samples such as image data in a machine vision system | |
US10606598B2 (en) | Dual data streams sharing dual level two cache access ports to maximize bandwidth utilization | |
US11550575B2 (en) | Method and apparatus for vector sorting | |
US11403104B2 (en) | Neural network processor, chip and electronic device | |
US20220043770A1 (en) | Neural network processor, chip and electronic device | |
US20190187903A1 (en) | Streaming engine with fetch ahead hysteresis | |
CN113138804B (zh) | 在传输过程中提取流数据特征的流处理器及其实现方法 | |
CN111047035A (zh) | 神经网络处理器、芯片和电子设备 | |
JPH07210545A (ja) | 並列処理プロセッサ | |
US11113208B2 (en) | Pseudo-first in, first out (FIFO) tag line replacement | |
US20230065512A1 (en) | Pseudo-First In, First Out (FIFO) Tag Line Replacement | |
CN117785784A (zh) | 一种适用于多核数据处理器的cpu实现装置和方法 | |
CN117350911A (zh) | 一种着色器输入数据的处理方法和图形处理装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |