用于向量运算的数据读取、写入及读写调度器及保留站的制作方法

文档序号:15557794发布日期:2018-09-29 01:32阅读:259来源:国知局

本申请涉及计算机技术领域,尤其涉及一种用于向量运算的数据读取调度器、数据写入调度器、数据读写调度器、保留站及用于向量运算的数据读取调度方法及写入调度方法。



背景技术:

向量运算尤其是矩阵运算,被广泛用于机器学习、模式识别、图像处理、图计算等领域。特别是近年来发展起来的深度学习算法,由于这些深度学习算法具有较高的识别准确度以及较好的可并行性,受到日益增多的关注。

向量读写指令会在单个指令内部同时读写多个数据,多个向量读写指令之间往往由于算法的原因,存在相互依赖关系,一方面向量读写指令之后可能会存在与之读取地址有交叠的向量写入指令,即读后写冲突,另一方面向量写入指令之后可能会存在与之写入地址有交叠的向量读取指令,即写后读冲突。

目前的常用的图形处理器可以支持各种复杂的向量运算,通过通用寄存器堆和通用流处理单元执行通用的simd(singleinstructionmultipledata,单指令多数据流)指令来支持向量运算。但是,由于其主要执行图形图像运算,而且通过大量的额外寄存器来缓存读取数据,以及大量的计算部件来并行读取与执行计算,因而,其不仅需要ram(randomaccessmemory,随机存储器)支持多个读写通道,增加了片上ram的大小限制,同时,在计算部件有限,需要进行大量数据运算时,仍然需要较多的指令,增加了前段译码工作的开销。

对于通用处理器来说,其使用sisd(singleinstructionsingledatastream,单指令流单数据流)指令进行复杂的向量运算。这样,不仅需要较多的指令用于处理向量运算,同样在处理读后写相关和写后读相关时,需要更多的寄存器组来记录相关信息,这样大幅增加了向量运算的开销。



技术实现要素:

鉴于上述技术问题,本申请提供了一种用于向量运算的数据读写调度器及保留站,以克服现有向量计算中读后写冲突和写后读冲突。

在一个实施例中,本申请提供了一种用于向量运算的数据读取调度器。该数据读取调度器包括读取指令预处理模块和读取控制模块,其中,读取指令预处理模块包括读取指令预处理单元,所述读取指令预处理单元用于接收向量读取指令,检测所述向量读取指令与数据写入调度器中存放的向量写入指令之间是否存在写后读冲突,如果是,则将与所述向量读取指令存在写后读冲突的向量写入指令作为所述向量读取指令依赖的向量写入指令;

读取控制模块包括读取控制单元,所述读取控制单元用于根据接收到的所述向量读取指令解析出一个或多个单个读取请求,并根据所述向量读取指令依赖的向量写入指令的状态决定是否满足执行所述读取请求的时机;在满足执行所述单个读取请求的时机时,向片上ram发送所述单个读取请求,从所述片上ram接收输入数据。

在一个实施例中,本申请提供了一种用于向量运算的数据写入调度器。该数据写入调度器包括写入指令预处理单元和写入控制模块,其中,写入指令预处理单元用于接收向量写入指令,检测所述向量写入指令和数据读取调度器中存放的向量读取指令之间是否存在读后写冲突,如果是,则将与所述向量写入指令存在读后写冲突的向量读取指令作为所述向量写入指令依赖的向量读取指令;

写入控制模块用于根据接收到的所述向量写入指令解析出单次写入请求,并根据所述向量写入指令所依赖的向量读取指令的状态来决定执行所述单次写入请求的时机;在满足执行所述单次写入请求的时机时,发送单次写入请求和写入数据给片上ram,并从所述片上ram接收写入结果的反馈。

在一个实施例中,本申请提供了一种用于向量运算的数据读写调度器,该数据读写调度器包括上述的数据读取调度器和上述的数据写入调度器。

