计算装置和处理器实现的方法与流程

文档序号:29205332发布日期:2022-03-11 23:52阅读:56来源:国知局
计算装置和处理器实现的方法与流程
计算装置和处理器实现的方法
1.本技术要求于2020年9月11日在韩国知识产权局提交的第10-2020-0117000号韩国专利申请的权益,所述韩国专利申请的全部公开出于所有目的通过引用包含于此。
技术领域
2.下面的描述涉及计算装置和方法。


背景技术:

3.随着人工智能(ai)技术发展,专用ai硬件可被用于执行学习和训练的推断。作为专用于实现ai的硬件,神经处理器可被使用。


技术实现要素:

4.提供本发明内容以便以简化的形式介绍以下在具体实施方式中进一步描述的构思的选择。本发明内容不意在确定要求权利的主题的关键特征或必要特征,也不意在用于帮助确定要求权利的主题的范围。
5.在一个总体方面,一种计算装置包括:多个处理核;和区块调度器,被配置为:基于第二区块中的每个的元信息和先前分配给所述多个处理核的第一区块中的每个的元信息,更新所述多个处理核中的每个的成本矩阵,并且使用所述多个处理核中的每个的更新的成本矩阵相对于所述多个处理核分配第二区块。
6.为了更新成本矩阵,区块调度器可被配置为:针对所述多个处理核中的每个,基于每个第一区块的元信息和每个第二区块的元信息,计算第一区块和第二区块之中的多个配对中的每个配对的接收数据量;和基于计算的相应的结果来更新所述多个处理核中的每个处理核的成本矩阵。
7.计算的步骤可包括:通过计算所述多个配对之中的第一配对的第二区块的滤波器数据的大小,计算所述多个处理核中的第一处理核针对第一配对的第一接收数据量,其中,第一配对的第一区块可被分配给所述第一处理核,并且计算的步骤可包括:通过计算所述多个配对之中的第二配对的第二区块的滤波器数据的大小与第二配对的第一区块的输出数据的大小之和,不同地计算第一处理核针对第二配对的第二接收数据量,其中,第二配对的第一区块可被分配给所述多个处理核中的另一处理核。
8.为了分配第二区块,区块调度器可被配置为:根据所述多个处理核中的每个的更新的成本矩阵的相应的最小值,将第二区块中的一个或多个分配给相应的处理核。
9.第一区块可包括与神经网络模型的操作对应的区块,第二区块可包括与另一神经网络模型的操作对应的区块。
10.与所述另一神经网络模型的操作对应的区块可被分配给所述多个处理核的一部分,并且针对所述神经网络模型和所述另一神经网络两者在所述多个处理核之中的资源分配可发生在对第二区块的分配中。
11.所述计算装置还可包括:主机处理器,被配置为:生成与所述神经网络模型的操作
对应的第一区块,并且生成与所述另一神经网络模型的操作对应的第二区块。
12.第一区块中的一个可依赖于第一区块中的另一个的输出数据。
13.所述多个处理核中的每个可包括对应的区块队列,并且所述多个处理核中的每个可被配置为:依赖于第二区块被区块调度器分配给所述多个处理核中的哪一个,分别将第二区块中的一个或多个区块入队到对应的区块队列;和从外部存储器分别预取分别入队到对应的区块队列的第二区块中的所述一个或多个区块的源数据。
14.所述多个处理核中的每个可包括对应的区块队列,并且所述多个处理核中的每个可被配置为:当对应的区块队列已满时,请求区块调度器不将额外的区块分配给对应的区块队列。
15.具有已满的对应的区块队列的对应的处理核可被配置为:完成存储在对应的区块队列中的一个或多个区块的执行,并且在存储在区块队列中的所述一个或多个区块的执行之后对应的区块队列不再满时,请求区块调度器将区块分配给对应的处理核。
16.所述多个处理核中的每个可包括对应的区块队列,并且所述多个处理核中的每个可被配置为:当对应的区块队列为空时,分别切换到睡眠模式。
17.所述计算装置还可包括:主机处理器,被配置为执行指令,所述指令在由主机处理器执行时配置主机处理器实现所述计算装置的功能,所述功能包括针对第一人工智能操作来编译第一区块和针对第二人工智能操作来编译第二区块,其中,区块调度器可在将第一区块中的多个第一区块分配给所述多个处理核中的第一集合之后,将第二区块中的多个第二区块分配给所述多个处理核中的第二集合,其中,在所述多个处理核中的第一集合中的至少一个处理核执行第一人工智能操作的同时,所述多个处理核中的第二集合中的至少一个处理核执行第二人工智能操作。
18.在一个总体方面,一种计算装置可包括:主机,包括:第一处理器,被配置为生成第一区块和第二区块;和一个或多个第二处理器,被配置为与主机通信,其中,所述一个或多个第二处理器中的每个包括:多个处理核;和区块调度器,被配置为:基于第二区块中的每个的元信息和先前分配给所述多个处理核中的多个处理核的第一区块中的每个的元信息,更新所述多个处理核中的每个的成本信息,并且使用所述多个处理核中的每个的更新的成本信息将第二区块中的一个或多个分配给所述多个处理核中的至少一个。
19.为了更新成本信息,区块调度器可被配置为:针对所述多个处理核中的每个,基于每个第一区块的元信息和每个第二区块的元信息,计算针对第一区块和第二区块之中的多个配对中的每个配对的接收数据量;和可基于计算的相应的结果来更新所述多个处理核中的每个的成本信息。
20.计算的步骤可包括:通过计算所述多个配对之中的第一配对的第二区块的滤波器数据的大小,计算所述多个处理核中的第一处理核针对第一配对的第一接收数据量,其中,第一配对的第一区块被分配给第一处理核,并且计算的步骤可包括:通过计算所述多个配对之中的第二配对的第二区块的滤波器数据的大小与第二配对的第一区块的输出数据的大小之和,不同地计算第一处理核针对第二配对的第二接收数据量,其中,第二配对的第一区块被分配给所述多个处理核中的另一处理核。
21.更新所述多个处理核中的每个的成本信息可包括:更新所述多个处理核中的每个的成本矩阵。
22.为了分配第二区块,区块调度器可被配置为:根据所述多个处理核中的每个的更新的成本信息的各自的最小值,将第二区块中的一个或多个分配给相应的处理核。
23.第一区块可包括与神经网络模型的操作对应的区块,第二区块可包括与另一神经网络模型的操作对应的区块。
24.与所述另一神经网络模型的操作对应的区块可被分配给作为所述多个处理核的一部分的多个处理核,并且针对所述神经网络模型和所述另一神经网络两者在所述多个处理核之中的资源分配可发生在对第二区块的分配中。
25.第一处理器可被配置为:生成与所述神经网络模型的操作对应的第一区块,并且生成与所述另一神经网络模型的操作对应的第二区块。
26.第一区块中的一个可依赖于第一区块中的另一个的输出数据。
27.所述多个处理核中的每个可包括对应的区块队列,并且所述多个处理核中的每个可被配置为:依赖于第二区块被区块调度器分配给所述多个处理核中的哪一个,分别将第二区块中的一个或多个区块入队到对应的区块队列;和从外部存储器分别预取分别入队到对应的区块队列的第二区块中的所述一个或多个区块的源数据。
28.所述多个处理核中的每个可包括对应的区块队列,并且所述多个处理核中的每个可被配置为:当对应的区块队列已满时,请求区块调度器不将额外的区块分配给对应的区块队列。
29.所述多个处理核中的具有已满的对应的区块队列的对应的处理核可被配置为:完成存储在对应的区块队列中的一个或多个区块的执行,并且在存储在区块队列中的所述一个或多个区块的执行之后对应的区块队列不再满时,请求区块调度器将区块分配给对应的处理核。
30.所述多个处理核中的每个可包括对应的区块队列,并且所述多个处理核中的每个可被配置为:当对应的区块队列为空时,分别切换到睡眠模式。
31.在一个总体方面,一种处理器实现的方法可包括:基于第二区块中的每个的元信息和先前分配给多个处理核的第一区块中的每个的元信息,更新所述多个处理核中的每个的成本矩阵;和使用所述多个处理核中的每个的更新的成本矩阵将第二区块分配给所述多个处理核。
32.所述多个处理核可以是神经处理器的处理核,神经处理器被配置为与存储器控制器通信,存储器控制器被配置为执行第二区块的分配。
33.所述方法还可包括:使用主机处理器的编译器来生成第一区块和第二区块。
34.更新的步骤可包括:针对所述多个处理核中的每个,基于每个第一区块的元信息和每个第二区块的元信息,计算针对第一区块和第二区块之中的多个配对中的每个配对的接收数据量;和基于计算的相应的结果来更新所述多个处理核中的每个的成本矩阵。
35.计算的步骤可包括:通过计算所述多个配对之中的第一配对的第二区块的滤波器数据的大小,计算所述多个处理核中的第一处理核针对第一配对的第一接收数据量,其中,第一配对的第一区块被分配给第一处理核,并且计算的步骤可包括:通过计算所述多个配对之中的第二配对的第二区块的滤波器数据的大小与第二配对的第一区块的输出数据的大小之和,不同地计算第一处理核针对第二配对的第二接收数据量,其中,第二配对的第一区块被分配给所述多个处理核中的另一处理核。
36.从下面的具体实施方式、附图以及权利要求,其它特征和方面将是清楚的。
附图说明
37.图1示出处理装置的示例。
38.图2至图7示出处理装置的区块调度的示例。
39.图8示出执行并发模型时的区块调度的示例。
40.图9和图10示出处理装置的区块队列操作的示例。
41.图11示出处理装置的操作方法的示例的流程图。
42.图12和图13示出计算装置的示例。
43.贯穿附图和具体实施方式,除非另外描述或提供,否则相同的附图参考标号将被理解为表示相似或相同的元件、特征和结构。附图可不按比例,并且为了清楚、说明和方便,附图中的元件的相对尺寸、比例和描绘可被夸大。
具体实施方式
44.提供下面的具体实施方式以帮助读者获得对在此描述的方法、设备和/或系统的全面理解。然而,在理解本技术的公开之后,在此描述的方法、设备和/或系统的各种改变、修改和等同物将是清楚的。例如,在此描述的操作的顺序仅是示例,并且不限于在此阐述的那些顺序,而是除了必须以特定的次序发生的操作之外,可如在理解本技术的公开之后将是清楚的那样被改变。此外,为了更加清楚和简明,可省略在理解本技术的公开之后已知的特征的描述。
45.在此描述的特征可以以不同的形式来实现,而不应被解释为限于在此描述的示例。相反,在此描述的示例已被提供,以仅示出在理解本技术的公开之后将是清楚的实现在此描述的方法、设备和/或系统的许多可行方式中的一些可行方式。
46.贯穿说明书,当组件被描述为“连接到”或“结合到”另一组件时,该组件可直接“连接到”或“结合到”该另一组件,或者可存在介于它们之间的一个或多个其它组件。相反,当元件被描述为“直接连接到”或“直接结合到”另一元件时,可不存在介于它们之间的其它元件。同样地,相似的表述(例如,“在
……
之间”与“紧接在
……
之间”以及“与
……
邻近”与“与
……
紧邻”)也应以相同的方式解释。如在此使用的,术语“和/或”包括相关联的所列项中的任何一个和任何两个或更多个的任何组合。
47.尽管在此可使用诸如“第一”、“第二”和“第三”的术语来描述各种构件、组件、区域、层或部分,但是这些构件、组件、区域、层或部分不应被这些术语所限制。相反,这些术语仅用于将一个构件、组件、区域、层或部分与另一构件、组件、区域、层或部分进行区分。因此,在不脱离示例的教导的情况下,在此描述的示例中所称的第一构件、第一组件、第一区域、第一层或第一部分也可被称为第二构件、第二组件、第二区域、第二层或第二部分。
48.在此使用的术语仅用于描述各种示例,并不将用于限制公开。除非上下文另外清楚地指示,否则单数形式也意在包括复数形式。术语“包含”、“包括”和“具有”说明存在叙述的特征、数量、操作、构件、元件和/或它们的组合,但不排除存在或添加一个或多个其它特征、数量、操作、构件、元件和/或它们的组合。
49.除非另有定义,否则在此使用的所有术语(包括技术术语和科学术语)具有与本公
开所属领域的普通技术人员通常理解以及基于本技术的公开所理解的含义相同的含义。除非在此明确地如此定义,否则术语(诸如,在通用词典中定义的术语)将被解释为具有与它们在相关领域的上下文和本技术的公开中的含义一致的含义,并且不应被理想化或过于形式化地解释。在此针对示例或实施例的术语“可”的使用(例如,关于示例或实施例可包括或实现什么)表示存在包括或实现这样的特征的至少一个示例或实施例,而所有示例不限于此。
50.此外,在示例实施例的描述中,当认为在理解本技术的公开之后由此得知的结构或功能的详细描述将导致对示例实施例的模糊解释时,将省略这样的描述。
51.图1示出处理装置的示例。
52.参照图1,例如,处理装置110可以是神经处理单元(npu)。npu也可被称为神经处理器或人工智能(ai)处理器。根据实施方式,处理装置110可以是并行操作加速器(例如,领域特定的处理器,domain-specific processor)。作为非限制性示例,处理装置110还可表示计算装置(诸如,图12至图13的计算装置示例)。
53.处理装置110可通过对从主机接收的区块执行调度来将接收的区块分配给处理装置110的多个核(core)。例如,隐式传送(implicit forwarding)可最大程度地发生(例如,朝向处理装置110中的每个核发送的数据量可被减小或最小化,并且与先前方法相比处理装置110的利用率可被提高)。
54.另外,处理装置110可通过这样的区块调度来执行或支持并发模型执行。也就是说,通过这样的动态调度,处理装置110可在神经网络(nn)模型之间执行动态核分配,并且可将资源(例如,核、存储器等)公平地分发(或分配)或者重新分发(或重新分配)给每个nn模型。例如,处理装置110可同时处理或执行多个nn模型、nn模型层或nn操作,使处理装置110中的空闲核的数量减小或最小化,并且提高处理装置110的利用率。
55.另外,处理装置110中的每个核可将分配的区块入队(enqueue)到相应的核的区块队列,并且每个核可从外部存储器(例如,从2级[l2]存储器)预取入队到相应的区块队列的区块的源数据。例如,处理装置110中的每个核可在执行各自分配的区块之前预取该区块的相应的源数据,因此可使在数据发送和接收中发生的延迟减小或最小化。
[0056]
参照图2,例如,主机210可包括编译器210-2,处理装置110(例如,图1的处理装置110)可包括区块调度器220、多个核230-1至230-n、直接存储器存取(dma)/存储器管理单元(mmu)(dma/mmu)240和l2存储器250。神经网络(nn)模型210-1可表示一个或多个对应的神经网络的一个层或多个层或所有层的存储的参数和超参数(例如,存储在主机210的存储器中)。在一个示例中,区块调度器220还可以是与处理装置110分开的一个或多个处理器。
[0057]
编译器210-2可对nn模型210-1进行编译,以将操作分配或映射到多个核(例如,诸如通过设置上下文(context)210-3)。例如,编译器210-2可对nn模型210-1的多个操作(例如,矩阵-矩阵乘法等)中的每个执行平铺(tiling),以生成与每个操作对应的区块。例如,编译器210-2可将示例上下文210-3中的每个内核(kernel)实施方式划分或分开成针对每个内核的相应的区块。
[0058]
在典型的编译处理中,区块可由主机的编译器被分配或映射到特定核,意味着主机可指导依赖于核的平铺被执行。
[0059]
在一个或多个示例中,处理装置的区块调度器220可将区块分配给多个核,因此,
编译器210-2的实施方式可导致依赖于核的平铺将由处理装置执行。也就是说,虽然编译器(诸如,编译器210-2)可生成可分配给核的区块,但是区块调度器220可最终将区块分配给相应的核。可针对其生成和分配区块的nn模型可以是深度神经网络(dnn)模型,并且可包括例如卷积神经网络(cnn)或包括一个或多个卷积层,但是在其它各种示例中示例不限于此。
[0060]
参照图3,编译器将内核a划分为区块310-1至310-8(也被标识为区块a000至a111)。例如,出于非限制性目的以加速解释,编译器可以是图2的编译器210-2。
[0061]
在区块310-1至310-8中,i00至i11分别指示区块310-1至310-8的输入数据(或输入特征图[ifm]),f00至f11分别指示区块310-1至310-8的滤波器数据(或滤波器区块)。当ifm(i)被编译器210-2划分时,i00至i11可被生成,并且当滤波器f被编译器210-2划分时,f00至f11被生成。尽管图3中将区块310-1至310-8中的每个示出为参照输入数据和滤波器数据,但是区块310-1至310-8中的每个可不包括相应的输入数据和相应的滤波器数据,而是包括相应的输入数据的位置信息(或存储器地址)和相应的滤波器数据的位置信息(或存储器地址)。
[0062]
在区块310-1至310-8中,o00v0至o11v1分别指示区块310-1至310-8的输出数据(或输出特征图[ofm])。尽管图3中将区块310-1至310-8中的每个示出为参照输出数据,但是区块310-1至310-8中的每个不包括输出数据,而是包括与哪个输出数据将被生成相关联的信息。例如,区块310-1至310-8中的每个可包括关于是否将对区块310-1至310-8中的每个的输入数据和滤波器数据执行卷积运算的信息。
[0063]
例如,区块310-1和区块310-2是针对输出数据o00的区块。
[0064]
区块310-1和区块310-2彼此依赖。基于区块310-1和区块310-2中的哪一个首先被分配给核,它们的依赖性的方向可被确定。例如,如图3中所示,在区块310-1在区块310-2之前被分配的情况下,区块310-2可依赖于区块310-1的输出数据(o00v0=i00*f00)。在该示例中,区块310-2的输出数据o00v1可对应于i01*f10+o00v0。作为另一示例,如图4中所示,在区块310-2在区块310-1之前被分配的情况下,区块310-1可依赖于区块310-2的输出数据(o00v1=i01*f10)。在该示例中,区块310-1的输出数据o00v0可对应于i00*f00+o00v1。
[0065]
作为另外的示例,区块310-3和区块310-4是针对输出数据o01的区块,区块310-5和区块310-6是针对输出数据o10的区块,区块310-7和区块310-8是针对输出数据o11的区块。类似于区块310-1与310-2之间的依赖性,因此可存在区块310-3与310-4之间的依赖性、区块310-5与310-6之间的依赖性以及区块310-7与310-8之间的依赖性。考虑到已经讨论了区块310-1与310-2之间的示例依赖性,为了简洁,这里将省略对这样的依赖性的进一步详细描述。
[0066]
编译器210-2可将内核b划分成区块320-1至320-8(也被标识为区块b000-b111)。
[0067]
在区块320-1至320-8中,o00至o11分别指示区块320-1至320-8的输入数据。如上所述,如图3中所示,在区块310-1在区块310-2之前被分配的情况下,区块320-1的输入数据o00和区块320-3的输入数据o00可对应于区块310-2的输出数据o00v1。相反,如图4中所示,在区块310-2在区块310-1之前被分配的情况下,区块320-1的输入数据o00和区块320-3的输入数据o00可对应于区块310-1的输出数据o00v0。针对输入o01至o11中的每个的进一步详细描述,可参照对输入o00的前述描述,因此为了简洁,这里将省略重复描述。
[0068]
在区块320-1至320-8中,p00至p11指示区块320-1至320-8的滤波器数据(或滤波
器区块)。当滤波器p由编译器(例如,由编译器210-2)划分时,p00至p11被生成。
[0069]
在区块320-1至320-8中,q00v0至q11v1分别指示区块320-1至320-8的输出数据(或ofm区块)。
[0070]
尽管图3中将区块320-1至320-8中的每个示出为参照输入数据、滤波器数据和输出数据,但是区块320-1至320-8中的每个可分别包括输入数据的位置信息、滤波器数据的位置信息以及关于将对相应的输入数据和滤波器数据执行哪个操作的信息。
[0071]
因此,如以上所讨论的,处理装置(诸如,处理装置110)可从主机210接收区块310-1到310-8。处理装置的l2存储器(例如,图2的处理装置110的l2存储器250)可存储区块310-1至310-8中的每个的相应的输入数据和滤波器数据。
[0072]
仅出于解释的目的,处理装置将被讨论为包括核1至核4,注意,存在具有少于4个核的示例,并且存在具有多于4个核的示例。
[0073]
处理装置的区块调度器(例如,图2的区块调度器220)基于区块310-1至310-8中的每个的元信息来计算针对区块310-1至310-8的核1至核4中的每个的接收数据量,并且区块调度器可基于计算的核1至核4中的每个的接收数据量的结果,来确定或更新核1至核4中的每个的比较成本(例如,使用成本矩阵或成本信息)。区块310-1至310-8中的每个的元信息可包括:区块310-1至310-8中的每个的输入数据的相应的大小和区块310-1至310-8中的每个的滤波器数据的相应的大小。元信息可由主机提供(例如,诸如由主机的编译器提供)。
[0074]
例如,使用区块310-1至310-8中的每个的输入数据的相应的大小和滤波器数据的相应的大小,区块调度器计算核1从l2存储器接收区块310-1至310-8中的每个的对应的输入数据和滤波器数据的接收数据量。表1提供针对区块310-1至310-8中的每个计算的核1的接收数据量s的示例。
[0075]
表1:
[0076][0077][0078]
区块310-1至310-8中的每个的输入数据从ifm(i)划分而来,因此区块310-1至310-8中的每个的输入数据的大小可相等。另外,区块310-1至310-8中的每个的滤波器数据从滤波器f划分而来,因此区块310-1至310-8中的每个的滤波器数据的大小可相等。因此,
在上面的表1中,s
a000
至s
a111
可相等。同样地,接收数据量(由核2至核4中的每个从l2存储器接收的区块310-1至310-8中的每个的输入数据和滤波器数据的量)针对核2至核4中的每个可相同。
[0079]
核1至核4中的每个的比较成本可基于针对区块310-1至310-8中的每个计算的核1至核4中的每个的接收数据量而被确定或更新,因此,(例如,使用成本矩阵)确定或更新的核1至核4中的每个的比较成本针对核1至核4中的每个可相同。
[0080]
当核1至核4中的每个的比较成本相同时,处理装置的区块调度器(例如,图2的区块调度器220)可将具有重叠部分的区块分配给同一核。
[0081]
例如,区块310-1和310-3可具有作为重叠部分的输入数据i00,因此区块调度器将区块310-1和310-3分配给核1(例如,图2的核230-1)。区块310-2和310-4具有作为重叠部分的输入数据i01,因此区块调度器将区块310-2和310-4分配给核2。类似地,区块310-5和310-7具有作为重叠部分的输入数据i10,因此区块调度器将区块310-5和310-7分配给核3。另外,区块310-6和310-8具有作为重叠部分的输入数据i11,因此区块调度器将区块310-6和310-8分配给核4,并且当存在这样的附加核时,这一过程继续直到具有作为重叠部分的输入数据的一个或多个最终区块可被分配给第n核(例如,图2的核230-n)。下面的表2指示区块调度器将区块310-1至310-8分配给示例核1至核4的示例。
[0082]
表2:
[0083]
核1区块310-1和310-3核2区块310-2和310-4核3区块310-5和310-7核4区块310-6和310-8
[0084]
作为另一示例,区块310-1和310-5具有作为重叠部分的滤波器数据f00,因此区块调度器可将区块310-1和310-5分配给核1。区块310-2和310-6具有作为重叠部分的滤波器数据f10,因此区块调度器将区块310-2和310-6分配给核2。类似地,区块310-3和310-7具有作为重叠部分的滤波器数据f01,因此区块调度器0将区块310-3和310-7分配给核3。另外,区块310-4和310-8具有作为重叠部分的滤波器数据f11,因此区块调度器将区块310-4和310-8分配给核4。
[0085]
根据示例实施方式,在区块310-1至310-8对应于首先被接收的区块的情况下,区块调度器可将区块310-1至310-8分配给核1至核4(例如,不计算或使用核1至核4中的每个的比较成本)。在这种情况下,区块调度器还可将具有重叠部分的区块分配给同一核。
[0086]
例如,当如上面的表2中所示将区块310-1至310-8分配给核1至核4时,将区块310-1分配给核1的时间点可在将区块310-2分配给核2的时间点之前。在这样的示例中,核2生成取决于分配给核1的区块310-1的输出数据o00v0的输出数据o00v1。例如,核1通过对区块310-1的输入数据i00和滤波器数据f00执行卷积运算来生成输出数据o00v0。在该示例中,核2通过对区块310-2的输入数据i01和滤波器数据f10执行卷积运算来生成i01*f10,从核1接收区块310-1的输出数据o00v0,并且通过将i01*f10和o00v0相加来生成区块310-2的输出数据o00v1。继续该示例,核2因此将区块310-2的输出数据o00v1存储在核2的1级(l1)存储器中。作为另一示例,在将区块310-2分配给核2的时间点在将区块310-1分配给核1的时间点之前的情况下,核1从核2接收区块310-2的输出数据o00v1,并且通过将i00*f00和
o00v1相加来生成输出数据o00v0。核1因此将区块310-1的输出数据o00v0存储在核1的li存储器中。
[0087]
类似于核1如何执行区块310-1以及核2如何执行区块310-2,核1可执行区块310-3以及核2可执行区块310-4,核3可执行区块310-5和310-7,并且核4可执行区块310-6和310-8。
[0088]
区块调度器将从主机210(诸如,图2的主机210)接收的区块320-1至320-8分别分配给核1至核4。这里,区块调度器基于先前分配的区块310-1至310-8中的每个的元信息和区块320-1至320-8中的每个的元信息来确定或更新核1至核4中的每个的比较成本(例如,使用成本矩阵),并且基于核1至核4中的每个的确定或更新的比较成本将区块320-1至320-8分配给核1至核4。
[0089]
为此,区块调度器使用区块310-1至310-8中的每个的元信息和区块320-1至320-8中的每个的元信息,针对区块的配对之间的每个示例接收数据量计算核1至核4中的每个的接收数据量。区块的配对之间的接收数据量可包括区块310-1至310-8中的每个与区块320-1至320-8中的每个的相应的配对中的每个配对之间的计算的接收数据量。作为另一示例,针对核1至核4中的每个,比较成本可包括:一对区块310-1和区块320-1的接收数据量成本、一对区块310-1和区块320-2的接收数据量成本、一对区块310-1和区块320-3的接收数据量成本、
……
、一对区块310-2和区块320-2的接收数据量成本、一对区块310-2和区块320-3的接收数据量成本、一对区块310-2和区块320-4的接收数据量成本、
……
、一对区块310-3和区块320-4的接收数据量成本、一对区块310-3和区块320-5的接收数据量成本、一对区块310-3和区块320-6的接收数据量成本、
……
、一对区块310-4和区块320-5的接收数据量成本、一对区块310-4和区块320-6的接收数据量成本、一对区块310-4和区块320-7的接收数据量成本、
……
、一对区块310-5和区块320-3的接收数据量成本、一对区块310-5和区块320-4的接收数据量成本、
……
、一对区块310-6和区块320-6的接收数据量成本、一对区块310-6和区块320-7的接收数据量成本、
……
、一对区块310-7和区块320-3的接收数据量成本、一对区块310-7和区块320-4的接收数据量成本、
……
、一对区块310-8和区块320-7的接收数据量成本、以及一对区块310-8和区块320-8的接收数据量成本。如以上和以下进一步讨论的,图7还以成本矩阵形式示出这些配对的相应的比较成本,注意,针对这样的相应的比较成本的成本矩阵的使用仅是示例,并且示例不限于此。无论如何,为了便于解释,将通过成本矩阵形式讨论针对每个核的这样的相应的比较成本。
[0090]
例如,图5示出区块调度器(例如,图2的区块调度器220)如何针对区块310-8和320-8的配对计算核2的成本矩阵的接收数据量s
a111-b111
的示例,示出核2对输出q11v1的计算发生在核4对输出o11v1的计算之后,其中输出o11v1必须被显示传送到核2用于计算输出q11v1。图6示出区块调度器(例如,图2的区块调度器220)如何针对区块310-2和320-3的配对计算核2的接收数据量s
a001-b010
的示例。在该示例中,关于区块310-2的输出可被存储在核2的l1存储器中,以用于随后的关于区块320-3的输出的计算。
[0091]
例如,参照图5,核4接收分配的区块310-8并执行分配的区块310-8,并且将输出数据o11v1存储在核4的l1存储器中。如所示出的,区块310-8的输出数据o11v1是区块320-8的输入数据o11。
[0092]
然而,如所示出的,区块320-8的输入数据o11被存储在核4的l1存储器中,因此核2
可从核4的l1存储器接收区块310-8和320-8的配对中的区块320-8的输入数据o11。换句话说,区块310-8被分配给核4,因此针对区块310-8和320-8的配对,显式传送可在核2与核4之间发生。另外,区块320-8的滤波器数据p11可被存储在处理装置的l2存储器(例如,图2的l2存储器250)中,因此核2还可从l2存储器250接收区块320-8的滤波器数据p11以用于执行区块320-8。
[0093]
因此,在区块310-8和320-8的配对中,与区块320-8的输入数据o11的大小对应的数据传送和与区块320-8的滤波器数据p11的大小对应的数据传送可发生。然后,区块调度器220计算区块320-8的滤波器数据p11的大小与区块320-8的输入数据o11的大小之和,作为针对区块310-8和320-8的配对的核2的成本矩阵的接收数据量s
a111-b111

