多个线程的存储器访问方法及系统与流程

文档序号:14784979发布日期:2018-06-27 22:08阅读:318来源:国知局
多个线程的存储器访问方法及系统与流程

本申请要求递交于2016年12月20日的号码为62/436,487的美国临时申请案的优先权,其整体通过引用的方式纳入本文当中。

技术领域

本发明实施例涉及片上存储器在并行计算系统中的寻址和访问。



背景技术:

存储器子系统的设计对存储器访问速度有着明显的影响。频繁被访问的数据可以存储在芯片上,例如在高速缓冲存储器(cache)、缓冲区(buffer)或者其他低延时(low-latency)的存储设备。较不频繁使用的数据或者预测为较不频繁使用的数据可以存储在片外存储器当中,如动态随机存取存储器(dynamic random access memory,简写为DRAM),硬盘驱动器(hard drive)或者其他高容量的存储设备,这些高容量的存储设备一般具有相比于片上存储器更高延时和更低的速度。

在并行计算系统中(parallel computing system),处理器可以包括多个线程(multiple threads),且该多个线程可以同时访问一个片上存储器(on-chip memory)。当片上存储器支持向量化(vectorized)数据访问的时候会增加存储器的带宽(bandwidth),例如:当该多个线程连续地访问存储于片上存储器的数据阵列中数据元素的时候。然而,不同的并行运算需要不同的存储器访问模式。例如,在一个直方图计算中,每个线程可能被给予更新存储空间值(bin value)的任务,该存储空间值表示具有给定像素值范围的像素的数量。该线程可以并行地处理像素值,但是存储于对应的多个存储空间中的存储器位置可能并不遵循一个统一模式。因此,在直方图计算期间,在多个线程的存储器访问中经常有冲突出现。

因此,需要在并行计算系统中提高存储器访问的效率。



技术实现要素:

在一个实施例中,提供一个管理片上存储器由多线程访问的系统。系统包括:多个并行的处理器单元,用以执行所述多个线程;片上存储器,包括多个存储器单元且每个所述多个存储器单元包括第一区域和第二区域,其中所述第一区域和所述第二区域具有不同的存储器寻址方案,用于所述多个线程的并行访问;以及地址解码器,耦合于所述多个并行处理单元和所述片上存储器,所述地址解码器根据来自所述多个并行处理单元的解码的多个地址信号,激活所述多个线程对所述第一区域和所述第二区域其中之一的多个存储器位置的访问。

在另一个实施例中,提供了一个可执行存储器分配的系统。系统包括:多个并行处理器单元;片上储存器,包括多个存储器单元且每个所述多个存储器单元包括第一区域和第二区域,其中所述第一区域和所述第二区域具有不同的存储器寻址方案,用于由所述多个线程的并行访问;以及地址解码器,耦合于所述多个并行处理单元和所述片上处理器,所述地址解码器用于:接收来自于所述多个线程去并行访问片上存储器的多个请求,每个请求指定用于存储器访问的被请求的地址,每个请求指定用于存储器访问的被请求的地址;根据所述第一区域和所述第二区域之间的分界线,确定所述被请求的地址是否在所述片上存储器的所述第一区域或者所述第二区域之中;激活所述多个线程对所述第一区域和所述第二区域其中之一的多个存储器位置的访问。

在又一实施例中,提供了一种用于解码器解码的方法,其中所述解码器耦合至并行处理器单元以执行进程的多个线程。方法包括:接收来自于所述多个线程的去并行访问包括多个存储器单元的片上存储器的多个请求,每个所述多个请求指定用于存储器访问的被请求的地址;根据在第一区域和第二区域之间的分界线,确定所述被请求的地址是否在所述片上存储器的第一区域或者所述片上存储器的第二区域之中,其中所述第一区域和所述第二区域具有不同的存储器寻址方案,用于由所述多个线程的并行访问;激活所述多个线程对所述第一区域和所述第二区域其中之一的多个存储器位置的访问。

本发明的实施例能够实现高效的由多个并行线程访问片上存储器,本发明实施例的优点将在下面的描述中进行详细说明。

附图说明

本发明以示例的方式示出,而不是作为限制性。在附图中,具有相同的附图标记表示相似的元件。应当注意的是,本发明实施例中公开中的不同的参考“一”或者“一个”对于相同的实施例并不是必要的,这些参考表示至少一个。另外,当一个特殊的特征、结构或者特性被描述为与一个实施例相关,需要主张的是,无论是否在说明书中明确描述,对于本领域普通技术人员而言,将这一特征、结构或者特性与其他实施例建立联系以实现其他实施例是显而易见的。

图1示出了根据一实施例的并行计算系统的示例。

图2示出了根据一实施例的用于片上存储器的混合寻址方案。

图3示出了根据一实施例的第一存储器寻址方案。

