CN117472840B - 多核系统以及用于多核系统的数据处理的方法 - Google Patents
多核系统以及用于多核系统的数据处理的方法 Download PDFInfo
- Publication number
- CN117472840B CN117472840B CN202311832446.6A CN202311832446A CN117472840B CN 117472840 B CN117472840 B CN 117472840B CN 202311832446 A CN202311832446 A CN 202311832446A CN 117472840 B CN117472840 B CN 117472840B
- Authority
- CN
- China
- Prior art keywords
- data
- core
- data segment
- cores
- identifier
- 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
Links
- 238000012545 processing Methods 0.000 title claims abstract description 150
- 238000000034 method Methods 0.000 title claims abstract description 145
- 238000011144 upstream manufacturing Methods 0.000 claims abstract description 99
- 239000000872 buffer Substances 0.000 claims description 122
- 230000008569 process Effects 0.000 claims description 80
- 238000013507 mapping Methods 0.000 claims description 21
- 239000012634 fragment Substances 0.000 claims description 12
- 230000004044 response Effects 0.000 claims description 8
- 230000026676 system process Effects 0.000 claims 1
- 238000007781 pre-processing Methods 0.000 description 18
- 238000010586 diagram Methods 0.000 description 11
- 238000004891 communication Methods 0.000 description 9
- 238000005520 cutting process Methods 0.000 description 6
- 238000003672 processing method Methods 0.000 description 5
- 230000009466 transformation Effects 0.000 description 4
- 238000000844 transformation Methods 0.000 description 4
- 230000006978 adaptation Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 235000019580 granularity Nutrition 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
- 238000009966 trimming Methods 0.000 description 1
- 238000004148 unit process Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
- G06F15/163—Interprocessor communication
Abstract
本公开提出了多核系统以及用于多核系统的数据处理的方法。多核系统包括多个核和存储器,所述多个核中的每个核的上游流水线被配置用于:并行执行处理任务以产生相应的数据段,其中每个数据段被基于处理任务的轮次和产生相应数据段的核的核编号赋予唯一的数据段标识符;并将其产生的数据段分配给多个核的下游流水线;所述多个核中的每个核的下游流水线被配置用于:根据数据段标识符有序地处理所分配的来自多个核的上游流水线的数据段的数据。
Description
技术领域
本公开涉及数据处理的领域。具体地,涉及多核系统以及用于多核系统的数据处理的方法。
背景技术
在多核系统的数据调度处理方面,随着核数量的不断增加,实现调度所需要的逻辑深度相应增加,难以在一个时钟周期内完成高频率需求下的多个核的调度。通常采用的基于计数的调度方法需要N-1个时钟周期才能完成对N个核的调度任务。这在要求高频率处理的场景中会引起不容忽视的延时问题。
发明内容
针对上述问题,本公开提出了多核系统以及用于多核系统的数据处理方法。
在一个方面中,本公开提出了一种用于数据处理的多核系统。所述多核系统包括多个核和存储器,所述多个核中的每个核的上游流水线被配置用于:并行执行处理任务以产生相应的数据段,其中每个数据段被基于处理任务的轮次和产生相应数据段的核的核编号赋予唯一的数据段标识符;并将其产生的数据段分配给多个核的下游流水线;所述多个核中的每个核的下游流水线被配置用于:根据数据段标识符有序地处理所分配的来自多个核的上游流水线的数据段的数据。
在另一个方面中,本公开提出了一种用于多核系统的数据处理的方法,所述多核系统的多个核的上游流水线并行处理任务以产生相应的数据段,其中每个数据段具有唯一的数据段标识符,并且每个核的上游流水线将其产生的数据段分配给多个核的下游流水线,对于所述多个核中的一个核的下游流水线:所述方法包括:根据数据段标识符有序地处理所分配的来自多个核的上游流水线的数据段的数据,其中所述多个核中的每个核具有唯一的核编号,并且所述数据段标识符与产生相应数据段的核的核编号形成固定映射。
在又一方面中,本公开还提出了一种多核系统,所述多核系统包括各自具有唯一核编号的N个核,所述N个核中的每个核的上游流水线并行处理任务以产生相应的数据段,其中每个数据段具有唯一的数据段标识符,并且所述数据段标识符与产生相应数据段的核的核编号形成固定映射,所述N个核中的每个核的下游流水线包括:处理单元;N个标识符缓冲器,用于存储各个核的当前待处理数据段的数据段标识符;N个地址缓冲器,用于存储各个核的当前待处理数据段所包括的当前待处理数据块的地址;以及统一数据缓冲器,用于存储当前待处理的数据块,其中所述处理单元用于:根据N个标识符缓冲器中存储的数据段标识符确定待处理的目标核的核编号,并根据所述目标核的核编号所对应的地址缓冲器中的地址获取所述当前待处理的数据块,以及将所获取的数据块存储到所述统一数据缓冲器中以对所述数据块进行逐字解码。
本公开还提出一种计算设备,包括本公开记载的多核系统。
本公开还提出一种其上存储有指令的机器可读介质,所述指令当被机器执行时使得所述机器执行本公开记载的数据处理的方法。
本公开提出的多核系统用于实现上游多核处理和下游多核处理,并且仅需要极少额外增加的硬件资源。在用于多核系统的数据处理方法中,上游流水线采用了一种高效的编码策略,从而减少了下游流水线在数据调度时所需的逻辑深度开销。通过这种方法,下游流水线能够有序地实现对上游流水线产生的数据的高性能且低延时的多核调度和处理,从而提升多核系统在高负载情况下的数据处理能力和整体效率。
本公开内容包括在本发明内容中所阐述的两个、三个或更多特征或元素的任何组合,而无论这样的特征或元素是否被清楚地组合或以其他方式在本文中描述的特定示例实现方式中被记载。
附图说明
现在将参考附图描述本公开的具体示例性实施例。通过阅读以下详细描述连同附图,本公开内容的特征、方面和优点将是显而易见的。在附图中:
图1A示出根据本公开的实施例的多核系统的框图;
图1B示出根据本公开的实施例的多核GPU系统的框图;
图2示出根据本公开的实施例的数据处理的方法的流程图;
图3示出根据本公开的实施例的对上游流水线产生的数据段进行预处理的方法的流程图;
图4示出根据本公开的实施例的上游流水线产生的数据段的示意图;
图5示出根据本公开的实施例的数据段的数据结构的示意图;
图6示出根据本公开的实施例的下游流水线的框图;
图7示出根据本公开的实施例的下游流水线处理数据的流程图;
图8示出根据本公开的实施例的下游流水线处理数据的初始化阶段的流程图;
图9示出根据本公开的实施例的下游流水线处理数据的后续工作流程图;以及
图10示出根据本公开的实施例的包括多核GPU的计算设备的框图。
具体实施方式
现在将在下文中参考附图更充分地描述本公开内容的一些实现方式,在所述附图中示出本公开内容的一些而不是所有实现方式。事实上,本公开内容的各种实现方式可以用许多不同的形式被具体化并且不应当被解释为受限于本文中所阐明的实现方式。相反,提供这些示例实现方式是为了更好地把本公开内容的范围传达给本领域技术人员。
图1A示出根据本公开的实施例的多核系统100。所述多核系统100可以应用于移动端设备中,也可以应用于桌面端设备中。多核系统100包括存储器以及核0、核1、核2至核N-1。每个核都包括上游流水线和下游流水线,并且这两条流水线都与存储器进行数据通信。上游流水线将产生的数据存储到存储器中,而下游流水线从存储器中读取数据并进行进一步处理。各个核中的上游流水线可以用于实现相同的处理,并且各个核的下游流水线可以用于实现相同的进一步处理。存储器可以是各种类型的存储器,例如双倍数据速率(DDR)存储器。所述核可以是GPU核、CPU核或者执行特定任务的任何其他类型的核。所述多个核可以具有完全相同的配置和处理能力,也可以具有不同的配置和处理能力。无论各个核的配置和处理能力是否相同,它们都可以应用本公开中描述的方法。
需要指出的是,虽然没有示出,但是多核系统100还可以包括其他组件,例如处理器。并且,图1A中示出的部件之间的连接和数据流向仅仅是示意性的,并不排除存在其他连接和数据流向。在一个实施例中,同一核或者不同核的上游流水线和下游流水线之间也可以直接进行数据通信。同时,上游流水线也可以从存储器中读取其所需要的数据,而下游流水线同样可以将处理结果存储到存储器中。
在不同的实施例中,多核系统100的核数量可以不同,例如可以是8核、16核、32核或其他不同配置。尽管每个核仅示出包括一条上游流水线和一条下游流水线,但是实际上每个核可以包括多条流水线。每个核所包括的上游流水线和下游流水线是相对概念,并不意味着上游流水线一定处于该核的多条流水线的上游,或者下游流水线一定处于该核的多条流水线的下游。
图1B示出根据本公开的实施例的多核GPU系统101。多核GPU系统101可以应用于移动端设备中,也可以应用于桌面端设备中。多核GPU系统101包括存储器、GPU核0、GPU核1、GPU核2和GPU核3。GPU核中通常包括多条流水线,例如用于处理3D图形的几何变换的几何流水线、将几何图形转换成片段的光栅化流水线、包括片段着色器或像素着色器的片段(或称“片元”)流水线、以及用于处理通用计算任务的计算流水线等。为了便于解释本公开的原理,图1B中的每个GPU核被示出为仅包括几何流水线和片段流水线。然而,GPU核还可以包括其他流水线。在图1B中,几何流水线可以称为上游流水线,而片段流水线可以视作下游流水线。在一个实施例中,几何流水线用作上游流水线,而光栅化流水线用作下游流水线。在另一实施例中,光栅化流水线可以用作上游流水线,而片段流水线用作下游流水线。不同厂商的多核系统的处理架构可能有所不同,多条流水线之间的划分也可能有差别。然而,无论GPU核的流水线如何划分以及上游流水线和下游流水线分别被具体实现为哪条流水线,都不妨碍本公开所提出的数据处理的方法的普遍适用性。
图2示出根据本公开的实施例的数据处理的总方法200。总方法200包括:步骤201,多核系统中的各个核(例如多核系统100的核0至核N-1)的上游流水线并行执行处理任务以产生相应的数据段并将数据段分配给下游流水线。基于执行处理任务的轮次和产生相应数据段的核的核编号给所述数据段赋予唯一的数据段标识符;步骤202,随后,下游流水线根据数据段标识符有序地处理所需数据段的数据。根据本公开的数据处理方法,上游流水线产生数据段或者在对产生的数据段进行预处理时能够给每个数据段赋予唯一的数据段标识符,该数据段标识符与产生该数据段的核的核编号形成固定映射。每个核的下游流水线在确定各个核的调度顺序时,不依赖时钟周期,而可以根据每个数据段的数据段标识符有序地获取并处理各个核产生的数据段的数据,因此能够降低多核调度处理的延时。
在一个实施例中,多核系统的全部核的上游流水线并行执行处理任务,并各自产生相应的数据段,从而实现上游多核处理。在另一个实施例中,可以是多核系统的部分核(例如,多核系统100的核1至核N-1)的上游流水线并行执行处理任务并产生相应的数据段。多个核的上游流水线可以并行地平均执行处理任务。也可以给不同核的上游流水线不均匀地分配处理任务。例如,在多个核具有不同的配置以及相应的不同处理能力的情况下,处理能力强的核的上游流水线可以被分配较多的处理任务,而处理能力弱的核的上游流水线可以被分配较少的处理任务。多核系统100的处理器或其他组件(未示出)可以控制多个核中的全部或者其中的部分核来并行执行处理任务。多核系统100的处理器也可以控制给每个核的上游流水线的处理任务的分配。在一个实施例中,处理器可以基于分配策略来给多个核中全部核或者其中的部分核的上游流水线分配处理任务,例如以使得每个核的处理负荷是均衡的,或者每个核的处理负荷与其处理能力是相匹配的。
多个核中的每个核将产生的数据段分配给多个核的下游流水线。换言之,每个核的下游流水线要接受多个核的上游流水线产生并分配给其的数据段。每个核的下游流水线所分配的要进一步处理的数据段不重叠,并且各个核的下游流水线共同实现对所有核的上游流水线产生的所有数据段的数据的进一步处理。
多核系统的多个核中的每个核的下游流水线可以并行执行步骤202中的数据处理操作以共同完成对各个核的上游流水线产生的所有数据段的所有数据的进一步处理。其中,每个核的下游流水线从存储器中获取上游流水线所产生的其所需的数据并各自进行进一步的处理,从而实现下游多核处理。其中,所述所需的数据可以指每个核的上游流水线在产生数据时指定由/分配给每个核的下游流水线处理的数据。例如,核0的上游流水线执行处理任务并产生的多个数据段,其中的部分数据段分配给核0自身的下游流水线、部分数据段分配给核1的下游流水线,另外的数据段分配给核2的下游流水线等等。各个核的上游流水线在并行执行处理任务时,可以基于负荷均衡的原则或者负荷与各个下游流水线的处理能力匹配的原则来向各个核的下游流水线分配数据。相应地,各个核中的任一核的下游流水线从存储器中获取各个核的上游流水线产生并且分配给该核的数据,并执行进一步的处理。
在另一实施例中,也可以是多核系统的部分核的下游流水线执行步骤202中数据处理操作。例如,核1和核2的下游流水线并行地从存储器中获取核0至核N-1产生并分别分配给核1和核2的相应数据并进行进一步的处理。多核系统的各个核的下游流水线基于其所接收到的、所分配的处理任务来并行执行步骤202的数据处理。在另一个实施例中,多核系统的处理器可以控制多核系统的全部核/部分核的下游流水线来执行步骤202,包括它/它们获取哪些核的上游流水线产生的哪些数据以及进行何种处理。无论如何,都不妨碍本公开描述的用于下游流水线的数据获取和处理的方法的普遍适用性。
图3示出根据本公开的实施例的对上游流水线产生的数据段进行预处理的方法300。图3所示的方法可以包括在图2的步骤201中。在上游流水线并行执行处理任务并产生相应的数据段之后,执行步骤301以将所产生的数据段分别存储到存储器中。其中,每个数据段被基于处理任务的轮次和产生相应数据段的核的顺序标记唯一的数据段标识符。在一个实施例中,核的顺序可以指核的编号。在一个实施例中,每个数据段的数据段标识符与产生相应数据段的核的核编号形成固定映射。在一个实施例中,固定映射被表示为:
ID = (n-1)*N+CORE_ID (1)
其中,ID表示数据段标识符,CORE_ID表示产生具有所述数据段标识符的数据段的核的核编号,N为核的总数,n表示所述多个核的上游流水线第n轮并行处理任务产生相应的数据段。需要指出的是,公式(1)中所示出的数据段标识符与核编号的固定映射关系仅仅是示例性的。这种映射关系非常简单,可以实现快速映射和解映射,降低多核调度处理的延时。在其他实施例中,数据段标识符与核编号可以具有其他固定映射关系。
图4示出上游流水线产生的数据段的示意图。具体地,图4示出各个核所产生的数据段和核编号以及任务的轮次的关系。例如,在各个核的上游流水线并行执行第一轮(n为1)处理任务时,核0产生的数据段的数据段标识符为0,核1产生的数据段的数据段标识符为1,核2产生的数据段的数据段标识符为2,核3产生的数据段的数据段标识符为3。在各个核的上游流水线并行执行第二轮(n为2)处理任务时,核0产生的数据段的数据段标识符为4,核1产生的数据段的数据段标识符为5,核2产生的数据段的数据段标识符为6,核3产生的数据段的数据段标识符为7,依此类推。
基于核的类型和处理任务的类型,处理任务的轮次可以有不同的定义。例如,对于GPU核的几何流水线,第一轮处理任务可以指对第一图元或图块执行几何变换,第二轮处理任务可以指对第二图元或图块执行几何变换。图4中仅作为示例示出了四个核并行执行四轮处理任务产生了相应的数据段。在其他实施例中,可以有更多的核并行执行更多轮的处理任务。数据段的大小可以取决于所执行的任务量的大小。同一核每轮处理任务所产生的数据段的大小可以不同。不同核在同一轮处理任务中产生的不同数据段的大小也可以不同。
在一些实施例中,对上游流水线产生的数据段进行预处理还可以包括:从所存储的数据段中剪裁掉无效数据段及其数据段标识符,如图3步骤302所示。换言之,在剪裁过程中,无效数据段连同其所赋予的唯一数据段标识符一同被剪裁掉,而剩余的其他有效数据段的数据段标识符不变。在一个实施例中,无效数据段的剪裁可以发生在上游流水线向下游流水线分配数据段的过程中。具体地,每个核的上游流水线产生的所有数据段中的一些对于特定核的下游流水线而言被保留在当前的存储位置,而另一些被剪裁并分别被粘贴到另外的存储位置以用于另外的一个或多个核的下游流水线进一步处理。因此,某一核的上游流水线产生的所有数据段中的部分数据段对于特定核的下游流水线而言可以是无效数据段并被从该特定核的待处理的数据段中剪裁掉。所述无效数据段中的数据都是无效数据,也不需要由所述特定核的下游流水线进一步处理。对于一个核的下游流水线是无效的数据段,对于另一个核的下游流水线可以是有效数据段。
再次参考图4,图4中阴影数据段是对于特定(或某一)核的下游流水线而言无效的数据段,例如数据段0、数据段4、数据段8、数据段12、数据段5、数据段9等。这些无效数据段对于其他核的下游流水线而言可以是有效数据段。在执行步骤302的剪裁操作时,上述无效数据段都被从存储器当前存储位置中剪裁掉。剩余的有效数据段为数据段1、数据段13、数据段10等。所述剩余的有效数据段的标识符不变,依然分别为“1”、“13”、“10”等。从当前存储位置被剪裁掉的无效数据可以被粘贴到其他存储位置以用于其他核的下游流水线进一步处理。
在一些实施例中,在剪裁掉无效数据段之后,还可以执行步骤303,按照固定大小的数据块切割每个有效数据段,使得每个数据段分布在一个或多个数据块中。换言之,经过切割之后,每个有效数据段包括一个或多个数据块。每个数据块的大小可以是8个字、16个字、32个字或者其他大小。每个字可以由16个位、32个位等组成。在对数据段进行切割的过程中,可以插入地址。具体地,按照如下方式对数据段进行切割和插入地址:响应于切割得到的数据块的结束字符是数据,将所述数据连同其后的字符存储到下一个数据块,并在所述结束字符处插入用于指示所述下一个数据块的存储位置的地址;以及响应于切割得到的数据块包括数据段标识符,将所述数据段标识符后面的字符存储到下一个数据块,并在所述数据标识符之后插入用于指示所述下一个数据块的存储位置的地址,然而如果前一数据块仅空余一个字,则该字可以存放该核的下一有效数据段的首数据块的地址(例如图5所示的ID_14_Ad),并将下一数据段的数据段标识符(例如图5所示的ID_14)存储到该地址索引的数据块的首个字。另外,在对数据段进行切割的过程中,还可以插入其他字符。在一个实施例中,可以在每个核的最后有效数据之后插入“END”字符。在另一实施例中,也可以在每个核的有效数据之前插入“START”字符或其他字符。
图3中的用于对上游流水线产生的数据段进行预处理的方法是示例性的。在另外的实施例中,也可以按照如下流程进行预处理:各个核的上游流水线并行执行处理任务并产生相应的数据段;基于处理任务的轮次和产生相应数据段的核的核编号给每个数据段标记唯一的数据段标识符;从所产生的数据段中剪裁掉仅仅包括无效数据的无效数据段;按照固定大小的数据块将剩余有效数据段存储到存储器中。在存储的过程中,可以基于与上述按照固定大小的数据块对数据段进行切割的类似的方法,而按照固定大小的数据块将各个有效数据段(包括其数据段标识符)存储到存储器中,并类似地插入地址。在其他实施例中,还可以存在其他对上游流水线产生的数据段进行预处理的方法。
需要指出的是,图3所示的对上游流水线产生的数据进行预处理的过程是示例性的,还存在其他预处理方法。图4所示的数据段的示意图仅仅是四核系统的上游流水线执行四轮处理任务产生的、分配给某个核的下游流水线进一步处理的数据段的示例。多核系统的其他核的下游流水线的所需执行进一步处理的数据段可以具有类似的形式,然而各个核的下游流水线分别处理不同的数据段。
上文结合图3和图4解释了每个核的上游流水线产生数据段、对数据段进行分配或预处理的过程。经过上述过程,上游产生和预处理后的数据段分布在存储器中以用于各个核的下游流水线进一步处理。任一核的下游流水线在被分配要进一步处理的数据段的同时还被通知或分配了每个核分配给它的所有数据段中的首个数据段的数据的头地址。由于上游流水线在产生或预处理数据段时给每个数据段赋予了唯一的数据段标识符,每个核可以按照数据段以及其数据段标识符向下游流水线分配进一步的处理任务。例如,核1将其产生的数据段1分配给核0的下游流水线,将数据段5分配给核1的下游流水线,将数据段9分配给核2的下游流水线,而将数据段13分配给核3的下游流水线。因此,数据段标识符的赋予至少可以便于各个核的上游流水线向下游流水线分配处理任务。然而,取决于分配策略,每个核的上游流水线也可以按照其他粒度(例如,一个或多个数据块、多个数据段等)向各个核的下游流水线分配进一步的处理任务。
图5示出数据段的数据结构的示例。图5中所示的数据段的数据结构与图4中所示的数据段相对应,然而仅仅是图4所示的数据段的一种具体的数据结构的示例。图4所示的数据段还可以具有其他的数据结构。由于核0产生的数据段0、数据段4、数据段8和数据段12都是对于执行图4的数据段的进一步处理的特定/某个核(例如核1)的下游流水线而言是无效数据段,并且在步骤302中被剪裁掉。因此,图5中所示的核0的数据为空。
在图5所示的数据结构的示例中,核1所产生的对于特定/某个(例如核1)的下游流水线而言有效的数据段为数据段1和数据段13。图5中所示的核1的数据段1分布在第一个数据块中。核1的首个有效数据段的第一个数据块的首个字是“ID_1”,其表示核1的首个有效数据段是数据段1。“ID_1”之后的数据是数据段1的数据。核1的所述第一个数据块中还包括字符“ID_13”以及“ID_13_Ad”,分别用于表示核1的下一个有效数据段是数据段13,以及数据段13的首个数据块在存储器中的存储位置。核1的第二个数据块包括数据段13的部分数据以及字符“Address”。其中,字符“Address”紧跟在数据之后,用于表示数据段13的另外的数据所在的数据块的地址。换言之,数据段13分布在两个数据块中,数据段13的前一数据块的末尾字符“Address”指示数据段13的后一数据块在存储器中的存储位置。核1的第三个数据块包括数据段13的另外的数据以及在数据之后的字符“END”。其中,字符“END”用于表示核1的全部有效数据结束。
图5所示的数据段的数据结构主要存在以下三种形式:(1)数据+地址,例如核1的第二个数据块的末尾两个字——DATA+Address或者核2的第一个数据块的末尾两个字——DATA+ID_14_Ad,其中Address指示数据段13的后一数据块的地址,ID_14_Ad用于指示数据段14的首个数据块的地址;(2)数据段标识符+数据,例如ID_1+DATA和ID_14+DATA分别对应于核1的首个有效数据段的首两个字以及核2的第二个有效数据段的首两个字;以及(3)数据段标识符+地址,例如ID_7+ID_7_Ad,其中数据段标识符用于表示核3的下一有效数据段的数据段标识符,地址用于指示该下一有效数据段的首个数据块在存储器中的存储位置。数据段标识符用于指示多个核产生的数据段的调度顺序,地址用于指示要获取的数据在存储器中的存储位置。下游流水线可以判断解码到的字的类型(例如是数据还是数据段标识符或其他),并根据数据段标识符来有序地获取并处理其所分配的来自各个核的数据段的数据。此外,基于数据段标识符可以明确获知产生相应数据段的核的核编号以及其前后的邻居数据段,从而便于数据段的另外的处理。在一个实施例中,例如可以根据数据段标识符获取当前数据段的邻居数据段的相应数据以用于验证数据的准确性和完整性。
图5中所示的数据段的数据结构是示意性的以用于说明本公开的原理。在其他实施例中,数据段还可以具有其他数据结构的形式和/或内容。例如,数据段标识符或地址可以位于数据块的其他位置。另外,虽然图5中的每个数据块被示出为均具有8个字,然而每个数据块也可以均具有16个字、32个字等。在一个实施例中,图5中的数据块中所包括的字符也可以用其他字符来代替。例如,可以用在有效数据之前插入字符“START”代替在有效数据之后插入字符“END”。
上文描述了一种对上游产生的数据进行预处理的方法。其中涉及到的编码逻辑实现起来非常简单,容易适配到任何多核系统中。其中,对上游流水线产生的数据段进行简单的编码和预处理使得:每个数据段具有唯一的数据段标识符,该数据段标识符与产生相应数据段的核的核编号形成固定映射;每个数据段分布在一个或多个数据块中;并且同一核的前一有效数据段的末尾数据块中插入该核的后一有效数据段的首数据块的存储地址和/或该后一数据段的数据段标识符;而在一个数据段包括多个数据块的情况,前一数据块中插入后一数据块的地址;在前一数据块的结尾只空余一个字来存储地址或数据段标识符之一的情况,将地址存储到该字并且将数据段标识符连同其后的数据存储到该地址索引的位置。上文提及的编码可以指按照固定映射给每个数据段赋予数据段标识符的过程。上文提及的预处理可以指上文描述的无效数据段的剪裁和切割过程等。这种编码和预处理过程都是在上游完成的操作。为了描述的方便,它们都可以包括到上游流水线执行处理任务并产生相应数据段的步骤中。这种编码和预处理过程是新颖的、独特的,其中利用非常简单的编码规则给每个数据段赋予了唯一的数据段标识符并将其插入到了数据段的数据块的相应位置中。要指出的是,上文描述的编码规则和预处理操作仅仅用作示例以详细说明编码和预处理的步骤。在另一个实施例中,还可以存在其他的编码规则和预处理步骤。
图6详细示出了下游流水线600的框图。多核系统100的任一核的下游流水线都可以被配置具有下游流水线600所示的结构和部件。例如,下游流水线600可以是多核系统100的核1的下游流水线。下游流水线600包括统一数据缓冲器601、处理单元602、标识符缓冲器0、标识符缓冲器1、标识符缓冲器2至标识符缓冲器N-1。下游流水线还包括地址缓冲器0、地址缓冲器1、地址缓冲器2至地址缓冲器N-1。其中,N表示多核系统所包括的核的数目。下游流水线600还可以包括未示出的其他部件。
其中,下游流水线600中的处理单元602可以用于执行本公开所记载的与下游流水线相关的数据获取和处理操作。统一数据缓冲器601用于存储待解码的数据块。统一数据缓冲器601的存储空间的大小与一个数据块的大小相同。例如,如果一个数据块的大小是8个字,则统一数据缓冲器601的大小可以是8个字。
标识符缓冲器0至标识符缓冲器N-1分别与核0至核N-1对应,并分别用于存储核0至核N-1的按顺序当前待处理的数据段的数据段标识符。例如,核0与标识符缓冲器0相对应,并用于存储核0的按顺序当前待处理的数据段的数据段标识符。每个标识符缓冲器的存储空间的大小可以为数据段标识符的大小。例如,如果每个数据段的数据段标识符的大小是一个字,则标识符缓冲器的大小可以是一个字。
地址缓冲器0至地址缓冲器N-1分别与核0至核N-1对应,并分别用于存储核0至核N-1的按顺序当前待处理数据段的数据在存储器中的存储位置。例如,地址缓冲器0与核0相对应,并且用于存储核0的按顺序当前待处理的数据段的数据在存储器中的存储位置。每个地址标识符的存储空间大小可以与地址的大小相同。例如,如果在数据块中地址占据的大小是一个字,则地址缓冲器的大小可以是一个字。需要指出的是,虽然图6中将各个缓冲器示出为分离的,然而它们也可以是某一存储器中分离的或连接的存储单元。
图7示出根据本公开的实施例的下游流水线处理数据的方法700。图7所示的方法700用于说明根据本公开的下游流水线处理数据的原理。方法700可以包括在图2的步骤202中。每个核的上游流水线并行执行处理任务并产生相应的数据段,将数据段分配给多个核的下游流水线。具体地,所有核的上游流水线产生的数据段可以都被分配给各个核的下游流水线,并且每个核的下游流水线所分配的数据段不重叠。每个核的下游流水线(例如,下游流水线600)可以根据数据段标识符有序地处理所分配的来自多个核的多个数据段的数据。在一个实施例中,每个核的下游流水线或其处理单元可以并行执行方法700的步骤以从存储器中获取各自所分配的数据段的数据,并进而实现对所有核的上游流水线产生的数据段的数据的进一步处理。在一个实施例中,每个核的下游流水线根据数据段标识符有序地处理所分配的、来自有效核的数据段的数据,所述有效核为具有待处理数据段的数据需要被所述下游流水线处理的核。
具体地,在步骤701中,下游流水线或其处理单元比较各个核的当前待处理数据段的数据段标识符以确定最小数据段标识符。在一个实施例中,每个核对应的标识符缓冲器用于存储相应核当前待处理数据段的数据段标识符。在一个实施例中,步骤701可以包括:将各个核的当前待处理的有效数据段的数据段标识符存储在与相应核对应的标识符缓冲器中;以及比较各个核对应的标识符缓冲器中的数据段标识符以确定最小数据段标识符。各个核的当前待处理数据段是指分配给执行方法700的特定/某个核的下游流水线的、各个核的所有有效数据段中尚未被处理并且当前要处理的数据段。
在初始化过程中,将所分配的每个核的首个有效数据段的数据段标识符存储在与相应核对应的标识符缓冲器中。参考图4,在初始化情况下,核1的当前待处理的数据段是数据段1,核2的当前待处理的数据段是数据段10,核3的当前待处理的数据段是数据段3。因此,下游流水线的标识符缓冲器1中的数据段标识符为“1”,标识符缓冲器2中的数据段标识符为“10”,并且标识符缓冲器3中的数据段标识符为“3”。比较各个核对应的标识符缓冲器中的标识符,并且确定核1对应的标识符缓冲器具有最小数据段标识符“1”。
在步骤702中,下游流水线或其处理单元将最小数据段标识符对应的数据段的数据存储到统一数据缓冲器中。在一个实施例中,步骤702可以包括:根据解映射规则确定最小数据段标识符所对应的核编号,其中固定映射指数据段标识符与产生相应数据段的核的核编号之间的固定映射关系,如公式(1)所记载的;从所述核编号所对应的地址缓冲器中的地址获取数据块;以及将所获取的数据块存储在统一数据缓冲器中。如果数据段标识符和产生相应数据段的核的核编号符合如公式(1)所述的固定映射的编码规则,则相应的解映射规则可以表示为:
CORE_ID=ID[log2(N) -1:0] (2)
其中,[log2(N) -1:0]表示取数据段标识符的最后log2(N)位。在四核系统的情况下,log2(N)=2。因此,数据段标识符的最后两位表示产生相应数据段的核的核编号。在一个字由16个位组成的情况下,最小数据段标识符“1”的16位二进制表示为“0000000000000001”。该16位二进制表示的最后两位是“01”,用十进制表示是“1”。因此,最小数据段标识符“1”对应的核编号是“1”。在一个字由16个位组成,并且最小数据段标识符为“11”的情况下,根据如下来确定对应的核的核编号:首先数据段标识符“11”的16位二进制表示为“0000000000001011”;该16位二进制表示的最后两位是“11”;二进制“11”对应的十进制表示为“3”。因此,数据段标识符“11”对应的核的核编号为“3”。换言之,数据段11是由核3产生的。
上述根据公式(2)来确定数据段标识符所对应的核的核编号的过程可以称为解映射过程。上文以四核系统为例解释了解映射的过程。对于八核系统、十六核系统等,上述解映射规则同样适用。可见,在解映射获得核编号的过程中,对于确定的核数目,核编号仅仅与数据段标识符相关,而与产生相应数据段的处理任务的执行轮次无关。例如,对于核1任何轮次产生的数据段的数据段标识符“1”、“5”、“9”和“13”,通过上述解映射规则得到的核编号都是“1”。可见,本公开中提出的对数据段标识符进行解映射的过程极其简单,在获取到数据块时,仅仅根据数据段标识符的二进制表示的最后两位、或者最后三位等,便可以确定其所对应的核编号。公式2所示的解码规则与公式1所示的固定映射关系是对应的。在数据段标识符与核编号存在其他固定映射关系的情况下,可以相应地根据其他解映射规则获得与数据段标识符相对应的核编号。
每个核对应的地址缓冲器中的地址是每个核按顺序当前待处理的数据段的数据在存储器中的存储位置。例如,在多核系统100的核1的下游流水线执行方法700的情况下,核1的下游流水线中的地址缓冲器0用于存储核0的上游流水线产生的分配给核1的下游流水线的按顺序当前待处理的数据段的存储位置,核1的下游流水线中的地址缓冲器1用于存储核1的上游流水线产生的分配给核1的下游流水线的按顺序当前待处理的数据段的存储位置,依此类推。因此,在确定最小数据段标识符所对应的核编号之后,从所述核编号所对应的地址缓冲器中的地址获取数据块,并将所获取的数据块存储在统一数据缓冲器中。例如,在最小数据段标识符为“1”的情况下,确定相应的核编号为“1”,则从核1所对应的地址缓冲器1中获得地址,进而从该地址获取数据块并将获取的数据块存储到统一数据缓冲器(例如,统一数据缓冲器601)中。
在多核系统的处理器或者各个核的上游流水线向下游流水线下发数据处理任务时,同时下发了各个核的上游流水线分配给各个核的下游流水线的有效数据段的头地址。因此,任一核的下游流水线理论上都被分配有N个头地址,分别对应于N个核的上游流水线产生并分配给所述任一核进一步处理的数据的头地址。实际上,例如在图4所示的数据段示例的情况下,核0产生的用于特定核/某个核的下游流水线进一步处理的有效数据为空,则所述特定核/某个核的下游流水线中对应于核0的地址缓冲器中的内容为空或者无效。在一个实施例中,在初始化过程中,可以将分配给特定核/某个核的下游流水线的与各个核对应的头地址分别存储到所述特定核/某个核的下游流水线中对应于各个核(或各个核的核编号)的地址缓冲器中。例如,将各个核的上游流水线所产生的分配给核1的下游流水线进一步处理的数据段的头地址分别存储到核1的下游流水线中对应于各个核的地址缓冲器中。所述数据段的头地址实际上指的是相应数据段的首个数据块在存储器中的存储位置。如以上所描述的,在产生相应数据段的该核的其他数据块中插入有一个或多个地址,以用于指示其他一个或多个数据块在存储器中的存储位置。
在另一个实施例中,在初始化过程中,也可以不将与各个核对应的头地址存储到对应于各个核的地址缓冲器中。在这种情况下,可以在获取数据块时区分需要从头地址获取数据块的情况和从地址缓冲器中的地址获取数据块的情况。例如,在所确定的最小数据段标识符是首个有效数据段的数据段标识符的情况下,则需要从相应核的头地址获取数据块。在所确定的最小数据段标识符并非首个有效数据段的数据段标识符,则需要从相应的地址缓冲器中的地址获取数据块。相比而言,对于任何数据段的任何数据块,都从产生相应数据段的核所对应的地址缓冲器中的地址获取数据块控制和实现起来更加一致和简便,减少了调度开销。
在步骤703中,下游流水线或其处理单元处理统一数据缓冲器中存储的数据。在一个实施例中,各个核的下游流水线或其处理单元并行地对存储在各自的下游流水线的统一数据缓冲器中的数据块进行逐字解码。逐字解码过程不仅涉及到对数据段中的数据进行解码,而且还涉及到对数据段标识符和地址的解码以及对各个标识符缓冲器和各个地址缓冲器中的内容的更新。此外,逐字解码过程对下游流水线而言还可以涉及对解码后的数据的进一步处理。例如,在下游流水线是光栅化流水线的情况下,进一步处理可以包括对数据进行光栅化。对数据段标识符的解码可以指标识解码到的字是数据段标识符并且根据解映射获得对应的核编号的过程。下文详细描述逐字解码过程。
在逐字解码的过程中,响应于在数据块逐字解码过程中解码到数据后紧跟地址,即数据+地址的情况,将所述地址存储到相应核所对应的地址缓冲器中;以及从所述地址获取下一数据块,并将所述下一数据块存储在所述统一数据缓冲器以对所述下一数据块进行逐字解码。
如果在数据块逐字解码的过程中解码到数据段标识符,则根据解映射规则确定所述数据段标识符所对应的核编号;比较解码到的数据段标识符与所述核编号所对应的标识符缓冲器中已存储的数据段标识符;以及响应于所述解码到的数据段标识符不同于所述已存储的数据段标识符,将所述解码到的数据段标识符存储到与所述核编号相对应的标识符缓冲器,由此实现对标识符缓冲器中的内容的更新。
如果在数据块的逐字解码过程中解码到数据段标识符,并且在所述数据段标识符之后紧跟着解码到地址,即数据段标识符+地址的情况,则将解码到的地址存储到与核编号相对应的地址缓冲器中。
如果解码到的字不是数据、不是地址、并且不是数据段标识符,则确定所述字所属的数据段的数据段标识符;根据解映射规则确定所述数据段标识符所对应的核编号;以及将具有所述核编号的核设置为无效核,以在后续的数据处理过程中直接跳过该无效核,而对其余有效核的数据段的数据继续数据处理过程。在一个实施例中,上述解码到的字可以是结束符“END”或“START”或其他字符。
上文关于图7和图5详细描述了下游流水线的数据处理的过程。在上游流水线是GPU核的几何流水线的情况下,下游流水线可以是多核系统的某一GPU核或多个GPU核的光栅化流水线或片段流水线。另外,多核系统的处理器或者上游流水线在下发任务的时候,可以确定各个核/部分核的下游流水线并行执行关于图7所述的数据处理的过程以共同完成对各个核的上游流水线产生的所有数据段的数据的进一步处理,同时下发与各个核对应的有效数据段的头地址。
每个核的下游流水线进行数据处理的过程可以分为初始化过程和后续工作过程。图8和图9分别示出初始化过程的方法800和后续工作过程的方法900。下文结合图8和图9分别描述初始化过程的具体实施例和后续工作过程的具体实施例。在初始化过程中,不对数据块中的数据进行处理,例如与下游流水线相关的具体处理操作。初始化过程用于将各个核的首个有效数据段的数据段标识符存储到相应的标识符缓冲器中,将与各个核所对应的头地址存储到相应的地址缓冲器中,以及将各个核的首个有效数据段中具有最小数据段标识符的数据段用作目标数据段,并将该目标数据段的首个数据块存储到统一数据缓冲器中。
初始化过程的方法800包括步骤801至步骤812。在步骤801中,将下发任务时给各个核分配的与各个核对应的有效数据段的头地址分别存储到对应的地址缓冲器中。例如,将给核0的下游流水线分配的分别与核0至核N-1对应的有效数据段的头地址分别存储到核0的下游流水线中与核0至核N-1对应的地址缓冲器中;将给核1的下游流水线分配的分别与核0至核N-1对应的有效数据段的头地址分别存储到核1的下游流水线中与核0至核N-1对应的地址缓冲器中;依此类推。换言之,对于每个核的下游流水线而言,存在N个头地址,分别与N个核相对应。N个核的多核系统一共存在N*N个头地址。各个核的下游流水线在执行初始化过程的步骤801时,在各自的下游流水线中的N个地址缓冲器中存储与各个核相对应的头地址。
在步骤802中,获取第一有效核的数据块。在步骤803中,解码数据段标识符以获得该数据段标识符所对应的核编号。在步骤804中,将数据段标识符存储到所述核编号对应的标识符缓冲器中。在步骤805中,将获取的数据块存储到统一数据缓冲器。在步骤806中,获取下一有效核的数据块。在步骤807中,解码该数据块中的数据段标识符以获得该数据段标识符所对应的核编号。在步骤808中,将该数据段标识符存储到与该核编号对应的标识符缓冲器中。在步骤809中,比较该数据段标识符与上一个数据段标识符。在步骤810中,记录较小的数据段标识符。在步骤811中,将包括较小数据段标识符的数据块存储到统一数据缓冲器。在步骤812中,判断是否全部有效核的首个有效数据段的首个数据块都被获取了。如果是,则各个标识符缓冲器中都存储有对应核的首个数据段的数据段标识符,并且统一数据缓冲器中存储有具有最小数据段标识符的数据段的首个数据块。此后,过程进行到步骤901。如果否,则返回到步骤806,继续获取下一有效核的首个有效数据段的首个数据块。
需要指出的是,图8所示的第一有效核可以指的是多核系统的任一有效核。换言之,在初始化过程中,不限制各个有效核的首个有效数据段的数据块的获取顺序。参考图4,可以先获取核1的首个有效数据段1的首个数据块,然后获取核3的首个有效数据段3的首个数据块。比较发现核1的数据段1具有较小的数据段标识符,因此将核1的数据段1的首个数据块保存在统一数据缓冲器中。在另一实施例中,也可以按照其他顺序来获取各个有效核的首个有效数据段的首个数据块。
在初始化过程结束之后,下游流水线开始有序地获取数据段。图9所示的下游流水线有序获取数据段的工作过程。下游流水线首先对统一数据缓冲器中存储的数据块进行逐字解码,并按照数据段标识符有序地获取并处理对于执行该方法的核而言有效的来自多个核的数据段的数据。换言之,每个核的下游流水线根据数据段标识符有序地获取并处理每个核所需的来自多个核的有效数据段的数据。在步骤901中,解码统一数据缓冲器中存储的数据块的第一个字。如果所存储的数据块是首个有效数据段的首个数据块,则第一个字是数据段标识符。在非有效数据段的首个数据块的情况下,第一个字是数据或数据段标识符(例如图5中的ID_14)。在其他数据段的数据结构的情况下,解码到的第一个字也可以是其他字符。在步骤902中,判断解码到的字是否是数据。如果在步骤902中判断是数据,则过程进行到步骤903。在步骤903中,继续解码该数据块的下一个字。然后,过程返回步骤902。
如果在步骤902中判断解码到的字不是数据,则过程进行到步骤904。在步骤904中,判断解码到的字是否是地址。如果解码到的字是地址,则过程进行到步骤912。在步骤912中,将地址存储到相应核所对应的地址缓冲器中。然后在步骤913中,从该地址获取下一数据块,并且将所述下一数据块存储到统一数据缓冲器。从而过程继续回到步骤901。步骤912和步骤913的分支代表当前处理的数据段包括两个或更多个数据块的情况或者前一数据块的末尾字存储有下一数据段的首数据块的地址,而下一数据段的数据段标识符存储在该地址索引的位置的情况。在解码和处理完该数据块之后,从在该数据块中解码到的地址获取下一数据块,从而继续数据获取和处理的过程。
如果在步骤904中判断解码到的字不是地址,则过程进行到步骤905。在步骤905中,判断解码到的字是否是数据段标识符。如果在步骤905中判断解码到的字是数据段标识符,则过程进行到步骤906。在步骤906中,判断解码到的数据段标识符与相应核所对应的标识符缓冲器中的内容是否相同。步骤906可以包括:根据上文描述的解映射规则确定解码到的数据段标识符所对应的核编号,然后比较该解码到的数据段标识符与该核编号所对应的标识符缓冲器中的内容是否相同。如果相同,说明该数据段标识符属于具有该核编号的核的首个有效数据段的数据段标识符。此时,不需要更新该核编号所对应的标识符缓冲器。因此,过程返回步骤903,继续解码当前数据块的下一个字。如果不同,则过程进行到步骤907,将该数据段标识符存储到该核编号所对应的标识符缓冲器中,从而实现对该标识符缓冲器中的内容的更新。
然后,过程进入步骤908,其中判断下一个字是否是地址。如果在步骤908中判断下一个字是地址,则在步骤909中将该地址存储到相应核所对应的地址缓冲器中。此处,“相应核”指的是具有与步骤906中解映射所确定的核编号的核。随后,过程进入步骤910。如果在步骤908中判断下一个字不是地址,则过程也进入步骤910,这种情况可以对应于图5中所示的ID_14的情况。
在步骤910中,比较所有有效的数据段标识符。步骤910可以包括比较所有有效核的所对应的标识符缓冲器中的内容以确定最小数据段标识符。然后,过程进入步骤911,获取最小数据段标识符所对应的核的当前待解码的数据段的数据块,并且将该数据块存储到统一数据缓冲器。具体地,步骤911可以包括根据解映射规则确定所述最小数据段标识符所对应的核编号,然后根据与所述核编号相对应的地址缓冲器中的地址来从存储器中获取数据块,并且将数据块存储到统一数据缓冲器中。由此,过程返回步骤901,以对该数据块进行逐字解码。
如果在步骤905中判断不是数据段标识符,则说明解码到的字不是地址,不是数据,也不是数据段标识符。由此,在步骤914中,判断一个有效核结束。然后,在步骤915中判断是否所有有效核都结束了。换言之,是否所有有效核的有效数据段的数据都被获取和处理了。如果是,则后续工作过程全部结束,执行数据处理过程的特定核的下游流水线完成了其所分配的进一步处理任务。如果否,则在步骤917中将该核设置为无效核。过程返回到步骤910,继续比较剩余有效核的标识符缓冲器中的内容以确定下一最小数据段标识符。
上文描述了下游流水线进行数据处理的过程。该过程中提及的“获取”可以指从存储器中获取数据块。该过程提及的“解码”可以指对统一数据缓冲器中的数据块进行逐字解码,以标识数据块中的每个字表示的是数据、数据段标识符、地址还是其他字符的过程。对数据段标识符的“解码”还可以包括根据解映射规则确定该数据段标识符所对应的核编号的过程。数据处理过程还可以包括具体下游流水线对解码获得的数据进行与下游流水线的具体操作相关的进一步处理操作的过程。在一个实施例中,在下游流水线是片段流水线的情况下,所述数据处理过程可以指为每个片段计算最终颜色值等操作。在一个实施例中,上述解码过程和进一步的处理过程可以共同称为数据处理的过程。
通过上文描述的下游流水线的结构和下游流水线进行数据处理的方法可以看到,一方面本公开所描述的下游流水线所采用的统一数据缓冲器、标识符缓冲器以及地址缓冲器所占用的空间非常小。一方面,下游流水线可以根据读取到的数据段标识符直接获知对应的核编号,而不占用额外的控制和存储资源。例如,在公式(1)的固定映射关系和公式(2)的解映射规则的情况下,可以根据读取到的数据段标识符的末尾几位(例如,四核系统的情况下是末尾两位)便可直接获知数据段标识符所对应的核编号。另一方面,相对于传统的基于计数的调度方式,本公开提出的数据处理的方法不依赖时钟周期,因此能够大幅降低多核调度的延时。因此,本公开所提出用于实现上游多核处理并且下游多核处理的上游编码和下游解码过程需要的额外硬件资源很少、操作和实现起来极其简便,并且可以降低多核调度的延时。
需要指出的是,公式(1)的固定映射关系和公式(2)的解映射规则仅仅是一个示例用于说明本公开的原理。通过进行适当的改编,还可以应用其他固定映射关系以及相应的解映射规则,而上文提到的上游流水线产生数据段和预处理的方法以及下游流水线的数据处理的方法同样适用,并且它们都落入本公开的保护范围内。
还需要指出的是,上文描述的所有数据处理的方法可以在任何多核系统中采用,包括多核CPU,多核GPU等。上文描述的多核系统、用于多核系统的数据处理的方法既可以应用于移动端应用,也可以应用于桌面端应用。对于当前的移动端GPU设计,虽然多核GPU包括多条几何流水线,然而通常仅启用其中之一来完成与图形的几何变换的相关运算。根据本公开描述的数据处理的方法,多个GPU核的几何流水线可以并行执行处理任务,从而使原本闲置的硬件资源发挥作用。此外,本文所提出的数据处理的上游编码和下游解码的方式实现起来非常简便,而且可以有效降低调度延时,并且仅占用较少的额外硬件资源。
另外,本公开中阐述的数据处理的方法也可以以程序指令的形式被存储在计算机/机器可读存储介质中,当所述程序指令在一个或多个计算机/机器上被执行时,使得所述一个或多个计算机/机器执行根据本公开的实施例的数据处理的方法。还需要指出的是,虽然图8和图9中用箭头来连接各个步骤,然而这仅仅是示意性的。实际上,这些步骤之间的顺序可以互换,并且根据需要,这些步骤中的一个或多个可以省略或者可以合并,只要与本公开的原理不相违背即可。
图10示出包括多核GPU的计算设备1000。计算设备1000可以包括根据本公开的实施例的多核GPU 1005。在一个实施例中,所述多核GPU 1005可以是上文参考图1B描述的多核GPU系统101。计算设备1000还可以包括处理器1001、通信电路1002、存储装置1003、显示屏1004、芯片集1006、相机1007、电池1008、I/O子系统1009和天线1010。
处理器1001可以是能够处理来自寄存器和/或存储装置的电子数据以将该电子数据变换成可以被存储在寄存器和/或存储装置中的其他电子数据的任何设备或设备的部分。处理器可以是中央处理器(CPU),其一部分,或者可以是多核CPU。通信电路1002可以用于通过计算设备中的天线或者无线地将数据从计算设备1000传递给外部组件,或者将来自外部的数据传递到计算设备1000。通信电路1002可以实现现有的以及未来开发的无线通信标准或协议中的任一个。此外,计算设备1000中可以包括多个通信电路1002。其中的一些专用于较短程通信,而另一些专用于较长程通信。存储装置1003可以是适合永久或者临时存储数据的任何装置,例如易失性存储器(例如DRAM)、非易失性存储器(例如ROM)、闪速存储器等。计算设备1000还可以包括存储器控制器(虽然在图10中没有示出),用于控制存储装置的操作。计算设备1000中的显示屏1004可以是任何能够显示图形或者视频的屏幕,例如触摸屏。计算设备1000内的I/O子系统1009可以用于连接计算设备1000内部的各个组件或者用于将计算设备1000与其外部的组件连接。计算设备1000内的芯片集1006可以包括芯片的集合,包括但不限于数字信号处理器、密码处理器、触摸屏控制器、功率放大器、GPS系统等。计算设备1000可以是移动端(例如智能手机)内的计算设备,或者可以是桌面型或者工作站中的计算设备。
应当理解,为了清楚起见,参考不同的功能单元对本公开的实施例进行了描述。显然,在不偏离本公开的情况下,每个功能单元的功能可以被实现在单个单元中、实现在多个单元中、或作为其他功能单元的一部分来实现。
还应当理解,尽管第一、第二、第三等术语在本文中可以用来描述各种设备、元件、部件或阶段,但是这些设备、元件、部件或阶段不应当由这些术语所限制。这些术语仅用来将一个设备、元件、部件或阶段与另一个设备、元件、部件或阶段相区分。
尽管已经结合一些实施例描述了本公开,然而本公开不意图仅限于本文中所阐述的具体实施例的具体形式。相反地,本公开的范围仅由所附权利要求来限制。另外,尽管不同的权利要求包括不同的技术特征,但是这些特征可以相互组合。这些特征在权利要求中的次序不暗示这些特征必须以该次序来操作/起作用。
Claims (23)
1.一种用于多核系统的数据处理的方法,其特征在于,所述多核系统的多个核的上游流水线并行处理任务以产生相应的数据段,其中每个数据段具有唯一的数据段标识符,并且每个核的上游流水线将其产生的数据段分配给多个核的下游流水线,对于所述多个核中的一个核的下游流水线:
所述方法包括:根据数据段标识符从小到大的顺序处理所分配的来自多个核的上游流水线的数据段的数据,其中所述多个核中的每个核具有唯一的核编号,并且所述数据段标识符与产生相应数据段的核的核编号形成固定映射。
2.根据权利要求1所述的方法,其特征在于,所述下游流水线包括统一数据缓冲器,用于存储所述下游流水线待处理的数据,并且根据数据段标识符从小到大的顺序处理所分配的来自多个核的上游流水线的数据段的数据包括:
比较各个核的当前待处理数据段的数据段标识符以确定最小数据段标识符;
将所述最小数据段标识符对应的数据段的数据存储到所述统一数据缓冲器中;以及
处理所述统一数据缓冲器中存储的数据。
3.根据权利要求2所述的方法,其特征在于,比较各个核的当前待处理数据段的数据段标识符以确定最小数据段标识符包括:
将各个核的当前待处理的有效数据段的数据段标识符存储在与相应核对应的标识符缓冲器中;以及
比较与各个核对应的标识符缓冲器中的数据段标识符以确定最小数据段标识符。
4.根据权利要求2所述的方法,其特征在于,将所述最小数据段标识符对应的数据段的数据存储到所述统一数据缓冲器中包括:
根据解映射规则确定所述最小数据段标识符所对应的核编号;
从所述核编号所对应的地址缓冲器中的地址获取数据块;以及
将所获取的数据块存储在所述统一数据缓冲器中。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在初始化过程中,将每个核的首个有效数据段的数据段标识符存储在与相应核对应的标识符缓冲器中。
6.根据权利要求5所述的方法,其特征在于,所述初始化过程还包括:将所分配的与每个核对应的头地址分别存储到与每个核对应的地址缓冲器中。
7.根据权利要求2所述的方法,其特征在于,处理所述统一数据缓冲器中存储的数据包括:对存储在所述统一数据缓冲器中的数据块进行逐字解码。
8.根据权利要求7所述的方法,其特征在于,所述方法还包括:
响应于在数据块逐字解码过程中解码到数据后紧跟地址,将所述地址存储到产生所述数据块的核所对应的地址缓冲器中;以及
从所述地址获取下一数据块,并将所述下一数据块存储在所述统一数据缓冲器以对所述下一数据块进行逐字解码。
9.根据权利要求7所述的方法,其特征在于,所述方法还包括:
响应于在数据块逐字解码过程中解码到数据段标识符,根据解映射规则确定所述数据段标识符所对应的核编号;
比较解码到的数据段标识符与所述核编号所对应的标识符缓冲器中已存储的数据段标识符;以及
响应于所述解码到的数据段标识符不同于所述已存储的数据段标识符,将所述解码到的数据段标识符存储到与所述核编号相对应的标识符缓冲器。
10.根据权利要求9所述的方法,其特征在于,所述方法还包括:
响应于在数据块逐字解码过程中解码到数据段标识符,并且在所述数据段标识符之后紧跟解码到地址,将解码到的地址存储到与所述核编号相对应的地址缓冲器中。
11.根据权利要求7所述的方法,其特征在于,所述方法还包括:
响应于解码到的字不是数据、不是地址、并且不是数据段标识符,确定解码到的字所属的数据段的数据段标识符;
根据解映射规则确定所述数据段标识符所对应的核编号;以及
将具有所述核编号的核设置为无效核。
12.根据权利要求1所述的方法,其特征在于,根据数据段标识符从小到大的顺序处理所分配的来自多个核的上游流水线的数据段的数据包括:根据数据段标识符从小到大的顺序处理所分配的、来自有效核的数据段的数据,所述有效核为具有待处理数据段的数据需要被所述下游流水线处理的核。
13.根据权利要求1至12中任一项所述的方法,其特征在于,所述固定映射表示为:
ID=(n-1)*N+CORE_ID
其中,ID表示数据段标识符,CORE_ID表示产生具有所述数据段标识符的数据段的核的核编号,N为所述多个核的总数,n表示所述多个核的上游流水线第n轮并行处理任务产生相应的数据段。
14.根据权利要求13所述的方法,其特征在于,相应的解映射规则表示为:CORE_ID=ID[log2(N)-1:0]
其中,[log2(N)-1:0]表示取ID的最后log2(N)位。
15.根据权利要求1至12中任一项所述的方法,其特征在于,所述多个核中的每个核是GPU核,并且所述上游流水线是GPU核的几何流水线,所述下游流水线是GPU核的光栅化流水线或片段流水线。
16.一种用于数据处理的多核系统,其特征在于,所述多核系统包括多个核和存储器,
所述多个核中的每个核的上游流水线被配置用于:并行执行处理任务以产生相应的数据段,其中每个数据段被基于处理任务的轮次和产生相应数据段的核的核编号赋予唯一的数据段标识符;并将其产生的数据段分配给多个核的下游流水线;
所述多个核中的每个核的下游流水线被配置用于:根据数据段标识符从小到大的顺序处理所分配的来自多个核的上游流水线的数据段的数据。
17.一种多核系统,其特征在于,所述多核系统包括各自具有唯一核编号的N个核,所述N个核中的每个核的上游流水线并行处理任务以产生相应的数据段,其中每个数据段具有唯一的数据段标识符,并且所述数据段标识符与产生相应数据段的核的核编号形成固定映射,所述N个核中的每个核的下游流水线包括:
处理单元;
N个标识符缓冲器,用于存储各个核的当前待处理数据段的数据段标识符;
N个地址缓冲器,用于存储各个核的当前待处理数据段所包括的当前待处理数据块的地址;以及
统一数据缓冲器,用于存储当前待处理的数据块,
其中所述处理单元用于:根据N个标识符缓冲器中存储的数据段标识符确定待处理的目标核的核编号,并根据所述目标核的核编号所对应的地址缓冲器中的地址获取所述当前待处理的数据块,以及将所获取的数据块存储到所述统一数据缓冲器中以对所述数据块进行逐字解码。
18.根据权利要求17所述的系统,其特征在于,根据N个标识符缓冲器中存储的数据段标识符确定待处理的目标核的核编号包括:
比较N个标识符缓冲器中存储的数据段标识符以确定最小数据段标识符;
根据解映射规则确定所述最小数据段标识符所对应的核编号;以及
将所确定的核编号用作目标核的核编号。
19.根据权利要求17或18所述的系统,其特征在于,所述固定映射表示为:ID=(n-1)*N+CORE_ID
其中,ID表示数据段标识符,CORE_ID表示产生具有所述数据段标识符的数据段的核的核编号,N为所述多核系统所包括的核的总数,n表示所述多个核的上游流水线第n轮并行处理任务产生相应的数据段。
20.根据权利要求19所述的系统,其特征在于,相应的解映射规则表示为:
CORE_ID=ID[log2(N)-1:0]
其中,[log2(N)-1:0]表示取ID的最后log2(N)位。
21.根据权利要求17或18所述的系统,其特征在于,所述N个核是N个GPU核,所述上游流水线是几何流水线,并且所述下游流水线是光栅化流水线或片段流水线。
22.一种计算设备,其特征在于,包括根据权利要求16至21中任一项所述的多核系统。
23.一种其上存储有指令的机器可读介质,所述指令当被机器执行时使得所述机器执行根据权利要求1至15中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311832446.6A CN117472840B (zh) | 2023-12-28 | 2023-12-28 | 多核系统以及用于多核系统的数据处理的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311832446.6A CN117472840B (zh) | 2023-12-28 | 2023-12-28 | 多核系统以及用于多核系统的数据处理的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117472840A CN117472840A (zh) | 2024-01-30 |
CN117472840B true CN117472840B (zh) | 2024-04-16 |
Family
ID=89627893
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311832446.6A Active CN117472840B (zh) | 2023-12-28 | 2023-12-28 | 多核系统以及用于多核系统的数据处理的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117472840B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115908100A (zh) * | 2021-09-30 | 2023-04-04 | 想象技术有限公司 | 图形处理器 |
CN115904505A (zh) * | 2021-09-30 | 2023-04-04 | 想象技术有限公司 | 具有硬件流水线的处理器 |
CN116894901A (zh) * | 2022-03-30 | 2023-10-17 | 想象技术有限公司 | 用于多核三维图形渲染的控制流拼接 |
CN117058288A (zh) * | 2022-05-07 | 2023-11-14 | 象帝先计算技术(重庆)有限公司 | 图形处理器及方法、多核图形处理系统、电子装置及设备 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9659399B2 (en) * | 2013-08-23 | 2017-05-23 | Nvidia Corporation | System, method, and computer program product for passing attribute structures between shader stages in a graphics pipeline |
GB2567207B (en) * | 2017-10-06 | 2020-02-19 | Advanced Risc Mach Ltd | Graphics processing systems |
-
2023
- 2023-12-28 CN CN202311832446.6A patent/CN117472840B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115908100A (zh) * | 2021-09-30 | 2023-04-04 | 想象技术有限公司 | 图形处理器 |
CN115904505A (zh) * | 2021-09-30 | 2023-04-04 | 想象技术有限公司 | 具有硬件流水线的处理器 |
CN116894901A (zh) * | 2022-03-30 | 2023-10-17 | 想象技术有限公司 | 用于多核三维图形渲染的控制流拼接 |
CN117058288A (zh) * | 2022-05-07 | 2023-11-14 | 象帝先计算技术(重庆)有限公司 | 图形处理器及方法、多核图形处理系统、电子装置及设备 |
Also Published As
Publication number | Publication date |
---|---|
CN117472840A (zh) | 2024-01-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3274841B1 (en) | Compaction for memory hierarchies | |
US10983699B2 (en) | Queue manager for streaming multiprocessor systems | |
US9589310B2 (en) | Methods to facilitate primitive batching | |
CN109219805B (zh) | 一种多核系统内存访问方法、相关装置、系统及存储介质 | |
US7880745B2 (en) | Systems and methods for border color handling in a graphics processing unit | |
EP3591534B1 (en) | Virtual memory management | |
US7533236B1 (en) | Off-chip out of order memory allocation for a unified shader | |
US20110243469A1 (en) | Selecting and representing multiple compression methods | |
KR20190082079A (ko) | 원격 원자 연산들의 공간적 및 시간적 병합 | |
CN111208933B (zh) | 数据访问的方法、装置、设备和存储介质 | |
CN110223216B (zh) | 一种基于并行plb的数据处理方法、装置及计算机存储介质 | |
CN116894901A (zh) | 用于多核三维图形渲染的控制流拼接 | |
US8427493B2 (en) | Draw commands with built-in begin/end | |
US20170123977A1 (en) | Organizing Memory to Optimize Memory Accesses of Compressed Data | |
CN117472840B (zh) | 多核系统以及用于多核系统的数据处理的方法 | |
US20230306660A1 (en) | Graphics processing | |
CN116263982B (zh) | 图形处理器、系统、方法、电子装置及设备 | |
CN116400960A (zh) | 寄存器堆预提取 | |
US20210089305A1 (en) | Instruction executing method and apparatus | |
US11132760B2 (en) | Graphics instruction operands alias | |
CN114661359A (zh) | 用于处理器核心内的细粒度低时延解压缩的应用编程接口 | |
CN113835753A (zh) | 用于在纹理处理管线中执行加速的点采样的技术 | |
US10452401B2 (en) | Hints for shared store pipeline and multi-rate targets | |
US10075716B2 (en) | Parallel encoding of weight refinement in ASTC image processing encoders | |
US11418212B2 (en) | Parallel decoding techniques |
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 |