掌桥专利:专业的专利平台
掌桥专利
首页

用于归约运算的方法、系统和计算设备

文献发布时间:2024-04-18 19:58:30


用于归约运算的方法、系统和计算设备

技术领域

本发明的实施例总体涉及数据处理领域,并且更具体地涉及一种用于归约运算的方法、系统和计算设备。

背景技术

在进行大模型训练时,通常需要将用于训练模型的计算任务划分成多个子任务,并将这些子任务发送到多个图形处理器(GPU)上进行并行运算,然后基于这些GPU上的运算结果进行归约(reduce)运算,诸如求和、求极值、逻辑运算等。

传统的用于归约运算的方法包括:针对GPU分配一块静态随机存取存储器(SRAM)资源,以将GPU中的数据读取到SRAM上进行归约运算,归约运算结果随后被返回给指定GPU。然而基于上述传统方法进行归约运算时,需要频繁读写SRAM中的数据,耗时较长,导致运算效率低。

综上,传统的用于归约运算的方案存在的不足之处在于,需频繁访问SRAM进行数据读写,运算效率低。

发明内容

针对上述问题,本发明提供了一种用于归约运算的方法、系统和计算设备,使得能够减少归约运算过程中访问诸如SRAM目标存储区域的次数,提高归约运算效率。

根据本发明的第一方面,提供了一种用于归约运算的方法,包括:基于归约运算命令,获取源数据;响应于所获取的源数据中的多个源数据对应于目标存储区域中的同一存储地址,将多个源数据合并写入同一计算单元;以及至少基于写入同一计算单元中的多个源数据,进行归约运算,以得到归约运算结果,并将与归约运算结果相关的信息写入缓存区域,以便将归约运算结果写入目标存储区域。

在一些实施例中,至少基于写入同一计算单元中的多个源数据,进行归约运算,以得到归约运算结果包括:响应于缓存区域的缓存数据中包括与存储地址相同的地址,从缓存区域中读取与存储地址相同的地址对应的历史数据,并将历史数据写入计算单元;以及基于写入同一计算单元中的多个源数据、以及历史数据,进行归约运算,以得到归约运算结果。

在一些实施例中,至少基于写入同一计算单元中的多个源数据,进行归约运算,以得到归约运算结果包括:响应于缓存区域的缓存数据中不包括与存储地址相同的地址,确定目标存储区域处的存储地址上是否存储有历史数据;响应于目标存储区域处的存储地址上存储有历史数据,从目标存储区域读取历史数据到缓存区域,并将历史数据写入计算单元;以及基于写入同一计算单元中的多个源数据、以及历史数据,进行归约运算,以得到归约运算结果。

在一些实施例中,该方法还包括:响应于目标存储区域处的存储地址上未存储有历史数据,基于写入同一计算单元中的多个源数据进行归约运算,以得到归约运算结果。

在一些实施例中,与归约运算结果相关的信息包括:归约运算结果的数据值、已执行的运算次数、以及归约运算结果所要写入的目标存储区域的地址。

在一些实施例中,将归约运算结果写入目标存储区域包括:至少基于与归约运算结果相关的信息、缓存区域的存储空间,将归约运算结果从缓存区域写入目标存储区域。

在一些实施例中,将归约运算结果从缓存区域写入目标存储区域包括:响应于已执行的运算次数到达预定次数,将归约运算结果从缓存区域写入目标存储区域;或者响应于缓存区域的存储空间已占满且归约运算结果为缓存区域中最先写入的数据,将归约运算结果从缓存区域写入目标存储区域。

在一些实施例中,基于归约运算命令获取源数据包括:接收多个归约运算命令;检查多个归约运算命令,以收集与同一归约运算任务相关的归约运算命令;以及响应于收集齐与同一归约运算任务相关的归约运算命令,基于所收集齐的归约运算命令,获取源数据。

在一些实施例中,目标存储区域包括多个子存储区域,其中,同一子存储区域中分配的多个存储地址彼此不连续。

根据本发明的第二方面,提供了一种用于归约运算的系统,包括:计算模块、缓存区域和目标存储区域。其中,计算模块,包括多个计算单元,并且被配置为:基于归约运算命令,获取源数据;响应于所获取的源数据中的多个源数据对应于目标存储区域中的同一存储地址,将多个源数据合并写入多个计算单元中的一个;以及至少基于写入同一计算单元中的多个源数据,进行归约运算,以得到归约运算结果,并将与归约运算结果相关的信息写入缓存区域。缓存区域被配置为:将归约运算结果写入目标存储区域。

在一些实施例中,缓存区域包括多个缓存子区域,每个缓存子区域被配置为存储与一条归约运算结果相关的信息,其中,每个缓存子区域至少包括以下各项信息:指示缓存子区域是否有效,归约运算结果的数据值,已执行的运算次数,归约运算结果所要写入的目标存储区域的地址。

在一些实施例中,目标存储区域包括多个子存储区域,其中,同一子存储区域中分配的多个存储地址彼此不连续。

在一些实施例中,系统还包括:命令队列模块,被配置为接收多个归约运算命令;命令检查和收集模块,被配置为检查多个归约运算命令,以收集与同一归约运算任务相关的归约运算命令;数据发送模块,被配置为基于归约运算命令发送归约运算结果。

