用于矩阵处理的芯片、矩阵处理方法、装置及存储介质与流程

文档序号:18475269发布日期:2019-08-20 20:56阅读:429来源:国知局
用于矩阵处理的芯片、矩阵处理方法、装置及存储介质与流程

本发明涉及计算机技术领域,特别涉及一种用于矩阵处理的芯片、矩阵处理方法、装置及存储介质。



背景技术:

在计算机技术领域,矩阵乘法作为数据处理中典型的算法,被广泛应用于深度学习的各种网络中,包括lstm(longshort-termmemory,长短期记忆)、rnn(recurrentneuralnetwork,循环神经网络)等。对于规模较大的矩阵相乘任务,由于涉及到大量的乘法和加法运算,需要占用大量的计算时间。因此,如何对深度学习中的矩阵进行处理,以对矩阵计算进行加速,成为本领域技术人员较为关注的问题。

对于被乘数矩阵(记为矩阵a)与乘数矩阵b(记为矩阵b),相关技术主要采用如下方法进行处理:

(1)、读取矩阵a和矩阵b,并获取矩阵b对应的转置矩阵bt,通过dma(directmemoryaccess,直接内存存取)控制器将矩阵a和转置矩阵bt按行存储到相应的向量存储单元中。

(2)、将矩阵a的一行元素和转置矩阵bt的一行元素加载到处理单元中并一一对应相乘,将相乘结果在指定的并行处理单元中归约求和,并将求和结果作为结果矩阵的一个元素存储到向量存储单元中。

(3)、顺移到转置矩阵bt的下一行,重复步骤(2)、(3),直至完成矩阵a的一行和转置矩阵bt所有行的计算,计算得到结果矩阵c的一行元素。

(4)、顺移到矩阵a的下一行,重复步骤(2)、(3)、(4),直至完成矩阵a所有行的计算,得到结果矩阵c的所有行元素。

然而,由于每次只能加载矩阵一行元素,调用资源较少,因而在实现较大规模的矩阵相乘时,计算效率较低、计算时间较长。



技术实现要素:

为了解决相关技术的问题,本发明实施例提供了一种用于矩阵处理的芯片、矩阵处理方法、装置及存储介质。所述技术方案如下:

一方面,提供了一种用于矩阵处理的芯片,所述芯片包括:数据通道、控制通道、pe(processingelement,处理元件)接口、pe群组阵列;

所述数据通道用于读取待计算的被乘数矩阵和乘数矩阵;

所述控制通道用于对所述pe群组阵列的计算进行控制;

所述pe接口用于从所述数据通道中读取被乘数矩阵和乘数矩阵;

所述pe群组阵列包括多个pe群组,多个pe群组间复用同一乘数矩阵,每个pe群组内复用被乘数矩阵的不同行向量,所述pe群组阵列用于实现被乘数矩阵与乘数矩阵之间的乘法计算。

另一方面,提供了一种矩阵处理方法,其特征在于,所述矩阵处理方法应用于一方面所述的用于矩阵处理的芯片,所述方法包括:

读取乘数矩阵,并将所述乘数矩阵存储到每个pe群组的每个pe中;

读取被乘数矩阵,并将所述被乘数矩阵的不同行向量分别存储到不同pe群组的每个pe内;

在同一pe群组内,将所述被乘数矩阵的行向量与所述乘数矩阵的不同列向量相乘,得到所述pe群组内的相乘结果;

根据不同pe群组内的相乘结果进行累加,确定所述被乘数矩阵与所述乘数矩阵的结果矩阵。

另一方面,提供一种矩阵处理装置,所述矩阵处理装置设置于一方面所述的用于矩阵处理的芯片中,所述装置包括:

读取模块,用于读取乘数矩阵;

存储模块,用于将所述乘数矩阵存储到每个pe群组的每个pe中;

所述读取模块,用于读取被乘数矩阵;

所述存储模块,用于将所述被乘数矩阵的不同行向量分别存储到不同pe群组的每个pe内;

相乘模块,用于在同一pe群组内,将所述被乘数矩阵的行向量与所述乘数矩阵的不同列向量相乘,得到所述pe群组内的相乘结果;

确定模块,用于根据不同pe群组内的相乘结果,确定所述被乘数矩阵与所述乘数矩阵的结果矩阵。

另一方面,提供了一种计算机设备,所述计算机设备包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或所述指令集由所述处理器加载并执行以实现矩阵处理方法。

另一方面,提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或所述指令集由处理器加载并执行以实现矩阵处理方法。

本发明实施例提供的技术方案带来的有益效果是:

通过在pe群组间复用乘数矩阵,在pe群组内复用被乘数矩阵的行向量,从而在处理较大规模的矩阵乘法任务时,能够调用更多的资源,提高了计算效率,缩短了计算时间。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明实施例提供的一种用于矩阵处理的芯片的架构图;

图2是本发明实施例提供的一种pe群组的架构图;

图3是本发明实施例提供的一种pe的结构图;

图4是本发明实施例提供的ultrascale系列fpgamactile底层结构;

图5是本发明实施例提供的一种矩阵处理方法的流程图;

图6是本发明实施例提供的一种被乘数矩阵读取过程的示意图;

图7是本发明实施例提供的一种矩阵a与矩阵b相乘过程的示意图;

图8是本发明实施例提供的矩阵处理装置的结构示意图;

图9示出了本发明一个示例性实施例提供的矩阵处理终端900的结构框图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。

采用传统的cpu(centralprocessingunit,中央处理器)处理矩阵相乘任务时,常伴随着计算周期长、延迟大等缺点,限制了处理器的响应速度。相对于传统的cpu,gpu(graphicsprocessingunit,图形处理器)采用多层架构结合多级缓存的设计架构,数千个计算核同时计算,可实现高性能的矩阵运算,然而,由于gpu的计算核与计算核之间的计算顺序以及存储器访问顺序,主要依赖于计算核各自的执行情况,其计算具有不确定性,因此,在计算过程中经常存在带宽竞争,不仅会造成较高的计算延迟,而且计算成本也较高。

为了解决传统的cpu及gpu在计算过程中存在的问题,本发明实施例提供了一种用于矩阵处理的芯片,该芯片可以用于fpga(field-programmablegatearray,现场可编程门阵列)和芯片的矩阵处理计算框架。该芯片通过pe群组-pe-mac的三级调度,同时调用大量的计算核并行计算,并在群组内及群组间实现数据复用,从而能够高效的大规模矩阵进行处理。

本发明实施例提供的用于矩阵处理的芯片架构在设计时,需要考虑以下几方面问题,并提供相应的解决方法:

第一、加载数据复用率问题。为了提升加载数据复用率,本发明实施例将计算任务合理地进行分配,使被乘数矩阵和乘数矩阵均能实现一定的数据复用率,从而减少数据的片外加载次数。

