CN108446252A - 矩阵向量处理器中的转置 - Google Patents

矩阵向量处理器中的转置 Download PDF

Info

Publication number
CN108446252A
CN108446252A CN201711183627.5A CN201711183627A CN108446252A CN 108446252 A CN108446252 A CN 108446252A CN 201711183627 A CN201711183627 A CN 201711183627A CN 108446252 A CN108446252 A CN 108446252A
Authority
CN
China
Prior art keywords
matrix
vector
circuit
transposition
rotation
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.)
Granted
Application number
CN201711183627.5A
Other languages
English (en)
Other versions
CN108446252B (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.)
Google LLC
Original Assignee
Google LLC
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 Google LLC filed Critical Google LLC
Priority to CN201911031656.9A priority Critical patent/CN110990773B/zh
Publication of CN108446252A publication Critical patent/CN108446252A/zh
Application granted granted Critical
Publication of CN108446252B publication Critical patent/CN108446252B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/76Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data
    • G06F7/78Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data for changing the order of data flow, e.g. matrix transposition or LIFO buffers; Overflow or underflow handling therefor
    • G06F7/785Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data for changing the order of data flow, e.g. matrix transposition or LIFO buffers; Overflow or underflow handling therefor having a sequence of storage locations each being individually accessible for both enqueue and dequeue operations, e.g. using a RAM
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/76Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data
    • G06F7/78Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data for changing the order of data flow, e.g. matrix transposition or LIFO buffers; Overflow or underflow handling therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/76Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data
    • G06F7/768Data position reversal, e.g. bit reversal, byte swapping
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C19/00Digital stores in which the information is moved stepwise, e.g. shift registers
    • G11C19/28Digital stores in which the information is moved stepwise, e.g. shift registers using semiconductor elements
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C7/00Arrangements for writing information into, or reading information out from, a digital store
    • G11C7/10Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers
    • G11C7/1006Data managing, e.g. manipulating data before writing or reading out, data bus switches or control circuits therefor
    • G11C7/1012Data reordering during input/output, e.g. crossbars, layers of multiplexers, shifting or rotating
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C8/00Arrangements for selecting an address in a digital store
    • G11C8/04Arrangements for selecting an address in a digital store using a sequential addressing device, e.g. shift register, counter
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • G06N3/084Backpropagation, e.g. using gradient descent

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Analysis (AREA)
  • Data Mining & Analysis (AREA)
  • Computational Mathematics (AREA)
  • Microelectronics & Electronic Packaging (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Software Systems (AREA)
  • Computing Systems (AREA)
  • Complex Calculations (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

本申请涉及矩阵向量处理器中的转置。一种用于转置矩阵的电路,所述矩阵包括:反转电路,其针对所述矩阵的一个或多个对角线中的每个对角线被配置成接收第一向量中的所述矩阵的元素并且生成第二向量,第二向量包括所述第一向量中的所述矩阵的所述元素的次序的相反的次序的所述矩阵的所述元素;以及轮换电路,其针对所述矩阵中的所述一个或多个对角线中的每个对角线被配置成确定轮换所述第二向量中的所述矩阵的所述元素的位置的数目,接收所述矩阵的元素的所述第二向量,并且生成第三向量,第三向量包括将所述第二向量中的所述矩阵的所述元素轮换所确定的位置的数目形成的次序中的所述第二向量中的所述矩阵的所述元素。

Description

矩阵向量处理器中的转置
技术领域
本申请涉及矩阵向量处理器中的转置。
相关申请的交叉引用
本申请要求于2017年2月16日提交的美国临时申请号62/459,943的权利,其内容通过引用并入本文。
背景技术
本说明书涉及硬件中的计算矩阵转置。
矩阵转置是矩阵通过其主对角线被反射的计算,其从左上(0,0)位置运行到右下(n,n)位置,其中,n是矩阵的维度中较小的。效果在于输入矩阵的行被输出为转置矩阵的列。即,对于输入矩阵A的第i行和第j列而言,[AT]ij=[A]ji
发明内容
一般而言,本说明书描述计算矩阵转置的专用硬件电路。
一般而言,本说明书中所描述的主题的一个创新方面能够被实现在用于转置矩阵的电路中,该电路包括反转电路,其被配置成针对矩阵中的一个或多个对角线中的每个对角线将该矩阵的该对角线的各元素接收在第一向量中,并且针对该矩阵的一个或多个对角线中的每个对角线生成第二向量,其包括与第一向量中的该矩阵的该对角线的各元素的次序为相反次序的该矩阵的该对角线的各元素。该电路包括轮换电路,其被配置成针对该矩阵中的一个或多个对角线中的每个对角线确定用来轮换第二向量中的该矩阵的该对角线的各元素的位置数目;针对矩阵的一个或多个对角线中的每个对角线接收该矩阵的该对角线的各元素的第二向量;并且针对该矩阵的一个或多个对角线中的每个对角线生成第三向量,其包括为将第二向量中的该矩阵的该对角线的各元素以所确定的位置数目来轮换而形成的次序的该矩阵的该对角线的各元素。
实施方式可以包括以下特征中的一个或多个。该电路包括计数电路,其被配置成向轮换电路并且针对该矩阵的一个或多个对角线中的每一个对角线输出用来轮换第二向量中的该矩阵的该对角线的各元素的位置数目;计数电路被配置成针对该矩阵的一个或多个对角线中的每个对角线输出一个值作为用来轮换第二向量中的矩阵的对角线的各元素的位置数目,其中,由计数电路所输出的初始值等于N-1,其中,N等于轮换电路的宽度;计数电路被配置成使针对该矩阵的一个或多个对角线中的每个对角线由计数电路所输出的值递减,并且在由计数电路所输出的值针对该矩阵的一个或多个对角线中的一个对角线是零之后,将该值重置到初始值。
实施方式可以各自可选地包括以下特征中的一个或多个。该矩阵是第二矩阵的子矩阵;该电路包括交错存储器读取电路,其被配置成针对该矩阵的一个或多个对角线中的每个对角线访问该矩阵的该对角线的各元素,并且向反转电路输出该矩阵的该对角线的各元素作为第一向量;交错存储器读取电路包括M个复用器,其中,M等于反转电路的宽度,并且其中,每个复用器被配置成输出该矩阵的列的多个元素中的一个元素;交错存储器读取电路被配置成接收控制信号,该控制信号针对该M个复用器中的每一个复用器指定用于提供为该复用器的输出的该复用器的输入;该M个复用器中的每个复用器是N对1复用器,其中,N是能够由轮换电路接收的元素的数目;交错存储器读取电路被配置成接收第一控制信号,该第一控制信号针对该M个复用器中的第一一个或多个复用器指定用于提供为该复用器的输出的该复用器的输入,并且接收第二控制信号,该第二控制信号针对该M个复用器中的第二一个或多个复用器指定用于提供为该复用器的输出的该复用器的输入。
实施方式可以各自可选地包括以下特征中的一个或多个。该电路包括交错存储器写入电路,其被配置成针对该矩阵的一个或多个对角线中的每个对角线将第三向量中的该矩阵的该对角线的各元素写入到存储器作为转置输出矩阵的对角线;该矩阵包括被作为单个矩阵存储在存储器中的两个或两个以上的矩阵;轮换电路被配置成执行以所确定的位置数目对第二向量中的该矩阵的该对角线的各元素的右轮换来生成第三向量;该矩阵被存储在电路可访问的静态随机存取存储器处;针对该矩阵的一个或多个对角线中的每个对角线,第三向量中的该矩阵的该对角线的各元素被存储在静态随机存取存储器中作为转置输出矩阵的对角线。
实施方式可以各自可选地包括以下特征中的一个或多个。该电路包括第二轮换电路,其被配置成针对第二矩阵的一个或多个对角线中的每个对角线确定用来轮换第二矩阵的该对角线的各元素的位置数目,针对第二矩阵的一个或多个对角线中的每个对角线接收第四向量,该第四向量包括第二矩阵的该对角线的各元素,并且针对第二矩阵的一个或多个对角线中的每个对角线生成第五向量,该第五向量包括为将第四向量中的第二矩阵的该对角线的各元素以所确定的位置数目来轮换而形成的次序的第四向量中的第二矩阵的该对角线的各元素;该电路包括第二计数电路,其被配置成向第二轮换电路并且针对第二矩阵的一个或多个对角线中的每个对角线输出用来轮换第四向量中的第二矩阵的该对角线的各元素的位置数目。
本说明书中所描述的主题的另一创新方面能够被实现在用于转置输入向量的电路中,该电路包括反转电路,其被配置成针对输入向量的一个或多个元素中的每个元素接收第一向量,该第一向量包括该输入向量的该元素,并且针对该输入向量的一个或多个元素中的每个元素,生成第二向量,该第二向量包括与第一向量中的各元素的次序为相反次序的第一向量的各元素。该电路包括轮换电路,其被配置成针对该输入向量的一个或多个元素中的每个元素确定用来轮换第二向量中的各元素的位置数目;针对该输入向量的一个或多个元素中的每个元素接收元素的第二向量,并且针对该输入向量的一个或多个元素中的每个元素生成第三向量,该第三向量包括为将第二向量中的各元素的次序以所确定的位置数目来轮换而形成的次序的第二向量的各元素。
在本申请中所描述的主题的特定实施例能够被实现以便实现以下优点中的一个或多个。对应于输入矩阵的转置的转置输出矩阵能够由专用硬件电路以硬件生成。通过使用专用硬件电路生成适当的输出,在不将数据传送回到主机计算机的情况下(即,在不执行芯片外或软件中的计算的至少一部分的情况下),能够执行矩阵转置计算。因此,避免处理由执行芯片外或软件中的转置计算而造成的延迟,其中,计算可以是要求大量的通用处理器(例如,GPU或CPU)周期来执行的昂贵的计算。
与在通用矩阵处理硬件电路(例如,还被配置成执行矩阵卷积或其他操作的一个)中执行矩阵转置计算的***相比,使用特别地被设计为执行矩阵转置计算的硬件电路还允许更高效的处理。在专用硬件电路上实现矩阵转置计算允许在不关注其它矩阵运算能力或效率的情况下高效地处理矩阵转置计算并且保留用于执行那些其它矩阵运算的其它矩阵处理硬件电路的设计,从而一般增加硬件中的矩阵计算的效率。
在附图和以下描述中阐述本说明书的主题的一个或多个实施例的细节。主题的其它特征、方面和优点将从描述、附图和权利要求变得显而易见。
附图说明
图1示出示例矩阵向量处理***。
图2示出包括转置单元的示例矩阵向量处理***。
图3示出矩阵向量处理***中的转置单元的示例架构。
图4示出矩阵向量处理***中的交错存储器写入单元的示例架构。
图5是使用矩阵向量处理***转置矩阵的示例方法的流程图。
图6A-6C示出在矩阵向量处理器中转置矩阵的示例。
各附图中的相同附图标记和名称指示相同元件。
具体实施方式
矩阵转置计算产生其中输入矩阵的行被重写为输出矩阵的列的输出矩阵,即,对于输入矩阵A的第i行和第j列元素而言,[AT]ij=[A]ji。因此,转置输入矩阵通过其主对角线有效地反射输入矩阵,其从矩阵的(0,0)位置运行到矩阵的(n-1,n-1)位置,其中,n是矩阵的维度中较小的。
用于这些和其它矩阵转置计算的实际应用是多种多样的。例如,当训练神经网络时,可以计算矩阵转置。在这样的应用中,为了当训练神经网络时反向传播梯度,可以计算在实现神经网络的层中使用的权重矩阵的转置。在其他实例中,可以对由神经网络计算的推断执行矩阵转置,或者可以对神经网络的特定层的矩阵或向量输出执行矩阵转置。
矩阵转置计算频繁地被使用在线性代数的应用中。例如,矩阵转置计算被用于计算两个输入矩阵A和B的点积,使得ATB=A·B。点积可以例如被用于计算矩阵的角度和大小,因为A·B=||A|| ||B||cosθ。点积还可以被使用在计算向量的线性函数中,其中,能够通过计算向量A与表示线性函数的向量的集合之间的点积来执行将向量A当作参量的线性函数。
还可以在图像处理应用中执行矩阵转置计算,诸如以执行图像翻转或轮换操作。被表示为矩阵的数字图像可以使用转置计算来操纵以生成数字图像的轮换或镜像图像。在信号处理和其他领域中,使用矩阵转置实现快速傅里叶变换(FFT)算法(例如,当执行多维度并行FFT算法时)。社交网络或其它网络分析还可以利用矩阵转置计算来确定网络中的节点之间的关系源,或者确定网络中的节点之间的关系模式。统计编程、地理信息***和其它应用也频繁地利用矩阵转置计算。
本说明书描述处理输入矩阵或向量来生成转置输出矩阵(即,输入矩阵或向量的转置)的专用硬件电路。
图1示出示例矩阵向量处理***100。矩阵向量处理***100是被实现为在其中能够实现下面所描述的***、部件和技术的一个或多个位置中的一个或多个计算机的***的示例。
矩阵向量处理***100是使用专用硬件电路110执行矩阵或向量计算的***。专用硬件电路110是用于执行矩阵或向量计算的集成电路,包括被配置成在硬件中计算矩阵转置的转置单元120。参考图2更详细地描述示例专用硬件电路110。
矩阵向量处理***100接收在专用硬件电路110上执行矩阵或向量计算的请求,控制专用硬件电路110以执行矩阵或向量计算,并且输出由专用硬件电路110所生成的矩阵或向量计算的结果。例如,矩阵向量处理***100可以接收计算输入矩阵的转置的请求,在专用硬件电路110上实现矩阵转置计算,并且响应于请求而输出生成的转置矩阵。除矩阵转置之外,专用硬件电路110可能能够执行附加计算。
为了在专用硬件电路110上执行矩阵或向量计算,矩阵向量处理***100包括矩阵向量处理引擎150。矩阵向量处理引擎150可以被实现为一个或多个物理位置中的一个或多个计算机上的一个或多个计算机程序。
矩阵向量处理引擎150能够生成指令、提供控制信号或引导数据以控制专用硬件电路110来响应于请求而执行矩阵或向量计算。例如,矩阵向量处理***100可以接收执行矩阵或向量函数的请求,并且矩阵处理引擎150能够确定用于计算函数的特定指令或控制信号,或者能够确定如何引导数据(例如,对应于输入矩阵或向量)用于计算。
一旦矩阵向量处理引擎150确定如何实现对应于矩阵或向量计算请求的计算,矩阵向量处理引擎150就控制专用硬件电路110以执行计算。例如,矩阵向量处理引擎150可以将用于执行矩阵或向量计算(诸如输入矩阵或向量)的数据引导到专用硬件电路110。矩阵向量处理引擎150还可以将指令或控制信号传送到专用硬件电路110以控制专用硬件电路110以对从矩阵向量处理引擎150由其接收到的数据执行适当的计算。
例如,矩阵向量处理***100能够接收计算矩阵或向量函数的请求。所请求的函数可以是相对简单的(例如,计算点积),或所请求的函数可以是更复杂的函数(例如,用于反向传播梯度以训练神经网络或用于执行涉及计算矩阵的转置的多维并行FFT的函数)。请求还可以标识或包括用于计算函数的一个或多个矩阵或向量(即,在其上应用函数的一个或多个参量)。矩阵向量处理引擎150能够接收请求并且能够生成用于计算输入矩阵或向量的函数的控制信号或指令。而且,矩阵向量处理引擎可以将输入矩阵或向量引导到专用硬件电路110。
例如,为了计算矩阵转置,矩阵向量处理引擎150可以向专用硬件电路110提供对其执行转置的输入矩阵或向量,或者被生成为先前计算的输出的矩阵或向量,使得输入矩阵或向量被提供到转置单元120。矩阵向量处理引擎150还可以向专用硬件电路110提供用于在转置单元120上发起转置计算的控制信号。转置单元120可以接收输入矩阵或向量和用于发起转置计算的控制信号。转置单元120可以响应于接收到控制信号而执行转置计算,并且能够输出作为接收到的矩阵或向量的转置的矩阵或向量。由转置单元120所输出的转置矩阵可以由专用硬件单元110用于其它计算中,以用于计算所请求的函数。专用硬件电路110可以提供矩阵向量处理***100能够响应于请求而返回的所请求的函数的输出。
图2示出用于计算矩阵转置的示例专用硬件电路200。在一些实施方式中,电路200可以包括用于执行其它矩阵或向量计算的附加部件(未示出)。用于执行其它矩阵或其它计算的附加部件还可以利用图2中所示的部件中的一个或多个。
电路200包括主机接口202。主机接口202能够接收用于转置计算的控制信号、指令或参量。参量能够包括例如对其执行转置计算的矩阵或向量。由主机接口202接收到的指令能够包括指示何处存储接收到的参量使得电路200可以计算矩阵转置的指令。由主机接口接收到的控制信号可以是用于发起转置计算的信号。
在一些实施方式中,主机接口202可以向定序器206提供指令,定序器206将指令转换为控制电路200以执行转置计算的低电平控制信号。例如,由定序器206所生成的控制信号可以调节电路200中的数据流(例如,其中,输入矩阵或向量应该被存储或该数据应该如何以其它方式被引导通过电路200)。定序器206可以接收在电路200上发起转置计算的指令,并且可以生成用于控制转置单元212以发起转置计算的控制信号。
定序器206可以将控制信号发送到存储器208和转置单元212。在一些实施方式中,顺序器206还向直接存储器存取引擎204发送控制信号。在一些实施方式中,顺序器206是生成控制信号的处理器。顺序器206能够使用控制信号的定时以在适当的时间将控制信号发送到电路200的合适部件。在一些实例中,定序器206可以从主机接口202接收控制信号,该控制信号是从电路200外部(例如,从图1的向量矩阵处理引擎150)传递的,使得不要求定序器206生成控制信号。在这样的实例中,定序器206可以在适当的时间将接收到的控制信号发送到电路200的部件。而且,在电路200被提供控制信号的情况下,定序器206可以是电路200的可选部件,即,使得电路200外部的部件(例如,矩阵向量处理引擎150)可以在适当的时间提供控制信号以控制电路200来执行矩阵转置操作。
主机接口202可以将参量(例如,输入矩阵或向量)发送到直接存储器存取引擎204。直接存储器存取引擎204可以将参量存储在存储器208处。
存储器208可以是存储器缓冲器(例如,统一缓冲器),或者可以是动态存储器(例如,静态随机存取存储器(SRAM))。存储器208可以位于电路200上或与电路200分离。其能够被用于存储输入到电路200的参量(诸如矩阵或向量)。存储器208还可以存储转置单元212的输出(即,转置输出矩阵或向量)。在一些实施方式中,直接存储器存取引擎204可以从存储器208读取。例如,直接存储器存取引擎204可以从存储器208读取以从电路200返回执行矩阵转置的结果。
存储器208可以将参量发送到转置单元212用于转置。例如,在直接存储器存取引擎204将输入矩阵或向量存储在存储器208中之后,可以提供输入矩阵或向量或使转置单元212可访问,使得转置单元212可以计算输入矩阵或向量的转置。
转置单元212是用于计算矩阵或向量转置的电路。在一些实施方式中,对转置单元212进行设计,使得转置单元可以被触发以基于接收到参量和用于发起转置计算的控制信号而计算矩阵转置。即,转置单元212可以被配置成仅要求单个控制信号以在参量上执行整个转置过程并且生成参量的转置(即,转置输出矩阵或向量)。
在这样的实施方式中,一旦转置计算被发起,转置单元212就可以以固定的方式执行整个转置计算,即,使得转置单元212将以相同的方式执行装置计算而不管被提供到转置单元212的参量如何。因此,转置单元212可以被配置成执行相同的计算而不管输入矩阵是否是64x64元素矩阵、128x128元素矩阵等。转置单元212将输出(即,转置输出矩阵或向量)存储在存储器208处。
一般地,为了计算矩阵或向量转置,转置单元212执行被存储在存储器208中的参量的交错存储器读取。当参量是矩阵时,交错存储器读取使得转置单元212能够针对矩阵的每个对角线获得对应于寄存器中的矩阵的对角线的元素的向量。转置单元212反转被存储在寄存器中的矩阵的对角线的元素的次序以生成矩阵的对角线的元素的第二向量并且将其存储在例如相同的寄存器中或者第二寄存器中。第二向量的元素被移位确定的数目的位置以获得包括矩阵的对角线的元素的第三向量,其然后被存储在例如相同的寄存器中或者第三寄存器中。交错存储器写入被执行以将元素放置在第三向量中(例如,在第三寄存器中、在适当的存储器位置中)。过程针对矩阵的每个对角线被重复以获得被存储在存储器中作为矩阵的转置的转置输出矩阵。
如上文所讨论的,当参量是向量时,执行这些相同的操作。因此,当参量是向量时,交错存储器读取使得转置单元212能够获得用于过程的每个迭代的寄存器中的向量的单个元素。用于每个迭代的寄存器中的元素根据以上过程***纵以获得向量的转置。在对向量执行转置计算的情况下,转置输出向量也将是向量,然而,输入列向量将被转换为行向量,并且行向量将被转换为列向量。
图3示出转置单元300的示例架构。在图示的示例中,交错存储器读取器310访问输入矩阵或向量,并且输出对应于输入矩阵的对角线的元素。交错存储器读取器能够处理从输入矩阵的(0,0)对角线开始的输入矩阵的每个对角线。输入矩阵的每个对角线是输入矩阵的从左下到右上延伸的元素的对角线(即,从输入矩阵的(n-1,0)元素到输入矩阵的(0,n-1)元素延伸的元素的对角线)。图4更详细地讨论了交错存储器读取器310的操作。
由交错存储器读取器310所输出的输入矩阵的对角线的元素由值加载器320接收,其中,每个值加载器320对应于不同的数据列(即,由交错存储器读取器310访问的输入矩阵)。在图3中所示的示例转置单元300中,转置单元架构300能够计算转置直到4x4,然而,相同技术可以被扩展用于任何大小的转置单元。因此,当转置4x4输入矩阵时,值加载器320中的每个对应于输入矩阵的列。如果使用4x4转置单元300转置小于4x4的矩阵,则能够丢弃或忽略提供给上部值加载器的值。例如,如果3x3输入矩阵由交错存储器读取器310读取,则能够忽略或丢弃输出到值加载器[3]的值,因为其不对应于输入矩阵的元素。
值加载器320将接收到的元素传送到输入寄存器330,其中,输入寄存器将元素存储为第一向量。对于示例转置单元300而言,输入寄存器可以是对应于转置单元300能够处理的最大大小的输入矩阵的维度(即,4x4)的元素的1x4寄存器。因此,由值加载器[0]接收到的元素可以被存储在输入寄存器330的(0,0)元素中,由值加载器[1]接收到的元素可以被存储在输入寄存器330的(0,1)中等等。在一些实施方式中,如果输入到输入寄存器300的矩阵小于转置单元300的最大输入矩阵大小,则值加载器320可以不将不对应于输入矩阵的元素的值发送到输入寄存器330。例如,如果3x3矩阵被输入到4x4转置单元300,则值加载器[3]可以不将值发送到输入寄存器330。
反向器340接收被存储在输入寄存器330中的元素并且反转元素的次序以生成元素的第二向量。在一些实施方式中,反向器340接收被存储在输入寄存器330处的元素的第一向量,并且反转第一向量的元素的次序以生成第二向量。例如,输入寄存器330的元素可以被发送到反向器340,并且反向器340可以以元素被存储在输入寄存器330中的相反次序将元素写入到另一寄存器。
对于所图示的转置单元300而言,反转元素的次序可以包括将输入寄存器330中的[0]位置中的元素存储在反向器340的寄存器的[3]位置中,将输入寄存器330的[1]位置中的元素存储在反向器340的寄存器的[2]位置中,将输入寄存器330的[2]位置中的元素存储在反向器340的寄存器的[1]位置中,并且将输入寄存器330的[3]位置中的元素存储在反向器340的寄存器的[0]位置中。在一些实施方式中,反向器340可以通过具有如上文所指定的将输入寄存器330的相应位置和反向器340的寄存器连接的写入来线反转元素的次序,使得输入寄存器330中的元素的次序将被写入到反向器340的寄存器的适当的位置。由于从输入寄存器330接收到的元素对应于输入矩阵的对角线,因而反转输入矩阵的对角线的元素的次序有效地导致跨越输入矩阵的主对角线的那些元素的反射。
轮换器350接收被存储在反向器340的寄存器中的元素并且轮换元素的次序以生成元素的第三向量。在一些实施方式中,轮换器350接收被存储在反向器340的寄存器处的元素的第二向量,并且向右轮换(即,右比特式移位)元素以生成元素的第三向量。例如,被存储在反向器340的寄存器处的元素可以被发送到轮换器350,并且轮换器350可以以反映元素的轮换的次序将元素写入到另一寄存器。为了完成轮换,轮换器350可以具有能够通过使用组合逻辑(即,在不使用顺序逻辑的情况下)使反向器340的寄存器中的元素比特式移位指定数目的比特的桶形移位电路。
由轮换器350接收到的元素被轮换的位置的数目基于与轮换器350通信的计数器315而确定。计数器315响应于发起信号305而设定。例如,发起信号305可以是单个控制信号,其发起转置单元300的操作,包括设置计数器315。在一些实施方式中,发起信号305是由图2的定序器206所提供的控制信号,其中,控制信号可能已被提供到定序器206(例如,通过矩阵向量处理引擎150)或者可能已基于由主机接口202接收到的指令由顺序器206生成。
在其中轮换器350执行右轮换的实施方式中,发起信号305使得计数器315被设定为N-1的值,其中,N等于轮换器350能够接收的元素的数目(即,等于轮换器350的宽度)。对于图3的示例架构300而言,响应于发起信号305,计数器将因此被设定为3(即,4-1)。计数器315被配置成每次轮换器350接收输入矩阵的元素的不同的向量而减量(即,针对由轮换器350处理的输入矩阵的元素的每个对角线减量)。计数器315还被配成在轮换器350已对一组元素执行0位置轮换之后重置为N-1。备选地,轮换器350可以被配置成确定何时计数器315指定一组元素的0位置轮换,并且作为响应可以在不执行轮换操作的情况下通过轮换器350传递值。
因此,对于图3的转置单元300而言,计数器315将使得轮换器350使输入矩阵的元素的第一对角线轮换3个位置,使输入矩阵的元素的第二对角线轮换2个位置,使输入矩阵的元素的第三对角线轮换1个位置,使输入矩阵的元素的第四对角线轮换0个位置,并且然后从使输入矩阵的元素的第五对角线轮换3个位置开始,针对输入矩阵的元素的后续对角线重复该过程,。实际上,该轮换使从反向器340接收到的第二向量中的元素的位置移位,其表示将跨越主对角线的输入矩阵的对角线的元素反射到适当的位置以允许元素被写入作为转置输出矩阵的元素。
虽然上文被描述为执行右轮换,但是在一些实施方式中轮换器350执行左轮换。在这样的实施方式中,计数器可以响应于发起信号305初始地被设定为1,针对由轮换器350处理的每组元素增量直到轮换器350使一组元素轮换N-1个位置,并且然后在已执行使元素轮换N-1个位置之后被重置为0。
被存储在轮换器350的寄存器处的元素可以由值输出360访问,其然后将元素提供到交错存储器写入器370用于写入到存储器中(例如,存储器208中)。例如,在将轮换的元素写入到轮换器350的寄存器中作为第三向量之后,值输出360中的每个可以访问轮换器350的寄存器的对应的元素。例如,值输出[0]360可以访问轮换器350的寄存器的[0]位置中的元素,值输出[1]360可以访问轮换器350的寄存器的[1]位置中的元素等等。
交错存储器写入器370从值输出360接收元素并且将元素适当地写入存储器中,使得存储器存储输出矩阵(即,输入矩阵的转置)。例如,使用与针对交错存储器读取器310后续描述的那些技术类似的技术,交错存储器写入器370能够将元素存储在存储器208中,使得转置输出矩阵被适当地格式化。被存储在存储器208中的转置输出矩阵能够被返回作为由包括转置单元的专用硬件电路200计算的函数的结果,或者能够在专用硬件电路200内进一步处理来生成响应于请求可以由矩阵向量处理***100返回的结果。
在一些实施方式中,能够由输入寄存器330、反向器340和轮换器350接收的元素的数目可以是相同的(即,输入寄存器330、反向器340和轮换器350可以全部具有相同宽度)。在其它实施方式中,输入寄存器330、反向器340或轮换器350中的一个或多个可能能够接收不同数目的元素并且将那些元素作为向量存储在例如寄存器中。在一些实施方式中,值加载器320或值输出360可以是转置单元架构300的可选部件,例如,其中,交错存储器读取器310能够将数据直接地写入到输入寄存器330,或者其中,轮换器350能够将数据直接地发送到交错存储器写入器370。
在一些实施方式中,转置单元300可以计算比转置单元300能够转置的最大维度矩阵更大的输入矩阵的转置。由于转置是递归计算,因而较大的矩阵的转置可以通过将矩阵分为一组较小的矩阵、单独地转置较小的矩阵并且平铺较小的转置矩阵以生成较大的矩阵的转置来获得。例如,4x4转置单元300可以通过将16x16矩阵分解为四个4x4矩阵、计算四个4x4矩阵中的每个的转置并且平铺四个4x4转置矩阵以获得16x16输入矩阵的转置来计算16x16输入矩阵的转置。
在一些实施方式中,计算比转置单元300能够转置的最大维度矩阵更大的输入矩阵的转置需要通过转置单元300外部的部件处理输入矩阵。例如,图1的矩阵向量处理引擎150可以确定输入矩阵具有超过转置单元300能够处理的那些维度的维度,并且因此可以标识或生成能够被提供到转置单元300并且单独地由转置单元300处理的输入矩阵的子矩阵。矩阵向量处理引擎150可以接收子矩阵的转置并且平铺子矩阵的转置以获得输入矩阵的转置。在一些实施方式中,专用硬件电路110的转置单元300或其它部件可能能够分解输入矩阵和/或平铺硬件中的子矩阵的转置来生成输入矩阵的转置。例如,由专用硬件电路接收到的控制信号可以指定特定存储器位置(例如,在分割阵列中)以存储子矩阵的转置。
图4示出交错存储器读取器400的示例架构。交错存储器读取器400访问输入矩阵的对角线的元素,并且将那些元素提供到转置单元的其它部件(例如,图3的转置单元300)以计算矩阵或向量转置。交错存储器读取器400能够访问其中输入矩阵或向量已被存储的存储器430(诸如存储器208)。例如,作为处理计算矩阵转置的请求或要求矩阵转置的函数的一部分,输入矩阵或向量可以被存储在存储器430处并且可以由交错存储器读取器400访问来计算输入矩阵的转置。
交错存储器读取器400包括复用器(Mux)430。在一些实施方式中,被包括在交错存储器读取器400中的复用器430的数目等于能够由图3的反向器340接收的元素的数目。在一些实施方式中,复用器的该数目还等于能够由轮换器350接收的元素的数目(即,当反向器340和轮换器350具有相同的宽度时)。在那些实例中,复用器的数目通常等于转置单元能够处理的最大维度矩阵。因此,图4中所示的示例交错存储器读取器400可以被用于能够转置矩阵直至4x4的大小的转置单元中。在其它示例中,交错存储器读取器400可以比反向器340或轮换器350具有更大数目的复用器430(即,具有更大的宽度)。
复用器430中的每个可以是N对1复用器,其中,N等于能够由图3的轮换器350接收的元素的数目。例如,复用器430是要被用于能够对直至大小4x4的矩阵执行转置的转置单元中使得转置单元的轮换器350也将具有4的宽度的如图4中所示的4对1复用器。在输入矩阵具有能够由转置单元处理的最大大小的情况下,复用器430的相应输入将各自对应于输入矩阵的行,即,每个复用器430的第0个输入对应于输入矩阵的第0行,每个复用器430的第1个输入对应于输入矩阵的第1行等。附加地,复用器430中的每个对应于输入矩阵的列,直到复用器430对应于转置单元能够处理的输入矩阵的最大维度。即,在输入矩阵具有能够由转置单元处理的最大大小的情况下,复用器[0]将对应于输入矩阵的第0行,复用器[1]将对应于输入矩阵的第1行等。
因此,复用器430启用对输入矩阵的每个元素的访问,直到能够由转置单元处理的最大维度矩阵。例如,复用器[2]的第0个输入提供对输入矩阵的(0,2)元素的访问,复用器[3]的第3个输入提供对输入矩阵的(3,3)元素的访问等。
为了使能交错存储器读取,交错存储器读取400包括增量器435,其将控制信号提供到复用器430中的每个。增量器435使以交错方式被传播到复用器430中的每个的控制信号增量。对于图4的示例架构400而言,增量器435初始地接收0的值并且提供控制信号作为复用器[0]的选择信号。在下一迭代中,0的值被增量到1,并且被提供为复用器[0]的选择信号。具有0的值的控制信号被传播到复用器[1]。控制信号继续以该方式传播,直到复用器[3]处的选择信号具有3的值(即,选择输入矩阵的(3,3)元素)。提供到每个复用器430的选择信号的模式因此有效地指定输入矩阵的对角线被读取用于由转置单元处理并且被给定在表450中的次序。
如在表450中所示,在周期0处,4x4输入矩阵的第一对角线(即,输入矩阵的(0,0)元素)由交错存储器读取器400读取并且被提供到值加载器420。在周期1处,对应于4x4输入矩阵的第二对角线的元素(1,0)和(0,1)被提供到值加载器420。在周期2处,输入矩阵的第三对角线的元素(2,0)、(1,1)和(0,2)被提供到值加载器420。该过程如根据表450所示继续直到4x4输入矩阵的全部元素已经以交错方式从存储器430读取并且被提供到值加载器420。值加载器420能够接收由复用器430输出的元素并且在每个周期处将那些元素提供到图3的输入寄存器330。如在表450中所示,对于许多周期而言,值加载器420中的一个或多个可以不接收对应于输入矩阵的元素的元素。对于这些未使用的值加载器420而言,可以忽略由它们从对应的复用器430接收或由它们输出到输入寄存器的数据。附加地或者备选地,值加载器420可以被配置成当其输入不对应于输入矩阵的元素时,放弃将数据输出到输入寄存器330。
在一些实施方式中,两个控制信号可以被用于使得转置单元能够同时计算多个转置。例如,如果第一控制信号被提供到复用器430中的第一两个(例如,复用器[0]和[1]),并且第二控制信号被提供到复用器430中的第二两个(例如,复用器[2]和[3]),则4x4转置单元可以同时地计算两个2x2、3x2或4x2转置。每个控制信号能够使用上文所讨论的相同传播方案来使得4x4转置单元能够使用与计算2x2、3x2或4x2矩阵转置中的单独一个将需要的相同数目的周期计算两个2x2、3x2或4x2转置的转置。
在一些实施方式中,交错存储器读取器400能够支持“气泡”(即,对应于输入矩阵的存储器或数据流中的错误间隙)。为了处理这些错误,复用器430中的每个可以包括负载启用输入。可以对复用器430进行配置,使得负载使能指示“气泡”是否已发生,使得如果“气泡”的确发生,则复用器430不读取存储器并且转置过程有效地停止直到错误通过。负载使能可以被配置成自动地对“气泡”作出反应,并且在“气泡”经过之后,自动地切换以恢复转置过程。负载使能信号可以被配置成允许交错存储器读取器400支持在每个通道中同时地(即,同时在复用器430中的每个处)发生的“气泡”,或者可以被配置成允许交错存储器读取器400支持在选择通道中发生的“气泡”,例如,每个复用器430可以由分离的负载使能信号或由复用器430的子集共享的负载使能信号控制。
在一些实施方式中,交错存储器写入器(诸如图3的交错存储器写入器370)根据类似原理操作。例如,交错存储器写入器可以包括N个复用器,其中,N是能够由轮换器350接收的元素的数目(即,值输出360的数目)。每个复用器可以是1对N并且可以在其输入处从值输出(例如,图3的值输出360)接收元素。与上文针对交错存储器读取器400讨论的控制信号类似的控制信号作为选择信号被提供到交错存储器写入器的每个复用器。用于控制交错存储器写入器的控制信号可以由与交错存储器读取器400的增量器435类似的增量器提供,并且被交错以与交错存储器读取器400类似地将选择信号提供到交错存储器写入器的复用器。复用器因此根据上文所讨论并且在表450处示出的相同模式以交错方式写入到存储器(例如,存储器208)。即,在周期0处,交错存储器写入器将元素存储在对应于转置输出矩阵的(0,0)位置的存储器中,在周期1处将元素存储在对应于转置输出矩阵的(1,0)和(0,1)位置的存储器中。
图5是执行矩阵转置计算的示例过程500的流程图。通常,过程500由包括专用硬件电路(例如,包括转置单元120的图1的专用硬件电路110)的一个或多个计算机的***执行。
***将矩阵的对角线的元素接收在第一向量中(502)。例如,转置单元的反转电路(例如,图3的反向器340)能够接收输入矩阵的对角线的元素。输入矩阵的对角线的元素能够由反转电路从例如如针对图3所讨论的输入寄存器330或值加载器320接收。对角线的元素可能已经由交错存储器读取器(例如,图4的交错存储器读取器400)从被存储在存储器(例如,静态随机存取存储器(SRAM))中的输入矩阵获得。反转电路能够将对角线的元素接收在反转电路的寄存器中。
***生成第二向量,其以第一向量中的矩阵的对角线的元素的次序的相反的次序包括矩阵的对角线的元素(504)。转置单元的反转电路能够以第一向量中的那些元素的次序的相反的次序将第一向量中的矩阵的对角线的元素存储在寄存器中。例如,图3的反向器340可以以那些元素被存储在输入寄存器330中的次序的相反的次序将从输入寄存器330或值加载器320接收到的输入矩阵的对角线的元素存储在反向器340的寄存器中。
***确定轮换第二向量中的矩阵的对角线的元素的位置的数目(506)。例如,转置单元的轮换电路(例如,图3的轮换器350)能够确定轮换第二向量中的矩阵的对角线的元素的位置的数目。在一些实施方式中,轮换电路可以基于控制轮换电路或者由其可访问的计数器(例如,图3的计数器315)确定轮换第二矩阵中的元素的位置的数目。
在一些实施方式中,计数器可以被初始化到N-1的值,其中,N等于轮换电路能够接收的元素的数目(即,轮换电路的寄存器的宽度)。计数器可以响应于发起信号(诸如触发专用硬件电路以执行计算转置的操作的控制信号)而初始化。计数器可以针对在其中轮换电路接收输入矩阵的对角线的元素的第二向量的每个周期减量。在轮换电路轮换元素的第二向量的位置的数目是零之后(即,在其中轮换电路不轮换第二向量的元素的周期之后),计数器可以被重置为初始化的值。以这种方式,轮换电路能够使用仅要求单个发起控制信号来输出针对执行完全转置计算所要求的周期中的每个轮换第二向量中的元素的位置的正确数目的计数器确定轮换第二向量中的元素的位置的数目。
***接收矩阵的对角线的元素的第二向量(508)。例如,***的轮换电路能够接收由反转电路所生成的元素的第二向量。在一些实施方式中,轮换电路(例如,图3的轮换器350)通过访问保持第二向量的元素的反转电路的寄存器并且通过将第二向量的元素存储在轮换电路的寄存器中来接收由反转电路(例如,图3的反向器340)所生成的元素的第二向量。在其它实施方式中,轮换电路可以访问被存储在反转电路的寄存器处的第二向量而不将矩阵的元素的第二向量存储在轮换电路的寄存器处。
***生成第三向量,其以所确定的位置的数目轮换第二向量中的矩阵的对角线的元素的次序包括第二向量中的矩阵的对角线的元素(510)。例如,专用硬件电路的轮换电路(例如,图3的轮换器350)可以以轮换的次序将接收到的第二向量的元素的次序存储在轮换电路的寄存器中,使得轮换电路的寄存器中的元素的次序反映轮换接收到的第二向量的元素的所确定的位置的数目。在一些实施方式中,轮换电路可以在生成第三向量时执行第二向量的元素的右轮换。例如,右轮换被执行以轮换第二向量的元素如参考步骤508上文所描述的所确定的位置的数目(即,基于由计数器所指定的位置的数目)。轮换电路能够将右轮换的元素存储在轮换电路的寄存器中。
在生成矩阵的对角线的元素的第三向量之后,第三向量的元素可以被存储在存储器(例如,存储器208)处。可以使用交错存储器写入器(例如,如在图3和图4处所讨论的)将第三向量的元素存储在存储器处以将被存储在轮换电路的寄存器处的第三向量的元素写入到存储器的适当的位置,这有效地存储输入矩阵的转置的对角线。
可以针对输入矩阵的对角线中的每个重复过程500。例如,对于维度m×n的矩阵而言,过程500的(m+n)-1次迭代将针对***被执行以输出输入矩阵的完全转置。
图6A-6C示出在矩阵向量处理器中转置矩阵的示例。在一些实施方式中,可以通过具有包括转置单元120的专用硬件电路110的图1的矩阵向量处理***100执行图6A-6C的示例。具体地,图6A-6C图示在其中矩阵向量处理***100能够顺序地计算多个矩阵转置使得第二矩阵转置可以当第一矩阵转置计算正在进行中时开始的示例。利用重叠执行顺序转置操作的能力增加在执行矩阵转置计算时矩阵向量处理***100的效率。
在图6A-6C处所示的示例的每个周期中,存储器610(例如,可以被用于实现存储器208的静态随机存取存储器(SRAM))可以由交错存储器读取电路(例如,图4的交错存储器读取器400)访问,并且来自存储器610的数据可以被放置在输入寄存器620(例如,与图3的输入寄存器330类似)中。反转电路(例如,图3的反向器340)可以反转输入寄存器620中的值并且将经反转的值放置在轮换电路630的寄存器(例如,图3的轮换器350的寄存器)中。轮换电路630轮换轮换电路630的寄存器中的值所确定的位置的数目(例如,通过从与图3的计数器315类似的计数器确定位置的数目)。执行轮换的结果被放置在交错存储器写入电路640的寄存器(例如,交错存储器写入器370的寄存器,或者可选地,图3的值输出360)中。交错存储器将值写入在交错存储器写入电路640的寄存器中被执行以将值存储在存储器650(例如,可以被用于实现存储器208的随机存取存储器(SRAM))的适当的位置中。
简单地,在图6A处所示的周期(a)处,对应于第一输入矩阵的第一对角线的第一值(0,0)根据所描述的方法(例如,图5的方法500)被接收并且被处理以将值存储在存储器650的第一位置中。在周期(b)处,第一输入矩阵的第二对角线的值被接收并且***纵以将值存储在存储器650的适当的位置中。类似过程针对周期(c)和(d)被重复以将第一输入矩阵的第三对角线和第四对角线的值存储在存储器650处,使得第一输入矩阵被适当地转置(即,跨越其主对角线被反射)。
在图6B处所示的周期(e)处,第一输入矩阵的第五对角线***纵并且被存储在存储器650中,并且周期还捕获对应于被存储在存储器650中的适当的位置处的第二输入矩阵的第一对角线的元素(0,4)。因此,在周期(e)处,第二矩阵转置计算在没有对于转置单元的附加计算能力的要求的情况下开始。周期(f)和(g)示出第一输入矩阵的转置的计算的完成,其在周期(g)处完全地被存储在存储器650中并且是第一输入矩阵的适当的转置。这些相同周期还完成第二输入矩阵的第二对角线和第三对角线的处理。
在图6B处所示的周期(h)和在图6C处所示的周期(i)、(j)和(k)处理第二输入矩阵的剩余的四个对角线,并且导致将第二输入矩阵的转置存储在存储器650中。因此,图6A-6C的示例示出多个输入矩阵能够由转置单元顺序地并且利用重叠处理以降低执行多个矩阵转置计算的计算成本。虽然在图6A-6C中被示出为在没有延迟的情况下顺序地被执行,但是在其它实施方式中两个输入矩阵之间的间隙可以是任意持续时间。在那些实例中,转置单元将仍然适当地计算输入矩阵的转置,以及在输入矩阵之间的间隙期间由转置单元所输出的数据是能够忽略或丢弃的数据。
如上文所描述的,一种用于转置矩阵的电路,所述电路包括:反转电路,其针对矩阵的一个或多个对角线中的每个被配置成接收第一向量中的矩阵的元素并且生成第二向量,第二向量包括第一向量中的矩阵的元素的次序的相反的次序的矩阵的元素;以及轮换电路,其针对矩阵中的一个或多个对角线中的每个被配置成确定轮换第二向量中的矩阵的元素的位置的数目,接收矩阵的元素的第二向量,并且生成第三向量,第三向量包括第二向量中的矩阵的元素轮换所确定的位置的数目形成的次序的第二向量中的矩阵的元素。
能够在数字电子电路中、在有形实现的计算机软件或固件中、在计算机硬件中实现本说明书中所描述的主题和功能操作的实施例,包括本说明书中所公开的结构和其结构等同物或者其中的一个或多个的组合。本说明书中所描述的主题的实施例能够被实现为一个或多个计算机程序(即,被编码在有形非暂态程序载体上用于由数据处理装置执行或者控制数据处理装置的操作的计算机程序指令的一个或多个模块)。备选地或者附加地,程序指令能够被编码在人工生成的传播信号上,例如,机器生成的电、光学或电磁信号,其被生成以编码用于传输到适合的接收器装置用于由数据处理装置执行的信息。计算机存储介质能够是机器可读存储设备、机器可读存储衬底、随机或串行存取存储器设备或它们中的一个或多个的组合。
术语“数据处理装置”涵盖用于处理数据的所有种类的装置、设备和机器,例如包括可编程处理器、计算机或多个处理器或计算机。装置能够包括专用逻辑电路(例如,FPGA(现场可编程门阵列)或ASIC(专用集成电路))。除硬件外,装置还可以包括创建用于讨论中的计算机程序的执行环境的代码,例如构成处理器固件、协议栈、数据库管理***、操作***或者其中的一个或多个的组合的代码。
计算机程序(其还可以被称为或被描述为程序、软件、软件应用、模块、软件模块、脚本或代码)能够以任何形式的编程语言编写,包括编译或者解译语言或者说明性或者程序性语言,并且其能够以任何形式部署,包括作为单独程序或者作为模块、组件、子例程或适于使用在计算环境中的其它单元。计算机程序可以但是不需要对应于文件***中的文件。程序可以被存储在保持其它程序或数据(例如,被存储在标记语言文档中的一个或多个脚本)的文件的一部分中、被存储在专用于讨论中的程序的单个文件中或被存储在多个协调文件中(例如,存储一个或多个模块、子程序或代码的部分的文件)。计算机程序可以被部署以在位于一个地点处的一个计算机上或跨多个地点分布并且由通信网络相互连接的多个计算机上被执行。
本说明书中所描述的过程和逻辑流可以通过一个或多个可编程处理器执行,可编程处理器通过对输入数据进行操作并且生成输出来执行一个或多个计算机程序以执行功能。过程和逻辑流还可以通过专用逻辑电路执行并且装置还可以实现为专用逻辑电路,例如FPGA(现场可编程门阵列)或者ASIC(专用集成电路)。
通过示例,适于计算机程序的执行的计算机包括可以基于通用微处理器或者专用微处理器或者二者,或者任何其它种类的中央处理单元。一般地,中央处理单元将从只读存储器或者随机存取存储器或者二者接收指令和数据。计算机的基本元件是用于执行或者运行指令的中央处理单元和用于存储指令和数据的一个或多个存储器设备。一般地,计算机还将包括用于存储数据的一个或多个大容量存储设备(例如,磁盘、磁光盘或光盘)或者操作性地耦合以从用于存储数据的一个或多个大容量存储设备接收数据或者向其传送数据或者二者。然而,计算机不需要具有这样的设备。而且,计算机能够被嵌入在另一设备中(例如,移动电话、个人数字助理(PDA)、移动音频或视频播放器、游戏控制台、全球定位***(GPS)接收器)或者便携式存储设备(例如,通用串行总线(USB)闪盘驱动器),等等。
适于存储计算机程序指令和数据的计算机可读介质包括所有形式的非易失性存储器、介质和存储器设备,例如包括半导体存储器设备,例如EPROM、EEPROM和闪速存储器设备;磁盘,例如内部硬盘或者可移动磁盘;磁光盘;和CD ROM和DVD-ROM磁盘。处理器和存储器可以通过专用逻辑电路补充或者合并在专用逻辑电路中。
为了发送与用户的交互,本说明书中所描述的主题的实施例能够被实现在计算机上,所述计算机具有用于将信息显示给用户的显示设备(例如,CRT(阴极射线管)或LCD(液晶显示器)监视器)和用户通过其能够向计算机发送输入的键盘和指示设备(例如,鼠标或轨迹球)。其它种类的设备也能够被用于发送与用户的交互;例如,提供给用户的反馈可以是任何形式的感觉反馈,例如视觉反馈、听觉反馈或者触觉反馈;并且来自用户的输入可以以任何形式接收,包括声音、语音或者触觉输入。另外,计算机可以通过将文档发送给由用户所使用的设备和从其接收文档来与用户交互;例如,通过响应于从web浏览器所接收的请求而将网页发送给用户的客户端设备上的web浏览器。
在本说明书中所描述的主题的实施例能够被实现在计算***中,该计算机***包括后端部件(例如,作为数据服务器),或者其包括中间件部件(例如,应用服务器),或者其包括前端部件(例如,具有用户通过其能够与本说明书中所描述的主题的实施方式交互的图形用户接口或web浏览器的客户端计算机),或者一个或多个这样的后端、中间件或前端部件的任何组合。***的部件能够以任何形式或数字数据通信的媒介例如通信网络相互连接。通信网络的示例包括局域网(“LAN”)和广域网(“WAN”)(例如,因特网)。
计算***可以包括客户端和服务器。客户端和服务器通常远离彼此并且典型地通过通信网络交互。客户端和服务器的关系借助于在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序实现。
虽然本说明书包含许多特定实施方式细节,但是这些不应该被解释为对任何发明或可以要求保护的范围的限制,而是可以特定于特定发明的特定实施例的特征的描述。不同的实施例的场境中的本说明书中所描述的某些特征还可以组合实现在单个实施例中。相反,单个实施例的场境中所描述的各种特征还可以分离地实现在多个实施例中或任何适合的子组合中。而且,尽管特征可以在上文中描述为在某些组合中作用并且甚至如此初始地要求保护,但是在一些情况下,可以从组合去除所要求保护的组合的一个或多个特征,并且所要求保护的组合可以涉及子组合或子组合的变型。
类似地,尽管以特定的次序在附图中描绘了操作,但是这不应当理解为要求这样的操作以所示的特定次序或者以顺序次序执行或者所有图示的操作被执行以实现期望的结果。在某些情况下,多任务和并行处理可以是有利的。而且,上文所描述的实施例中的各种***模块和组件的分离不应该被理解为要求所有实施例中的这样的分离,并且应该理解的是,所描述的程序组件和***一般地可以一起集成在单个软件产品或者封装到多个软件产品中。
已经描述了本主题的特定实施例。其他实施例在以下权利要求的范围内。例如,权利要求中所记载的动作可以以不同的次序执行并且仍然实现期望的结果。作为一个示例,附图中所描绘的处理不必要求所示的特定次序或顺序次序来实现期望的结果。在某些实施方式中,多任务和并行处理可以是有利的。

Claims (18)

1.一种用于转置矩阵的电路,所述电路包括:
反转电路,所述反转电路被配置成:
针对所述矩阵的一个或多个对角线中的每个对角线将所述对角线的各元素接收在第一向量中,以及
针对所述矩阵的所述一个或多个对角线中的每个对角线生成第二向量,所述第二向量包括与对应的第一向量中的所述对角线的各元素的次序为相反次序的所述对角线的各元素;以及
轮换电路,所述轮换电路被配置成:
针对所述矩阵的所述一个或多个对角线中的每个对角线确定用来轮换所述第二向量中的所述对角线的各元素的位置数目,
针对所述矩阵的所述一个或多个对角线中的每个对角线将所述对角线的各元素接收在所述第二向量中,以及
针对所述矩阵的所述一个或多个对角线中的每个对角线生成第三向量,所述第三向量包括为将所述第二向量中的所述对角线的各元素以所确定的位置数目来轮换而形成的次序的所述第二向量中的所述对角线的各元素。
2.根据权利要求1所述的电路,进一步包括:
计数电路,所述计数电路被配置成向所述轮换电路并且针对所述矩阵的所述一个或多个对角线中的每个对角线输出用来轮换所述第二向量中的所述对角线的各元素的位置数目。
3.根据权利要求2所述的电路,其中,所述计数电路进一步被配置成针对所述矩阵的所述一个或多个对角线中的每个对角线输出一个值作为所述位置数目,其中,由所述计数电路输出的初始值等于N-1,其中,N等于所述轮换电路的宽度。
4.根据权利要求3所述的电路,其中,所述计数电路进一步被配置成:
使针对所述矩阵的所述一个或多个对角线中的每个对角线由所述计数电路输出的值递减;以及
在由所述计数电路输出的值针对所述矩阵的所述一个或多个对角线中的一个对角线是零时,将该值重置为所述初始值。
5.根据权利要求1所述的电路,其中,所述矩阵是第二矩阵的子矩阵。
6.根据权利要求1所述的电路,进一步包括交错存储器读取电路,所述交错存储器读取电路被配置成,针对所述矩阵的所述一个或多个对角线中的每个对角线:
访问所述对角线的各元素;以及
向所述反转电路输出所述对角线的各元素作为所述第一向量。
7.根据权利要求6所述的电路,其中,所述交错存储器读取电路包括M个复用器,其中,M等于所述反转电路的宽度,并且其中,每个复用器被配置成输出矩阵的列的多个元素中的一个元素。
8.根据权利要求7所述的电路,其中,所述交错存储器读取电路进一步被配置成接收控制信号,所述控制信号针对所述M个复用器中的每个复用器指定用于提供为所述复用器的输出的所述复用器的输入。
9.根据权利要求7所述的电路,其中,所述M个复用器中的每个复用器是N对1复用器,其中,N是能够由所述轮换电路接收的元素的数目。
10.根据权利要求7所述的电路,其中,所述交错存储器读取电路进一步被配置成:
接收第一控制信号,所述第一控制信号针对所述M个复用器中的第一子集中的每个复用器指定用于提供为所述复用器的输出的所述复用器的输入;以及
接收第二控制信号,所述第二控制信号针对所述M个复用器中的第二子集中的每个复用器指定用于提供为所述复用器的输出的所述复用器的输入。
11.根据权利要求1所述的电路,进一步包括交错存储器写入电路,所述交错存储器写入电路被配置成针对所述矩阵的所述一个或多个对角线中的每个对角线将所述第三向量中的所述对角线的各元素写入到存储器作为转置输出矩阵的对角线。
12.根据权利要求1所述的电路,其中,所述矩阵包括被作为单个矩阵存储在存储器中的两个或两个以上矩阵。
13.根据权利要求1所述的电路,其中,所述轮换电路被配置成:通过以所确定的位置数目来执行对所述第二向量中的所述对角线的各元素的右轮换,来生成所述第三向量。
14.根据权利要求1所述的电路,其中,所述矩阵被存储在所述电路可访问的静态随机存取存储器处。
15.根据权利要求1所述的电路,其中,针对所述矩阵的所述一个或多个对角线中的每个对角线,所述第三向量中的所述对角线的各元素被存储在静态随机存取存储器中作为转置输出矩阵的对角线。
16.根据权利要求1所述的电路,进一步包括第二轮换电路,所述第二轮换电路被配置成:
针对第二矩阵的一个或多个对角线中的每个对角线确定用来轮换所述对角线的各元素的位置数目;
针对所述第二矩阵的所述一个或多个对角线中的每个对角线接收包括所述对角线的各元素的第四向量;以及
针对所述第二矩阵的所述一个或多个对角线中的每个对角线生成第五向量,所述第五向量包括为将所述第四向量中的所述对角线的各元素以所确定的位置数目来轮换而形成的次序的所述第四向量中的所述对角线的各元素。
17.根据权利要求16所述的电路,进一步包括:
第二计数电路,所述第二计数电路被配置成向所述第二轮换电路并且针对所述第二矩阵的所述一个或多个对角线中的每个对角线输出用来轮换所述第四向量中的所述对角线的各元素的位置数目。
18.一种用于转置输入向量的电路,所述电路包括:
反转电路,所述反转电路被配置成:
针对所述输入向量的一个或多个元素中的每个元素接收第一向量,所述第一向量包括所述元素,以及
针对所述输入向量的所述一个或多个元素中的每个元素生成第二向量,所述第二向量包括与所述第一向量中的各元素的次序为相反次序的所述第一向量的各元素;以及
轮换电路,所述轮换电路被配置成:
针对所述输入向量的所述一个或多个元素中的每个元素确定用来轮换所述第二向量中的各元素的位置数目,
针对所述输入向量的所述一个或多个元素中的每个元素接收所述第二向量的各元素,以及
针对所述输入向量的所述一个或多个元素中的每个元素生成第三向量,所述第三向量包括为将所述第二向量中的各元素的次序以所确定的位置数目来轮换而形成的次序的所述第二向量的各元素。
CN201711183627.5A 2017-02-16 2017-11-23 用于转置矩阵以及用于转置输入向量的电路 Active CN108446252B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911031656.9A CN110990773B (zh) 2017-02-16 2017-11-23 用于转置矩阵以及用于转置输入向量的电路

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201762459943P 2017-02-16 2017-02-16
US62/459,943 2017-02-16
US15/614,818 2017-06-06
US15/614,818 US9952831B1 (en) 2017-02-16 2017-06-06 Transposing in a matrix-vector processor

Related Child Applications (1)

Application Number Title Priority Date Filing Date
CN201911031656.9A Division CN110990773B (zh) 2017-02-16 2017-11-23 用于转置矩阵以及用于转置输入向量的电路

Publications (2)

Publication Number Publication Date
CN108446252A true CN108446252A (zh) 2018-08-24
CN108446252B CN108446252B (zh) 2019-11-22

Family

ID=60263070

Family Applications (2)

Application Number Title Priority Date Filing Date
CN201711183627.5A Active CN108446252B (zh) 2017-02-16 2017-11-23 用于转置矩阵以及用于转置输入向量的电路
CN201911031656.9A Active CN110990773B (zh) 2017-02-16 2017-11-23 用于转置矩阵以及用于转置输入向量的电路

Family Applications After (1)

Application Number Title Priority Date Filing Date
CN201911031656.9A Active CN110990773B (zh) 2017-02-16 2017-11-23 用于转置矩阵以及用于转置输入向量的电路

Country Status (10)

Country Link
US (4) US9952831B1 (zh)
EP (4) EP3364307B1 (zh)
CN (2) CN108446252B (zh)
DE (2) DE202017106475U1 (zh)
DK (3) DK3564830T3 (zh)
FI (1) FI4099190T3 (zh)
GB (1) GB2559832B (zh)
HK (1) HK1259156A1 (zh)
TW (4) TWI695279B (zh)
WO (1) WO2018151769A1 (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109408117A (zh) * 2018-10-08 2019-03-01 京东方科技集团股份有限公司 矩阵转置装置及方法、显示装置
CN113626769A (zh) * 2021-10-12 2021-11-09 中国人民解放军国防科技大学 面向向量处理器的低位宽数据矩阵向量化转置方法及***
CN116910437A (zh) * 2023-09-12 2023-10-20 腾讯科技(深圳)有限公司 矩阵转置装置、方法、ai处理器及计算机设备

Families Citing this family (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10942741B2 (en) * 2013-07-15 2021-03-09 Texas Instruments Incorporated Storage organization for transposing a matrix using a streaming engine
GB2552154B (en) * 2016-07-08 2019-03-06 Advanced Risc Mach Ltd Vector register access
GB2552153B (en) 2016-07-08 2019-07-24 Advanced Risc Mach Ltd An apparatus and method for performing a rearrangement operation
US9952831B1 (en) 2017-02-16 2018-04-24 Google Llc Transposing in a matrix-vector processor
KR102548718B1 (ko) * 2017-06-07 2023-06-28 삼성전자주식회사 전자 장치 및 그 제어 방법
US11068394B2 (en) * 2018-10-29 2021-07-20 Electronics And Telecommunications Research Institute Neural network system including data moving controller
JP7315317B2 (ja) 2018-11-09 2023-07-26 株式会社Preferred Networks プロセッサおよびプロセッサのデータ転送方法
US11188497B2 (en) 2018-11-21 2021-11-30 SambaNova Systems, Inc. Configuration unload of a reconfigurable data processor
US10831507B2 (en) 2018-11-21 2020-11-10 SambaNova Systems, Inc. Configuration load of a reconfigurable data processor
US10698853B1 (en) 2019-01-03 2020-06-30 SambaNova Systems, Inc. Virtualization of a reconfigurable data processor
US10768899B2 (en) * 2019-01-29 2020-09-08 SambaNova Systems, Inc. Matrix normal/transpose read and a reconfigurable data processor including same
US11386038B2 (en) 2019-05-09 2022-07-12 SambaNova Systems, Inc. Control flow barrier and reconfigurable data processor
CN112149049A (zh) 2019-06-26 2020-12-29 北京百度网讯科技有限公司 用于变换矩阵的装置和方法、数据处理***
US11055141B2 (en) 2019-07-08 2021-07-06 SambaNova Systems, Inc. Quiesce reconfigurable data processor
EP4000229A1 (en) * 2019-08-22 2022-05-25 Google LLC Initializing on-chip operations
US10872038B1 (en) * 2019-09-30 2020-12-22 Facebook, Inc. Memory organization for matrix processing
US11669464B1 (en) * 2020-04-24 2023-06-06 Xilinx, Inc. Multi-addressing mode for DMA and non-sequential read and write patterns
GB202008299D0 (en) * 2020-06-02 2020-07-15 Imagination Tech Ltd Manipulation of data in a memory
US11809908B2 (en) 2020-07-07 2023-11-07 SambaNova Systems, Inc. Runtime virtualization of reconfigurable data flow resources
US11782729B2 (en) 2020-08-18 2023-10-10 SambaNova Systems, Inc. Runtime patching of configuration files
US11327771B1 (en) 2021-07-16 2022-05-10 SambaNova Systems, Inc. Defect repair circuits for a reconfigurable data processor
US11409540B1 (en) 2021-07-16 2022-08-09 SambaNova Systems, Inc. Routing circuits for defect repair for a reconfigurable data processor
US11556494B1 (en) 2021-07-16 2023-01-17 SambaNova Systems, Inc. Defect repair for a reconfigurable data processor for homogeneous subarrays
US20240231682A9 (en) * 2022-10-20 2024-07-11 Microsoft Technology Licensing, Llc Transposing matrices based on a multi-level crossbar

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4769790A (en) * 1985-08-13 1988-09-06 Fuji Xerox Co., Ltd. Matrix data transposer
CN101427477A (zh) * 2006-03-21 2009-05-06 法国原子能委员会 用于双天线脉冲uwb通信***的空时编码/解码方法
US20110264723A1 (en) * 2010-04-21 2011-10-27 Samsung Electronics Co., Ltd. System and method for successive matrix transposes
CN103389967A (zh) * 2013-08-21 2013-11-13 中国人民解放军国防科学技术大学 一种基于sram的矩阵转置的装置及方法
CN104216866A (zh) * 2013-05-31 2014-12-17 深圳市海思半导体有限公司 一种数据处理装置

Family Cites Families (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5644517A (en) 1992-10-22 1997-07-01 International Business Machines Corporation Method for performing matrix transposition on a mesh multiprocessor architecture having multiple processor with concurrent execution of the multiple processors
KR0175733B1 (ko) 1995-11-01 1999-04-15 이준 비트-시리얼 메트릭스 전치를 위한 초대규모 집적회로
KR100239349B1 (ko) 1996-12-20 2000-01-15 구자홍 역이산 코사인 변환기의 데이타 포멧 변환 회로
JP3938238B2 (ja) * 1997-02-04 2007-06-27 沖電気工業株式会社 高速フーリエ変換処理装置
JP2001117909A (ja) 1999-10-21 2001-04-27 Oki Electric Ind Co Ltd マトリクス形式データの転置回路
US6816593B1 (en) 1999-12-23 2004-11-09 Ati International Srl Method and apparatus for transposing bits
US20030084081A1 (en) * 2001-10-27 2003-05-01 Bedros Hanounik Method and apparatus for transposing a two dimensional array
US20060190517A1 (en) 2005-02-02 2006-08-24 Guerrero Miguel A Techniques for transposition of a matrix arranged in a memory as multiple items per word
US7634622B1 (en) * 2005-06-14 2009-12-15 Consentry Networks, Inc. Packet processor that generates packet-start offsets to immediately store incoming streamed packets using parallel, staggered round-robin arbitration to interleaved banks of memory
US7742063B2 (en) 2005-07-07 2010-06-22 Lsi Corporation Efficient and high speed 2D data transpose engine for SOC application
EP2027539B1 (en) * 2006-05-16 2011-01-05 Nxp B.V. Memory architecture
US7669014B2 (en) 2007-07-23 2010-02-23 Nokia Corporation Transpose memory and method thereof
TW200939642A (en) * 2007-11-26 2009-09-16 Sony Corp Data processing device and data processing method
JP2009224820A (ja) * 2008-02-22 2009-10-01 Sony Corp 符号化装置、及び符号化方法
US8307021B1 (en) * 2008-02-25 2012-11-06 Altera Corporation Hardware architecture and scheduling for high performance solution to cholesky decomposition
GB2470780B (en) * 2009-06-05 2014-03-26 Advanced Risc Mach Ltd A data processing apparatus and method for performing a predetermined rearrangement operation
JP5601327B2 (ja) * 2009-09-24 2014-10-08 日本電気株式会社 データ並べ替え回路、可変遅延回路、高速フーリエ変換回路、およびデータ並べ替え方法
CN101706760B (zh) 2009-10-20 2013-07-31 龙芯中科技术有限公司 矩阵转置自动控制电路***及矩阵转置方法
CN107171582B (zh) * 2011-09-29 2019-03-29 株式会社大亨 信号处理装置、滤波器、控制电路、逆变器和转换器***
WO2013054468A1 (ja) 2011-10-14 2013-04-18 パナソニック株式会社 転置演算装置とその集積回路、および転置処理方法
CN103760525B (zh) * 2014-01-06 2017-01-11 合肥工业大学 一种补齐式原地矩阵转置方法
TWI570573B (zh) 2014-07-08 2017-02-11 財團法人工業技術研究院 矩陣轉置電路
CN104298649B (zh) * 2014-09-24 2017-05-17 江苏中兴微通信息科技有限公司 一种低复杂度的快速并行矩阵求逆方法
US10013253B2 (en) * 2014-12-23 2018-07-03 Intel Corporation Method and apparatus for performing a vector bit reversal
US10031846B1 (en) * 2016-08-17 2018-07-24 Altera Corporation Transposition of two-dimensional arrays using single-buffering
US9952831B1 (en) * 2017-02-16 2018-04-24 Google Llc Transposing in a matrix-vector processor

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4769790A (en) * 1985-08-13 1988-09-06 Fuji Xerox Co., Ltd. Matrix data transposer
CN101427477A (zh) * 2006-03-21 2009-05-06 法国原子能委员会 用于双天线脉冲uwb通信***的空时编码/解码方法
US20110264723A1 (en) * 2010-04-21 2011-10-27 Samsung Electronics Co., Ltd. System and method for successive matrix transposes
CN104216866A (zh) * 2013-05-31 2014-12-17 深圳市海思半导体有限公司 一种数据处理装置
CN103389967A (zh) * 2013-08-21 2013-11-13 中国人民解放军国防科学技术大学 一种基于sram的矩阵转置的装置及方法

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109408117A (zh) * 2018-10-08 2019-03-01 京东方科技集团股份有限公司 矩阵转置装置及方法、显示装置
CN109408117B (zh) * 2018-10-08 2021-01-26 京东方科技集团股份有限公司 矩阵转置装置及方法、显示装置
US11204741B2 (en) 2018-10-08 2021-12-21 Boe Technology Group Co., Ltd. Device and method for transposing matrix, and display device
CN113626769A (zh) * 2021-10-12 2021-11-09 中国人民解放军国防科技大学 面向向量处理器的低位宽数据矩阵向量化转置方法及***
CN113626769B (zh) * 2021-10-12 2022-01-21 中国人民解放军国防科技大学 面向向量处理器的低位宽数据矩阵向量化转置方法及***
CN116910437A (zh) * 2023-09-12 2023-10-20 腾讯科技(深圳)有限公司 矩阵转置装置、方法、ai处理器及计算机设备
CN116910437B (zh) * 2023-09-12 2023-12-12 腾讯科技(深圳)有限公司 矩阵转置装置、方法、ai处理器及计算机设备

Also Published As

Publication number Publication date
US9952831B1 (en) 2018-04-24
DK3916589T3 (da) 2022-10-31
EP3364307A1 (en) 2018-08-22
EP3564830B1 (en) 2022-01-19
TW201923616A (zh) 2019-06-16
DE202017106475U1 (de) 2018-02-05
US20200019380A1 (en) 2020-01-16
DK3564830T3 (da) 2022-04-19
WO2018151769A1 (en) 2018-08-23
US10430163B2 (en) 2019-10-01
TW201832101A (zh) 2018-09-01
TWI764708B (zh) 2022-05-11
TWI728797B (zh) 2021-05-21
CN110990773A (zh) 2020-04-10
TW202147148A (zh) 2021-12-16
FI4099190T3 (fi) 2023-12-13
HK1259156A1 (zh) 2019-11-29
EP3916589B1 (en) 2022-08-31
CN110990773B (zh) 2024-03-22
EP4099190A1 (en) 2022-12-07
GB2559832A (en) 2018-08-22
US10922057B2 (en) 2021-02-16
GB201717818D0 (en) 2017-12-13
EP3364307B1 (en) 2019-07-31
EP3916589A1 (en) 2021-12-01
DE102017125049A1 (de) 2018-08-16
TW202044069A (zh) 2020-12-01
TWI695279B (zh) 2020-06-01
EP3564830A1 (en) 2019-11-06
EP4099190B1 (en) 2023-09-20
GB2559832B (en) 2020-03-18
US20210165635A1 (en) 2021-06-03
TWI659316B (zh) 2019-05-11
CN108446252B (zh) 2019-11-22
US20180232209A1 (en) 2018-08-16
DK4099190T3 (da) 2023-12-11

Similar Documents

Publication Publication Date Title
CN108446252B (zh) 用于转置矩阵以及用于转置输入向量的电路
US10956537B2 (en) Permuting in a matrix-vector processor

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
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 1259156

Country of ref document: HK