根据本发明的第三方面,提供了一种计算设备,包括:至少一个处理器;以及与至少一个处理器通信连接的存储器;存储器存储有可被至少一个处理器执行的指令,指令被至少一个处理器执行,以使至少一个处理器能够执行本发明的第一方面的方法。

应当理解,本部分所描述的内容并非旨在标识本发明的实施例的关键或重要特征,也不用于限制本发明的范围。本发明的其它特征将通过以下的说明书而变得容易理解。

附图说明

结合附图并参考以下详细说明,本发明各实施例的上述和其他特征、优点及方面将变得更加明显。在附图中,相同或相似的附图标注表示相同或相似的元素。

图1示出了根据本发明的实施例的用于归约运算的系统的示意图。

图2示出了根据本发明的实施例的计算模块的示例结构示意图。

图3示出了根据本发明的实施例的缓存区域的示例结构示意图。

图4示出了根据本发明的实施例的目标存储区域的示例结构示意图。

图5示出了根据本发明的实施例的用于归约运算的方法的流程图。

图6示出了根据本发明的实施例的用于基于归约运算命令获取源数据的方法的流程图。

图7示出了根据本发明的实施例的用于对所获取的源数据进行归约运算的方法的流程图。

图8示意性示出了适于用来实现本发明的实施例的计算设备的框图。

具体实施方式

以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。

在本文中使用的术语“包括”及其变形表示开放性包括,即“包括但不限于”。除非特别申明,术语“或”表示“和/或”。术语“基于”表示“至少部分地基于”。术语“一个示例实施例”和“一个实施例”表示“至少一个示例实施例”。术语“另一实施例”表示“至少一个另外的实施例”。术语“第一”、“第二”等等可以指代不同的或相同的对象。下文还可能包括其他明确的和隐含的定义。

如上所述,在进行大模型训练时,通常需要将用于训练模型的计算任务划分成多个子任务以在多个GPU或多个节点(1个节点包括8个GPU)上进行并行运算。例如,可以将模型的某一层按行或列维度进行拆分,然后分配到多个GPU上进行并行运算。待所有GPU上的运算完成之后,再基于这些GPU上的运算结果进行归约运算。然而,传统的用于归约运算的方法需要针对GPU分配一块SRAM资源,以将GPU中的数据读取到SRAM上进行归约运算。例如,可以针对GPU或者用于GPU之间相互通信的芯片,诸如交换机(switch),分配一块SRAM资源,然后从GPU中读取归约运算所需要的源数据以在SRAM中进行诸如求和、求极值、逻辑运算等归约运算,并将运算结果返回给指定的GPU以进行下一步运算。

然而,基于上述方法进行归约运算,需要频繁读写SRAM中的数据,并且SRAM读写次数随参与归约运算的源数据的数据量线性增加,致使进行归约运算的耗时较长,运算效率低。此外,当所训练的模型参数较多时,需要进行归约运算的数据量增大,使得归约运算过程耗时更长。

为了至少部分地解决上述问题以及其他潜在问题中的一个或者多个,本发明的示例实施例提出了一种用于归约运算的方案。在该方案中,基于归约运算命令,获取源数据;响应于所获取的源数据中的多个源数据对应于目标存储区域中的同一存储地址,将多个源数据合并写入同一计算单元;以及至少基于写入同一计算单元中的多个源数据,进行归约运算,以得到归约运算结果,并将与归约运算结果相关的信息写入缓存区域,以便将归约运算结果写入目标存储区域。由此,通过在计算单元中进行归约运算,并将归约运算结果写入缓存区域,使得能够减少归约运算过程中对诸如SRAM的目标存储区域的访问次数,提高归约运算效率。此外,本发明的上述方案通过将源数据中对应于目标存储区域中的同一存储地址的多个源数据合并写入同一计算单元进行运算,使得能够进一步提高归约运算的运算效率。

下面将结合图1至图7详细说明本发明的用于归约运算的方案。

图1示出了根据本发明的实施例的用于归约运算的系统100的示意图。如图1所示,系统100包括:命令队列模块110、命令检查和收集模块120、计算模块130、缓存区域140、目标存储区域150和数据发送模块160。应当理解,系统100还可以包括未示出的附加模块和/或可以省略所示出的模块,本发明的范围在此方面不受限制。

关于命令队列模块110,其可以用于接收命令并将接收到的命令放入队列中。根据本发明的实施例,命令队列模块110可以被配置为接收例如由主机(诸如CPU)直接发送的归约运算命令。在又一些实施例中,命令队列模块110也可以被配置为接收由设备(诸如GPU)发送的命令,以指示当前设备中的数据(例如,GPU中的源数据)可以被发送用于后续计算。

关于命令检查和收集模块120,其可以用于对接收到的所有命令进行检查,并收集执行某一任务所需的所有命令。根据本发明的实施例,命令检查和收集模块120可以被配置为检查由命令队列模块110接收到的多个归约运算命令,并从中收集与同一归约运算任务相关的归约运算命令。