在一个实施例中,本申请提供了一种用于向量运算的保留站。该保留站包括:i/o接口、片上ram、译码器、向量运算部件以及上述的数据读写调度器,其中,所述片上ram用于存储向量运算所需要的输入数据和计算得到的输出数据;所述i/o接口用于所述保留站外部的器件对所述片上ram进行读写访问,所述读写访问包括:将需要处理的输入数据加载到所述片上ram,以及在运算结束后将计算得到的输出数据搬到所述保留站外部的器件;所述译码器用于从外部指令缓存队列中读取指令,并且将所述指令译码成向量读取指令、向量写入指令和向量运算指令,将所述向量读取指令、所述向量写入指令传送至数据读写调度器;将所述向量运算指令传送向量运算部件;所述向量运算部件用于在接收到所述译码器传送的所述向量运算指令后,从所述数据读写调度器接收输入数据进行运算,然后将运算得到的输出数据传送至数据读写调度器。

在一个实施例中,本申请提供了一种用于向量运算的数据读取调度方法,所述方法包括如下步骤:

接收向量读取指令;

检测所述向量读取指令与数据写入调度器中存放的向量写入指令之间是否存在写后读冲突,如果是,则将与所述向量读取指令存在写后读冲突的向量写入指令作为所述向量读取指令依赖的向量写入指令;

对接收到的所述向量读取指令进行解析,获得所述向量读取指令对应的一个或多个单个读取请求,并根据所述向量读取指令依赖的向量写入指令的状态决定是否满足执行所述读取请求的时机;在满足执行所述单个读取请求的时机时,向片上ram发送所述单个读取请求,从所述片上ram接收输入数据。

在一个实施例中,本申请提供了一种用于向量运算的数据写入调度方法,所述方法包括如下步骤:

接收向量写入指令;

接收并缓存所述写入数据;

检测所述向量写入指令和数据读取调度器中存放的向量读取指令之间是否存在读后写冲突,如果是,则将与所述向量写入指令存在读后写冲突的向量读取指令作为所述向量写入指令依赖的向量读取指令;

对接收到的所述向量写入指令进行解析获得单次写入请求,并根据所述向量写入指令所依赖的向量读取指令的状态来决定执行所述单次写入请求的时机;在满足执行所述单次写入请求的时机时,发送单次写入请求和所述写入数据给片上ram,并从所述片上ram接收写入结果的反馈。

从上述技术方案可以看出,本申请的用于向量运算的数据读写调度器及保留站具有以下有益效果:

(1)能够处理向量读写指令之间的依赖关系,解决指令之间的读后写冲突和写后读冲突,保证提供给向量运算部件正确的数据;

(2)在保证提供正确数据给向量运算部件的同时,能够通过乱序执行向量读取指令来增加读取数据的速度,并且增加片上ram的利用效率;

(3)可以高效稳定的为向量运算部件提供向量数据,并且快速写回计算得到的向量结果,提高向量运算部件的利用效率。

附图说明

图1为根据本披露实施例用于向量运算的保留站的结构示意图;

图2为图1所示保留站中数据读写调度器的结构示意图;

图3为图2所示数据读写调度器中读取指令预处理单元进行向量读取指令预处理的流程图;

图4为图2所示数据读写调度器中读取控制单元进行数据请求的流程图;

图5为图2所示数据读写调度器中写入指令预处理单元进行向量写入指令预处理的流程图;

图6为图2所示数据读写调度器中写入控制模块进行数据写入的流程图。

【主要元件】

100-i/o接口;

200-片上ram;

400-译码器;

500-向量运算部件;

300-数据读写调度器:

310-指令缓存;320-读取指令预处理模块;

330-写入指令预处理单元;340-读取指令缓存模块;

350-写入指令缓存单元;360-读取控制模块;

370-写入控制模块;380-读取数据缓存模块;

390-写入数据缓存模块。

具体实施方式

为使本申请的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本申请进一步详细说明。应当理解的是,此处描述的具体实施例仅仅用于解释本申请,并不用于限定本申请。

在本申请的一个示例性实施例中,提供了一种用于向量运算的保留站。如图1所示,本实施例用于向量运算的保留站包括:i/o(input/output)接口100、片上ram200、数据读写调度器300、译码器400和向量运算部件500。

