CN117667212A - 指令控制装置、方法、处理器、芯片和板卡 - Google Patents

指令控制装置、方法、处理器、芯片和板卡 Download PDF

Info

Publication number
CN117667212A
CN117667212A CN202211090949.6A CN202211090949A CN117667212A CN 117667212 A CN117667212 A CN 117667212A CN 202211090949 A CN202211090949 A CN 202211090949A CN 117667212 A CN117667212 A CN 117667212A
Authority
CN
China
Prior art keywords
write
instruction
write request
read
request
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
Application number
CN202211090949.6A
Other languages
English (en)
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.)
Cambricon Technologies Corp Ltd
Original Assignee
Cambricon Technologies Corp 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 Cambricon Technologies Corp Ltd filed Critical Cambricon Technologies Corp Ltd
Priority to CN202211090949.6A priority Critical patent/CN117667212A/zh
Publication of CN117667212A publication Critical patent/CN117667212A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Advance Control (AREA)

Abstract

本披露公开了一种指令控制装置、指令控制方法、处理器、芯片和板卡。该处理器可以作为计算装置包括在组合处理装置中,该组合处理装置还可以包括接口装置和其他处理装置。该计算装置与其他处理装置进行交互,共同完成用户指定的计算操作。组合处理装置还可以包括存储装置,该存储装置分别与计算装置和其他处理装置连接,用于存储该计算装置和其他处理装置的数据。本披露的方案提供了指令控制方法,其可以提升指令级并行度,提高处理效率。

Description