关于计算模块130,其可以包括多个计算单元(未示出)以用于对所获取的源数据进行计算。根据本发明的实施例,计算模块130可以被配置为:基于归约运算命令,获取源数据;响应于所获取的源数据中的多个源数据对应于目标存储区域150中的同一存储地址,将多个源数据合并写入同一计算单元;以及至少基于写入同一计算单元中的多个源数据,进行归约运算,以得到归约运算结果,并将与归约运算结果相关的信息写入缓存区域140。由上可知,本发明的一发明构思在于,所获取的源数据在写入计算单元之前,可以例如基于与源数据对应的存储地址进行合并,以将对应于同一存储地址的多个源数据一起写入计算单元,以提高归约运算效率。下面将结合图2具体描述根据本发明的实施例的计算模块130的结构和工作原理,这里先不细述。

根据本发明的实施例,计算模块130还可以被配置为:响应于缓存区域140的缓存数据中包括与存储地址相同的地址,从缓存区域140中读取与存储地址相同的地址对应的历史数据,并将历史数据写入计算单元;以及基于写入同一计算单元中的多个源数据、以及历史数据,进行归约运算,以得到归约运算结果,并将与归约运算结果相关的信息写入缓存区域140。根据本发明的其他实施例,计算模块130还可以被配置为:响应于缓存区域140的缓存数据中不包括与存储地址相同的地址,确定目标存储区域150处的存储地址上是否存储有历史数据;响应于目标存储区域150处的存储地址上存储有历史数据,从目标存储区域150读取历史数据,并将历史数据写入计算单元;以及基于写入同一计算单元中的多个源数据、以及历史数据,进行归约运算,以得到归约运算结果,并将与归约运算结果相关的信息写入缓存区域140。根据本发明的另一些实施例,计算模块130还可以被配置为:响应于目标存储区域150处的存储地址上未存储有历史数据,基于写入同一计算单元中的多个源数据进行归约运算,以得到归约运算结果,并将与归约运算结果相关的信息写入缓存区域140。

关于缓存区域140,其可以用于缓存在计算模块130中得到的归约运算结果,并当满足预定条件时,将归约运算结果写入目标存储区域150。根据本发明的实施例,缓存区域140可以被配置为至少基于与归约运算结果相关的信息、缓存区域140的存储空间,将归约运算结果写入目标存储区域150。在又一些实施例中,缓存区域140可以从目标存储区域150读取数据并存放在缓存区域140上,以便计算模块130能够从缓存区域140读取所需数据到计算单元以进行运算。

由上可知,本发明的又一发明构思在于,将参与归约运算的数据信息优先存储在缓存区域140以便计算单元从缓存区域140中读取所需数据,而非由计算单元直接对目标存储区域150进行数据的读写。具体地,通过将与归约运算结果相关的信息写入缓存区域140,再基于与归约运算结果相关的信息、缓存区域140的存储空间,将归约运算结果写入目标存储区域150,使得能够避免频繁读写目标存储区域150,提高归约运算的运算效率。下面将结合图3具体描述根据本发明的实施例的缓存区域140的结构和工作原理,这里先不细述。

关于目标存储区域150,其可以是用于存储由缓存区域140写入的数据。根据本发明的另一发明构思,针对目标存储区域150中的多个子存储区域,使每个子存储区域中的存储地址不连续,以避免在向目标存储区域150写入或读取数据时发生存储冲突。例如,根据本发明的实施例,目标存储区域150可以是SRAM。下面将结合图4具体描述根据本发明的实施例的目标存储区域150的结构和工作原理,这里先不细述。

关于数据发送模块160,其可以用于将从目标存储区域150读出的运算结果发送到指定位置。根据本发明的实施例,数据发送模块160可以被配置为基于归约运算命令发送归约运算结果,以将归约运算结果发送到诸如指定的GPU上。

图2示出了图1的计算模块130的示例结构示意图。如图2所示,计算模块130包括地址检查和合并单元132以及多个计算单元135。应当理解,计算模块130还可以包括未示出的附加单元和/或可以省略所示出的单元,本发明的范围在此方面不受限制。

关于地址检查和合并单元132,其可以用于对所获取的源数据进行检查和合并。根据本发明的实施例,地址检查和合并单元132可以被配置为对所获取的源数据进行检查,以及响应于所获取的源数据中的多个源数据对应于目标存储区域150中的同一存储地址,将多个源数据合并写入多个计算单元中的一个。

关于计算单元135,其可以用于对写入其中的源数据进行运算。根据本发明的实施例,计算单元135可以被配置为至少基于写入其中的多个源数据,进行归约运算,以得到归约运算结果。例如,在一些实施例中,计算单元135可以进一步被配置为从缓存区域140读取数据,以与写入该计算单元135中的多个源数据一起进行规约运算。换言之,计算单元135可以被配置为基于写入其中的多个源数据、以及该计算单元135的历史数据,进行归约运算,以得到归约运算结果。

例如,在本发明的实施例中,计算模块130从GPU获取多个源数据,其中每个源数据对应目标存储区域150中的某一存储地址。地址检查和合并单元132对所获取的多个源数据进行检查,当检查到多个源数据中一些对应于同一存储地址,则将这些源数据合并到一起并发送到同一计算单元135中,以便随后与从缓存区域140读取的计算单元135的历史数据进行归约运算。

