一种数据读写方法及装置、交换芯片及存储介质与流程

文档序号:17856608发布日期:2019-06-11 22:36阅读:241来源:国知局
一种数据读写方法及装置、交换芯片及存储介质与流程

本申请实施例涉及交换芯片报文缓存技术,涉及但不限于一种数据读写方法及装置、交换芯片及存储介质。



背景技术:

随着计算机技术的不断发展,超高带宽交换芯片已经被广泛使用,其缓存器(buffer)的容量是评价芯片性能的重要指标之一。为了实现更大的交换容量,需要buffer具有多读多写的需求。而由于受到存储器结构的限制,多读多写的buffer无法达到很高的频率或者面积代价会很大。



技术实现要素:

有鉴于此,本申请实施例为解决现有技术中存在的至少一个问题而提供一种数据读写方法及装置、交换芯片及存储介质。

本申请实施例提供一种数据读写方法,该方法包括:

内核在当前时钟周期到来时,获取在所述当前时钟周期内需要被执行的读写指令;

内核获取与所述读写指令关联的目标存储区域;所述目标存储区域为ram(randomaccessmemory,随机存取存储器)中的至少两个存储区域中未被占用的存储区域;

内核在所述当前时钟周期内,根据所述读写指令,对所述目标存储区域进行数据的读写。

本申请实施例提供一种数据读写装置,该装置包括:

第一获取单元,配置为在当前时钟周期到来时,获取在所述当前时钟周期内需要被执行的读写指令;

第二获取单元,配置为获取与所述读写指令关联的目标存储区域;所述目标存储区域为ram中的至少两个存储区域中未被占用的存储区域;

读写单元,配置为在所述当前时钟周期内,根据所述读写指令,对所述目标存储区域进行数据的读写。

本申请实施例还提供一种交换芯片,该交换芯片包括:内核和ram,所述内核用于实现上述数据读写方法。

本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质中存储有计算机可执行指令,该计算机可执行指令配置为执行上述数据读写方法。

通过本申请实施例所提供的技术方案,通过划分多个存储区域进行一读一写的方式实现整体缓存器多读多写的效果。配置灵活,结构简单,能够有效提升存储器的利用率,并且能够适应于超高带宽交换芯片的频率要求。

附图说明

图1a为3.2t交换芯片组成结构示意图;

图1b为6.4t交换芯片组成结构示意图;

图1c为另一种6.4t交换芯片组成结构示意图;

图2为本申请实施例的数据读写方法的实现流程示意图;

图3a为本申请实施例的存储空间分区域的原理示意图;

图3b为本申请实施例中读指令存入队列的原理示意图;

图4为本申请实施例的数据读写装置的组成结构示意图;

图5为本申请实施例的交换芯片的硬件结构示意图。

具体实施方式

在超高带宽交换芯片中,缓存器(buffer)的容量是其最重要的指标之一。而目前超高带宽的交换芯片都在1t(1terabitspersecond,每秒1太字符(1太字符等于1024吉字符))以上,对于更高容量的交换芯片,如3.2t、6.4t、12.8t以及25.6t的交换芯片的buffer容量也在不停地增大。为了支撑超大带宽的交换容量,对buffer的读写需要一定的要求。

由于工艺的限制,内嵌的存储器以及逻辑能够达到的时钟频率有限,例如tsmc16nm(台积电16纳米)工艺下,交换芯片的时钟最高只能达到1.2g左右,而为了能够满足3.2t、6.4t甚至更高的交换容量,需要多个处理逻辑核心并行处理数据,同时将处理完的数据并行读写到缓存报文的buffer中。如图1a所示,3.2t的交换芯片10使用2个交换核心(内核11和内核12)对应一个报文存储buffer(缓存器13)。这个buffer需要2读2写的接口;如图1b所示,6.4t的交换芯片20使用4个交换核心(内核21、内核22、内核23和内核24)对应一个报文存储buffer(缓存器25)。这个buffer需要4读4写的接口。而受限制于存储器的结构,多读多写的存储器无法达到很高的频率或者其面积的代价会非常巨大。

相关技术中,为了满足交换容量,可以将buffer切成若干个小块,每个内核(core)独占一个小块。如图1c所示,以6.4t的交换芯片30为例,将一块32m的buffer分成4块8m的1读4写的buffer(分别为缓存器35、缓存器36、缓存器37和缓存器38)对应4个内核(内核31、内核32、内核33和内核34),从而实现4读4写的buffer。