第二、计算中的数据复用率问题。本发明实施例复用计算中的数据,从而降低计算过程对ram(randomaccessmemory,随机存取存储器)的依赖。

第三、矩阵转置问题。为了提高带宽利用率,高效读取乘数矩阵,本发明实施例取代低效的矩阵转置操作,采用高带宽数据分发方式,按行读取乘数矩阵,按列分发至各个pe。

第四、布线压力问题。考虑到芯片架构中部署了大量的mac(multiplyandaccumulator,乘累加器),每个mac的计算数据都来自ddr(doubledatarate,双倍速率)存储器,为了保证每个mac均能提供数据路径,需要在每个mac与ddr之间进行布线。如果将每个mac都直接与ddr进行连接,则mac与ddr需要部署的线路较多,布线压力非常大。本发明实施设计了三级架构:pe群组-pe-mac,并采用三级调度的方式,每个mac无需与ddr直接连接,通过与上级的pe连接,每个pe与上级的pe群组连接,从而大大减小了布线数量,降低了布线压力。

第五、计算粒度与mac利用率问题。在计算过程中,每个pe的计算粒度非常重要,当pe本地未设置控制器,完全依赖全局主控单元调度时,对于不同规模的计算任务,mac的利用率无法保证。为了提升mac的利用率,本发明实施例在每个pe本地部署控制器,从而能够基于pe本地的控制器对mac进行控制,以保证mac的利用率。

本发明实施例提供了一种用于矩阵处理的芯片,该芯片包括:数据通道、控制通道、pe接口、pe群组阵列。

其中,数据通道用于读取待计算的被乘数矩阵和乘数矩阵;

控制通道用于对pe群组阵列的计算进行控制;

pe接口用于从所述数据通道中读取被乘数矩阵和乘数矩阵;

pe群组阵列包括多个pe群组,多个pe群组间复用同一乘数矩阵,每个pe群组内复用被乘数矩阵的不同行向量,pe群组阵列用于实现被乘数矩阵与乘数矩阵之间的乘法计算。

基于本发明实施例提供的用于矩阵处理的芯片,图1示出了fpga(ku115)架构。参见图1,该fpga包括数据通道、控制通道、pe接口及pe群组阵列。

数据通道包括读缓存(bufferrd)、写缓存(bufferwr)、内存访问接口(memoryaccessinterface)、ddr存储器及用户axi总线(useraximaster)。其中,读缓存可以存储32*512bit的数据,写缓存可以存储128*384bit的数据。ddr存储器包括axi读总线、axi写总线及输入输出ddr桥axi总线(ioddrbridgeaxi)。数据通道可采用多存储器位宽扩展方式,按行读取乘数矩阵,并通过pe接口将所读取的乘数矩阵按列分发至每个pe群组的每个pe中。

控制通道包括控制器(controller)、寄存器文件(cfg_registerfile)、配置参数接口(cfg)及用户axl从线(useraxi–liteslave)。

pe群组阵列(pegrouparray)包括32个pe群组(pegroup),32个pe群组分为4行进行部署,每行8个pe群组,且行与行之间具有一定的间隔(即pegroupchannel)。

基于图1所示的框架,矩阵处理过程为:

1、cpu通过pcie总线将待计算的乘数矩阵和被乘数矩阵写入ddr存储器中。

2、从寄存器文件中读取所写入乘数矩阵和被乘数矩阵的矩阵尺寸。

3、根据矩阵尺寸及pe群组的架构,通过实时计算寻优,获取pe动态配置信息和底层指令,包括各个模块(包括pe群组、群组内pe、pe内的mac)的使能信号、循环次数、数据尺寸信息(例如,乘数矩阵的行列尺寸、被乘数矩阵的列尺寸)、数据分配方式(例如,乘数矩阵的复用次数),并将所获取的pe动态配置信息和底层指令存入fifo(firstinputfirstoutput,先进先出)存储器中。基于pe动态配置信息中所包括的信息可以看出,该pe动态配置信息用于从pe群组阵列中选择出参与计算的pe群组以及确定是否需要对乘数矩阵和被乘数矩阵进行分块。

4、peinterface接收底层指令,从ddr存储器中读取乘数矩阵,根据pe动态配置信息中的乘数矩阵的矩阵尺寸确定是否对其进行分块,若乘数矩阵的行尺寸小于第一预设尺寸(例如256),列尺寸小于第二预设尺寸(例如128),则无需对乘数矩阵进行分块,直接读取该乘数矩阵。当读取完乘数矩阵,按行读取被乘数矩阵。在读取被乘数矩阵时,可根据pe动态配置信息中的被乘数矩阵的列数确定是否对其进行分块,若被乘数矩阵的列尺寸小于第一预设尺寸(例如256),则无需对被乘数矩阵进行分块,直至读取该被乘数矩阵的每一行。

5、在同一pe群组内,将被乘数矩阵的行向量与乘数矩阵的不同列向量相乘,得到pe群组内的相乘结果。将不同pe群组内的相乘结果进行合并,得到被乘数矩阵与乘数矩阵的结果矩阵。

6、若乘数矩阵的矩阵尺寸大于预设尺寸(例如,256*128),则对乘数矩阵进行分块,得到多个乘数矩阵子阵,读取乘数矩阵子阵。若被乘数矩阵的列数大于预设数值,则对被乘数矩阵进行分块,得到多个被乘数矩阵子阵,并读取被乘数矩阵子阵。根据乘数矩阵子阵和被乘数矩阵子阵进行计算,并将计算结果进行累加及合并,得到被乘数矩阵与乘数矩阵的结果矩阵。

在本发明实施例中,每个pe中用于存储被乘数矩阵(或被乘数矩阵子阵)的ram支持pingpong存储,基于pingpong存储方式,可以在计算的过程中加载下一批数据,实际上相当于计算和数据搬移并行。以pe中存储被乘数矩阵子阵为例,当计算完一个被乘数矩阵之后,下一个被乘数矩阵子阵的数据可能已经加载完成,或尚未加载,对于下一被乘数矩阵子阵的加载结果,主要取决于ddr可提供的数据带宽。在计算过程中,当下一个被乘数矩阵子阵中的行向量及乘数矩阵子阵的数据完成加载后再开始下一次计算。

在本发明实施例中pe群组阵列包括多个pe群组,每个pe群组内存储有被乘数矩阵的不同行向量及乘数矩阵,每个pe群组包括第一控制器、多个pe、第一结果缓存器及累加器。

其中,第一控制器(如图2中的controller)用于对pe群组内的计算进行控制;

同一pe群组的每个pe内存储有被乘数矩阵的相同行向量及乘数矩阵的不同列向量,每个pe用于将被乘数矩阵的一行向量与乘数矩阵中的每列向量相乘;