由上可知,根据本发明的实施例,通过在计算模块中设置地址检查和合并单元,使得对应于同一存储地址的数个源数据能够一并发送到同一个计算单元中进行归约运算,从而减少计算单元对数据存储区域(包括缓存区域以及目标存储区域)的读写次数,提高归约运算效率。

根据本发明的又一些实施例,计算单元135还可以配置有诸如计数器,以用于统计计算单元135中已执行的归约运算次数,以便于确定计算单元135是否需进一步从缓存区域140中读取数据到计算单元135。例如,可以基于计算单元135中配置的计数器计算该计算单元135中已执行的归约运算次数,并对缓存区域140中存储的、与已执行的归约运算次数有关的数据,以便于后续基于该数据确定是否将缓存区域140中存储的运算结果数据写入目标存储区域150。图3示出了图1的缓存区域140的示例结构示意图。

根据本发明的实施例,缓存区域140可以包括多个缓存子区域。如图3所示的示例性缓存区域140,缓存区域140中的每一行表示一个缓存子区域。也就是说,缓存区域140包括32个缓存子区域(缓存子区域0至缓存子区域31)。

关于缓存子区域,其例如可以被配置为存储与归约运算结果相关的信息。根据本发明的实施例,每个缓存子区域至少包括以下各项信息:指示缓存子区域是否有效、归约运算结果的数据值、已执行的运算次数、归约运算结果所要写入的目标存储区域的地址等。

关于指示缓存子区域是否有效,其可以指示当前缓存子区域是否存储有数据。例如,当缓存子区域为无效时,表示当前缓存子区域中的数据项为空,可向其中写入新的数据;当缓存子区域为有效时,表示当前缓存子区域中的数据项已经被占用。根据本发明的实施例,对缓存区域140初始化时,各缓存子区域均为无效。

参照图3,以缓存区域140中的缓存子区域1为例,缓存子区域1包括以下各项信息:指示缓存子区域1是否有效(vld)、归约运算结果的数据值(data)、已执行的归约运算次数(cnt)、归约运算结果所要写入的目标存储区域的地址(addr)。

图4示出了图1的目标存储区域150的示例结构示意图。

目标存储区域150可以包括多个子存储区域,每个子存储区域中分配有多个存储地址,以用于存储数据。如图4所示的示例性目标存储区域150,目标存储区域150为SRAM且包括8个子存储区域,即BANK 0至BANK 7,每个子存储区域中分配有多个存储地址。

传统的分配存储地址的方案为在同一子存储区域中分配连续的存储地址,例如,先在BANK 0中分配地址0x00、0x10、0x20直至针对BANK 0的地址分配完成之后,再对BANK 1进行地址分配,以此类推。由此,容易造成同一时间针对同一子存储区域进行数据读写,从而发生存储冲突。为了解决上述问题,根据本发明的实施例,以地址交织的方式对目标存储区域150中的多个子存储区域进行存储地址的分配,使得同一子存储区域中分配的多个存储地址彼此不连续。

参照图4,连续的存储地址被分配给不同的子存储区域。例如,地址0x00被分配给BANK 0,地址0x01被分配给BANK 1,地址0x02被分配给BANK 2,以此类推。待所有的子存储区域中都被分配有第一存储地址以后,再从BANK 0开始进行第二轮的的地址分配,即将地址0x80被分配给BANK 0,将地址0x90被分配给BANK 1,直至完成所有的地址分配。如图4所示,例如,BANK 0被分配到的地址为0x00、0x80等,显然BANK 0中分配的地址彼此不连续。

基于上述针对多个子存储区域分配地址的方案,每个子存储区域中分配的多个存储地址彼此不连续,从而在向目标存储区域150写入或读取数据时,减少同一时间对同一子存储区域进行数据读写的可能性。

下面将结合图5至图7详述本发明的用于归约运算的方法。

图5示出了根据本发明的实施例的用于归约运算的方法500的流程图。方法500可在如图1所示的系统100处或由如图8所示的电子设备800执行。应当理解,方法500还可以包括未示出的附加动作和/或可以省略所示出的动作,本发明的范围在此方面不受限制。

在步骤502,由计算模块基于归约运算命令,获取源数据。

关于归约运算命令,其可以包括数据信息、地址信息和运算信息。

关于数据信息,其可以是与所要获取的源数据有关的信息,例如,所要获取的源数据的读取地址。根据本发明的一些实施例,数据信息可以是指从哪个和/或哪些GPU上获取源数据。

关于地址信息,其可以是与所获取的源数据对应的在目标存储区域中的存储地址。根据本发明的一些实施例,地址信息可以是指所获取的源数据对应于SRAM的某一BANK中的某一地址。

关于运算信息,其可以是针对源数据进行的归约运算类型,诸如,求和、求极大值、求极小值等。

根据本发明的实施例,归约运算命令可以包括例如参与归约运算的GPU数量、最终运算结果的接收对象等,这里不作限制。下面将结合图6详细描述如何基于归约运算命令获取源数据,这里不再赘述。