图4示出了根据一实施例的第二存储器寻址方案。

图5示出了根据一实施例的地址解码进程的流程图。

图6示出了根据一实施例的由地址解码器执行的用于管理由多个线程并行存储器访问的方法的流程图。

具体实施方式

在下述描述中,提出了许多具体的细节。然而,能够理解的是,本发明的实施例没有这些具体的细节也能够实施。在另一方面,为了不混淆对这些描述的理解,众所周知的电路,没有详细的示出其结构和技术。然而,本领域普通技术人员应当理解,可以在没有这些具体细节的情况下实施本发明。而对于本技术领域的这些普通技术人员,根据所包括的描述,可以不需要过度的实验就能够实现适当的功能。

本发明实施例提供了一种用于在并行计算系统中高效的片上存储器访问的系统和方法。术语“片上存储器”在此用于指的是与使用存储器单元的处理器相同的芯片上提供的多个存储器单元,例如在系统芯片(system-on-a-chip,简写为SOC)的计算系统中。在一个实施例中,片上存储器地址空间可用被分成两个区域:一个直接访问存储器寻址区域(direct access memory addressing region,简写为DAR)和一个间接访问存储器寻址区域(indirect access memory addressing region,简写为IDAR)。在DAR和IDAR之间是一个分界线,其定义两个区域的尺寸。分界线可以是由软件可配置的或者可以是基本固定的。每个区域最适合由多个线程并行(相等地,同时地)存储器访问的一个特定的模式。当存储器访问模式匹配分配区域的寻址方案的时候,多个线程可以在一个存储器访问周期中并行访问片上存储器。在一个实施例中,一个存储器访问周期可以与一个时钟周期一样。

图1示出了根据一个实施例的系统100。系统100可以是一个SOC系统。系统100包括多个并行处理单元110和片上存储器120。每个并行处理单元110可以是一个包括用于执行算数和/或逻辑运算的电路的处理器,例如中央处理单元(central processing unit,简称为CPU),向量处理器(vector processor)中的处理元件以及算数和逻辑单元(arithmetic and logical unit,简称为ALU)等等。片上存储器120可以包括多个存储器单元125,例如静态随机存取存储器(static random access memory,简称为SRAM)或者与片外存储相比的高流通量、低延时的其他存储器,例如动态随机存取存储器(dynamic random access memory,简称为DRAM)。地址解码器130耦合到片上存储器120,将来自于多个并行处理单元110的多个地址信号解码到片上存储器120上的多个目的地址。系统100可以通过互连(interconnect)150、总线或者其他连接类型耦合到片外存储器,也就是系统存储器140例如易失性存储器和/或非易失性存储器。系统100可以是计算装置、通信装置或者计算和通信装置组合的一部分。系统100可以包括未在图1中示出的额外的器件,例如额外的处理器;网络接口,例如天线,接收器和信号传送器;用户界面,例如显示屏,触控屏,一个或多个按钮,触控板等等。

图2示出了根据一实施例的片上存储器120更进一步的细节。在一个实施例中,在片上存储器120上的每个存储器单元125是SRAM模块。在备选的实施例中,也可以使用适合于片上实现的其他类型的存储器单元125。为了简单说明,图2示出了4个存储器单元125(例如:MU0,MU1,MU2和MU3),每个存储器单元125包含第一区域210(显示为有点的区域)和第二区域220(显示为白色的区域)。应当理解的是,片上存储器120可以包含任意数量的存储器单元125。在一个实施例中,第一区域210是DAR,以及第二区域是IDAR。第一区域210和第二区域220具有用于由多个线程并行访问的不同的存储器寻址方案。在第一区域210和第二区域220之间的分界线250可以是由软件可配置的或者可以是基本固定的。在一个实施例中,分界线可以是均匀地设置穿过所有存储器单元125,以致所有第一区域210具有相同的尺寸以及所有第二区域220具有相同的尺寸。在一些实施例中,每个存储器单元125可以包括除第一区域210和第二区域220之外的一个或多个存储器区域。

还参考图1,当多个并行处理单元110执行一个具有多个并行线程的进程的时候,基于进程的存储器访问模式,存储器位置可以在第一区域210和第二区域220之一(也就是第一区域210或者第二区域220中的任何一个)中被分配给线程。在一个实施例中,操作系统(operating system,简称为OS)在运行时间,或者编译程序在编译时间可以决定其中一个所述区域来分配存储器给多个线程以实现高效的存储器访问。在一个实施例中,程序员可以指定其中一个区域用于将存储器分配给多个线程。

在进程执行的期间,多个线程可以发送用于并行访问片上存储器120的存储器的多个访问请求。存儲器访问的多个请求包括多个地址信号,其通过地址解码器130解码。根据被解码的多个地址信号,地址解码器130在第一区域210或第二区域220任意一个中激活或者导致激活对多个存储器位置的访问。此处描述的多个存储器位置具有相同的尺寸。每个存储器位置可以有16位、32位或者64位字的尺寸,也可以使用其他数据尺寸。