第一结果缓存器(如图2中的asse_rlt_mem)用于缓存pe群组内多个pe的计算结果;

累加器(如图2中的singlereduceadder)用于对第一结果缓存器中多个pe的计算结果进行累加。

基于本发明实施例所提供的用于矩阵处理的芯片,图2示出了芯片中pe群组的架构图。参见图2,pe群组包括第一控制器(controller)、8个pe、结果缓存器(asse_rlt_mem)、单个累加器(singlereduceadder)。

第一控制器根据pe动态配置信息所选择出的参与计算的pe群组及对乘数矩阵和被乘数矩阵的分块情况,确定出对参与计算的pe群组的控制参数,进而基于控制参数对该pe群组内的计算进行控制。其中,第一控制器的控制参数包括是否为首次运行(确定是否使能累加器)、mac使能数量、乘数矩阵(或乘数矩阵子阵)的有效列数、被乘数矩阵的行向量长度(即累加次数)。基于第一控制器的控制参数中所包括的信息可以看出,该第一控制器的控制参数用于确定出pe群组内参与计算的pe,并对该pe的计算进行控制。

每个pe包括16个mac,每个pe群组包含128个mac。

asse_rlt_mem缓存中间计算结果,其输入带宽为48bit,输出带宽为48bit。

pe群组与ddr的数据缓存出口直接连接,输入为ddr存储器中的是数据,输出为asse_rlt_mem缓存的中间计算结果。在控制端,第一控制器对8个pe的使能进行控制,8个pe的使能为流水方式,每个周期使能一个pe;在输出端,中间计算结果按照流水方式逐一输出,采用单个累加器进行累加,可实现子阵结果的累加操作。另外,由于pe群组具备单独的第一控制器,能够复用被乘数矩阵的行向量数据接口传递指令,因而可以减少布线资源的占用。

在本发明实施例中每个pe包括第二控制器、多个数字信号处理mac、多个乘数矩阵存储单元、第二结果缓存器及被乘数矩阵向量存储单元。

其中,第二控制器(如图3中的controller)用于对pe内的计算进行控制;

每个mac用于将被乘数矩阵的一行向量与乘数矩阵子阵的一列向量相乘,多个mac构成多组mac,多组mac共享一个乘数矩阵存储单元;

每个乘数矩阵存储单元(如图3中的matrix_b_mem)用于存储乘数矩阵中至少一列向量;

第二结果缓存器(如图3中的rlt_mem)用于缓存每个mac的计算结果;

被乘数矩阵向量存储单元(如图3中的vector_a_mem)包括ping地址和pong地址,ping地址和pong地址用于存储被乘数矩阵的至少一行向量。

图3为图2所示的pe群组中pe的架构图,该架构结合了ku115底层结构,将资源和布线集中在一定范围内。参见图3,pe包括1个第二控制器(controller)、16个mac、2个乘数矩阵存储单元(matrix_b_mem)、1个结果缓存器(rlt_mem)及1个被乘数矩阵存储单元(vector_a_mem)。

其中,第二控制器的功能体现在参数配置和状态交互两方面。在参数配置方面,第二控制器根据第一控制器所确定的参与计算的pe,配置该pe的控制参数,该控制参数包括mac使能数量、matrix_b_mem中乘数矩阵子阵的有效列数、被乘数矩阵的行向量的长度(即累加次数)等,实际上,该控制参数可用于确定出pe内参与计算的mac,并对每个mac的计算进行控制;在状态交互方面,第二控制器能够控制计算开始、结束done信号、ping-pong是否有效、当前pe状态等。

16个mac分为8组,每个组包括2个mac。8组mac共用matrix_a_mem所存储的被乘矩阵中的向量,以实现单pe内8倍的向量数据的复用。每4组mac共享一个matrix_b_mem及16bit*8的数据带宽。图4示出了ku115中mac和ram的匹配结构,由图4可以看出,2个mac对应一个36k的ram,通常当一个pe的16个mac中消耗的36kbitram资源少于8个,即可在局部完成布局布线,而无需在区域外寻求ram资源。当前,在一个pe中消耗36kbit的ram的mac数量为5个。

rlt_mem的输入带宽为48bit,输出带宽为48bit。

vector_a_mem的输入带宽为64bit,输出带宽为64bit。vector_a_mem为地址ping-pong结构,可在计算过程中进行数据加载,使得数据计算过程与数据加载过程同步执行。

通过采用上述设计,可将mac和ram的资源占用限定在较小的区域内,并在所限定的区域内完成布线,形成一个逻辑区域,以避免一个pe的内部走线布局到其他pe对应的逻辑区域,从而降低不同pe之间的布线干扰,提高布局布线的通过率,达到较高的运行频率。

本发明实施例的应用场景:

深度学习的计算常面临算力瓶颈和带宽瓶颈的问题,在cnn架构中,由于卷积可以通过多种复用模式实现每个权值上千次的数据复用,其瓶颈在于算力;但对于lstm等模型,矩阵相乘的数据复用率本就不高,内部缓冲的容量限制进一步降低了数据复用率,其瓶颈在于带宽。尤其对于向量-矩阵乘,使乘数矩阵的每一列只能使用一次。这使得带宽瓶颈对吞吐的制约非常严重,尤其在mac数量越多的fpga应用中,这种现象更为严重,例如,在将mac分组后,需要向每一组分发数据,通常数据还没分发到最后一组mac,第一组mac已经完成计算,这样就使得有些pe中的mac处于等待状态,资源利用率较低,尤其在权值依赖于片外加载时,该种情况更为显著。

基于图1~图3所示的芯片架构,可以看出本发明实施例可有效的组织多达4096个mac,并通过多级调度结合临近缓存,保证每个mac的计算效率。同时通过存储器中数据分布的优化调度,在保证ddrburst模式下高速读写的前提下,避免了矩阵运算中求矩阵转置的过程,降低了mac的等待时间,该架构可灵活部署在fpga加速中心,或移植为asic(applicationspecificintegratedcircuit,专门应用的集成电路)设计,在xilinxku115fpga上400mhz时钟下可获得的峰值性能为3.2tops,计算精度为16bit的矩阵相乘运算性能。因此,基于本发明实施例提供的芯片强大计算能力,可将其应用于云端、嵌入式端、或基于fpga/asic的矩阵计算业务中,以及其他注重实时性、低延迟、高吞吐的场景。

本发明实施例提供了一种矩阵处理方法,以计算机设备执行本发明实施例为例,参见图5,本发明实施例提供的方法流程包括:

501、读取乘数矩阵,并将乘数矩阵分发至每个pe群组,由pe群组内各个pe共同存储。