其中,片上ram200用于存储向量运算所需要的输入数据和计算得到的输出数据,即片上ram200存储运算数据和运算结果,并且按照最低地址分区,可以同时处理多个向量读取请求和向量写入请求。

i/o接口100作为芯片与外部器件连接的接口,用于芯片外部的器件对片上ram200进行读写访问。具体地,芯片外部的器件访问片上ram200的过程可以包括:将需要处理的输入数据通过i/o接口100加载到片上ram200,然后在计算得到输出数据且输出数据已经写回片上ram200之后,再通过i/o接口100将输出数据搬到片外。

译码器400用于从外部指令缓存队列中读取指令,并且将其译码成多个向量读写指令(包括向量读取指令和向量写入指令)和向量运算指令,并分别将向量读取指令和向量运算指令传送至数据读写调度器300和向量运算部件500。数据读写调度器300用于依据译码器400提供的向量读写指令,从片上ram200中读取输入数据,并将读取的输入数据交给向量运算部件500进行计算,然后将向量运算部件500得到的向量运算结果,即输出数据,存入片上ram200中。向量运算部件500用于从译码器400接收向量运算指令,然后从数据读写调度器300接收输入数据,进行运算,然后将计算的到的数据传送回数据读写调度器300进行向量写入操作。进一步地,本申请实施例中的向量运算部件500可以实现多种不同维度向量的运算,例如,向量维度可以是0维、1维、2维……n维,其中,n>2,n为正整数。相应地,向量运算指令可以包括与不同维度向量对应的运算指令。也就是说,本申请实施例中的向量运算部件500可以实现向量及多维的张量运算。数据读写调度器300采用下述实施例中的数据读写调度器,其具体结构及工作原理可参见下文中的描述。

图2为图1所示保留站中数据读写调度器300的结构示意图。请参照图2,该数据读写调度器300可以包括数据读取调度器和数据写入调度器。其中,数据读取调度器可以包括读取指令预处理模块320和读取控制模块360,数据写入调度器包括写入指令预处理单元330和写入控制模块370。进一步地,数据读取调度器还可以包括指令缓存310、读取指令缓存模块340以及读取数据缓存模块380。数据写入调度器还可以包括指令缓存310、写入指令缓存单元350以及写入数据缓存单元390。数据读取调度器采用下述实施例中的数据读取调度器,数据写入调度器采用下述实施例中的数据写入调度器,二者的具体结构及工作原理可参见下文中的描述。

更进一步地,为简化数据读写调度器300的结构,数据读取调度器和数据写入调度器可以共用同一个指令缓存310,如图2所示。此时,该指令缓存310用于接收从译码器输入的向量读取指令或向量写入指令。

在一个实施例中,本申请实施例提供的数据读取调度器具体结构及工作原理如下。

具体地,数据读取调度器包括读取指令预处理模块320和读取控制模块360。其中,读取指令预处理模块320包括对应多个向量读取指令的多个读取指令预处理单元,多个读取指令预处理单元用于接收由指令缓存310输入的多个向量读取指令,分析该每一向量读取指令和写入指令缓存350中存放的向量写入指令之间的写后读冲突,如果当前向量读取指令涉及的数据和写入指令缓存单元350中存放的向量写入指令涉及的数据在地址范围有交集,则可以认为该向量读取指令和写入指令缓存单元350中存放的向量写入指令之间存在写后读冲突。此时,取与该向量读取指令最近邻的、有交集的向量写入指令作为该向量读取指令依赖的向量写入指令,并且将该向量写入指令的id同向量读取指令一并存入读取指令缓存模块的队列中。本领域技术人员可以理解的是,本申请实施例中,当其中一个向量写入指令涉及数据的地址范围(包括起始地址和结束地址)与所述向量读取指令涉及数据的地址范围(包括起始地址和结束地址)最接近时,则认为该向量写入指令为该向量读取指令最近邻的向量写入指令。向量写入指令涉及数据是指该向量写入指令对应的写入数据,具体地,向量写入指令涉及数据为该向量写入指令包含的单次写入请求涉及的数据,即向量写入指令涉及数据的地址范围为单次写入请求涉及的数据的地址范围。向量读取指令涉及数据是指该向量读取指令需要访问的数据,具体地,向量读取指令涉及数据是指该向量读取指令包含的单次读取请求涉及的数据的地址范围,即向量读取指令涉及数据的地址范围为单次读取请求涉及的数据的地址范围。