这样通过分解的方式,将4读4写的buffer拆成4个1读4写的buffer,降低了buffer的设计复杂度,但是同时也带来了另外一个问题,向任何一个内核进行转发的报文最多只能使用1/4的buffer容量,从而使其利用率变得很低。

相关技术中还可以采用另外一种方案,通过分时复用的方式。还是以6.4t的4core为例,假设时钟频率为1.2g,单内核256bytes以上报文能够达到1.6t的转发容量,那么单个内核数据位宽约为320bytes的数据。实现的方法是,将buffer的数据位宽展开成4倍,也就是说buffer的数据位宽是1280bytes,并将时间分成4段,每段由一个内核进行读和写。而每次内核读写的数据位宽是本身数据位宽的4倍,也就是1280bytes,这样平均下来,相当于每个内核在每个时间段内仍然对buffer进行了一次读写,从而实现了4读4写的功能。

然而这种扩展位宽的方式,最后导致一个内核一次存储的数据有可能属于2个或者多个报文,而这种复杂设计带来的代价往往更大。

本申请实施例旨在提出一种通过优化报文存储器的读写调度,用1读1写的ram(randomaccessmemory,存储器)来实现多读多写的buffer。不仅大大降低芯片成本,同时还满足设计要求,每个内核都能共享所有的存储空间,而且设计简单,易于实现。

下面结合实施例来进行说明:

本申请实施例提供一种数据读写方法,该方法用于交换芯片中,该交换芯片在执行该方法的时候能够通过简单的存储结构来实现快速读写,该方法所实现的功能可以通过交换芯片中的内核调用程序代码或通过硬件逻辑来实现。

图2为本申请实施例的数据读写方法实现流程示意图,如图2所示,该方法包括:

步骤s101、内核在当前时钟周期到来时,获取在所述当前时钟周期内需要被执行的读写指令;

内核在当前时钟周期内要根据获取到的读写指令进行对存储器进行数据的读写,将获取到的写指令对应的数据写入存储区域,根据获取到的读指令来读取buffer中的数据。因此,内核需要在当前时钟周期到来时获取需要被执行的读写指令。

步骤s102、内核获取与所述读写指令关联的目标存储区域;所述目标存储区域为ram中的至少两个存储区域中未被占用的存储区域;

这里,将ram的存储空间划分成若干等份的存储区域,每一内核在同一时钟周期对应获取与读写指令相关联的目标存储区域,不同的内核在同一时钟周期对应不同的目标存储区域。这样,每一内核在进行读写时,就不会与其他内核发生冲突,每一存储区域都保证只能有一读一写。因此,这里需要确定每一内核的读写指令所对应的不同的目标存储区域,在当前时钟周期内,分别进行数据的读写,从而使多个内核在同一时钟周期同时进行写入或读取,每个内核只占用一个目标存储区域而不发生冲突。

步骤s103、内核在所述当前时钟周期内,根据所述读写指令,对所述目标存储区域进行数据的读写。

当每个内核都确定好各自在当前时钟周期要进行读写对应的目标存储区域时,每个内核就可以在当前时钟周期内,根据读写指令来进行相应的读写操作。从而通过每个存储区域一读一写的方式,实现整体存储器的多读多写。

本申请实施例提供另一种数据读写方法,该方法包括:

步骤s201、内核在所述当前时钟周期到来之前,从ram中的至少两个存储区域中,确定未被占用的存储区域;

步骤s202、内核在当前时钟周期到来时,获取在所述当前时钟周期内需要被执行的读写指令;

步骤s203、内核获取与所述读写指令关联的目标存储区域;所述目标存储区域为ram中的至少两个存储区域中未被占用的存储区域;

步骤s204、内核在所述当前时钟周期内,根据所述读写指令,对所述目标存储区域进行数据的读写。