在步骤504,由计算模块响应于所获取的源数据中的多个源数据对应于目标存储区域中的同一存储地址,将多个源数据合并写入同一计算单元。

根据本发明的实施例,计算模块在获取多个源数据后,先基于每个源数据对应的在目标存储区域中的地址进行比较,若多个源数据所对应的地址相同时,则可以对将这些源数据进行合并以写入同一计算单元。

例如,当计算模块接收到3个源数据(诸如第一源数据、第二源数据、第三源数据),传统的方法包括:先将第一源数据和第二源数据写入一计算单元进行运算,并将运算得到的第一结果从计算单元取出并进行存储,再将第三源数据写入又一计算单元(或同一计算单元),并读取所存储的第一结果写入该又一计算单元以与第三源数据进行运算以得到第二结果,即基于3个源数据的归约运算的最终结果,并将该第二结果再进行存储。上述传统方法的不足之处在于需要对运算过程中的中间数据(例如,第一结果)进行存储和读取,当运算过程中有多个中间数据时,运算耗时长,且需要对用于存储中间数据的存储区域反复读写。而根据本发明的发明构思,通过将对应于目标存储区域中的同一存储地址的多个源数据合并写入同一计算单元,使得能够一次对满足预定条件的多个源数据进行归约运算,提高运算效率,同时避免了对存储区域的反复读写。

具体地,根据本发明的实施例,当计算模块接收到3个源数据,可以先基于该3个源数据所对应的在目标存储区域中的存储地址进行比较,以判断存储地址是否相同。在一示例中,若第一源数据、第二源数据和第三源数据均对应于在目标存储区域中的同一存储地址,则可以将这3个源数据一起写入同一计算单元,以针对该3个源数据进行归约运算。在又一示例中,若第一源数据和第二源数据对应于在目标存储区域中的同一存储地址,第三源数据对应于在目标存储区域中的另一存储地址,则可以将第一源数据和第二源数据合并写入例如第一计算单元进行归约运算,将第三源数据写入另一计算单元(例如,第二计算单元)以便与后面写入该计算单元的数据进行归约运算。由此,通过将满足预定条件的多个源数据一起写入同一计算单元进行归约运算能够显著提升运算效率,且无需对归约运算的中间结果进行存储,从而减少对存储区域的读写次数。

在步骤506,由计算模块至少基于写入同一计算单元中的多个源数据,进行归约运算,以得到归约运算结果,并将与归约运算结果相关的信息写入缓存区域,以便将归约运算结果写入目标存储区域。

关于进行归约运算,其可以是进行诸如求和运算、求极大值运算、求极小值运算、逻辑运算等运算。

关于至少基于写入同一计算单元中的多个源数据进行归约运算,其可以包括:确定该计算单元是否有历史数据,以及响应于确定计算单元有历史数据,基于写入计算单元中的多个源数据、以及历史数据进行归约运算。

关于历史数据,其可以是指缓存区域中存储的与计算单元中的源数据对应于同一存储地址的缓存数据。例如,第一计算单元中写入的源数据对应于目标存储区域的第一地址,在这种情况下,历史数据为缓存区域中存储的对应于目标存储区域的第一地址的运算结果,该运算结果数据即可视为第一计算单元的历史数据。

根据本发明的实施例,至少基于写入同一计算单元中的多个源数据进行归约运算可以包括:响应于缓存区域的缓存数据中包括与存储地址相同的地址,从缓存区域中读取与存储地址相同的地址对应的历史数据,并将历史数据写入计算单元;以及基于写入同一计算单元中的多个源数据、以及所述历史数据,进行归约运算。

根据本发明的又一些实施例,响应于缓存区域的缓存数据中不包括与存储地址相同的地址,即缓存区域不包括计算单元的历史数据,则需进一步确定目标存储区域中是否包括计算单元的历史数据。具体地,至少基于写入同一计算单元中的多个源数据进行归约运算可以包括:响应于缓存区域的缓存数据中不包括与存储地址相同的地址,确定目标存储区域处的存储地址上是否存储有历史数据。响应于目标存储区域处的存储地址上存储有历史数据,从目标存储区域读取历史数据到缓存区域,并将历史数据写入计算单元;以及基于写入同一计算单元中的多个源数据、以及历史数据,进行归约运算;响应于目标存储区域处的存储地址上未存储有历史数据,则基于写入同一计算单元中的多个源数据,进行归约运算。下面将结合图7详细描述这一方案,这里先不赘述。

关于与归约运算结果相关的信息,其可以包括归约运算结果的数据值、已执行的运算次数、归约运算结果所要写入的目标存储区域的地址。根据本发明的实施例,与归约运算结果相关的信息可以写入如图3所示的缓存区域140的任一缓存子区域中。例如,可以将诸如归约运算结果的数据值、已执行的运算次数、以及归约运算结果所要写入的目标存储区域的地址,写入缓存区域140的缓存子区域中。