指令控制装置、方法、处理器、芯片和板卡
技术领域
本披露一般涉及处理器领域。更具体地,本披露涉及一种指令控制装置、指令控制方法、处理器、芯片和板卡。
背景技术
随着计算机技术的发展,处理器的运算能力持续提升,单核处理器通过提升频率来提升性能的设计遇到了功耗墙的瓶颈。多核处理器已经逐渐占领市场。在多核处理器中,任务可以下发给不同的核心进行处理以提高程序的并行性。而在单个处理器核中,不同进程也可以同时下发给多个运算单元进行处理。
指令级并行在充分利用多个运算单元和/或多个处理器器的运算能力方面发挥了重要作用。然而,指令之间存在着各种相关,包括结构相关、数据相关、控制相关等。指令相关很容易引起指令流水线的阻塞,限制了指令级并行的优势发挥。
有鉴于此,亟需一种能够提高指令级并行的指令控制方案,尽可能挖掘指令并行的潜能,进一步提高处理器的运算效率。
发明内容
为了至少解决如上所提到的一个或多个技术问题,本披露在多个方面中提出了指令控制方案。
在第一方面中,本披露提供一种指令控制装置,包括:译码器,用于对运算指令进行译码;读请求门控,用于阻塞译码产生的读请求;以及地址比较器,用于确定所述读请求与其前序指令之间是否存在地址依赖关系;并且所述读请求门控进一步用于响应于所述地址比较器确定所述读请求与其前序指令之间不存在地址依赖关系,释放所述读请求。
在第二方面中,本披露提供一种指令控制方法,包括:对运算指令进行译码;阻塞译码产生的读请求;确定所述读请求与其前序指令之间是否存在地址依赖关系;以及响应于所述读请求与其前序指令之间不存在地址依赖关系,释放所述读请求。
在第三方面中,本披露提供一种处理器,包括前述第一方面的指令控制装置。在第四方面中,本披露提供一种芯片,包括前述第三方面的处理器。在第五方面中,本披露提供一种板卡,包括前述第四方面的芯片。
通过如上所提供的指令控制装置、方法、处理器、芯片和板卡,本披露实施例针对运算指令进行地址依赖关系判断,以控制是否可以提前释放。具体地,在运算指令所对应的读请求与前序指令之间不存在地址依赖关系时,释放读请求,从而提升指令级并行度和处理器性能。
附图说明
通过参考附图阅读下文的详细描述,本披露示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本披露的若干实施方式,并且相同或对应的标号表示相同或对应的部分,其中:
图1示出本披露实施例的板卡的结构图;
图2示出本披露实施例的组合处理装置的结构图;
图3示出本披露实施例的单核计算装置的处理器核的内部结构示意图;
图4示出本披露实施例的多核计算装置的内部结构简化示意图;
图5示出根据本披露一些实施例的指令控制***的示例性内部结构图;
图6示出了根据本披露实施例的指令控制方法的示例性流程图。
具体实施方式
下面将结合本披露实施例中的附图,对本披露实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本披露一部分实施例,而不是全部的实施例。基于本披露中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本披露保护的范围。
应当理解,本披露的权利要求、说明书及附图中可能出现的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。本披露的说明书和权利要求书中使用的术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在此本披露说明书中所使用的术语仅仅是出于描述特定实施例的目的,而并不意在限定本披露。如在本披露说明书和权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。还应当进一步理解,在本披露说明书和权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
如在本说明书和权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。
下面结合附图来详细描述本披露的具体实施方式。
示例性硬件环境
图1示出本披露实施例的一种板卡10的结构示意图。如图1所示,板卡10包括芯片101,其是一种***级芯片(System on Chip,SoC),或称片上***,集成有一个或多个组合处理装置,组合处理装置是一种人工智能运算单元,用以支持各类深度学***台的存储能力和计算能力有很高的要求,此实施例的板卡10适用在云端智能应用,具有庞大的片外存储、片上存储和强大的计算能力。
芯片101通过对外接口装置102与外部设备103相连接。外部设备103例如是服务器、计算机、摄像头、显示器、鼠标、键盘、网卡或wifi接口等。待处理的数据可以由外部设备103通过对外接口装置102传递至芯片101。芯片101的计算结果可以经由对外接口装置102传送回外部设备103。根据不同的应用场景,对外接口装置102可以具有不同的接口形式,例如PCIe接口等。
板卡10还包括用于存储数据的存储器件104,其包括一个或多个存储单元105。存储器件104通过总线与控制器件106和芯片101进行连接和数据传输。板卡10中的控制器件106配置用于对芯片101的状态进行调控。为此,在一个应用场景中,控制器件106可以包括单片机(Micro Controller Unit,MCU)。
图2是示出此实施例的芯片101中的组合处理装置的结构图。如图2中所示,组合处理装置20包括计算装置201、接口装置202、处理装置203和存储装置204。
计算装置201配置成执行用户指定的操作,主要实现为单核智能处理器或者多核智能处理器,用以执行深度学习或机器学习的计算,其可以通过接口装置202与处理装置203进行交互,以共同完成用户指定的操作。
接口装置202用于在计算装置201与处理装置203间传输数据和控制指令。例如,计算装置201可以经由接口装置202从处理装置203中获取输入数据,写入计算装置201片上的存储装置。进一步,计算装置201可以经由接口装置202从处理装置203中获取控制指令,写入计算装置201片上的控制缓存中。替代地或可选地,接口装置202也可以读取计算装置201的存储装置中的数据并传输给处理装置203。
处理装置203作为通用的处理装置,执行包括但不限于数据搬运、对计算装置201的开启和/或停止等基本控制。根据实现方式的不同,处理装置203可以是中央处理器(central processing unit,CPU)、图形处理器(graphics processing unit,GPU)或其他通用和/或专用处理器中的一种或多种类型的处理器,这些处理器包括但不限于数字信号处理器(digital signal processor,DSP)、专用集成电路(application specificintegrated circuit,ASIC)、现场可编程门阵列(field-programmable gate array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,并且其数目可以根据实际需要来确定。如前所述,仅就本披露的计算装置201而言,其可以视为具有单核结构或者同构多核结构。然而,当将计算装置201和处理装置203整合共同考虑时,二者视为形成异构多核结构。
存储装置204用以存储待处理的数据,其可以是DRAM,为DDR内存,大小通常为16G或更大,用于保存计算装置201和/或处理装置203的数据。
图3示出了图2中的计算装置201为单核装置时处理核的内部结构示意图。计算装置301用以处理计算机视觉、语音、自然语言、数据挖掘等输入数据,计算装置301包括三大模块:控制模块31(也称为控制器)、运算模块32(也称为运算器)及存储模块33(也称为存储器)。
控制模块31用以协调并控制运算模块32和存储模块33的工作,以完成深度学习的任务,其包括取指单元(instruction fetch unit,IFU)311及指令译码单元(instructiondecode unit,IDU)312。取指单元311用以获取来自处理装置203的指令,指令译码单元312则将获取的指令进行译码,并将译码结果作为控制信息发送给运算模块32和存储模块33。
运算模块32包括向量运算单元321及矩阵运算单元322。向量运算单元321用以执行向量运算,可支持向量乘、加、非线性变换等复杂运算;矩阵运算单元322负责深度学习算法的核心计算,即矩阵乘及卷积。
存储模块33用来存储或搬运相关数据,包括神经元存储单元(neuron RAM,NRAM)331、权值存储单元(weight RAM,WRAM)332、直接内存访问模块(direct memory access,DMA)333。NRAM 331用以存储输入神经元、输出神经元和计算后的中间结果;WRAM 332则用以存储深度学习网络的卷积核,即权值;DMA 333通过总线34连接DRAM 204,负责计算装置301与DRAM 204间的数据搬运。应当注意,此处的NRAM和WRAM可以是同一存储器在逻辑存储空间上划分形成的两个存储区域,也可以是两个独立的存储器,此处不做具体限定。
图4示出了图2中的计算装置201为多核时的内部结构简化示意图。多核计算装置可以用层次化硬件模型来进行抽象。如图所示,多核计算装置400作为一个片上***,其包括至少一个计算簇(cluster),每个计算簇又包括多个处理器核,换言之,多核计算装置400是以片上***-计算簇-处理器核的层次所构成的。
以片上***的层级来看,如图所示,多核计算装置400包括外部存储控制器41、外设通信模块42、片上互联模块43、全局同步模块44以及多个计算簇45。
外部存储控制器41可以有多个,在图中示例性地展示2个,其用以响应处理器核发出的访问请求,访问外部存储设备(例如图2中的DRAM 204),从而自片外读取数据或是将数据写入。外设通信模块42用以通过接口装置(图2的202)接收来自处理装置(图2的203)的控制信号,启动计算装置(图2的201)执行任务。片上互联模块43将外部存储控制器41、外设通信模块42及多个计算簇45连接起来,用以在各个模块间传输数据和控制信号。全局同步模块44例如是一种全局同步屏障控制器(globalbarriercontroller,GBC),用以协调各计算簇的工作进度,确保信息的同步。多个计算簇45是多核计算装置400的计算核心,在图中示例性地展示每个裸片上4个,随着硬件的发展,本披露的多核计算装置400还可以包括8个、16个、64个、甚至更多的计算簇45。计算簇45用以高效地执行深度学习算法。
以计算簇的层级来看,如图所示,每个计算簇45包括多个处理器核406作为控制和计算单元,另外还有共享存储核407作为存储单元。进一步地,每个计算簇内还可以包括本地同步模块412,用以协调计算簇内各个处理器核的工作进度,确保信息的同步。处理器核406在图中示例性地展示4个,本披露不限制处理器核406的数量。
存储核407主要用以存储和通信,即存储处理器核406间的共享数据或中间结果、以及执行计算簇45与DRAM 204之间的通信、计算簇45间彼此的通信、处理器核406间彼此的通信等。在其他实施例中,存储核407具有标量运算的能力,用以执行标量运算。
存储核407包括共享存储单元(SMEM)408、广播总线409、计算簇直接内存访问模块(cluster direct memory access,CDMA)410及全局直接内存访问模块(global directmemory access,GDMA)411。SMEM 408承担高性能数据中转站的角色,在同一个计算簇45内不同处理器核406之间所复用的数据不需要通过处理器核406各自向DRAM 204获得,而是经SMEM 408在处理器核406间中转,存储核407只需要将复用的数据从SMEM 408迅速分发给多个处理器核406即可,以提高核间通讯效率,亦大大减少片上片外的输入/输出访问。广播总线409、CDMA 410及GDMA 411则分别用来执行处理器核406间的通信、计算簇45间的通信和计算簇45与DRAM 204的数据传输。
以处理器核的层级来看,单个处理器核的结构可以类似于图3所示的单核计算装置的结构图,此处不再详述。
指令控制方案
如前面所提到的,指令之间存在着各种相关。指令的相关通常是指数据相关。在程序中,如果两条指令访问同一寄存器或内存单元,而且这两条指令中至少有一条是写该寄存器或内存单元的指令,则这两条指令之间存在数据相关。
数据相关可以根据冲突访问读和写的次序分为三种:写后读相关(ReadAfterWrite,RAW),就是后面指令要用到前面指令所写的数据,这是最常见的类型,也称为真相关;写后写相关(WriteAfterWrite,WAW),也称为输出相关,即两条指令写同一个单元,在乱序执行的结构中如果后面的指令先写,前面的指令后写,就会产生错误的结果;读后写相关(WriteAfterRead,WAR),在乱序执行的结构或者读写指令流水级不一样时,如果后面的写指令执行得快,在前面的读指令读数之前就把目标单元原来的数据覆盖了,导致读数指令读到了该单元“未来”的值,从而引起错误。
当前针对运算指令的处理方式通常是将运算指令缓存在运算指令缓冲队列中,队列内的运算指令按顺序执行运算,也即前一条运算指令执行完后,才能执行下一条运算指令。这种方式限制了潜在能够并行执行的运算指令的下发,阻碍了处理效率的提升。
有鉴于此,本披露实施例提供了一种指令控制方案,其针对运算指令间的数据依赖性进行维护,判断前后指令的读写地址有没有依赖关系,来确定是否能够并行执行运算指令,由此提升指令并行度。运算指令可以包括各类运算类型的指令,诸如但不限于加法运算、乘法运算、卷积运算等各类运算指令。通常而言,运算指令需要从内存(例如图3的NRAM、WRAM等)读取数据,执行运算,然后写回运算结果。
图5示出了根据本披露一些实施例的实施指令控制方案的指令控制***的示例性内部结构图。
如图所示,指令控制***500包括指令控制装置510、片上存储电路520和运算电路530。大体上,指令控制装置510对运算指令进行译码,根据译码结果,从片上存储电路520上读取相应的数据并输送给运算电路530,运算电路530针对数据执行运算指令所对应的运算,然后将运算结果写回片上存储电路520。
更具体地,指令控制装置510包括译码器511,用于对运算指令进行译码。在人工智能运算中,神经网络中绝大部分运算都是对向量、矩阵或更高维的张量进行操作。通常,运算指令需要读取数据,再针对数据执行运算。因此,对运算指令的译码会产生读请求,以读取待运算的数据。
指令控制装置510还包括读请求门控512,用于阻塞上述译码产生的读请求。为了能够并行执行运算指令,首先要判断当前指令的读请求是否与前序指令之间存在数据相关,因此,在下发读请求之前,将其阻塞以进行进一步的判断。
指令控制装置510还包括地址比较器513,用于确定读请求与其前序指令之间是否存在地址依赖关系。具体地,读请求门控512可以向地址比较器513查询当前阻塞的读请求是否与前序指令之间存在数据相关,也即是否存在地址依赖关系。地址比较器513根据相关的地址记录信息,执行比较,并将比较结果返回给读请求门控512。继而,读请求门控512可以根据查询所返回的结果,判断是否继续阻塞还是释放。
在一些实施例中,读请求门控512响应于地址比较器513确定当前阻塞的读请求与其前序指令之间不存在地址依赖关系,释放该读请求,以从片上存储电路520中读取数据。
由此,通过上述地址依赖关系的判断,可以支持当前运算指令提前下发,从而与其前序指令并行执行,而无需等待前序指令的完成。
如前面所提到的,数据相关主要包括写后读RAW相关、写后写WAW相关和读后写WAR相关。因此,在上述读请求与其前序指令之间的地址依赖关系判断中只需要确定写后读RAW相关,也即,只需要确定读请求与其前序指令的写请求之间是否存在地址依赖关系。
为此,在一些实施例中,指令控制装置510还可以包括写请求队列514,用于缓存运算指令的写请求。所缓存的写请求的信息可以包括该写请求要写入的地址范围。
地址范围例如可以是写请求所涉及的操作数或数据块在存储器上的存储空间范围。取决于所使用的粒度,地址范围可以有不同表现形式。
在一些实施例中,地址范围例如可以通过操作数或所操作的数据块所占用的存储空间的最小地址值和最大地址值来表征,操作数或数据块所占用的存储空间可以是连续的,也可以允许其中存在空闲部分或空泡部分。
在另一些实施例中,当操作数为多维数据并且维度之间的存储不连续时,地址范围可以是该多维数据各个维度的最小地址值和最大地址值,或者根据维度的存储连续性而分割的多个空间块的最小地址值和最大地址值。
更进一步地,在又一些实施例中,地址范围可以精确至操作数中以字节为单位的数据的地址范围。
在再一些实施例中,地址范围也可以比较粗略,例如以数据块的存储资源名称来限定。例如,图3中的NRAM或WRAM等。
可以理解,地址范围越精确,所需要存储的信息越多,由此占据的存储面积开销也越大。因此,可以根据运算性能需求和/或存储面积开销来确定表征地址范围的粒度。例如,极端情况下,在不考虑存储面积开销时,可以将地址范围精确到字节,则基于字节判断与前序指令的数据依赖关系,可以最大限度地实现指令的并行执行,提升运算性能。而在存储面积受限时,可以仅使用存储空间的最小地址值和最大地址值来表征地址范围,由此在满足一定运行性能的情况下,也不会过多占据存储面积。
写请求队列514可以对所缓存的写请求进行维护。
在一些实施例中,运算指令的译码可以直接产生写请求,此时可以将译码器511产生的写请求缓存到写请求队列514中。
在另一些实施例中,有些运算指令的写请求不是通过译码器的译码产生,例如用于筛选数据的filter指令,其写请求不是通过译码产生而是根据筛选的模式(mask)产生,这样写请求队列无法提前接收到写请求的地址。在又一些实施例中,有些运算指令不存在写请求,但是仍然会需要操作对应的存储地址范围。在这些实施例中,可以在译码时,直接为这种运算指令生成预定的写请求以***在写请求队列514中。预定的写请求可以默认与所有读请求均存在地址依赖关系。由此,只能等待该运算指令执行完成才能释放地址依赖关系。例如,可以为filter指令在写请求队列中***一条dummy写请求,在判断地址交叠时认为filter的dummy写请求和所有读请求都有地址交叠。
在再一些实施例中,有的运算指令内部需要进行多次的读数-处理-写数过程,例如pool_bp(池化)指令、随机数指令等,并且前一次写数的结果有可能被下一次读数访问。针对这种包含多次读写过程的运算指令,可以将运算指令拆分为多个子指令。拆分的依据是只要在子指令内部能够天然保证读写之间的顺序即可。例如,每条子指令对应一次读写过程,每条子指令内部的读写保序。针对每条子指令,可以独立地产生读请求和写请求,以在后续执行中,将同一指令内的不同子指令视为不同指令,进行上述地址依赖关系的确定。
此时,译码器511可以为每条子指令分配独立的标识ID,从而在依赖关系判断时,将同一条指令的不同子指令视为不同指令,在队列中进行依赖关系的判断。在一些实现中,例如可以将译码器511内部的切分(slice)操作作为子指令进行拆分,从而简化译码的实现。
进一步地,在一些实施例中,响应于接收到写请求的写返回信号,可以将对应的写请求移出写请求队列514。接收到写返回信号,代表该写请求已经执行完成,也即确保数据已经写入片上存储电路520,相应的存储资源也已释放,因此,无需继续存放在写请求队列514中。
基于写请求队列中维护的写请求信息,地址比较器513可以确定当前阻塞的读请求与其前序指令之间是否存在地址依赖关系。也即,对于每一个读数据端口,在读请求发射之前,需要与写请求队列进行比较。只有当前序指令的所有写请求都已进入过写请求队列,并且写请求队列中前序指令的所有写请求和该读请求没有地址依赖时,该读请求才可以发射。
具体地,地址比较器513可以向写请求队列514查询当前读请求所属的运算指令的前序指令的所有写请求是否都存入过写请求队列;将写请求队列514中前序指令的所有写请求与当前读请求的地址进行比较;以及当前序指令的所有写请求都存入过写请求队列,并且写请求队列中前序指令的所有写请求与当前读请求之间不存在地址交叠时,确定该读请求与其前序指令之间不存在地址依赖关系。此时,地址比较器513可以向读请求门控512发送释放信号,以控制读请求门控512释放当前阻塞的读请求。
在一些实施例中,针对包括多个写操作数的运算指令,可以为每个写操作数生成对应的写请求并存入写请求队列514中,以在后续执行中,将同一指令内的不同写操作数的写请求均用于上述地址依赖关系的确定。同一指令的不同写操作数的写请求可以放入同一写请求队列中,也可以放入不同的写请求队列中。
在一些实现中,可以设置多个写请求队列,每个写请求队列对应不同的写端口。例如,现有的指令通常至多具有两个写操作数,因此可以设置两个写请求队列。在针对当前阻塞的读请求判断地址依赖关系时,需要同时比较所有的写请求队列,在所有写请求队列都没有依赖时才可以释放读请求。
同一指令的两个写操作数放入不同的写请求队列中,以通过不同的写端口执行写操作,也即每个写操作数都有独立的写地址队列。对于只有一个目的操作数(写操作数)的指令,写操作都是经过同样的写端口,因此可以保证写操作全部是顺序的,此时对指令中的写请求顺序连续下发即可。对于有多个写操作数的指令,通常认为同一条指令内部的两个写操作数之间是没有依赖的,但是需要保证指令切换时不同写端口之间的顺序,也即需要保证写后写WAW相关。为了降低硬件开销,两个写请求队列之间并不进行地址比较,只保证前一条指令的写操作全部完成后下一条指令的写请求才能开始下发。也即,写请求下发的条件是另一个写端口的请求队列中没有之前指令的写请求。
在这些实施例中,写请求队列进一步配置用于:仅当其余写端口的写请求队列中不存在前序指令的写请求时,才向当前写端口下发当前指令的写请求。
为了便于理解运算指令的执行过程,图5中还示出了运算指令的写请求和读请求的后续执行过程中所涉及的部件。
如图所示,指令控制装置510中还可以包括写请求合并单元515。当运算电路530执行完运算处理时,将需要写入的数据传输给写请求合并单元515。写请求合并单元515从写请求队列514中获取对应的写地址,将写地址与写入数据合并成写请求,发送到写端口执行写操作,也即将写入数据写入到片上存储电路520的对应写地址中。当执行完写操作后,相应的写返回信号会返回给写请求队列514,以删除该已执行完成的写请求。
另一方面,当运算指令的读请求从读请求门控512处被释放时,其通过读端口执行读操作,也即从片上存储电路520的读地址中读出相应的数据。读出的数据可以缓存在读回缓存器516中,之后再传输给运算电路530。
如前面所提到,数据相关还包括读后写WAR相关。本披露实施例的指令控制方案也可以确保WAR相关的正确性。例如,对于按元素(element-wise)类型的向量指令,其总是在最后一次读数据返回后才能产生最后一次的写数据进行写入,而由于写入是顺序的,因此下一条指令的写总是晚于当前指令的写,进而也晚于当前指令的读,由此确保了WAR相关。而对于没有写请求的指令(例如reduce规约指令)或者不是在译码时生成写请求的指令(例如filter筛选指令),也即不能保证写操作在读操作之后的指令,如前面所提到的,通过***预定写请求(例如dummy写请求)到写请求队列514中,在所有读操作完成之后释放,这样就可以维护和element-wise类型的指令相同的规则,也即确保了WAR相关。
综上,通过将运算指令细化处理,为其译码生成的读请求进行地址依赖判断,可以在没有依赖关系的时候及时释放,从而提高运算指令的并行度,提高处理效率。可以看出,本披露实施例在较小的硬件开销下,可以提高指令执行并行度,大幅提升处理器性能。
图6示出了根据本披露实施例的指令控制方法的示例性流程图。
如图所示,在步骤610中,对运算指令进行译码。该步骤例如可以由图5的译码器511来执行。
在一些实施例中,对运算指令的译码可以包括:针对不存在写请求或其写请求不会通过译码产生的运算指令,在写请求队列中为该运算指令***预定的写请求。预定的写请求默认与所有读请求均存在地址依赖关系。
在另一些实施例中,对运算指令的译码可以包括:针对包括多个写操作数的运算指令,为每个写操作数生成对应的写请求并存入写请求队列中,以在后续执行中,将同一指令内的不同写操作数的写请求均用于地址依赖关系的确定。
在又一些实施例中,对运算指令的译码可以包括:针对包含多次读写过程的运算指令,将该运算指令拆分为多个子指令,其中每条子指令对应一次读写过程,并且每条子指令内部的读写保序;以及针对每条子指令独立地产生读请求和写请求,以在后续执行中,将同一指令内的不同子指令视为不同指令,进行上述地址依赖关系的确定。
接着,在步骤620中,阻塞译码产生的读请求。该步骤例如可以由图5的读请求门控512来执行。
接着,在步骤630中,确定所阻塞的读请求与其前序指令之间是否存在地址依赖关系。该步骤例如可以由图5的地址比较器513来执行。
读请求的冲突主要在于RAW相关。因此,为了确保RAW相关,可以记录前序指令的写地址。具体地,可以将运算指令的写请求存入写请求队列中。写请求队列中的写请求进行实时的维护。例如,响应于接收到写请求的写返回信号,将对应的写请求移出写请求队列。
在一些实施例中,确定当前阻塞的读请求与其前序指令之间是否存在地址依赖关系可以包括:判断当前运算指令的前序指令的所有写请求是否都存入过写请求队列;判断写请求队列中前序指令的所有写请求与当前所阻塞的读请求之间是否存在地址依赖关系;以及当当前运算指令的前序指令的所有写请求都存入过写请求队列,并且写请求队列中前序指令的所有写请求与当前所阻塞的读请求之间不存在地址依赖关系时,确定该读请求与其前序指令之间不存在地址依赖关系。
进一步地,判断写请求队列中前序指令的所有写请求与当前阻塞的读请求之间是否存在地址依赖关系,包括:当任一写请求与当前读请求的地址之间均不存在交叠时,确定与当前阻塞的读请求之间不存在地址依赖关系。
最后,在步骤640中,响应于所阻塞的读请求与其前序指令之间不存在地址依赖关系,释放该读请求。该步骤由图5的读请求门控512执行。
对于WAW相关,对于只有一个目的操作数(写操作数)的指令,写操作都是经过同样的写端口,因此可以保证写操作全部是顺序的,此时对指令中的写请求顺序连续下发即可。对于有多个写操作数的指令,通常认为同一条指令内部的两个写操作数之间是没有依赖的,但是需要保证指令切换时不同写端口之间的顺序,也即需要保证写后写WAW相关。为了降低硬件开销,两个写请求队列之间并不进行地址比较,只保证前一条指令的写操作全部完成后下一条指令的写请求才能开始下发。也即,写请求下发的条件是另一个写端口的请求队列中没有之前指令的写请求。
因此,对于多个写操作数的写请求存入不同的写请求队列中并且通过不同的写端口执行的情况,指令控制方法还可以包括:仅当其余写端口的写请求队列中不存在前序指令的写请求时,才向当前写端口下发当前指令的写请求。
本领域技术人员可以理解,前面结合图5描述的指令控制装置的各种特征可以类似地应用于图6的指令控制方法中,因此此处不再重复。
上述指令控制方法可以在单核处理器或单个处理器核内执行,也可以在多核处理器或多个处理器核之间执行,本披露实施例在此方面没有限制。上述指令控制方法可完全硬件实现(例如前面结合图5描述的硬件),也可以结合软件***的形式实现。
本披露实施例还提供了一种处理器,包括前述用于实施指令控制方法的指令控制装置。本披露实施例还提供一种芯片,其可以包括前面结合附图描述的任一实施例的处理器。进一步地,本披露还提供了一种板卡,该板卡可以包括前述芯片。
根据不同的应用场景,本披露的电子设备或装置可以包括服务器、云端服务器、服务器集群、数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、PC设备、物联网终端、移动终端、手机、行车记录仪、导航仪、传感器、摄像头、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备、视觉终端、自动驾驶终端、交通工具、家用电器、和/或医疗设备。所述交通工具包括飞机、轮船和/或车辆;所述家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机;所述医疗设备包括核磁共振仪、B超仪和/或心电图仪。本披露的电子设备或装置还可以被应用于互联网、物联网、数据中心、能源、交通、公共管理、制造、教育、电网、电信、金融、零售、工地、医疗等领域。进一步,本披露的电子设备或装置还可以用于云端、边缘端、终端等与人工智能、大数据和/或云计算相关的应用场景中。在一个或多个实施例中,根据本披露方案的算力高的电子设备或装置可以应用于云端设备(例如云端服务器),而功耗小的电子设备或装置可以应用于终端设备和/或边缘端设备(例如智能手机或摄像头)。在一个或多个实施例中,云端设备的硬件信息和终端设备和/或边缘端设备的硬件信息相互兼容,从而可以根据终端设备和/或边缘端设备的硬件信息,从云端设备的硬件资源中匹配出合适的硬件资源来模拟终端设备和/或边缘端设备的硬件资源,以便完成端云一体或云边端一体的统一管理、调度和协同工作。
需要说明的是,为了简明的目的,本披露将一些方法及其实施例表述为一系列的动作及其组合,但是本领域技术人员可以理解本披露的方案并不受所描述的动作的顺序限制。因此,依据本披露的公开或教导,本领域技术人员可以理解其中的某些步骤可以采用其他顺序来执行或者同时执行。进一步,本领域技术人员可以理解本披露所描述的实施例可以视为可选实施例,即其中所涉及的动作或模块对于本披露某个或某些方案的实现并不一定是必需的。另外,根据方案的不同,本披露对一些实施例的描述也各有侧重。鉴于此,本领域技术人员可以理解本披露某个实施例中没有详述的部分,也可以参见其他实施例的相关描述。
在具体实现方面,基于本披露的公开和教导,本领域技术人员可以理解本披露所公开的若干实施例也可以通过本文未公开的其他方式来实现。例如,就前文所述的电子设备或装置实施例中的各个单元来说,本文在考虑了逻辑功能的基础上对其进行拆分,而实际实现时也可以有另外的拆分方式。又例如,可以将多个单元或组件结合或者集成到另一个***,或者对单元或组件中的一些特征或功能进行选择性地禁用。就不同单元或组件之间的连接关系而言,前文结合附图所讨论的连接可以是单元或组件之间的直接或间接耦合。在一些场景中,前述的直接或间接耦合涉及利用接口的通信连接,其中通信接口可以支持电性、光学、声学、磁性或其它形式的信号传输。
在本披露中,作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元示出的部件可以是或者也可以不是物理单元。前述部件或单元可以位于同一位置或者分布到多个网络单元上。另外,根据实际的需要,可以选择其中的部分或者全部单元来实现本披露实施例所述方案的目的。另外,在一些场景中,本披露实施例中的多个单元可以集成于一个单元中或者各个单元物理上单独存在。
在另外一些实现场景中,上述集成的单元也可以采用硬件的形式实现,即为具体的硬件电路,其可以包括数字电路和/或模拟电路等。电路的硬件结构的物理实现可以包括但不限于物理器件,而物理器件可以包括但不限于晶体管或忆阻器等器件。鉴于此,本文所述的各类装置(例如计算装置或其他处理装置)可以通过适当的硬件处理器来实现,例如中央处理器、GPU、FPGA、DSP和ASIC等。进一步,前述的所述存储单元或存储装置可以是任意适当的存储介质(包括磁存储介质或磁光存储介质等),其例如可以是可变电阻式存储器(Resistive Random Access Memory,RRAM)、动态随机存取存储器(Dynamic RandomAccess Memory,DRAM)、静态随机存取存储器(Static Random Access Memory,SRAM)、增强动态随机存取存储器(Enhanced Dynamic Random Access Memory,EDRAM)、高带宽存储器(High Bandwidth Memory,HBM)、混合存储器立方体(Hybrid Memory Cube,HMC)、ROM和RAM等。
依据以下条款可更好地理解前述内容:
条款1、一种指令控制装置,包括:译码器,用于对运算指令进行译码;读请求门控,用于阻塞译码产生的读请求;以及地址比较器,用于确定所述读请求与其前序指令之间是否存在地址依赖关系;并且所述读请求门控进一步用于响应于所述地址比较器确定所述读请求与其前序指令之间不存在地址依赖关系,释放所述读请求。
条款2、根据条款1所述的装置,还包括:写请求队列,用于缓存运算指令的写请求,以及响应于接收到所述写请求的写返回信号,将所述写请求移出所述写请求队列。
条款3、根据条款2所述的装置,其中,所述地址比较器进一步用于按如下确定所述读请求与其前序指令之间是否存在地址依赖关系:向所述写请求队列查询所述运算指令的前序指令的所有写请求是否都存入过所述写请求队列;将所述写请求队列中前序指令的所有写请求与所述读请求的地址进行比较;以及当所述运算指令的前序指令的所有写请求都存入过所述写请求队列,并且所述写请求队列中前序指令的所有写请求与所述读请求之间不存在地址交叠时,确定所述读请求与其前序指令之间不存在地址依赖关系。
条款4、根据条款2-3任一所述的装置,其中,所述译码器进一步用于:针对不存在写请求或其写请求不会通过所述译码器产生的运算指令,为所述运算指令生成预定的写请求以***在所述写请求队列中,所述预定的写请求默认与所有读请求均存在地址依赖关系。
条款5、根据条款2-4任一所述的装置,其中,所述译码器进一步用于:针对包括多个写操作数的运算指令,为每个写操作数生成对应的写请求并存入所述写请求队列中,以在后续执行中,将同一指令内的不同写操作数的写请求均用于所述地址依赖关系的确定。
条款6、根据条款5所述的装置,其中所述写请求队列包括多个,每个写请求队列对应不同的写端口,并且所述多个写操作数的写请求存入不同的写请求队列以通过不同的写端口执行,并且所述写请求队列进一步用于:仅当其余写端口的写请求队列中不存在前序指令的写请求时,才向当前写端口下发当前指令的写请求。
条款7、根据条款1-6任一所述的装置,其中,所述译码器进一步用于:针对包含多次读写过程的运算指令,将所述运算指令拆分为多个子指令,其中每条子指令对应一次读写过程,并且每条子指令内部的读写保序;以及针对每条子指令独立地产生读请求和写请求,以在后续执行中,将同一指令内的不同子指令视为不同指令,进行所述地址依赖关系的确定。
条款8、一种处理器,包括根据条款1-7任一所述的指令控制装置。
条款9、一种芯片,包括根据条款8所述的处理器。
条款10、一种板卡,包括根据条款9所述的芯片。
条款11、一种指令控制方法,包括:对运算指令进行译码;阻塞译码产生的读请求;确定所述读请求与其前序指令之间是否存在地址依赖关系;以及响应于所述读请求与其前序指令之间不存在地址依赖关系,释放所述读请求。
条款12、根据条款11所述的方法,还包括:将运算指令的写请求存入写请求队列中;以及响应于接收到所述写请求的写返回信号,将所述写请求移出所述写请求队列。
条款13、根据条款12所述的方法,其中,确定所述读请求与其前序指令之间是否存在地址依赖关系,包括:判断所述运算指令的前序指令的所有写请求是否都存入过所述写请求队列;判断所述写请求队列中前序指令的所有写请求与所述读请求之间是否存在地址依赖关系;以及当所述运算指令的前序指令的所有写请求都存入过所述写请求队列,并且所述写请求队列中前序指令的所有写请求与所述读请求之间不存在地址依赖关系时,确定所述读请求与其前序指令之间不存在地址依赖关系。
条款14、根据条款13所述的方法,其中判断所述写请求队列中前序指令的所有写请求与所述读请求之间是否存在地址依赖关系,包括:当任一所述写请求与所述读请求的地址之间均不存在交叠时,确定与所述读请求之间不存在地址依赖关系。
条款15、根据条款12-14任一所述的方法,其中,对运算指令进行译码包括:针对不存在写请求或其写请求不会通过所述译码产生的运算指令,在所述写请求队列中为所述运算指令***预定的写请求,所述预定的写请求默认与所有读请求均存在地址依赖关系。
条款16、根据条款12-15任一所述的方法,其中,对运算指令进行译码包括:针对包括多个写操作数的运算指令,为每个写操作数生成对应的写请求并存入所述写请求队列中,以在后续执行中,将同一指令内的不同写操作数的写请求均用于所述地址依赖关系的确定。
条款17、根据条款16所述的方法,其中所述多个写操作数的写请求存入不同的写请求队列中并且通过不同的写端口执行,并且所述方法还包括:仅当其余写端口的写请求队列中不存在前序指令的写请求时,才向当前写端口下发当前指令的写请求。
条款18、根据条款11-17任一所述的方法,其中,对运算指令进行译码包括:针对包含多次读写过程的运算指令,将所述运算指令拆分为多个子指令,其中每条子指令对应一次读写过程,并且每条子指令内部的读写保序;以及针对每条子指令独立地产生读请求和写请求,以在后续执行中,将同一指令内的不同子指令视为不同指令,进行所述地址依赖关系的确定。
以上对本披露实施例进行了详细介绍,本文中应用了具体个例对本披露的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本披露的方法及其核心思想;同时,对于本领域的一般技术人员,依据本披露的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本披露的限制。

Claims (18)

1.一种指令控制装置,包括:
译码器,用于对运算指令进行译码;
读请求门控,用于阻塞译码产生的读请求;以及
地址比较器,用于确定所述读请求与其前序指令之间是否存在地址依赖关系;并且
所述读请求门控进一步用于响应于所述地址比较器确定所述读请求与其前序指令之间不存在地址依赖关系,释放所述读请求。
2.根据权利要求1所述的装置,还包括:
写请求队列,用于缓存运算指令的写请求,以及响应于接收到所述写请求的写返回信号,将所述写请求移出所述写请求队列。
3.根据权利要求2所述的装置,其中,所述地址比较器进一步用于按如下确定所述读请求与其前序指令之间是否存在地址依赖关系:
向所述写请求队列查询所述运算指令的前序指令的所有写请求是否都存入过所述写请求队列;
将所述写请求队列中前序指令的所有写请求与所述读请求的地址进行比较;以及
当所述运算指令的前序指令的所有写请求都存入过所述写请求队列,并且所述写请求队列中前序指令的所有写请求与所述读请求之间不存在地址交叠时,确定所述读请求与其前序指令之间不存在地址依赖关系。
4.根据权利要求2-3任一所述的装置,其中,所述译码器进一步用于:
针对不存在写请求或其写请求不会通过所述译码器产生的运算指令,为所述运算指令生成预定的写请求以***在所述写请求队列中,所述预定的写请求默认与所有读请求均存在地址依赖关系。
5.根据权利要求2-4任一所述的装置,其中,所述译码器进一步用于:
针对包括多个写操作数的运算指令,为每个写操作数生成对应的写请求并存入所述写请求队列中,以在后续执行中,将同一指令内的不同写操作数的写请求均用于所述地址依赖关系的确定。
6.根据权利要求5所述的装置,其中所述写请求队列包括多个,每个写请求队列对应不同的写端口,并且所述多个写操作数的写请求存入不同的写请求队列以通过不同的写端口执行,并且所述写请求队列进一步用于:
仅当其余写端口的写请求队列中不存在前序指令的写请求时,才向当前写端口下发当前指令的写请求。
7.根据权利要求1-6任一所述的装置,其中,所述译码器进一步用于:
针对包含多次读写过程的运算指令,将所述运算指令拆分为多个子指令,其中每条子指令对应一次读写过程,并且每条子指令内部的读写保序;以及
针对每条子指令独立地产生读请求和写请求,以在后续执行中,将同一指令内的不同子指令视为不同指令,进行所述地址依赖关系的确定。
8.一种处理器,包括根据权利要求1-7任一所述的指令控制装置。
9.一种芯片,包括根据权利要求8所述的处理器。
10.一种板卡,包括根据权利要求9所述的芯片。
11.一种指令控制方法,包括:
对运算指令进行译码;
阻塞译码产生的读请求;
确定所述读请求与其前序指令之间是否存在地址依赖关系;以及
响应于所述读请求与其前序指令之间不存在地址依赖关系,释放所述读请求。
12.根据权利要求11所述的方法,还包括:
将运算指令的写请求存入写请求队列中;以及
响应于接收到所述写请求的写返回信号,将所述写请求移出所述写请求队列。
13.根据权利要求12所述的方法,其中,确定所述读请求与其前序指令之间是否存在地址依赖关系,包括:
判断所述运算指令的前序指令的所有写请求是否都存入过所述写请求队列;判断所述写请求队列中前序指令的所有写请求与所述读请求之间是否存在地址依赖关系;以及
当所述运算指令的前序指令的所有写请求都存入过所述写请求队列,并且所述写请求队列中前序指令的所有写请求与所述读请求之间不存在地址依赖关系时,确定所述读请求与其前序指令之间不存在地址依赖关系。
14.根据权利要求13所述的方法,其中判断所述写请求队列中前序指令的所有写请求与所述读请求之间是否存在地址依赖关系,包括:
当任一所述写请求与所述读请求的地址之间均不存在交叠时,确定与所述读请求之间不存在地址依赖关系。
15.根据权利要求12-14任一所述的方法,其中,对运算指令进行译码包括:
针对不存在写请求或其写请求不会通过所述译码产生的运算指令,在所述写请求队列中为所述运算指令***预定的写请求,所述预定的写请求默认与所有读请求均存在地址依赖关系。
16.根据权利要求12-15任一所述的方法,其中,对运算指令进行译码包括:
针对包括多个写操作数的运算指令,为每个写操作数生成对应的写请求并存入所述写请求队列中,以在后续执行中,将同一指令内的不同写操作数的写请求均用于所述地址依赖关系的确定。
17.根据权利要求16所述的方法,其中所述多个写操作数的写请求存入不同的写请求队列中并且通过不同的写端口执行,并且所述方法还包括:
仅当其余写端口的写请求队列中不存在前序指令的写请求时,才向当前写端口下发当前指令的写请求。
18.根据权利要求11-17任一所述的方法,其中,对运算指令进行译码包括:
针对包含多次读写过程的运算指令,将所述运算指令拆分为多个子指令,其中每条子指令对应一次读写过程,并且每条子指令内部的读写保序;以及
针对每条子指令独立地产生读请求和写请求,以在后续执行中,将同一指令内的不同子指令视为不同指令,进行所述地址依赖关系的确定。
CN202211090949.6A 2022-09-07 2022-09-07 指令控制装置、方法、处理器、芯片和板卡 Pending CN117667212A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211090949.6A CN117667212A (zh) 2022-09-07 2022-09-07 指令控制装置、方法、处理器、芯片和板卡

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211090949.6A CN117667212A (zh) 2022-09-07 2022-09-07 指令控制装置、方法、处理器、芯片和板卡

Publications (1)

Publication Number Publication Date
CN117667212A true CN117667212A (zh) 2024-03-08

Family

ID=90073995

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211090949.6A Pending CN117667212A (zh) 2022-09-07 2022-09-07 指令控制装置、方法、处理器、芯片和板卡

Country Status (1)

Country Link
CN (1) CN117667212A (zh)

Similar Documents

Publication Publication Date Title
CN111258935B (zh) 数据传输装置和方法
WO2022161318A1 (zh) 数据处理装置、方法及相关产品
CN110991619A (zh) 神经网络处理器、芯片和电子设备
CN114035916A (zh) 计算图的编译、调度方法及相关产品
CN111258769B (zh) 数据传输装置和方法
CN112559403B (zh) 一种处理器及其中的中断控制器
CN117667212A (zh) 指令控制装置、方法、处理器、芯片和板卡
CN114281561A (zh) 处理单元、用于处理单元的同步方法及相应产品
CN117667211A (zh) 指令同步控制方法、同步控制器、处理器、芯片和板卡
CN117667210A (zh) 指令控制装置、方法、处理器、芯片和板卡
WO2024046018A1 (zh) 指令控制方法、数据缓存方法及相关产品
CN113033791B (zh) 用于保序的计算装置、集成电路装置、板卡及保序方法
WO2023016382A1 (zh) 用于片上***的方法及其相关产品
WO2022111013A1 (zh) 支援多种访问模式的设备、方法及可读存储介质
CN113032298B (zh) 用于保序的计算装置、集成电路装置、板卡及保序方法
CN115878184A (zh) 基于一个指令搬移多个数据的方法、存储介质及设备
CN117667198A (zh) 指令同步控制方法、同步控制器、处理器、芯片和板卡
CN117311812A (zh) 用于重排序缓冲的方法及其相关产品
CN117908959A (zh) 用于执行原子操作的方法及其相关产品
CN117093263A (zh) 处理器、芯片、板卡及方法
CN116166468A (zh) 用于处理异构***中ecc错误的方法、异构***及其相关产品
CN117520254A (zh) 处理器、芯片、板卡及方法
CN117742566A (zh) 访存处理装置、处理器、芯片、板卡和指令执行方法
CN118277305A (zh) 降低运算耗时的设备与方法
CN117742715A (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