CN112463218B - 指令发射控制方法及电路、数据处理方法及电路 - Google Patents

指令发射控制方法及电路、数据处理方法及电路 Download PDF

Info

Publication number
CN112463218B
CN112463218B CN202011360444.8A CN202011360444A CN112463218B CN 112463218 B CN112463218 B CN 112463218B CN 202011360444 A CN202011360444 A CN 202011360444A CN 112463218 B CN112463218 B CN 112463218B
Authority
CN
China
Prior art keywords
data
thread
bundles
instruction
control information
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
CN202011360444.8A
Other languages
English (en)
Other versions
CN112463218A (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 CN202011360444.8A priority Critical patent/CN112463218B/zh
Publication of CN112463218A publication Critical patent/CN112463218A/zh
Application granted granted Critical
Publication of CN112463218B publication Critical patent/CN112463218B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • 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
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30141Implementation provisions of register files, e.g. ports
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]

Abstract

一种指令发射控制方法、指令发射控制电路、数据处理方法和数据处理电路。指令发射控制方法,应用于矩阵乘法运算,且包括:接收第一指令信息,其中,第一指令信息对应于属于同一个工作组的多个线程束中的第i个线程束,i为正整数;在第一指令信息包括与第i个线程束对应的第一矩阵缓存指令的信息的情况下,确定多个线程束中需要同时发射指令的T个线程束,其中,T为正整数,T个线程束包括所述第i个线程束;获取与T个线程束一一对应的T个第一控制信息和与T个线程束一一对应的T个第一写基地址;将T个第一控制信息和T个第一写基地址同时发送至地址计算模块,以供地址计算模块进行地址计算操作。

Description