关于将与归约运算结果相关的信息写入缓存区域,其可以是将与归约运算结果相关的信息写回缓存区域中的、存储有计算单元的历史数据的缓存子区域,或者将与归约运算结果相关的信息写入新的缓存子区域。具体地,当归约运算结果是基于写入同一计算单元中的多个源数据以及历史数据进行归约运算所得到的,则将与该归约运算结果相关的信息写回缓存区域中存储有历史数据的缓存子区域;当归约运算结果是基于写入同一计算单元中的多个源数据进行归约运算所得到的,则需将与该归约运算结果相关的信息写入新的缓存子区域。

关于将归约运算结果写入新的缓存子区域,根据本发明的实施例,当缓存区域的存储空间未占满,可以直接将与归约运算结果相关的信息写入缓存区域;当缓存区域的存储空间已占满时,则需先将至少一个归约运算结果写入目标存储区域,例如按照一定规则将缓存区域中存储的至少一个归约运算结果写入目标存储区域,以便将与归约运算结果相关的信息写入缓存区域。

关于缓存区域的存储空间,其可以是指缓存区域中可用缓存子区域的数量或情况。根据本发明的实施例,缓存区域中可以包括多个缓存子区域以用于存储与归约运算结果相关的信息。以图3的缓存区域140为例,如上所述,缓存区域140包括32个缓存子区域,且初始化的缓存区域中的32个缓存子区域均可用于存储与归约运算结果相关的信息。当缓存区域140包括至少一个缓存子区域为无效,即至少一个缓存子区域中的数据项为空,则表示缓存区域140的的存储空间未占满。当缓存区域140中的所有缓存子区域均存储有一条与归约运算结果相关的信息,即所有缓存子区域为有效,则表示缓存区域140的存储空间已占满。

关于将归约运算结果写入目标存储区域,其可以是至少基于与归约运算结果相关的信息、缓存区域的存储空间,将归约运算结果从缓存区域写入目标存储区域。

关于将归约运算结果从缓存区域写入目标存储区域,其例如可以包括:响应于已执行的运算次数到达预定次数,将归约运算结果从缓存区域写入目标存储区域;或者响应于缓存区域的存储空间已占满且归约运算结果为缓存区域中最先写入的数据,将归约运算结果从缓存区域写入目标存储区域。

关于响应于已执行的运算次数到达预定次数,其可以是指基于运算次数的统计来确定是否已执行完同一任务下的所有归约运算。当已执行的运算次数到达预定次数,表示已执行完同一任务下的所有归约运算,即缓存区域中存储的归约运算结果为完成同一任务下所有归约运算后得到的运算结果。在这种情况下,该运算结果可以被视为完成所有归约运算后得到的最终结果,因而可以将该运算结果从缓存区域写入目标存储区,以便进一步例如由发送模块进行发送。例如,在本发明的一个示例中,计算任务为针对8个GPU进行归约运算,则该任务下所要执行的归约运算次数总共为8次,即预定次数为8次。当已执行的运算次数到达8次,所得到的运算结果即为针对8个GPU进行归约运算的最终结果,则可以将该结果从缓存区域写入目标存储区。由此,通过将完成同一任务下所有归约运算后得到的运算结果从缓存区域写入目标存储区域,可以及时释放缓存区域中的存储空间,以便后续得到的运算结果可以不断地写入缓存区域进行缓存。

关于响应于缓存区域的存储空间已占满且归约运算结果为缓存区域中最先写入的数据,其可以是在缓存区域的所有缓存子区域均存储有数据时,将至少一个缓存子区域中的数据写入目标存储区域中,以使得可以继续向缓存区域中写入与归约运算结果相关的信息,例如可以基于数据写入的时间进行排序以确定最先写入缓存区域的数据,并将最先写入缓存区域的数据优先写入目标存储区域。

根据本发明的实施例,上述写入目标存储区域的最终结果然后可以被发送到发送模块,以由发送模块进行发送。例如,当写入目标存储区域的归约运算结果为归约运算的最终结果,可以将归约运算结果发送至数据发送模块,以便数据发送模块基于归约运算命令发送归约运算结果到指定目的地,例如某一指定GPU上。

在一些实施例中,可以使得目标存储区域中存储的数据项至少包括归约运算结果和计数信息,即例如在目标存储区域的每个地址上存储:归约运算结果的数据值、以及得到该数据值所执行的归约运算次数。进一步地,与如上在缓存区域中的判断方法类似,目标存储区域可以基于所执行的归约运算次数是否达到预定次数来确定归约运算结果是否为最终结果,并将确定为最终结果的归约运算结果发送至数据发送模块,以便基于归约运算命令中指示的目的地信息(诸如指定的GPU)发送该运算结果。

根据上述方案,通过将由计算模块得到的运算结果写入缓存区域,以根据需要直接对缓存区域中存储的运算结果进行读取,避免了对目标存储区域的反复读写,提高归约运算效率。

图6示出了根据本发明的实施例的用于基于归约运算命令获取源数据的方法600的流程图。方法600可在如图1所示的系统100处或由如图8所示的电子设备800执行。应当理解,方法600还可以包括未示出的附加动作和/或可以省略所示出的动作,本发明的范围在此方面不受限制。

在步骤602,接收多个归约运算命令。