对于两个矩阵在相乘时,要求被乘数矩阵的列数与乘数矩阵的行数相等,当满足此前提下,通过将被乘数矩阵的每行向量与乘数矩阵的每一列向量相乘,可以得到结果矩阵,该结果矩阵的行数与被乘数矩阵的行数相同,该结果矩阵的列数与乘数矩阵的列数相同,且结果矩阵一行的每个元素通过被乘数矩阵一行的元素与乘数矩阵每列的元素相乘得到。根据矩阵乘法的相关内容,在实现被乘数矩阵与乘数矩阵的乘法运算时,需要读取被乘数矩阵的行向量及乘数矩阵的列向量。然而,受限于ddr存储器本身的硬件条件,ddr存储器在读取待计算的被乘数矩阵和乘数矩阵时,只能按行读取被乘数矩阵和乘数矩阵中的数据,且按行读取的数据越多,带宽的利用率越高。

为了适应ddr存储器的数据读取需求,同时提高带宽的利用率,对于乘数矩阵,本发明实施例采用多存储器位宽扩展方式,先按行读取乘数矩阵中的数据,再将所读取的数据按列分发至各个pe群组,由pe群组内的每个pe共同存储。在将所读取的数据按列分发至各个pe群组时,可以实时读取实时分发,也可以读取完乘数矩阵后再进行分发,本发明实施例对此不作具体的限定。

参见图6,乘数矩阵为矩阵b,矩阵b的尺寸为256*128,ddr存储器按照行读取矩阵b中的数据,并将所读取的数据按列发送到8个pe上进行存储。其中,pe1上存储1个256*16的子矩阵,pe2上存储1个256*16的子矩阵,…,pe8上存储1个256*16的子矩阵。

采用上述数据读取方式,避免乘数矩阵在读取之后、计算之前进行转置操作,减少了对存储器的读写访问,提升了能效,降低了整体时延;采用上述存储方式,各个pe群组存储相同的乘数矩阵,也即是乘数矩阵在各个群组之间实现复用,对于32个pe群组的芯片,乘数矩阵可以实现32倍的复用率。

以下需要说明几点:

第一点,上述以根据pe动态配置信息确定pe群组阵列中每个pe群组都复用乘数矩阵为例,当然,当根据pe动态配置信息确定pe群组阵列中仅部分pe群组复用乘数矩阵,则将乘数矩阵分发至所复用的pe群组即可。在一次数据分发过程中,多个pe群组的数据通道是共用的。

第二点,对于一个pe群组,考虑到根据第一控制器的控制参数,该pe群组中参与计算的pe可以为全部也可以为部分,因而在将乘数矩阵分发至所复用的pe群组进行存储时,可根据参与计算的pe数量,对每个pe所存储的乘数矩阵的不同列向量进行存储。当根据第一控制器的控制参数确定pe群组中每个pe均参与计算,则由每个pe共同存储乘数矩阵的不同列向量;当根据第一控制器的控制参数确定pe群组中部分pe参与计算,则由部分pe共同存储乘数矩阵的不同列向量。

502、读取被乘数矩阵,并将被乘数矩阵的不同行向量分发至不同pe群组,由pe群组内的每个pe分别进行存储。

在本发明实施例中,每个pe中用于存储被乘数矩阵的被乘数矩阵存储单元采用地址的ping-pong结构。基于该种设计,所读取的被乘数矩阵中的数据将分别存储到ping地址和pong地址中。具体存储过程为:读取被乘数矩阵预设行数的行向量,并将所读取的不同行向量分发至不同pe群组,并存储到每个pe的ping地址中;接着,开启计算使能,继续读取被乘数矩阵的预设行数的行向量,并将所读取的不同行向量分发至不同pe群组,并存储到每个pe的pong地址中,以此类推,直至完成对被乘数矩阵的读取及存储。为了便于管理,在对被乘数矩阵的行向量进行读取时,可以按照行号由小到大的顺序依次进行读取。其中,预设行数与pe群组阵列包括的pe群组数量相同,例如,当pe群组数量为32时,预设行数为32行;当pe群组数量为64时,预设数量为64。

参见上述图1,pe群组阵列包括32个pe群组,可以确定出预设行数为32行。设定被乘数矩阵为矩阵a,对于矩阵a的读取及存储过程为:读取矩阵a中行号为1~32的行向量,将所读取的行向量依次分发至32个pe群组中,并将所分发的一行向量存储到每个pe的ping地址中;接着,开启计算使能,继续读取矩阵a中行号为33~64的行向量,将所读取的行向量依次分发至32个pe群组中,并将所分发的一行向量存储到每个pe的pong地址中;接着,再读取矩阵a中行号为65~96的行向量,将所读取的行向量依次分发至32个pe群组中,并将所分发的一行向量存储到每个pe的ping地址中,依次类推,直至完成对矩阵a的读取及存储。

以下有几点需要说明的:

第一点,由于乘数矩阵的复用可以在整个pe群组阵列内,也可以在pe群组阵列的部分pe群组内,因此,在对所读取的被乘数矩阵的行向量进行分发时,需要根据乘数矩阵的复用情况进行分发。例如,当根据pe动态配置信息确定pe群组阵列中每个pe群组都复用乘数矩阵,则将所读取的被乘数矩阵的不同行向量分发至每个pe群组;当根据pe动态配置信息确定pe群组阵列中部分pe群组复用乘数矩阵,则将所读取的被乘数矩阵的不同行向量分发至部分pe群组中。

第二点,上述以被乘数矩阵的行向量在pe群组中的每个pe内复用为例,当然,被乘数矩阵的行向量也可以在pe群组中部分pe内进行复用,此时仅将被乘数矩阵的向量存储到所复用的pe中即可。例如,当根据第一控制器的控制参数确定被乘数矩阵的行向量在pe群组中的每个pe内复用,则将被乘数矩阵的向量存储到每个pe中;当根据第一控制器的控制参数确定被乘数矩阵的行向量在pe群组中的部分pe内复用,则将被乘数矩阵的向量存储到部分pe中。

第三点,对于一个pe,考虑到该pe中包括多个mac,多个mac可以全部参与计算,也可以部分参与计算,因而后续在对乘数矩阵及被乘数矩阵的行向量进行计算时,可根据第二控制器的控制参数,确定出参与计算的mac,进而采用参与计算的mac进行计算。

第四点,虽然本发明实施例将读取被乘数矩阵的行向量的过程作为步骤502,将被乘数矩阵的行向量与乘数矩阵的列向量相乘作为步骤503,实际上被乘数矩阵的行向量的读取过程与被乘数矩阵的行向量与乘数矩阵的列向量相乘过程重叠执行,也即是在读取被乘数矩阵的行向量的同时,也进行着计算过程。

503、在同一pe群组内,将被乘数矩阵的行向量与乘数矩阵的不同列向量相乘,得到pe群组内的相乘结果。

