CN111448545B - 并行处理设备和进行并行多值归约的方法 - Google Patents

并行处理设备和进行并行多值归约的方法 Download PDF

Info

Publication number
CN111448545B
CN111448545B CN201880034679.2A CN201880034679A CN111448545B CN 111448545 B CN111448545 B CN 111448545B CN 201880034679 A CN201880034679 A CN 201880034679A CN 111448545 B CN111448545 B CN 111448545B
Authority
CN
China
Prior art keywords
values
register
parallel processing
initial
reduction
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201880034679.2A
Other languages
English (en)
Other versions
CN111448545A (zh
Inventor
埃里希·康拉德·埃尔森
桑德·艾蒂安·利亚·迪勒曼
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Google LLC
Original Assignee
Google LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Google LLC filed Critical Google LLC
Publication of CN111448545A publication Critical patent/CN111448545A/zh
Application granted granted Critical
Publication of CN111448545B publication Critical patent/CN111448545B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/3009Thread control instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5066Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Image Processing (AREA)

Abstract

方法,系统和装置,包括在计算机存储介质上编码的计算机程序,用于使用并行处理设备计算多值归约。该方法之一包括通过并行处理设备的并行处理单元执行并行M值归约。串行的进行多个初始归约,每个初始归约对至少M个寄存器空间的不同的相应寄存器空间中的数据进行操作。从M个寄存器空间移动数据,以使来自多个初始归约的所有结果都在相同的第一寄存器空间中。并行地进行一个或多个后续的归约,以计算M个最终值,每个后续的归约仅对所述第一寄存器空间中的数据进行操作。

Description

并行处理设备和进行并行多值归约的方法
相关申请的交叉引用
本申请要求2017年12月12日提交的美国专利申请No.15/839,637的优先权,其全部内容通过引用合并于此。
背景技术
本说明书涉及使用并行处理硬件来高效并行计算多值归约的技术。
归约是将多个值组合为一个值的操作。例如,可以通过计算8个值的单个总和来进行 8个值的归约。归约操作通常由并行处理设备(例如图形处理单元(GPU))进行,以便组合由并行处理设备的多个独立处理单元执行的多个线程所计算的数据。
在本说明书中描述的示例通常将涉及独立处理单元是具有多个处理核的流式多处理器(SM),而并行处理设备是图形处理单元(GPU)。但是,相同的技术也可以在使用多个独立处理单元来实施真正的线程并行化的其他硬件设备上实施。这样的设备通常包括单指令、多数据(SIMD)处理器,张量处理单元(TPU)或其他专用集成电路。另外,在示例提及使用GPU的地方,这不一定意味着正在处理或产生图形数据。
在这样的并行处理设备上,可以通过程序抽象来提供对线程并行化的控制,这些程序抽象定义了如何分配线程以由多个独立的处理单元执行。为了表示清楚起见,本说明书使用通用GPU程序抽象的术语,但是控制如何在独立处理单元上调度线程的等效程序抽象可以用于非GPU的其他系统。
线程块,或简称为块,是由单个SM执行的一组线程。块中的线程可以通过使用SM的共享内存来进行协调。因此,一个块中的线程之间的通信通常比与其他块中的线程的通信快几个数量级。
线程束(warp)是块内的一组线程,在某些情况下代表GPU的最小可分配计算单元。线程束内的线程通常可以从分配给同一线程束内其他线程的寄存器中读取。线程束中的线程通常还按步执行指令。因此,线程束中的线程可以例如同时从寄存器位置获取数据。仅举几个例子,常见的线程束大小是16、32或64个线程。
并行处理设备的并行处理能力允许通过以指数级增加或减少的步骤或跳过读取数据来将单值归于作为一系列聚合操作来进行。例如,如果一个线程束有8个线程,则每个线程可以从其邻居处一步求和,然后再进行两步,然后再进行4步。在此过程结束时,其中一个线程将对原始数据中的所有值求和。
但是,进行多值归约通常需要多个单值归约的串行进行。在许多需要极高吞吐量要求的实际应用中,此限制是处理瓶颈。例如,由于原始音频生成的基本高吞吐量性质,对原始音频波形进行建模的音频生成神经网络提出了重大的计算难题。现实的原始音频生成通常需要每秒生成数千个音频样本,例如,每秒24,000个样本。在这种高吞吐量应用中,任何并行处理速度的提高都是至关重要的。
发明内容
本说明书描述了系统如何使用并行处理硬件来并行计算多值归约。即,假设要减少存储数据的M个寄存器空间,系统可以计算M个最终减少的值。在本说明书中,“寄存器空间”是一组对应的寄存器,每个寄存器属于一个不同的处理单元,并且在由线程并行执行时,可以由相同的指令同时访问所有这些寄存器。
可以实施本说明书中描述的主题的特定实施例,以实现以下优点中的一个或多个。并行处理设备可以更快地计算多值归约。并行处理设备可以通过使用同一寄存器空间的多个寄存器分区来充分利用并行处理能力,从而可以并行计算M个最终值中的至少一些。
本说明书的主题的一个或多个实施例的细节在附图和以下描述中阐述。根据说明书,附图和权利要求书,本主题的其他特征,方面和优点将变得显而易见。
附图说明
图1是用于使用并行处理设备执行M值归约的示例处理的流程图。
图2是用于在8线程的线程束中执行二值归约的示例处理的流程图。
图3A至图3F示出了在具有8个线程的线程束中可以如何对求和聚合运算执行多值归约的示例。
类似的参考编号和附图标记在各附图中表示类似的元件。
具体实施方式
图1是用于使用并行处理设备进行M值归约的示例处理的流程图。为了方便起见,将示例处理描述为由根据本说明书适当编程的处理单元执行。
处理单元对M个不同的寄存器空间中的数据进行串行的多个初始归约(110)。通常,该处理的起点是存在于要归约的M个不同寄存器空间中的数据。如上所述,寄存器空间中的寄存器都属于不同的线程,并且通常可以使用相同的源代码指令进行并发访问。例如,示例代码“val[0]”将导致线程束中的所有线程读取属于同一寄存器空间的不同寄存器中的值。
通常,每次归约都会将寄存器空间中有助于最终结果的寄存器数量减半。要进行初始归约的数量取决于线程束中的线程的大小,也取决于M的值。通常,系统需要执行足够的初始归约,以便要归约的所有剩余数据都适合于线程束的相同寄存器空间。
因此,通常,处理单元可执行多次初始归约,直到存储剩余要归约的数据的寄存器的当前数量j小于或等于线程束中的线程数量N。因此,例如,如果在一个线程束中有8个线程并且M=2,则处理单元可以串行的执行两个初始归约,以使4个线程存储M值中的一个值的数据,而其他4个线程存储M值中的另一个值的数据。
例如,如果M=3,则两次初始归约将是不够的,因为至少12个寄存器仍将存储要归约的剩余数据。因此,将需要至少五个初始归约量。
处理单元从M个寄存器空间移动数据,使得来自多个初始归约的所有结果都在相同的第一寄存器空间中(120)。通常,这涉及每个线程将数据从其一个寄存器移到另一个寄存器。可以将这一过程概念化为在单个寄存器空间内生成M个寄存器分区,其中每个分区都是寄存器空间中的寄存器的互斥子集。例如,如果M=2,则处理单元可以在单个寄存器空间中生成两个分区。如果M=3,则处理单元可以在单个寄存器空间中生成三个分区。
分区的大小不必相同。例如,如果M=3,则系统可以对一个寄存器空间执行一次初始归约,但对其他两个寄存器空间执行两次初始归约。这样,一个分区可以有四个寄存器,而其他两个分区每个可以有两个寄存器。
处理单元对第一寄存器空间中的数据并行执行一个或多个后续的归约,以计算M个最终值(130)。现在所有数据都在同一寄存器空间中,系统可以并行计算其余的归约。
在该处理结束时,M个最终值将全部存储在寄存器空间中的不同寄存器中。因此,如果应用要求所有M个值都在同一线程中,则系统可以执行M-1个复制操作,以便所有M个值都属于同一线程。
图2是用于在8个线程的线程束中执行二值归约的示例处理的流程图。图2的流程图从具有8个线程的线程束中的单线程的角度描述了执行的步骤。实际上,线程束中的所有N个线程将并行执行示例处理,尽管并非所有线程都将计算相同的数据或遵循相同的路径。
线程将第一寄存器中的值与位置向上N/2的线程的相应寄存器中的值聚合到第一寄存器中(210)。换句话说,线程从另一个处理单元的寄存器中读取值,并将读取的值与其自己的寄存器中的值进行聚合。
为了确定要读取哪个其他寄存器,线程可以首先确定其自己的线程标识符。然后,线程可以通过增加N/2(对线程束中的线程数取模),来计算目标线程标识符。
在此上下文中,术语“聚合”广义上是指对一组寄存器中的所有值执行的任何适当操作。常见的聚合运算包括最大值,最小值,求和以及积。
图3A示出了图2的步骤210的示例。图3A-3F大体上说明了如何在具有8个线程(线程0至线程7)的线程束中对求和聚合运算执行多值归约的扩展示例。
该示例假定线程束中的所有线程均在时间T0开始,第一寄存器中的第一值为“x”,第二寄存器中的第二值为“y”。因此,寄存器301、311、321、331、341、351、361和 371以值“x”开始,而寄存器302、312、322、332、342、352、362和372以值为“y”开始。
求和聚合运算将所有x求和,并将所有y求和,从而将结果存储在属于单个线程的寄存器中。
如图3A所示,在时间T0和T1之间,线程0在寄存器301中存储的值与线程号0+8/2=线程4的相应寄存器中存储的值之间执行聚合操作。在这种情况下,聚合操作求和,将值2x存储在寄存器301中。
类似地,还计算值2x并将其存储在每隔一个对应的寄存器301、311、321、331、341、351、361和371中。在图3A-3F的示例中,虚线仅用于说明有助于最终多值归约的数据移动。因此,例如,虽然线程4-7还将计算值“2x”并将其存储在寄存器341、351、361和 371中,但是出于完整性考虑,这些值包含在图中,但实际上不会对最终结果有任何贡献。
如图2所示,线程将第二寄存器中的值与位置向下N/2的线程的相应寄存器中的值聚合到第二寄存器中(120)。换句话说,线程从另一个线程的寄存器中读取一个值,并将读取的值与其自己的寄存器中的值进行聚合。为了确定要读取哪个其他寄存器,线程可以通过减去N/2(对线程束中的线程数取模),来计算目标线程标识符。
图3B示出了图2的步骤220的示例。1.在时间T1和T2之间,线程4在寄存器342 中存储的值与线程号为4–8/2=线程0的相应寄存器中存储的值之间执行聚合操作。聚合操作得出的值2y被存储在寄存器342中。
类似地,还计算值2y并将其存储在每隔一个相应的寄存器302、312、322、332、342、352、362和372中。但是,只有最后四个值实际上会影响最终结果。
有时由用于并行处理设备的特定指令集架构的单个指令来支持步骤210和220的聚合操作。例如,在一些GPU中,可以使用“向下洗牌(shuffle down)”指令来实现第一聚合操作,并且可以使用“向上洗牌(shuffle up)”指令来实现第二聚合操作。
如图2所示,线程确定它是否在第一分区中(230)。如上所述,可以以任何适当的方式对寄存器空间进行分区,从而分配一个分区来计算多值归约运算的每个值。当只有两个值要聚合时,分区方案可以为每个值分配一半的线程。
步骤230中的该决定点实质上确定线程是否需要将数据从一个寄存器空间移至另一寄存器空间。在某些情况下,线程的数据已经在目标寄存器空间中,因此不需要移动数据。
因此,如果线程在第一分区中,则该线程将值从第二寄存器移动到第一寄存器(分支到240)。否则,简单地跳过此步骤(分支到250)。
图3C示出了图2的步骤230和240的示例。在时间T2和T3之间,只有线程4-7移动数据。例如,线程4将值2y从寄存器342移动到寄存器341。类似地,其他线程将相应的移动移入寄存器351、361和371。
此时,将由寄存器311、321、331、341、351、361和371定义的寄存器空间有效地划分为两个寄存器分区310和320。一半的寄存器(例如301、311、321和331)形成用于第一值(例如2x)的第一寄存器分区310,而另一半寄存器(例如341、351、361和371) 形成用于第二值(例如2y)的第二寄存器分区320。
如图2所示,系统计算新的归约跳过值(250)。归约跳过值用于控制在归约的每次迭代中应从哪个寄存器读取线程。通常,归约跳过值呈指数变化。跳过值可以变大,例如 1、2、4、8等;或变小,例如8、4、2、1。
系统确定归约跳过值是否为最终跳过值。最终跳过值通常取决于最大的寄存器分区中的线程数。对于此示例,在初始分区中有四个线程的情况下,归约跳过值最初为2,然后为1,最终归约跳过值为1。
如果尚未达到最终归约跳过值(260),则线程将第一寄存器中的值与由归约跳过值确定的相应寄存器中的值聚合到第一寄存器中(分支到280)。
图3D示出了步骤280的示例。例如,线程0将寄存器301中的值与寄存器321中的值进行聚合,寄存器321由归约跳过值2确定。类似地,线程4将寄存器中的值与寄存器 361中的值进行聚合,寄存器361由归约跳过值2确定。
图3E示出了经过步骤280的下一次迭代。此时,归约跳过值是1。因此,线程0例如将寄存器301中的值与寄存器311中的值聚合,寄存器311由归约跳过值确定。并且线程 4将寄存器341中的值与寄存器351中的值聚合,寄存器351由归约跳过值确定。
如图2所示,如果归约跳过值是最终归约跳过值(260),则线程将位置向上N/2的线程的第一寄存器中的值向上移到第二寄存器中(分支到270)。换句话说,线程从第二分区复制最终归约值,以便单个线程具有所有M个归约值。
图3F示出了步骤270。线程0将由存储有线程4的第二分区中的线程计算出的最终值复制到不同的寄存器空间中。因此,在该过程的这一点上,线程0具有M值归约操作的所有值。
为简单起见,此示例假设在一个线程束中有仅8个线程。然而,现代GPU通常在线程束中具有该线程数量的许多倍,例如在线程束中具有32或64个线程。例如,如果一个线程束中有32个线程,则使用常规技术将需要10个步骤来执行2值归约,而使用上述技术仅需6个步骤。对于线程束中的64个线程,执行2值归约将需要12个步骤,而使用上述技术仅需7个步骤。
在本说明书中,并行或基本并行地执行操作意味着不同线程或独立处理单元在至少部分重叠的时间窗口上执行操作。并行或基本并行执行操作不需要精确地同时或同步地计算所有值。
本说明书中描述的主题和功能操作的实施例可以在数字电子电路中,在具体体现的计算机软件或固件中,在计算机硬件中实施,包括本说明书中公开的结构及其等同结构,或以其中一个或多个。本说明书中描述的主题的实施例可以实现为一个或多个计算机程序,即,在有形的非暂时性存储介质上编码的计算机程序指令的一个或多个模块,以由数据执行或控制数据的操作处理设备。该计算机存储介质可以是机器可读存储设备,机器可读存储基板,随机或串行访问存储设备或它们中的一个或多个的组合。替代地或附加地,程序指令可以被编码在人工产生的传播信号上,例如机器产生的电,光或电磁信号,其被产生以对信息进行编码,用于传输到合适的接收器装置,以由数据处理设备执行。
术语“数据处理设备”是指数据处理硬件,并且包括用于处理数据的所有类型的设备,设备和机器,例如包括可编程处理器,计算机或多个处理器或计算机。该装置还可以是或进一步包括专用逻辑电路,例如FPGA(现场可编程门阵列)或ASIC(专用集成电路)。除硬件之外,该装置可以可选地包括为计算机程序创建执行环境的代码,例如,构成处理器固件,协议栈,数据库管理系统,操作系统或这些中的一个或多个的组合的代码。
也可以被称为或描述为程序,软件,软件应用程序,应用程序,模块,软件模块,脚本或代码的计算机程序可以以任何形式的编程语言来编写,包括编译的或解释性语言或声明性或过程性语言,并且可以以任何形式进行部署,包括作为独立程序或作为模块,组件,子例程或适用于计算环境的其他单元进行部署。程序可以但不必对应于文件系统中的文件。程序可以存储在保存其他程序或数据的文件的一部分中,例如存储在标记语言文档中的一个或多个脚本,专用于所讨论程序的单个文件中或多个协调文件中,例如,存储一个或多个模块,子程序或部分代码的文件。可以将计算机程序部署为在位于一个站点上或分布在多个站点上并通过数据通信网络互连的一台计算机或多台计算机上执行。
对于一个或多个要配置为执行特定操作或动作的计算机的系统,意味着该系统已在其上安装了软件,固件,硬件或它们的组合,这些软件,固件,硬件或它们的组合在操作中导致系统执行这些操作或动作。对于将被配置为执行特定操作或动作的一个或多个计算机程序,意味着该一个或多个程序包括指令,该指令在由数据处理设备执行时使该设备执行该操作或动作。
如本说明书中所使用的,“引擎”或“软件引擎”指的是软件实现的输入/输出系统,其提供与输入不同的输出。引擎可以是编码的功能块,例如库,平台,软件开发工具包(“SDK”)或对象。可以在任何适当类型的计算设备(例如,服务器,移动电话,平板电脑,笔记本计算机,音乐播放器,电子书阅读器,便携式计算机或台式计算机,PDA,智能电话或其他固定或便携式设备)上实现每个引擎,包括一个或多个处理器和计算机可读介质。另外,两个或多个引擎可以在同一计算设备上或在不同的计算设备上实现。
本说明书中描述的过程和逻辑流程可以由执行一个或多个计算机程序以通过对输入数据进行操作并生成输出来执行功能的一个或多个可编程计算机来执行。所述过程和逻辑流程也可以由专用逻辑电路(例如,FPGA或ASIC)执行,或者由专用逻辑电路和一个或多个编程计算机的组合执行。
适用于执行计算机程序的计算机可以基于通用或专用微处理器或两者,或者基于任何其他类型的中央处理器。通常,中央处理单元将从只读存储器或随机存取存储器或两者中接收指令和数据。计算机的基本元件是用于执行或执行指令的中央处理单元以及用于存储指令和数据的一个或多个存储设备。中央处理单元和存储器可以由专用逻辑电路补充或并入专用逻辑电路中。通常,计算机还将包括或可操作地耦合以从一个或多个用于存储数据的大容量存储设备(例如,磁,磁光盘或光盘)接收数据或将数据传输到一个或多个大容量存储设备或将数据传输到这两者。但是,计算机不必具有此类设备。此外,计算机可以被嵌入到另一个设备中,例如,移动电话,个人数字助理(PDA),移动音频或视频播放器,游戏机,全球定位系统(GPS)接收器或便携式存储设备,例如通用串行总线(USB) 闪存驱动器,仅举几例。
适用于存储计算机程序指令和数据的计算机可读介质包括所有形式的非易失性存储器,介质和存储设备,包括例如半导体存储设备,例如EPROM,EEPROM和闪存设备;磁盘,例如内部硬盘或可移动磁盘;磁光盘;CD-ROM和DVD-ROM磁盘。
为了提供与用户的交互,可以在计算机上实现本说明书中描述的主题的实施例,该计算机具有显示设备(例如,CRT(阴极射线管)或LCD(液晶显示器)监视器),用于向用户显示信息,并且该计算机还具有键盘和指点设备(例如鼠标,轨迹球或存在敏感的显示器或其他表面),用户可通过该键盘和指点设备向计算机提供输入。其他种类的设备也可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的感觉反馈,例如视觉反馈,听觉反馈或触觉反馈;并且可以以任何形式接收来自用户的输入,包括声音,语音或触觉输入。另外,计算机可以通过向用户使用的设备发送文档以及从用户使用的设备接收文档来与用户进行交互;例如,通过响应从网页浏览器收到的请求,将网页发送到用户设备上的网页浏览器。此外,计算机可以通过向个人设备(例如,智能手机)发送文本消息或其他形式的消息,并运行消息传递应用程序并从用户接收响应消息来与用户进行交互。
可以在包括后端组件(例如,作为数据服务器)或包括中间件组件(例如,应用服务器)或包括前端组件的计算系统中实现本说明书中描述的主题的实施例。终端组件,例如具有图形用户界面的客户端计算机,网页浏览器或应用,用户可通过该应用与本规范中描述的主题的实现进行交互,或者一个或多个此类后端的任意组合,中间件或前端组件。系统的组件可以通过任何形式或介质的数字数据通信(例如,通信网络)互连。通信网络的示例包括局域网(LAN)和广域网(WAN),例如因特网。
该计算系统可以包括客户端和服务器。客户端和服务器通常彼此远离,并且通常通过通信网络进行交互。客户端和服务器之间的关系是通过在各自计算机上运行并彼此具有客户端-服务器关系的计算机程序产生的。在一些实施例中,服务器例如为了向与充当客户端的与该设备交互的用户显示数据并从该用户接收用户输入的目的,向用户设备发送例如 HTML页面的数据。可以在服务器上从设备接收在用户设备处生成的数据(例如,用户交互的结果)。
除了上述实施例之外,以下实施例也是创新的:
实施例1是一种通过并行处理设备的并行处理单元进行并行M值归约的方法,该方法包括:
串行的进行多个初始归约,每个初始归约对至少M个寄存器空间的不同的相应寄存器空间中的数据进行操作;
从所述M个寄存器空间移动数据,以使来自所述多个初始归约的所有结果都在相同的第一寄存器空间中;和
并行地进行一个或多个后续的归约,以计算M个最终值,每个后续的归约仅对所述第一寄存器空间中的数据进行操作。
实施例2是实施例1的方法,其中并行处理设备是图形处理单元。
实施例3是根据实施例1-2中任一实施例所述的方法,还包括:将所述一个或多个后续的归约的每个结果移动到相同并行处理单元的相应寄存器中。
实施例4是根据实施例1-3中任一项所述的方法,其特征在于,串行的进行所述多个初始归约包括:
进行向下洗牌操作,之后进行向上洗牌操作,反之亦然。
实施例5是根据实施例1-4中的任一项所述的方法,每个初始归约减少了存储有助于所述M个最终值的数据的寄存器的数量,并且其中,进行所述多个初始归约包括进行一些初始归约,使得要减少M次的、存储有助于所述M个最终值的数据的寄存器的当前数量j 小于或等于线程束中的线程数量N。
实施例6是实施例5的方法,每个归约将存储有助于所述M个最终值之一的数据的寄存器的数量减半。
实施例7是根据实施例1-6中任一项所述的方法,其中,从所述M个寄存器空间移动数据、以使来自所述多个初始归约的所有结果都在相同的第一寄存器空间中包括,将有助于不同的最终值的数据移动到不同的寄存器分区中。
实施例8是实施例7的方法,其中每个寄存器分区是相同寄存器空间中的寄存器的互斥子集。
实施例9是实施例8的方法,其中每个寄存器空间是一组对应的寄存器,每个对应的寄存器属于不同的处理单元,并且当由所述处理单元并行执行时,可以由相同的指令同时访问所有这些寄存器。
实施例10是包括多个并行处理单元的并行处理设备,该并行处理设备被配置为执行使该并行处理设备执行实施例1至9中任一项的方法的指令。
实施例11是用计算机程序编码的计算机存储介质,该程序包括指令,当由数据处理设备执行该指令时,该指令可操作为使数据处理设备执行实施例1至9中任一项的方法。
虽然此说明书包含许多特定的实施细节,这些不应被解释为对任何发明的范围或所要求保护的范围的限制,而是对可能特定于特定发明的特定实施例的特征的描述。在单独的实施例的上下文中,在本说明书中描述的某些特征也可以在单个实施例中组合实现。相反,在单个实施例的上下文中描述的各种特征也可以分别在多个实施例中或以任何合适的子组合来实现。而且,尽管以上可能将特征描述为以某些组合形式起作用,甚至最初是这样要求保护的,但是在某些情况下,可以从组合中切除所要求保护的组合中的一个或多个特征,并且所要求保护的组合可以涉及子组合或子组合的变体。
类似地,尽管在附图中以特定顺序描绘了操作,但是这不应理解为要求以所示的特定顺序或以连续的顺序执行这样的操作,或者执行所有示出的操作以实现期望的结果。在某些情况下,多任务和并行处理可能是有利的。此外,上述实施例中的各种系统模块和组件的分离不应被理解为在所有实施例中都需要这种分离,并且应当理解,所描述的程序组件和系统通常可以集成在单个软件产品或打包成多个软件产品。
已经描述了主题的特定实施例。其他实施例在所附权利要求的范围内。例如,权利要求中记载的动作可以以不同的顺序执行并且仍然实现期望的结果。作为一个示例,附图中描绘的处理不一定需要所示的特定顺序或连续顺序来实现期望的结果。在某些情况下,多任务和并行处理可能是有利的。

Claims (14)

1.一种包括多个并行处理单元的并行处理设备,其特征在于,所述并行处理设备被配置为执行使所述并行处理设备进行操作的指令,所述操作包括:
接收进行多值归约的请求,以从存储在所述多个并行处理单元的M个初始寄存器空间中的初始值计算M个最终归约值,其中,所述M个初始寄存器空间中的每一个都存储有N个初始值,所述N个初始值要归约成所述M个最终归约值的相应最终归约值;
由所述并行处理单元串行地进行多个初始部分归约,每个初始部分归约对所述M个初始寄存器空间中的不同的相应寄存器空间中的数据进行操作,其中,每个初始部分归约将存储有助于所述M个最终归约值的数据的寄存器的数量减半,并且在进行多个初始部分归约之后,存储有助于所述M个最终归约值的数据的寄存器的当前数量j小于或等于由所述并行处理单元并行执行的线程的数量N;
一个或多个并行处理单元中的每一个将由一个或多个初始部分归约计算出的相应值从一个寄存器移动到另一个寄存器,以便将从所述多个初始部分归约计算出的有助于所述M个最终归约值的所有值存储在相同第一寄存器空间中;以及
由所述并行处理单元对存储在所述第一寄存器空间中的值并行进行多个后续归约,以计算所述M个最终归约值,其中所述M个最终归约值中的每一个都是对存储在所述M个初始寄存器空间中的相应数据的相应归约,
串行地进行所述多个初始部分归约包括:由每个并行处理单元进行向下洗牌操作,之后进行向上洗牌操作,反之亦然。
2.如权利要求1所述的并行处理设备,其特征在于,所述并行处理设备为图形处理单元。
3.如权利要求1所述的并行处理设备,其特征在于,这些操作还包括将所述M个最终归约值中的一个或多个移动到相同并行处理单元的相应寄存器中。
4.如权利要求1所述的并行处理设备,其特征在于,每个初始部分归约包括一个或多个迭代,并且所述一个或多个迭代中的每个迭代将存储有助于所述M个最终归约值之一的数据的寄存器的数量减半。
5.如权利要求1所述的并行处理设备,其特征在于,移动由一个或多个初始部分归约计算的值包括将由每个相应的初始部分归约计算的有助于所述M个最终归约值之一的值移动到相同寄存器空间中的不同的相应寄存器分区中。
6.如权利要求5所述的并行处理设备,其特征在于,每个寄存器分区是相同寄存器空间中的寄存器的互斥子集。
7.一种由并行处理设备的多个并行处理单元进行并行M值归约的方法,其特征在于,所述方法包括:
接收进行多值归约的请求,以从存储在所述多个并行处理单元的M个初始寄存器空间中的初始值计算M个最终归约值,其中,所述M个初始寄存器空间中的每一个都存储有N个初始值,所述N个初始值要归约成所述M个最终归约值的相应最终归约值;
由所述并行处理单元串行地进行多个初始部分归约,每个初始部分归约对所述M个初始寄存器空间中的不同的相应寄存器空间中的数据进行操作,其中,每个初始部分归约将存储有助于所述M个最终归约值的数据的寄存器的数量减半,并且在进行多个初始部分归约之后,存储有助于所述M个最终归约值的数据的寄存器的当前数量j小于或等于由所述并行处理单元并行执行的线程的数量N;
一个或多个并行处理单元中的每一个将由一个或多个初始部分归约计算出的相应值从一个寄存器移动到另一个寄存器,以便将从所述多个初始部分归约计算出的有助于所述M个最终归约值的所有值存储在相同第一寄存器空间中;以及
由所述并行处理单元对存储在所述第一寄存器空间中的值并行进行多个后续归约,以计算所述M个最终归约值,其中所述M个最终归约值中的每一个都是对存储在所述M个初始寄存器空间中的相应数据的相应归约,
串行地进行所述多个初始部分归约包括:由每个并行处理单元进行向下洗牌操作,之后进行向上洗牌操作,反之亦然。
8.如权利要求7所述的方法,其特征在于,所述并行处理设备为图形处理单元。
9.如权利要求7所述的方法,其特征在于,还包括将所述M个最终归约值中的一个或多个移动到相同并行处理单元的相应寄存器中。
10.如权利要求7所述的方法,其特征在于,每个初始部分归约包括一个或多个迭代,并且所述一个或多个迭代中的每个迭代将存储有助于所述M个最终归约值之一的数据的寄存器的数量减半。
11.如权利要求7所述的方法,其特征在于,移动由一个或多个初始部分归约计算的值包括将由每个相应的初始部分归约计算的有助于所述M个最终归约值之一的值移动到相同寄存器空间中的不同的相应寄存器分区中。
12.如权利要求11所述的方法,其特征在于,每个寄存器分区是相同寄存器空间中的寄存器的互斥子集。
13.编码有程序指令的一种或多种非暂时性计算机存储介质,其特征在于,所述程序指令在被包括多个并行处理单元的并行处理设备执行时,使得所述并行处理设备进行操作,所述操作包括:
接收进行多值归约的请求,以从存储在所述多个并行处理单元的M个初始寄存器空间中的初始值计算M个最终归约值,其中,所述M个初始寄存器空间中的每一个都存储有N个初始值,所述N个初始值要归约成所述M个最终归约值的相应最终归约值;
由所述并行处理单元串行地进行多个初始部分归约,每个初始部分归约对所述M个初始寄存器空间中的不同的相应寄存器空间中的数据进行操作,其中,每个初始部分归约将存储有助于所述M个最终归约值的数据的寄存器的数量减半,并且在进行多个初始部分归约之后,存储有助于所述M个最终归约值的数据的寄存器的当前数量j小于或等于由所述并行处理单元并行执行的线程的数量N;
一个或多个并行处理单元中的每一个将由一个或多个初始部分归约计算出的相应值从一个寄存器移动到另一个寄存器,以便将从所述多个初始部分归约计算出的有助于所述M个最终归约值的所有值存储在相同第一寄存器空间中;以及
由所述并行处理单元对存储在所述第一寄存器空间中的值并行进行多个后续归约,以计算所述M个最终归约值,其中所述M个最终归约值中的每一个都是对存储在所述M个初始寄存器空间中的相应数据的相应归约,
串行地进行所述多个初始部分归约包括:由每个并行处理单元进行向下洗牌操作,之后进行向上洗牌操作,反之亦然。
14.如权利要求13所述的一种或多种非暂时性计算机存储介质,其特征在于,所述程序指令可由图形处理单元执行。
CN201880034679.2A 2017-12-12 2018-12-06 并行处理设备和进行并行多值归约的方法 Active CN111448545B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/839,637 US10133573B1 (en) 2017-12-12 2017-12-12 Multivalue reductions using serial initial reductions in multiple register spaces and parallel subsequent reductions in a single register space
US15/839,637 2017-12-12
PCT/US2018/064232 WO2019118271A1 (en) 2017-12-12 2018-12-06 Parallel multivalue reductions

Publications (2)

Publication Number Publication Date
CN111448545A CN111448545A (zh) 2020-07-24
CN111448545B true CN111448545B (zh) 2021-10-15

Family

ID=64176678

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201880034679.2A Active CN111448545B (zh) 2017-12-12 2018-12-06 并行处理设备和进行并行多值归约的方法

Country Status (4)

Country Link
US (2) US10133573B1 (zh)
EP (1) EP3580652A1 (zh)
CN (1) CN111448545B (zh)
WO (1) WO2019118271A1 (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7010129B2 (ja) * 2018-04-19 2022-01-26 富士通株式会社 プロセッサ及び情報処理装置
GB2574817B (en) * 2018-06-18 2021-01-06 Advanced Risc Mach Ltd Data processing systems
CN117896067A (zh) * 2024-03-13 2024-04-16 杭州金智塔科技有限公司 适用于国密sm2算法的并行模约减方法及装置

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2009120981A2 (en) * 2008-03-28 2009-10-01 Intel Corporation Vector instructions to enable efficient synchronization and parallel reduction operations
US20160124715A1 (en) * 2014-10-30 2016-05-05 Arm Limited Multi-element comparison and multi-element addition

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7861060B1 (en) 2005-12-15 2010-12-28 Nvidia Corporation Parallel data processing systems and methods using cooperative thread arrays and thread identifier values to determine processing behavior
US8539204B2 (en) 2009-09-25 2013-09-17 Nvidia Corporation Cooperative thread array reduction and scan operations
JP5846005B2 (ja) * 2012-03-29 2016-01-20 富士通株式会社 プログラム、コード生成方法および情報処理装置
JP6020091B2 (ja) 2012-11-27 2016-11-02 富士通株式会社 演算処理装置の制御プログラム、演算処理装置の制御方法および演算処理装置

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2009120981A2 (en) * 2008-03-28 2009-10-01 Intel Corporation Vector instructions to enable efficient synchronization and parallel reduction operations
US20160124715A1 (en) * 2014-10-30 2016-05-05 Arm Limited Multi-element comparison and multi-element addition

Also Published As

Publication number Publication date
EP3580652A1 (en) 2019-12-18
WO2019118271A9 (en) 2019-08-29
US11163567B2 (en) 2021-11-02
WO2019118271A1 (en) 2019-06-20
US10133573B1 (en) 2018-11-20
CN111448545A (zh) 2020-07-24
US20190179637A1 (en) 2019-06-13

Similar Documents

Publication Publication Date Title
CN110268422B (zh) 利用强化学习的设备布局优化
US11227216B2 (en) Batch processing in a neural network processor
CN108885571B (zh) 分批处理机器学习模型的输入
US20210295161A1 (en) Training neural networks represented as computational graphs
CN111406267A (zh) 使用性能预测神经网络的神经架构搜索
WO2017201507A1 (en) Memory-efficient backpropagation through time
CN111448545B (zh) 并行处理设备和进行并行多值归约的方法
US11972341B2 (en) Parallel processing for signal generation neural networks
CN114286985A (zh) 用于预测内核调谐参数的方法和设备
CN114430838A (zh) 使用神经网络加速器来处理连续输入
US20220343146A1 (en) Method and system for temporal graph neural network acceleration
CN111194451B (zh) 门控激活单元运算的并行执行
US20220343145A1 (en) Method and system for graph neural network acceleration
US11362670B2 (en) ReLU compression to reduce GPU memory
US20230140239A1 (en) Method and apparatus with data loading
WO2023059336A1 (en) Neural network architecture for implementing group convolutions
KR20240063137A (ko) 하드웨어 가속기 최적화형 그룹 컨볼루션 기반 신경망 모델
CN118043818A (zh) 用于处理来自多个模态的网络指标的基于自注意力的神经网络
WO2023177846A1 (en) Systems and methods for optimizing quantum circuit simulation using graphics processing units

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant