CN112581987B - 二维结构的局部存储器系统及其运算方法、介质、程序 - Google Patents

二维结构的局部存储器系统及其运算方法、介质、程序 Download PDF

Info

Publication number
CN112581987B
CN112581987B CN202011533378.XA CN202011533378A CN112581987B CN 112581987 B CN112581987 B CN 112581987B CN 202011533378 A CN202011533378 A CN 202011533378A CN 112581987 B CN112581987 B CN 112581987B
Authority
CN
China
Prior art keywords
operators
operands
local
local memory
longitudinal
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
Application number
CN202011533378.XA
Other languages
English (en)
Other versions
CN112581987A (zh
Inventor
陈庆
袁庆
华芮
杨宇
容广健
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Chengdu Haiguang Microelectronics Technology Co Ltd
Original Assignee
Chengdu Haiguang Microelectronics Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Chengdu Haiguang Microelectronics Technology Co Ltd filed Critical Chengdu Haiguang Microelectronics Technology Co Ltd
Priority to CN202011533378.XA priority Critical patent/CN112581987B/zh
Publication of CN112581987A publication Critical patent/CN112581987A/zh
Application granted granted Critical
Publication of CN112581987B publication Critical patent/CN112581987B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C5/00Details of stores covered by group G11C11/00
    • G11C5/02Disposition of storage elements, e.g. in the form of a matrix array

Landscapes

  • Memory System Of A Hierarchy Structure (AREA)
  • Advance Control (AREA)

Abstract

提供一种二维结构的局部存储器系统、方法、介质、程序。系统包括:二维结构的N×N个运算器,排列为N行×N列,其中N为大于或等于2的正整数;N个横向局部存储器,被配置为存储相应的操作数,其中,N个横向局部存储器的一个对应于N列运算器的对应的一列,每个横向局部存储器为对应的1列N个运算器提供操作数;N个纵向局部存储器,被配置为存储相应的操作数,其中,N个纵向局部存储器的一个对应于N行运算器的对应的一行,每个纵向局部存储器为对应的1行N个运算器提供操作数,其中每个运算器对应于一个横向局部存储器和一个纵向局部存储器。

Description

二维结构的局部存储器系统及其运算方法、介质、程序
技术领域
本申请涉及存储器领域,且更具体地,涉及二维结构的局部存储器系统及其运算方法、介质、程序。
背景技术
矩阵运算、例如内积运算、外积运算等,由于其两个输入矩阵的数据可复用性,而在运算过程中一般是将两个输入矩阵的数据从硬盘读入内存,再将运算要重复使用的数据从内存中先读入多个局部存储器(Local Share Memory,LSM),然后从这些局部存储器中再读入通用寄存器(General-Purpose Register,GPR),再送往运算器进行一次性运算,运算完成后把结果写回外部存储器。
发明内容
目前常见的技术方案中,局部存储器往往是一维的设计,即一个局部存储器只服务于一组一维的运算器。
本发明提供一种二维拓扑结构的局部存储器硬件结构,每一个局部存储器能够既支持横向维度的运算单元、又支持纵向维度的运算单元,这样充分利用了矩阵运算的二维特性,能够避免数据拥堵,有效提高局部存储器的利用效率。
根据本发明的一个方面,提供一种二维结构的局部存储器系统,包括:二维结构的N×N个运算器,排列为N行×N列,其中N为大于或等于2的正整数;N个横向局部存储器,被配置为存储相应的操作数,其中,N个横向局部存储器的一个对应于N列运算器的对应的一列,每个横向局部存储器为对应的1列N个运算器提供操作数;N个纵向局部存储器,被配置为存储相应的操作数,其中,N个纵向局部存储器的一个对应于N行运算器的对应的一行,每个纵向局部存储器为对应的1行N个运算器提供操作数,其中每个运算器对应于一个横向局部存储器和一个纵向局部存储器。
根据本发明的另一方面,提供一种二维结构的局部存储器系统的运算方法,其中所述二维结构的局部存储器系统,包括:二维结构的N×N个运算器,排列为N行×N列,其中N为大于或等于2的正整数;N个横向局部存储器,被配置为存储相应的操作数,其中,N个横向局部存储器的一个对应于N列运算器的对应的一列,每个横向局部存储器为对应的1列N个运算器提供操作数;N个纵向局部存储器,被配置为存储相应的操作数,其中,N个纵向局部存储器的一个对应于N行运算器的对应的一行,每个纵向局部存储器为对应的1行N个运算器提供操作数,其中每个运算器对应于一个横向局部存储器和一个纵向局部存储器,其中,矩阵运算需要第一矩阵的一列N个第一操作数集合和第二矩阵的一行N个第二操作数集合,其中所述方法包括:使用数据装载指令利用一个或多个时钟周期从外部存储器中将所述一列N个第一操作数集合和一行N个第二操作数集合一次性或依次分别读入所述N个纵向局部存储器和所述N个横向局部存储器;使用局部存储器读指令同时从每个运算器对应的1个横向局部存储器和1个纵向局部存储器取出一个或多个第一操作数和一个或多个第二操作数,读入运算器的通用寄存器;每个运算器使用所述通用寄存器中的一个或多个第一操作数和一个或多个第二操作数进行运算;每个运算器将运算结果输出到缓存;如果所述一列N个第一操作数集合和所述一行N个第二操作数集合中还存在没有经过运算器的运算的操作数,重复所述读入运算器的通用寄存器的步骤、所述每个运算器的运算步骤和所述输出步骤,直到所述一列N个第一操作数集合和所述一行N个第二操作数集合都经过了运算器的运算。
根据本发明的另一方面,提供一种计算机程序产品,包括计算机可读指令,其被处理器执行时执行本发明的方法。
根据本发明的另一方面,提供一种计算机可读介质,存储计算机可读指令,其被处理器执行时执行本发明的方法。
根据本发明的另一方面,提供一种二维结构的局部存储器系统的计算系统,包括:处理器;存储器,存储计算机可读指令,其被处理器执行时执行本发明的方法。
针对矩阵运算,把局部数据存储器设计成二维结构,提高局部数据存储器的有效利用率,和常见的单维度的设计相比,能减少数据冗余重复,降低局部数据存储器的硬件面积。
附图说明
图1A-1C示出应用根据本发明的实施例的矩阵运算的示例图。图1D示出了传统的一维结构的局部存储器系统的方框图。
图2示出了根据本发明的实施例的二维结构的局部存储器系统200的方框图。
图3示出了使用包括4个横向局部存储器和4个纵向局部存储器以及4×4个运算器的系统来运算矩阵A的一列和矩阵B的一行的外积运算的示意图。
图4示出了将矩阵运算所需要的操作数读入局部存储器的过程的示意图。
图5示出了将操作数从局部存储器读入运算器的通用寄存器的过程的示意图。
图6示出了将得到的结果矩阵输出到缓存的过程的示意图。
图7示出了实现矩阵A(32,1)×B(1,32)=C(32,32)的运算过程的示意图。
图8示出了根据本发明的实施例的二维结构的局部存储器系统的运算方法的流程图。
图9示出了适于用来实现本发明实施方式的示例性计算机系统的框图。
图10示出了用于数据流控制的乒乓操作的原理图。
具体实施方式
现在将详细参照本发明的具体实施例,在附图中例示了本发明的例子。尽管将结合具体实施例描述本发明,但将理解,不是想要将本发明限于描述的实施例。相反,想要覆盖由所附权利要求限定的在本发明的精神和范围内包括的变更、修改和等价物。应注意,这里描述的方法步骤都可以由任何功能块或功能布置来实现,且任何功能块或功能布置可被实现为物理实体或逻辑实体、或者两者的组合。
为了使本领域技术人员更好地理解本发明,下面结合附图和具体实施方式对本发明作进一步详细说明。
注意,接下来要介绍的示例仅是一个具体的例子,而不作为限制本发明的实施例必须为示出和描述的具体的外形、硬件、连接关系、步骤、数值、条件、数据、顺序等等。本领域技术人员可以通过阅读本说明书来运用本发明的构思来构造本说明书中未提到的更多实施例。
图1A-1C示出应用根据本发明的实施例的矩阵运算的示例图。
如果需要将如图1A所示的矩阵A与矩阵B进行外积运算,要用矩阵A的一个列向量乘以矩阵B的一个行向量。外积是一种特殊的克罗内克积,结果是一个矩阵。具体地,如图1B所示,矩阵A的一列乘以矩阵B的一行,即矩阵A的一列中的0乘以矩阵B的一行,得到0,0,0,0,而矩阵A的一列中的1乘以矩阵B的一行,得到0,1,2,3,矩阵A的一列中的2乘以矩阵B的一行,得到0,2,4,6,以此类推,得到是的一个4×4的矩阵。那么,如图1C所示,矩阵A与矩阵B进行外积运算之后,得到多个4×4的矩阵,即矩阵A的一列与矩阵B的每一行进行外积之后都得到一个4×4的矩阵,如果有4列,则得到4个4×4的矩阵。
在该外积过程中,可以看到,矩阵A的每一列中的每个数据要与矩阵B的4行分别相乘,即该每一列的每个数据被重复使用了4次。而矩阵B的每一行也会重复使用了4次,因此,将矩阵A的一列和矩阵B的一行的数据事先读入一些局部存储器,然后在运算时从局部存储器中提取,以便实现高效运算。
但是在目前常见的技术方案中,局部存储器往往是一维的设计,即一个局部存储器只服务于一组一维的运算器。图1D示出了传统的一维结构的局部存储器系统的方框图。如图1D所示,例如矩阵A的一列和矩阵B的一行的8个数据都读入一维的4个局部存储器LSM_B0、LSM_B1、LSM_B2、LSM_B3,而一组一维的一个运算器在运算时要从这4个局部存储器的一个局部存储器中提取矩阵A的1个数据和矩阵B的1个数据作为2个操作数,然后对这2个操作数进行相乘运算。
但是,这样的一维局部存储器在数据提取和运算方面很可能造成数据拥堵,例如运算器需要从同一局部存储器提取2个数据等等,且造成局部存储器的利用效率低,。而且由于每一个一维的局部存储器内部都存储了矩阵A的所有数据,造成了局部存储器之间的数据冗余,造成了局部存储器的存储空间开销过大。
图2示出了根据本发明的实施例的二维结构的局部存储器系统200的方框图。
二维结构的局部存储器系统200包括:二维结构的N×N个运算器201,排列为N行×N列,其中N为大于或等于2的正整数;N个横向局部存储器202,被配置为存储相应的操作数,其中,N个横向局部存储器202的一个对应于N列运算器201的对应的一列,每个横向局部存储器202为对应的1列N个运算器201提供操作数;N个纵向局部存储器203,被配置为存储相应的操作数,其中,N个纵向局部存储器203的一个对应于N行运算器201的对应的一行,每个纵向局部存储器203为对应的1行N个运算器201提供操作数,其中每个运算器201对应于一个横向局部存储器202和一个纵向局部存储器203。
如图2所示意的,示出了4行×4列的16个运算器201。横向局部存储器位于水平方向。纵向局部存储器位于垂直方向。4个横向局部存储器202的每个与4列运算器201的对应的一列一一对应。例如,横向局部存储器0对应于第4列运算器,运算器5、7、13、15,横向局部存储器1对应于第3列运算器,运算器4、6、12、14,横向局部存储器2对应于第2列运算器,运算器1、3、9、11,横向局部存储器3对应于第1列运算器,运算器0、2、8、10。每个横向局部存储器202为对应的1列4个运算器201提供操作数。
4个纵向局部存储器203的每个与4行运算器201的对应的一行一一对应。例如,纵向局部存储器0对应于第1行运算器:运算器0、1、4、5,纵向局部存储器1对应于第2行运算器:运算器2、3、6、7,纵向局部存储器2对应于第3行运算器:运算器8、9、12、13,纵向局部存储器3对应于第4行运算器:运算器10、11、14、15。每个纵向局部存储器203为对应的1行4个运算器201提供操作数。
在这样的结构下,每个运算器201会对应于一个横向局部存储器202和一个纵向局部存储器203。例如运算器0对应于横向局部存储器3和纵向局部存储器0,运算器1对应于横向局部存储器2和纵向局部存储器0,运算器2对应于横向局部存储器3和纵向局部存储器1,运算器3对应于横向局部存储器2和纵向局部存储器1,以此类推。
如此,二维结构的每个局部存储器可以为对应的一行或一列运算器提供用于运算的操作数。在矩阵外积运算的情况下,结合图1C,可以将矩阵A的一列4个数据读入4个纵向局部存储器,将矩阵B的一行4个数据读入4个横向局部存储器,则16个运算器可以一次性从这些局部存储器中提取其所需要的操作数来进行乘法运算,避免了数据拥堵,也提高了运算效率。
在具体示例中,每个局部存储器的具体设计可以为:每个局部存储器大小为1024比特,每个运算器内包括有一个整数32比特乘法器、一个32比特加法器,运算器内还包括:2P+2组32比特寄存器(未示出),用于存放两个源操作数srca和srcb(例如,矩阵外积中的2个乘数);Q组32比特寄存器存放目的操作数srcc(例如,乘积结果)(P和Q都为正整数,具体的大小取决于硬件配置,两类寄存器无差别,可相互复用)。
在一个实施例中,N个横向局部存储器和N个纵向局部存储器被统一地连续编址。这样可以更有效地利用地址空间。例如,如图2所示的4个横向局部存储器和4个纵向局部存储器可以被统一地连续编址,共占8K比特空间(K=1024),横向局部存储器0、1、2、3和纵向局部存储器0、1、2、3依次各占1K比特空间,例如如下表1所示。当然这仅是示例,实际上可以以其他方式连续编址,也可以不连续编址。
表1
在一个实施例中,该系统200还包括连接N个横向局部存储器的一条第一串行总线204和连接N个纵向局部存储器的一条第二串行总线205。
其中第一串行总线204和第二串行总线205连接到缓存206,且通过缓存连接到外部存储器207,例如双倍速同步动态随机存取内存(Double-Data-Rate SynchronousDynamic Random-Access Memory,DDR SDRAM),其中通过缓存从外部存储器获取用于运算的各个操作数、并经由第一串行总线204和第二串行总线205存储到N个横向局部存储器和N个纵向局部存储器。在一般的情况下,为了让2N个局部存储器串行地从外部存储器获取数据,第一串行总线204和第二串行总线205可以不同时工作。
在一个具体例子中,第一串行总线204和第二串行总线205的每个可以是256比特位宽的串行总线。
在一个实施例中,系统200还包括连接每一行运算器和对应的纵向局部存储器的N条第三串行总线208、和连接每一列运算器和对应的横向局部存储器的N条第四串行总线209,用于将各个局部存储器中存储的操作数提供给对应的运算器的通用寄存器(未示出)。在一个具体例子中,第三串行总线208和第四串行总线209的每个可以是32比特位宽的串行总线。
其中纵向局部存储器位于每一行运算器的中间,且横向局部存储器位于每一列运算器的中间。这样,可以将位于中间的局部存储器中存储的数据同时向两边的运算器中输送,能够更快地让运算器从各个局部存储器中提取到数据。
在一个实施例中,系统200还包括将每一行运算器连接到缓存的N条第五串行总线210,用于输出运算器的运算结果。在一个例子中,第五串行总线210的每个可以是128比特位宽的串行总线。
注意,上述串行总线的位宽仅是示例,实际中可以根据数据的大小以及希望的数据传输效率等来设置各个串行总线的位宽,在此不做限制。
在进行矩阵运算时,例如矩阵运算需要第一矩阵的一列N个第一操作数集合和第二矩阵的一行N个第二操作数集合(每个第一操作数集合中可以包含一个或若干个第一操作数,每个第一操作数集合中可以包含一个或若干个第二操作数),进行如下工作流程:
使用数据装载指令利用一个或多个时钟周期从外部存储器中将一列N个第一操作数集合和一行N个第二操作数集合一次性或依次分别读入N个横向局部存储器和N个纵向局部存储器;
使用局部存储器读指令同时从每个运算器对应的1个横向局部存储器和1个纵向局部存储器取出一个或多个第一操作数和一个或多个第二操作数,读入运算器的通用寄存器;
每个运算器使用通用寄存器中的一个或多个第一操作数和一个或多个第二操作数进行运算;
每个运算器将运算结果输出到缓存;
如果所述一列N个第一操作数集合和所述一行N个第二操作数集合中还存在没有经过运算器的运算的操作数,重复读入运算器的通用寄存器的步骤、每个运算器的运算步骤和输出步骤,直到一列N个第一操作数集合和一行N个第二操作数集合中的所有操作数都经过了运算器的运算。
下面结合附图用一个具体例子来详细阐述上述工作流程。
图3示出了使用包括4个横向局部存储器和4个纵向局部存储器以及4×4个运算器的系统来运算矩阵A的一列和矩阵B的一行的外积运算的示意图。
如图3所示,假设共有4×4个运算器,编号为运算器0~运算器15,组成一个4×4的拓扑结构。存在8个局部存储器LSM,编号为纵向的局部存储器A0~A3和横向的局部存储器B0~B3,其中横向意味着位于水平方向排列,纵向意味着位于垂直方向排列。每一个横向的局部存储器B0~B3可以支持垂直方向的4个运算器,例如局部存储器B0支持运算器5、7、13、15。每个纵向的A0~A3可以支持水平方向的4个运算器,例如局部存储器A0支持运算器0、1、4、5。
设计每个局部存储器大小为1024比特,每个运算器内包括有一个整数32比特乘法器,一个32比特加法器,运算器内还包括2P+2组32比特寄存器,用于存放两个源操作数srca和srcb(矩阵外积的两个乘数),Q组32比特寄存器存放目的操作数srcc(两个乘数相乘的结果)(P和Q都为正整数,具体的大小取决于硬件配置,两类寄存器无差别,可相互复用)。
编址空间设计为:把8个局部存储器进行统一编址,共占8K比特空间(K=1024),局部存储器A0、A1、A2、A3、B0、B1、B2、B3依次各占1K比特空间。
总线结构设计为:横向或纵向的4个局部存储器之间使用256比特位宽的串行总线,两条串行总线都连接到缓存,通过缓存连接到外部存储器,但这两条串行总线不会同时工作。
每个局部存储器通过两个32比特位宽的串行总线往上下或者左右的共4个运算器输出数据。
每个横向4个运算器通过128比特位宽的串行总线都连接到缓存用作输出总线。
以两个例子来描述整个工作流程:
(一)实现矩阵A(4,1)×B(1,4)=C(4,4)
矩阵A的第一列,即A(4,1)为a0,a1,a2,a3,矩阵B的第一行,即B(1,4)为b0,b1,b2,b3。
(1)将矩阵运算所需要的操作数读入局部存储器的过程
图4示出了将矩阵运算所需要的操作数读入局部存储器的过程的示意图。
如图4所示,使用数据装载指令(BUF_LOAD_B32)经由一条第一串行总线(例如256比特位宽)从外部存储器中依次将矩阵A的第一列32比特a0,a1,a2,a3分别读入纵向局部存储器A0(LSM_A0)、纵向局部存储器A1(LSM_A1)、纵向局部存储器A2(LSM_A2)、纵向局部存储器A3(LSM_A3);经由一条第二串行总线(例如256比特位宽)从外部存储器中依次将矩阵B的第一行32比特的b0,b1,b2,b3分别读入横向局部存储器B0(LSM_B0)、横向局部存储器B1(LSM_B1)、横向局部存储器B2(LSM_B2)、横向局部存储器B3(LSM_B3)。如果每读一个操作数占用1个周期,读入8个操作数则共占用8个时钟周期。
在此,为了避免数据拥塞,第一串行总线和第二串行总线可以不同时工作,即,先用4个时钟周期利用第一串行总线依次把32比特的a0,a1,a2,a3读入纵向局部存储器LSM_A0,纵向局部存储器LSM_A1,纵向局部存储器LSM_A2,纵向局部存储器LSM_A3,再用4个时钟周期利用第二串行总线依次把32比特的b1,b2,b3读入横向局部存储器LSM_B0,横向局部存储器LSM_B1,横向局部存储器LSM_B2,横向局部存储器LSM_B3。
当然这并非限制,也可以设置不同的总线位宽,或者用4个时钟周期同时利用第一串行总线和第二串行总线读入所有8个操作数。
指令序列则可以示意如下:
BUF_LOAD_B32 LSM_A0,a0;
BUF_LOAD_B32 LSM_A1,a1;
BUF_LOAD_B32 LSM_A2,a2;
BUF_LOAD_B32 LSM_A3,a3;
BUF_LOAD_B32 LSM_B0,b0;
BUF_LOAD_B32 LSM_B1,b1;
BUF_LOAD_B32 LSM_B2,b2;
BUF_LOAD_B32 LSM_B3,b3。
(2)将操作数从局部存储器读入运算器的通用寄存器的过程
图5示出了将操作数从局部存储器读入运算器的通用寄存器的过程的示意图。
如图5所示,使用局部存储器读指令(LSM_LOAD_PAIR)经由4条第三串行总线和4条第四串行总线(例如分别为32比特位宽)同时从一个横向和一个纵向局部存储器取出操作数srca和srcb读入运算器的通用寄存器中,对16个运算器同时执行从相应的2个局部存储器读取操作数的过程。
例如操作数a0从纵向局部存储器A0中取出,并分别读入局部存储器A0相对应的运算器0、1、4、5。例如操作数a1从纵向局部存储器A1中取出,并分别读入局部存储器A1相对应的运算器2、3、6、7。例如操作数a2从纵向局部存储器A2中取出,并分别读入局部存储器A2相对应的运算器8、9、12、13。例如操作数a3从纵向局部存储器A3中取出,并分别读入局部存储器A3相对应的运算器10、11、14、15。
例如操作数b0从横向局部存储器B0中取出,并分别读入局部存储器B0相对应的运算器5、7、13、15。例如操作数b1从横向局部存储器B1中取出,并分别读入局部存储器B1相对应的运算器4、6、12、14。例如操作数b2从横向局部存储器B2中取出,并分别读入局部存储器B2相对应的运算器1、3、9、11。例如操作数b3从横向局部存储器B3中取出,并分别读入局部存储器B3相对应的运算器0、2、8、10。
局部存储器读指令取出的操作数正确地读入运算器的通用寄存器通常占用2个时钟周期。
例如,在一个时钟周期,纵向局部存储器A0中存储的操作数a0分别读入纵向局部存储器A0左边相邻的运算器1和右边相邻的运算器4,纵向局部存储器A1中存储的操作数a1分别读入纵向局部存储器A1左边相邻的运算器3和右边相邻的运算器6,纵向局部存储器A2中存储的操作数a2分别读入纵向局部存储器A2左边相邻的运算器9和右边相邻的运算器12,纵向局部存储器A3中存储的操作数a3分别读入纵向局部存储器A3左边相邻的运算器11和右边相邻的运算器14;横向局部存储器B0中存储的操作数b0分别读入横向局部存储器B0上边相邻的运算器7和下边相邻的运算器13,横向局部存储器B1中存储的操作数b1分别读入横向局部存储器B1上边相邻的运算器6和下边相邻的运算器12,横向局部存储器B2中存储的操作数b2分别读入横向局部存储器B2上边相邻的运算器3和下边相邻的运算器9,横向局部存储器B3中存储的操作数b3分别读入横向局部存储器B3上边相邻的运算器2和下边相邻的运算器8。
在下一个时钟周期,纵向局部存储器A0中存储的操作数a0再从运算器1、4分别读入运算器0和5,纵向局部存储器A1中存储的操作数a1再从运算器3、6分别读入运算器2和7,纵向局部存储器A2中存储的操作数a2再从运算器9、12分别读入运算器8和13,纵向局部存储器A3中存储的操作数a3再从运算器11、14分别读入运算器10和15;横向局部存储器B0中存储的操作数b0再从运算器7、13分别读入运算器5和15,横向局部存储器B1中存储的操作数b1再从运算器6、12分别读入运算器4和14,横向局部存储器B2中存储的操作数b2再从运算器3、9分别读入运算器1和11,横向局部存储器B3中存储的操作数b3再从运算器2、8分别读入运算器0和10。
因此一共占用2个时钟周期。如此,16个运算器中每个都存储了2个操作数srca和srcb,即srca包括a’0,…,a’15,srcb包括b’0,…,b’15,例如运算器0存储了srca=a’0,srcb=b’0,运算器1存储了srca=a’1,srcb=b’1…,(其中,0-15分别对应于运算器的编号),其中a’0=a0,a’1=a0,a’4=a0,a’5=a0,a’2=a1,a’3=a1,a’6=a1,a’7=a1,a’8=a2,a’9=a2,a’12=a2,a’13=a2,a’10=a3,a’11=a3,a’14=a3,a’15=a3;b’5=b0,b’7=b0,b’13=b0,b’15=b0,b’4=b1,b’6=b1,b’12=b1,b’14=b1,b’1=b2,b’3=b2,b’9=b2,b’11=b2,b’0=b3,b’2=b3,b’8=b3,b’10=b3。
指令序列则可以示意如下:
LSM_LOAD_PAIR srca_{a’0,…,a’15},srcb_{b’0,…,b’15},LSM_A{0,…,3},LSM_B{0,…,3};
NOP
(3)运算器进行乘法运算
16个运算器都获得了分别来自其相对应的纵向局部存储器和横向局部存储器的两个操作数之后,同时对各自的操作数进行16个乘法运算(MUL指令),通常占用两个时钟周期。例如,运算器中包括的乘法器和加法器的运算各占1个时钟周期。虽然在此矩阵运算中只有乘法运算,只使用了乘法器的路径,而加法器的路径被省略(bypass),但仍经过2个时钟周期。
指令序列则可以示意如下:
MUL srcc_{u0,…,u15},srca_{a’0,…,a’15},srcb_{b’0,…,b’15}
(4)得到的结果矩阵C(4,4)输出到缓存
图6示出了将得到的结果矩阵输出到缓存的过程的示意图。
如图6所示,16个运算器运算之后得到16个数(例如,srcc_u0,…,srcc_u15),组成结果矩阵C(4,4)。利用4条第五串行总线(例如,为128比特位宽)将得到的结果矩阵C(4,4)写回到缓存(BUF_STORE_B512 DDR),需要4个时钟周期。
即,第一个时钟周期,运算器0、2、8、10的运算结果读入缓存中,运算器1、3、9、11的运算结果向左移动到运算器0、2、8、10,运算器4、6、12、14的运算结果向左移动到运算器1、3、9、11,运算器5、7、13、15的运算结果向左移动到运算器4、6、12、14。
在第二个时钟周期,运算器1、3、9、11的运算结果读入缓存,运算器4、6、12、14的运算结果向左移动到运算器0、2、8、10,运算器5、7、13、15的运算结果向左移动到运算器1、3、9、11。
在第三个时钟周期,运算器4、6、12、14的运算结果读入缓存,运算器5、7、13、15的运算结果向左移动到运算器0、2、8、10。
在第四个时钟周期,运算器5、7、13、15的运算结果读入缓存。必要时,在运算结果读入缓存之后,缓存会将运算结果输出到外部存储器。
指令序列则可以示意如下:
BUF_STORE_B512 DDR,srcc{u0,…,u15}
这样共使用8+2+1+1+4=16个时钟周期实现了一共16次乘法操作,性能为每周期一次乘法操作。该方案利用2个周期将所有要运算的操作数从二维的8个局部存储器读入到二维的16个运算器中,可以仅用2个周期同时用二维的16个运算器进行乘法(和加法)运算,充分利用的矩阵运算中的一列和一行的操作数的重复,并简化了运算器运算的时间周期,使得可以同时进行运算器的操作即可获得运算的结果,提高了运算效率,也因为所有的操作数的读入相互之间不受影响,避免了数据拥塞。
下面举例一个更大的矩阵运算的操作。
(二)实现矩阵A(32,1)×B(1,32)=C(32,32)
图7示出了实现矩阵A(32,1)×B(1,32)=C(32,32)的运算过程的示意图。
可以仍然使用图3所示的系统结构,即仍然是二维排列的4×4个运算器和二维的4个纵向局部存储器和4个横向局部存储器,但由于32×32矩阵比4×4的矩阵扩大了8倍,如图7所示,则将一列A(32,1)的32个第一操作数分为4个第一操作数集合,分别为a0(8,1),a1(8,1),a2(8,1),a3(8,1)(每个第一操作数为256比特大小),将一行B(1,32)的32个操作数分为4个第二操作数集合,分别为b0(1,8),b1(1,8),b2(1,8),b3(1,8)。
(1)将矩阵运算所需要的操作数读入局部存储器的过程
如图4所示,由于第一串行总线和第二串行总线的位宽均为256比特,使用数据装载指令从外部存储器中依次把256比特的4个第一操作数集合a0(8,1),a1(8,1),a2(8,1),a3(8,1),4个第二操作数集合b0(1,8),b1(1,8),b2(1,8),b3(1,8)读入纵向局部存储器LSM_A0、纵向局部存储器LSM_A1、纵向局部存储器LSM_A2、纵向局部存储器LSM_A3、横向局部存储器LSM_B0、横向局部存储器LSM_B1、横向局部存储器LSM_B2、横向局部存储器LSM_B3,共占用8个时钟周期。
在此,为了避免数据拥塞,第一串行总线和第二串行总线可以不同时工作,即,先用4个时钟周期利用第一串行总线依次把256比特的a0(8,1),a1(8,1),a2(8,1),a3(8,1)读入纵向局部存储器LSM_A0、纵向局部存储器LSM_A1、纵向局部存储器LSM_A2、纵向局部存储器LSM_A3,再用4个时钟周期利用第二串行总线依次把256比特的b0(1,8),b1(1,8),b2(1,8),b3(1,8)读入横向局部存储器LSM_B0、横向局部存储器LSM_B1、横向局部存储器LSM_B2、横向局部存储器LSM_B3。
当然这并非限制,也可以设置不同的总线位宽,或者用4个时钟周期同时利用第一串行总线和第二串行总线读入所有8个操作数。
指令序列则可以示意如下:
BUF_LOAD_B256 LSM_A0,a0(8,1);
BUF_LOAD_B256 LSM_A1,a1(8,1);
BUF_LOAD_B256 LSM_A2,a2(8,1);
BUF_LOAD_B256 LSM_A3,a3(8,1);
BUF_LOAD_B256 LSM_B0,b0(1,8);
BUF_LOAD_B256 LSM_B1,b1(1,8);
BUF_LOAD_B256 LSM_B2,b2(1,8);
BUF_LOAD_B256 LSM_B3,b3(1,8);
(2)将操作数从局部存储器读入运算器的通用寄存器的过程
在将操作数从局部存储器读入运算器的通用寄存器的过程中,将32×32的矩阵运算进行分解,一共分解为16个循环,每个循环从4个纵向局部存储器读取4个第一操作数集合中的每个操作数集合中的2个第一操作数(即,在第一次循环中,从每个纵向局部存储器读取对应的第一操作数集合中的2个第一操作数),即,属于矩阵A的一共8个第一操作数,每个循环从4个横向局部存储器读取4个第二操作数集合中的每个操作数集合中的2个第二操作数(即,在第一次循环中,从每个横向局部存储器读取对应的第二操作数集合中的2个第二操作数),即,属于矩阵B的一共8个第二操作数,送入16个运算器去执行16个2×2的矩阵运算。一共循环16次这样的操作,直到所有一列4个第一操作数集合和一行4个第二操作数集合都经过了运算器的运算。
在第一次循环中将纵向局部存储器A0中存储的第一操作数集合a0(8,1)中的2个第一操作数a0[0],a0[1]两者分别读入运算器0、1、4、5,将纵向局部存储器A1中存储的第一操作数集合a1(8,1)中的2个第一操作数a1[0]、a1[1]两者分别读入运算器2、3、6、7,将纵向局部存储器A2中存储的第一操作数集合a2(8,1)中的2个第一操作数a2[0]、a2[1]两者分别读入运算器8、9、12、13,将纵向局部存储器A3中存储的第一操作数集合a3(8,1)中的2个第一操作数a3[0]、a3[1]两者分别读入运算器10、11、14、15。且将横向局部存储器B0中存储的第二操作数集合b0(1,8)中的2个第二操作数b0[0],b0[1]两者分别读入运算器5、7、13、15,将横向局部存储器B1中存储的第二操作数集合b1(1,8)中的2个第二操作数b1[0]、b1[1]两者分别读入运算器4、6、12、14,将横向局部存储器B2中存储的第二操作数集合b2(1,8)中的2个第二操作数b2[0]、b2[1]两者分别读入运算器1、3、9、11,将横向局部存储器B3中存储的第二操作数集合b3(1,8)中的2个第二操作数b3[0]、b3[1]两者分别读入运算器0、2、8、10(如图7中浅色的方块所示)。即从矩阵A中读入相应的一个运算器中的通用寄存器2个srca,从矩阵B中读入相应的一个运算器中的通用寄存器2个srcb。
然后,在第二次循环中类似地读入a0[0],a1[0],a2[0],a3[0],a0[1],a1[1],a2[1],a3[1]和b0[2],b1[2],b2[2],b3[2],b0[3],b1[3],b2[3],b3[3](如图7中深色的方块所示)。以此类推,通过16次循环可以将16组16个2×2的矩阵运算需要的srca操作数和srcb操作数都读入了16个运算器的通用寄存器中。
具体地,如图5所示,使用两条LSM_LOAD_PAIR读指令经由第三串行总线和第四串行总线同时从一个横向和一个纵向局部存储器取出两个srca操作数和两个srcb操作数读入运算器的通用寄存器。对每一个运算器而言,都是去计算一个2×2的矩阵运算,需要读入两个srca和两个srcb,因此每个LSM_LOAD_PAIR指令读入的数据正确读入运算器的通用寄存器占用2个时钟周期。这样两条LSM_LOAD_PAIR共占用4个时钟周期。
指令序列则可以示意如下(其中,指令序列中的LSM_A{0,..,3}[0]表示a0[0],a1[0],a2[0],a3[0],类似的LSM_A{0,…,3}[1]表示a0[1],a1[1],a2[1],a3[1],其中只示出了第1次循环读入和第2次循环读入,其余14次循环读入省略):
第一次循环读入指令序列:
LSM_LOAD_PAIR srca0_{u0,…,u15},srcb0_{u0,…,u15},LSM_A{0,…,3}[0],LSM_B{0,…,3}[0];
LSM_LOAD_PAIR srca1_{u0,…,u15},srcb1_{u0,…,u15},LSM_A{0,…,3}[1],LSM_B{0,…,3}[1];
第二次循环读入指令序列:
LSM_LOAD_PAIR srca0_{u0,…,u15},srcb0_{u0,…,u15},LSM_A{0,…,3}[0],LSM_B{0,…,3}[2]
LSM_LOAD_PAIR srca1_{u0,…,u15},srcb1_{u0,…,u15},LSM_A{0,…,3}[1],LSM_B{0,…,3}[3]
第三次循环读入指令序列:
……
(3)运算器进行乘法运算
每一次循环中,16个运算器可以同时从相应的通用寄存器中取出数据并运算,在运算器中包含1个乘法器的情况下,每个运算器执行2×2矩阵的4次乘法运算,共占用4个时钟周期,得到16组2×2结果矩阵c(2,2)。在这里,具体的过程可以是:利用4个时钟周期,每个时钟周期中,乘法器对2×2矩阵中要计算的1个第一操作数和1个第二操作数进行乘法,因此4个时钟周期完成2×2矩阵的乘法。当然,如果运算器中包含4个乘法器,实际上,可以只需要1个时钟周期,就可以2×2矩阵的乘法运算。在这里不做限制,只需要运算器能完成相应的通用寄存器中的操作数的运算即可。
指令序列则可以示意如下(其中只示出了第一次循环的16个运算器执行16个2×2矩阵的乘法运算,其余15次循环的乘法运算指令序列是一样的,此处被省略):
MUL srcc00_{u0,…,u15},srca0_{u0,…,u15},srcb0_{u0,…,u15}
MUL srcc01_{u0,…,u15},srca0_{u0,…,u15},srcb1_{u0,…,u15}
MUL srcc10_{u0,…,u15},srca1_{u0,…,u15},srcb0_{u0,…,u15}
MUL srcc11_{u0,…,u15},srca1_{u0,…,u15},srcb1_{u0,…,u15}
……
(4)得到的16组2×2结果矩阵c(2,2)输出到缓存
如图6所示,每一次循环中,把得到的16组2×2结果矩阵c(2,2)写回到缓存,需要4个时钟周期。
指令序列则可以示意如下(只示出了第一次循环的写回指令,其余15次循环的写回指令是一样的,此处被省略):
BUF_STORE_B512 DDR,srcc{u0,…,u15}_c(2,2)
……
将步骤(2)(3)(4)按流水线进行流水操作,执行16次循环将操作数都读入运算器、并运算完成、然后输出,直到所有一列4个第一操作数集合和一行4个第二操作数集合中的所有操作数都经过了运算器的运算。这样通过16次循环的计算得到16组结果矩阵,每组包括16个2×2结果矩阵c(2,2),通过16次循环一共输出完整的C(32,32)矩阵。
下表2示出了流水线操作的操作指令和占用的时钟周期。
周期 0 4 8 12 76 80
Load LSM_A LSM_B
Lsm Load Load Load Load
MUL MUL MUL MUL MUL
Store Store Store Store Store
这样共使用84个时钟周期实现了一共32×32次乘法操作,性能相当于约为每周期12次乘法操作。在矩阵尺寸进一步加大,比如64×1×1×64,或者32×2×2×32时,因为流水线能补偿读、写的时间消耗,性能趋近于峰值每周期16次操作。
如果硬件只需要支持一次装载最大为32×1和1×32的矩阵,则如果使用乒乓操作,图10示出了用于数据流控制的乒乓操作的原理图,即在第1个缓冲周期,将输入的数据流缓存到“数据缓冲1”模块1001,在第2个缓冲周期,“输入数据流分配器”模块1003将输入的数据流缓存到“数据缓冲2”模块1002的同时,“输出数据流二选一选择器”模块1004将“数据缓冲1”模块1001第一个周期缓存的数据流送到“运算处理模块”1005进行后续的数据处理,在第三个缓冲周期,在“输入数据流分配器”模块1003的再次切换后,输入的数据流缓存到“数据缓冲1”模块1001,与此同时,“输出数据流二选一选择器”模块1004也做出切换,将“数据缓冲2”模块1002缓存的第二个周期的数据送到“运算处理模块”1005,如此循环。则每个局部存储器的大小可设计为512比特,8个局部存储器总的大小为4096比特。
对传统的一维的局部存储器的设计,由于两个局部存储器之间会有数据重复冗余,要达到相同的峰值每周期16次操作性能,则需要双倍的尺寸,即8192比特。如果尺寸不变,则整个运算耗费的时钟周期数会增多。
而本方案的二维局部存储器,能把存储尺寸降至一半,同时实现每周期更多操作的性能,提高局部数据存储器的有效利用率,提高运算效率。
当然,上述例子只包括了4×4和32×32的矩阵大小的运算示意,但是其他大小的矩阵也可以使用本方案的N×N的二维结构,只需要将其他大小的矩阵的要运算的多个第一操作数和多个第二操作数划分为N个第一操作数集合和N个第二操作数集合(在4×4矩阵大小的情况下,该第一操作数集合是1个第一操作数,该第二操作数集合是1个第二操作数),以便分别读入到N个纵向局部存储器和N个横向局部存储器中,并在每个循环中从N个纵向局部存储器和N个横向局部存储器中分别读出每个操作数集合中的一个或多个操作数到相应的运算器中,循环多次直到所有的操作数都被运算后,则可以得到最终的结果矩阵。
图8示出了根据本发明的实施例的二维结构的局部存储器系统的运算方法800的流程图。
在二维结构的局部存储器系统的运算方法800中,二维结构的局部存储器系统,包括:二维结构的N×N个运算器,排列为N行×N列,其中N为大于或等于2的正整数;N个横向局部存储器,被配置为存储相应的操作数,其中,N个横向局部存储器的一个对应于N列运算器的对应的一列,每个横向局部存储器为对应的1列N个运算器提供操作数;N个纵向局部存储器,被配置为存储相应的操作数,其中,N个纵向局部存储器的一个对应于N行运算器的对应的一行,每个纵向局部存储器为对应的1行N个运算器提供操作数,其中每个运算器对应于一个横向局部存储器和一个纵向局部存储器。
如果矩阵运算需要第一矩阵的一列N个第一操作数集合和第二矩阵的一行N个第二操作数集合,方法800包括:步骤801,使用数据装载指令利用一个或多个时钟周期从外部存储器中将一列N个第一操作数集合和一行N个第二操作数集合一次性或依次分别读入N个横向局部存储器和N个纵向局部存储器;步骤802,使用局部存储器读指令同时从每个运算器对应的1个横向局部存储器和1个纵向局部存储器取出一个或多个第一操作数和一个或多个第二操作数,读入运算器的通用寄存器;步骤803,每个运算器使用通用寄存器中的一个或多个第一操作数和一个或多个第二操作数进行运算;步骤804,每个运算器将运算结果输出到缓存。如此,如果所述一列N个第一操作数集合和所述一行N个第二操作数集合中还存在没有经过运算器的运算的操作数,重复读入运算器的通用寄存器的步骤802、每个运算器的运算步骤803和输出步骤804,直到一列N个第一操作数集合和一行N个第二操作数集合中的所有操作数都经过了运算器的运算。
在一个实施例中,使用数据装载指令利用一个或多个时钟周期从外部存储器中将一列N个第一操作数集合和一行N个第二操作数集合一次性或依次分别读入N个横向局部存储器和N个纵向局部存储器的步骤801包括:经由连接N个横向局部存储器的一条第一串行总线和连接N个纵向局部存储器的一条第二串行总线来从外部存储器中将一列N个第一操作数集合和一行N个第二操作数集合一次性或依次分别读入N个横向局部存储器和N个纵向局部存储器。第一串行总线和第二串行总线不同时工作。第一串行总线和第二串行总线连接到缓存,且通过缓存连接到外部存储器,其中通过缓存从外部存储器获取用于运算的各个操作数、并经由第一串行总线和第二串行总线存储到N个横向局部存储器和N个纵向局部存储器。
在一个实施例中,使用局部存储器读指令同时从每个运算器对应的1个横向局部存储器和1个纵向局部存储器取出一个或多个第一操作数和一个或多个第二操作数,读入运算器的通用寄存器的步骤802包括:经由连接每一行运算器和对应的纵向局部存储器的N条第三串行总线、和连接每一列运算器和对应的横向局部存储器的N条第四串行总线,将各个局部存储器中存储的操作数提供给对应的运算器的通用寄存器。纵向局部存储器位于每一行运算器的中间,且横向局部存储器位于每一列运算器的中间。
在一个实施例中,每个运算器将运算结果输出到缓存的步骤804包括:经由将每一行运算器连接到缓存的N条第五串行总线,输出运算器的运算结果。
在一个实施例中,N个横向局部存储器和N个纵向局部存储器被统一地连续编址。
如此,针对矩阵运算,把局部数据存储器设计成二维结构,提高局部数据存储器的有效利用率,和常见的单维度的设计相比,能减少数据冗余重复,降低局部数据存储器的硬件面积。
图9示出了适于用来实现本发明实施方式的示例性计算机系统的框图。
计算机系统可以包括处理器(H1);存储器(H2),耦合于处理器(H1),且在其中存储计算机可执行指令,用于在由处理器执行时进行二维结构的局部存储器系统的运算方法。
处理器(H1)可以包括但不限于例如一个或者多个处理器或者或微处理器等。
存储器(H2)可以包括但不限于例如,随机存取存储器(RAM)、只读存储器(ROM)、快闪存储器、EPROM存储器、EEPROM存储器、寄存器、硬碟、软碟、固态硬盘、可移动碟、CD-ROM、DVD-ROM、蓝光盘等。
除此之外,该计算机系统还可以包括数据总线(H3)、输入/输出(I/O)总线(H4),显示器(H5)以及输入/输出设备(H6)(例如,键盘、鼠标、扬声器等)等。
处理器(H1)可以通过I/O总线(H4)经由有线或无线网络(未示出)与外部设备(H5、H6等)通信。
存储器(H2)还可以存储计算机程序产品,包括至少一个计算机可执行指令,用于在由处理器(H1)执行时本技术所描述的实施例中的各个功能和/或方法的步骤。
当然,上述的具体实施例仅是例子而非限制,且本领域技术人员可以根据本发明的构思从上述分开描述的各个实施例中合并和组合一些步骤和装置来实现本发明的效果,这种合并和组合而成的实施例也被包括在本发明中,在此不一一描述这种合并和组合。
注意,在本公开中提及的优点、优势、效果等仅是示例而非限制,不能认为这些优点、优势、效果等是本发明的各个实施例必须具备的。另外,上述公开的具体细节仅是为了示例的作用和便于理解的作用,而非限制,上述细节并不限制本发明为必须采用上述具体的细节来实现。
本公开中涉及的器件、装置、设备、系统的方框图仅作为例示性的例子并且不意图要求或暗示必须按照方框图示出的方式进行连接、布置、配置。如本领域技术人员将认识到的,可以按任意方式连接、布置、配置这些器件、装置、设备、系统。诸如“包括”、“包含”、“具有”等等的词语是开放性词汇,指“包括但不限于”,且可与其互换使用。这里所使用的词汇“或”和“和”指词汇“和/或”,且可与其互换使用,除非上下文明确指示不是如此。这里所使用的词汇“诸如”指词组“诸如但不限于”,且可与其互换使用。
本公开中的步骤流程图以及以上方法描述仅作为例示性的例子并且不意图要求或暗示必须按照给出的顺序进行各个实施例的步骤。如本领域技术人员将认识到的,可以按任意顺序进行以上实施例中的步骤的顺序。诸如“其后”、“然后”、“接下来”等等的词语不意图限制步骤的顺序;这些词语仅用于引导读者通读这些方法的描述。此外,例如使用冠词“一个”、“一”或者“该”对于单数的要素的任何引用不被解释为将该要素限制为单数。
另外,本文中的各个实施例中的步骤和装置并非仅限定于某个实施例中实行,事实上,可以根据本发明的概念来结合本文中的各个实施例中相关的部分步骤和部分装置以构思新的实施例,而这些新的实施例也包括在本发明的范围内。
以上描述的方法的各个操作可以通过能够进行相应的功能的任何适当的手段而进行。该手段可以包括各种硬件和/或软件组件和/或模块,包括但不限于硬件的电路、专用集成电路(ASIC)或处理器。
可以利用被设计用于进行在此描述的功能的通用处理器、数字信号处理器(DSP)、ASIC、场可编程门阵列信号(FPGA)或其他可编程逻辑器件(PLD)、离散门或晶体管逻辑、离散的硬件组件或者其任意组合而实现或进行描述的各个例示的逻辑块、模块和电路。通用处理器可以是微处理器,但是作为替换,该处理器可以是任何商业上可获得的处理器、控制器、微控制器或状态机。处理器还可以实现为计算设备的组合,例如DSP和微处理器的组合,多个微处理器、与DSP核协作的一个或多个微处理器或任何其他这样的配置。
结合本公开描述的方法或算法的步骤可以直接嵌入在硬件中、处理器执行的软件模块中或者这两种的组合中。软件模块可以存在于任何形式的有形存储介质中。可以使用的存储介质的一些例子包括随机存取存储器(RAM)、只读存储器(ROM)、快闪存储器、EPROM存储器、EEPROM存储器、寄存器、硬碟、可移动碟、CD-ROM等。存储介质可以耦接到处理器以便该处理器可以从该存储介质读取信息以及向该存储介质写信息。在替换方式中,存储介质可以与处理器是整体的。软件模块可以是单个指令或者许多指令,并且可以分布在几个不同的代码段上、不同的程序之间以及跨过多个存储介质。
在此公开的方法包括用于实现描述的方法的一个或多个动作。方法和/或动作可以彼此互换而不脱离权利要求的范围。换句话说,除非指定了动作的具体顺序,否则可以修改具体动作的顺序和/或使用而不脱离权利要求的范围。
上述功能可以按硬件、软件、固件或其任意组合而实现。如果以软件实现,功能可以作为一个或多个指令存储在切实的计算机可读介质上。存储介质可以是可以由计算机访问的任何可用的切实介质。通过例子而不是限制,这样的计算机可读介质可以包括RAM、ROM、EEPROM、CD-ROM或其他光碟存储、磁碟存储或其他磁存储器件或者可以用于携带或存储指令或数据结构形式的期望的程序代码并且可以由计算机访问的任何其他切实介质。如在此使用的,碟(disk)和盘(disc)包括紧凑盘(CD)、激光盘、光盘、数字通用盘(DVD)、软碟和蓝光盘,其中碟通常利用磁性原理来再现数据,而盘利用激光光学原理来再现数据。
因此,计算机程序产品可以进行在此给出的操作。例如,这样的计算机程序产品可以是具有有形存储(和/或编码)在其上的指令的计算机可读的有形介质,该指令可由一个或多个处理器执行以进行在此描述的操作。计算机程序产品可以包括包装的材料。
软件或指令也可以通过传输介质而传输。例如,可以使用诸如同轴电缆、光纤光缆、双绞线、数字订户线(DSL)或诸如红外、无线电或微波的无线技术的传输介质从网站、服务器或者其他远程源传输软件。
此外,用于进行在此描述的方法和技术的模块和/或其他适当的手段可以在适当时由用户终端和/或基站下载和/或其他方式获得。例如,这样的设备可以耦接到服务器以促进用于进行在此描述的方法的手段的传送。或者,在此描述的各种方法可以经由存储部件(例如RAM、ROM、诸如CD或软碟等的物理存储介质)提供,以便用户终端和/或基站可以在耦接到该设备或者向该设备提供存储部件时获得各种方法。此外,可以利用用于将在此描述的方法和技术提供给设备的任何其他适当的技术。
其他例子和实现方式在本公开和所附权利要求的范围和精神内。例如,由于软件的本质,以上描述的功能可以使用由处理器、硬件、固件、硬连线或这些的任意的组合执行的软件实现。实现功能的特征也可以物理地位于各个位置,包括被分发以便功能的部分在不同的物理位置处实现。而且,如在此使用的,包括在权利要求中使用的,在以“至少一个”开始的项的列举中使用的“或”指示分离的列举,以便例如“A、B或C的至少一个”的列举意味着A或B或C,或AB或AC或BC,或ABC(即A和B和C)。此外,措辞“示例的”不意味着描述的例子是优选的或者比其他例子更好。
可以不脱离由所附权利要求定义的教导的技术而进行对在此描述的技术的各种改变、替换和更改。此外,本公开的权利要求的范围不限于以上描述的处理、机器、制造、事件的组成、手段、方法和动作的具体方面。可以利用与在此描述的相应方面进行基本相同的功能或者实现基本相同的结果的当前存在的或者稍后要开发的处理、机器、制造、事件的组成、手段、方法或动作。因而,所附权利要求包括在其范围内的这样的处理、机器、制造、事件的组成、手段、方法或动作。
提供所公开的方面的以上描述以使本领域的任何技术人员能够做出或者使用本发明。对这些方面的各种修改对于本领域技术人员而言是非常显而易见的,并且在此定义的一般原理可以应用于其他方面而不脱离本发明的范围。因此,本发明不意图被限制到在此示出的方面,而是按照与在此公开的原理和新颖的特征一致的最宽范围。
为了例示和描述的目的已经给出了以上描述。此外,此描述不意图将本发明的实施例限制到在此公开的形式。尽管以上已经讨论了多个示例方面和实施例,但是本领域技术人员将认识到其某些变型、修改、改变、添加和子组合。

Claims (13)

1.一种二维结构的局部存储器系统,包括:
二维结构的N×N个运算器,排列为N行×N列,其中N为大于或等于2的正整数;
N个横向局部存储器,被配置为存储相应的操作数,其中,N个横向局部存储器的一个对应于N列运算器的对应的一列,每个横向局部存储器为对应的1列N个运算器提供操作数;
N个纵向局部存储器,被配置为存储相应的操作数,其中,N个纵向局部存储器的一个对应于N行运算器的对应的一行,每个纵向局部存储器为对应的1行N个运算器提供操作数,
其中每个运算器对应于一个横向局部存储器和一个纵向局部存储器,以便一个运算器从一个横向局部存储器和一个纵向局部存储器中分别提取操作数以进行运算。
2.根据权利要求1所述的系统,还包括连接所述N个横向局部存储器的一条第一串行总线和连接所述N个纵向局部存储器的一条第二串行总线,其中,所述第一串行总线和第二串行总线不同时工作,
其中所述第一串行总线和第二串行总线连接到缓存,且通过所述缓存连接到外部存储器,其中通过所述缓存从所述外部存储器获取用于运算的各个操作数、并经由所述第一串行总线和第二串行总线存储到所述N个横向局部存储器和所述N个纵向局部存储器。
3.根据权利要求1所述的系统,还包括连接每一行运算器和对应的纵向局部存储器的N条第三串行总线、和连接每一列运算器和对应的横向局部存储器的N条第四串行总线,用于将各个局部存储器中存储的操作数提供给对应的运算器的通用寄存器,
其中所述纵向局部存储器位于所述每一行运算器的中间,且所述横向局部存储器位于所述每一列运算器的中间。
4.根据权利要求1所述的系统,还包括将每一行运算器连接到缓存的N条第五串行总线,用于输出运算器的运算结果。
5.根据权利要求1所述的系统,其中所述N个横向局部存储器和N个纵向局部存储器被统一地连续编址。
6.根据权利要求1所述的系统,其中,矩阵运算需要第一矩阵的一列N个第一操作数集合和第二矩阵的一行N个第二操作数集合,
使用数据装载指令利用一个或多个时钟周期从外部存储器中将所述一列N个第一操作数集合和一行N个第二操作数集合一次性或依次分别读入所述N个纵向局部存储器和所述N个横向局部存储器;
使用局部存储器读指令同时从每个运算器对应的1个横向局部存储器和1个纵向局部存储器取出一个或多个第一操作数和一个或多个第二操作数,读入运算器的通用寄存器;
每个运算器使用所述通用寄存器中的一个或多个第一操作数和一个或多个第二操作数进行运算;
每个运算器将运算结果输出到缓存;
如果所述一列N个第一操作数集合和所述一行N个第二操作数集合中还存在没有经过运算器的运算的操作数,重复所述读入运算器的通用寄存器的步骤、所述每个运算器的运算步骤和所述输出步骤,直到所述一列N个第一操作数集合和所述一行N个第二操作数集合都经过了运算器的运算。
7.一种二维结构的局部存储器系统的运算方法,其中所述二维结构的局部存储器系统,包括:二维结构的N×N个运算器,排列为N行×N列,其中N为大于或等于2的正整数;N个横向局部存储器,被配置为存储相应的操作数,其中,N个横向局部存储器的一个对应于N列运算器的对应的一列,每个横向局部存储器为对应的1列N个运算器提供操作数;N个纵向局部存储器,被配置为存储相应的操作数,其中,N个纵向局部存储器的一个对应于N行运算器的对应的一行,每个纵向局部存储器为对应的1行N个运算器提供操作数,其中每个运算器对应于一个横向局部存储器和一个纵向局部存储器,
其中,矩阵运算需要第一矩阵的一列N个第一操作数集合和第二矩阵的一行N个第二操作数集合,其中所述方法包括:
使用数据装载指令利用一个或多个时钟周期从外部存储器中将所述一列N个第一操作数集合和一行N个第二操作数集合一次性或依次分别读入所述N个纵向局部存储器和所述N个横向局部存储器;
使用局部存储器读指令同时从每个运算器对应的1个横向局部存储器和1个纵向局部存储器取出一个或多个第一操作数和一个或多个第二操作数,读入运算器的通用寄存器;
每个运算器使用所述通用寄存器中的一个或多个第一操作数和一个或多个第二操作数进行运算;
每个运算器将运算结果输出到缓存;
如果所述一列N个第一操作数集合和所述一行N个第二操作数集合中还存在没有经过运算器的运算的操作数,重复所述读入运算器的通用寄存器的步骤、所述每个运算器的运算步骤和所述输出步骤,直到所述一列N个第一操作数集合和所述一行N个第二操作数集合都经过了运算器的运算。
8.根据权利要求7所述的方法,其中,使用数据装载指令利用一个或多个时钟周期从外部存储器中将所述一列N个第一操作数集合和一行N个第二操作数集合一次性或依次分别读入所述N个纵向局部存储器和所述N个横向局部存储器包括:
经由连接所述N个横向局部存储器的一条第一串行总线和连接所述N个纵向局部存储器的一条第二串行总线来从外部存储器中将所述一列N个第一操作数集合和一行N个第二操作数集合一次性或依次分别读入所述N个纵向局部存储器和所述N个横向局部存储器,
其中,所述第一串行总线和第二串行总线不同时工作,
其中所述第一串行总线和第二串行总线连接到缓存,且通过所述缓存连接到外部存储器,其中通过所述缓存从所述外部存储器获取用于运算的各个操作数、并经由所述第一串行总线和第二串行总线存储到所述N个横向局部存储器和所述N个纵向局部存储器。
9.根据权利要求7所述的方法,其中使用局部存储器读指令同时从每个运算器对应的1个横向局部存储器和1个纵向局部存储器取出一个或多个第一操作数和一个或多个第二操作数,读入运算器的通用寄存器包括:
经由连接每一行运算器和对应的纵向局部存储器的N条第三串行总线、和连接每一列运算器和对应的横向局部存储器的N条第四串行总线,将各个局部存储器中存储的操作数提供给对应的运算器的通用寄存器,
其中所述纵向局部存储器位于所述每一行运算器的中间,且所述横向局部存储器位于所述每一列运算器的中间。
10.根据权利要求7所述的方法,其中每个运算器将运算结果输出到缓存包括:
经由将每一行运算器连接到缓存的N条第五串行总线,输出运算器的运算结果。
11.根据权利要求7所述的方法,其中所述N个横向局部存储器和N个纵向局部存储器被统一地连续编址。
12.一种计算机可读介质,存储计算机可读指令,其被处理器执行时执行权利要求7-11中任一所述的方法。
13.一种二维结构的局部存储器系统的计算系统,包括:
处理器;
存储器,存储计算机可读指令,其被处理器执行时执行权利要求7-11中任一所述的方法。
CN202011533378.XA 2020-12-23 2020-12-23 二维结构的局部存储器系统及其运算方法、介质、程序 Active CN112581987B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011533378.XA CN112581987B (zh) 2020-12-23 2020-12-23 二维结构的局部存储器系统及其运算方法、介质、程序

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011533378.XA CN112581987B (zh) 2020-12-23 2020-12-23 二维结构的局部存储器系统及其运算方法、介质、程序

Publications (2)

Publication Number Publication Date
CN112581987A CN112581987A (zh) 2021-03-30
CN112581987B true CN112581987B (zh) 2023-11-03

Family

ID=75138908

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011533378.XA Active CN112581987B (zh) 2020-12-23 2020-12-23 二维结构的局部存储器系统及其运算方法、介质、程序

Country Status (1)

Country Link
CN (1) CN112581987B (zh)

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06274524A (ja) * 1993-03-22 1994-09-30 Hitachi Ltd 直交変換回路および逆変換回路
CN1762027A (zh) * 2003-03-14 2006-04-19 皇家飞利浦电子股份有限公司 二维数据存储器
CN1801940A (zh) * 2005-12-15 2006-07-12 清华大学 整型变换电路和整型变换方法
CN201111042Y (zh) * 2007-12-07 2008-09-03 华中科技大学 一种二维小波变换集成电路结构
CN202076002U (zh) * 2011-03-29 2011-12-14 西安华芯半导体有限公司 储存器阵列结构及其局部字线驱动模块
CN109863477A (zh) * 2016-10-25 2019-06-07 威斯康星校友研究基金会 具有本地化存储器的矩阵处理器
CN111008040A (zh) * 2019-11-27 2020-04-14 厦门星宸科技有限公司 缓存装置及缓存方法、计算装置及计算方法

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06274524A (ja) * 1993-03-22 1994-09-30 Hitachi Ltd 直交変換回路および逆変換回路
CN1762027A (zh) * 2003-03-14 2006-04-19 皇家飞利浦电子股份有限公司 二维数据存储器
CN1801940A (zh) * 2005-12-15 2006-07-12 清华大学 整型变换电路和整型变换方法
CN201111042Y (zh) * 2007-12-07 2008-09-03 华中科技大学 一种二维小波变换集成电路结构
CN202076002U (zh) * 2011-03-29 2011-12-14 西安华芯半导体有限公司 储存器阵列结构及其局部字线驱动模块
CN109863477A (zh) * 2016-10-25 2019-06-07 威斯康星校友研究基金会 具有本地化存储器的矩阵处理器
CN111008040A (zh) * 2019-11-27 2020-04-14 厦门星宸科技有限公司 缓存装置及缓存方法、计算装置及计算方法

Also Published As

Publication number Publication date
CN112581987A (zh) 2021-03-30

Similar Documents

Publication Publication Date Title
US10514912B2 (en) Vector multiplication with accumulation in large register space
TWI276972B (en) Efficient multiplication of small matrices using SIMD registers
US8595280B2 (en) Apparatus and method for performing multiply-accumulate operations
US20180081689A1 (en) Apparatus and method of improved extract instructions
US9965276B2 (en) Vector operations with operand base system conversion and re-conversion
US10037210B2 (en) Apparatus and method for vector instructions for large integer arithmetic
JP4349265B2 (ja) プロセッサ
US20200134224A1 (en) Instruction execution that broadcasts and masks data values at different levels of granularity
JP2020508512A (ja) データ処理装置における乗累算
US10437562B2 (en) Apparatus and method for processing sparse data
TW201701151A (zh) 緊縮有限脈衝響應(fir)濾波器處理器,方法,系統及指令
CN112581987B (zh) 二维结构的局部存储器系统及其运算方法、介质、程序
TWI773783B (zh) 用於基於暫存器的複數處理的設備、方法、積體電路、電腦程式及電腦可讀取儲存媒體
CN111459546A (zh) 一种实现操作数位宽可变的装置及方法
CN100527109C (zh) 存储器访问装置
EP3655852A1 (en) Vector interleaving in a data processing apparatus
CN111368250A (zh) 基于傅里叶变换/逆变换的数据处理系统、方法及设备
KR102149576B1 (ko) 저전력 디바이스 환경상에서의 공개키 암호 고속화 연산 처리 방법
US7788471B2 (en) Data processor and methods thereof

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
TA01 Transfer of patent application right
TA01 Transfer of patent application right

Effective date of registration: 20230927

Address after: 610216 building 4, No. 171, hele'er street, Chengdu hi tech Zone, China (Sichuan) pilot Free Trade Zone, Chengdu, Sichuan

Applicant after: CHENGDU HAIGUANG MICROELECTRONICS TECHNOLOGY Co.,Ltd.

Address before: 300392 North 2-204 industrial incubation-3-8, 18 Haitai West Road, Huayuan Industrial Zone, Tianjin

Applicant before: Haiguang Information Technology Co.,Ltd.

GR01 Patent grant
GR01 Patent grant