图3示出了根据一实施例的多个线程访问在片上存储器120中的存储器单元125的第一区域210。虽然图3示出了4个存储器单元125(MU0,MU1,MU2和MU3),应当理解的是,片上存储器120可以包含任意数量的存储器单元。此外,虽然图3示出了在每个存储器单元125中仅有第一区域210,应当理解的是,每个存储器单元125可以进一步包括未在本图中示出的第二区域220(如图2所示)。在这个示例中,四个并行线程T0,T1,T2和T3已经在第一区域210中被分配存储器位置并且正在访问第一区域210。当给定相同的基地址(例如A2)的时候,在一个存储器访问周期中,四个线程可以同时访问在相同的存储器单元(例如MU1)中的连续的地址(分别地用偏移量0,1,2和3),如图3中通过四个箭头线所示。第一区域210是DAR,也就是直接访问存储器寻址区域,其中所述多个线程分配的多个存储器位置是均匀分布在每个存储器单元125中以及跨越不同的存储器单元125中。每个线程在一个固定的偏移地址处被分配多个存储器位置,例如:T0所分配的多个存储器位置处于每个基地址(A0,A1,A2等等)的偏移地址0处,T1所分配的多个存储器位置处于每个每个基地址(A0,A1,A2等等)的偏移地址1处以及等等。此外,被分配到每个线程的多个存储器位置由固定数量的多个存储器位置隔开,在这个示例中,固定数量是4,其是线程的数量。

引起均匀存储器访问的多个线程可以被分配片上存储器120上的第一区域210以实现高效的存储器访问。例如,在一些图像处理应用程序中,连续像素的数值沿着一个指定方向存储于连续的多个存储器位置中。一个进程可以包括多个线程并且每个线程可以有相同的存储器访问模式,例如读取多个邻近像素的数值以及将一个平均像素的数值写入阵列元素中。在一个实施例中,这种存储器的读取和写入可以当作向量化的读取和写入来执行,并且第一区域210最适合向量化的读取和写入以及其他类型的均匀存储器访问。

图4是示出了根据一实施例的多线程访问片上存储器120的第二区域220。值得注意的是,根据这个存储器寻址方案,不同的线程被分配不同的存储器单元125。换句话说,每个线程被分配各自的一个或多个存储器单元125的第二区域220。虽然图4示出了4个存储器单元(MU0,MU1,MU2和MU3),可以理解的是,片上存储器120可以包含任意数量的存储器单元。此外,虽然图4仅示出了在四个存储器单元125的每一个中有第二区域220,可以理解的是,每个存储器单元125进一步包括未在本图中示出的第一区域210(图2)。

在这个示例中,四个并行线程T0,T1,T2和T3已经在第二区域220中被分配了多个存储器位置并且正在访问第二区域220。当给定的对应于第二区域220各自的分界线的不同的基地址(例如B0,B1,B2和B3)和相同的偏移地址(例如D0)的时候,在一个存储器访问周期中,四个线程同时访问在不同的存储器单元中(分别地在MU0,MU1,MU2和MU3)对应的多个存储器位置,如图4的四条实线箭头所示。

在一个实施例中,每个线程可以具有它自己的用于存储器单元125的读取和写入指针,其中该线程被分配给了存储器单元125。例如,T0被分配了MU0,以及通过使用它的读取和写入指针,T0可以独立于其他线程访问在MU0中的第二区域220内的任何位置。相同的存储器访问方法应用于其他线程。

因此,四个线程被给予不同的偏移地址(例如分别地给予D2,D3,D7和D6)并且可以在一个存储器访问周期中独立于其他线程同时访问他们各自分配的存储器空间,如图4通过四个虚线箭头所示。如之前所提到的,第二区域220是IDAR,也就是间接访问存储器寻址区域,其中每个线程被分配在存储器单元125中的连续的存储器位置的一段。在一个实施例中,每个线程被分配在存储器单元125中的整个第二区域220。

在一个进程计算一个图像的直方图的示例中,每个线程被给予更新一个存储空间(bin)的任务,该存储空间表示具有给定像素值范围的像素的数量。每个线程可以从图像的一部分读取一个像素值然后增加对应于该像素值的存储空间值。在任何给定的时间,不同的线程可以更新相同的存储空间,或者可以更新不同的存储空间。根据第一区域210的寻址方案在相同的存储器单元125中将连续的存储空间映射至连续的多个存储器位置很有可能在多个线程中引起频繁的存储器访问冲突。配置不同存储单元125的第二区域220至不同的线程允许线程在没有冲突的情况下同时的访问存储器单元125。因此,可以提升存储器访问效率。