[0094]
参照图6,核2接收分配的区块310-2并执行分配的区块310-2,然后核2将输出数据o00v1存储在核2的l1存储器中。然后,区块310-2的输出数据o00v1变为区块320-3的输入数据o00。
[0095]
在该示例配对中,区块320-3的输入数据o00已经被存储在核2中,因此核2可不需要从另一核接收(或等待接收)区块320-3的输入数据o00。换句话说,在区块310-2被分配给核2并且区块调度器已经调度将由核2执行的区块320-3的情况下,针对区块310-2和320-3的配对,仅存在发生于核2中的隐式传送(或核内共享)。另外,区块320-3的滤波器数据p01可被存储在处理装置的l2存储器250中,因此当区块320-3由核2执行时,核2可从l2存储器250接收区块320-3的滤波器数据p01。
[0096]
换句话说,在区块310-2和320-3的配对中,可仅发生与区块320-3的滤波器数据p01的大小对应的数据传送。然而,与以上参照图5描述不同,由于输入数据o00已经被存储在核2的l1存储器中,因此与输入数据o00的大小对应的数据传送不会发生。然后,区块调度器针对区块310-2和320-3的配对计算区块320-3的滤波器数据p01的大小作为核2的成本矩阵的接收数据量s
a001-b010

[0097]
类似于以上参照图5和图6描述的示例,区块调度器可针对剩余配对(例如,针对将被分配的剩余区块)中的每个配对计算核2的接收数据量。另外,区块调度器可针对每个配对计算剩余核中的每个核的接收数据量。
[0098]
例如,区块调度器例如使用针对每个配对计算的核1至核4中的每个的接收数据量来更新核1至核4中的每个的成本矩阵。
[0099]
如上所述,图7中示出核2的更新的成本矩阵的示例。
[0100]
例如,区块调度器使用核1至核4中的每个的更新的成本矩阵将区块320-1至320-8分配给核1至核4。在图7中示出的核2的更新的成本矩阵中,区块调度器验证或确定与最小值(例如,最小的计算的接收数据量)对应的区块,并且在对核2的其它分配之前将验证/确定的区块分配给核2。例如,当s
a001-b010
在剩余的计算的接收数据量之中最小时,区块调度器将与s
a001-b010
对应的区块b010(即,区块320-3)分配给核2。同样地,区块调度器类似地分别将与核1、核3和核4的成本矩阵中的每个成本矩阵的相应的计算的最小值对应的区块分配给核1、核3和核4。因此,区块调度器可将区块320-1至320-8分配给核1至核4,使得隐式传送可最大限度地发生,从而可提高处理装置中的核的利用率。
[0101]
下面的表3指示区块调度器将区块320-1至320-8分配给核1至核4的示例。
[0102]
表3:
[0103]
核1区块320-1和320-2核2区块320-3和320-4核3区块320-5和320-6核4区块320-7和320-8
[0104]
核1至核4中的每个可包括区块队列,因此,核1至核4中的每个将区块320-1至320-8之中的分配给核1至核4中的每个的区块入队到它自己的区块队列,并且相应地分别通过dma/mmu从l2存储器预取必要的数据(例如,通过图2的dma/mmu 240从l2存储器250预取必要的数据),这将参照图9更详细地描述。
[0105]
在一个示例中,处理装置还可包括上下文管理器,例如,处理装置可以是图1和图2的处理装置110和/或以下进一步描述的图8和图12至图13的任何处理装置。例如,上下文管理器可管理示例上下文210-3(或示例神经网络模型210-1)的资源信息。例如,处理装置的示例上下文管理器可记录相对于上下文210-3分配哪些核。
[0106]
图8示出执行并发模型时的区块调度的示例。
[0107]
参照图8,执行nn模型1。例如,nn模型1的一个或多个层的执行可由主机请求。例如,计算装置的功能可通过nn模型1的执行而被实现,包括使用分别具有多个处理核的一个或多个处理装置110。作为非限制性示例,主机可以是图2的主机210以及图12和图13的主机,并且一个或多个处理装置110可以是具有多个处理核的相应的神经处理器或加速器。每个处理装置110可具有例如区块调度器、一个或多个l2存储器,并且处理装置的每个核可具有相应的l1存储器以及区块队列。在一个示例中,处理装置110可对应于图1和图2的处理装置110、图13的处理器1210和/或处理装置1310。在一个示例中,区块调度器可以是以上关于图1至图7描述的任何区块调度器。
[0108]
区块调度器将区块810至813分别分配给核1至核4。核1至核4是分布式的,因此可分别执行nn模型1的神经网络操作。在图8的示例中,尽管随后执行的区块820至823可具有与区块810至813中的一个或多个的执行操作不同的依赖性,但是区块810至813可彼此不具有相应依赖性。
[0109]
主机可请求在处理装置中执行nn模型2。作为非限制性示例,可在由核实现区块810至813的执行之后由处理装置的核执行nn模型2的神经网络操作。
[0110]
例如,当主机执行或请求执行nn模型2的操作时,区块调度器允许最近被分配给nn模型1的核的一部分被分配给nn模型2(例如,当nn模型1的操作仍然由或将仍然由除所述核的一部分之外的核执行时)。换句话说,当nn模型2被执行时,区块调度器可将先前或当前分配给nn模型1的资源动态地重新分发(或重新分配)给nn模型2。因此,可公平地分发处理装置的资源,因此可同时执行多个nn模型和/或神经网络操作。作为另一示例,还可类似地动态分配用于nn模型1的不同层的操作的资源(例如,连同nn模型1的区块820至823以及nn模型2的区块830至833和区块840至842)。
[0111]
作为示例,区块调度器可对nn模型1的区块820至823执行区块调度,并且为nn模型2的区块830至833分配资源。如图8中所示,区块调度器将nn模型1的区块820和821分配给核1,并且将nn模型1的区块822和823分配给核3。区块调度器将nn模型2的区块830和832分配给核2,并且将nn模型2的区块831和833分配给核4。
[0112]
区块调度器通过这样的动态区块调度将nn模型2的区块840至843分配给核1至核
4。如图8中所示,区块调度器可将区块840分配给核2,并且将区块841分配给核4。区块调度器将区块842分配给核1,并且将区块843分配给核3。
[0113]
以上关于图1至图7讨论的方法、操作以及主机和处理装置以及以下关于图9至图13的讨论也适用于图8的处理装置110的操作,因此为了简洁,这里将省略重复的描述。
[0114]
图9和图10示出处理装置的区块队列操作的示例。
[0115]
至少包括核1和核2的处理装置的核2可操作核2的区块队列。关于示例核2的这样的下面的描述也可应用于处理装置中的其它核的相应的区块队列(例如,处理装置的核1的区块队列)的操作。处理装置可对应于图1和图2的处理装置、图13的处理器1210和/或处理装置1310。
[0116]
参照图9,在操作910中,核2将分配的区块入队到区块队列。例如,当在图3至图6的以上示例中区块320-3和320-4被分配给核2时,核2可将区块320-3和320-4入队到核2的区块队列。例如,图6示出示例核2可执行针对区块310-2的神经网络操作同时这样的区块320-3和320-4可被入队的示例。例如,在示例区块310-2已经被分配并且区块310-2由核2执行之后,还可由处理装置的区块调度器(例如,诸如,以上关于图1至图8描述的任何区块调度器)新分配附加的神经网络或神经网络操作。
[0117]
因此,在操作920中,例如,依赖于分配的区块320-3和320-4的入队,核2例如确定是否将分配的区块的源数据提取到核2的l1存储器。当神经网络操作是卷积神经网络操作时,例如,源数据可包括区块320-3和320-4的输入数据和/或滤波器数据。例如,如以上参照图6所述,区块320-3的输入数据o00(由核2执行区块310-2产生)被存储在核2的l1存储器中。在该示例中,当核2的l1存储器中存在可用空间时,核2可选择将区块320-3的滤波器数据p01从处理装置的l2存储器提取到例如核2的l1存储器。然而,当核2、处理装置和/或主机确定核2的l1存储器中没有例如足以用于滤波器数据p01的可用空间时,核2可确定或选择不将区块320-3的滤波器数据p01从l2存储器提取到核2的l1存储器。
[0118]
在操作930中,响应于确定或选择核2要将所分配的区块的源数据提取到l1存储器,核2将分配的区块的源数据存储在l1存储器中。在操作950中,响应于确定或选择核2不应将分配的区块的源数据提取到l1存储器,核2等待。
[0119]
在操作940中,当执行序列中的分配的区块的轮次到达时,核2执行分配的区块。例如,当轮到执行位于执行序列中的区块320-3时,核2可使区块320-3出队并执行区块320-3。
[0120]
例如,当核2的区块队列已满时,核2可向区块调度器请求区块调度器不将额外的区块分配给核2,例如,直到核2通过执行仍然在核2的区块队列中排队的一个或多个区块而使区块从核2的区块队列出队。例如,当核2确定区块队列不再满时,例如,当核2完成执行存储在区块队列中的一个或多个区块时,核2可向区块调度器请求区块调度器分配将在核2的区块队列中排队的新区块。
[0121]
当核2的区块队列中没有区块并且新区块尚未被分配给核2时,核2可切换到睡眠模式。换句话说,当核2的区块队列为空时,核2可切换到睡眠模式。核2可由此降低功耗。当区块接下来将被分配给处于睡眠模式下的核2时,核2可切换到唤醒模式并执行区块。
[0122]
图10中示出区块队列的示例。区块队列可以是循环队列,但是示例不限于此。在图10的示例中,循环队列可包括多个条目(例如,条目[0]至条目[qlen])。
[0123]
参照图10,当核2的区块队列的条目[3]为空时,核2将分配的区块入队到条目[3]。
条目[3]可包括与操作(例如,二维[2d]卷积运算、步长等)、输入数据的存储器地址、输入数据的大小、输入数据的范围、滤波器的存储器地址等相关联的信息。
[0124]
如图10中所示,示例区块队列可具有指向条目[0]的头(执行)指针、指向条目[2]的就绪(预取)指针和指向条目[i]的尾(最新)指针。如条目[3]示例中所示,类可被指示为2维(2d)卷积,具有填充、步长(1,1)以及输入特征图[ifm]的信息,步长(1,1)用于相对于卷积运算的内核(滤波器)的卷积运算。
[0125]
图11示出处理装置的操作方法的示例的流程图。
[0126]
参照图11,在操作1110中,处理装置基于当前分配给多个核的第一区块中的每个的元信息和被设置为将被分配给处理装置的一个或多个核的第二区块中的每个的元信息,更新处理装置的多个核中的每个的成本矩阵。
[0127]
在操作1120中,例如,处理装置基于多个核中的每个的更新的成本矩阵将第二区块分配给一个或多个核。
[0128]
当前分配的区块可包括与nn模型的操作对应的区块,第二区块可包括与另一nn模型的操作对应的区块和/或与nn模型的在当前分配的区块随后的另一操作对应的区块。例如,处理装置可将与另一nn模型的操作对应的第二区块分配给多个核的一部分,使得资源被动态地分发以用于执行另一nn模型。以上和以下描述的针对多个nn和处理装置的多个核的资源的这样的动态分发(作为非限制性示例,诸如,关于图8的讨论)的详细描述适用于图11的操作。
[0129]
图12和图13示出计算装置的示例。
[0130]
参照图12,计算装置1200包括主机210和处理器1210。主机210可对应于以上描述的主机,处理器1210可对应于以上描述的处理装置和处理装置110中的任何一个或任何组合。
[0131]
尽管计算装置1200在图12中被示出为包括单个处理器,但是其仅作为示例提供,并且计算装置1200可包括多个处理器,每个处理器与以上描述的任何处理装置中的任何对应。
[0132]
计算装置1200可以是被配置为处理大量数据的装置。例如,计算装置1200可以是服务器计算机。然而,计算装置1200不限于此,并且可以是移动终端(诸如,以移动电话和平板个人计算机(pc)为例)。
[0133]
主机210可包括中央处理器(cpu)。主机210可从多个用户终端(例如,智能电话、平板pc、物联网(iot)装置等)和/或针对计算装置1300的多个功能接收推断请求。处理器1210可通过至少一个nn模型响应于推断请求而生成推断结果。例如,主机210可通过如上所述地生成区块并且通过如以上关于图1至图11所述的区块调度在多个核之间动态地分配区块来快速生成推断结果。主机210可将推断结果发送给每个用户终端,或者根据执行的nn的结果来控制计算装置的操作。例如,推断请求可与计算装置的基于计算机视觉的对象识别功能、计算装置的模式识别功能等相关,但是其示例不限于此。
[0134]
参照图13,计算装置1300可包括主机210、处理器1310、存储器控制器1320、3级(l3)存储器1330、片外存储器1340以及总线1350。处理器1310可对应于以上关于图1至图12描述的处理装置中的任何一个或任何组合。
[0135]
主机210、处理器1310、存储器控制器1320、l3存储器1330以及片外存储器1340可
通过总线1350彼此通信。
[0136]
尽管计算装置1300在图13中被示出为包括单个处理器1310,但这仅是示例,计算装置1300可包括多个处理器1310。
[0137]
计算装置1300可以是被配置为处理海量或大量数据的装置。例如,计算装置可以是服务器计算机。然而,计算装置1300不限于此,并且可以是移动终端(诸如,以移动电话和平板pc为例)。
[0138]
处理器1310包括多个l1存储器1311-1至1311-n以及l2存储器1312。如上所述,处理器1310包括多个核。
[0139]
在图13的示例中,存储器控制器1320可执行区块调度器(诸如,区块调度器220以及以上关于图1至图12描述的任何区块调度器)的操作。例如,存储器控制器1320可与处理器1310分开,但是示例不限于此。如以上关于图12的计算装置1200所讨论的,可在处理器1210的层级执行区块调度。针对参照图13描述的计算装置1300,存储器控制器1320可执行区块调度器的操作,因此可在较上层级执行区块调度。返回参照图5,例如,区块320-8的滤波器数据p11的一部分可被存储在l3存储器1330中,并且滤波器数据p11的剩余数据可被存储在l2存储器1312中。在这种情况下,存储器控制器1320可计算存储在l3存储器1330中的部分滤波器数据的大小、存储在l2存储器1312中的剩余滤波器数据的大小和输入数据o11的大小的总和作为核2的接收数据量。
[0140]
存储器控制器1320可更新处理器1310中的每个核的成本矩阵,并且使用每个核的更新的成本矩阵将区块分配给处理器1310中的核。
[0141]
片外存储器1340可设置在处理器1310外部。片外存储器1340可包括动态随机存取存储器(dram)。片外存储器1340可存储nn模型的参数,但是示例不限于此。
[0142]
因此,以上关于图1至图11的描述也适用于图12和13的示例。
[0143]
在此关于图1至图13描述的处理装置、主机、处理器、编译器、区块调度器、处理核、l1、l2和l3存储器、区块队列、计算装置以及其它装置、设备、单元和组件通过硬件组件来实现。可用于执行在本技术中描述的操作的硬件组件的示例在适当的情况下包括:控制器、传感器、生成器、驱动器、存储器、比较器、算术逻辑单元、加法器、减法器、乘法器、除法器、积分器和被配置为执行在本技术中描述的操作的任何其它电子组件。在其它示例中,执行在本技术中描述的操作的硬件组件中的一个或多个通过计算硬件(例如,通过一个或多个处理器或计算机)来实现。可通过一个或多个处理元件(诸如,逻辑门阵列、控制器和算术逻辑单元、数字信号处理器、微型计算机、可编程逻辑控制器、现场可编程门阵列、可编程逻辑阵列、微处理器或被配置为以限定的方式响应并执行指令以实现期望的结果的任何其它装置或装置的组合)来实现处理器或计算机。在一个示例中,处理器或计算机包括或连接到存储由处理器或计算机执行的指令或软件的一个或多个存储器。由处理器或计算机实现的硬件组件可执行用于执行在本技术中描述的操作的指令或软件(诸如,操作系统(os)和在os上运行的一个或多个软件应用)。硬件组件还可响应于指令或软件的执行来访问、操控、处理、创建和存储数据。为了简单起见,单数术语“处理器”或“计算机”可在本技术中描述的示例的描述中被使用,但是在其它示例中,多个处理器或计算机可被使用,或者处理器或计算机可包括多个处理元件或多种类型的处理元件或二者。例如,单个硬件组件或者两个或更多个硬件组件可通过单个处理器、或者两个或更多个处理器、或者处理器和控制器来实现。一
个或多个硬件组件可通过一个或多个处理器、或者处理器和控制器来实现,并且一个或多个其它硬件组件可通过一个或多个其它处理器,或者另外的处理器和另外的控制器来实现。一个或多个处理器、或者处理器和控制器可实现单个硬件组件或者两个或更多个硬件组件。硬件组件可具有不同的处理配置中的任何一个或任何多个,不同的处理配置的示例包括:单个处理器、独立处理器、并行处理器、单指令单数据(sisd)多处理、单指令多数据(simd)多处理、多指令单数据(misd)多处理以及多指令多数据(mimd)多处理。
[0144]
图1至图13中示出的执行在本技术中描述的操作的方法通过计算硬件(例如,通过一个或多个处理器或计算机)来执行,计算硬件被如上所述地实现为执行指令或软件,以执行在本技术中描述的由所述方法执行的操作。例如,单个操作或者两个或更多个操作可通过单个处理器、或者两个或更多个处理器、或者处理器和控制器来执行。一个或多个操作可通过一个或多个处理器、或者处理器和控制器来执行,并且一个或多个其它操作可通过一个或多个其它处理器、或者另外的处理器和另外的控制器来执行。一个或多个处理器、或者处理器和控制器可执行单个操作或者两个或更多个操作。
[0145]
用于控制计算硬件(例如,一个或多个处理器或计算机)以实现硬件组件并执行如上所述的方法的指令或软件可被编写为计算机程序、代码段、指令或它们的任何组合,以单独地或共同地指示或配置一个或多个处理器或计算机如机器或专用计算机那样进行操作,以执行由如上所述的硬件组件和方法执行的操作。在一个示例中,指令或软件包括由一个或多个处理器或计算机直接执行的机器代码(诸如,由编译器产生的机器代码)。在另一示例中,指令或软件包括由一个或多个处理器或计算机使用解释器执行的高级代码。可基于附图中示出的框图和流程图以及在此使用的相应描述,使用任何编程语言编写指令或软件,附图中示出的框图和流程图以及在此使用的相应描述公开了用于执行由如上所述的硬件组件和方法执行的操作的算法。
[0146]
用于控制计算硬件(例如,一个或多个处理器或计算机)以实现硬件组件并执行如上所述的方法的指令或软件以及任何相关联的数据、数据文件和数据结构可被记录、存储或固定在一个或多个非暂时性计算机可读存储介质中或一个或多个非暂时性计算机可读存储介质上。非暂时性计算机可读存储介质的示例包括:只读存储器(rom)、随机存取可编程只读存储器(prom)、电可擦除可编程只读存储器(eeprom)、随机存取存储器(ram)、动态随机存取存储器(dram)、静态随机存取存储器(sram)、闪存、非易失性存储器、cd-rom、cd-r、cd+r、cd-rw、cd+rw、dvd-rom、dvd-r、dvd+r、dvd-rw、dvd+rw、dvd-ram、bd-rom、bd-r、bd-r lth、bd-re、蓝光或光盘存储器、硬盘驱动器(hdd)、固态驱动器(ssd)、卡式存储器(诸如,多媒体卡或者微型卡(例如,安全数字(sd)或者极速数字(xd)))、磁带、软盘、磁光数据存储装置、光学数据存储装置、硬盘、固态盘、以及任何其它装置,任何其它装置被配置为以非暂时性方式存储指令或软件以及任何相关联的数据、数据文件和数据结构并将指令或软件以及任何相关联的数据、数据文件和数据结构提供给一个或多个处理器或计算机,使得一个或多个处理器和计算机可执行指令。在一个示例中,指令或软件以及任何相关联的数据、数据文件和数据结构分布在联网的计算机系统上,使得指令和软件以及任何相关联的数据、数据文件和数据结构通过一个或多个处理器或计算机以分布式的方式被存储、访问和执行。
[0147]
虽然本公开包括特定的示例,但是在理解本技术的公开之后将清楚,在不脱离权利要求及它们的等同物的精神和范围的情况下,可在这些示例中进行形式和细节上的各种
改变。在此描述的示例将被认为仅是描述性的,而不是出于限制的目的。每个示例中的特征或方面的描述将被认为可适用于其它示例中的类似特征或方面。如果描述的技术以不同的次序被执行,和/或如果描述的系统、架构、装置或电路中的组件以不同的方式被组合,和/或由其它组件或它们的等同物替换或补充,则可实现合适的结果。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1