关于接收多个归约运算命令,其可以是接收由主机(诸如CPU)直接发送的归约运算命令。附加地或替代地,接收的多个归约运算命令可以是:接收由GPU在准备好源数据后发送的、指示可以从其上读取源数据的归约运算命令。例如,可以接收由某一GPU发送的多个(诸如3个)归约运算命令,这些归约运算命令分别对应于该GPU中三段不同地址上的数据,以及针对这些数据所要进行的不同的归约运算。

在步骤604,检查多个归约运算命令,以收集与同一归约运算任务相关的归约运算命令。

关于与同一归约运算任务相关的归约运算命令,其可以是指针对目标存储区域的同一存储地址进行归约运算的命令。根据本发明的实施例,可以通过对接收到的多个归约运算命令所对应的初始地址进行换算并映射到目标存储区域的存储地址,再基于经映射得到的目标存储区域的存储地址进行比较。响应于多个归约运算命令对应的目标存储区域的存储地址相同,表示该多个归约运算命令与同一归约运算任务相关,则收集该多个归约运算命令。

在步骤606,确定与同一归约运算任务相关的归约运算命令是否收集齐。

关于确定与同一归约运算任务相关的归约运算命令是否收集齐,其可以是确定收集到归约运算命令是否达到预定数量。例如,针对8个GPU进行归约运算,需要收集的归约运算命令的预定数量为8条;类似地,针对4个GPU进行归约运算,则需要收集的归约运算命令的预定数量为4条。

响应于在步骤606处同一归约运算任务相关的归约运算命令收集齐,在步骤608,基于所收集齐的归约运算命令,确定所要获取的源数据的读取地址。

关于所要获取的源数据的读取地址,其可以是指例如从哪个GPU或某一GPU的哪段地址读取源数据。

关于基于所收集齐的归约运算命令确定所要获取的源数据的读取地址,其可以是基于收集到的与同一归约运算任务相关的归约运算命令,确定每个命令中指示的所要获取的源数据的读取地址,以便获取完成该归约运算任务所需的所有源数据。以上述针对8个GPU进行归约运算为例,根据本发明的实施例,可以基于接收到的8条归约运算命令,确定从8个GPU中的每个分别获取什么源数据以进行归约运算。

在步骤610,基于源数据的读取地址,发送读取数据请求,以获取相应的源数据。

关于基于源数据的读取地址发送读取数据请求,其可以是向相应的GPU发送读取其上的源数据的请求,以使得各GPU将所请求的源数据发送至计算模块。

根据本发明的上述实施例,通过在基于归约运算命令获取源数据之前,收集齐与同一归约运算任务相关的归约运算命令,再基于收集齐的归约运算命令获取源数据,使得能够提高获取用于归约运算的源数据的效率,从而提高归约运算的整体效率。

图7示出了根据本发明的实施例的用于对所获取的源数据进行归约运算的方法700的流程图。方法700可在如图1所示的系统100处或由如图8所示的电子设备800执行。应当理解,方法700还可以包括未示出的附加动作和/或可以省略所示出的动作,本发明的范围在此方面不受限制。

在步骤702,基于归约运算命令,获取源数据。

关于步骤702,可参见步骤502,这里不再赘述。

在步骤704,响应于所获取的源数据中的多个源数据对应于目标存储区域中的同一存储地址,将多个源数据合并写入同一计算单元。

关于步骤704,可参见步骤504,这里不再赘述。

在步骤706,确定缓存区域的缓存数据中是否包括与写入计算单元中的源数据所对应的在目标存储区域中的存储地址相同的地址。

关于确定缓存区域的缓存数据中是否包括与写入计算单元中的源数据所对应的在目标存储区域中的存储地址相同的地址,其可以是将写入计算单元中的源数据所对应的在目标存储区域中的存储地址与缓存区域的缓存数据中所包括的存储地址进行比较。若缓存区域的缓存数据中包括与写入计算单元中的源数据所对应的在目标存储区域中的存储地址相同的地址,则前进到步骤708。

在步骤708,从缓存区域读取与该地址对应的历史数据,并将该历史数据写入计算单元。也就是说,响应于在步骤706处确定缓存区域的缓存数据中包括与存储地址相同的地址,在步骤708处从缓存区域中读取与存储地址相同的地址对应的历史数据,并将历史数据写入计算单元。

若缓存数据中所包括的存储地址与写入计算单元中的源数据所对应的在目标存储区域中的存储地址均不相同,即响应于缓存区域的缓存数据中不包括与存储地址相同的地址,则前进到步骤710,以确定目标存储区域处的存储地址上是否存储有历史数据。

如图7所示,在步骤710,确定目标存储区域处的该存储地址上是否存储有历史数据。

响应于在步骤710处确定目标存储区域处的存储地址上存储有历史数据,则前进到步骤712,以从目标存储区域中读取所存储的历史数据,以便能够将该历史数据写入计算单元中。

如图7所示,在步骤712,从目标存储区域读取历史数据到缓存区域,并将该历史数据写入计算单元。根据本发明的实施例,从目标存储区域中读取的数据需先写入缓存区域中,再由计算模块从缓存区域读取数据到计算单元中进行归约计算。

待完成步骤708处或步骤712处的将历史数据写入计算单元,可以前进至步骤714以进行归约运算。