步骤s201提供了的一种确定未被占用的存储区域的实现方式,每个内核在当前时钟周期到来之前,就对多个存储区域进行选择,确定出当前时钟周期自身需要占用的存储区域。而每个内核在进行存储区域的选择时,需要确定自身选择的存储区域没有被其他存储所选择,因此,可以采用流水线的形式,每一内核确定自身所选择的存储区域后,通知其他内核,再由其他内核来选择自身对应的存储区域。这些动作都发生在当前时钟周期到来之前,并且可以在多个时钟周期之内来完成。这样,每一内核都可以选择一个不会被其他内核所占用存储区域,在当前时钟周期到来时直接进行数据的读写,而不发生冲突。

本申请实施例提供另一种数据读写方法,该方法包括:

步骤s301、在所述当前时钟周期到来之前,获取自身在当前时钟周期的次序编号中的次序;

其中,所述次序编号为每一内核在当前时钟周期对应的优先级队列中的位置编号;

步骤s302、根据所述次序之前的其他内核所选择的存储区域,将未被其他内核选择的存储区域,确定为所述未被占用的存储区域;

步骤s303、内核在当前时钟周期到来时,获取在所述当前时钟周期内需要被执行的读写指令;

步骤s304、内核获取与所述读写指令关联的目标存储区域;所述目标存储区域为ram中的至少两个存储区域中未被占用的存储区域;

步骤s305、内核在所述当前时钟周期内,根据所述读写指令,对所述目标存储区域进行数据的读写。

上述步骤s301和步骤s302提供了步骤s201的一种实现方式,所有内核在每一时钟周期可以按照一定规则来形成优先级队列,在一段时间内每一周期该优先级队列都不相同,这样,在长时间来说对于每一内核都是公平的。内核确定自身在当前时钟周期的次序编号中的次序后,按照次序来选择自身的目标存储区域。例如,当自身的次序为第一个时,则在第一个选择当前时钟周期对应的存储区域,这时还没有其他内核来选择当前时钟周期的存储区域,因此第一个内核按照自身的需求进行选择即可;而当自身的次序为第二个时,则需要等待第一个选择完成后,再进行选择,并且只能选择第一个内核没有选择的其他存储区域。这一过程依然发生在当前时钟周期到来之前,在当前时钟周期到来时,每一内核都已经完成了自身的选择,则直接根据每一内核对应的目标存储区域进行数据的读写。

本申请实施例提供另一种数据读写方法,该方法包括:

步骤s401、在所述当前时钟周期到来之前,获取自身在当前时钟周期的次序编号中的次序;

其中,所述次序编号为每一内核在当前时钟周期对应的优先级队列中的位置编号;

步骤s402、确定所述次序之前的其他内核所选择的第一存储区域集合;

步骤s403、根据所述ram的所有存储区域和所述第一存储区域集合,确定未被选择的第二存储区域集合;

步骤s404、将所述第二存储区域集合中的存储区域,确定为所述未被占用的存储区域;

步骤s405、内核在当前时钟周期到来时,获取在所述当前时钟周期内需要被执行的读写指令;

步骤s406、内核获取与所述读写指令关联的目标存储区域;所述目标存储区域为ram中的至少两个存储区域中未被占用的存储区域;

步骤s407、内核在所述当前时钟周期内,根据所述读写指令,对所述目标存储区域进行数据的读写。

上述步骤s402至步骤s404提供了步骤s302的一种实现方式,当内核自身的次序不是第一个时,需要确定哪些存储区域未被其他内核所选择,这时,该内核可以先确定在自身次序之前的其他内核所选择的每一存储区域,并确定为第一存储区域集合;根据所述存储区域,去掉第一存储区域集合中的每一存储区域,剩下的存储区域作为第二存储区域集合。第二存储区域集合中的每一存储区域还都未被其他内核所选择,因此,可以将第二存储区域集合中的存储区域,确定为目标存储区域,这里,目标存储区域可以是一个,也可以是多个。

本申请实施例提供另一种数据读写方法,该方法包括:

步骤s501、内核在所述当前时钟周期到来之前,获取自身在当前时钟周期的次序编号中的次序;

其中,所述次序编号为每一内核在当前时钟周期对应的优先级队列中的位置编号;

步骤s502、内核确定所述次序之前的其他内核所选择的第一存储区域集合;

步骤s503、内核根据所述ram的所有存储区域和所述第一存储区域集合,确定未被选择的第二存储区域集合;

步骤s504、内核将所述第二存储区域集合中的存储区域,确定为所述未被占用的存储区域;

