CN114816529A - 配置向量运算系统中的协作线程束的装置和方法 - Google Patents
配置向量运算系统中的协作线程束的装置和方法 Download PDFInfo
- Publication number
- CN114816529A CN114816529A CN202210479765.2A CN202210479765A CN114816529A CN 114816529 A CN114816529 A CN 114816529A CN 202210479765 A CN202210479765 A CN 202210479765A CN 114816529 A CN114816529 A CN 114816529A
- Authority
- CN
- China
- Prior art keywords
- bundle
- thread
- bundles
- thread bundle
- instruction
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 24
- 230000004888 barrier function Effects 0.000 claims description 18
- 238000013507 mapping Methods 0.000 claims description 5
- 238000013473 artificial intelligence Methods 0.000 abstract description 6
- 238000010586 diagram Methods 0.000 description 6
- 238000004364 calculation method Methods 0.000 description 4
- 230000008569 process Effects 0.000 description 4
- 230000008901 benefit Effects 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 238000000638 solvent extraction Methods 0.000 description 2
- 238000012884 algebraic function Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000013501 data transformation Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3851—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/30123—Organisation of register space, e.g. banked or distributed register file according to context, e.g. thread buffers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent 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
本发明涉及一种配置向量运算系统中的协作线程束的装置和方法,其中的装置包含:通用寄存器;算术逻辑单元;线程束指令调度器以及多个各线程束资源寄存器。线程束指令调度器依据程序核中的线程束分配指令让多个线程束中的每一个包含所述程序核中的一部分相对独立指令,依据软件在执行时的配置让多个线程束中的每一个都通过所述算术逻辑单元存取所述通用寄存器中的全部或指定局部的数据,并通过所述算术逻辑单元完成每个上述线程束的运算。本发明通过如上所述的能够让软件动态调整和配置通用寄存器给不同线程束的组件,可更广泛地适应不同的应用,例如大数据、人工智能的运算等。
Description
本申请是申请日为2020年10月21日,申请号为202011131448.9,发明名称为“配置向量运算系统中的协作线程束的装置和方法”的中国发明专利申请的分案申请。
技术领域
本发明涉及向量运算装置,尤指一种配置向量运算系统中的协作线程束的装置和方法。
背景技术
向量计算机是一种配备了专门的向量指令,用于提高向量处理速度的计算机。向量计算机能够同时处理多个线程束(Warp)的数据计算,因此,向量计算机就处理线程束的数据而言,比标量计算机快得多。然而,多个线程束存取通用寄存器文件(General-PurposeRegister File,GPR File)可能发生冲突,因此,本发明提出一种配置向量运算系统中的协作线程束的装置的方法。
发明内容
有鉴于此,如何减轻或消除上述相关领域的缺陷,实为有待解决的问题。
本发明的实施例涉及一种配置向量运算系统中的协作线程束的装置,包含:通用寄存器;算术逻辑单元;线程束指令调度器以及多个各线程束资源寄存器。线程束指令调度器依据程序核中的线程束分配指令让多个线程束中的每一个包含所述程序核中的一部分相对独立指令,依据软件在执行时的配置让多个线程束中的每个通过所述算术逻辑单元存取所述通用寄存器中的全部或指定局部的数据,并通过所述算术逻辑单元完成每个上述线程束的运算。每个所述各线程束资源寄存器关联于一个所述线程束,用于让每个所述线程束搭配相应的所述各线程束资源寄存器的内容,将数据存取映射到所述通用寄存器中的指定局部,其中不同的所述线程束间所映射的所述通用寄存器中的指定局部并不重叠。
本发明的实施例还涉及一种配置向量运算系统中的协作线程束的方法,包含:依据程序核中的线程束分配指令让多个线程束中的每一个包含所述程序核中的一部分相对独立指令;依据软件在执行时的配置让多个线程束中的每个通过算术逻辑单元存取通用寄存器中的全部或指定局部的数据;以及通过所述算术逻辑单元完成每个上述线程束的运算。其中所述方法还包括:依据多个各线程束资源寄存器的内容让每个所述线程束的数据存取映射到所述通用寄存器中的指定局部,并且其中不同的所述线程束间映射的所述通用寄存器中的指定局部并不重叠。
上述实施例的优点之一,通过以上所述的能够让软件动态调整和配置通用寄存器给不同线程束的组件和操作,可更广泛地适应不同的应用,例如大数据、人工智能的运算等。
上述实施例的优点之一,通过动态配置程序核中多段的相对独立指令给不同线程束,可避免线程束间互相干扰以提升流水线的使用率。
本发明的其他优点将配合以下的说明和附图进行更详细的解说。
附图说明
此处所说明的附图用于提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。
图1为依据本发明实施例的向量运算系统的框图。
图2为依据本发明实施例的流多处理器的框图。
图3为一些实施方式的通用寄存器的分割示意图。
图4为依据本发明实施例的搭配各线程束资源寄存器的通用寄存器的动态分割示意图。
图5为依据本发明实施例的流程图,应用于并行地执行任务的协作线程束。
图6为依据本发明实施例的生产者和消费者的协作线程束的示意图。
图7为依据本发明实施例的流程图,应用于执行生产者-消费者式的任务的协作线程束。
其中,附图中符号的简单说明如下:
10:电子装置;100:流多处理器;210:算术逻辑单元;220:线程束指令调度器;230:通用寄存器;240:指令缓存;250:屏障寄存器;260、260#0~260#7:各线程束资源寄存器;300#0~300#7:通用寄存器的存储块;Base#0~Base#7:基础位置;S510~S540:方法步骤;610:消费者线程束;621、663:屏障指令;623、661:一系列指令;650:生产者线程束;S710~S770:方法步骤。
具体实施方式
以下将配合相关附图来说明本发明的实施例。在这些附图中,相同的标号表示相同或类似的组件或方法流程。
必须了解的是,使用于本说明书中的“包含”、“包括”等词,是用于表示存在特定的技术特征、数值、方法步骤、作业处理、组件和/或组件,但并不排除可加上更多的技术特征、数值、方法步骤、作业处理、组件、组件,或以上的任意组合。
本发明中使用如“第一”、“第二”、“第三”等词是用于修饰权利要求中的组件,并非用于表示之间具有优先权顺序,先行关系,或者是一个组件先于另一个组件,或者是执行方法步骤时的时间先后顺序,仅用于区别具有相同名字的组件。
必须了解的是,当组件描述为“连接”或“耦接”至另一组件时,可以是直接连结、或耦接至其他组件,可能出现中间组件。相反地,当组件描述为“直接连接”或“直接耦接”至另一组件时,其中不存在任何中间组件。用于描述组件之间关系的其他词语也可以类似方式解读,例如“介于”相对于“直接介于”,或者“邻接”相对于“直接邻接”等等。
参考图1。电子装置10可实施于大型主机、工作站、个人计算机、笔记本计算机(Laptop PC)、平板计算机、移动电话、数字相机、数字摄影机等电子产品之中。电子装置10可在向量运算系统中设置流多处理器集群(Streaming Multiprocessor Cluster,SMC),包含多个流多处理器(Streaming Multiprocessor,SM)100,不同流多处理器100之间的指令执行可使用信号彼此同步。流多处理器100被编程后可执行各种应用任务,包含但不限于:线性和非线性数据转化、数据库操作、大数据运算、人工智能计算、音频、视频数据的编码、解码、建模操作、图像渲染操作等。每个流多处理器100可同时执行多个线程束(Warps),每个线程束是由一群线程(Group of Threads)组成,而线程是一个使用硬件运行的最小单位,并具有自己的生命周期。线程束可关联于单指令多数据流(Single InstructionMultiple Data,SIMD)指令、单指令多线程(Single Instruction Multiple Thread,SIMT)技术等。不同线程束之间的执行可以是独立的,也可以是顺序性的。线程可代表关联于一条或多条指令的任务。举例来说,每个流多处理器100可同时执行8个线程束,每个线程束包含32个线程。虽然图1描述了4个流多处理器100,所属技术领域人员可依据不同需要在向量运算系统中设置更多或更少的流多处理器,本发明并不因此受限。
参考图2。每个流多处理器100包含指令缓存(Instruction Cache)240,用于存储程序核(Kernel)的多条指令。每个流多处理器100还包含线程束指令调度器(WarpInstruction Scheduler)220,用于为每个线程束提取一系列指令并存储至指令缓存240,依据程序计数器为每个线程束从指令缓存240获取待执行的指令。每个线程束拥有独立的程序计数器(Program Counter,PC)寄存器,用于记录现在正执行的指令位置(也就是指令地址)。每当为一个线程束从指令缓存提取一条指令后,相应程序计数器加一。线程束指令调度器220在适当的时间点将指令送到算术逻辑单元(Arithmetic Logical Unit,ALU)210来执行,这些指令在特定计算系统的指令集架构(Instruction Set Architecture,ISA)中定义。算术逻辑单元210可执行各式各样的操作,例如,整数、浮点数的加法和乘法计算、比较操作、布尔(Boolean)运算、比特位移、代数函数(如平面插值、三角函数、指数函数、对数函数)等。算术逻辑单元210在执行的过程中,可从通用寄存器(General-PurposeRegisters,GPRs)230的指定位置(又可称为来源地址)读取数据,和回写执行结果到通用寄存器230的指定位置(又可称为目的地地址)。每个流多处理器100还包含屏障寄存器(Barriers Register)250,可用于让软件同步不同线程束间的执行,以及各线程束资源寄存器(Resource-per-warp Register)230,可用于让软件在执行时动态配置每个线程束能够使用的通用寄存器230的空间范围。虽然图2只列出部件210至260,但这只是用于简要说明本发明的技术特征,所属技术领域人员理解每个流多处理器100还包含更多部件。
在一些实施方式中,通用寄存器230可物理性或逻辑性的固定划分为多个块(Blocks),每块的存储空间只配置给一个线程束进行存取。不同块之间的存储空间并不重叠,用于避免不同线程束间的存取冲突。参考图3,举例来说,当一个流多处理器100可处理八个线程束的数据并且通用寄存器230包含256千字节(Kilobyte,KB)的存储空间时,通用寄存器230的存储空间可划分为八块300#0至300#7,每块包含不重叠的32KB存储空间并提供给指定的线程束运用。然而,因为现在向量运算系统经常应用在大数据和人工智能的计算,处理数据量庞大,造成固定划分的空间对于一个线程束来说可能不足,无法满足大量数据的运算需要。为了应用在大数据和人工智能的计算,这些实施方式可修改为让每个流多处理器100只处理一个线程束的数据,让整个通用寄存器230的存储空间只让这个线程束使用。但是,当连续两条指令具有数据关联性时,也就是说,第二条指令的输入数据是第一条指令执行后的输出结果,会造成算术逻辑单元210的运行不具效率。详细来说,第二条指令必须等待第一条指令的执行结果在通用寄存器230中准备就绪后才能开始执行。例如,假设每条指令在流水线中从初始化到输出结果到通用寄存器230需要经过8个时钟周期:当第二条指令需要等待第一条指令的执行结果时,则第二条指令需要从第9个时钟周期才能开始执行。这个时候,指令执行延迟(Instruction Execution Latency)是8个时钟周期,造成流水线的使用率非常低落。此外,因为流多处理器100只处理一个线程束,造成原本可以并行执行的指令都需要安排成顺序性执行,不具效率。
为了解决如上所述问题,从一个方面来说,线程束指令调度器220依据软件在执行时的配置让多个线程束中的每个通过算术逻辑单元210存取通用寄存器230中的全部或指定局部的数据,并通过算术逻辑单元210完成每个线程束的运算。通过如上所述的能够让软件动态调整和配置通用寄存器给不同线程束的组件,可更广泛地适应不同的应用,例如大数据、人工智能的运算等。
从另一个方面来说,本发明实施例提供能够让软件决定每个线程束包含的指令段的环境。在一些实施例中,一个程序核可将指令分为多段,每段指令间彼此独立,并且以一个线程束执行。表1为程序核的虚拟码的示例:
表1
假设每个流多处理器100最多运行八个线程束,并且每个线程束拥有独一无二的标识:线程束指令调度器220提取表1中所示的程序核的指令时,能够为特定线程束检查线程束标识,跳到此线程束所关联的指令段,并且存储到指令缓存240,接着再从指令缓存240依据相应程序计数器的值获取指令并送到算术逻辑单元210以完成特定的计算。在这个情况下,每个线程束可独立地执行任务,并且所有线程束可同时运行,让算术逻辑单元210中的流水线尽可能忙碌以避免出现泡泡(Bubbles)。同一个程序核中每个段的指令可称为相对独立指令。虽然表1的示例是在程序核中加上条件判断的指令来达成指令的分段,所属技术领域人员可使用其他不同但能达到相同或类似效果的指令来完成程序核中的指令分段。在程序核中,这些用来为多个线程束进行指令分段的指令又可称为线程束分配指令。总的来说,线程束指令调度器240可依据程序核中的线程束分配指令让多个线程束中的每一个包含程序核中的一部分相对独立指令,用于让算术逻辑单元210独立且并行的执行多个所述线程束。
屏障寄存器250可存储用于同步不同线程束的执行的信息,包含需要等待其他线程束执行完毕的数目,以及目前正等待要继续执行的线程束的数目。为了协调不同线程束的执行进程,软件可设定屏障寄存器250的内容,用于记录需要等待执行完毕的线程束的数目。程序核中的每个指令段可依据系统需求在适当的地方加上屏障指令(BarrierInstruction)。当线程束指令调度器220为一个线程束提取到屏障指令时,将屏障寄存器250中记录的正等待要继续执行的线程束的数目加1,并且让此线程束进入等待状态。接着,线程束指令调度器220检查屏障寄存器250的内容,判断目前正等待要继续执行的线程束的数目是否相等于或大于需要等待其他线程束执行完毕的数目。如果是,线程束指令调度器220唤醒所有等待的线程束,让这些线程束能够继续执行。否则,线程束指令调度器220从指令缓存提取下一个线程束的指令。
此外,图3所述实施方式的划分是流多处理器100的预先配置,软件并不能够修改。然而,不同线程束需要的存储空间可能会不一致,对于一些线程束来说,预先划分的存储空间可能超过需要,而对另一些线程束来说,则可能不足。
从另一个方面来说,虽然一个流多处理器100能够执行多个线程束并且所有线程束的执行相同的程序核,但是本发明实施例并不预先为不同线程束进行通用寄存器230的分割。具体来说,为了更广泛地适应不同的应用,流多处理器100不固定为多个线程束将通用寄存器230划分成多块的存储空间,而是提供能够让软件动态调整和配置通用寄存器230给不同线程束的环境,使得软件可依据应用需要让每个线程束使用通用寄存器230中的全部或局部。
在另一些实施例中,每个流多处理器100可包含各线程束资源寄存器260,用于存储每个线程束的基础位置的信息,每个基础位置指向通用寄存器230的特定地址。为了让不同线程束可以存取通用寄存器230中没有重叠的存储空间,软件可动态改变各线程束资源寄存器260的内容,用于设定每个线程束的基础位置。例如,参考图4,软件可为八个线程束将通用寄存器230分为八块,第0块关联于第0个线程束,其地址范围包含Base#0至Base#1-1;第1块关联于第1个线程束,其地址范围包含Base#1至Base#2-1;以此类推。软件可在程序核的执行之前或执行的一开始设定各线程束资源寄存器260#0至260#7的内容,用于指向通用寄存器230中关联于每个线程束的基础地址。线程束指令调度器220为第i个线程束从指令缓存240提取指令后,可依据线程束资源寄存器260#i的内容调整指令的来源地址和目的地地址,用于映射到通用寄存器230中动态配置给第i个线程束的存储空间。举例来说,原来的指令为:
Dest_addr=Instr_i(Src_addr0,Src_addr1)
其中,Instr_i代表分配到第i个线程束的指令的操作码(OpCode),Src_addr0代表第0个来源地址,Src_addr0代表第1个来源地址,Dest_addr代表目的地地址。
线程束指令调度器220修改如上所述的指令而成为:
Base#i+Dest_addr=Instr_i(Base#i+Src_addr0,Base#i+Src_addr1)
其中,Base#i代表线程束资源寄存器260#i中记录的基础位置。也就是说,通过线程束指令调度器220依据各线程束资源寄存器260的内容调整指令的来源地址和目的地地址,让不同的线程束间所映射的所述通用寄存器中的指定局部并不重叠。
在更另一些实施例中,不但一个程序核可将指令分为彼此独立的多段,并且以每段指令以一个线程束执行外,软件还可在程序核的执行之前或执行的一开始设定各线程束资源寄存器260#0至260#7的内容,用于指向通用寄存器230中关联于每个线程束的基础地址。
本发明可应用在并行地执行任务的协作线程束(Cooperative Warps),参考图5所示的流程图示例。
步骤S510:线程束指令调度器220开始提取每个线程束的指令并存储至指令缓存240。
步骤S520至步骤S540形成一个循环,线程束指令调度器220可使用一种调度方式(例如,轮询调度算法)逐个依据线程束的相应程序计数器从指令缓存240获取指定的指令,并送到算术逻辑单元210执行。线程束指令调度器220可依序从指令缓存240获取第0个线程束的程序计数器指出的指令,第1个线程束的程序计数器指出的指令,第2个线程束的程序计数器指出的指令,以此类推。
步骤S520:线程束指令调度器220从指令缓存240获取第0个或下一个线程束的指令。
步骤S530:线程束指令调度器220将获取的指令送到算术逻辑单元210。
步骤S540:算术逻辑单元210依据输入的指令执行指定的运算。在执行指令的流水线中,算术逻辑单元210从通用寄存器230的来源地址中获取数据,对获取的数据进行指定的运算,并且将运算的结果存储到通用寄存器230中的目的地地址。
为了让不同的线程束在存取通用寄存器230时不发生冲突,在步骤S510的一些实施例中,线程束指令调度器220可依据程序核中的线程束分配指令(如表1所示的示例)让每个线程束负责处理同一个程序核中指定段的多个指令(又可称为相对独立指令),这些指令段在安排下彼此独立,可并行执行。
在另一些实施例中,线程束指令调度器220可在指令送到算术逻辑单元210之前(步骤S530之前),依据相应的各线程束资源寄存器260的内容调整指令中的来源地址和目的地地址,用于映射到通用寄存器230中动态配置给此线程束的存储空间。
在更另一些实施例中,线程束指令调度器220除了在步骤S510可依据程序核中的相关指令(如表1所示的示例)让每个线程束负责处理同一个程序核中指定段的多个指令,还可在指令送到算术逻辑单元210之前(步骤S530之前),依据相应的各线程束资源寄存器260的内容调整指令中的来源地址和目的地地址。
本发明可应用于执行生产者-消费者式的任务的协作线程束。参考图6,假设线程束610当作数据的消费者,而线程束650当作数据的生产者。换句话说,线程束610中一部分的指令执行需要参考线程束650中一部分指令的执行结果。在一些实施例中,软件在执行时可配置相应于线程束610和650的各线程束资源寄存器的内容,让线程束610和650的指令能够通过算术逻辑单元210存取到通用寄存器230中的重叠的一块。
关于生产者-消费者式的任务执行,详细来说,参考图7所示的流程图示例。
步骤S710:线程束指令调度器220开始提取每个线程束的指令并存储至指令缓存240。线程束指令调度器220可依据程序核中的相关指令(如表1所示的示例)让每个线程束负责处理同一个程序核中指定段的多个指令,这些指令段在安排下形成生产者-消费者的关系。
步骤S720:线程束指令调度器220从指令缓存240获取消费者线程束610的屏障指令(Barrier Instruction)621,并据以让消费者线程束610进入等待状态。
步骤S730:线程束指令调度器220从指令缓存240获取生产者线程束650的一系列指令661并依序将获取的指令送到算术逻辑单元210。
步骤S740:算术逻辑单元210依据输入的指令661执行指定的运算。在执行指令的流水线中,算术逻辑单元210从通用寄存器230的来源地址中获取数据,对获取的数据进行指定的运算,并且将运算的结果存储到通用寄存器230中的目的地地址。
步骤S750:线程束指令调度器220从指令缓存240获取生产者线程束650的屏障指令663,并据以唤醒消费者线程束610。在一些实施例中,线程束指令调度器220还可让生产者线程束650进入等待状态。
步骤S760:线程束指令调度器220从指令缓存240获取消费者线程束610的一系列指令623并依序将获取的指令送到算术逻辑单元210。
步骤S770:算术逻辑单元210依据输入的指令623执行指定的运算。在执行指令的流水线中,算术逻辑单元210从通用寄存器230的来源地址中获取数据(包含先前由生产者线程束650产生的数据),对获取的数据进行指定的运算,并且将运算的结果存储到通用寄存器230中的目的地地址。
在这里需要知道的是,关于步骤S730、S740、S760和S770的内容只是便于理解的简要说明,在步骤S730和S740、S760和S770的执行期间,线程束指令调度器220还可从指令缓存240获取其他线程束(也就是既不是线程束610也不是线程束610的任意线程束)的指令并驱动算术逻辑单元210以执行运算。
虽然图1、图2中包含了以上描述的组件,但不排除在不违反发明的精神下,使用更多其他的附加组件,以达成更佳的技术效果。此外,虽然图5、图7的流程图采用指定的顺序来执行,但是在不违反发明精神的情况下,所属技术领域的技术人员可以在达到相同效果的前提下,修改这些步骤之间的顺序,所以,本发明并不局限于仅使用如上所述的顺序。此外,所属技术领域的技术人员也可以将若干步骤整合为一个步骤,或者是除了这些步骤外,循序或并行地执行更多步骤,本发明也不应因此而局限。
以上所述仅为本发明较佳实施例,然其并非用以限定本发明的范围,任何熟悉本项技术的人员,在不脱离本发明的精神和范围内,可在此基础上做进一步的改进和变化,因此本发明的保护范围当以本申请的权利要求书所界定的范围为准。
Claims (11)
1.一种配置向量运算系统中的协作线程束的装置,其特征在于,包含:
通用寄存器;
算术逻辑单元,耦接所述通用寄存器;
线程束指令调度器,耦接所述算术逻辑单元,所述线程束指令调度器依据程序核中的线程束分配指令让多个线程束中的每一个包含所述程序核中的一部分相对独立指令,依据软件在执行时的配置让所述多个线程束中的每一个都通过所述算术逻辑单元存取所述通用寄存器中的全部或指定局部的数据,并通过所述算术逻辑单元完成每个上述线程束的运算;以及
多个各线程束资源寄存器,其中,每个所述各线程束资源寄存器关联于一个所述线程束,用于让每个所述线程束搭配相应的所述各线程束资源寄存器的内容,将数据存取映射到所述通用寄存器中的指定局部,其中不同的所述线程束间所映射的所述通用寄存器中的指定局部并不重叠。
2.如权利要求1所述的配置向量运算系统中的协作线程束的装置,其特征在于,所述装置不预先为每个所述线程束配置关联于所述通用寄存器中的全部或指定局部。
3.如权利要求1所述的配置向量运算系统中的协作线程束的装置,其特征在于,所述线程束包含第一线程束和第二线程束,所述线程束指令调度器从指令缓存获取所述第一线程束的屏障指令时,让所述第一线程束进入等待状态,以及所述线程束指令调度器从所述指令缓存获取所述第二线程束的屏障指令时,唤醒所述第一线程束,其中所述第一线程束和所述第二线程束被配置关联于所述通用寄存器中重叠的一块。
4.如权利要求3所述的配置向量运算系统中的协作线程束的装置,其特征在于,所述第一线程束为消费者线程束,所述第二线程束为生产者线程束。
5.如权利要求1所述的配置向量运算系统中的协作线程束的装置,其特征在于,所述线程束之间互相独立,每个所述线程束被配置关联于所述通用寄存器中不重叠的一块。
6.如权利要求1所述的配置向量运算系统中的协作线程束的装置,其特征在于,所述线程束指令调度器为每个所述线程束维护独立的程序计数器。
7.一种配置向量运算系统中的协作线程束的方法,执行在流多处理器之中,其特征在于,包含:
依据程序核中的线程束分配指令让多个线程束中的每一个包含所述程序核中的一部分相对独立指令;
依据软件在执行时的配置让所述多个线程束中的每个通过算术逻辑单元存取通用寄存器中的全部或指定局部的数据;以及
通过所述算术逻辑单元完成每个上述线程束的运算,
其中所述方法还包括:
依据多个各线程束资源寄存器的内容让每个所述线程束的数据存取映射到所述通用寄存器中的指定局部,并且其中不同的所述线程束间映射的所述通用寄存器中的指定局部并不重叠。
8.如权利要求7所述的配置向量运算系统中的协作线程束的方法,其特征在于,所述流多处理器不预先为每个所述线程束配置关联于所述通用寄存器中的全部或指定局部。
9.如权利要求7所述的配置向量运算系统中的协作线程束的方法,其特征在于,所述线程束包含第一线程束和第二线程束,所述第一线程束和所述第二线程束被配置关联于所述通用寄存器中重叠的一块,所述方法包含:
从指令缓存获取所述第一线程束的屏障指令时,让所述第一线程束进入等待状态;以及
从所述指令缓存获取所述第一线程束的屏障指令时,唤醒所述第二线程束。
10.如权利要求9所述的配置向量运算系统中的协作线程束的方法,其特征在于,所述第一线程束为消费者线程束,所述第二线程束为生产者线程束。
11.如权利要求7所述的配置向量运算系统中的协作线程束的方法,其特征在于,包含:
为每个所述线程束维护独立的程序计数器。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210479765.2A CN114816529A (zh) | 2020-10-21 | 2020-10-21 | 配置向量运算系统中的协作线程束的装置和方法 |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011131448.9A CN112214243B (zh) | 2020-10-21 | 2020-10-21 | 配置向量运算系统中的协作线程束的装置和方法 |
CN202210479765.2A CN114816529A (zh) | 2020-10-21 | 2020-10-21 | 配置向量运算系统中的协作线程束的装置和方法 |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011131448.9A Division CN112214243B (zh) | 2020-10-21 | 2020-10-21 | 配置向量运算系统中的协作线程束的装置和方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114816529A true CN114816529A (zh) | 2022-07-29 |
Family
ID=74056291
Family Applications (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210479765.2A Pending CN114816529A (zh) | 2020-10-21 | 2020-10-21 | 配置向量运算系统中的协作线程束的装置和方法 |
CN202210480192.5A Pending CN114968358A (zh) | 2020-10-21 | 2020-10-21 | 配置向量运算系统中的协作线程束的装置和方法 |
CN202011131448.9A Active CN112214243B (zh) | 2020-10-21 | 2020-10-21 | 配置向量运算系统中的协作线程束的装置和方法 |
Family Applications After (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210480192.5A Pending CN114968358A (zh) | 2020-10-21 | 2020-10-21 | 配置向量运算系统中的协作线程束的装置和方法 |
CN202011131448.9A Active CN112214243B (zh) | 2020-10-21 | 2020-10-21 | 配置向量运算系统中的协作线程束的装置和方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20220121444A1 (zh) |
CN (3) | CN114816529A (zh) |
TW (1) | TWI793568B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114035847B (zh) * | 2021-11-08 | 2023-08-29 | 海飞科(南京)信息技术有限公司 | 用于并行执行核心程序的方法和装置 |
CN117472600A (zh) * | 2022-05-26 | 2024-01-30 | 上海壁仞科技股份有限公司 | 指令执行方法、处理器和电子装置 |
CN116483536A (zh) * | 2023-04-24 | 2023-07-25 | 上海芷锐电子科技有限公司 | 数据调度方法、计算芯片及电子设备 |
CN116360708B (zh) * | 2023-05-26 | 2023-08-11 | 摩尔线程智能科技(北京)有限责任公司 | 数据写入方法及装置、电子设备和存储介质 |
Family Cites Families (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6925643B2 (en) * | 2002-10-11 | 2005-08-02 | Sandbridge Technologies, Inc. | Method and apparatus for thread-based memory access in a multithreaded processor |
US7472258B2 (en) * | 2003-04-21 | 2008-12-30 | International Business Machines Corporation | Dynamically shared group completion table between multiple threads |
US7290261B2 (en) * | 2003-04-24 | 2007-10-30 | International Business Machines Corporation | Method and logical apparatus for rename register reallocation in a simultaneous multi-threaded (SMT) processor |
TWI296387B (en) * | 2005-12-13 | 2008-05-01 | Nat Univ Tsing Hua | Scheduling method for remote object procedure call and system thereof |
US8321849B2 (en) * | 2007-01-26 | 2012-11-27 | Nvidia Corporation | Virtual architecture and instruction set for parallel thread computing |
US7685409B2 (en) * | 2007-02-21 | 2010-03-23 | Qualcomm Incorporated | On-demand multi-thread multimedia processor |
US9639479B2 (en) * | 2009-09-23 | 2017-05-02 | Nvidia Corporation | Instructions for managing a parallel cache hierarchy |
US10360039B2 (en) * | 2009-09-28 | 2019-07-23 | Nvidia Corporation | Predicted instruction execution in parallel processors with reduced per-thread state information including choosing a minimum or maximum of two operands based on a predicate value |
US9727338B2 (en) * | 2012-11-05 | 2017-08-08 | Nvidia Corporation | System and method for translating program functions for correct handling of local-scope variables and computing system incorporating the same |
US20140258680A1 (en) * | 2013-03-05 | 2014-09-11 | Qualcomm Incorporated | Parallel dispatch of coprocessor instructions in a multi-thread processor |
CN103955356B (zh) * | 2014-04-24 | 2017-05-10 | 深圳中微电科技有限公司 | 多线程处理器中通用寄存器组的分配方法及装置 |
US9804666B2 (en) * | 2015-05-26 | 2017-10-31 | Samsung Electronics Co., Ltd. | Warp clustering |
KR102545176B1 (ko) * | 2015-11-16 | 2023-06-19 | 삼성전자주식회사 | 레지스터 관리 방법 및 장치 |
CN106648545A (zh) * | 2016-01-18 | 2017-05-10 | 天津大学 | 一种gpu中用于分支处理的寄存器文件结构 |
US10115175B2 (en) * | 2016-02-19 | 2018-10-30 | Qualcomm Incorporated | Uniform predicates in shaders for graphics processing units |
US10592466B2 (en) * | 2016-05-12 | 2020-03-17 | Wisconsin Alumni Research Foundation | Graphic processor unit providing reduced storage costs for similar operands |
US20170371662A1 (en) * | 2016-06-23 | 2017-12-28 | Intel Corporation | Extension of register files for local processing of data in computing environments |
US10929944B2 (en) * | 2016-11-23 | 2021-02-23 | Advanced Micro Devices, Inc. | Low power and low latency GPU coprocessor for persistent computing |
US10558460B2 (en) * | 2016-12-14 | 2020-02-11 | Qualcomm Incorporated | General purpose register allocation in streaming processor |
US20180203694A1 (en) * | 2017-01-16 | 2018-07-19 | Intel Corporation | Execution Unit with Selective Instruction Pipeline Bypass |
US10866806B2 (en) * | 2017-11-14 | 2020-12-15 | Nvidia Corporation | Uniform register file for improved resource utilization |
US11163578B2 (en) * | 2018-02-23 | 2021-11-02 | Intel Corporation | Systems and methods for reducing register bank conflicts based on a software hint bit causing a hardware thread switch |
US11138009B2 (en) * | 2018-08-10 | 2021-10-05 | Nvidia Corporation | Robust, efficient multiprocessor-coprocessor interface |
US10698689B2 (en) * | 2018-09-01 | 2020-06-30 | Intel Corporation | Recompiling GPU code based on spill/fill instructions and number of stall cycles |
GB2580327B (en) * | 2018-12-31 | 2021-04-28 | Graphcore Ltd | Register files in a multi-threaded processor |
WO2020177229A1 (en) * | 2019-03-01 | 2020-09-10 | Huawei Technologies Co., Ltd. | Inter-warp sharing of general purpose register data in gpu |
WO2020186630A1 (en) * | 2019-03-21 | 2020-09-24 | Huawei Technologies Co., Ltd. | Serializing divergent accesses using peeling |
CN110716755B (zh) * | 2019-10-14 | 2023-05-02 | 浙江诺诺网络科技有限公司 | 一种线程退出方法、装置、设备及可读存储介质 |
CN111124492B (zh) * | 2019-12-16 | 2022-09-20 | 成都海光微电子技术有限公司 | 指令生成方法、装置、指令执行方法、处理器及电子设备 |
US11934867B2 (en) * | 2020-07-23 | 2024-03-19 | Nvidia Corp. | Techniques for divergent thread group execution scheduling |
-
2020
- 2020-10-21 CN CN202210479765.2A patent/CN114816529A/zh active Pending
- 2020-10-21 CN CN202210480192.5A patent/CN114968358A/zh active Pending
- 2020-10-21 CN CN202011131448.9A patent/CN112214243B/zh active Active
-
2021
- 2021-04-14 TW TW110113318A patent/TWI793568B/zh active
- 2021-07-02 US US17/366,588 patent/US20220121444A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
TWI793568B (zh) | 2023-02-21 |
CN114968358A (zh) | 2022-08-30 |
US20220121444A1 (en) | 2022-04-21 |
CN112214243A (zh) | 2021-01-12 |
TW202217601A (zh) | 2022-05-01 |
CN112214243B (zh) | 2022-05-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112214243B (zh) | 配置向量运算系统中的协作线程束的装置和方法 | |
KR101759266B1 (ko) | 프로세서들에 걸쳐 데이터-병렬 쓰레드들을 지닌 프로세싱 로직을 매핑하는 방법 | |
US9830156B2 (en) | Temporal SIMT execution optimization through elimination of redundant operations | |
US8639882B2 (en) | Methods and apparatus for source operand collector caching | |
JP5422614B2 (ja) | 低ポート数メモリーを用いたマルチポートメモリーのシミュレート | |
US10037228B2 (en) | Efficient memory virtualization in multi-threaded processing units | |
CN108108188B (zh) | 用于通过使用由可分区引擎实例化的虚拟核来支持代码块执行的存储器片段 | |
US10169091B2 (en) | Efficient memory virtualization in multi-threaded processing units | |
US20150293785A1 (en) | Processing accelerator with queue threads and methods therefor | |
TW201337751A (zh) | 執行成型記憶體存取作業的系統和方法 | |
US9207919B2 (en) | System, method, and computer program product for bulk synchronous binary program translation and optimization | |
US20220043770A1 (en) | Neural network processor, chip and electronic device | |
CN112199119B (zh) | 向量运算装置 | |
KR20160113677A (ko) | 다수의 스트랜드들로부터 명령어들을 디스패칭하기 위한 프로세서 로직 및 방법 | |
Berezovskyi et al. | Faster makespan estimation for GPU threads on a single streaming multiprocessor | |
KR100463642B1 (ko) | 보조프로세서를 이용한 멀티미디어 처리를 위한 가속장치 | |
CN117501254A (zh) | 使用近存储器计算为复杂操作提供原子性 | |
Nemirovsky | Disc, a dynamic instruction stream computer | |
CN112230931B (zh) | 适用于图形处理器的二次卸载的编译方法、装置和介质 | |
US11822541B2 (en) | Techniques for storing sub-alignment data when accelerating Smith-Waterman sequence alignments | |
CN112214443B (zh) | 设置于图形处理器中的二次卸载装置和方法 | |
US11550584B1 (en) | Implementing specialized instructions for accelerating Smith-Waterman sequence alignments | |
JP2023552789A (ja) | 算術論理演算ユニット用のソフトウェアベースの命令スコアボード | |
Kim et al. | GPU Design, Programming, and Trends | |
Mistry et al. | Computer Organization |
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 |