然而,需要注意的是,在第一区域210和第二区域220中的基地址和偏移地址可以是不同的(例如,具有不同的位宽度)。在下文的描述中,在第一区域210中的基地址和偏移地址分别地被称为第一基地址和第一偏移地址。在第二区域220中的基地址和偏移地址分别地被称为第二基地址和第二偏移地址。

图5示出了根据一实施例的由地址解码器130(如图1所示)执行地址解码的流程图,用于管理片上存储器由多个线程访问的系统(例如系统100)。当地址解码器130在步骤510中接收到用于存储器访问的被请求的地址。其在步骤520中,将被请求的地址与标记第一区域210的尾部和第二区域220的起点的分界线地址进行比较。在一个实施例中,分界线地址可以是多个每单元分界线地址,每个分界线地址在一个存储单元125中标记第一区域210的尾部和第二区域220的起点。地址解码器130可以首先确定被请求的地址指向哪一存储器单元125,然后决定被请求的地址在哪一区域中。

如果被请求的地址小于分界线地址,在步骤530中,根据第一区域210的寻址方案,地址解码器130解码被请求的地址。第一区域210偏移地址(又称为第一偏移地址)中的位数可以相当于线程的数量。对于图3所描述的四个线程的示例,两个位可以被用于第一偏移地址。被请求的地址中的剩下的位是第一基地址,其标识如图3所示的基地址A0,A1,A2等等。

如果被请求的地址不小于分界线地址,在步骤540中,根据第二区域220的寻址方案,地址解码器130解码被请求的地址。在第二区域220偏移地址(又称为第二偏移地址)中的位数可以对应于第二区域220的尺寸。对于图4所描述八个存储器位置被分配给每个线程中的示例,三个位可以被用作第二偏移地址,在被请求的地址中剩下的位是第二基地址,其识别如图4所示的基地址B0,B1,B2等等。需要注意的是,每个第二基地址也分别为存储器单元125标记第二区域220的开始。在一个实施例中,第二基地址可以共同的用作分界线地址,用于地址解码器130确定被请求的地址是否落在第一区域210或第二区域220中。

图6是根据一实施例的由地址解码器(例如图1中的地址解码器)执行的方法600的流程图,用于管理由一进程的多个线程并行的存储器访问。地址解码器耦合于执行线程的并行处理器单元,并且也耦合于包括多个存储器单元的片上存储器。

方法600开始于解码器从多个线程中接收到去并行访问片上存储器的多个请求,每个请求指定用于存储器访问的被请求的地址(步骤610)。地址解码器根据第一区域和第二区域之间的分界线,确定被请求的地址是否在片上存储器的第一区域或者第二区域之中,其中第一区域和第二区域具有不同的用于多个线程并行访问的存储器寻址方案(步骤620)。地址解码器然后在第一区域和第二区域之一中激活由所述多个线程访问多个存储器位置(步骤630)。

因此,根据DAR存储器寻址方案,多个线程可以使用具有不同偏移量的相同的基地址来访问在相同的片上存储器单元中连续的多个存储器位置。根据IDAR存储器寻址方案,多线程可以使用具有相同偏移地址的不同基地址来访问在不同的片上存储器单元中对应的多个存储器位置,或者可以使用具有不同偏移地址的不同基地址来访问在不同片上存储单元中不同的多个存储器位置。

通过所提供的在每个存储器单元125中的混合存储器寻址方案,可以提升存储器访问的效率。通过将多个线程中的存储器访问冲突减到最少,双存储器区域允许并行多个线程高效率的去访问片上存储器。因此,多个线程可以在一个存储器访问周期中同时访问片上存储器。

图5和图6流程图的操作已经参考图1-4的示例性实施例进行描述。然而,应当理解的是,图5和图6流程图的操作可以由除了参考图1-4所讨论的实施例之外的本发明的实施例来执行,参考图1-4的所讨论的实施例可以执行不同于参考流程图所讨论的实施例的操作。其中图5和图6的流程图示出了由本发明某一实施例所执行的一个具体的操作次序,应当理解的是,这一次序是示例性的(例如可选的实施例可以以不同的顺序执行操作,组合某些操作,重叠某些操作等等)。

这里已经描述了各种各样的功能组件或块。本领域技术人员能够意识到,功能块可以通过电路(专业电路或通用电路,其在一个或多个处理器的控制和编码指令下运行)较好的实施,其通常代表性的包括与这里描述的功能和操作一致的,以这样的方式配置于控制电路运行的晶体管。

虽然本发明已经通过几个实施例进行描述,本领域技术人员将认识到,本发明不限于所描述的实施例,可以在所附权利要求的精神和范围内进行修改和变更,因此,该描述应当认为是说明性的而非限制性的。

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