具体地,图3为图2所示数据读写调度器中读取指令预处理单元进行向量读取指令预处理的流程图。请参照图3,读取指令预处理单元进行向量读取指令预处理的过程包括:

步骤s302:从指令缓存310中接收一条向量读取指令;

步骤s304:计算获取该向量读取指令涉及数据的起始、结束地址;具体地,本领域技术人员可以的是,该向量读取指令涉及数据是指该向量读取指令需要读取的数据。

步骤s306:从写入指令缓存中获取其存放的向量写入指令,及该向量写入指令涉及数据的起始、结束地址;具体地,本领域技术人员可以理解的是,该向量写入指令涉及数据是指该向量写入指令对应的需要写入片上ram200的写入数据。

步骤s308:依据该向量读取指令涉及数据的起始、结束地址依次和写入指令缓存中存放的向量写入指令涉及数据的起始、结束地址进行比较,寻找出有交集的向量写入指令;进一步地,本领域技术人员可以理解的是,若不存在与该向量读取指令有交集的向量写入指令,则可以直接执行该向量读取指令,此时无需执行以下步骤s310和步骤s312。

步骤s310:从有交集的向量写入指令中选择出最近邻的一条向量写入指令,获取该向量写入指令的id;本领域技术人员可以理解的是,当中一个向量写入指令涉及数据的地址范围(包括起始地址和结束地址)与所述向量读取指令的涉及数据地址范围(包括起始地址和结束地址)其最接近时,则认为该向量写入指令为该向量读取指令最近邻的向量写入指令。

步骤s312:将向量读取指令,该向量读取指令涉及数据的起始、结束地址,以及其依赖的向量写入指令的id,一并存入读取指令缓存模块的队列中。本领域的技术人员可以理解是,指令预处理单元可以将该向量读取指令,该向量读取指令涉及数据的起始地址、结束地址,以及该向量读取指令依赖的向量写入指令的id对应缓存至读取缓存模块的队列中。

读取控制模块360包括多个读取控制单元,用于接收读取指令缓存模块340发射的向量读取指令,解析出一个或多个的单次读取请求,依据从写入控制模块370获取该向量读取指令所依赖的向量写入指令的状态来决定执行单次读取请求的时机,在时机满足时,发送单次读取请求给片上ram200,然后从片上ram200接收读取的输入数据,并且将输入数据存入读取数据缓存模块380中,等待外部运算部件使用。

具体地,图4为图2所示数据读写调度器中读取控制单元进行数据请求的流程图。请参照图4,读取控制单元进行数据请求的过程包括:

步骤s402:从被发射的向量读取指令中,解析出具体的单次读取请求;

步骤s404,从写入控制模块获取当前执行地址;具体地,从写入控制模块获取所述被发射的读取指令依赖的向量写入指令的当前写入地址。

步骤s406:对于每一单次读取请求,执行以下操作:

子步骤s406a,判定该单次读取请求是否满足以下三个条件:

(1)该向量读取指令依赖的向量写入指令的状态为“执行结束”,或者其状态为“执行中”且当前写入地址已经超过当前的单次读取请求的地址,或者其状态为“执行中”且其结束地址已被当前的单次读取请求的地址超越;

(2)当前读取控制单元的数据队列未满;

(3)当前片上ram可接收单次读取请求;

子步骤s406b:当三个条件同时满足后,发射该单次读取请求到片上ram,执行子步骤s406c;否则,阻塞该单次读取请求;

子步骤s406c:等待片上ram返回的读取数据,当读取数据返回后,将其存入读取数据缓存中。

本领域技术人员可以理解的是,若该向量读取指令依赖的向量写入指令的状态为“执行结束”时,可认为该向量读取指令依赖的向量写入指令不会与该向量读取指令发生写后读冲突,此时,若当前读取控制单元的数据队列未满,且当前片上ram可接收单次读取请求,则可以认为时机成熟,进而可以发射单次读取请求到片上ram200,执行子步骤s406c。即若所述向量读取指令依赖的向量写入指令的状态为“执行结束”,且所述当前读取控制单元的数据队列未满,且所述当前片上ram可接收单次读取请求,则判定满足执行所述读取请求的时机。进一步地,若该向量读取指令依赖的向量写入指令的状态为“执行结束”时,且所述当前读取控制单元的数据队列已满和/或所述当前片上ram不可接收单次读取请求,则阻塞该单次读取请求。

若该向量读取指令依赖的向量写入指令的状态为“执行中”时,需进一步判断该执行中的向量写入指令是否与该向量读取指令发生写后读冲突。在一个实施例中,若该向量读取指令依赖的向量写入指令的状态为“执行中”时,需要进一步判断该向量读取指令依赖的向量写入指令的当前写入地址是否已经超过当前的单次读取请求的地址。若该向量读取指令依赖的向量写入指令的状态为“执行中”,且该向量读取指令依赖的向量写入指令的当前写入地址已经超过当前的单次读取请求的地址,且所述当前读取控制单元的数据队列未满,且所述当前片上ram可接收单次读取请求,则判定满足执行所述读取请求的时机。本实施例中,该向量读取指令依赖的向量写入指令的当前写入地址已经超过当前的单次读取请求的地址是指,该向量读取指令依赖的向量写入指令的当前写入地址大于当前的单次读取请求的地址。

进一步地,若该向量读取指令依赖的向量写入指令的状态为“执行中”,且该向量读取指令依赖的向量写入指令的当前写入地址已经超过当前的单次读取请求的地址,且所述当前读取控制单元的数据队列已满和/或所述当前片上ram不可接收单次读取请求,则阻塞该单次读取请求。

在一个实施例中,若该向量读取指令依赖的向量写入指令的状态为“执行中”时,需要继续判断该向量读取指令依赖的向量写入指令的结束地址是否已被当前的单次读取请求的地址超越。若该向量读取指令依赖的向量写入指令的状态为“执行中”,且该向量读取指令依赖的向量写入指令的结束地址已被当前的单次读取请求的地址超越,且所述当前读取控制单元的数据队列未满,且所述当前片上ram可接收单次读取请求,则判定满足执行所述读取请求的时机。本实施例中,该向量读取指令依赖的向量写入指令的结束地址已被当前的单次读取请求的地址超越是指,该向量读取指令依赖的向量写入指令的结束地址小于当前的单次读取请求的地址。

进一步地,若该向量读取指令依赖的向量写入指令的状态为“执行中”,且该向量读取指令依赖的向量写入指令的结束地址已被当前的单次读取请求的地址超越,且所述当前读取控制单元的数据队列已满和/或所述当前片上ram不可接收单次读取请求,则阻塞该单次读取请求。

在一个实施例中,读取数据缓存模块380包括多个读取数据缓存,用于从读取控制单元中接收读取的数据然后将其发送给向量运算部件500。

在一个实施例中,读取指令缓存模块340包括多个读取指令缓存单元,用于接收并缓存多个读取指令预处理单元处理得到的向量读取指令,并且依据读取控制模块360和写入控制模块370的当前向量读取指令及其依赖的向量写入指令的执行状态,动态更新其内部缓存的向量读取指令的状态。

其中,读取指令缓存模块进行向量读取指令状态更新包括以下5种情况:

(1)在新的向量读取指令进入读取指令缓存单元的队列中时,更新该向量读取指令的状态为“待发射”;

(2)当一向量读取指令依赖的向量写入指令正在执行或执行结束时,更新该向量读取指令的状态为“可发射”;

(3)当一向量读取指令的状态为“可发射”,并且其之前的向量读取指令请求发射结束后,发射该向量读取指令,更新该向量读取指令的状态为“执行中”;

(4)当一向量读取指令的所有读取请求都已经被读取控制单元发射后,更新该向量读取指令的状态为“已发射”;

(5)当一向量读取指令的所有单次读取请求都已经被片上ram处理,并且返回结果之后,更新该向量读写指令的状态为“执行结束”。

通过上述读取指令缓存单元、读取控制单元和读取数据缓存的组合操作,完成数据读取操作,并且避免了写后读冲突。

在一个实施例中,本申请实施例提供的数据写入调度器具体结构及工作原理如下。

具体地,数据写入调度器可以包括写入指令预处理单元330和写入控制模块(370)。其中,写入指令预处理单元330用于接收由指令缓存310输入的向量写入指令,检测该向量写入指令和读取指令缓存模块340中存放的向量读取指令之间的读后写关系,如果当前向量写入指令与读取指令缓存模块340中存放的向量读取指令在地址范围上有交集,则可以认为该向量写入指令和读取指令缓存模块340中存放的向量读取指令之间的存在读后写关系。此时,取与该向量写入指令最近邻的有交集的向量读取指令作为该向量写入指令依赖的向量读取指令,并且将该向量读取指令的id同向量写入指令一并存入写入指令缓存模块的队列中。本领域技术人员可以理解的是,本申请实施例中,当其中一个向量读取指令涉及数据的地址范围(包括起始地址和结束地址)与所述向量写入指令涉及数据的地址范围(包括起始地址和结束地址)最接近时,则认为该向量读取指令为该向量读取指令最近邻的向量读取指令。向量写入指令涉及数据是指该向量写入指令对应的写入数据,具体地,向量写入指令涉及数据为该向量写入指令包含的单次写入请求涉及的数据,即向量写入指令涉及数据的地址范围为单次写入请求涉及的数据的地址范围。向量读取指令涉及数据是指该向量读取指令需要访问的数据,具体地,向量读取指令涉及数据是指该向量读取指令包含的单次读取请求涉及的数据的地址范围,即向量读取指令涉及数据的地址范围为单次读取请求涉及的数据的地址范围。

具体地,图5为图2所示数据读写调度器中写入指令预处理单元进行向量写入指令预处理的流程图。请参照图5,写入指令预处理单元进行向量写入指令预处理的过程包括:

步骤s502:从指令缓存310中接收一条向量写入指令;

步骤s504:计算得到该向量写入指令涉及数据的起始、结束地址;具体地,本领域技术人员可以理解的是,该向量写入指令涉及数据是指该向量写入指令对应的需要写入片上ram200的写入数据。

步骤s506:从读取指令缓存中获取其存放的向量读取指令,及该些向量读取指令涉及数据的起始地址和结束地址;具体地,本领域技术人员可以的是,该向量读取指令涉及数据是指该向量读取指令需要读取的数据。

步骤s508:依据该向量写入指令涉及数据的起始、结束地址依次和读取指令缓存中存放的向量读取指令的起始、结束地址进行比较,寻找出有交集的向量读取指令;进一步地,本领域技术人员可以理解的是,若不存在与该向量写入指令有交集的向量读取指令,则可以直接执行该向量写入指令,此时无需执行以下步骤s510和步骤s512。

步骤s510:从有交集的向量读取指令中选择出最近邻的一条向量读取指令,将其作为该向量写入指令依赖的向量读取指令,获取该向量读取指令的id。本领域技术人员可以理解的是,本申请实施例中,当其中一个向量读取指令涉及数据的地址范围(包括起始地址和结束地址)与所述向量写入指令涉及数据的地址范围(包括起始地址和结束地址)最接近时,则认为该向量读取指令为该向量读取指令最近邻的向量读取指令。

步骤s512:将向量写入指令,该向量写入指令涉及数据的起始、结束地址,以及其依赖的向量读取指令的id,一并存入写入指令缓存单元的队列中。本领域技术人员可以理解的是,写入指令预处理单元将向量写入指令,该向量写入指令涉及数据的起始、结束地址,以及该向量写入指令依赖的向量读取指令的id对应缓存至写入指令缓存单元的队列中。

写入控制模块370用于接收写入指令缓存单元350发射的向量写入指令,从其中解析出具体的单次写入请求,从写入数据缓存390接收写入数据,并且依据从读取控制模块360获取该向量写入指令所依赖的向量读取指令的状态来决定执行单次写入请求的时机,在时机满足时,发送单次写入请求和写入数据给片上ram200,然后从片上ram200接收写入结果的反馈。

具体地,图6为图2所示数据读写调度器中写入控制模块进行数据写入的流程图。请参照图6,写入控制模块进行数据写入的过程包括:

步骤s602:接收被发射的向量写入指令;

步骤s604:根据向量写入指令解析出具体的单次写入请求;

步骤s606:获取当前执行地址;具体地,当前执行地址是指被发射的向量写入指令所依赖的向量读取指令的当前执行地址。

步骤s608:写入数据缓存;具体地,该写入数据缓存操作是指获取写入数据,并将该写入数据存放至写入数据缓存390中。在一个实施例中,写入数据缓存390用于缓存从向量运算部件500接收需要写入的数据,然后发送给写入控制模块370。

步骤s610:对于每一单次写入请求,执行以下操作:

子步骤s610a:判定该单次写入请求是否满足以下三个条件:

(1)该向量写入指令依赖的向量读取指令的状态为“执行结束”,或者其状态为“执行中”且当前读取地址已经超过当前写入请求的地址,或者其状态为“执行中”且其结束地址已被当前的写入请求地址超越;

(2)当前写入控制模块的数据队列有等待写入的数据;

(3)当前片上ram可接收当前的单次写入请求;

子步骤s610b:当以上三个条件满足后,发射该单次写入数据请求和写入数据到片上ram,执行子步骤s604c;否则,阻塞该单次写入请求;

子步骤s610c:等待片上ram返回写入成功的消息,当消息返回后,完成该单次写入请求。

本领域技术人员可以理解的是,该向量写入指令依赖的向量读取指令的状态为“执行结束”时,可认为该向量写入指令依赖的向量读取指令不会与该向量写入指令发生读后写冲突,此时,若当前写入控制模块的数据队列有等待写入的数据,且当前片上ram可接收单次写入请求,则可以认为时机成熟,进而发射该单次写入数据请求和写入数据到片上ram,执行子步骤s604c。即若该向量写入指令依赖的向量读取指令的状态为“执行结束”,且当前写入控制模块的数据队列有等待写入的数据,且当前片上ram可接收单次写入请求,则判定满足执行所述读取请求的时机。进一步地,若该向量读取指令依赖的向量写入指令的状态为“执行结束”时,且当前写入控制模块的数据队列没有等待写入的数据和/或当前片上ram不可接收单次写入请求,则阻塞该单次写入请求。

若该向量写入指令依赖的向量读取指令的状态为“执行中”时,需进一步判断该执行中的向量读取指令是否与该向量写入指令发生读后写冲突。在一个实施例中,该向量写入指令依赖的向量读取指令的状态为“执行中”时,需要进一步判断该向量写入指令依赖的向量读取指令的当前读取地址是否已经超过当前写入请求的地址。若该向量读取指令依赖的向量写入指令的状态为“执行中”,且该向量写入指令依赖的向量读取指令的当前读取地址已经超过当前单次写入请求的地址,且当前写入控制模块的数据队列有等待写入的数据,且当前片上ram可接收单次写入请求,则判定满足执行所述单次写入请求的时机。本实施例中,该向量写入指令依赖的向量读取指令的当前读取地址已经超过当前单次写入请求的地址是指,该向量写入指令依赖的向量读取指令的当前读取地址大于当前单次写入请求的地址。

进一步地,若该向量读取指令依赖的向量写入指令的状态为“执行中”,且该向量写入指令依赖的向量读取指令的当前读取地址已经超过当前单次写入请求的地址,且当前写入控制模块的数据队列没有等待写入的数据和/或当前片上ram不可接收单次写入请求,则阻塞该单次写入请求。

