直接存储器存取引擎及其方法与流程

文档序号:15144068发布日期:2018-08-10 20:14阅读:123来源:国知局
本发明涉及一种直接存储器存取(directmemoryaccess,dma)引擎(engine),且尤其涉及一种适用于神经网络(neuralnetwork,nn)运算的直接存储器存取引擎及其方法。
背景技术
:直接存储器存取技术能够对一个地址空间记录的数据传输到不同存储器、储存器或输入输出装置中的特定地址空间,而不需要通过处理器来存取存储器,是相当快速的数据传输方式。而前述传输作业可通过直接存储器存取引擎(或称直接存储器控制器)来实行,并经常应用在诸如绘图显示、网络接口、硬盘控制等硬件设备。另一方面,神经网络是一种模仿生物神经网络的结构与功能的数学模型,其可对函数进行评估或近似运算,并经常应用于人工智能领域。一般而言,执行神经网络运算需要抓取大量地址非连续的数据,传统直接存储器存取引擎需要反复启动多次执行多次传输作业以进行数据传输,神经网络运算的特点是每次数据传输的数据量并不大,但数据传输的次数非常之多,每次数据传输都需要启动直接存储器存取引擎并对其进行配置,而直接存储器存取引擎的配置比较耗时,甚至长于数据传输本身所耗费的时间。由此可知,现有神经网络运算仍有待改善。技术实现要素:有鉴于此,本发明提供一种直接存储器存取引擎及其方法,在传输数据的过程中导入神经网络相关运算,使直接存储器存取引擎直接实现在传输过程中的(on-the-fly)运算。本发明的直接存储器存取引擎,其用以控制来源存储器至目的存储器的数据传输。而此直接存储器存取引擎包括任务配置存储模块、控制模块及运算模块。任务配置存储模块存储任务配置。控制模块依据任务配置读入来自来源存储器的来源数据。而运算模块响应于控制模块的任务配置而对来自来源存储器的来源数据进行函数运算,且控制模块依据任务配置而将经函数运算输出的目的数据输出至目的存储器。另一方面,本发明的直接存储器存取方法,其适用于直接存储器存取引擎控制来源存储器至目的存储器的数据传输。而此直接存储器存取方法包括下列步骤。取得任务配置。依据任务配置读入来自来源存储器的来源数据。响应于任务配置而对来自来源存储器的来源数据进行函数运算。依据任务配置而将经函数运算输出的目的数据输出至目的存储器。基于上述,相较于传统直接存储器存取引擎仅具有数据传输功能,且对来源数据的运算须由处理元件(processingelement,pe)执行。在来源存储器与目的存储器之间的数据传输过程中,本发明实施例的直接存储器存取引擎可对传输的数据进行函数运算。藉此,可减少处理元件的计算时间或直接存储器存取引擎的传输数据时间,从而大幅提升运算速度,进而助于神经网络运算中的大量数据存取及交换操作。为让本发明的上述特征和优点能更明显易懂,下文特举实施例,并配合附图作详细说明如下。附图说明图1是依据本发明一实施例的计算机系统的示意图。图2是依据本发明一实施例的直接存储器存取引擎的元件方块图。图3是依据本发明一实施例的直接存储器存取方法的流程图。图4a是一示例说明函数运算为平均值运算的逻辑运算架构图。图4b是另一示例说明函数运算为平均值运算的逻辑运算架构图。图5是一示例说明三维数据矩阵。图6a及6b是一示例说明调整数据矩阵的维度。具体实施方式图1是依据本发明一实施例的计算机系统1的示意图。请参照图1,计算机系统1可以是但不局限于桌面计算机、笔记本电脑、服务器、工作站、智能手机及平板计算机等装置,并包括但不仅限于直接存储器存取引擎100、微控制单元(microcontrolunit,mcu)101及一个或更多个处理元件(processingelement,pe)102、一个或更多个静态随机存取存储器(staticrandomaccessmemory,sram)104、主存储器105、及输入/输出装置106。在某些实施例中,计算机系统1还包括一个或更多个多路复用器103。直接存储器存取引擎100控制来源存储器(即sram104、主存储器105及输入/输出装置106中的一者)至目的存储器(即sram104、主存储器105及输入/输出装置106中的另一者)的数据传输。举例而言,微控制单元101对各个处理元件102和直接存储器存取引擎100之间进行神经网络相关运算的任务(task)分配:例如处理元件102的一者(后面称之为第一处理元件)执行第一卷积(convolution)运算后向微控制单元101发出中断信号。微控制单元101接收到此中断信号后根据其预先存储的任务配置中的描述内容得知后续两个任务将分别交由直接存储器存取引擎100及另一处理元件102(后面称之为第二处理元件)完成,则配置将数据从第一处理元件102的存储器(即sram104、主存储器105及输入/输出装置106中的一者)经由直接存储器存取引擎100传输至第二处理元件102的存储器(即sram104、主存储器105及输入/输出装置106中的另一者)过程中,完成任务配置所描述的函数运算,这些函数运算包括但不限于:神经网络相关的最大值运算、平均值运算、比例缩放(scaling)运算、批量标准化(batchnormalization,bn)运算、以及激励函数(activationfunction)运算等,只要是在运算过程中数据无需重复使用、也无需缓存的函数运算都可以藉由本发明的直接存储器存取引擎100实现。直接存储器存取引擎100完成数据传输及函数运算后,向微控制单元101发出中断信号,微控制单元101接收到此中断信号后根据其预先存储的任务配置中的描述内容得知下一个任务将由前述dma传输的目的存储器对应的第二处理元件102完成,则配置第二处理元件102执行第二卷积(convolution)运算。需说明的是,上述神经网络相关运算的任务分配方式仅为举例,本发明并不局限于此。请接着参照图2,直接存储器存取引擎(或称直接存储器存取控制器)100可以是独立的芯片、处理器、集成电路或内嵌于其他芯片、硬件电路,直接存储器存取引擎100包括但不仅限于:任务配置存储模块110、控制模块120及第一运算模块130,在某些实施例中,直接存储器存取引擎100还包括:来源地址产生器140、目的地址产生器150、数据格式转换单元160、队列170、来源总线接口180、及目的总线接口190。任务配置存储模块110经由主机配置(configuration)接口与微控制单元101耦接,任务配置存储模块110可以是sram、动态随机存取存储器(dynamicrandomaccessmemory,dram)、闪存(flashmemory)等类型存储媒介,且用以记录来自微控制单元101的任务配置(taskconfiguration)。此任务配置记录有来源存储器、来源起始地址、目的存储器、目的起始地址、函数运算类型、来源数据长度、优先权、中断标记(flag)等配置参数的相关描述信息,待后续实施例详细说明。控制模块120耦接微控制单元101,控制模块120可以是指令、控制或状态寄存器、或是控制逻辑(logic)。控制模块120用以依据任务配置控制其他元件或模块,且可发送中断信号至微控制单元101以指示任务完成。运算模块130耦接控制模块120,运算模块130可以是逻辑运算单元,其符合单指令流多数据流(singleinstructionmultipledata,simd)架构,在其它实施例中,运算模块130也可以是其他类型的运算单元。运算模块130响应于控制模块120的任务配置而对输入数据执行函数运算。需说明的是,依据运算需求,运算模块130可能包括加法器、寄存器、计数器、位移器其中一者或其组合,待后续实施例详述。本发明的直接存储器存取引擎100将来源数据由来源存储器(即图1的sram104、主存储器105及输入/输出装置106中的一者)传输至目的存储器(即图1的sram104、主存储器105及输入/输出装置106中的另一者)的过程中,藉由运算模块130对该来源数据进行函数运算。上述函数运算包括但不限于:神经网络相关的最大值运算、平均值运算、比例缩放(scaling)运算、批量标准化(batchnormalization,bn)运算、以及激励函数(activationfunction)运算等等,在这些函数运算中,来源数据无需重复使用、亦无需缓存,即这些来源数据为流式数据(streamdata),其仅会被运算模块130运算一次(即,来源数据仅经由一个函数运算运算一次)。来源地址产生器140耦接控制模块120,来源地址产生器140可以是地址寄存器,且用以依据来自控制模块120的控制信号而产生来源存储器(图1中的sram104、主存储器105、或输入/输出装置106)中特定来源地址,以经由来源总线接口180读入来自来源存储器的来源数据。目的地址产生器150耦接控制模块120,目的地址产生器150可以是地址寄存器,且用以依据来自控制模块120的控制信号而产生目的存储器(图1中的sram104、主存储器105、或输入/输出装置106)中特定目的地址,以将运算模块130输出的目的数据经由目的总线接口190输出/写入到目的存储器。数据格式转换单元160耦接来源总线接口180及运算模块130,数据格式转换单元160用以将来自该来源存储器的来源数据转换成多个并行的输入数据。队列170耦接运算模块130及目的总线接口190,且可以是缓冲器、寄存器,并用以寄存将输出的目的数据,以同步来源及目的存储器的频率的相位差。微控制器101耦接直接存储器存取引擎100,微控制器101可以是支持精简指令集运算(reducedinstructionsetcomputing,risc)、或是复杂指令集运算(complexinstructionsetcomputing,cisc)等各类型的中央处理器、微处理器、特殊集成电路、或场可编程逻辑门阵列(fieldprogrammablegatearray,fpga)等可编程单元,且用以配置前述任务配置。一个或多个处理元件102组成处理阵列,其连接微控制器101,并用以执行运算和数据处理功能。而各多路复用器103将直接存储器存取引擎100及处理元件102耦接于sram104、主存储器105(例如,dram)及输入/输出装置106(例如,绘图显示卡、网络接口卡、显示器等装置),并用以控制由直接存储器存取引擎100或是处理元件102对于sram104、主存储器105、及输入/输出装置106的存取操作。图1的实施例是假设sram104、主存储器105及输入/输出装置106都只有一个读/写端口,因此需要藉由多路复用器103选择由直接存储器存取引擎100或处理元件102来存取,但本发明并不局限于此,在sram104、主存储器105及输入/输出装置106有两个读/写端口的实施例中,无须设置多路复用器103。为了方便理解本发明实施例的操作流程,以下将举诸多实施例详细说明本发明实施例中直接存储器存取引擎100的运作流程。图3是依据本发明一实施例说明直接存储器存取方法的流程图。请参照图3,本实施例的方法适用于图2中的直接存储器存取引擎100。下文中,将先搭配计算机系统1及直接存储器存取引擎100中的各项元件及模块说明本发明实施例所述的方法。本方法的各个流程可依照实施情形而随之调整,且并不仅限于此。来自微控制器101的任务配置经由主机配置接口而记录于任务配置存储模块110,使控制模块120取得任务配置(步骤s310)。于本实施例中,任务配置包括但不仅限于来源存储器(可能是sram104、主存储器105、或输入/输出装置106)及其来源起始地址、目的存储器(可能是sram104、主存储器105、或输入/输出装置106)及其目的起始地址、直接存储器存取模式、函数运算类型、来源数据长度、及其他依附(dependence)信号(该信号满足则驱动直接存储器存取引擎100执行微控制器101指派的任务),其中直接存储器存取模式包括但不限于:维度(即,一维(dimension,d)、二维或三维)、步长(stride)、大小(size)等。针对直接存储器存取模式中不同维度,请详见表(1)所示个别记录的参数:表(1)维度步长大小步长大小步长大小1dstride1size12dstride1size1stride2size23dstride1size1stride2size2stride3size3针对一维数据矩阵,步长stride1代表跳跃读取间隔的距离,也就是相邻两个元素的起始地址的差值;大小size1代表这笔来源数据所包含的元素的数量。针对二维数据矩阵,步长stride1代表行跳跃读取间隔的距离,大小size1代表这笔来源数据所包含的行元素的数量;步长stride2代表列跳跃读取间隔的距离,大小size2代表这笔来源数据所包含的列元素的数量。针对三维资料矩阵,请搭配图5的示例,其参数如表(2)所示:表(2)维度步长大小步长大小步长大小3dstride1=1size1=8stride2=36size2=4stride3=144size3=3步长stride1为1且大小size1为8表示一维矩阵的数据大小有8个元素(参照图5中,第3行的有色底纹形成8个元素),且相邻2个元素(element)间的跳跃步长为1,即相邻元素的地址连续;步长stride2为36且大小size2为4表示二维矩阵的数据大小有4个元素(参照图5中,第3至6行的有色底纹,每行形成一个元素),且相邻2个元素间的跳跃步长为36,即相邻元素的起始地址相差36;步长stride3为144且大小size3为3表示三维矩阵的数据大小有3个元素(参照图5中,第3至6行、第10至13行、第17至20行的有色底纹,每4×8矩阵形成一个元素),且相邻2个元素间的跳跃步长为144,即相邻元素的起始地址相差144。此外,针对任务配置,假设直接存储器存取引擎100利用分散-收集(scatter-gather)式传输(即,使用一个链接列表(linkedlist)描述物理上不连续的存储空间,并通知首位地址;而待一块物理连续的数据传输后,不发起中断信号,而是根据链接列表来传输下一块物理上的连续数据,直到此链接列表上描述的数据全部传输完毕后再发起新的链接列表),则可参考表(3)所示链接列表的范例:表(3)任务0执行结束后,控制模块120依据链接列表执行任务2。需说明的是,直接存储器存取引擎100亦可能利用区块(block)式传输(即,传输完一块物理上连续的数据即引发一次中断,微控制单元101再重新配置后进行下一块物理上连续的数据传输),则其任务配置可能仅记录一项任务(task)的配置参数。接着,控制模块120依据任务配置记录的来源存储器、其来源起始地址、及直接存储器存取模式指示来源地址产生器140产生来源存储器中的来源地址,以经由来源总线接口180读入来自指定的来源存储器的来源数据(步骤s320)。例如,表(3)指示来源存储器为sram0且其来源起始地址为0×1000,则来源地址产生器140产生从来源存储器sram0中的来源地址0×1000开始的来源地址,“步长stride1=1且大小size1=64,步长stride2=36且大小size2=64”表示:来源数据为一个二维矩阵,一维(行)包括64个元素,相邻2个元素间的跳跃步长为1个数据存储地址,即相邻2列元素的地址连续;二维(列)也包括64个元素,且相邻2行元素间的跳跃步长为36,即相邻2行元素的起始地址相差36个数据存储地址。对于传统直接存储器存取引擎,其读入来源存储器的源数据后,即会将此来源数据直接写入目的存储器的特定地址。与已知技术不同之处在于,本发明实施例的运算模块130还会响应于控制模块120针对任务配置中函数运算的类型及其来源数据的数据长度的指示,而对来自来源存储器的来源数据进行函数运算(步骤s330)。函数运算包括但不限于:神经网络相关的最大值运算(即,数个数值中取最大者)、平均值运算(即,数个数值加总除上个数的值)、比例缩放(scaling)运算、批量标准化(batchnormalization,bn)运算、以及激励(activation)函数运算(即,使得神经网络的每一层的输出是输入的非线性函数而不再是输入的线性组合,可逼近任意函数,例如是sigmoid、tanh、relu函数等)等。概括而言,来源数据无需缓存亦无需重复使用,仅被运算模块130运算一次的函数运算都可以由本发明的运算模块130在直接存储器存取引擎100执行dma数据传输过程中实现。举例而言,图4a是一示例说明函数运算为平均值运算的逻辑运算架构图。请参照图4a,假设函数运算类型是平均值运算、且输入至运算模块130的来源数据的数据长度为8,即源数据包括8个元素(element),且此第一运算模块130是符合simd架构的运算单元。第一运算模块130包括数个加法器131与位移3位的位移器132。来源数据输入到数据格式转换单元160,值得注意的是,经由来源总线接口180输入数据格式转换单元160的来源数据中的有效数据可能地址不连续,数据格式转换单元160提取来源数据中的有效数据,并将此有效数据转换为多个并行输入数据,而此有效数据的位宽(bitwidth)等于运算模块130的位宽:举例而言,第一运算模块130所执行的simd运算的对象为8个元素,每个元素的位宽例如为16bit,即第一运算模块130的位宽为128bit,则当数据格式转换单元160提取的有效数据的位宽累积达到128bit,则将其转换为8个16bit的并行输入数据输入至第一运算模块130。在一实施例中,本发明的第一运算模块130的位宽设计为至少等于来源总线接口180的位宽,例如均为128bit:如果有效数据地址不连续,则数据格式转换单元160依据前述任务配置所包括的stride和size参数从一次读进的128bit的来源数据提取至少一个16bit的有效数据,当有效数据的总长度累积达到128bit时,数据格式转换单元160将128bit的有效数据转换成8个16bit的并行输入数据并输入至第一运算模块130,使第一运算模块130基于simd技术对这些并行输入数据执行并行运算,以实现多输入运算;如果有效数据地址连续,则经由来源总线接口180一次读进来的128bit的来源数据可直接被数据格式转换单元160转换为8个16bit的并行输入数据输入至第一运算模块130,第一运算模块130的位宽设计为128bit的目的是为了避免当来源总线接口180一次读进来源数据均为有效数据时,第一运算模块130不能一次接收并运算而成为硬件瓶颈(bottleneck)。图4b是另一范例说明函数运算为平均值运算的逻辑运算架构图,适用于函数运算的位宽超出第二运算模块230硬件位宽的情形。请参照图4b,假设函数运算种类同样是平均值运算、输入至第二运算模块230的数据长度为8,即源数据包括8个元素(element)、且每个元素大小为16bit,第二运算模块230也符合simd架构,其位宽为128bit,本实施例与图4a的不同之处在于:本实施例中函数运算要求例如对32个16bit的元素进行平均值运算,函数运算的位宽为512bit,超出第二运算模块230硬件位宽。第二运算模块230包括第一运算模块130、计数器(counter)233、及寄存器(register)234。第一运算模块130对数据格式转换单元160并行输入的128bit的有效数据基于simd技术执行并行运算,图4b的第一运算模块130形如图4a的第一运算模块130,在此不再赘述。计数器233连接第一运算模块130,并对上述并行运算的运算次数进行计数。而寄存器234记录函数运算的中间结果,例如每次并行运算的结果。本实施例的函数运算要求第一运算模块130执行4次前述并行运算后,再对寄存器234中记录的每次并行运算的结果再进行一次前述并行运算以实现32个元素的平均值运算。本发明并于局限于此,例如第一运算模块130也可以仅执行32个元素的累加运算,第一运算模块130再将求得的累加和输出至外接的位移器(图未绘示)以求得平均值。需说明的是,依据不同函数运算类型,第一和第二运算模块130、230的逻辑运算架构可能不同,端视实际需求而调整,本发明实施例不加以限制。例如第一运算模块130还可以是乘累加树等。接着,控制模块120依据任务配置记录的目的存储器、其目的起始地址、及直接存储器存取模式指示目的地址产生器150产生目的存储器中的目的地址,以经由目的总线接口190而将经函数运算输出的目的数据输出至目的存储器(步骤s340)。例如,表(3)指示目的存储器为sram1且其目的起始地址为0×2000。而值得注意的是,平均值运算及最大值运算的运算前后的数据长度会改变(多输入单输出),即运算模块130对源数据进行函数运算后会输出与源数据不同大小的目的数据(目的数据的传输长度不同于源数据的传输长度)。因此,本发明实施例的任务配置中的配置参数只记录目的地址的起始地址而不限定目的数据的数据长度。而来源数据的数据长度可由前述步长(stride)及大小(size)得出。由于目的数据大小可能为未知,因此为了解决直接存储器存取的传输结束的问题,在一实施例中,来源地址产生器140会先依据任务配置(即,步长及大小)所得出的来源数据的数据长度对来源数据中的尾地址设置结尾标记。而目的地址产生器150在当被设置此结尾标记的尾地址被处理时,判定此来源数据已传输完毕,并可通知控制模块120检测任务配置存储模块110中的下一个任务配置。而在另一实施例中,微控制器101或控制模块120在配置任务配置时,即依据来源数据的数据长度与函数运算类型计算的类型而得出目的数据的数据长度,并将此目的数据的数据长度写入目的地址产生器150,使目的地址产生器150取得本次任务配置所对应的目的数据的数据长度。此外,本发明实施例的直接存储器存取引擎100还能依据接续(或下一)运算的第二处理元件102所需输入数据格式(pattern)(输入数据格式),而调整输出至目的存储器的数据格式,使来源地址与目的地址的维度不同。以图6a及6b所示的存储器地址数据格式为例,请先参照图6a是由来源地址产生器140所产生的二维地址(4×8的二维矩阵)。假设接续运算的第二处理元件102的输入数据格式是一维地址,则请参照图6b,目的地址产生器150将据以产生一维地址(1×32的一维矩阵)。藉此,在直接存储器存取引擎100搬运数据过程中,即可调整数据格式,使得第二处理元件102可在一个时间周期内取回所需数据而不用自行调整数据格式。需说明的是,直接存储器存取引擎100的目的地址产生器150还能依据第二处理元件102的输入数据格式,而将来源地址产生器140所产生的三维地址转换成一维或二维地址、将二维地址转换成三维地址、或是将一维地址转换成二维或三维地址,甚至是维持维度,端视实际需求而调整。综上所述,在两存储器之间的搬运数据过程中,本发明实施例的直接存储器存取引擎不仅能执行神经网络相关的函数运算,还能调整数据格式,从而分担处理原件的处理及运算负担。已知原由处理原件执行的运算,本发明实施例的来源数据则在处理元件的存储器之间进行dma传输时由直接存储器存取引擎以直接(on-the-fly)运算地方式完成。虽然本发明已以实施例揭示如上,然其并非用以限定本发明,任何本领域技术人员,在不脱离本发明的精神和范围内,当可作些许的更动与润饰,故本发明的保护范围当视后附的权利要求所界定者为准。【符号说明】1:计算机系统100:直接存储器存取引擎101:微控制单元102:处理元件103:多路复用器104:静态随机存取存储器105:主存储器106:输入/输出装置110:任务配置存储模块120:控制模块130:第一运算模块131:加法器132:位移器140:来源地址产生器150:目的地址产生器160:数据格式转换单元170:队列180:来源总线接口190:目的总线接口230:第二运算模块233:计数器234:寄存器s310~s340:步骤。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1