在同一pe群组内,被乘数矩阵的行向量是共享的,通过将被乘数矩阵的一行向量上的一个元素与pe上存储的乘数矩阵的一列向量上的元素相乘,可以得到结果矩阵的一行上的一个元素,通过将被乘数矩阵的一行向量上的每个元素与各个pe上存储的乘数矩阵的列向量上的元素相乘,可以得到结果矩阵一行上的各个元素。

由于被乘数矩阵的行向量采用地址ping-pong结构存储,因此,对于同一pe群组中的每个pe,当将被乘数矩阵的行向量存储到每个pe的ping地址中,计算使能开启后,可从每个pe的ping地址中读取被乘数矩阵的一行向量,将所读取的一行向量上的元素与每个pe所存储的乘数矩阵的不同列向量上的元素相乘,得到ping地址相乘结果,当读取完ping地址中的行向量,再从pong地址中读取被乘数矩阵的一行向量,将所读取的一行向量与每个pe所存储的乘数矩阵的不同列向量相乘,重复执行从ping地址及pong地址读取被乘数矩阵的一行向量的过程,直至读取完被乘数矩阵,将所得到的所有相乘结果累加,作为pe群组内的相乘结果。

504、根据不同pe群组内的相乘结果,确定被乘数矩阵与乘数矩阵的结果矩阵。

由于不同群组pe群组间复用乘数矩阵,同一pe群组内复用被乘数矩阵的行向量,按照被乘矩阵的行向量的序号,对不同pe群组内的相乘结果进行合并可以得到被乘数矩阵与乘数矩阵的结果矩阵。例如,对于32个pe群组,第1个pe群组内得到的是被乘数矩阵的第1行向量与乘数矩阵的相乘结果,第2个pe群组内得到的是被乘数矩阵的第2行向量与乘数矩阵的相乘结果,…,第32个pe群组内得到的是被乘数矩阵的第32行向量与乘数矩阵的相乘结果,按照被乘矩阵的行向量的序号顺序,将32个pe群组内的相乘结果进行合并,可以得到被乘数矩阵与乘数矩阵的结果矩阵。

需要说明的是,上述步骤501~步骤504以乘数矩阵及被乘数矩阵未进行分块直接读取为例进行说明的,然而,在实际应用中,当乘数矩阵及被乘数矩阵的尺寸较大时,常常需要分块读取、存储及计算。通常在读取乘数矩阵时,可根据动态配置信息,获取乘数矩阵的尺寸,并将乘数矩阵的行尺寸与第一预设尺寸进行比较,将乘数矩阵的列尺寸与第二预设尺寸进行比较,当乘数矩阵的行尺寸大于第一预设尺寸,列尺寸大于第二预设尺寸时,将乘数矩阵拆分为多个乘数矩阵子阵,分别为第一乘数矩阵子阵、第二乘数矩阵子阵、…最后一个乘数矩阵子阵;在读取被乘数矩阵时,可根据动态配置信息,获取被乘数矩阵的尺寸,并将被乘数矩阵的列尺寸与第一预设尺寸进行比较,当被乘数矩阵的列尺寸大于第一预设尺寸时,将被乘数矩阵拆分为多个被乘数矩阵子阵,分别为第一被乘数矩阵子阵、第二被乘数矩阵子阵、…、最后一个被乘数矩阵子阵。其中,第一预设尺寸和第二预设尺寸可根据pe的存储空间确定。

根据乘数矩阵和被乘数矩阵的分块结果,依次读取乘数矩阵的各个子阵和被乘数矩阵的各个子阵,并根据乘数矩阵的各个子阵和被乘数矩阵的各个子阵进行计算,然后将分块结果进行累加,进而将累加结果按照被乘矩阵的行向量的序号进行合并,得到乘数矩阵和被乘数矩阵的结果矩阵。

对于乘数矩阵及被乘数矩阵的分块情况,为了更清楚地展现矩阵相乘过程,下面将分别进行介绍。

第一种情况、乘数矩阵需要分块,被乘数矩阵无需分块。

在实现被乘数矩阵与乘数矩阵之间的乘法运算时,可采用如下步骤:

第一步,先读取乘数矩阵的第一乘数矩阵子阵,将第一乘数矩阵子阵分发到各个pe群组,由pe群组中每个pe协同存储,每个pe存储第一乘数矩阵子阵中的至少一列向量。接着,读取被乘数矩阵的多个行向量,将所读取的多个行向量一一分发至多个pe群组,由pe群组中的每个pe存储至ping地址,当存储完被乘数矩阵的一个行向量即开启对应pe群组的计算使能,计算每个pe的ping地址所存储的被乘数矩阵一行向量上的各个元素与第一乘数矩阵子阵每一列向量上的各个元素的乘积。同时读取多个行向量,将读取的多个行向量分发至多个pe群组,由多个pe群组的每个pe存储至pong地址,当ping地址的计算完成后,计算每个pe的pong地址所存储的被乘数矩阵一行向量上的各个元素与第一乘数矩阵子阵每一列向量上的各个元素的乘积。依次类推,直至读取完被乘数矩阵,得到每个pe所存储的被乘矩阵的行向量与第一乘数矩阵子阵的相乘结果。

第二步,当具有多组ddr通道时,可并行进行多个乘数矩阵子阵的读取,当具有一个ddr时,在完成乘数矩阵的第一乘数矩阵子阵的计算后,读取乘数矩阵的第二乘数矩阵子阵,将第二乘数矩阵子阵分发到各个pe群组,由pe群组中每个pe协同存储。接着,读取被乘数矩阵的多个行向量,将所读取的多个行向量一一分发至多个pe群组,由pe群组中的每个pe存储至ping地址,计算每个pe的ping地址所存储的被乘数矩阵一行向量上的各个元素与第二乘数矩阵子阵每一列向量上的各个元素的乘积。同时再读取多个行向量,将多读取的多个行向量分发至多个pe群组,由多个pe群组的每个pe存储至pong地址,当ping地址的计算完成后,计算每个pe的pong地址所存储的被乘数矩阵一行向量上的各个元素与第二乘数矩阵子阵每一列向量上的各个元素的乘积。依次类推,直至读取完被乘数矩阵,得到每个pe所存储的被乘矩阵的行向量与第二乘数矩阵子阵的相乘结果。

第三步,依次类推,直至读取完乘数矩阵的各个子阵。按照行号顺序,将pe所存储的被乘矩阵的行向量与每个乘数矩阵子阵的相乘结果进行累加,得到被乘数矩阵与乘数矩阵的结果矩阵。

第二种情况、乘数矩阵无需分块,被乘数矩阵需要分块。