在一个实施例中,若该向量读取指令依赖的向量写入指令的状态为“执行中”时,需要继续判断该向量读取指令依赖的向量写入指令的结束地址已被当前的写入请求地址超越。若向量读取指令依赖的向量写入指令的状态为“执行中”,且该向量读取指令依赖的向量写入指令的结束地址已被当前的写入请求地址超越,且当前写入控制模块的数据队列有等待写入的数据,且当前片上ram可接收单次写入请求,则判定满足执行所述单次写入请求的时机。本实施例中,该向量读取指令依赖的向量写入指令的结束地址已被当前的写入请求地址超越是指,该向量读取指令依赖的向量写入指令的结束地址小于当前的写入请求地址的地址。

进一步地,若该向量读取指令依赖的向量写入指令的状态为“执行中”,且该向量读取指令依赖的向量写入指令的结束地址已被当前的写入请求地址超越,且当前写入控制模块的数据队列没有等待写入的数据,且当前片上ram不可接收单次写入请求,则阻塞该单次读取请求。

在一个实施例中,写入指令缓存单元350用于接收写入指令预处理单元330处理得到的向量写入指令,并且依据读取控制模块360和写入控制模块370的执行状态,动态更新内部存储的向量写入指令的状态,并发射符合条件的向量写入指令。

其中。写入指令缓存模块进行向量写入指令状态更新包括以下5种情况:

(1)在新的向量写入指令进入队列中时,更新该向量写入指令的状态为“待发射”;

(2)当一向量写入指令依赖的向量读取指令正在执行或执行结束时,更新该指令的状态为“可发射”;

(3)当一向量写入指令的状态为“可发射”,并且其之前的向量写入指令请求发射结束后,发射该向量写入指令,更新该向量写入指令的状态为“执行中”;

(4)当一向量写入指令的所有单次写入请求都已经被写入控制模块发射后,更新该指令的状态为“已发射”;

(5)当一向量写入指令的所有单次写入请求都已经被片上ram处理,并且返回结果之后,更新该指令的状态为“执行结束”。

通过上述写入指令缓存单元、写入控制器和写入数据缓存的组合操作,完成数据写入操作,并且避免了读后写冲突。

通过本实施例保留站,可以持续稳定的发射数据给向量运算部件,并且接收向量运算部件的计算结果,然后依次写入ram内部,相比传统的保留站可以更快速的处理向量运算所需要的数据读写操作。

至此,本实施例用于向量运算的保留站介绍完毕。

至此,已经结合附图对本披露多个实施例进行了详细描述。依据以上描述,本领域技术人员应当对本披露用于向量运算的数据读取调度器、数据写入调度器、数据读写调度器及保留站有了清楚的认识。

需要说明的是,在附图或说明书正文中,未绘示或描述的实现方式,均为所属技术领域中普通技术人员所知的形式,并未进行详细说明。此外,上述对各元件和方法的定义并不仅限于实施例中提到的各种具体结构、形状或方式,本领域普通技术人员可对其进行简单地更改或替换,例如:

(1)片上ram还可以片外访存形式来直接访问片外数据;

(2)译码器可以用向量指令缓存队列来代替;

(3)除非特别描述或必须依序发生的步骤,上述步骤的顺序并无限制于以上所列,且可根据所需设计而变化或重新安排。

综上所述,本披露通过设置读取指令缓存模块和写入指令缓存单元,并基于两者相互探测冲突指令,不仅可以处理向量读写指令之间的相互依赖关系,即写后读冲突和读后写冲突,同时可以相比传统的保留站更快速的处理向量运算所需要的数据读写操作,可以保证在存在写后读冲突和读后写冲突的情景下读写数据的正确性。

在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本披露也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本披露的内容,并且上面对特定语言所做的描述是为了披露本披露的最佳实施方式。

在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本披露的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。

类似地,应当理解,为了精简本公开并帮助理解各个披露方面中的一个或多个,在上面对本披露的示例性实施例的描述中,本披露的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本披露要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,披露方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本披露的单独实施例。

本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。

此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本披露的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。

本披露的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(dsp)来实现根据本披露实施例的相关设备中的一些或者全部部件的一些或者全部功能。本披露还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本披露的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。

应该注意的是上述实施例对本披露进行说明而不是对本披露进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本披露可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。

以上所述的具体实施例,对本披露的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本披露的具体实施例而已,并不用于限制本披露,凡在本披露的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本披露的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1