具体实施方式
为了使本领域的人员更好地理解本公开实施例中的技术方案,下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本公开实施例一部分实施例,而不是全部的实施例。基于本公开实施例中的实施例,本领域普通技术人员所获得的所有其他实施例,都应当属于本公开实施例保护的范围。
下面结合附图进一步说明本公开实施例具体实现。
图1A为根据一个示例的处理单元的示意性结构图。该计算机系统10是“中心”系统架构的示例。计算机系统10可基于目前市场上各种型号的处理单元构建,并由WINDOWS操作系统版本、UNIX操作系统、Linux操作系统等操作系统驱动。此外,计算机系统10可以在PC机、台式机、笔记本、服务器和移动通信装置等硬件和/或软件中实施。
如图1A所示,本公开实施例的计算机系统10可以包括一个或多个处理单元12,以及存储器14。
计算机系统10中的存储器14可以主存储器(简称为主存或内存)。用于存储由数据信号表示的指令信息和/或数据信息,例如存放处理单元12提供的数据(例如为运算结果),也可以用于实现处理单元12与外部存储设备16(或称为辅助存储器或外部存储器)之间的数据交换。
在一些情形下,处理单元12可能需要访问存储器14,以获取存储器14中的数据或对存储器14中的数据进行修改。由于存储器14的访问速度较慢,为了缓解处理单元12与存储器14之间的速度差距,计算机系统10还包括与总线11耦合的高速缓冲存储器18,高速缓冲存储器18用于对存储器14中的一些可能会被反复调用的程序数据或者报文数据等数据进行缓存。高速缓冲存储器18例如由静态随机存储器(Static Random Access Memory,简称为SRAM)等类型的存储装置实现。高速缓冲存储器18可以为多级结构,例如具有一级缓存(L1 Cache)、二级缓存(L2 Cache)和三级缓存(L3 Cache)的三级缓存结构,也可以是三级以上的缓存结构或其他类型缓存结构。在一些实施例中,高速缓冲存储器18的一部分(例如一级缓存,或一级缓存和二级缓存)可以集成在处理单元12内部或与处理单元12集成于同一片上系统中。
基于此,处理单元12可以包括指令执行单元13、还可以包括内存管理单元等部分。指令执行单元13在执行一些需要修改内存的指令时发起写入访问请求,该写入访问请求指定了需要写入内存中的写入数据和相应的物理地址;内存管理单元用于将这些指令指定的虚拟地址转译为该虚拟地址映射的物理地址,写入访问请求指定的物理地址与相应指令指定的物理地址可以一致。
存储器14和高速缓冲存储器18之间的信息交互通常按块来组织。在一些实施例中,高速缓冲存储器18和存储器14可以按照相同的空间尺寸被划分成数据块,数据块可以作为高速缓冲存储器18和存储器14之间的数据交换的最小单位(包括预设长度的一个或多个数据)。为了表述简洁清晰,下面将高速缓冲存储器18中的各个数据块简称为缓存块(可以称为cacheline或高速缓存线),且不同的缓存块具有不同的缓存块地址;将存储器14中的各个数据块简称为内存块,且不同的内存块具有不同的内存块地址。缓存块地址例如包括用于定位数据块的物理地址标签。
由于受到空间和资源的限制,高速缓冲存储器18无法对存储器14中的全部内容都进行缓存,即高速缓冲存储器18的存储容量通常小于存储器14,高速缓冲存储器18提供的各个缓存块地址无法对应存储器14提供的全部内存块地址。处理单元12在需要访问内存时,首先经总线11访问高速缓冲存储器18,以判断所要访问的内容是否已被存储于高速缓冲存储器18中,如果是,则高速缓冲存储器18命中,此时处理单元12直接从高速缓冲存储器18中调用所要访问的内容;如果处理单元12需要访问的内容不在高速缓冲存储器18中,则高速缓冲存储器18,处理单元12需要经总线11访问存储器14,以在存储器14中查找相应的信息。因为高速缓冲存储器18的存取速率非常快,因此当高速缓冲存储器18命中时,处理单元12的效率可以显著提高,进而也使整个计算机系统10的性能和效率得以提升。
下面将结合两个具体的处理单元架构对计算机系统的工作原理进行一般性的说明,应理解,下述两个处理单元架构仅仅为示例性的,计算器系统还可以采用其他的处理单元架构。
处理单元架构的示例
图1B是图1的处理单元的示例的示意性框图,在本示意性架构中,处理单元可以为GPU。
在一些实施例中,处理单元架构可以包括用于处理指令的一个或多个流处理单元122(Streaming Multiprocessor,SM),指令的处理和执行是可以被用户(例如通过应用程序)和/或系统平台控制的。在一些实施例中,每个SM 122可以用于处理特定的指令集。在一些实施例中,指令集可以支持复杂指令集计算(Complex Instruction Set Computing,CISC)、精简指令集计算(Reduced Instruction Set Computing,RISC)或基于超长指令字(Very Long Instruction Word,VLIW)的计算。不同的SM 122可以各自处理不同或相同的指令集。在一些实施例中,SM 122还可以包括其他处理模块,例如数字信号处理单元(Digital Signal Processor,DSP)等。
在一些实施例中,图1A示出的高速缓冲存储器18可以被部分集成于SM 122中,作为多级缓存182。且根据不同架构,高速缓冲存储器18可以是位于各个SM 122之内和/或之外的单个或多级的内部高速高速缓冲存储器(如图1B示出的2级高速高速缓冲存储器L1和L2,图1B中统一标识为182),也可以包括面向指令的指令高速缓存和面向数据的数据高速缓存。在一些实施例中,SM 122中的各个部件可以共享至少一部分的高速缓冲存储器,作为共享内存136,如图1B所示,多个SM 122共用第二级高速高速缓冲存储器L2,应理解,其他高速缓存结构也可以作为SM 122的外部高速缓存。
在一些实施例中,如图1B所示,SM 122可以包括多个流处理器1221(StreamingProcessor,SP)寄存器文件138(Register File),寄存器文件138可以包括用于存储不同类型的数据和/或指令的多个寄存器,这些寄存器可以是不同类型的。例如,寄存器文件138可以包括:整数寄存器、浮点寄存器、状态寄存器、指令寄存器和指针寄存器等。寄存器文件138中的寄存器可以选用通用寄存器来实现,也可以根据SM 122的实际需求采用特定的设计。
每个SP 1221与寄存器文件138连接,用于执行指令序列(即程序)。SP 1221取出从SM 122进行指令调度之后的指令,SP 1221对取出的指令进行译码、执行译码后的指令、保存指令执行结果等步骤,如此循环,直到执行完指令序列中的全部指令或遇到停机指令。
在执行指令时,每个SP 1221可以使用寄存器文件138中与该SP 1221对应的寄存器。不同的SP 1221可以共用共享内存136中存储空间,共享内存136与寄存器文件138可以同一存储介质中的不同逻辑区域。此外,不同SM 122之间还可以具有全局内存等(未示出)。
此外,每个SP 1221与寄存器文件138可以与SM 122的调度单元1222连接。在图1B的各个示例中,可以采用直接寻址方式或间接寻址方式进行数据访问。调度单元1222可以用于生成直接存储复制指令和间接存储复制指令,作为直接寻址方式的一个示例,处理单元核1201或SM 122可以响应直接存储复制指令经由高速缓冲存储器18从存储器14(包括存储器141或存储器142)获取数据信息的地址信息,然后根据地址信息再从存储器14中获取数据信息。作为间接寻址方式的一个示例,处理单元核1201或SM 122可以响应间接存储复制指令经由高速缓冲存储器18从存储器14(包括存储器141或存储器142)获取对应于源数据的索引地址,根据索引地址经由高速缓冲存储器18从存储器14获取索引,然后根据索引计算出源数据的源地址,再根据源地址经由高速缓冲存储器18从存储器14获取源数据。在需要对存储器中邻近存储的大量源数据进行并行计算时,采用上述间接寻址方式,处理单元能够先获取到源数据对应的索引,再根据索引计算出源数据的实际源地址,在一定程度上提高了寻址的效率,但是相比于直接寻址方式,根据索引计算出源数据的实际源地址占用了更多了处理单元的计算资源。
下面首先将结合图2A和图2B来说明本公开实施例的处理单元。图2A为根据本公开的另一实施例的处理单元的示意性框图。图2B为根据本公开的另一实施例的包括处理单元的计算装置的示意性结构图。
图2A的处理单元200包括运算单元210、寻址单元230和索引缓存220。寻址单元230和索引缓存220位于处理单元200外部的主存储区与运算单元210之间,运算单元210具有内部缓存211。
运算单元210执行间接存储复制指令,间接存储复制指令至少具有基址、索引地址和目的地地址,以将索引地址发送到索引缓存220,将基址和目的地地址发送到寻址单元230。
索引缓存220根据索引地址,从主存储区加载相应索引,发送至寻址单元230。
寻址单元230根据基址和索引,确定源数据对应的主存储区的源地址。
寻址单元230根据源地址,从主存储区中加载源数据,并发送到内部缓存211的目的地地址。
应理解,文中的处理单元包括但不限于诸如图1A和1B所示的各种处理单元架构,包括但不限于多处理器结构、CPU架构、GPU架构等。当处理单元为CPU时,运算单元可以为CPU核;当处理单元为GPU时,运算单元可以为SM或SP。当运算单元为SM时,内部缓存可以为一级缓存、共享内存或二级缓存;当运算单元为SP时,内存缓存可以为一级缓存或共享内存。
还应理解,缓存240可以处理单元内的多级缓存中的任一缓存。缓存可以实现为动态随机存取存储器(Dynamic Random Access Memory,DRAM)
还应理解,索引缓存220可以对应于缓存240配置。具体地,索引缓存220是与缓存240独立的缓存。例如,索引缓存220可以为在缓存240中在逻辑上划分出的独立的存储空间。又例如,索引缓存220也可以是与缓存240独立的物理存储空间。
还应理解,寻址单元230可以对应于缓存240配置。寻址单元230可以以软件形式或硬件形式进行配置,寻址单元230可以与缓存240或索引缓存220直接通信,例如,从缓存240或索引缓存220直接获取任何形式的数据或将数据缓存在缓存240或索引缓存220中。主存储区可以实现为主存或主存中的一分块,例如,实现为动态随机存取存储器。
还应理解,上述的寻址单元230和索引缓存220可以对应于多级缓存中的同一级缓存,也可以对应于不同级的缓存。
还应理解,基址可以为理解为一系列源数据中的第一个源数据存放的位置,换言之,基址可以为第一个源数据的源地址。其他源数据的源地址可以参考基址得到,例如,源地址=基址+相对位置,其中相对位置是指该源数据的源地址与基址之间的相对位置,相对位置可以基于源地址相对于基址的偏移量得到,也可以基于索引得到。还应理解,索引自身可以指示与基址的相对位置,或者基于索引与步长之间的乘积确定相对位置。
还应理解,源地址可以是源数据在主存储区的地址,根据源地址从主存储区获取,也可以根据源地址从缓存获取,也可以经由缓存从主存储区获取,本实施例对此不作限定。
还应理解,目的地地址可以为运算单元210中的内存缓存的地址,将用于运算单元进行计算处理的源数据被复制到内部缓存之后,可以根据相应的指令对源数据进行进一步计算。
还应理解,索引缓存和寻址单元位于主存储区与运算单元之间是指:索引缓存和寻址单元在硬件配置上位于运算单元的外部,而索引缓存和寻址单元属于处理单元的一部分,在物理配置上位于处理单元的内部。
下面将参考图2B,对上述的各个单元执行的操作进行说明。图2B的计算装置可以包括图2A的处理单元200以及主存储区250。
运算单元210中可以包括寄存器、逻辑计算单元、调度单元等。当运算单元为CPU时,逻辑计算单元可以用于内部缓存中获取到的源数据,调度单元可以直接或间接从主存储区获取间接存储复制指令,并且根据间接存储复制指令,确定基址、目的地地址、地址参数等。当运算单元为GPU时,调度单元可以由SM执行,逻辑计算单元可以包括在SP中,寄存器可以为SP中的寄存器,也可以为SM中的寄存器文件中的寄存器。运算也可以为SP。具体而言,本示例的运算单元的架构可以参考图1A和1B。
下面作为一个示例,具体描述了各个单元所执行的操作和方法。在本示例中,运算单位为SM,主存储区250实现为DRAM芯片,缓存240实现为二级缓存(Level 2cache),其中,二级缓存可以作为末级缓存,并且一级缓存未示出。
SM 210可以包括多个流处理器SP 219和寄存器文件218(Register File),寄存器文件218可以包括用于存储不同类型的数据和/或指令的多个寄存器,这些寄存器可以是不同类型的。例如,寄存器文件218可以包括:整数寄存器、浮点寄存器、状态寄存器、指令寄存器和指针寄存器等。寄存器文件218中的寄存器可以选用通用寄存器来实现,也可以根据SM210的实际需求采用特定的设计。
每个SP 219与寄存器文件218连接,用于执行指令序列(即程序)。SP 219取出从SM210进行指令调度之后的指令,SP 219对取出的指令进行译码、执行译码后的指令、保存指令执行结果等步骤,如此循环,直到执行完指令序列中的全部指令或遇到停机指令。
在执行指令时,每个SP 219可以使用寄存器文件218中与该SP 219对应的寄存器。不同的SP 219可以共用共享内存211中存储空间,共享内存211与寄存器文件218可以同一存储介质中的不同逻辑区域。此外,不同SM 210之间还可以具有全局内存等(未示出)。
首先,SM 210可以从DRAM 250获取间接存储复制指令,间接存储复制指令至少具有基址、索引地址和目的地地址。例如,SM 210可以利用调度单元将间接存储复制指令解析为基址、索引地址和目的地地址。
然后,SM 210可以直接将索引地址发送到索引缓存220,并且将基址和目的地地址发送到寻址单元230。或者,SM 210将基址、索引地址和目的地地址发送到SM 210之外的索引请求队列,通过索引请求队列将将索引地址发送到索引缓存220,并且将基址和目的地地址发送到寻址单元230。应理解,当DRAM 250为主存时,索引地址可以从DRAM 250获取到,当DRAM 250为主存中的一分区时,索引地址也可以从其他分区获取。
索引缓存220根据获取到的索引地址,从DRAM 250加载相应索引,发送至寻址单元230。具体而言,索引缓存220可以从索引请求队列中获取到索引请求,索引请求中包括索引地址。关于索引的获取方式,在一个示例中,索引缓存220从DRAM 250获取与索引地址对应的索引,将索引缓存到索引缓存220本地;在另一示例中,索引缓存220查找本地是否存在与索引地址对应的索引,如果存在则直接锁定该索引。索引缓存220然后将索引发送到寻址单元230。应理解,索引缓存220在查找本地是否存在该索引时,可以查找是否具有预先存储的与索引地址具有对应关系的一索引,如果有在则锁定该索引。另外,在从DRAM 250获取索引到索引缓存220时,可以建立与索引地址与索引的对应关系,同时可以随着索引从索引缓存220中移除,移除该对应关系。索引缓存220移除索引的原因,可以是由于当前已缓存的索引过多超出了阈值,则先前缓存的索引被移除,或者,SM 210当前的处理任务结束,需要对索引缓存220中的索引清空。更具体地,可以索引缓存220中维护一个队列,在一个示例中,可以确定索引缓存中维护的队列的当前状态,如果所述队列处于满队列状态,则利用待获取的目标索引替换队列中的另一索引,当该队列为先入先出队列时,可以将目标索引复制到先入先出队列的队首位置,并且删除队尾位置的另一索引。在另一示例中,可以确定队列中存储的各个索引的使用频率,利用待获取的目标索引替换各个索引中的使用频率最低的另一索引。
寻址单元230根据基址和索引,确定源数据对应的DRAM 250的源地址。具体而言,寻址单元230可以根据基址和索引进行源数据的源地址的计算,例如,源地址=基址+索引。另外,间接存储复制指令还具有用于源地址计算的寻址操作数,例如,调度单元对间接存储复制指令进行解析,得到寻址操作数,在这种情况下,寻址单元230可以根据基址、索引和寻址操作数计算源地址。寻址操作数可以包括偏移量和步长中的至少一个,源地址=基址+索引×步长;或者、源地址=基址+偏移量+索引;或者,源地址=基址+偏移量+索引×步长。
寻址单元230根据源地址,从DRAM 250中加载源数据,并发送到共享内存211的目的地地址。具体而言,寻址单元230可以根据源地址获取到源数据,并且将其发送到SM 210中的共享内存211,SM 210中的诸如SP 219和寄存器文件218等可以基于该数据进行进一步处理。
在本公开实施例的方案中,由于索引缓存和寻址单元位于运算单元之外,因此避免了由运算单元根据索引地址对索引的计算、根据索引对源数据的计算以及根据源地址加载源数据的运算,节省了运算单元自身的指令开销和计算资源。此外,索引缓存用于获取索引,寻址单元用于执行源地址的计算,实现了计算功能和存储功能的分离,保证了索引缓存的存储效率和寻址单元的计算效率,寻址单元进行源地址的计算然后即可加载源数据,这种数据处理的连续性保证了源数据的获取效率。换言之,本公开实施例根据间接存储复制指令,经由索引缓存和寻址单元的处理之后,向运算单元的内部缓存返回了源数据,节省了运算单元基于源数据加载指令和源地址计算指令的计算。
另外,本公开实施例中的与寻址单元和索引缓存相关的其他部分可以都可以参照图1A和1B中的各个示例,基于上述各个示例中的描述和说明,本领域技术人员能够实现与本公开实施例的间接存储复制方法相关的计算与数据处理。
另外,在GPU执行神经网络相关的算法时,神经网络层中的各个元素之间具有简单的关联性,本公开实施例的方案能够极大地提高GPU的数据处理效率。尤其在针对稀疏神经网络、图神经网络(Graph Neural Network,GNNs)、推荐算法的机器学习中的嵌入聚类等相关的底层数据计算中,能够进一步节省GPU的资源和算力。
图3为根据本公开的另一实施例的间接存储复制方法的示意性框图。应理解,请求队列310中可以包括基址、索引地址和目的地地址。例如,请求队列310可以从运算单元获取基址、索引地址和目的地地址。请求队列310可以包括索引请求队列,和源数据请求队列,此处仅以统一的请求队列310为例进行说明。响应队列320为用于源数据的响应队列。请求队列310可以将索引地址发送到索引缓存220,并且将基址发送到寻址单元。请求队列310还可以经由寻址单元230将目的地地址发送到响应队列320。
首先,索引缓存220从请求队列310获取索引请求,索引请求中包括索引地址。在一个示例中,该索引地址对应于主存储区251,则索引缓存220可以从缓存240中获取该索引地址对应的索引,如果缓存240中不存在该索引,则可以从主存储区251中获取该索引地址对应的索引到缓存240中。另外,索引缓存220也可以从主存储区251中直接获取该索引地址对应的索引。在另一示例中,该索引地址也可以对应于主存储区252,则可以通过内部通信链路获取到索引。
然后,索引缓存220将索引发送到寻址单元230,寻址单元230基于之前获取的基址和索引计算源数据的源地址。具体而言,寻址单元230可以根据基址、索引和寻址操作数计算源地址。寻址操作数可以包括偏移量和步长中的至少一个,可以通过以下任一方式计算源地址。第一种方式:源地址add=[base]+[ind],其中,[base]表示所述地址参数中包括的基址,[ind]表示索引。第二种方式:源地址add=[base]+[ind]*n,其中,[base]和n分别表示地址操作数中包括的步长,[ind]表示所述目标索引。第三种方式:源地址add=[base]+[offset]+[ind],其中,[base]和[offset]分别表示地址操作数中包括的偏移量,[ind]表示索引。第四种方式:源地址add=[base]+[offset]+[ind]*n,其中,[base]、[offset]和n分别表示地址操作数中包括的偏移量和步长,[ind]表示索引。因此,当主存储区存储有大量位置相关的源数据时,通过步长、偏移量、索引等方式计算源数据的源地址,提高了整体的数据访问效率。
然后,寻址单元230将包括源地址的源数据请求放入请求队列310中,请求队列310向缓存240发送源数据请求,其中,在源数据已经从主存储区251已经缓存到缓存240的情况下,缓存240将源数据直接发送到响应队列320;或者,从主存储区251将源数据缓存到缓存240中,缓存240再向响应队列320发送源数据。
然后,响应队列320可以根据预先获取到的目的地地址,将该源数据发送到运算单元中的内部缓存。
图4为根据本公开的另一实施例的间接存储复制方法的示意性框图。在图4的示例中,寻址单元230用于确定源地址匹配的主存储区250,并且根据主存储区250与运算单元210的对应关系,从主存储区520加载源数据。应理解,主存储区251和主存储区252是主存储区250的示例。主存储区250与运算单元210的对应关系提高了源数据获取效率和可靠性,与运算单元具有对应关系的主存储区可以存储有访问频率较高的源数据,与运算单元不具有对应关系的主存储区可以存放访问频率较低的源数据,从而提高了运算单元整体的计算效率。
具体而言,处理单元可以包括第一分区和第二分区(分别对应于图4的分区A和分区B),第一分区和第二分区表示处理单元的多个分区中的不同分区。第一分区包括第一运算单元2101和第一寻址单元231,第二分区包括第二运算单元2102和第一寻址单元232。
在获取源数据的一个示例中,第一寻址单元231确定主存储区251对应于第一分区,经由与第一分区对应的末级缓存241从主存储区251加载源数据,并且将源数据发送到第一运算单元2101中的目的地地址。类似地,第二寻址单元232确定主存储区252对应于第二分区,经由与第二分区对应的末级缓存242从主存储区252加载源数据,并且将源数据发送到第二运算单元2102中的目的地地址,从而第一寻址单元经由其对应的缓存高效地从主存储区读取到源数据,第二寻址单元经由其对应的缓存高效地从主存储区读取到源数据。
在获取源数据的另一示例中,第一寻址单元231和第二寻址单元232通过内部传输链路410通信连接。应理解,内部传输链路410用于实现不同分区之间的通信,换言之,在本示例中,内部传输链路410至少能够连接不同分区的寻址单元,即,能够使第一寻址单元231和第二寻址单元232通信连接。具体地,内部传输链路410可以实现为片上网络(Network onChip,NOC),并且内部传输链路410在各个分区内还可以用于连接运算单元与缓存、或者不同级别的缓存(例如,在分区中存在三级缓存的情况下,内部传输链路410可以用于连接二级缓存和三级缓存)。在本示例中,第一寻址单元231确定主存储区252对应于第二分区,经由内部传输链路410向第二寻址单元232发送读取请求,其中,读取请求指示第二寻址单元232从主存储区252加载源数据,并经由内部传输链路410将源数据返回到第一寻址单元231。然后,第一寻址单元231将源数据发送到第一运算单元2101中的目的地地址,从而第一寻址单元通过内部传输链路从主存储区高效地读取到源数据。
此外,对于索引的获取方式,也可以基于内部传输链路410执行。第一分区包括第一索引缓存221,第二分区包括第二索引缓存222。内部传输链路410还用于连接不同分区中的索引缓存,即,连接第一索引缓存221和第二索引缓存222。
在获取索引的一个示例中,第一寻址单元221确定索引地址对应于第一分区,并且根据主存储区251的索引地址,经由与第一分区对应的末级缓存241从主存储区251加载索引。类似地,第二索引缓存222确定索引地址对应于第二分区,并且根据主存储区252的索引地址,经由与第二分区对应的末级缓存242从主存储区252加载索引。因此,第一索引缓存经由其对应的缓存高效地从主存储区获取到索引,第二索引缓存经由其对应的缓存高效地从主存储区获取到索引。
在获取索引的另一示例中,第一索引缓存221确定索引地址对应于第二分区,经由内部传输链路410向第二索引缓存222发送索引请求,索引请求指示第二索引缓存222根据索引地址从主存储区252加载索引,并经由内部传输链路410将索引返回到第一索引缓存221。类似地,第二索引缓存222在确定索引地址指示第一分区的情况下也可以经由内部传输链路410向第一索引缓存221发送索引请求,第一索引缓存221可以响应该索引请求,加载主存储区252的索引地址对应的索引,并且将索引返回到第二索引缓存22。因此,第一索引缓存通过内部传输链路从主存储区高效地获取到索引,第二索引缓存也可以通过内部传输链路从主存储区高效地获取到索引。
应理解,上述各个示例反映了目标分区的运算单元生成间接存储复制指令,通过运算单元对应的索引缓存获取索引,然后通过运算单元对应的寻址单元获取源数据,再将源数据返回到该目标分区的运算单元自身的内部缓存中。如果索引在目标分区对应的主存储区中,则从该主存储区直接获取索引;如果不在目标分区对应的主存储区中,则从其他分区对应的主存储区间接获取索引。类似地,如果源数据在目标分区的主存储区中,则从该主存储区直接获取源数据;如果不在目标分区对应的主存储区中,则从其他分区对应的主存储区间接获取源数据,上述的其他分区可以与目标分区相邻,也可以不相邻。
另外,对于寻址单元确定源数据的源地址是否对应于特定分区的方式,在一个示例中,可以通过判定源地址的预定字段是否为主存储区对应的预设值,判定源地址是否匹配主存储区。例如,第一寻址单元231在计算得到源地址之后,判断源地址的预定字段是否为主存储区251对应的预定值,如果为是,则第一寻址单元231判断源地址匹配主存储区251,换言之,判断源地址匹配于第一分区A;如果为否,则第一寻址单元231判断源地址匹配主存储区252,换言之,判断源地址匹配于第二分区B。
在另一示例中,寻址单元可以根据预存的地址与主存储区的匹配关系,确定源地址匹配于主存储区。例如,第一寻址单元231根据预存的地址与主存储区251或252的匹配关系,确定源地址匹配于主存储区251或252。
应理解,诸如NOC的内部传输链路位于运算单元与末级缓存之间,从而高效地辅助了末级缓存执行已缓存到末级缓存的数据的处理效率。
图5为根据本公开的另一实施例的片上互联网络系统的示意性结构图。图5的片上互联网络系统500包括:
多个处理单元分区510和内部通信链路520,多个处理单元分区510通过内部通信链路520互相通信连接。每个处理单元分区510可以包括上述实施例所述的至少一个寻址单元、至少一个运算单元和至少一个索引缓存。例如,每个处理单元分区510包括至少一个CPU核,或者至少一个SM。片上互联网络系统500还可以包括主存(未示出)。
应理解,内部通信链路520可以实现为NOC。内部通信链路520可以通过通信连接不同处理单元分区的寻址单元和/或索引缓存,实现了不同处理单元分区的连通,片上互联网络系统500通过多个处理单元分区510之间的数据访问和计算处理的协作和配合,实现了整体的数据处理效率。
片上互联网络系统500可以访问主存中的各个主存储区,以加载源数据。主存中的各个主存储区可以对应于各个处理单元分区510。在一个示例中,在每个处理单元分区510内,每个运算单元可以不经过内部通信链路520访问该处理单元分区对应的主存储区。在另一示例中,内部通信链路520还用于通信连接同一处理单元分区内的不同级别的缓存,在这种情况下,同一处理单元分区内的不同运算单元可以经过内部通信链路520获取该处理单元分区对应的主存储区中的源数据。
图6为根据本公开的另一实施例的间接存储复制方法的示意性流程图。图6的间接存储复制方法用于处理单元。处理单元包括运算单元、寻址单元和索引缓存,寻址单元和索引缓存位于处理单元外部的主存储区与运算单元之间,运算单元具有内部缓存,其中,图6的方法包括:
S610:通过运算单元,执行间接存储复制指令,间接存储复制指令至少具有基址、索引地址和目的地地址,以将索引地址发送到索引缓存,将基址和目的地地址发送到寻址单元。
S620:通过索引缓存,根据索引地址,从主存储区加载相应索引,发送至寻址单元。
S630:通过寻址单元,根据基址和索引,确定源数据对应的主存储区的源地址。
S640:通过寻址单元,根据源地址,从主存储区中加载源数据,并发送到内部缓存的目的地地址。
在本公开实施例的方案中,由于索引缓存和寻址单元位于运算单元之外,因此避免了由运算单元根据索引地址对索引的计算、根据索引对源数据的计算以及根据源地址加载源数据的运算,节省了运算单元自身的指令开销和计算资源。此外,索引缓存用于获取索引,寻址单元用于执行源地址的计算,实现了计算功能和存储功能的分离,保证了索引缓存的存储效率和寻址单元的计算效率,寻址单元进行源地址的计算然后即可加载源数据,这种数据处理的连续性保证了源数据的获取效率。
在另一些示例中,所述间接存储复制指令还具有用于源地址计算的寻址操作数。该方法还包括:通过所述运算单元将所述寻址操作数发送到所述寻址单元。根据基址和索引,确定源数据对应的主存储区的源地址,包括:根据所述基址、所述索引和所述寻址操作数,确定所述源地址。
在另一些示例中,所述寻址操作数包括偏移量和步长中的至少一个。
在另一些示例中,根据所述基址、所述索引和所述寻址操作数,确定所述源地址,包括:根据以下中的一个确定所述源地址:源地址=基址+索引;源地址=基址+索引×步长;源地址=基址+偏移量+索引;源地址=基址+偏移量+索引×步长。
在另一些示例中,该方法还包括:通过所述索引缓存,从所述主存储区加载相应索引,将所述索引与所述索引地址对应存储;查找已对应存储的索引和索引地址,如找到对应索引,发送至所述寻址单元;如未找到,根据所述索引地址,从所述主存储区加载相应索引。
在另一些示例中,根据源地址,从主存储区中加载源数据,包括:确定所述源地址匹配的主存储区,并且根据所述主存储区与所述运算单元的对应关系,从所述主存储区加载所述源数据。
在另一些示例中,所述处理单元包括第一分区和第二分区,所述第一分区包括第一运算单元和第一寻址单元。确定所述源地址匹配的主存储区,包括:所述第一寻址单元确定所述主存储区对应于所述第一分区。根据所述主存储区与所述运算单元的对应关系,从所述主存储区加载所述源数据,包括:经由与所述第一分区对应的末级缓存从所述主存储区加载所述源数据,以将所述源数据发送到所述第一运算单元中的目的地地址。
在另一些示例中,所述第二分区包括第二运算单元和第二寻址单元,所述第一寻址单元和所述第二寻址单元通过内部传输链路通信连接。确定所述源地址匹配的主存储区,包括:所述第一寻址单元确定所述主存储区对应于所述第二分区。根据所述主存储区与所述运算单元的对应关系,从所述主存储区加载所述源数据,包括:经由所述内部传输链路向所述第二寻址单元发送读取请求,其中,所述读取请求指示所述第二寻址单元从所述主存储区加载所述源数据,并经由所述内部传输链路将所述源数据返回到所述第一寻址单元,以将所述源数据发送到所述第一运算单元中的目的地地址。
在另一些示例中,确定源数据对应的主存储区的源地址,包括:通过判定所述源地址的预定字段是否为所述主存储区对应的预设值,判定所述源地址是否匹配所述主存储区;或者,根据预存的地址与所述主存储区的匹配关系,确定所述源地址匹配于所述主存储区。
需要指出,根据实施的需要,可将本公开实施例中描述的各个部件/步骤拆分为更多部件/步骤,也可将两个或多个部件/步骤或者部件/步骤的部分操作组合成新的部件/步骤,以实现本公开实施例的目的。
上述根据本公开实施例的方法可在硬件、固件中实现,或者被实现为可存储在记录介质(诸如CD ROM、RAM、软盘、硬盘或磁光盘)中的软件或计算机代码,或者被实现通过网络下载的原始存储在远程记录介质或非暂时机器可读介质中并将被存储在本地记录介质中的计算机代码,从而在此描述的方法可被存储在使用通用计算机、专用处理单元或者可编程或专用硬件(诸如ASIC或FPGA)的记录介质上的这样的软件处理。可以理解,计算机、处理单元、微处理单元控制器或可编程硬件包括可存储或接收软件或计算机代码的存储组件(例如,RAM、ROM、闪存等),当所述软件或计算机代码被计算机、处理单元或硬件访问且执行时,实现在此描述的方法。此外,当通用计算机访问用于实现在此示出的方法的代码时,代码的执行将通用计算机转换为用于执行在此示出的方法的专用计算机。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及方法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本公开实施例的范围。
以上实施方式仅用于说明本公开实施例,而并非对本公开实施例的限制,有关技术领域的普通技术人员,在不脱离本公开实施例的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本公开实施例的范畴,本公开实施例的专利保护范围应由权利要求限定。