第一步,读取乘数矩阵,将乘数矩阵分发到各个pe群组,由pe群组中每个pe协同存储,每个pe存储乘数矩阵中的至少一列向量。接着,读取第一被乘数矩阵子阵的多个行向量,将所读取的多个行向量一一分发至多个pe群组,由pe群组中的每个pe存储至ping地址,当存储完被乘数矩阵的一个行向量即开启对应pe群组的计算使能,计算每个pe的ping地址所存储的第一被乘数矩阵子阵一行向量上的各个元素与乘数矩阵每一列向量上的各个元素的乘积。同时读取多个行向量,将读取的多个行向量分发至多个pe群组,由多个pe群组的每个pe存储至pong地址,当ping地址的计算完成后,计算每个pe的pong地址所存储的第一被乘数矩阵子阵一行向量上的各个元素与乘数矩阵每一列向量上的各个元素的乘积。依次类推,直至读取完第一被乘数矩阵子阵,得到每个pe所存储的第一被乘矩阵子阵的行向量与乘数矩阵的相乘结果。

第二步,读取第二被乘数矩阵子阵的多个行向量,将所读取的多个行向量一一分发至多个pe群组,由pe群组中的每个pe存储至ping地址,然后计算每个pe的ping地址所存储的第二被乘数矩阵子阵一行向量上的各个元素与乘数矩阵每一列向量上的各个元素的乘积。同时读取多个行向量,将多读取的多个行向量分发至多个pe群组,由多个pe群组的每个pe存储至pong地址,当ping地址的计算完成后,计算每个pe的pong地址所存储的第二被乘数矩阵子阵一行向量上的各个元素与乘数矩阵每一列向量上的各个元素的乘积。依次类推,直至读取完第二被乘数矩阵子阵,得到每个pe所存储的第二被乘矩阵子阵的行向量与乘数矩阵的相乘结果。

第三步,依次类推,直至读取完被乘数矩阵的各个子阵。按照行号顺序,将pe所存储的各个被乘矩阵子阵的行向量与乘数矩阵的相乘结果进行累加,得到被乘数矩阵与乘数矩阵的结果矩阵。

需要说明的是,由于用于存储矩阵相乘的中间结果的存储空间(例如rlt_mem)是有限的,在计算过程中,当达到rlt_mem的存储上限而未读取完被乘数矩阵或被乘数矩阵子阵的所有行向量时,可采用以下两种处理方式:

第一种方式、将rlt_mem中的中间结果存储到ddr中,下一次计算时再将存入到ddr中的中间结果读取出来,将两次计算结果相加,重复执行该过程,直至获取到与最后一次计算结果的累加结果,将其作为被乘数矩阵与乘数矩阵的结果矩阵。

第二种方式、当达到rlt_mem的存储上限时,更新乘数矩阵,读取下一个乘数矩阵子阵,将下一个乘数矩阵子阵与已读取的被乘数矩阵或被乘数矩阵子阵的行向量进行计算,直至完成已读取的被乘数矩阵或被乘数矩阵子阵的行向量与各个乘数矩阵子阵的计算。然后读取被乘数矩阵或被乘数矩阵子阵中剩余行向量,执行被乘数矩阵或被乘数矩阵子阵的剩余行向量与乘数矩阵的相乘。按照行号顺序,将所有计算结果组成结果矩阵。

第三种情况、乘数矩阵及被乘数矩阵均需要分块。

第一步,先读取乘数矩阵的第一乘数矩阵子阵,将第一乘数矩阵子阵分发到各个pe群组,由pe群组中每个pe协同存储。接着,读取第一被乘数矩阵子阵的多个行向量,将所读取的多个行向量一一分发至多个pe群组,由pe群组中的每个pe存储至ping地址,当存储完被乘数矩阵的一个行向量即开启对应pe群组的计算使能,计算每个pe的ping地址所存储的第一被乘数矩阵子阵一行向量上的各个元素与第一乘数矩阵子阵每一列向量上的各个元素的乘积。同时读取多个行向量,将读取的多个行向量分发至多个pe群组,由多个pe群组的每个pe存储至pong地址,当ping地址的计算完成后,计算每个pe的pong地址所存储的第一被乘数矩阵子阵一行向量上的各个元素与第一乘数矩阵子阵每一列向量上的各个元素的乘积。依次类推,直至读取完第一被乘数矩阵子阵,得到每个pe所存储的第一被乘矩阵的行向量与第一乘数矩阵子阵的相乘结果。

第二步,读取乘数矩阵的第二乘数矩阵子阵,将第二乘数矩阵子阵分发到各个pe群组,由pe群组中每个pe协同存储。读取第二被乘数矩阵子阵的多个行向量,将所读取的多个行向量一一分发至多个pe群组,由pe群组中的每个pe存储至ping地址,然后计算每个pe的ping地址所存储的第二被乘数矩阵子阵一行向量上的各个元素与第二乘数矩阵子阵每一列向量上的各个元素的乘积。同时读取多个行向量,将多读取的多个行向量分发至多个pe群组,由多个pe群组的每个pe存储至pong地址,当ping地址的计算完成后,计算每个pe的pong地址所存储的第二被乘数矩阵子阵一行向量上的各个元素与第二乘数矩阵子阵每一列向量上的各个元素的乘积。依次类推,直至读取完第二被乘数矩阵子阵,得到每个pe所存储的第二被乘矩阵子阵的行向量与第二乘数矩阵子阵的相乘结果。

第三步,依次类推,直至读取完乘数矩阵及被乘矩阵的各个子阵。按照行号顺序,将pe所存储的每个被乘矩阵子阵的行向量与每个乘数矩阵子阵的相乘结果进行累加,得到被乘数矩阵与乘数矩阵的结果矩阵。

为了更为直观地展示出矩阵a与矩阵b相乘的计算流程,下面以图7为例进行说明。其中,矩阵a为m*n矩阵,矩阵b为n*p矩阵,n>256,m、p>128。

第一步,读取矩阵b中256*128的子阵,将所读取的子阵分发至各个pe群组,由pe群组内的pe协同存储。按行读取矩阵a中1*256的子阵,读取32行向量存储到每个pe群组的每个pe的ping地址中,开启计算使能;接着读取32行向量存储到每个pe群组的每个pe的pong地址中,以此类推,直至完成矩阵a的m*256子阵与矩阵b的子阵的计算。

第二步,将所存储的矩阵b子阵向下移动256行,读取矩阵b的另一子阵,并将矩阵a的子阵向右移动256列,读取矩阵a的另一子阵,并完成对矩阵a的另一子阵与矩阵b的另一子阵的计算。

第四步,当矩阵b移动到底部,右移128列并返回顶部,重复执行第一步和第二步,直至遍历完矩阵b中的所有元素。