如图7所示,在步骤714,基于写入同一计算单元中的多个源数据、以及历史数据,进行归约运算,以得到归约运算结果。具体地,可以基于在步骤704处写入计算单元的多个源数据、以及在步骤708处从缓存区域读取并写入到计算单元的该计算单元的历史数据或者在步骤712处从目标存储区域读取到缓存区域并进一步从缓存区域读取并写入到计算单元的该计算单元的历史数据,进行归约运算,以得到归约运算结果。根据本发明的实施例,步骤710所得到的归约运算结果被写入缓存区域的缓存子区域时,可以被写入与之前读取计算单元的历史运算数据相同的缓存子区域。

由上可知,根据本发明的实施例,可以基于缓存区域中存储有数据的缓存子区域进行检索,当某一缓存子区域中存储的信息所包括的归约运算结果所要写入的目标存储区域的地址与写入计算单元中的源数据所对应的在目标存储区域中的存储地址相同,则可以将该缓存子区域中存储的信息视为与前述计算单元的历史归约运算结果相关的信息,此时,可以从该缓存子区域读取其中存储的运算结果的数据值到计算单元中,以与计算单元中的其他源数据一起进行归约运算。当缓存区域中未检索到与写入计算单元中的源数据所对应的在目标存储区域中的存储地址相同的地址,则进一步基于目标存储区域中存储的数据进行检索,若目标存储区域中与写入计算单元中的源数据所对应的在目标存储区域中的存储地址上存储有数据,且该数据不是归约运算的最终结果,则可以从目标存储区域中读取该数据到缓存区域中,以使得然后可以从缓存区域中读取该数据到计算单元中,以与计算单元中的其他源数据一起进行归约运算。

根据本发明的又一些实施例,在步骤710处确定目标存储区域处的存储地址上未存储有历史数据,则表示写入计算单元中的源数据所对应的在目标存储区域中的存储地址为新的存储地址,也就是说,之前没有针对该存储地址进行过归约运算。故可以直接基于写入计算单元中的源数据进行归约运算。

具体地,响应于在步骤710处确定目标存储区域处的所述存储地址上未存储有历史数据,在步骤716,基于写入同一计算单元中的多个源数据进行归约运算,以得到归约运算结果。根据本发明的实施例,步骤716所得到的归约运算结果被写入缓存区域的缓存子区域时,将占用新的缓存子区域。

综上,根据本发明的实施例,通过在计算模块和目标存储区域之间设置缓存区域,使得计算模块能够直接针对缓存区域进行数据的读写,并且只有在预定条件时,才从目标存储区域中检索并读取数据,从而避免了对目标存储区域的反复读写,提高归约运算效率。

图8示意性示出了适于用来实现本发明实施例的计算设备800的框图。设备800可以是用于实现执行图5所示的方法500、图6所示的方法600和图7所示的方法700的设备。如图8所示,设备800包括中央处理单元(CPU)801,其可以根据存储在只读存储器(ROM)802中的计算机程序指令或者从存储单元808加载到随机访问存储器(RAM)803中的计算机程序指令,来执行各种适当的动作和处理。在RAM 803中,还可存储设备800操作所需的各种程序和数据。CPU 801、ROM 802以及RAM 803通过总线804彼此相连。输入/输出(I/O)接口805也连接至总线804。

设备800中的多个部件连接至I/O接口805,包括:输入单元806、输出单元807、存储单元808,处理单元801执行上文所描述的各个方法和处理,例如执行方法500、600或700。例如,在一些实施例中,方法500、600或700。可被实现为计算机软件程序,其被存储于机器可读介质,例如存储单元808。在一些实施例中,计算机程序的部分或者全部可以经由ROM 802和/或通信单元809而被载入和/或安装到设备800上。当计算机程序加载到RAM 803并由CPU801执行时,可以执行上文描述的方法300的一个或多个操作。备选地,在其他实施例中,CPU801可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行方法500、方法600和/或方法700的一个或多个动作。

这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。

用于执行本发明操作的计算机程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,该编程语言包括面向对象的编程语言—诸如Smalltalk、C++等,以及常规的过程式编程语言—诸如“C”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA),该电子电路可以执行计算机可读程序指令,从而实现本发明的各个方面。

这些计算机可读程序指令可以提供给语音交互装置中的处理器、通用计算机、专用计算机或其它可编程数据处理装置的处理单元,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理单元执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作。

以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。

以上仅为本发明的可选实施例,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等效替换、改进等,均应包含在本发明的保护范围之内。

相关技术
  • 归约运算映射系统和方法
  • 用于在真空沉积工艺中在基板上进行材料沉积的设备、用于在基板上进行溅射沉积的系统和用于制造用于在基板上进行材料沉积的设备的方法
  • 用于调整、制造、以及操作无线电收发信机、移动收发信机、基站收发信机的调整电路和装置、方法、以及计算机程序、和用于计算机程序或指令的存储设备
  • 用于实施加密运算的方法和设备及存储介质
  • 用于管理存储系统的方法、设备和计算机程序产品
  • 用于卷积运算的方法、计算设备、计算系统和存储介质
  • 有限域运算方法、系统、运算设备和计算机可读存储介质
技术分类

06120116500374