步骤s505、内核将读指令存储在每一存储区域对应的指令队列中;

步骤s506、内核在当前时钟周期到来时,从所述指令队列中,获取在所述当前时钟周期内需要被执行的读指令;

步骤s507、内核获取与所述读指令关联的目标存储区域;所述目标存储区域为ram中的至少两个存储区域中未被占用的存储区域;

步骤s508、内核在所述当前时钟周期内,根据所述读指令,对所述目标存储区域进行数据的读取。

上述步骤s505和步骤s506提供了一种内核预存读指令的方法,每个内核创建x个队列,分别与x个存储区域一一对应,在当前时钟周期到来时,将需要执行的存储在队列中的读指令取出并执行,从而进行数据的读取。

本申请实施例提供另一种数据读写方法,该方法包括:

步骤s601、内核在所述当前时钟周期到来之前,获取自身在当前时钟周期的次序编号中的次序;

其中,所述次序编号为每一内核在当前时钟周期对应的优先级队列中的位置编号;

步骤s602、内核确定所述次序之前的其他内核所选择的第一存储区域集合;

步骤s603、内核根据所述ram的所有存储区域和所述第一存储区域集合,确定未被选择的第二存储区域集合;

步骤s604、内核将所述第二存储区域集合中的存储区域,确定为所述未被占用的存储区域;

步骤s605、内核将读指令存储在每一存储区域对应的指令队列中;

步骤s606、内核在当前时钟周期到来时,从所述指令队列中,获取在所述当前时钟周期内需要被执行的读指令;

步骤s607、所述内核根据所述读指令所在的指令队列的标识,确定对应的目标存储区域的标识;

步骤s608、根据所述目标存储区域的标识,将对应的存储区域中未被占用的存储区域确定所述目标存储区域;

步骤s609、内核在所述当前时钟周期内,根据所述读指令,对所述目标存储区域进行数据的读取。

上述步骤s607和步骤s608提供了步骤s507的一种实现方式,每一读指令都对应存储在各自的指令队列中,由于每一指令队列与每一存储区域一一对应,根据读指令所在的指令队列的标识,就可以确定互目标存储区域的标识。根据目标存储区域的标识,将其中未被其他内核所占用的存储区域确定为目标存储区域。

本申请实施例提供另一种数据读写方法,该方法包括:

步骤s701、在所述当前时钟周期到来之前,获取自身在当前时钟周期的次序编号中的次序;

其中,所述次序编号为每一内核在当前时钟周期对应的优先级队列中的位置编号;

步骤s702、确定所述次序之前的其他内核所选择的第一存储区域集合;

步骤s703、根据所述ram的所有存储区域和所述第一存储区域集合,确定未被选择的第二存储区域集合;

步骤s704、将所述第二存储区域集合中的存储区域,确定为所述未被占用的存储区域;

步骤s705、内核将读写指令存储在每一存储区域对应的指令队列中;

步骤s706、内核在当前时钟周期到来时,从所述指令队列中,获取在所述当前时钟周期内需要被执行的读写指令;

步骤s707、所述内核根据所述读写指令所在的指令队列的标识,确定对应的目标存储区域的标识;

步骤s708、根据所述目标存储区域的标识,确定所述读指令对应的第三存储区域集合;

步骤s709、将所述第三存储区域集合与所述第二存储区域集合的交集,确定为第四存储区域集合;

步骤s710、将所述第四存储区域集合中的存储区域,确定为所述目标存储区域;

步骤s711、内核在所述当前时钟周期内,根据所述读写指令,对所述目标存储区域进行数据的读写。

上述步骤s708至步骤s710提供了步骤s608在读写指令为读指令时的一种实现方式。当内核确定未被其他内核所选择的第二存储区域集合时,还需要确定自身的读取需求。根据读指令,确定自身需要读取的存储区域的第三存储区域集合。再取第三存储区域集合与第二存储区域集合的交集,确定为第四存储区域集合。这时,第四存储区域集合中的存储区域既为其他内核没有选择的存储区域,又是自身在当前时钟周期需要进行读取的存储区域。由于这里需要取第二存储区域集合与第三存储区域集合的交集,因此,第四存储区域集合可能是空集,也可能包含一个或多个存储区域。当第四存储区域集合为空集时,当前时钟周期可以跳过该内核,并将第三存储区域集合对应的读指令延迟到下一时钟周期再进行读取。在这种情况下,虽然当前时钟周期该内核被轮空,但是当前被轮空的指令会被积累,而到每个存储区域都有积累之后,就再也不会轮空,因为它总能选出一个来,因此只在一开始的时候会有所积累,到后面就再也不会轮空,并且由于一段时间内的每一时钟周期对应的优先级队列都不同,在长时间来看,对于每一内核都是公平的,并且整体来说,每一内核都有平等的机会根据自身的读指令来读取对应的每一存储区域。