上述方案针对当前fpga的架构而设计,当asic或fpga具有更高的片上存储资源时(如5倍于ku115),可进一步优化而提升数据复用。当片上具备hbm等dram时,可完全取代片外存储器,进而可以更为灵活的进行构架设计。另外,基于图1~图3所示的芯片结构,采用本发明实施例提供的方法,被乘数矩阵中的行向量因在pe群组的各个pe中复用,可以达到128倍的复用率;乘数矩阵因在各个pe群组间复用,可以达到32倍的复用率。

本发明实施例提供的方法,通过在pe群组间复用乘数矩阵,在pe群组内复用被乘数矩阵的行向量,从而在处理较大规模的矩阵乘法任务时,能够调用更多的资源,提高了计算效率,缩短了计算时间。

参见图8,本发明实施例提供了一种矩阵处理装置,该矩阵处理装置设置于图8所示的用于矩阵处理的芯片中,该装置包括:

读取模块801,用于读取乘数矩阵;

存储模块802,用于将乘数矩阵存储到每个pe群组的每个pe中;

读取模块801,用于读取被乘数矩阵;

存储模块802,用于将被乘数矩阵的不同行向量分别存储到不同pe群组的每个pe内;

相乘模块803,用于在同一pe群组内,将被乘数矩阵的行向量与乘数矩阵的不同列向量相乘,得到pe群组内的相乘结果;

确定模块804,用于根据不同pe群组内的相乘结果,得到被乘数矩阵与乘数矩阵的结果矩阵。

在本发明的另一个实施例中,读取模块801,用于采用多存储器位宽扩展方式,按行读取乘数矩阵;

存储模块802,用于将所读取的乘数矩阵按列存储到每个pe群组的每个pe中。

在本发明的另一个实施例中,读取模块801,用于读取被乘数矩阵预设行数的行向量;

存储模块802,用于将所读取的不同行向量存储到不同pe群组的每个pe的ping地址中,预设行数与pe群组阵列包括的pe群组数量相同;

读取模块801,用于开启计算使能,并继续读取被乘数矩阵的预设行数的行向量;

存储模块802,用于将所读取的不同行向量存储到不同pe群组的每个pe的pong地址中;重复执行对被乘数矩阵的行向量存储过程,直至完成对被乘数矩阵的存储。

在本发明的另一个实施例中,相乘模块803,用于当计算使能开启后,从每个pe的ping地址中读取被乘数矩阵的一行向量;将所读取的一行向量与每个pe所存储的乘数矩阵的不同列向量相乘;当读取完ping地址中的行向量,从pong地址中读取被乘数矩阵的一行向量;将所读取的一行向量与每个pe所存储的乘数矩阵的不同列向量相乘;重复执行从ping地址及pong地址读取被乘数矩阵的一行向量的过程,直至读取完被乘数矩阵,将所得到的所有相乘结果累加,作为pe群组内的相乘结果。

在本发明的另一个实施例中,该方法还包括:

拆分模块,用于当乘数矩阵的行尺寸大于第一预设尺寸,列尺寸大于第二预设尺寸时,将乘数矩阵拆分为多个乘数矩阵子阵;

读取模块801,用于逐一读取不同的乘数矩阵子阵;

相乘模块803,用于将读取的乘数矩阵子阵与被乘数矩阵的行向量相乘。

在本发明的另一个实施例中,该方法还包括:

拆分模块,用于当被乘数矩阵的列尺寸大于第一预设尺寸时,将被乘数矩阵拆分为多个被乘数矩阵子阵;

读取模块801,用于读取不同被乘数矩阵子阵;

相乘模块803,用于将不同被乘数矩阵子阵的每一行向量与乘数矩阵相乘。

综上所述,本发明实施例提供的装置,通过在pe群组间复用乘数矩阵,在pe群组内复用被乘数矩阵的行向量,从而在处理较大规模的矩阵乘法任务时,能够调用更多的资源,提高了计算效率,缩短了计算时间。

图9示出了本发明一个示例性实施例提供的矩阵处理终端900的结构框图。该终端900可以是:智能手机、平板电脑、mp3播放器(movingpictureexpertsgroupaudiolayeriii,动态影像专家压缩标准音频层面3)、mp4(movingpictureexpertsgroupaudiolayeriv,动态影像专家压缩标准音频层面4)播放器、笔记本电脑或台式电脑。终端900还可能被称为用户设备、便携式终端、膝上型终端、台式终端等其他名称。

通常,终端900包括有:处理器901和存储器902。