指令发射控制方法及电路、数据处理方法及电路
技术领域
本公开的实施例涉及矩阵运算领域,并且更具体地,涉及一种指令发射控制方法、指令发射控制电路、数据处理方法和数据处理电路。
背景技术
图形处理器(GPU,Graphics-Processor-Unit)包括多个计算单元(Compute-Unit),每个计算单元包括多个单指令多数据流(SIMD,Single-Instruction-Multiple-Data)结构和片上存储器。每个SIMD包括一组矢量通用寄存器片和算术逻辑单元(ALU,arithmetic and logic unit)。SIMD是GPU中执行并行计算的最小单元,可以通过执行一条指令同时控制多个线程执行相同的操作。因为SIMD具有高度的并行性,所以SIMD被广泛应用于矩阵运算。
发明内容
本公开至少一实施例提供一种指令发射控制方法,应用于矩阵乘法运算,包括:接收第一指令信息,其中,所述第一指令信息对应于属于同一个工作组的多个线程束中的第i个线程束,i为正整数;在所述第一指令信息包括与所述第i个线程束对应的第一矩阵缓存指令的信息的情况下,确定所述多个线程束中需要同时发射指令的T个线程束,其中,T为正整数,所述T个线程束包括所述第i个线程束;获取与所述T个线程束一一对应的T个第一控制信息和与所述T个线程束一一对应的T个第一写基地址;将所述T个第一控制信息和所述T个第一写基地址同时发送至地址计算模块,以供所述地址计算模块进行地址计算操作。
例如,在本公开一实施例提供的指令发射控制方法中,所述第一矩阵缓存指令用于实现对第一矩阵的数据进行读取,确定所述多个线程束中需要同时发射指令的T个线程束,包括:解析所述第一矩阵缓存指令,以确定所述第i个线程束所需的所述第一矩阵中的P个数据,其中,P为正整数;基于所述P个数据,确定所述多个线程束中的所述T个线程束,其中,所述T个线程束包括所述第i个线程束,所述T个线程束中的任意两个线程束共享所述P个数据的至少一部分,所述T个线程束中的任一线程束对应的第一写基地址表示所述任一线程束所需的所述P个数据中的部分数据在与所述任一线程束对应的单指令多数据流单元的多个矢量通用寄存器片上的基地址。
例如,在本公开一实施例提供的指令发射控制方法中,获取与所述T个线程束一一对应的T个第一控制信息和与所述T个线程束一一对应的T个第一写基地址包括:检测所述第i个线程束是否为所述T个线程束中的最后一个线程束;响应于所述第i个线程束是所述T个线程束中的最后一个线程束,获取所述T个第一控制信息和所述T个第一写基地址,并将所述T个第一控制信息和所述T个第一写基地址同时发送至所述地址计算模块。
例如,本公开一实施例提供的指令发射控制方法还包括:响应于所述第i个线程束不是所述T个线程束中的最后一个线程束,基于所述第一指令信息,获取并存储所述第i个线程束对应的第一控制信息和所述第i个线程束对应的第一写基地址。
例如,在本公开一实施例提供的指令发射控制方法中,响应于所述第i个线程束是所述T个线程束中的最后一个线程束,获取所述T个第一控制信息和所述T个第一写基地址,包括:读取与所述T个线程束中除了所述第i个线程束之外的(T-1)个线程束一一对应的(T-1)个第一写基地址和与所述(T-1)个线程束一一对应的(T-1)个第一控制信息;基于所述第一指令信息,获取所述第i个线程束对应的第一控制信息和所述第i个线程束对应的第一写基地址,其中,所述T个第一控制信息包括所述第i个线程束对应的第一控制信息和所述(T-1)个第一控制信息,所述T个第一写基地址包括所述第i个线程束对应的第一写基地址和所述(T-1)个第一写基地址。
例如,在本公开一实施例提供的指令发射控制方法中,获取与所述T个线程束一一对应的T个第一控制信息和与所述T个线程束一一对应的T个第一写基地址,包括:接收与所述第i个线程束对应的命令信息,其中,所述第i个线程束对应的命令信息由接口交互电路发送;基于所述第i个线程束对应的命令信息,获取与所述T个线程束一一对应的所述T个第一写基地址;基于所述第一指令信息,获取所述第i个线程束对应的第一控制信息作为与所述T个线程束一一对应的所述T个第一控制信息。
例如,本公开一实施例提供的指令发射控制方法还包括:接收与所述第i个线程束对应的第二指令信息;在所述第二指令信息包括与所述第i个线程束对应的第二矩阵缓存指令的信息的情况下,确定所述多个线程束中需要同时发射指令的R个线程束,其中,R为正整数,所述R个线程束包括所述第i个线程束;获取与所述R个线程束一一对应的R个第二控制信息和与所述R个线程束一一对应的R个第二写基地址;将所述R个第二控制信息和所述R个第二写基地址同时发送至所述地址计算模块,以供所述地址计算模块进行地址计算操作。
本公开至少一实施例还提供一种指令发射控制电路,应用于矩阵乘法运算,包括:接收子电路和同步子电路,其中,所述接收子电路被配置为:接收第一指令信息并将所述第一指令信息发送至所述同步子电路,其中,所述第一指令信息对应于属于同一个工作组的多个线程束中的第i个线程束,i为正整数;所述同步子电路被配置为:在所述第一指令信息包括与所述第i个线程束对应的第一矩阵缓存指令的信息的情况下,确定所述多个线程束中需要同时发射指令的T个线程束,其中,T为正整数,所述T个线程束包括所述第i个线程束;获取与所述T个线程束一一对应的T个第一控制信息和与所述T个线程束一一对应的T个第一写基地址;将所述T个第一控制信息和所述T个第一写基地址同时发送至地址计算模块,以供所述地址计算模块进行地址计算操作。
例如,在本公开一实施例提供的指令发射控制电路中,所述第一矩阵缓存指令用于实现对第一矩阵的数据进行读取,在执行确定所述多个线程束中需要同时发射指令的T个线程束的步骤时,所述同步子电路被配置为:解析所述第一矩阵缓存指令,以确定所述第i个线程束所需的所述第一矩阵中的P个数据,其中,P为正整数;基于所述P个数据,确定所述多个线程束中的所述T个线程束,其中,所述T个线程束中的任意两个线程束共享所述P个数据的至少一部分,所述T个线程束中的任一线程束对应的第一写基地址表示所述任一线程束所需的所述P个数据中的部分数据在与所述任一线程束对应的单指令多数据流单元的多个矢量通用寄存器片上的基地址。
例如,在本公开一实施例提供的指令发射控制电路中,在执行获取与所述T个线程束一一对应的T个第一控制信息和与所述T个线程束一一对应的T个第一写基地址的步骤时,所述同步子电路被配置为:检测所述第i个线程束是否为所述T个线程束中的最后一个线程束;响应于所述第i个线程束是所述T个线程束中的最后一个线程束,获取所述T个第一控制信息和所述T个第一写基地址,并将所述T个第一控制信息和所述T个第一写基地址同时发送至所述地址计算模块。
例如,本公开一实施例提供的指令发射控制电路还包括存储子电路,其中,所述同步子电路还被配置为:响应于所述第i个线程束不是所述T个线程束中的最后一个线程束,基于所述第一指令信息,获取并存储所述第i个线程束对应的第一控制信息和所述第i个线程束对应的第一写基地址至所述存储子电路。
例如,在本公开一实施例提供的指令发射控制电路中,在执行响应于所述第i个线程束是所述T个线程束中的最后一个线程束,获取所述T个第一控制信息和所述T个第一写基地址的步骤时,所述同步子电路被配置为:从所述存储子电路中读出存储的与所述T个线程束中除了所述第i个线程束之外的(T-1)个线程束一一对应的(T-1)个第一写基地址和与所述(T-1)个线程束一一对应的(T-1)个第一控制信息;基于所述第一指令信息,获取所述第i个线程束对应的第一控制信息和所述第i个线程束对应的第一写基地址,其中,所述T个第一控制信息包括所述第i个线程束对应的第一控制信息和所述(T-1)个第一控制信息,所述T个第一写基地址包括所述第i个线程束对应的第一写基地址和所述(T-1)个第一写基地址。
例如,在本公开一实施例提供的指令发射控制电路中,所述同步子电路包括计数模块、第一传输模块和第二传输模块,所述计数模块被配置为:在所述第一指令信息为与所述第i个线程束对应的第一矩阵缓存指令的信息的情况下,检测所述第i个线程束是否为所述T个线程束中的最后一个线程束;响应于所述第i个线程束不是所述T个线程束中的最后一个线程束,进行计数,并发送缓存信号至所述第一传输模块;响应于所述第i个线程束是所述T个线程束中的最后一个线程束,发送发射信号至所述第一传输模块和所述第二传输模块;所述第一传输模块被配置为:响应于接收到所述缓存信号,基于所述第一指令信息,获取所述第i个线程束对应的第一控制信息和所述第i个线程束对应的第一写基地址,并将所述第i个线程束对应的第一控制信息和所述第i个线程束对应的第一写基地址传输至所述存储子电路以进行存储,响应于接收到所述发射信号,基于所述第一指令信息,获取所述第i个线程束对应的第一控制信息和所述第i个线程束对应的第一写基地址,并将所述第i个线程束对应的第一控制信息和所述第i个线程束对应的第一写基地址传输至所述第二传输模块;所述第二传输模块被配置为:在接收到所述发射信号时,从所述存储子电路中读出存储的所述(T-1)个第一写基地址和所述(T-1)个第一控制信息,接收所述第i个线程束对应的第一控制信息和所述第i个线程束对应的第一写基地址,以得到所述T个第一写基地址和所述T个第一控制信息;将所述T个第一写基地址和所述T个第一控制信息同时发送至所述地址计算模块。
例如,在本公开一实施例提供的指令发射控制电路中,在执行获取与所述T个线程束一一对应的T个第一控制信息和与所述T个线程束一一对应的T个第一写基地址的步骤时,所述同步子电路被配置为:接收从接口交互电路发送的与所述第i个线程束对应的命令信息;基于所述第i个线程束对应的命令信息,获取与所述T个线程束一一对应的所述T个第一写基地址;基于所述第一指令信息,获取所述第i个线程束对应的第一控制信息作为与所述T个线程束一一对应的所述T个第一控制信息。
例如,在本公开一实施例提供的指令发射控制电路中,所述T个线程束中的任一线程束对应的第一控制信息包括封装在所述任一线程束对应的第一矩阵缓存指令中的指令操作码、工作组尺寸、地址步长和矩阵信息,所述矩阵乘法运算用于实现将第一运算矩阵和第二运算矩阵进行乘法计算,所述第一运算矩阵表示为M*K,所述第二运算矩阵表示为K*N,K、M、N均为正整数,所述矩阵信息用于指示所述第一矩阵为所述第一运算矩阵或所述第二运算矩阵以及所述第一矩阵是否被转置,在所述第一矩阵为所述第一运算矩阵的情况下,所述地址步长表示所述第一矩阵的相邻两列数据之间的步长,在所述第一矩阵为所述第二运算矩阵的情况下,所述地址步长表示所述第一矩阵的相邻两行数据之间的步长。
例如,在本公开一实施例提供的指令发射控制电路中,所述接收子电路还被配置为:接收与所述第i个线程束对应的第二指令信息并将所述第二指令信息发送至所述同步子电路;所述同步子电路被配置为:在所述第二指令信息包括与所述第i个线程束对应的第二矩阵缓存指令的信息的情况下,确定所述多个线程束中需要同时发射指令的R个线程束,其中,R为正整数,所述R个线程束包括所述第i个线程束;获取与所述R个线程束一一对应的R个第二控制信息和与所述R个线程束一一对应的R个第二写基地址;将所述R个第二控制信息和所述R个第二写基地址同时发送至所述地址计算模块,以供所述地址计算模块进行地址计算操作。
本公开至少一实施例还提供一种数据处理电路,包括:硬件调度电路和数据广播电路,其中,所述数据广播电路与所述硬件调度电路耦接,所述硬件调度电路包括上述任一实施例所述的指令发射控制电路,所述数据广播电路包括:广播子电路和计算与排序子电路,所述同步子电路还被配置为:解析所述第一矩阵缓存指令,以获得与所述第i个线程束所需的第一矩阵中的P个数据对应的第一读基地址,并将所述第一读基地址发送至所述数据广播电路,其中,P为正整数;所述计算与排序子电路被配置为:接收所述T个第一控制信息、所述T个第一写基地址和所述第一读基地址;基于所述T个第一控制信息和所述T个第一写基地址,计算与所述T个线程束一一对应的T个寄存器地址组,其中,所述T个线程束中的任一线程束对应的寄存器地址组包括在与所述任一线程束对应的单指令多数据流单元的矢量通用寄存器片上的由所述任一线程束对应的第一控制信息确定的多个寄存器地址;基于所述第一读基地址和所述第i个线程束对应的第一控制信息,从存储器上读取所述P个数据;基于所述T个第一控制信息,确定所述P个数据分别对应的使能信号;将所述T个寄存器地址组、所述P个数据和所述P个数据分别对应的使能信号发送至所述广播子电路;所述广播子电路被配置为:基于所述T个寄存器地址组、所述T个第一控制信息和所述P个数据分别对应的使能信号,按照执行所述矩阵乘法运算时所述P个数据对应的排序方式将所述P个数据写入所述T个寄存器地址组上。
例如,在本公开一实施例提供的数据处理电路中,所述计算与排序子电路包括所述地址计算模块、数据读取模块和数据排序模块,所述地址计算模块被配置为:接收所述T个第一控制信息、所述T个第一写基地址和所述第一读基地址;根据所述第一读基地址和所述第i个线程束对应的第一控制信息,计算得到与所述第一读基地址对应的多个存储器地址,其中,所述多个存储器地址表示所述P个数据在所述存储器上的地址;将所述T个第一控制信息和所述T个第一写基地址发送至所述数据排序模块;所述数据读取模块被配置为:基于所述多个存储器地址,从所述存储器上读取所述P个数据,其中,所述P个数据表示存储在所述存储器的所述多个存储器地址中的数据;所述数据排序模块被配置为:基于所述T个第一控制信息和所述T个第一写基地址,计算与所述T个线程束一一对应的所述T个寄存器地址组;获取所述P个数据;基于所述T个第一控制信息,确定所述P个数据分别对应的使能信号;将所述T个寄存器地址组、所述P个数据和所述P个数据分别对应的使能信号发送至所述广播子电路。
例如,在本公开一实施例提供的数据处理电路中,所述地址计算模块包括:多个地址计算逻辑,其中,所述多个地址计算逻辑分别与所述多个线程束一一对应;所述多个地址计算逻辑中的任一地址计算逻辑被配置为基于所述任一地址计算逻辑对应的线程束对应的第一写基地址计算该线程束对应的寄存器地址组。
例如,在本公开一实施例提供的数据处理电路中,所述数据排序模块包括判断逻辑和信号确定逻辑,所述判断逻辑被配置为:对于所述P个数据中的任一数据,基于所述T个第一控制信息,确定所述T个线程束中共享所述任一数据的Q个线程束,其中,Q为正整数且小于等于T,所述信号确定逻辑被配置为:获取与所述Q个线程束分别对应的单指令多数据流单元的使能信号作为所述任一数据对应的使能信号。
例如,在本公开一实施例提供的数据处理电路中,在执行基于所述T个寄存器地址组、所述T个第一控制信息和所述P个数据分别对应的使能信号,按照执行所述矩阵乘法运算时所述P个数据对应的排序方式将所述P个数据写入所述T个寄存器地址组上的步骤时,所述广播子电路被配置为:对于所述P个数据中的任一数据,基于所述T个第一控制信息和所述任一数据对应的使能信号,从所述T个寄存器地址组中获取与所述任一数据对应的至少一个寄存器地址,按照执行所述矩阵乘法运算时所述任一数据对应的排序方式将所述任一数据写入与所述至少一个寄存器地址上。
例如,本公开一实施例提供的数据处理电路还包括:接口交互电路,其中,所述接口交互电路与所述硬件调度电路耦接,所述接口交互电路被配置为:基于所述同一个工作组,按次序检查图形处理器中的所有计算单元,以确定与所述同一个工作组匹配的计算单元作为被选择计算单元,其中,所述被选择计算单元包括多个单指令多数据流单元,所述多个单指令多数据流单元分别与多条地址传输线一一对应,所述多个单指令多数据流单元与所述多个线程束一一对应;基于所述多个单指令多数据流单元与所述多个线程束之间的对应关系,获取与所述多个线程束一一对应的多个第一写基地址;通过所述多条地址传输线分别将所述多个第一写基地址传输至所述硬件调度电路。
本公开至少一实施例还提供一种基于上述任一实施例所述的数据处理电路的数据处理方法,包括:解析所述第一矩阵缓存指令,以获得与所述第i个线程束所需的所述第一矩阵中的P个数据对应的所述第一读基地址;接收所述T个第一控制信息、所述T个第一写基地址和所述第一读基地址;基于所述T个第一控制信息和所述T个第一写基地址,计算与所述T个线程束一一对应的所述T个寄存器地址组,其中,所述T个线程束中的任一线程束对应的寄存器地址组包括在与所述任一线程束对应的单指令多数据流单元的矢量通用寄存器片上的由所述任一线程束对应的第一控制信息确定的多个寄存器地址;基于所述第一读基地址和所述第i个线程束对应的第一控制信息,从存储器上读取所述P个数据;基于所述T个第一控制信息,确定所述P个数据分别对应的使能信号;基于所述T个第一控制信息、所述T个寄存器地址组和所述P个数据分别对应的使能信号,按照执行所述矩阵乘法运算时所述P个数据对应的排序方式将所述P个数据写入所述T个寄存器地址组中。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例的附图作简单地介绍,显而易见地,下面描述中的附图仅仅涉及本公开的一些实施例,而非对本公开的限制。
图1A为本公开一实施例提供的一种子矩阵块的数据和四个线程束之间的映射方式的示意图;
图1B为本公开一实施例提供的另一种子矩阵块的数据和四个线程束之间的映射方式的示意图;
图2为本公开一些实施例提供的一种指令发射控制方法的示意性流程图;
图3为本公开一些实施例提供的一种矩阵缓存指令的格式示意图;
图4为本公开一些实施例提供的一种指令发射控制电路的结构示意图;
图5为本公开提供的一种接口交互电路的示意图;
图6为本公开一些实施例提供的一种数据处理电路的示意性框图;
图7为本公开一些实施例提供的一种数据广播电路的结构示意图;
图8为本公开一些实施例提供的一种数据处理方法的流程图。
具体实施方式
为了使得本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例的附图,对本公开实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本公开的一部分实施例,而不是全部的实施例。基于所描述的本公开的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
除非另外定义,本公开使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
为了保持本公开实施例的以下说明清楚且简明,本公开省略了部分已知功能和已知部件的详细说明。
GPU在分配计算任务时,一个任务可以用一个线程网格(grid,Nvidia CUDA里定义的一次计算任务的大小)来代表,grid又可以被划分成多个工作组(workgroup,OpenCL(Open-Computing-Language)里定义的最小工作组),一个工作组只能分到一个硬件的计算单元上去计算。一个工作组可以被划分为多个线程束(wave,SIMD上执行的一个单位的并行计算的线程数量,一个线程束可以包括64个线程(Thread,Thread是GPU中执行的最小粒度)),一个线程束在一个SIMD上执行。
目前,在利用GPU进行矩阵运算(例如,矩阵乘法运算)时,为了利用GPU并行计算的特点,通常不同的GPU硬件架构可以采用不同的矩阵映射方式。例如,当采用一个包含四个线程束的工作组计算一个尺寸为32*32的矩阵时,矩阵乘法运算对应的映射方式可以有且不限于图1A和图1B所示的示例。图1A中四个线程束wave0~wave3分别对应矩阵的两个32*4的条状区域,图1B中四个线程束wave0~wave3分别对应矩阵的四个16*16的区域。四个线程束wave0~wave3分别在四个不同的SIMD上独立执行。
在利用硬件电路进行矩阵乘法运算之前,各个矩阵(例如,上述矩阵A和矩阵B)的数据需要从存储器(片外存储器,例如,DDR SDRAM(Double-Data-Rate Double DataRate))读到硬件电路的矢量通用寄存器中。通常,可以利用数据读取指令buffer_load_dowrd/dword*2/dowrd*4(dword这里表示32比特),根据已经算出来的矩阵中的各个数据在存储器上的地址,将矩阵的数据从存储器读取到矢量通用寄存器中。
例如,当GPU需要执行的矩阵乘法运算为:
C(128*128)=A(128*4)*B(4*128)。
假设对矩阵C进行分块的参数为:MacroTile:32*32;WorkGroup Shape:16*16;ThreadTile:2*2。MacroTile表示矩阵C经过分块以后每个工作组(workgroup)需要承担计算的子矩阵块的尺寸。WorkGroup Shape表示工作组(workgroup)根据C矩阵分块后的形状所对应的工作组的形状。ThreadTile表示工作组(workgroup)内每个线程(thread)对应的矩阵C的元素个数。一般而言,MacroTile=WorkGroup Shape*ThreadTile。
例如,在一些实施例中,矩阵C可以被划分为16个子矩阵块,每个子矩阵块的尺寸为32*32。矩阵C的每个子矩阵块所需的矩阵A的数据为对应列方向上的矩阵A的数据块,矩阵C的每个子矩阵块所需的矩阵B的数据为对应行方向上的矩阵B的数据块。例如,对于矩阵C中的一个子矩阵块C00,子矩阵块C00所需的矩阵A的数据块为矩阵A的一个尺寸为32*4的数据块,所需的矩阵B的数据块为矩阵B的一个尺寸为4*32的数据块。
例如,如图1A和图1B所示,四个线程束分别为线程束wave0、线程束wave1、线程束wave2和线程束wave3,子矩阵块C00对应矩阵A的数据块A0和数据块A1以及矩阵B的数据块B0和数据块B1。数据块A0的尺寸和数据块A1的尺寸均为16*4;数据块B0的尺寸和数据块B1的尺寸均为4*16。
例如,在图1A所示的映射方式中,wave0对应矩阵A的数据块A0和数据块A1的数据以及矩阵B的数据块B0的第1列至第4列的数据和数据块B1的第1列至第4列的数据,wave1对应矩阵A的数据块A0和数据块A1的数据以及矩阵B的数据块B0的第5列至第8列的数据和数据块B1的第5列至第8列的数据,wave2对应矩阵A的数据块A0和数据块A1的数据以及矩阵B的数据块B0的第9列至第12列的数据和数据块B1的第9列至第12列的数据,wave3对应矩阵A的数据块A0和数据块A1的数据以及矩阵B的数据块B0的第13列至第16列的数据和数据块B1的第13列至第16列的数据。
例如,在图1B所示的映射方式中,wave0对应矩阵A的数据块A0的数据以及矩阵B的数据块B0的数据,wave1对应矩阵A的数据块A0的数据以及矩阵B的数据块B1的数据,wave2对应矩阵A的数据块A1的数据以及矩阵B的数据块B0的数据,wave3对应矩阵A的数据块A1的数据以及矩阵B的数据块B1的数据。
如图1A和图1B所示,在进行矩阵乘法运算时,不同的映射方式中每个线程束对应到子矩阵块C00的内部区域是不同的,进而每个线程束对应矩阵A和矩阵B中的数据也是不同的。例如,在基于矩阵缓存(matrix buffer,MMBUF)指令对矩阵数据进行读取的技术方案中,如图1A所示,线程束wave0~wave3均需要读取数据块A0、数据块A1、数据块B0和数据块B1的数据,如图1B所示,线程束wave0需要读取数据块A0和数据块B0的数据,线程束wave1需要读取数据块A0和数据块B1的数据,线程束wave2需要读取数据块A1和数据块B0的数据,线程束wave3需要读取数据块A1和数据块B1的数据,由此可见,在不同的映射方式中,不同线程束会重复读取同一个数据块的数据。
在GPU中,虽然缓冲器(Cache)可以服务于重复数据的访问,然而,相对寄存器来说,第一,Cache距离SIMD较远,第二,通常一个Cache是多个SIMD所共有的,执行在不同SIMD上的不同线程束,即使互相之间需要的数据是重复的,在读取数据时,不同线程束也需要排队访问Cache,从而导致总的数据读取延迟变长,效率降低。
对于同一个工作组内的每个线程束,同一个内核(kernel)里同一条指令的操作数对应的寄存器索引地址可能对应的是不同的矢量通用寄存器片物理地址。若要在将读取的数据写入一个线程束对应的矢量通用寄存器片的同时也被写入其他wave对应的矢量通用寄存器片,则需要同时知道所有线程束对应同一条指令的矢量通用寄存器片物理地址。由于在硬件电路中不同线程束的执行顺序不一样,因此,需要在第一个线程束执行到读取数据的指令时进行等待,直到其他线程束也都执行到同一条数据读取指令时才发出读命令请求。
当前的GPU架构提供了一种内存屏障(barrier)指令,该barrier指令可以用于同步一个工作组内的所有线程束。当线程束执行到barrier指令时会执行等待,直到同一个工作组内的其他线程束都执行到barrier指令时,才开始执行barrier指令后面的指令。例如,在矩阵运算中,矩阵数据的读取通常是由工作组内所有线程束共同读取完成,然后每个线程束计算自己映射到的子矩阵块,通常,在数据读取指令后设置一个barrier指令,以在矩阵运算开始之前进行线程束的同步,保证所有线程束对应的数据都准备完毕。然而,barrier指令是等待前面的指令执行完后在barrier指令处执行等待,而无法实现在数据读取指令发射前进行等待。在数据读取指令发射前进行等待可以保证在将矩阵的数据写入矢量通用寄存器片时,获取所有数据对应的矢量通用寄存器片上的地址,然后进行广播。
本公开至少一实施例提供一种指令发射控制方法、指令发射控制电路、数据处理方法和数据处理电路。该指令发射控制方法应用于矩阵乘法运算,且包括:接收第一指令信息,其中,第一指令信息对应于属于同一个工作组的多个线程束中的第i个线程束,i为正整数;在第一指令信息包括与第i个线程束对应的第一矩阵缓存指令的信息的情况下,确定多个线程束中需要同时发射指令的T个线程束,其中,T为正整数,T个线程束包括第i个线程束;获取与T个线程束一一对应的T个第一控制信息和与T个线程束一一对应的T个第一写基地址;将T个第一控制信息和T个第一写基地址同时发送至地址计算模块,以供地址计算模块进行地址计算操作。
基于本公开的实施例提供的指令发射控制方法,在一个工作组内的当前线程束执行到MMBUF指令时,获取在该一个工作组内需要与当前线程束同时发射指令(例如,发射MMBUF指令,即读取数据的指令)的多个线程束分别对应的多个第一控制信息和多个第一写基地址,并同时发射多个第一控制信息和多个第一写基地址,从而使得该当前线程束读取的数据按照矩阵运算的方式排序之后,该排序后的数据可以被写入需要该排序后的数据的所有线程束(即多个线程束和当前线程束)对应的矢量通用寄存器片中,极大地节省读数据通路的带宽,缩短时间延迟,提升矩阵运算的整体运算性能和效率。
下面结合附图对本公开的实施例进行详细说明,但是本公开并不限于这些具体的实施例。
图2为本公开一些实施例提供的一种指令发射控制方法的示意性流程图。
例如,指令发射控制方法可以应用于矩阵运算,例如,矩阵乘法运算,例如,矩阵乘法运算用于实现将第一运算矩阵和第二运算矩阵进行乘法计算,第一运算矩阵可以为列主序类型的矩阵,即第一运算矩阵的数据在存储器中是按照列方向进行存储的,第一运算矩阵中同一列的数据在存储器中的地址是连续的,第二运算矩阵可以为行主序类型的矩阵,即第二运算矩阵的数据在存储器中是按照行方向进行存储的,第二运算矩阵中同一行的数据在存储器中的地址是连续的。例如,第一运算矩阵可以为图1A和图1B所示的矩阵A,第二运算矩阵可以为图1A和图1B所示的矩阵B。在下面的描述,以第一运算矩阵为列主序类型的矩阵A,第二运算矩阵为行主序类型的矩阵B为例进行说明。
例如,如图2所示,指令发射控制方法可以包括:
步骤S10:接收第一指令信息;
步骤S20:在第一指令信息包括与第i个线程束对应的第一矩阵缓存指令的信息的情况下,确定多个线程束中需要同时发射指令的T个线程束,其中,T为正整数,T个线程束包括第i个线程束;
步骤S30:获取与T个线程束一一对应的T个第一控制信息和与T个线程束一一对应的T个第一写基地址;
步骤S40:将T个第一控制信息和T个第一写基地址同时发送至地址计算模块,以供地址计算模块进行地址计算操作。
例如,在步骤S10中,第一指令信息对应于属于同一个工作组的多个线程束中的第i个线程束,i为正整数。第i个线程束为该工作组包括的多个线程束中的任意一个线程束。
例如,在步骤S20中,第一矩阵缓存指令用于实现对第一矩阵的数据进行读取,第一矩阵缓存指令可以为与第i个线程束对应的用于读取第一矩阵的数据的MMBUF指令。MMBUF指令的作用在于:在矩阵数据读写的同时也完成矩阵乘法运算时矩阵数据在矢量通用寄存器片中的排序。在执行每个wave对应的MMBUF指令时,读取的数据即为该wave进行矩阵乘法运算时所需的数据。例如,在图1A所示的映射方式中,在进行矩阵乘法运算时,wave0需要数据块A0、数据块A1、数据块B0的部分数据(例如,第一列至第四列)和数据块B1的部分数据(例如,第一列至第四列),那么在读取数据时,当执行wave0对应的第一MMBUF指令(该第一MMBUF指令用于实现对第一运算矩阵A的数据进行读取)时,读取的数据为数据块A0和数据块A1,当执行wave0对应的第二MMBUF指令(该第二MMBUF指令用于实现对第二运算矩阵B的数据进行读取)时,读取的数据为数据块B0和数据块B1,然后,在将读取的数据写入矢量通用寄存器片时,选择与wave0对应的数据,即数据块A0、数据块A1、数据块B0的部分数据(例如,第一列至第四列)和数据块B1的部分数据(例如,第一列至第四列),写入矢量通用寄存器片。同理,wave1、wave2和wave3与wave0的情况类似。
而在图1B所示的映射方式中,在进行矩阵乘法运算时,wave0需要数据块A0和数据块B0,wave1需要数据块A0和数据块B1,wave2需要数据块A1和数据块B0,wave3需要数据块A1和数据块B1,那么在读取数据时,当执行wave0对应的第一MMBUF指令时,读取的数据为数据块A0,当执行wave0对应的第二MMBUF指令时,读取的数据为数据块B0的数据;当执行wave1对应的第一MMBUF指令时,读取的数据为数据块A0的数据,当执行wave1对应的第二MMBUF指令时,读取的数据为数据块B1的数据;当执行wave2对应的第一MMBUF指令时,读取的数据为数据块A1的数据,当执行wave2对应的第二MMBUF指令时,读取的数据为数据块B0的数据;当执行wave3对应的第一MMBUF指令时,读取的数据为数据块A1的数据,当执行wave3对应的第二MMBUF指令时,读取的数据为数据块B1的数据。
图3示出了本公开提供的MMBUF指令的一种格式的示意图。下面介绍MMBUF指令。例如,如图3所示,该MMBUF指令中第一行的第25位至第31位存储的数据,即1110000,用于表示该指令为MMBUF指令。
该MMBUF指令中第一行的第18位至第24位存储OP7,即指令操作码(opcode),下面表1示出了一些指令操作码的示例。
表1
Figure GDA0003877518180000131
Figure GDA0003877518180000141
指令操作码中的m*n(例如,1*1、2*4等)代表ThreadTile的信息。
该MMBUF指令中第一行的第13位存储的信息AB表示该MMBUF指令对应第一运算矩阵A还是第二运算矩阵B,AB为0则表示该MMBUF指令对应的是第一运算矩阵A的数据,AB为1则表示该MMBUF指令对应的是第二运算矩阵B的数据。由此,当第一矩阵为第一运算矩阵A时,第一矩阵缓存指令封装的信息AB为0;当第一矩阵为第二运算矩阵B时,第一矩阵缓存指令封装的信息AB为1。
该MMBUF指令中第一行的第12位存储的信息T表示该MMBUF指令所对应的矩阵是否需要转置,T为0则表示矩阵不需要转置,T为1则表示矩阵需要转置,例如,若第一运算矩阵A是列主序类型的矩阵,那么第一运算矩阵A对应的MMBUF指令中的T为0,表示该第一运算矩阵A不需要转置;若第二运算矩阵B是行主序类型的矩阵,那么第二运算矩阵B对应的MMBUF指令中的T为1,表示该第二运算矩阵B需要转置。例如,若第一矩阵为列主序类型的矩阵,则第一矩阵缓存指令中的T为0;若第一矩阵为行主序类型的矩阵,则第一矩阵缓存指令中的T为1。
该MMBUF指令中第一行的第0位至第12位存储的信息OFFSET12表示基地址偏移量。
该MMBUF指令中第二行的第0位至第7位存储的信息STRIDE表示步长,例如,对于第一运算矩阵A是列主序类型的矩阵,第二运算矩阵B是行主序类型的矩阵的情况,那么,第一运算矩阵A对应的MMBUF指令中的STRIDE代表第一运算矩阵A的相邻两列数据之间的步长,第二运算矩阵B对应的MMBUF指令中的STRIDE代表第二运算矩阵B的相邻两行数据之间的步长。
该MMBUF指令中第二行的第8位至第15位存储的信息VDATA表示读回来的数据写入矢量通用寄存器片的第一个索引地址,即首地址。编译器在用MMBUF指令时寄存器地址的分配是连续的,这样除了第一个索引地址之外,第一运算矩阵A或者第二运算矩阵B中的所有数据的寄存器地址(即矢量通用寄存器片索引地址)均由硬件电路,例如,地址计算模块或数据排序模块,计算出来。
封装在MMBUF指令描述域(V#)中的信息包括:
BaseAddr:表示第一运算矩阵或第二运算矩阵在存储器中的基地址;
K[2:0]:表示矩阵乘法运算的K值,即运算参数,K可以为1、4、8、16、32、64、128,例如,对于矩阵乘法运算C(128*128)=A(128*4)*B(4*128),K为4;
WGSHAPE:表示工作组尺寸,即WorkGroup Shape,可以为2*8、2*16、2*32、4*4、4*8、4*16、4*64、8*8、8*16、8*32、16*16、16*32等。
若以图1B中的映射方式作为示例,MMBUF指令在汇编代码中的语义表现形式可如下所示。
每个wave读取第一运算矩阵A的一个尺寸为16*4的数据块对应的MMBUF指令表示为:
VDST SRC0 SRC1 SRC2 MODIFIERSmmbuf_load2*2_dword vdata,stride,srsrc,soffset,AB:0,T:0,WGSHAPE:16*16,k:4
每个wave读取第二运算矩阵的一个尺寸为4*16的数据块对应的MMBUF指令表示为:
VDST SRC0 SRC1 SRC2 MODIFIERSmmbuf_load2*2_dword vdata,stride,srsrc,soffset,AB:1,T:1,WGSHAPE:16*16,k:4
其中,srsrc表示MMBUF指令的V#在标量通用寄存器片上的地址,stride、srsrc和soffset的值均存储在标量通用寄存器片上。
例如,在步骤S20中,确定多个线程束中需要同时发射指令的T个线程束包括:解析第一矩阵缓存指令,以确定第i个线程束所需的第一矩阵中的P个数据;基于P个数据,确定多个线程束中的T个线程束。P为正整数。
例如,T个线程束包括第i个线程束,T个线程束中的任意两个线程束共享P个数据的至少一部分,T个线程束即为需要同时进行MMBUF指令发射的线程束。T个线程束中的任一线程束对应的第一写基地址表示任一线程束所需的P个数据中的部分数据在与任一线程束对应的单指令多数据流单元的多个矢量通用寄存器片上的基地址。
例如,T个线程束可以为一个工作组中的所有线程束或者部分线程束,在T个线程束为一个工作组中的所有线程束的情况下,基于本公开的指令发射控制方法,在同一个工作组内的当前线程束(即上述第i个线程束)执行到MMBUF指令时,该当前线程束等待在发射阶段,直到同一个工作组内除了当前线程束之外的其他线程束都执行到对应的MMBUF指令时,才将该MMBUF指令发射出去,从而使得该当前线程束读取的数据以矩阵乘法运算的方式排序之后,该排序后的数据可以被写入需要该排序后的数据的所有线程束对应的矢量通用寄存器片中,极大地节省读数据通路的带宽,缩短时间延迟,提升矩阵运算的整体运算性能和效率。
例如,在步骤S30中,T个线程束中的任一线程束对应的第一控制信息包括封装在任一线程束对应的第一矩阵缓存指令中的指令操作码、工作组尺寸、地址偏移量、地址步长、矩阵信息和运算参数等。
例如,若第一运算矩阵表示为M*K,第二运算矩阵表示为K*N,则第一控制信息包括的运算参数为K。K、M、N均为正整数。
例如,第一控制信息包括的地址步长即为第一矩阵缓存指令中的信息STRIDE。第一控制信息包括的工作组尺寸即为第一矩阵缓存指令中的信息WGSHAPE。
例如,矩阵信息用于指示第一矩阵为第一运算矩阵或第二运算矩阵以及第一矩阵是否被转置,即第一控制信息包括的矩阵信息包括第一矩阵缓存指令中的信息AB和T。
例如,在第一矩阵为第一运算矩阵A的情况下,第一控制信息包括的地址步长表示第一矩阵的相邻两列数据之间的步长,在第一矩阵为第二运算矩阵B的情况下,第一控制信息包括的地址步长表示第一矩阵的相邻两行数据之间的步长。
例如,对于列主序类型的第一运算矩阵A的数据块,由于不同数据块的同一列的数据在地址上是连续的,地址偏移量表示:在列方向上,当前数据块相对于前一个数据块的同一个位置的数据之间在地址上的偏移量;对于行主序类型的第二运算矩阵B的数据块,由于不同数据块的同一行的数据在地址上是连续的,地址偏移量表示:在行方向上,当前数据块相对于前一个数据块的同一个位置的数据之间在地址上的偏移量。
对于第一矩阵中的相邻的两个数据块,若第一矩阵为第一运算矩阵A,如图1B所示的数据块A0和数据块A1,地址偏移量表示数据块A0的第一行第一列的数据a0的地址和数据块A0的第一行第一列的数据a1的地址之间的偏移量。若第一矩阵为第二运算矩阵B,如图1B所示的数据块B0和数据块B1,地址偏移量表示数据块B0的第一行第一列的数据b0的地址和数据块B0的第一行第一列的数据b1的地址之间的偏移量。
例如,在一些实施例中,步骤S30包括:检测第i个线程束是否为T个线程束中的最后一个线程束;响应于第i个线程束是T个线程束中的最后一个线程束,获取T个第一控制信息和T个第一写基地址,并将T个第一控制信息和T个第一写基地址同时发送至地址计算模块。
例如,在步骤S30中,响应于第i个线程束是T个线程束中的最后一个线程束,获取T个第一控制信息和T个第一写基地址,包括:读取与T个线程束中除了第i个线程束之外的(T-1)个线程束一一对应的(T-1)个第一写基地址和与(T-1)个线程束一一对应的(T-1)个第一控制信息;基于第一指令信息,获取第i个线程束对应的第一控制信息和第i个线程束对应的第一写基地址。例如,T个第一控制信息包括第i个线程束对应的第一控制信息和(T-1)个第一控制信息,T个第一写基地址包括第i个线程束对应的第一写基地址和(T-1)个第一写基地址。
例如,指令发射控制方法还包括:响应于第i个线程束不是T个线程束中的最后一个线程束,基于第一指令信息,获取并存储第i个线程束对应的第一控制信息和第i个线程束对应的第一写基地址。
例如,在一些示例中,T为4,该T个线程束分别为图1A和图1B所示的四个线程束wave0~wave3,该四个线程束wave0~wave3属于同一个工作组,且被分配在不同的SIMD上独立执行,一般情况下,四个线程束wave0~wave3对应的指令流会轮流地依次进行发射,在某个时钟周期,当四个线程束wave0~wave3中的当前线程束(例如,第i个线程束)发射的指令是MMBUF指令时,可以检查该待发射的MMBUF指令所对应的当前线程束是否是该工作组中的最后一个线程束(第四个线程束),若当前线程束不是工作组中的最后一个线程束,则将当前线程束对应的第一写基地址和第一控制信息进行缓存;若当前线程束是工作组中的最后一个线程束,则获取该工作组中的四个线程束wave0~wave3分别对应的四个第一写基地址和四个第一控制信息。然后,该四个第一写基地址和四个第一控制信息同时被发送至地址计算模块,以供地址计算模块执行地址计算和数据读取操作。
例如,在另一些实施例中,步骤S30包括:接收与第i个线程束对应的命令信息,其中,第i个线程束对应的命令信息由接口交互电路发送;基于第i个线程束对应的命令信息,获取与T个线程束一一对应的T个第一写基地址;基于第一指令信息,获取第i个线程束对应的第一控制信息作为与T个线程束一一对应的T个第一控制信息。
例如,接口交互电路(SPI:Software-Program-Interface)用于软件向硬件发送命令,作为硬件和软件之间的接口模块,SPI可以将一些初始化的信息传给计算单元,还可以将准备好的命令以工作组(Workgroup)的方式发送给硬件调度电路(Sequencer:用于计算任务调度的硬件模块,可以实现取指、译码、内存读写、流控等功能)。
例如,在该实施例中,在进行工作组的寄存器分配时(即在GPU分配执行工作组的计算单元时)就将该工作组包括的多个线程束分别对应的多个第一写基地址传递出来,该多个第一写基地址可以封装在接口交互电路发送的工作组中的每个线程束对应的命令信息中,从而在接收到任一线程束(例如,第i个线程束)对应的命令信息时,即可获取工作组中的所有线程束对应的多个第一写基地址,因此,在本实施例中,在接收任一线程束对应的第一指令信息时,可以同时接收多个第一写基地址,从而即可进行指令发射,而无需等到接收到T个线程束中的最后一个线程束对应的第一指令信息才进行指令发射,从而有效避免由于T个线程束中的第一个线程束和最后一个线程束在发射指令之间的时间间隔较长而导致的整个工作组的数据请求时间延长的问题,进一步缩短数据读取时间延迟,提升矩阵运算的整体运算性能和效率。需要说明的是,关于工作组的寄存器分配机制将在后续描述。
例如,在一些实施例中,指令发射控制方法还包括:接收与第i个线程束对应的第二指令信息;在第二指令信息包括与第i个线程束对应的第二矩阵缓存指令的信息的情况下,确定多个线程束中需要同时发射指令的R个线程束,其中,R为正整数,R个线程束包括第i个线程束;获取与R个线程束一一对应的R个第二控制信息和与R个线程束一一对应的R个第二写基地址;将R个第二控制信息和R个第二写基地址同时发送至地址计算模块,以供地址计算模块进行地址计算操作。
例如,第二矩阵缓存指令用于实现对第二矩阵的数据进行读取。若第一矩阵为第一运算矩阵A,则第二矩阵为第二运算矩阵B;若第一矩阵为第二运算矩阵B,则第二矩阵为第一运算矩阵A。
例如,R个线程束可以为一个工作组中的所有线程束或者部分线程束。R个线程束和T个线程束可以相同,也可以不相同,也就是说,与第i个线程束共享第一矩阵中的数据的线程束和与第i个线程束共享第二矩阵中的数据的线程束可以相同,也可以不相同。如图1B所示,若第i个线程束为线程束wave0时,在读取第一运算矩阵A的数据时,第i个线程束所需的第一运算矩阵A的数据为数据块A0的数据,由于线程束wave1所需的第一运算矩阵A的数据也为数据块A0的数据,因此,T个线程束为线程束wave0和线程束wave1;而在读取第二运算矩阵B的数据时,第i个线程束所需的第二运算矩阵B的数据为数据块B0的数据,由于线程束wave2所需的第二运算矩阵B的数据也为数据块B0的数据,因此,R个线程束为线程束wave0和线程束wave2。
例如,通过第一矩阵缓存指令实现对第一矩阵的数据进行读取,通过第二矩阵缓存指令实现对第二矩阵的数据进行读取,然后,基于读取的第一矩阵的数据和第二矩阵的数据,该当前线程束即可进行矩阵乘法运算。
对第一矩阵的数据进行读取的过程和对第二矩阵的数据进行读取的过程类似,上述关于第一矩阵缓存指令的描述,在不矛盾的情况同样适用第二矩阵缓存指令,重复之处不再赘述。
本公开的一些实施例还提供一种指令发射控制电路。图4为本公开一些实施例提供的一种指令发射控制电路的结构示意图。
例如,指令发射控制电路可以应用于矩阵运算,例如矩阵乘法运算,该指令发射控制电路可以用于实现上述任一实施例所述的指令发射控制方法。
例如,如图4所示,指令发射控制电路400可以包括:接收子电路410和同步子电路420。接收子电路410和同步子电路420耦接,接收子电路410和同步子电路420之间可以实现数据传输。
例如,接收子电路410被配置为:接收第一指令信息并将第一指令信息发送至同步子电路420。例如,第一指令信息对应于属于同一个工作组的多个线程束中的第i个线程束,i为正整数,也就是说,接收子电路410可以实现图2所示的步骤S10。
例如,第一指令信息可以由接口交互电路发送至接收子电路410。
例如,如图4所示,接收子电路410可以包括数据选择器,例如4选1选择器。4选1选择器可以分时接收不同线程束对应的指令信息,并将该指令信息传输至同步子电路420。
例如,同步子电路420被配置为:在第一指令信息包括与第i个线程束对应的第一矩阵缓存指令的信息的情况下,确定多个线程束中需要同时发射指令的T个线程束,其中,T为正整数,T个线程束包括第i个线程束;获取与T个线程束一一对应的T个第一控制信息和与T个线程束一一对应的T个第一写基地址;将T个第一控制信息和T个第一写基地址同时发送至地址计算模块,以供地址计算模块进行地址计算操作。也就是说,同步子电路420可以实现图2所示的步骤S20~S40。
该指令发射控制电路400设置在硬件调度电路中,用于控制线程束的指令流中的MMBUF指令的同步发射。多个线程束可以包括图1A和图1B所示的线程束wave0~wave3,如图4所示,线程束wave0对应有多个指令形成的指令流,线程束wave1对应有多个指令形成的指令流,线程束wave2对应有多个指令形成的指令流,线程束wave3对应有多个指令形成的指令流。线程束wave0对应的指令流中包括wave0对应的MMBUF指令(包括与wave0对应的第一矩阵缓存指令和第二矩阵缓存指令),线程束wave1对应的指令流中包括wave1对应的MMBUF指令(包括与wave1对应的第一矩阵缓存指令和第二矩阵缓存指令),线程束wave2对应的指令流中包括wave2对应的MMBUF指令(包括与wave2对应的第一矩阵缓存指令和第二矩阵缓存指令),线程束wave3对应的指令流中包括wave3对应的MMBUF指令(包括与wave3对应的第一矩阵缓存指令和第二矩阵缓存指令)。
例如,多个线程束对应的指令流会轮流地依次进行发射。
例如,第一矩阵缓存指令用于实现对第一矩阵的数据进行读取。
例如,在执行确定多个线程束中需要同时发射指令的T个线程束的步骤时,同步子电路420被配置为:解析第一矩阵缓存指令,以确定第i个线程束所需的第一矩阵中的P个数据;基于P个数据,确定多个线程束中的T个线程束。
例如,T个线程束中的任意两个线程束共享P个数据的至少一部分,T个线程束中的每个线程束对应的第一写基地址表示每个线程束所需的P个数据中的部分数据在与第i个线程束对应的单指令多数据流单元的多个矢量通用寄存器片上的基地址。
例如,在一些实施例中,在执行获取与T个线程束一一对应的T个第一控制信息和与T个线程束一一对应的T个第一写基地址的步骤时,同步子电路420被配置为:检测第i个线程束是否为T个线程束中的最后一个线程束;响应于第i个线程束是T个线程束中的最后一个线程束,获取T个第一控制信息和T个第一写基地址,并将T个第一控制信息和T个第一写基地址同时发送至地址计算模块。
例如,如图4所示,指令发射控制电路400还包括存储子电路430。例如,同步子电路420还被配置为:响应于第i个线程束不是T个线程束中的最后一个线程束,基于第一指令信息,获取并存储第i个线程束对应的第一控制信息和第i个线程束对应的第一写基地址至存储子电路430。
例如,在该实施例中,基于该指令发射控制电路400,在同一个工作组内的当前线程束(即上述第i个线程束)执行到MMBUF指令时,该当前线程束等待在发射阶段,直到同一个工作组内除了当前线程束之外的其他线程束都执行到对应的MMBUF指令时,才将该MMBUF指令发射出去,从而使得该当前线程束读取的数据以矩阵乘法运算的方式排序之后,该排序后的数据可以被写入所有需要该排序后的数据的线程束所对应的矢量通用寄存器片中,极大地节省读数据通路的带宽,缩短时间延迟,提升矩阵运算的整体运算性能和效率。
例如,在执行响应于第i个线程束是T个线程束中的最后一个线程束,获取T个第一控制信息和T个第一写基地址的步骤时,同步子电路420被配置为:从存储子电路中读出存储的与T个线程束中除了第i个线程束之外的(T-1)个线程束一一对应的(T-1)个第一写基地址和与(T-1)个线程束一一对应的(T-1)个第一控制信息;基于第一指令信息,获取第i个线程束对应的第一控制信息和第i个线程束对应的第一写基地址。例如,T个第一控制信息包括第i个线程束对应的第一控制信息和(T-1)个第一控制信息,T个第一写基地址包括第i个线程束对应的第一写基地址和(T-1)个第一写基地址。
例如,在一些实施例中,T为4,即T个线程束为线程束wave0~wave3,该四个线程束wave0~wave3属于同一个工作组。在某个时钟周期,当第i个线程束发射的指令是MMBUF指令时,指令发射控制电路400会检查MMBUF指令所对应的该第i个线程束是否是该T个线程束中的最后一个线程束(第四个线程束),若第i个线程束不是该T个线程束中的最后一个线程束,则将第i个线程束对应的第一写基地址和第一控制信息保存到存储子电路430中;若第i个线程束是T个线程束中的最后一个线程束,则从存储子电路430中读取存储的各个线程束(T个线程束除了第i个线程束之外的其余线程束)分别对应的第一写基地址和第一控制信息,并基于第i个线程束对应的第一指令信息,获取第i个线程束对应的第一控制信息和第一写基地址。然后,该T个线程束分别对应的第一写基地址和第一控制信息同时被发送至地址计算模块,以供地址计算模块执行地址计算和数据读取操作。
例如,如图4所示,同步子电路420可以包括计数模块4201、第一传输模块4202和第二传输模块4203。
例如,计数模块4201被配置为:在第一指令信息为与第i个线程束对应的第一矩阵缓存指令的信息的情况下,检测第i个线程束是否为T个线程束中的最后一个线程束;响应于第i个线程束不是T个线程束中的最后一个线程束,进行计数,并发送缓存信号BS至第一传输模块4202;响应于第i个线程束是T个线程束中的最后一个线程束,发送发射信号ES至第一传输模块4202和第二传输模块4203。
例如,计数模块4201作用包括:第一、在计数到T个线程束中的最后一个线程束时控制第二传输模块4203将存储子电路430里存储的信息(第一写基地址和第一控制信息)读出来;第二、在T个线程束中的最后一个线程束没有到达前控制第二传输模块4203只能选择存储器的其他访问指令(非MMBUF指令)传输至地址计算模块。例如,存储子电路430只能存储MMBUF指令的相关信息,当最后一个线程束的MMBUF指令到达时,存储子电路430里存储的属于同一个工作组的线程束的信息(第一写基地址和第一控制信息)需要被全部读出来。
例如,计数模块4201可以包括计数器。
例如,第一传输模块4202被配置为:响应于接收到缓存信号BS,基于第一指令信息,获取第i个线程束对应的第一控制信息和第i个线程束对应的第一写基地址,并将第i个线程束对应的第一控制信息和第i个线程束对应的第一写基地址传输至存储子电路430以进行存储,响应于接收到发射信号ES,基于第一指令信息,获取第i个线程束对应的第一控制信息和第i个线程束对应的第一写基地址,并将第i个线程束对应的第一控制信息和第i个线程束对应的第一写基地址传输至第二传输模块4203。
例如,第一传输模块4202可以包括数据分配器,数据分配器可以包括一个输入端、两个输出端和两个控制端。数据分配器的输入端被配置为接收第一指令信息,数据分配器的两个输出端分别耦接至存储子电路430和第二传输模块4203,数据分配器的两个控制端分别接收缓存信号BS和发射信号ES。
例如,第二传输模块4203被配置为:在接收到发射信号ES时,从存储子电路430中读出存储的(T-1)个第一写基地址和(T-1)个第一控制信息,接收第一传输模块4202传输的第i个线程束对应的第一控制信息和第i个线程束对应的第一写基地址,以得到T个第一写基地址和T个第一控制信息;将T个第一写基地址和T个第一控制信息同时发送至地址计算模块。
例如,第二传输模块4203可以包括数据选择器,数据选择器可以包括两个输入端、一个输出端和一个控制端。数据选择器的两个输入端分别耦接至第一传输模块4202和存储子电路430,数据选择器的输出端耦接至地址计算模块,数据选择器的控制端用于接收发射信号ES。
例如,在另一些实施例中,例如,第一传输模块4202被配置为:响应于接收到缓存信号BS,基于第一指令信息,获取第i个线程束对应的第一控制信息和第i个线程束对应的第一写基地址,并将第i个线程束对应的第一控制信息和第i个线程束对应的第一写基地址传输至存储子电路430以进行存储。第二传输模块4203被配置为:在接收到发射信号ES时,从存储子电路430中读出存储的T个第一写基地址和T个第一控制信息;将T个第一写基地址和T个第一控制信息同时发送至地址计算模块。也就是说,在本实施例中,第一传输模块4202不直接将第一写基地址和第一控制信息传输至第二传输模块4203,存储子电路430可以存储需要同时发射指令的所有线程束(例如,T个线程束)对应的第一写基地址和第一控制信息,当第二传输模块4203接收到发射信号ES时,可以直接从存储子电路430中读出存储的所有线程分别对应的第一写基地址和第一控制信息。
例如,在另一些实施例中,在执行获取与T个线程束一一对应的T个第一控制信息和与T个线程束一一对应的T个第一写基地址的步骤时,同步子电路420被配置为:接收从接口交互电路发送的与第i个线程束对应的命令信息;基于第i个线程束对应的命令信息,获取与T个线程束一一对应的T个第一写基地址;基于第一指令信息,获取第i个线程束对应的第一控制信息作为与T个线程束一一对应的T个第一控制信息。
例如,在该实施例中,在进行工作组的寄存器分配时(即在GPU分配执行工作组的计算单元时)就将该工作组包括的多个线程束分别对应的多个第一写基地址传递出来,从而有效的避免由于T个线程束中的第一个线程束和最后一个线程束在发射指令之间的时间间隔较长而导致的整个工作组的数据请求时间延长的问题,进一步缩短数据读取时间延迟,提升矩阵运算的整体运算性能和效率。
下面简单描述一下工作组的寄存器分配机制。
例如,工作组的寄存器分配机制为:如果一个工作组内所有的线程束可以平均分配到一个计算单元内的SIMD上,且SIMD的矢量通用寄存器片空间足够,则该工作组就能分配到这个计算单元上。例如,一个计算单元包括四个SIMD,每个SIMD包括单独的一组矢量通用寄存器,该一组矢量通用寄存器被划分为四个矢量通用寄存器片row0~row3,每个矢量通用寄存器片包括256个矢量通用寄存器,例如,每个矢量通用寄存器片包括的256个矢量通用寄存器的地址分别为v0~v255。若当前有一个包括四个线程束的工作组正在等待分配且每个线程束需要100个矢量通用寄存器,只有当这个计算单元里四个SIMD的可用矢量通用寄存器片空间都满足大于等于100时,该计算单元才能被分配以执行这个工作组。
在当前支持的矩阵运算中,经过矩阵分块后,每个子矩阵块映射的工作组可以包括2个线程束、4个线程束或8个线程束。在硬件设计中。矢量通用寄存器片基地址(例如,上述第一写基地址)采用6个比特(bit)进行表示,基于硬件资源的限制,在一些本实施例中,可用设置支持四个矢量通用寄存器片基地址同时输出的硬件电路,例如,可以设置四条地址传输线以同时传输四个矢量通用寄存器片基地址,从而匹配矩阵运算中最常见的一个工作组包括四个线程束的情形。对于一个工作组包括两个线程束的情况,则可以利用四条地址传输线中的两条地址传输线一次传递两个线程束分别对应的两个矢量通用寄存器片基地址,对于一个工作组包括八个线程束的情况,可以通过四条地址传输线在两个时钟周期传递八个线程束分别对应的八个矢量通用寄存器片基地址。
在本公开的实施例中,每个线程束可以携带同一个工作组中的所有线程束对应的矢量通用寄存器片基地址进入硬件调度电路。
图5为本公开提供的一种接口交互电路的简单示意图。如图5所示,接口交互电路510与硬件调度电路耦接。
当工作组需要分配到计算单元中执行时,接口交互电路510会按次序检查每个计算单元里的资源情况,第一个能被分配上的计算单元就是被选中的计算单元。
例如,如图5所示,在一些实施例中,一个计算单元包括四个SIMD,分别为SIMD0~SIMD3,此时,接口交互电路510可以包括对应于一个计算单元的四个计数器0~3、四个比较器0~3、逻辑门LG和数据选择器Sel,四个计数器0~3与四个SIMD一一对应,四个计数器0~3和四个比较器0~3一一对应,逻辑门LG用于接收四个比较器0~3输出的比较结果,并基于该比较结果确定是否输出与该计算单元对应的分配使能信号,即确定该计算单元是否可以执行工作组。
需要说明的是,接口交互电路510包括的计数器的数量和接口交互电路510包括的比较器的数量均与计算单元包括的SIMD的数量相同。
该计数器0~3可以以任何电路形式表现,计数器0~3用于记录各个SIMD中剩余的矢量通用寄存器片数量;四个比较器0~3用于将接收的矢量通用寄存器片需求量分别与对应的SIMD的计数器0~3中的计数值进行比较,例如,比较器0用于将接收的线程束wave0的矢量通用寄存器片需求量与计数器0中的计数值进行比较,以确定SIMD0中剩余的矢量通用寄存器片数量是否大于等于线程束wave0需要的矢量通用寄存器片数量,当SIMD0中剩余的矢量通用寄存器片数量是否大于等于线程束wave0需要的矢量通用寄存器片数量时,线程束wave0可以在SIMD0上执行。比较器1用于将接收的线程束wave1的矢量通用寄存器片需求量与计数器1中的计数值进行比较,比较器2用于将接收的线程束wave2的矢量通用寄存器片需求量与计数器2中的计数值进行比较,比较器3用于将接收的线程束wave3的矢量通用寄存器片需求量与计数器3中的计数值进行比较。
例如,在一些实施例中,当矢量通用寄存器片需求量小于对应的计数器中的计数值时,比较器输出的比较结果可以为二进制数1,逻辑门LG可以为与门,当四个比较器0~3均输出1时,与门可以输出分配使能信号,例如,该分配使能信号表示为二进制数1。
例如,若一个工作组仅包括两个线程束,两个线程束分别在SIMD0和SIMD1上执行,则需要选择比较器0和比较器1进行比较;若一个工作组包括八个线程束,则矢量通用寄存器片需求量可以为两个线程束分别对应的矢量通用寄存器片需求量之和,例如,若工作组中的某两个线程束需要在SIMD0上执行,则此时比较器0用于将某两个线程束分别对应的矢量通用寄存器片需求量之和与计数器0中的计数值进行比较。当矢量通用寄存器片需求量均小于计数器0~3中的计数值时,代表该工作组可以分配到这个计算单元上,此时,与门可以输出分配使能信号和计算单元的标识码(ID,identity document)至数据选择器Sel。
例如,数据选择器Sel可以接收与不同计算单元对应的分配使能信号和SIMD的矢量通用寄存器片基地址,在分配使能信号的控制下,输出被选择的计算单元中的SIMD的矢量通用寄存器片基地址。
当工作组中的某个线程束(例如,工作组中的第i个线程束)开始执行时,接口交互电路510可以将该第i个线程束对应的命令信息送到硬件调度电路,进入第i个线程束的指令发射阶段,第i个线程束对应的命令信息包括用于执行该工作组的计算单元包括的四个SIMD的矢量通用寄存器片基地址,即SIMD0.VGPR(SIMD0的矢量通用寄存器片基地址)、SIMD1.VGPR(SIMD1的矢量通用寄存器片基地址)、SIMD2.VGPR(SIMD2的矢量通用寄存器片基地址)、SIMD3.VGPR(SIMD3的矢量通用寄存器片基地址)。由于第i个线程束对应的命令信息携带了四个矢量通用寄存器片基地址,所以第i个线程束对应的MMBUF指令的数据读取启动时间可以从执行到第i个线程束的MMBUF指令时开始。
例如,一个工作组包括四个线程束wave0~wave3,线程束wave0在SIMD0上执行,线程束wave1在SIMD1上执行,线程束wave2在SIMD2上执行,线程束wave3在SIMD3上执行,此时,线程束wave0对应的第一写基地址即为SIMD0的矢量通用寄存器片基地址:SIMD0.VGPR,线程束wave1对应的第一写基地址即为SIMD1的矢量通用寄存器片基地址:SIMD1.VGPR,线程束wave2对应的第一写基地址即为SIMD2的矢量通用寄存器片基地址:SIMD2.VGPR,线程束wave3对应的第一写基地址即为SIMD3的矢量通用寄存器片基地址:SIMD3.VGPR。
由于MMBUF指令的数据读取时间可以在第i个线程束执行到MMBUF指令时就启动,所以对于第i个线程束来说,读取数据的延迟没有降低,然而,相比于在T个线程束中的最后一个线程束才启动数据读取工作,工作组的整体数据读取时间点前移,减小了工作组的整体数据读取延迟,提升整个工作组执行矩阵运算的效率。
例如,在一些实施例中,接收子电路410还被配置为:接收与第i个线程束对应的第二指令信息并将第二指令信息发送至同步子电路420。
同步子电路420被配置为:在第二指令信息包括与第i个线程束对应的第二矩阵缓存指令的信息的情况下,确定多个线程束中需要同时发射指令的R个线程束,其中,R为正整数,R个线程束包括第i个线程束;获取与R个线程束一一对应的R个第二控制信息和与R个线程束一一对应的R个第二写基地址;将R个第二控制信息和R个第二写基地址同时发送至地址计算模块,以供地址计算模块进行地址计算操作。
例如,在第i个线程束不是R个线程束中的最后一个线程束的情况下,第i个线程束对应的第二控制信息和第二写基地址也可以被传输至存储子电路430以进行存储。
例如,接收子电路410、同步子电路420和存储子电路430可以通过寄存器、触发器、选择器、逻辑门电路等硬件电路实现。
需要说明的是,对于指令发射控制电路400的具体说明可以参考上述对指令发射控制方法的实施例的相关内容,重复之处不再赘述。
本公开一些实施例还提供一种数据处理电路。图6为本公开一些实施例提供的一种数据处理电路的示意性框图。
例如,如图6所示,数据处理电路600包括:硬件调度电路610和数据广播电路620。数据广播电路620可以与硬件调度电路610耦接,以实现数据传输。
例如,硬件调度电路610包括上述任一实施例所述的指令发射控制电路400。
例如,指令发射控制电路400中的同步子电路420还被配置为:解析第一矩阵缓存指令,以获得与第i个线程束所需的第一矩阵中的P个数据对应的第一读基地址,并将第一读基地址发送至数据广播电路620。
例如,第一读基地址表示第一矩阵中的P个数据在存储器中的基地址,可以为第一矩阵缓存指令中的BaseAddr表示的地址。
例如,对于图1A所示的映射方式,若第一矩阵为第一运算矩阵A,即第一矩阵缓存指令用于实现对第一运算矩阵A的数据进行读取时,对于wave0~wave3,第一矩阵缓存指令中的BaseAddr均为数据a0的地址,即wave0~wave3对应的工作组基地址(即第一读基地址)均为数据a0的地址;若第一矩阵为第二运算矩阵B,即第一矩阵缓存指令用于实现对第二运算矩阵B的数据进行读取时,对于wave0~wave3,第一矩阵缓存指令中的BaseAddr均为数据b0的地址,即wave0~wave3对应的工作组基地址(即第一读基地址)均为数据b0的地址。
例如,如图1B所示,若第一矩阵为第一运算矩阵A,第一矩阵缓存指令中的BaseAddr可以为数据a0的地址,而数据a1的地址可以基于该BaseAddr和数据块A0与数据块A1之间的基地址偏移量计算得到,该数据块A1对应的基地址偏移量可以为数据块A0中一列数据的地址之和,例如,若数据块A0中的一列数据包括16个数据,则该数据块A1对应的基地址偏移量为128字节(双精度)。类似地,若第一矩阵为第二运算矩阵B,第一矩阵缓存指令中的BaseAddr可以为数据b0的地址,而数据b1的地址可以基于该BaseAddr和数据块B0与数据块B1之间的基地址偏移量计算得到,该数据块B1对应的基地址偏移量可以为数据块B0中一行数据的地址之和。
例如,当数据被读回来以后,根据不同的矩阵映射方式,数据广播电路620可以将读取的数据广播到对应线程束的SIMD中。例如,数据广播电路620可以包括广播子电路6201和计算与排序子电路6202。
例如,计算与排序子电路6202被配置为:接收T个第一控制信息、T个第一写基地址和第一读基地址;基于T个第一控制信息和T个第一写基地址,计算与T个线程束一一对应的T个寄存器地址组;基于第一读基地址和第i个线程束对应的第一控制信息,从存储器上读取P个数据;基于T个第一控制信息,确定P个数据分别对应的使能信号;将T个寄存器地址组、P个数据和P个数据分别对应的使能信号发送至广播子电路6201。
例如,T个线程束中的任一线程束对应的寄存器地址组包括在与任一线程束对应的单指令多数据流单元的矢量通用寄存器片上的由任一线程束对应的第一控制信息确定的多个寄存器地址。
例如,广播子电路6201被配置为:基于T个寄存器地址组、T个第一控制信息和P个数据分别对应的使能信号,按照执行矩阵乘法运算时P个数据对应的排序方式将P个数据写入T个寄存器地址组上。
图7为本公开一些实施例提供的一种数据广播电路的结构示意图。
例如,如图7所示,计算与排序子电路6202包括地址计算模块700、数据读取模块710和数据排序模块720。地址计算模块700、数据读取模块710和数据排序模块720彼此耦接。
例如,如图7所示,T个第一控制信息、T个第一写基地址和第一读基地址被发射到地址计算模块700,地址计算模块700根据T个第一控制信息(例如,指令操作码、工作组尺寸等)计算出第一矩阵(矩阵A或矩阵B)的数据块中各个数据(例如,P个数据)的存储器地址,并将该存储器地址发送到数据读取模块710,数据读取模块710基于该存储器地址控制线程从存储器中读取数据;同时,数据排序模块710可以获取T个第一控制信息和T个第一写基地址,并根据T个第一写基地址计算出被读取的数据块对应的所有寄存器地址。每个第一控制信息还可以包括被读取的数据是哪些线程束共同需要的等信息。当将数据读取回来之后,数据排序模块710可以对读取的数据进行排序,并将排序后的数据、所有寄存器地址、T个第一控制信息和排序后的数据分别对应的使能信号等发送至广播子电路6201。广播子电路6201可以根据任一数据对应的使能信号使能对应的SIMD,将该任一数据及其对应的寄存器地址一起发送到被使能的SIMD中。
例如,对于矩阵B,因为在排序时矩阵B的数据块中的每个数据会进行复制,这样会导致矩阵B的每个尺寸为16*4的数据块在读回后产生额外的延迟,从而导致对后续读数据产生阻塞。在一些示例中,可以在数据排序模块720中设置一个缓冲存储器,按照缓存双精度的矩阵B中的尺寸为128*4的数据块,最大需要4千字节(KB)的缓冲存储器,当然也可以根据具体情况用2KB或更小的缓冲存储器。
例如,地址计算模块700被配置为:接收T个第一控制信息、T个第一写基地址和第一读基地址;根据第一读基地址和第i个线程束对应的第一控制信息,计算得到与第一读基地址对应的多个存储器地址,并将多个存储器地址发送至数据读取模块710,其中,多个存储器地址表示P个数据在存储器上的地址;将T个第一控制信息和T个第一写基地址发送至数据排序模块720。
例如,T个线程束可以包括四个线程束wave0~wave3,此时,如图7所示,T个第一写基地址可以包括线程束wave0对应的第一写基地址wave0.VGPR_addr、线程束wave1对应的第一写基地址wave1.VGPR_addr、线程束wave2对应的第一写基地址wave2.VGPR_addr和线程束wave3对应的第一写基地址wave3.VGPR_addr。
例如,地址计算模块700可以包括多个地址计算逻辑,多个地址计算逻辑分别与多个线程束一一对应;多个地址计算逻辑中的任一地址计算逻辑被配置为基于任一地址计算逻辑对应的线程束对应的第一写基地址计算该线程束对应的寄存器地址组。
需要说明的是,在另一些实施例中,地址计算模块700也可以根据T个第一写基地址计算出被读取的数据块对应的所有寄存器地址,然后将所有寄存器地址和T个第一控制信息一起发送到数据排序模块720,以供数据排序模块720使用。
例如,在一些实施例中,数据读取模块710被配置为:基于多个存储器地址,控制第i个线程束从存储器上读取P个数据;并将P个数据进行缓存。例如,P个数据表示存储在存储器的多个存储器地址中的数据。
例如,数据排序模块720被配置为:基于T个第一控制信息和T个第一写基地址,计算与T个线程束一一对应的T个寄存器地址组;获取P个数据;基于T个第一控制信息,确定P个数据分别对应的使能信号;将T个寄存器地址组、P个数据和P个数据分别对应的使能信号发送至广播子电路6201。
例如,在另一些实施例中,在一些实施例中,数据读取模块710被配置为:基于多个存储器地址,从存储器上读取多个待处理数据;并将多个待处理数据进行缓存。多个待处理数据表示存储在存储器的多个存储器地址中的数据。此时,数据排序模块720被配置为:获取多个待处理数据;基于第i个线程束对应的第一控制信息,从多个待处理数据中获取第i个线程束所需的P个数据。
例如,在一些实施例中,数据排序模块710包括判断逻辑和信号确定逻辑。判断逻辑被配置为:对于P个数据中的任一数据,基于T个第一控制信息,确定T个线程束中共享该任一数据的Q个线程束,其中,Q为正整数且小于等于T;信号确定逻辑被配置为:获取与Q个线程束对应的单指令多数据流单元的使能信号作为该任一数据对应的使能信号。
例如,在执行基于T个寄存器地址组、T个第一控制信息和P个数据分别对应的使能信号,按照执行矩阵乘法运算时P个数据对应的排序方式将P个数据写入T个寄存器地址组上的步骤时,广播子电路6201被配置为:对于P个数据中的任一数据,基于T个第一控制信息和任一数据对应的使能信号,从T个寄存器地址组中获取与任一数据对应的至少一个寄存器地址,按照执行矩阵乘法运算时任一数据对应的排序方式将任一数据写入与至少一个寄存器地址上。
例如,如图7所示,广播子电路6201可以包括第一数据传输模块730、第二数据传输模块731、第三数据传输模块732和第四数据传输模块733。第一数据传输模块730用于在SIMD0使能信号的控制下将需要写入SIMD0的矢量通用寄存器片中的数据写入SIMD0的矢量通用寄存器片,第二数据传输模块731用于在SIMD1使能信号的控制下将需要写入SIMD1的矢量通用寄存器片中的数据写入SIMD1的矢量通用寄存器片,第三数据传输模块732用于在SIMD2使能信号的控制下将需要写入SIMD2的矢量通用寄存器片中的数据写入SIMD2的矢量通用寄存器片,第四数据传输模块733用于在SIMD3使能信号的控制下将需要写入SIMD3的矢量通用寄存器片中的数据写入SIMD3的矢量通用寄存器片。
例如,对于P个数据中的任一数据,若该任一数据需要被写入SIMD0的矢量通用寄存器片和SIMD1的矢量通用寄存器片,此时,该任一数据对应的使能信号为SIMD0使能信号和SIMD1使能信号,基于T个第一控制信息,可以获取与该任一数据对应的SIMD0上的寄存器地址和SIMD1上的寄存器地址。当广播子电路6201接收该任一数据、该任一数据对应的SIMD0使能信号和SIMD1使能信号、以及该任一数据对应的SIMD0上的寄存器地址和SIMD1上的寄存器地址,则第一数据传输模块730可以在SIMD0使能信号的控制下将该任一数据写入该任一数据对应的SIMD0上的寄存器地址中,第二数据传输模块731可以在SIMD1使能信号的控制下将该任一数据写入该任一数据对应的SIMD1上的寄存器地址中。
例如,如图6所示,数据处理电路600还包括接口交互电路630。接口交互电路630与硬件调度电路610耦接。
例如,接口交互电路630被配置为:基于同一个工作组,按次序检查图形处理器中的所有计算单元,以确定与同一个工作组匹配的计算单元作为被选择计算单元,其中,被选择计算单元包括多个单指令多数据流单元,多个单指令多数据流单元分别与多条地址传输线一一对应,多个单指令多数据流单元与多个线程束一一对应;基于多个单指令多数据流单元与多个线程束之间的对应关系,获取与多个线程束一一对应的多个第一写基地址;通过多条地址传输线分别将多个第一写基地址传输至硬件调度电路610。
例如,在一些实施例中,接口交互电路630可以实现为图5所示的接口交互电路510。关于接口交互电路630的具体说明可以参考上述对于接口交互电路510的相关描述,重复之处不再赘述。
例如,硬件调度电路610和数据广播电路620可以通过寄存器、触发器、选择器、逻辑门电路等硬件电路实现,本公开对硬件调度电路610和数据广播电路620的具体结构不作限制。
本公开的一些实施例还提供一种数据处理方法。图8为本公开一些实施例提供的一种数据处理方法的流程图。
例如,数据处理方法可以由上述任一实施例所述的数据处理电路实现。
例如,如图8所示,数据处理方法可以包括:
步骤S80:解析第一矩阵缓存指令,以获得与第i个线程束所需的第一矩阵中的P个数据对应的第一读基地址;
步骤S81:接收T个第一控制信息、T个第一写基地址和第一读基地址;
步骤S82:基于T个第一控制信息和T个第一写基地址,计算与T个线程束一一对应的T个寄存器地址组;
步骤S83:基于第一读基地址和第i个线程束对应的第一控制信息,从存储器上读取P个数据;
步骤S84:基于T个第一控制信息,确定P个数据分别对应的使能信号;
步骤S85:基于T个第一控制信息、T个寄存器地址组和P个数据分别对应的使能信号,按照执行矩阵乘法运算时P个数据对应的排序方式将P个数据写入T个寄存器地址组中。
例如,在步骤S82中,T个线程束中的任一线程束对应的寄存器地址组包括在与任一线程束对应的单指令多数据流单元的矢量通用寄存器片上的由任一线程束对应的第一控制信息确定的多个寄存器地址。
例如,步骤S80可以由指令发射控制电路400中的同步子电路420执行,步骤S81~S84可以由数据广播电路620中的计算与排序子电路6202执行,步骤S85可以由数据广播电路620中的广播子电路6201执行。
需要说明的是,关于利用数据处理方法进行数据处理的过程可以参考上述关于数据处理电路的相关说明,在此不再赘述。
下面通过一个具体例子说明本公开提供的技术方案的技术效果。
假设一个工作组用于计算单精度的矩阵乘法运算:64*64=(64*4)*(4*64),一个工作组包括四个线程束wave0~wave3。
例如,按照图1B所示的映射方式,线程束wave0用于读取第一运算矩阵的数据块A0和数据块A1,以及第二运算矩阵的数据块B0和数据块B1;线程束wave1用于读取第一运算矩阵的数据块A0和数据块A1,以及第二运算矩阵的数据块B2和数据块B3;线程束wave2用于读取第一运算矩阵的数据块A2和数据块A3,以及第二运算矩阵的数据块B0和数据块B1;线程束wave3用于读取第一运算矩阵的数据块A2和数据块A3,以及第二运算矩阵的数据块B2和数据块B3。
对于每个线程束,利用MMBUF指令进行数据读取时,将数据写入矢量通用寄存器片的时间延迟的计算过程如下所述:
对于第一运算矩阵A:(16*4*4(B:byte,字节)*2(数据块))/64B=8cycles;
对于第二运算矩阵B:16*4*2(数据块)=128cycles。
每个线程束的总时间延迟为:128+8=136cycles,一个工作组的总时间延迟是136*4=544cycles。
在同样的应用场景中,基于本公开的实施例提供的指令发射控制方法和数据处理方法:
线程束wave0将数据块A0和数据块A1的数据分别写入到线程束wave0对应的SIMD的矢量通用寄存器片和线程束wave1对应的SIMD的矢量通用寄存器片,将数据块B0和数据块B1的数据分别写入到线程束wave0对应的SIMD的矢量通用寄存器片和线程束wave2对应的SIMD的矢量通用寄存器片,该线程束wave0写数据的时间延迟为:8+128=136cycles。
线程束wave1将数据块B2和数据块B3的数据分别写入到线程束wave1对应的SIMD的矢量通用寄存器片和线程束wave3对应的VSIMD的GPR,该线程束wave1写数据的时间延迟为:128cycles。
线程束wave2将数据块A2和数据块A3的数据分别写入到线程束wave2对应的SIMD的矢量通用寄存器片和线程束wave3对应的SIMD的矢量通用寄存器片,该线程束wave2写数据的时间延迟为:8cycles。
综上所述,上述工作组对应的写数据的总时间延迟为:136+128+8=272cycles。
类似地,按照图1A的映射方式,线程束wave0在读取数据块A0、数据块A1、数据块B0和数据块B1的数据后,在将数据块A0、数据块A1、数据块B0和数据块B1的数据写入线程束wave0对应SIMD的矢量通用寄存器片时,也会同时写入线程束wave1、线程束wave2和线程束wave3对应SIMD的矢量通用寄存器片,此时,工作组对应的写数据的总时间延迟也是272cycles。可见除了第一个wave,即线程束wave0,的时间延迟没有变化以外,整个工作组的时间延迟大幅缩短,提升矩阵运算的整体运算性能和效率。
对于本公开,还有以下几点需要说明:
(1)本公开实施例附图只涉及到与本公开实施例涉及到的结构,其他结构可参考通常设计。
(2)为了清晰起见,在用于描述本发明的实施例的附图中,层或结构的厚度和尺寸被放大。可以理解,当诸如层、膜、区域或基板之类的元件被称作位于另一元件“上”或“下”时,该元件可以“直接”位于另一元件“上”或“下”,或者可以存在中间元件。
(3)在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合以得到新的实施例。
以上所述仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,本公开的保护范围应以所述权利要求的保护范围为准。

Claims (23)

1.一种指令发射控制方法,应用于矩阵乘法运算,包括:
接收第一指令信息,其中,所述第一指令信息对应于属于同一个工作组的多个线程束中的第i个线程束,i为正整数;
在所述第一指令信息包括与所述第i个线程束对应的第一矩阵缓存指令的信息的情况下,确定所述多个线程束中需要同时发射指令的T个线程束,其中,所述第一矩阵缓存指令用于实现对第一矩阵的数据进行读取,T为正整数,所述T个线程束包括所述第i个线程束;
获取与所述T个线程束一一对应的T个第一控制信息和与所述T个线程束一一对应的T个第一写基地址;
将所述T个第一控制信息和所述T个第一写基地址同时发送至地址计算模块,以供所述地址计算模块进行地址计算操作。
2.根据权利要求1所述的指令发射控制方法,其中,
确定所述多个线程束中需要同时发射指令的T个线程束,包括:
解析所述第一矩阵缓存指令,以确定所述第i个线程束所需的所述第一矩阵中的P个数据,其中,P为正整数;
基于所述P个数据,确定所述多个线程束中的所述T个线程束,
其中,所述T个线程束包括所述第i个线程束,所述T个线程束中的任意两个线程束共享所述P个数据的至少一部分,
所述T个线程束中的任一线程束对应的第一写基地址表示所述任一线程束所需的所述P个数据中的部分数据在与所述任一线程束对应的单指令多数据流单元的多个矢量通用寄存器片上的基地址。
3.根据权利要求1所述的指令发射控制方法,其中,获取与所述T个线程束一一对应的T个第一控制信息和与所述T个线程束一一对应的T个第一写基地址包括:
检测所述第i个线程束是否为所述T个线程束中的最后一个线程束;
响应于所述第i个线程束是所述T个线程束中的最后一个线程束,获取所述T个第一控制信息和所述T个第一写基地址,并将所述T个第一控制信息和所述T个第一写基地址同时发送至所述地址计算模块。
4.根据权利要求3所述的指令发射控制方法,还包括:
响应于所述第i个线程束不是所述T个线程束中的最后一个线程束,基于所述第一指令信息,获取并存储所述第i个线程束对应的第一控制信息和所述第i个线程束对应的第一写基地址。
5.根据权利要求3所述的指令发射控制方法,其中,响应于所述第i个线程束是所述T个线程束中的最后一个线程束,获取所述T个第一控制信息和所述T个第一写基地址,包括:
读取与所述T个线程束中除了所述第i个线程束之外的(T-1)个线程束一一对应的(T-1)个第一写基地址和与所述(T-1)个线程束一一对应的(T-1)个第一控制信息;
基于所述第一指令信息,获取所述第i个线程束对应的第一控制信息和所述第i个线程束对应的第一写基地址,
其中,所述T个第一控制信息包括所述第i个线程束对应的第一控制信息和所述(T-1)个第一控制信息,所述T个第一写基地址包括所述第i个线程束对应的第一写基地址和所述(T-1)个第一写基地址。
6.根据权利要求1所述的指令发射控制方法,其中,获取与所述T个线程束一一对应的T个第一控制信息和与所述T个线程束一一对应的T个第一写基地址,包括:
接收与所述第i个线程束对应的命令信息,其中,所述第i个线程束对应的命令信息由接口交互电路发送;
基于所述第i个线程束对应的命令信息,获取与所述T个线程束一一对应的所述T个第一写基地址;
基于所述第一指令信息,获取所述第i个线程束对应的第一控制信息作为与所述T个线程束一一对应的所述T个第一控制信息。
7.根据权利要求1~6任一项所述的指令发射控制方法,还包括:
接收与所述第i个线程束对应的第二指令信息;
在所述第二指令信息包括与所述第i个线程束对应的第二矩阵缓存指令的信息的情况下,确定所述多个线程束中需要同时发射指令的R个线程束,其中,R为正整数,所述R个线程束包括所述第i个线程束;
获取与所述R个线程束一一对应的R个第二控制信息和与所述R个线程束一一对应的R个第二写基地址;
将所述R个第二控制信息和所述R个第二写基地址同时发送至所述地址计算模块,以供所述地址计算模块进行地址计算操作。
8.一种指令发射控制电路,应用于矩阵乘法运算,包括:接收子电路和同步子电路,其中,
所述接收子电路被配置为:接收第一指令信息并将所述第一指令信息发送至所述同步子电路,其中,所述第一指令信息对应于属于同一个工作组的多个线程束中的第i个线程束,i为正整数;
所述同步子电路被配置为:
在所述第一指令信息包括与所述第i个线程束对应的第一矩阵缓存指令的信息的情况下,确定所述多个线程束中需要同时发射指令的T个线程束,其中,所述第一矩阵缓存指令用于实现对第一矩阵的数据进行读取,T为正整数,所述T个线程束包括所述第i个线程束;
获取与所述T个线程束一一对应的T个第一控制信息和与所述T个线程束一一对应的T个第一写基地址;
将所述T个第一控制信息和所述T个第一写基地址同时发送至地址计算模块,以供所述地址计算模块进行地址计算操作。
9.根据权利要求8所述的指令发射控制电路,其中,
在执行确定所述多个线程束中需要同时发射指令的T个线程束的步骤时,所述同步子电路被配置为:
解析所述第一矩阵缓存指令,以确定所述第i个线程束所需的所述第一矩阵中的P个数据,其中,P为正整数;
基于所述P个数据,确定所述多个线程束中的所述T个线程束,
其中,所述T个线程束中的任意两个线程束共享所述P个数据的至少一部分,
所述T个线程束中的任一线程束对应的第一写基地址表示所述任一线程束所需的所述P个数据中的部分数据在与所述任一线程束对应的单指令多数据流单元的多个矢量通用寄存器片上的基地址。
10.根据权利要求8所述的指令发射控制电路,其中,在执行获取与所述T个线程束一一对应的T个第一控制信息和与所述T个线程束一一对应的T个第一写基地址的步骤时,
所述同步子电路被配置为:
检测所述第i个线程束是否为所述T个线程束中的最后一个线程束;
响应于所述第i个线程束是所述T个线程束中的最后一个线程束,获取所述T个第一控制信息和所述T个第一写基地址,并将所述T个第一控制信息和所述T个第一写基地址同时发送至所述地址计算模块。
11.根据权利要求10所述的指令发射控制电路,还包括存储子电路,
其中,所述同步子电路还被配置为:
响应于所述第i个线程束不是所述T个线程束中的最后一个线程束,基于所述第一指令信息,获取并存储所述第i个线程束对应的第一控制信息和所述第i个线程束对应的第一写基地址至所述存储子电路。
12.根据权利要求11所述的指令发射控制电路,其中,在执行响应于所述第i个线程束是所述T个线程束中的最后一个线程束,获取所述T个第一控制信息和所述T个第一写基地址的步骤时,
所述同步子电路被配置为:
从所述存储子电路中读出存储的与所述T个线程束中除了所述第i个线程束之外的(T-1)个线程束一一对应的(T-1)个第一写基地址和与所述(T-1)个线程束一一对应的(T-1)个第一控制信息;
基于所述第一指令信息,获取所述第i个线程束对应的第一控制信息和所述第i个线程束对应的第一写基地址,
其中,所述T个第一控制信息包括所述第i个线程束对应的第一控制信息和所述(T-1)个第一控制信息,所述T个第一写基地址包括所述第i个线程束对应的第一写基地址和所述(T-1)个第一写基地址。
13.根据权利要求12所述的指令发射控制电路,其中,所述同步子电路包括计数模块、第一传输模块和第二传输模块,
所述计数模块被配置为:
在所述第一指令信息为与所述第i个线程束对应的第一矩阵缓存指令的信息的情况下,检测所述第i个线程束是否为所述T个线程束中的最后一个线程束;
响应于所述第i个线程束不是所述T个线程束中的最后一个线程束,进行计数,并发送缓存信号至所述第一传输模块;
响应于所述第i个线程束是所述T个线程束中的最后一个线程束,发送发射信号至所述第一传输模块和所述第二传输模块;
所述第一传输模块被配置为:
响应于接收到所述缓存信号,基于所述第一指令信息,获取所述第i个线程束对应的第一控制信息和所述第i个线程束对应的第一写基地址,并将所述第i个线程束对应的第一控制信息和所述第i个线程束对应的第一写基地址传输至所述存储子电路以进行存储,
响应于接收到所述发射信号,基于所述第一指令信息,获取所述第i个线程束对应的第一控制信息和所述第i个线程束对应的第一写基地址,并将所述第i个线程束对应的第一控制信息和所述第i个线程束对应的第一写基地址传输至所述第二传输模块;
所述第二传输模块被配置为:
在接收到所述发射信号时,从所述存储子电路中读出存储的所述(T-1)个第一写基地址和所述(T-1)个第一控制信息,接收所述第i个线程束对应的第一控制信息和所述第i个线程束对应的第一写基地址,以得到所述T个第一写基地址和所述T个第一控制信息;
将所述T个第一写基地址和所述T个第一控制信息同时发送至所述地址计算模块。
14.根据权利要求8所述的指令发射控制电路,其中,在执行获取与所述T个线程束一一对应的T个第一控制信息和与所述T个线程束一一对应的T个第一写基地址的步骤时,
所述同步子电路被配置为:
接收从接口交互电路发送的与所述第i个线程束对应的命令信息;
基于所述第i个线程束对应的命令信息,获取与所述T个线程束一一对应的所述T个第一写基地址;
基于所述第一指令信息,获取所述第i个线程束对应的第一控制信息作为与所述T个线程束一一对应的所述T个第一控制信息。
15.根据权利要求8所述的指令发射控制电路,其中,所述T个线程束中的任一线程束对应的第一控制信息包括封装在所述任一线程束对应的第一矩阵缓存指令中的指令操作码、工作组尺寸、地址步长和矩阵信息,
所述矩阵乘法运算用于实现将第一运算矩阵和第二运算矩阵进行乘法计算,所述第一运算矩阵表示为M*K,所述第二运算矩阵表示为K*N,K、M、N均为正整数,
所述矩阵信息用于指示所述第一矩阵为所述第一运算矩阵或所述第二运算矩阵以及所述第一矩阵是否被转置,
在所述第一矩阵为所述第一运算矩阵的情况下,所述地址步长表示所述第一矩阵的相邻两列数据之间的步长,
在所述第一矩阵为所述第二运算矩阵的情况下,所述地址步长表示所述第一矩阵的相邻两行数据之间的步长。
16.根据权利要求8~15任一项所述的指令发射控制电路,其中,
所述接收子电路还被配置为:接收与所述第i个线程束对应的第二指令信息并将所述第二指令信息发送至所述同步子电路;
所述同步子电路被配置为:
在所述第二指令信息包括与所述第i个线程束对应的第二矩阵缓存指令的信息的情况下,确定所述多个线程束中需要同时发射指令的R个线程束,其中,R为正整数,所述R个线程束包括所述第i个线程束;
获取与所述R个线程束一一对应的R个第二控制信息和与所述R个线程束一一对应的R个第二写基地址;
将所述R个第二控制信息和所述R个第二写基地址同时发送至所述地址计算模块,以供所述地址计算模块进行地址计算操作。
17.一种数据处理电路,包括:硬件调度电路和数据广播电路,
其中,所述数据广播电路与所述硬件调度电路耦接,
所述硬件调度电路包括权利要求8~16任一项所述的指令发射控制电路,
所述数据广播电路包括:广播子电路和计算与排序子电路,
所述同步子电路还被配置为:解析所述第一矩阵缓存指令,以获得与所述第i个线程束所需的第一矩阵中的P个数据对应的第一读基地址,并将所述第一读基地址发送至所述数据广播电路,其中,P为正整数;
所述计算与排序子电路被配置为:
接收所述T个第一控制信息、所述T个第一写基地址和所述第一读基地址;
基于所述T个第一控制信息和所述T个第一写基地址,计算与所述T个线程束一一对应的T个寄存器地址组,其中,所述T个线程束中的任一线程束对应的寄存器地址组包括在与所述任一线程束对应的单指令多数据流单元的矢量通用寄存器片上的由所述任一线程束对应的第一控制信息确定的多个寄存器地址;
基于所述第一读基地址和所述第i个线程束对应的第一控制信息,从存储器上读取所述P个数据;
基于所述T个第一控制信息,确定所述P个数据分别对应的使能信号;
将所述T个寄存器地址组、所述P个数据和所述P个数据分别对应的使能信号发送至所述广播子电路;
所述广播子电路被配置为:
基于所述T个寄存器地址组、所述T个第一控制信息和所述P个数据分别对应的使能信号,按照执行所述矩阵乘法运算时所述P个数据对应的排序方式将所述P个数据写入所述T个寄存器地址组上。
18.根据权利要求17所述的数据处理电路,其中,所述计算与排序子电路包括所述地址计算模块、数据读取模块和数据排序模块,
所述地址计算模块被配置为:
接收所述T个第一控制信息、所述T个第一写基地址和所述第一读基地址;
根据所述第一读基地址和所述第i个线程束对应的第一控制信息,计算得到与所述第一读基地址对应的多个存储器地址,其中,所述多个存储器地址表示所述P个数据在所述存储器上的地址;
将所述T个第一控制信息和所述T个第一写基地址发送至所述数据排序模块;
所述数据读取模块被配置为:基于所述多个存储器地址,从所述存储器上读取所述P个数据,其中,所述P个数据表示存储在所述存储器的所述多个存储器地址中的数据;
所述数据排序模块被配置为:
基于所述T个第一控制信息和所述T个第一写基地址,计算与所述T个线程束一一对应的所述T个寄存器地址组;
获取所述P个数据;
基于所述T个第一控制信息,确定所述P个数据分别对应的使能信号;
将所述T个寄存器地址组、所述P个数据和所述P个数据分别对应的使能信号发送至所述广播子电路。
19.根据权利要求18所述的数据处理电路,其中,所述地址计算模块包括:多个地址计算逻辑,
其中,所述多个地址计算逻辑分别与所述多个线程束一一对应;
所述多个地址计算逻辑中的任一地址计算逻辑被配置为基于所述任一地址计算逻辑对应的线程束对应的第一写基地址计算该线程束对应的寄存器地址组。
20.根据权利要求18所述的数据处理电路,其中,所述数据排序模块包括判断逻辑和信号确定逻辑,
所述判断逻辑被配置为:对于所述P个数据中的任一数据,基于所述T个第一控制信息,确定所述T个线程束中共享所述任一数据的Q个线程束,其中,Q为正整数且小于等于T,
所述信号确定逻辑被配置为:获取与所述Q个线程束分别对应的单指令多数据流单元的使能信号作为所述任一数据对应的使能信号。
21.根据权利要求17所述的数据处理电路,其中,在执行基于所述T个寄存器地址组、所述T个第一控制信息和所述P个数据分别对应的使能信号,按照执行所述矩阵乘法运算时所述P个数据对应的排序方式将所述P个数据写入所述T个寄存器地址组上的步骤时,所述广播子电路被配置为:
对于所述P个数据中的任一数据,基于所述T个第一控制信息和所述任一数据对应的使能信号,从所述T个寄存器地址组中获取与所述任一数据对应的至少一个寄存器地址,
按照执行所述矩阵乘法运算时所述任一数据对应的排序方式将所述任一数据写入与所述至少一个寄存器地址上。
22.根据权利要求17所述的数据处理电路,还包括:接口交互电路,
其中,所述接口交互电路与所述硬件调度电路耦接,
所述接口交互电路被配置为:
基于所述同一个工作组,按次序检查图形处理器中的所有计算单元,以确定与所述同一个工作组匹配的计算单元作为被选择计算单元,其中,所述被选择计算单元包括多个单指令多数据流单元,所述多个单指令多数据流单元分别与多条地址传输线一一对应,所述多个单指令多数据流单元与所述多个线程束一一对应;
基于所述多个单指令多数据流单元与所述多个线程束之间的对应关系,获取与所述多个线程束一一对应的多个第一写基地址;
通过所述多条地址传输线分别将所述多个第一写基地址传输至所述硬件调度电路。
23.一种基于权利要求17~22任一项所述的数据处理电路的数据处理方法,包括:
解析所述第一矩阵缓存指令,以获得与所述第i个线程束所需的所述第一矩阵中的P个数据对应的所述第一读基地址;
接收所述T个第一控制信息、所述T个第一写基地址和所述第一读基地址;
基于所述T个第一控制信息和所述T个第一写基地址,计算与所述T个线程束一一对应的所述T个寄存器地址组,其中,所述T个线程束中的任一线程束对应的寄存器地址组包括在与所述任一线程束对应的单指令多数据流单元的矢量通用寄存器片上的由所述任一线程束对应的第一控制信息确定的多个寄存器地址;
基于所述第一读基地址和所述第i个线程束对应的第一控制信息,从存储器上读取所述P个数据;
基于所述T个第一控制信息,确定所述P个数据分别对应的使能信号;
基于所述T个第一控制信息、所述T个寄存器地址组和所述P个数据分别对应的使能信号,按照执行所述矩阵乘法运算时所述P个数据对应的排序方式将所述P个数据写入所述T个寄存器地址组中。
CN202011360444.8A 2020-11-27 2020-11-27 指令发射控制方法及电路、数据处理方法及电路 Active CN112463218B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011360444.8A CN112463218B (zh) 2020-11-27 2020-11-27 指令发射控制方法及电路、数据处理方法及电路

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011360444.8A CN112463218B (zh) 2020-11-27 2020-11-27 指令发射控制方法及电路、数据处理方法及电路

Publications (2)

Publication Number Publication Date
CN112463218A CN112463218A (zh) 2021-03-09
CN112463218B true CN112463218B (zh) 2022-12-09

Family

ID=74809145

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011360444.8A Active CN112463218B (zh) 2020-11-27 2020-11-27 指令发射控制方法及电路、数据处理方法及电路

Country Status (1)

Country Link
CN (1) CN112463218B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114489812A (zh) * 2022-04-06 2022-05-13 海光信息技术股份有限公司 指令发射方法及装置、电子设备及存储介质

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111984563A (zh) * 2020-09-18 2020-11-24 西安电子科技大学 基于fpga的ddr3读写控制器及矩阵转置实现方法

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9489183B2 (en) * 2010-10-12 2016-11-08 Microsoft Technology Licensing, Llc Tile communication operator
US10013240B2 (en) * 2016-06-21 2018-07-03 Advanced Micro Devices, Inc. Fingerprinting of redundant threads using compiler-inserted transformation code
US10936697B2 (en) * 2018-07-24 2021-03-02 Advanced Micro Devices, Inc. Optimized and scalable sparse triangular linear systems on networks of accelerators

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111984563A (zh) * 2020-09-18 2020-11-24 西安电子科技大学 基于fpga的ddr3读写控制器及矩阵转置实现方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
GPU通用计算软硬件处理架构研究;谢建春;《航空计算技术》;20130325(第02期);全文 *

Also Published As

Publication number Publication date
CN112463218A (zh) 2021-03-09

Similar Documents

Publication Publication Date Title
CN109522254B (zh) 运算装置及方法
US9672035B2 (en) Data processing apparatus and method for performing vector processing
EP0405489B1 (en) Resource conflict detection method and apparatus included in a pipelined processing unit
US7574466B2 (en) Method for finding global extrema of a set of shorts distributed across an array of parallel processing elements
US5872987A (en) Massively parallel computer including auxiliary vector processor
EP2372530A1 (en) Data processing method and device
CN107229463B (zh) 计算设备和相应计算方法
US20090260013A1 (en) Computer Processors With Plural, Pipelined Hardware Threads Of Execution
US20110072249A1 (en) Unanimous branch instructions in a parallel thread processor
CN115100018A (zh) 用于处理图像的图像处理器和方法
JPH0778738B2 (ja) ディジタル・コンピュータ・システム
CN103226463A (zh) 用于使用预解码数据调度指令的方法和装置
JP2014106715A (ja) 演算処理装置の制御プログラム、演算処理装置の制御方法および演算処理装置
TWI764997B (zh) 圖形處理單元及處理圖形應用程式的方法
CN112506567B (zh) 数据读取方法和数据读取电路
EP2439635B1 (en) System and method for fast branching using a programmable branch table
CN103279379A (zh) 用于在没有指令解码的情况下调度指令的方法和装置
KR20140131284A (ko) 스트리밍 메모리의 치환 동작
US6269435B1 (en) System and method for implementing conditional vector operations in which an input vector containing multiple operands to be used in conditional operations is divided into two or more output vectors based on a condition vector
CN105027075A (zh) 具有共享前端单元的处理核
EP4031985A1 (en) Efficient execution of operation unit graphs on reconfigurable architectures based on user specification
US20180246847A1 (en) Highly efficient scheduler for a fine grained graph processor
CN112463218B (zh) 指令发射控制方法及电路、数据处理方法及电路
EP0496407A2 (en) Parallel pipelined instruction processing system for very long instruction word
CN115934168A (zh) 处理器和内存访问方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
TA01 Transfer of patent application right

Effective date of registration: 20221118

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.

TA01 Transfer of patent application right
GR01 Patent grant
GR01 Patent grant