在其他实施例中,当所述交集为空集时,在下一时钟周期到来时,获取在所述下一时钟周期内需要被执行的读写指令。

由于当前时钟周期的第三存储区域集合可能对应有读指令,但这些读指令对应的存储区域在第二存储区域集合中,因而在当前时钟周期被轮空,这些读指令会成为下一时钟周期需要被执行的读指令。因此,所述交集为空集时,直接等到下一时钟周期到来时,获取下一时钟周期内需要被执行的读写指令就可以了。

本申请实施例提供另一种数据读写方法,该方法包括:

步骤s801、在所述当前时钟周期到来之前,获取自身在当前时钟周期的次序编号中的次序;

其中,所述次序编号为每一内核在当前时钟周期对应的优先级队列中的位置编号;

步骤s802、确定所述次序之前的其他内核所选择的第一存储区域集合;

步骤s803、根据所述ram的所有存储区域和所述第一存储区域集合,确定未被选择的第二存储区域集合;

步骤s804、将所述第二存储区域集合中的存储区域,确定为所述未被占用的存储区域;

步骤s805、内核在当前时钟周期到来时,获取在所述当前时钟周期内需要被执行的读写指令;

步骤s806、确定所述第二存储区域集合中存储区域的剩余存储空间;

步骤s807、确定所述剩余存储空间满足条件的指定存储区域;

步骤s808、将未被占用的所述指定存储区域确定为所述目标存储区域;

步骤s809、内核在所述当前时钟周期内,根据所述读写指令,对所述目标存储区域进行数据的读写。

上述步骤s806和步骤s808提供了步骤s406在读写指令为写指令时的一种实现方式。由于第二存储区域集合中的每一存储区域对于当前进行选择的内核来说,都没有被其他内核所选择,因此,当前选择的内核可以根据存储空间的使用情况来决定优先写入哪一个存储区域。将剩余存储空间满足条件的存储区域,确定为指定存储区域。例如,将剩余存储空间最大的存储区域,确定为指定存储区域;也可以将剩余存储空间大于预设阈值的存储区域,确定为指定存储区域。由于对于写指令来说,可能不需要写入指定的存储区域,只要写入存储器即可,因此,这里也可以不根据写指令来确定目标存储区域。并且,根据剩余存储空间的大小来确定目标存储区域,更有助于充分利用存储器中整体的存储空间,避免冲突的发生。

在其他实施例中,所述确定所述剩余存储空间满足条件的指定存储区域,包括:将所述剩余存储空间最大的存储区域,确定为所述指定存储区域。

在每一内核确定自身对应的目标存储区域时,都将第二存储区域集合中剩余存储空间最大的存储区域作为自身确定的指定存储区域。如果写指令中有对应的存储区域的标识,那么就根据写指令对应的存储区域的标识,将指定存储区域中与写指令对应的存储区域确定为目标存储区域。如果写指令中没有对应的存储区域的标识,那么就直接将指定存储区域作为目标存储区域。这样,在长时间来看,存储器中每一存储区域的使用始终是均衡的,有效提升了存储空间的利用率。

本申请实施例提供另一种数据读写方法,该方法包括:

步骤s901、在所述当前时钟周期到来之前,获取自身在当前时钟周期的次序编号中的次序;

其中,所述次序编号为每一内核在当前时钟周期对应的优先级队列中的位置编号;

步骤s902、确定所述次序之前的其他内核所选择的第一存储区域集合;

步骤s903、根据所述ram的所有存储区域和所述第一存储区域集合,确定未被选择的第二存储区域集合;

步骤s904、将所述第二存储区域集合中的存储区域,确定为所述未被占用的存储区域;