处理器901可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器901可以采用dsp(digitalsignalprocessing,数字信号处理)、fpga(field-programmablegatearray,现场可编程门阵列)、pla(programmablelogicarray,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器901也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称cpu(centralprocessingunit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器901可以在集成有gpu(graphicsprocessingunit,图像处理器),gpu用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器901还可以包括ai(artificialintelligence,人工智能)处理器,该ai处理器用于处理有关机器学习的计算操作。

存储器902可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器902还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器902中的非暂态的计算机可读存储介质用于存储至少一个指令,该至少一个指令用于被处理器901所执行以实现本申请中方法实施例提供的矩阵处理方法。

在一些实施例中,终端900还可选包括有:外围设备接口903和至少一个外围设备。处理器901、存储器902和外围设备接口903之间可以通过总线或信号线相连。各个外围设备可以通过总线、信号线或电路板与外围设备接口903相连。具体地,外围设备包括:射频电路904、触摸显示屏905、摄像头906、音频电路907、定位组件908和电源909中的至少一种。

外围设备接口903可被用于将i/o(input/output,输入/输出)相关的至少一个外围设备连接到处理器901和存储器902。在一些实施例中,处理器901、存储器902和外围设备接口903被集成在同一芯片或电路板上;在一些其他实施例中,处理器901、存储器902和外围设备接口903中的任意一个或两个可以在单独的芯片或电路板上实现,本实施例对此不加以限定。

射频电路904用于接收和发射rf(radiofrequency,射频)信号,也称电磁信号。射频电路904通过电磁信号与通信网络以及其他通信设备进行通信。射频电路904将电信号转换为电磁信号进行发送,或者,将接收到的电磁信号转换为电信号。可选地,射频电路904包括:天线系统、rf收发器、一个或多个放大器、调谐器、振荡器、数字信号处理器、编解码芯片组、用户身份模块卡等等。射频电路904可以通过至少一种无线通信协议来与其它终端进行通信。该无线通信协议包括但不限于:城域网、各代移动通信网络(2g、3g、4g及5g)、无线局域网和/或wifi(wirelessfidelity,无线保真)网络。在一些实施例中,射频电路904还可以包括nfc(nearfieldcommunication,近距离无线通信)有关的电路,本申请对此不加以限定。

显示屏905用于显示ui(userinterface,用户界面)。该ui可以包括图形、文本、图标、视频及其它们的任意组合。当显示屏905是触摸显示屏时,显示屏905还具有采集在显示屏905的表面或表面上方的触摸信号的能力。该触摸信号可以作为控制信号输入至处理器901进行处理。此时,显示屏905还可以用于提供虚拟按钮和/或虚拟键盘,也称软按钮和/或软键盘。在一些实施例中,显示屏905可以为一个,设置终端900的前面板;在另一些实施例中,显示屏905可以为至少两个,分别设置在终端900的不同表面或呈折叠设计;在再一些实施例中,显示屏905可以是柔性显示屏,设置在终端900的弯曲表面上或折叠面上。甚至,显示屏905还可以设置成非矩形的不规则图形,也即异形屏。显示屏905可以采用lcd(liquidcrystaldisplay,液晶显示屏)、oled(organiclight-emittingdiode,有机发光二极管)等材质制备。

摄像头组件906用于采集图像或视频。可选地,摄像头组件906包括前置摄像头和后置摄像头。通常,前置摄像头设置在终端的前面板,后置摄像头设置在终端的背面。在一些实施例中,后置摄像头为至少两个,分别为主摄像头、景深摄像头、广角摄像头、长焦摄像头中的任意一种,以实现主摄像头和景深摄像头融合实现背景虚化功能、主摄像头和广角摄像头融合实现全景拍摄以及vr(virtualreality,虚拟现实)拍摄功能或者其它融合拍摄功能。在一些实施例中,摄像头组件906还可以包括闪光灯。闪光灯可以是单色温闪光灯,也可以是双色温闪光灯。双色温闪光灯是指暖光闪光灯和冷光闪光灯的组合,可以用于不同色温下的光线补偿。

音频电路907可以包括麦克风和扬声器。麦克风用于采集用户及环境的声波,并将声波转换为电信号输入至处理器901进行处理,或者输入至射频电路904以实现语音通信。出于立体声采集或降噪的目的,麦克风可以为多个,分别设置在终端900的不同部位。麦克风还可以是阵列麦克风或全向采集型麦克风。扬声器则用于将来自处理器901或射频电路904的电信号转换为声波。扬声器可以是传统的薄膜扬声器,也可以是压电陶瓷扬声器。当扬声器是压电陶瓷扬声器时,不仅可以将电信号转换为人类可听见的声波,也可以将电信号转换为人类听不见的声波以进行测距等用途。在一些实施例中,音频电路907还可以包括耳机插孔。

定位组件908用于定位终端900的当前地理位置,以实现导航或lbs(locationbasedservice,基于位置的服务)。定位组件908可以是基于美国的gps(globalpositioningsystem,全球定位系统)、中国的北斗系统、俄罗斯的格雷纳斯系统或欧盟的伽利略系统的定位组件。

电源909用于为终端900中的各个组件进行供电。电源909可以是交流电、直流电、一次性电池或可充电电池。当电源909包括可充电电池时,该可充电电池可以支持有线充电或无线充电。该可充电电池还可以用于支持快充技术。

在一些实施例中,终端900还包括有一个或多个传感器910。该一个或多个传感器910包括但不限于:加速度传感器911、陀螺仪传感器912、压力传感器913、指纹传感器914、光学传感器915以及接近传感器916。

加速度传感器911可以检测以终端900建立的坐标系的三个坐标轴上的加速度大小。比如,加速度传感器911可以用于检测重力加速度在三个坐标轴上的分量。处理器901可以根据加速度传感器911采集的重力加速度信号,控制触摸显示屏905以横向视图或纵向视图进行用户界面的显示。加速度传感器911还可以用于游戏或者用户的运动数据的采集。

陀螺仪传感器912可以检测终端900的机体方向及转动角度,陀螺仪传感器912可以与加速度传感器911协同采集用户对终端900的3d动作。处理器901根据陀螺仪传感器912采集的数据,可以实现如下功能:动作感应(比如根据用户的倾斜操作来改变ui)、拍摄时的图像稳定、游戏控制以及惯性导航。

压力传感器913可以设置在终端900的侧边框和/或触摸显示屏905的下层。当压力传感器913设置在终端900的侧边框时,可以检测用户对终端900的握持信号,由处理器901根据压力传感器913采集的握持信号进行左右手识别或快捷操作。当压力传感器913设置在触摸显示屏905的下层时,由处理器901根据用户对触摸显示屏905的压力操作,实现对ui界面上的可操作性控件进行控制。可操作性控件包括按钮控件、滚动条控件、图标控件、菜单控件中的至少一种。

指纹传感器914用于采集用户的指纹,由处理器901根据指纹传感器914采集到的指纹识别用户的身份,或者,由指纹传感器914根据采集到的指纹识别用户的身份。在识别出用户的身份为可信身份时,由处理器901授权该用户执行相关的敏感操作,该敏感操作包括解锁屏幕、查看加密信息、下载软件、支付及更改设置等。指纹传感器914可以被设置终端900的正面、背面或侧面。当终端900上设置有物理按键或厂商logo时,指纹传感器914可以与物理按键或厂商logo集成在一起。

光学传感器915用于采集环境光强度。在一个实施例中,处理器901可以根据光学传感器915采集的环境光强度,控制触摸显示屏905的显示亮度。具体地,当环境光强度较高时,调高触摸显示屏905的显示亮度;当环境光强度较低时,调低触摸显示屏905的显示亮度。在另一个实施例中,处理器901还可以根据光学传感器915采集的环境光强度,动态调整摄像头组件906的拍摄参数。

接近传感器916,也称距离传感器,通常设置在终端900的前面板。接近传感器916用于采集用户与终端900的正面之间的距离。在一个实施例中,当接近传感器916检测到用户与终端900的正面之间的距离逐渐变小时,由处理器901控制触摸显示屏905从亮屏状态切换为息屏状态;当接近传感器916检测到用户与终端900的正面之间的距离逐渐变大时,由处理器901控制触摸显示屏905从息屏状态切换为亮屏状态。

本领域技术人员可以理解,图9中示出的结构并不构成对终端900的限定,可以包括比图示更多或更少的组件,或者组合某些组件,或者采用不同的组件布置。

本发明实施例提供的终端,通过在pe群组间复用乘数矩阵,在pe群组内复用被乘数矩阵的行向量,从而在处理较大规模的矩阵乘法任务时,能够调用更多的资源,提高了计算效率,缩短了计算时间。

本发明实施例提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或所述指令集由处理器加载并执行以实现图5所示的矩阵处理方法。

本发明实施例提供的计算机可读存储介质,通过在pe群组间复用乘数矩阵,在pe群组内复用被乘数矩阵的行向量,从而在处理较大规模的矩阵乘法任务时,能够调用更多的资源,提高了计算效率,缩短了计算时间。

本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。

以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1