步骤s905、内核在当前时钟周期到来时,获取在所述当前时钟周期内需要被执行的读写指令;

步骤s906、确定所述第二存储区域集合中存储区域的剩余存储空间;

步骤s907、确定所述第二存储区域集合中每一所述存储区域对应的计数器的计数值;

其中,所述计数值由当前时钟周期对应的存储区域已经完成的写入或读取次数确定;

步骤s908、根据每一计数器的计数值,将剩余存储空间最大的存储区域,确定为所述指定存储区域;

步骤s909、将未被占用的所述指定存储区域确定为所述目标存储区域;

步骤s910、内核在所述当前时钟周期内,根据所述读写指令,对所述目标存储区域进行数据的读写。

上述步骤s906和步骤s908提供了步骤s807的一种实现方式,通过对每一存储区域配置计数器来确定每一存储区域的存储空间使用情况。计数器的计数值由已经完成的写入或读取次数来确定。例如,当一个时钟周期有一个条目的数据写入一个存储区域时,该存储区域对应的计数器的数值递增;当一个时钟周期有一个条目的数据从一个存储区域读出并释放了相应的存储空间,那么对应的计数器的数值递减。由于每一存储区域是由存储器的整体存储区域均分得到的,因此每一存储区域的存储空间大小相同,根据每一存储区域的计数值的大小,就可以确定出每一存储区域的存储空间使用情况。根据计数器的计数值,确定出剩余存储空间最大的存储区域,确定为指定存储区域。

在其他实施例中,所述计数器的计数值为对应存储区域的指针队列中空指针的数量值;所述根据每一计数器的计数值,将剩余存储空间最大的存储区域,确定为所述指定存储区域,包括:

根据每一存储区域对应的指针队列中空指针的数量值,将空指针最多的存储区域,确定为所述指定存储区域。

在进行写操作时,可以将每一存储区域对应的空指针,存放在预设的指令队列中,当内核接收到写指令时,选择拥有最多空指针的存储区域对应的指令队列,从指令队列中取出空指针,并根据空指针所指向的地址,进行写操作。

本申请实施例还提供一种数据读写的方法,假设超大带宽交换芯片需要n个内核来实现,将多读多写的buffer即随机存储器(ram)的存储区域分成x等份,且x大于等于n,如图3a所示,以x=2n为例。切分后形成x=2n块ram,分别为存储区域#0、存储区域#1、存储区域#2、存储区域#3、……存储区域#(2n-2)和存储区域#(2n-1)。

维护2n个计数器,来标记每块ram剩余空间个数,称之为cnt0,cnt1,…,cnt2n-1。计数的实现方法是:当一块ram中的一个条目存储数据时计数器加1;当数据读出,释放一个条目时,则计数器减1。计数器最大值为ram的深度,表示当前这块ram里面没有存储数据,是空的。计数器的最小值是0,表示当前这块ram里面已经存满数据,不能再继续存储数据。

根据2n个计数器的大小进行排序,计数器越大,代表当前这块ram剩余空间越多。当n个内核同一个时钟周期有m个写请求时(m小于等于n),根据计数器的排序,从2n块ram中选择最空的m块ram,分别给这m个写请求写数据。这样,m个写请求分别写到了不同的ram中去,每块ram每个时钟周期最多也只会有一个写请求,因此只需要一个写接口就可以了。

这里通过排序的方式,永远使用最空的ram进行写,保证了长时间中,所有ram的使用效率相当,不会出现某些ram是空的,而有些ram是满的,从而导致所有的buffer还没有用完时,就有部分ram满,而无法服务所有的内核请求(因为buffer的释放具有随机性,如果不进行排序会出现这种可能:2n块ram中,有n+1块ram已经满了,而n-1块ram是空的,导致同时有n个写请求时,有一个写请求会被丢弃,导致在buffer没有全满的情况下就丢包)。

对于读指令,如图3b所示,每个内核创建2n个队列(队列#0、队列#1……队列#2n-1),分别对应2n块ram,当每个内核有读指令时,判断这次读指令是需要访问哪块ram,将这个读指令放入到对应的ram的队列中,例如,读指令01指定访问缓存器#0,那么就将这一读指令放入队列#0中。

通过轮询的方式,按顺序从每一个内核中先选出一个读指令(如果没有读指令,则跳过这个内核),即第一轮,先由core0选,再由core1选,core2,…,最后由coren-1选;第二轮由core1选,由core2选,…,coren-1,最后由core0选,n轮之后又从core0开始,保证每个内核公平。

在单个内核中再从2n个请求中选一个读指令出来,第一个选来的读指令,假设是第a块ram(a大于等于0,小于等于2n-1),那么后面的所有的内核必须把第a块ram对应的请求队列,移出待选队列。举个例子:

有4个内核,每个内核有0~7个队列。假设当前一轮,内核的顺序是2、3、0、1。假设core2选中了ram2的读指令,那么core3只能从0~1、3~7的队列中挑选。假设core3挑中了ram4的读指令,那么core0只能从0~1、3、5~7的队列中挑选。假设core0挑中了ram5的读指令,那么core1只能从0~1、3、6~7的队列中挑选。通过这种方式,每个内核挑选的读指令都不在同一块ram中,因此每块ram最多只会有1个读指令,因此只需要1个读接口就可以。

因为读指令基本都是随机的,因此在某段时间内,某个内核的读指令只在很少的几块ram中,而当这个内核在某一轮中排在后面,碰巧读指令对应的ram被前面的内核选走了,那么这一轮则会被轮空,从而这一时刻内会出现带宽达不到的情况。但是由于读指令的随机性,以及写的策略性(保证每个ram利用率均等),因此这个只会在某一个时刻出现,一旦错过一轮,便会积累一个读指令,当积累的读指令对应的ram数大于等于n时,便不可能再错过,因此从长时间来看,读的带宽永远是够的。

通过上述读写的方式来看,ram等分成x份,x越大,对ram读写性能越好,写的ram均衡性越高,而读轮空的几率也越小。

本申请实施例还提供一种数据读写装置,该装置所包括的各单元、以及各单元所包括的各模块,可以通过数据读写设备中的处理器来实现;当然也可通过逻辑电路实现;在实施的过程中,处理器可以为中央处理器(cpu)、微处理器(mpu)、数字信号处理器(dsp)或现场可编程门阵列(fpga)等。

图4为本申请实施例提供的数据读写装置的组成结构示意图,如图4所示,该装置400包括:

第一获取单元401,配置为在当前时钟周期到来时,获取在所述当前时钟周期内需要被执行的读写指令;

第二获取单元402,配置为获取与所述读写指令关联的目标存储区域;所述目标存储区域为ram中的至少两个存储区域中未被占用的存储区域;

读写单元403,配置为在所述当前时钟周期内,根据所述读写指令,对所述目标存储区域进行数据的读写。

在其他实施例中,所述装置还包括:存储单元,配置为将读写指令存储在每一存储区域对应的指令队列中;所述第一获取单元,还配置为在当前时钟周期到来时,从所述指令队列中,获取在所述当前时钟周期内需要被执行的读写指令。

在其他实施例中,所述第二获取单元,包括:第一确定模块,配置为所述内核根据所述读写指令所在的指令队列的标识,确定对应的目标存储区域的标识;第二确定模块,配置为根据所述目标存储区域的标识,将对应的存储区域中未被占用的存储区域确定所述目标存储区域。

在其他实施例中,所述装置还包括:确定单元,配置为在所述当前时钟周期到来之前,从ram中的至少两个存储区域中,确定未被占用的存储区域。

在其他实施例中,所述确定单元,包括:获取模块,配置为在所述当前时钟周期到来之前,获取自身在当前时钟周期的次序编号中的次序;其中,所述次序编号为每一内核在当前时钟周期对应的优先级队列中的位置编号;第三确定模块,配置为根据所述次序之前的其他内核所选择的存储区域,将未被其他内核选择的存储区域,确定为所述未被占用的存储区域。

在其他实施例中,所述第三确定模块,包括:第一确定子模块,配置为确定所述次序之前的其他内核所选择的第一存储区域集合;第二确定子模块,配置为根据所述ram的所有存储区域和所述第一存储区域集合,确定未被选择的第二存储区域集合;第三确定子模块,配置为将所述第二存储区域集合中的存储区域,确定为所述未被占用的存储区域。

在其他实施例中,所述读写指令为读指令,所述第二确定模块,包括:第四确定子模块,配置为根据所述目标存储区域的标识,确定所述读指令对应的第三存储区域集合;第五确定子模块,配置为将所述第三存储区域集合与所述第二存储区域集合的交集,确定为第四存储区域集合;第六确定子模块,配置为将所述第四存储区域集合中的存储区域,确定为所述目标存储区域。

在其他实施例中,所述装置还包括:获取单元,配置为所述交集为空时,在下一时钟周期到来时,获取在所述下一时钟周期内需要被执行的读写指令。

在其他实施例中,所述读写指令为写指令;所述第二确定模块,包括:第七确定子模块,配置为确定所述第二存储区域集合中存储区域的剩余存储空间;第八确定子模块,配置为确定所述剩余存储空间满足条件的指定存储区域;第九确定子模块,配置为根据所述目标存储区域的标识,将未被占用的所述指定存储区域确定为所述目标存储区域。

在其他实施例中,所述第八确定子模块,还配置为将所述剩余存储空间最大的存储区域,确定为所述指定存储区域。

在其他实施例中,所述第八确定子模块,还配置确定所述第二存储区域集合中每一所述存储区域对应的计数器的计数值;其中,所述计数值由当前时钟周期对应的存储区域已经完成的写入或读取次数确定;根据每一计数器的计数值,将剩余存储空间最大的存储区域,确定为所述指定存储区域。

以上装置实施例的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果。对于本申请装置实施例中未披露的技术细节,请参照本申请方法实施例的描述而理解。

需要说明的是,本申请实施例中,如果以软件功能模块的形式实现上述数据读写方法,并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分不仅仅存在于芯片实现中,也可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一个交换芯片执行本申请各个实施例所述方法的全部或部分。而前述的存储介质包括:u盘、移动硬盘、只读存储器(readonlymemory,rom)、磁碟或者光盘等各种可以存储程序代码的介质。这样,本申请实施例不限制于任何特定的硬件和软件结合。

对应地,本申请实施例提供一种交换芯片,包括存储器、内核和ram,所述存储器存储有可以通过所述内核运行的计算机程序,所述内核在运行所述计算机程序时实现上述实施例提供的数据读写方法中的步骤,该方法包括:

在当前时钟周期到来时,获取在所述当前时钟周期内需要被执行的读写指令;

获取与所述读写指令关联的目标存储区域;所述目标存储区域为ram中的至少两个存储区域中未被占用的存储区域;

在所述当前时钟周期内,根据所述读写指令,对所述目标存储区域进行数据的读写。

对应地,本申请实施例提供另一种交换芯片,包括:内核和ram,所述内核用于实现上述实施例提供的数据读写方法中的步骤。

对应地,本申请实施例提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机可执行指令,该计算机可执行指令配置为执行上述实施例提供的数据读写方法中的步骤。

这里需要指出的是:以上存储介质和设备实施例的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果。对于本申请存储介质和设备实施例中未披露的技术细节,请参照本申请方法实施例的描述而理解。

需要说明的是,图5为本申请实施例中交换芯片的一种硬件实体示意图,如图5所示,该交换芯片500的硬件实体包括:内核501、通信接口502和存储器503,其中,

内核501通常控制交换芯片500的总体操作。

通信接口502可以使交换芯片500通过网络与其他终端或服务器通信。

存储器503配置为存储由内核501可执行的指令和应用,还可以缓存待内核501以及交换芯片500中各模块待处理或已经处理的数据(例如,图像数据、音频数据、语音通信数据和视频通信数据),可以通过随机访问存储器(randomaccessmemory,ram)实现。

应理解,说明书通篇中提到的“一个实施例”或“一实施例”意味着与实施例有关的特定特征、结构或特性包括在本申请的至少一个实施例中。因此,在整个说明书各处出现的“在一个实施例中”或“在实施例中”未必一定指相同的实施例。此外,这些特定的特征、结构或特性可以任意适合的方式结合在一个或多个实施例中。应理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。

需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。

在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。

上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元;既可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本实施例方案的目的。

另外,在本申请各实施例中的各功能单元可以全部集成在一个处理单元中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。

本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、只读存储器(readonlymemory,rom)、磁碟或者光盘等各种可以存储程序代码的介质。

或者,本申请上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一个交换芯片执行本申请各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、rom、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,仅为本申请的实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。

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