数据管理装置及数据管理方法转让专利

申请号 : CN202111372737.2

文献号 : CN113808000B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 不公告发明人

申请人 : 北京壁仞科技开发有限公司上海壁仞智能科技有限公司

摘要 :

本发明提供一种数据管理装置及数据管理方法。所述数据管理装置包括数据读取分发电路以及多个存器。数据读取分发电路耦接至这些寄存器。数据读取分发电路基于数据请求从外部存储器提取多个数据。数据读取分发电路基于数据请求的数据配置方式将这些寄存器划分为至少一个寄存器群组,将所述多个数据划分为对应所述至少一个寄存器群组的至少一个数据群组,以及将将所述至少一个数据群组中的每一个数据群组的所有数据分发至所述至少一个寄存器群组中的对应寄存器群组的每一个寄存器。

权利要求 :

1.一种数据管理装置,其特征在于,所述数据管理装置包括:多个寄存器;以及

数据读取分发电路,耦接至所述多个寄存器,其中所述数据读取分发电路基于数据请求从外部存储器提取多个数据,所述数据读取分发电路基于所述数据请求的数据配置方式将所述多个寄存器划分为至少一个寄存器群组,将所述多个数据划分为一对一地对应所述至少一个寄存器群组的至少一个数据群组,以及将所述至少一个数据群组中的每一个数据群组的所有数据广播至所述至少一个寄存器群组中的对应寄存器群组的每一个寄存器的相同地址。

2.根据权利要求1所述的数据管理装置,其特征在于,在所述数据读取分发电路基于所述数据请求的所述数据配置方式将所述多个寄存器划分为一个寄存器群组的情况下,所述数据读取分发电路将所述多个数据广播至所述多个寄存器的每一个寄存器的相同地址。

3.根据权利要求1所述的数据管理装置,其特征在于,在所述数据读取分发电路基于所述数据请求的所述数据配置方式将所述多个寄存器划分为多个寄存器群组的情况下,所述数据读取分发电路将对应所述多个寄存器群组的多个数据群组中的每一个数据群组的所有数据广播至对应寄存器群组的每一个寄存器的相同地址。

4.根据权利要求1所述的数据管理装置,其特征在于,所述数据管理装置还包括:配置单元,耦接至所述数据读取分发电路,用以发出数据初始化请求给所述数据读取分发电路,

其中所述数据读取分发电路基于所述数据初始化请求从所述外部存储器提取多个初始数据,所述数据读取分发电路基于所述数据初始化请求的数据配置方式将所述多个寄存器划分为所述至少一个寄存器群组,将所述多个初始数据划分为对应所述至少一个寄存器群组的所述至少一个数据群组,以及将所述至少一个数据群组中的每一个数据群组的所有初始数据分发至所述至少一个寄存器群组中的对应寄存器群组的每一个寄存器。

5.根据权利要求4所述的数据管理装置,其特征在于,所述数据读取分发电路基于所述数据初始化请求的所述数据配置方式将所述每一个数据群组的所有初始数据分发至对应寄存器群组的每一个寄存器的相同地址。

6.根据权利要求4所述的数据管理装置,其特征在于,在所述数据读取分发电路基于所述数据初始化请求的所述数据配置方式将所述多个寄存器划分为多个寄存器群组的情况下,所述数据读取分发电路将对应所述多个寄存器群组的多个数据群组中的每一个数据群组的所有初始数据广播至对应寄存器群组的每一个寄存器的相同地址。

7.根据权利要求1所述的数据管理装置,其特征在于,还包括:流处理器簇,所述流处理器簇包括多个执行单元,其中所述多个执行单元一对一地耦接至所述多个寄存器,以及所述多个执行单元的每一个从所述多个寄存器中的一个对应寄存器读取至少一个数据以进行计算。

8.根据权利要求7所述的数据管理装置,其特征在于,所述流处理器簇输出所述数据请求至所述数据读取分发电路,以实时更新在所述多个寄存器中的数据。

9.根据权利要求1所述的数据管理装置,其特征在于,所述数据为常数数据,所述寄存器为常数寄存器。

10.一种数据管理方法,其特征在于,所述数据管理方法包括:由数据读取分发电路基于数据请求从外部存储器提取多个数据;

由所述数据读取分发电路基于所述数据请求的数据配置方式将多个寄存器划分为至少一个寄存器群组;

将所述多个数据划分为一对一地对应所述至少一个寄存器群组的至少一个数据群组;

以及

将所述至少一个数据群组中的每一个数据群组的所有数据广播至所述至少一个寄存器群组中的对应寄存器群组的每一个寄存器的相同地址。

11.根据权利要求10所述的数据管理方法,其特征在于,所述数据管理方法还包括:在所述数据读取分发电路基于所述数据请求的所述数据配置方式将所述多个寄存器划分为一个寄存器群组的情况下,由所述数据读取分发电路将所述多个数据广播至所述多个寄存器的每一个寄存器的相同地址。

12.根据权利要求10所述的数据管理方法,其特征在于,所述数据管理方法还包括:在所述数据读取分发电路基于所述数据请求的所述数据配置方式将所述多个寄存器划分为多个寄存器群组的情况下,由所述数据读取分发电路将对应所述多个寄存器群组的多个数据群组中的每一个数据群组的所有数据广播至对应寄存器群组的每一个寄存器的相同地址。

13.根据权利要求10所述的数据管理方法,其特征在于,所述数据管理方法还包括:由配置单元发出数据初始化请求给所述数据读取分发电路;

由所述数据读取分发电路基于所述数据初始化请求,从所述外部存储器提取多个初始数据;

由所述数据读取分发电路基于所述数据初始化请求的数据配置方式,将所述多个寄存器划分为所述至少一个寄存器群组;

将所述多个初始数据划分为对应所述至少一个寄存器群组的所述至少一个数据群组;

以及

将所述至少一个数据群组中的每一个数据群组的所有初始数据分发至所述至少一个寄存器群组中的对应寄存器群组的每一个寄存器。

14.根据权利要求13所述的数据管理方法,其特征在于,所述数据管理方法还包括:由所述数据读取分发电路基于所述数据初始化请求的所述数据配置方式,将所述每一个数据群组的所有初始数据分发至对应寄存器群组的每一个寄存器的相同地址。

15.根据权利要求13所述的数据管理方法,其特征在于,所述数据管理方法还包括:在所述数据读取分发电路基于所述数据初始化请求的所述数据配置方式将所述多个寄存器划分为多个寄存器群组的情况下,由所述数据读取分发电路将对应所述多个寄存器群组的多个数据群组中的每一个数据群组的所有初始数据广播至对应寄存器群组的每一个寄存器的相同地址。

16.根据权利要求10所述的数据管理方法,其特征在于,所述数据管理方法还包括:由流处理器簇的多个执行单元的每一个从多个寄存器中的一个对应寄存器读取至少一个常数以进行计算,其中所述多个执行单元一对一地耦接至所述多个寄存器。

17.根据权利要求16所述的数据管理方法,其特征在于,所述数据管理方法还包括:由所述流处理器簇输出所述数据请求至所述数据读取分发电路,以实时更新在所述多个寄存器中的数据。

18.根据权利要求10所述的数据管理方法,其特征在于,所述数据为常数数据,所述寄存器为常数寄存器。

说明书 :

数据管理装置及数据管理方法

技术领域

[0001] 本发明涉及一种电子装置,且特别涉及一种数据管理装置及数据管理方法。

背景技术

[0002] 在图形处理单元上的通用计算(general‑purpose computing on graphics processing units,GPGPU)是利用处理图形任务的图形处理器来计算原本由中央处理器
(central processing unit,CPU)处理的通用计算任务。这些通用计算任务可以与图形处
理没有关系。由于图形处理器有强大的并列处理能力和可程序化管线(pipeline),图形处
理器也可以处理非图形数据。特别是单指令流多数据流(single instruction multiple 
data,SIMD),GPGPU在效能上大大超越了传统的CPU应用程序。
[0003] 在GPGPU的设计中,每个执行单元(execution unit,EU)有一个属于自己的常数寄存器(constant buffer)。在正常工作中,每个执行单元会基于程序执行需求而去自己专用
的常数寄存器取用常数数据。在程序执行之前,配置单元发送数据读取请求给常数读取广
播单元。常数读取广播单元将收到的数据读取请求转发给外部存储器。在外部存储器返回
常数数据后,常数读取广播单元将数据广播给所有的常数寄存器。因此在程序执行的过程
中,执行单元可以根据需要而去访问其对应的常数寄存器。
[0004] 现有的这种工作模式有以下特点:1)常数寄存器只有在程序执行前初始化一次;2)每个常数寄存器的内容完全一致。无论如何,常数寄存器的内容在每个程序的执行过程
中无法被更新,致使存储空间利用率较低。再者,如果不同执行单元使用不同的常数数据,
在常数寄存器中的有效存放数据少。举例来说,假设n个执行单元使用不同的卷积核
(convolution kernel),则这n个卷积核会被存储于每个常数寄存器中。然而,任何一个执
行单元只使用这n个卷积核中的一个,而其他未被使用的卷积核将占用大量存储空间。如何
更有效率地管理与使用常数寄存器,是本领域的重要技术课题之一。

发明内容

[0005] 本发明提供一种数据管理装置及数据管理方法,以有效率地管理与使用寄存器(buffer)。
[0006] 在根据本发明的实施例中,所述数据管理装置包括数据读取分发电路以及多个寄存器。数据读取分发电路耦接至所述多个寄存器。所述数据读取分发电路基于数据请求从
外部存储器提取多个数据。所述数据读取分发电路基于所述数据请求的数据配置方式将所
述多个寄存器划分为至少一个寄存器群组,将所述多个数据划分为对应所述至少一个寄存
器群组的至少一个数据群组,以及将所述至少一个数据群组中的每一个数据群组的所有数
据分发至所述至少一个寄存器群组中的对应寄存器群组的每一个寄存器。
[0007] 在根据本发明的实施例中,所述数据管理方法包括:由数据读取分发电路基于数据请求从外部存储器提取多个数据;由所述数据读取分发电路基于所述数据请求的数据配
置方式将所述多个寄存器划分为至少一个寄存器群组;将所述多个数据划分为对应所述至
少一个寄存器群组的至少一个数据群组;以及将所述至少一个数据群组中的每一个数据群
组的所有数据分发至所述至少一个寄存器群组中的对应寄存器群组的每一个寄存器。
[0008] 基于上述,本发明诸实施例所述的数据管理装置具有可配置的数据分发功能。在一些实际操作情境中,基于所述数据请求的数据配置方式,数据读取分发电路可以拆分从
外部存储器提取的数据而产生多笔经拆分常数数据,以及将多个寄存器划分为多个寄存器
群组。数据读取分发电路可以将这些经拆分常数数据一对一地分发给这些寄存器群组。因
此,不同寄存器群组的内容可以互不相同,使得数据读取分发电路可以有效率地管理与使
用寄存器的存储空间。

附图说明

[0009] 图1是依照本发明的一实施例的一种数据管理装置的电路方块(circuit block)示意图。
[0010] 图2是依照本发明的一实施例的一种数据管理方法的流程示意图。
[0011] 图3是依照本发明的一实施例所绘示,图1所示数据读取分发电路将数据存储至寄存器的数据分发情境示意图。
[0012] 图4是依照本发明的另一实施例所绘示,图1所示数据读取分发电路将数据存储至寄存器的数据分发情境示意图。
[0013] 图5是依照本发明的又一实施例所绘示,图1所示数据读取分发电路将数据存储至寄存器的数据分发情境示意图。
[0014] 附图标记说明
[0015] 10:外部存储器
[0016] 100:数据管理装置
[0017] 110:流处理器簇
[0018] 111:数据请求
[0019] 120:数据读取分发电路
[0020] 130:配置单元
[0021] 131:数据初始化请求
[0022] addr_1、addr_2、addr_m:地址
[0023] CB_1、CB_2、CB_3、CB_4、CB_n:寄存器
[0024] D_1、D_2、D_3、D_4、D_5、D_6、D_7、D_8:数据
[0025] EU_1、EU_2、EU_n:执行单元
[0026] S210~S230:步骤。

具体实施方式

[0027] 现将详细地参考本发明的示范性实施例,示范性实施例的实例说明于附图中。只要有可能,相同组件符号在附图和描述中用来表示相同或相似部分。
[0028] 在本案说明书全文(包括权利要求)中所使用的“耦接(或连接)”一词可指任何直接或间接的连接手段。举例而言,若文中描述第一装置耦接(或连接)于第二装置,则应该被
解释成该第一装置可以直接连接于该第二装置,或者该第一装置可以透过其他装置或某种
连接手段而间接地连接至该第二装置。本案说明书全文(包括权利要求)中提及的“第一”、
“第二”等用语是用以命名组件(element)的名称,而并非用来限制组件数量的上限或下限,
亦非用来限制组件的次序。另外,凡可能之处,在附图及实施方式中使用相同标号的组件/
构件/步骤代表相同或类似部分。不同实施例中使用相同标号或使用相同用语的组件/构
件/步骤可以相互参照相关说明。
[0029] 作为实例,下述诸实施例可以应用于在图形处理单元上的通用计算(general‑purpose computing on graphics processing units,GPGPU)的片上常数寄存器(on‑chip 
constant buffer)或是其他片上常数寄存器的数据管理。举例来说(但不限于此),下述诸
实施例可以适用于人工智能(artificial intelligence, AI)的应用场景。下述诸实施例
将说明一种可配置的高效的数据管理方式,提高了寄存器(例如常数寄存器)的使用效率,
减少了通用寄存器的访问带宽。
[0030] 图1是依照本发明的一实施例的一种数据管理装置100的电路方块(circuit block)示意图。图1所示数据管理装置100包括流处理器簇(stream processor cluster)
110以及多个寄存器(例如常数寄存器)CB_1、CB_2、…、CB_n。流处理器簇110包括多个执行
单元(execution unit,EU)EU_1、EU_2、…、EU_n。寄存器CB_1~CB_n与执行单元EU_1~EU_n
m
的数量n可以是依照实际设计所决定的整数(例如n=2 ,m为正整数)。这些执行单元EU_1~
EU_n各自具有地址addr_1、addr_2、…、addr_m的存储空间。地址addr_1~addr_m的数量m可
以是依照实际设计所决定的整数。这些执行单元EU_1~EU_n一对一地耦接至寄存器CB_1~
CB_n。这些执行单元EU_1~EU_n的每一个从寄存器CB_1~CB_n中的一个对应寄存器读取至
少一个数据(例如常数)以进行计算。所述计算可以是任何应用程序的计算。举例来说(但不
限于此),流处理器簇110所进行的计算可以是人工智能(AI)的程序计算。
[0031] 图1所示数据管理装置100还包括数据读取分发电路120以及配置单元130。配置单元130耦接至数据读取分发电路120。数据读取分发电路120耦接至这些寄存器CB_1~CB_n。
基于数据请求(例如流处理器簇110所发出的数据请求111以及/或是配置单元130所发出的
数据初始化请求131),数据读取分发电路120可以从外部存储器10提取多笔(或多个)数据,
例如常数数据。然后基于所述数据请求的所述数据配置方式,数据读取分发电路120可以将
数据以数据广播(broadcast)以及(或是)数据拆分(split)方式分发给这些寄存器CB_1~
CB_n。
[0032] 外部存储器10可以包括高带宽存储器(High Bandwidth Memory, HBM)、动态随机存取存储器(Dynamic Random Access Memory, DRAM)静态随机存取存储器(Static 
Random‑Access Memory, SRAM)、磁阻式随机存取存储器(Magnetoresistive Random 
Access Memory, MRAM)、相变化存储器(Phase‑change memory, PRAM),以及阻变式存储器
(Resistive Random Access Memory, RRAM)等。
[0033] 图2是依照本发明的一实施例的一种数据管理方法的流程示意图。请参照图1与图2。在步骤S210中,数据读取分发电路120可以基于数据请求(例如数据请求111以及/或是数
据初始化请求131)从外部存储器10提取多个数据。在步骤S220中,基于数据请求(例如数据
请求111以及/或是数据初始化请求131)的数据配置方式,数据读取分发电路120可以将寄
存器CB_1~CB_n划分为至少一个寄存器群组,以及将从外部存储器10提取的所述多个数据
划分为对应所述至少一个寄存器群组的至少一个数据群组。在步骤S230中,数据读取分发
电路120可以基将所述至少一个数据群组中的每一个数据群组的所有数据分发至所述至少
一个寄存器群组中的对应寄存器群组的每一个寄存器。
[0034] 举例来说,配置单元130可以发出数据初始化请求131给数据读取分发电路120。数据读取分发电路120可以基于所述数据初始化请求131从外部存储器10提取多个初始数据。
基于数据初始化请求131的数据配置方式,数据读取分发电路120可以将这些寄存器CB_1~
CB_n划分为多个寄存器群组,以及将所述多个初始数据划分为对应所述至少一个寄存器群
组的所述至少一个数据群组。数据读取分发电路120可以将所述至少一个数据群组中的每
一个数据群组的所有初始数据分发至所述至少一个寄存器群组中的对应寄存器群组的每
一个寄存器。
[0035] 再举例来说,流处理器簇110在执行应用程序的过程中发出数据请求111给数据读取分发电路120,以实时更新在这些寄存器CB_1~CB_n中的所述应用程序所使用的数据。数
据读取分发电路120可以基于数据请求111从外部存储器10提取多笔数据,例如常数数据。
基于数据请求111的数据配置方式,数据读取分发电路120可以将这些寄存器CB_1~CB_n划
分为多个寄存器群组,以及将所述多个初始数据划分为对应所述至少一个寄存器群组的所
述至少一个数据群组。数据读取分发电路120可以将对应所述多个寄存器群组的多个数据
群组中的每一个数据群组的所有初始数据广播至对应寄存器群组的每一个寄存器的相同
地址。
[0036] 图3是依照本发明的一实施例所绘示,图1所示数据读取分发电路120将数据(例如常数数据)存储至寄存器CB_1~CB_n的数据分发情境示意图。在图3所示情境范例中,寄存
器CB_1~CB_n的数量n被假设为4,而数据读取分发电路120基于数据请求(例如数据请求
111以及/或是数据初始化请求131)从外部存储器10提取8笔数据(例如初始数据)D_1、D_2、
D_3、D_4、D_5、D_6、D_7与D_8。基于所述数据请求的数据配置方式,数据读取分发电路120决
定将寄存器CB_1、CB_2、CB_3与CB_4划分为4个寄存器群组(每一个寄存器群组只有一个寄
存器),以及将数据D_1~D_8划分为对应所述4个寄存器群组的4个数据群组。数据读取分发
电路120可以基于所述数据请求的数据配置方式,将每一个数据群组的所有初始数据分发
至对应寄存器群组的每一个寄存器的相同地址。举例来说,数据读取分发电路120可以将第
一个数据群组(数据D_1与D_2)分发给第一个寄存器群组(寄存器CB_1),将第二个数据群组
(数据D_3与D_4)分发给第二个寄存器群组(寄存器CB_2),将第三个数据群组(数据D_5与D_
6)分发给第三个寄存器群组(寄存器CB_3),以及将第四个数据群组(数据D_7与D_8)分发给
第四个寄存器群组(寄存器CB_4)。
[0037] 在数据读取分发电路120基于所述数据请求的数据配置方式将多个寄存器CB_1~CB_n划分为多个寄存器群组的情况下,数据读取分发电路120将对应所述多个寄存器群组
的多个数据群组中的每一个数据群组的所有数据广播至对应寄存器群组的每一个寄存器
的相同地址。图4是依照本发明的另一实施例所绘示,图1所示数据读取分发电路120将数据
存储至寄存器CB_1~CB_n的数据分发情境示意图。在图4所示情境范例中,寄存器CB_1~
CB_n的数量n被假设为4,而数据读取分发电路120基于数据请求(例如数据请求111以及/
或是数据初始化请求131)从外部存储器10提取8笔数据(例如初始数据)D_1~D_8。基于所
述数据请求的数据配置方式,数据读取分发电路120决定将寄存器CB_1~CB_4划分为2个寄
存器群组(每一个寄存器群组有2个寄存器),以及将数据D_1~D_8拆分为对应所述2个寄存
器群组的2个数据群组。数据读取分发电路120可以基于所述数据请求的数据配置方式,将
这2个数据群组一对一地分发给这2个寄存器群组的相同地址。举例来说,数据读取分发电
路120可以基于所述数据请求的数据配置方式将第一个数据群组(数据D_1~D_4)广播给同
属第一寄存器群组的所有寄存器CB_1与CB_2的相同地址,以及将第二个数据群组(数据D_5
~D_8)广播给同属第二寄存器群组的寄存器CB_3与CB_4的相同地址。
[0038] 在数据读取分发电路120基于所述数据请求的数据配置方式将所述多个寄存器CB_1~CB_n划分为一个寄存器群组的情况下,数据读取分发电路120将所述多个数据广播
至所述多个寄存器的每一个寄存器的相同地址。图5是依照本发明的又一实施例所绘示,图
1所示数据读取分发电路120将数据(例如常数数据)存储至寄存器CB_1~CB_n的数据分发
情境示意图。在图5所示情境范例中,寄存器CB_1~CB_n的数量n被假设为4,而数据读取分
发电路120基于数据请求(例如数据请求111以及/或是数据初始化请求131)从外部存储器
10提取8笔数据(例如初始数据)D_1~D_8。基于所述数据请求的数据配置方式,数据读取分
发电路120不拆分数据D_1~D_8。在数据读取分发电路120决定不拆分数据D_1~D_8的情况
下,数据读取分发电路120可以将寄存器CB_1~CB_4视为同一个寄存器群组,以及数据读取
分发电路120可以基于所述数据请求将数据D_1~D_8广播至寄存器CB_1~CB_4的相同地
址。
[0039] 综上所述,诸实施例所述的数据管理装置100具有可配置的数据分发功能。在一些实际操作情境中,基于数据请求(例如数据请求111以及/或是数据初始化请求131)的数据
配置方式,数据读取分发电路120可以拆分从外部存储器10提取的数据而产生多个数据群
组,以及将多个寄存器CB_1~CB_n划分为多个寄存器群组。数据读取分发电路120可以将这
些数据群组一对一地分发给这些寄存器群组。因此,不同寄存器群组的内容可以互不相同,
使得数据读取分发电路120可以有效率地管理与使用寄存器CB_1~CB_n的存储空间。
[0040] 依照不同的设计需求,上述流处理器簇110、数据读取分发电路120以及(或是)配置单元130的实现方式可以是硬件(hardware)、固件(firmware)、软件(software,即程序)
或是前述三者中的多者的组合形式。以硬件形式而言,上述流处理器簇110、数据读取分发
电路120以及(或是)配置单元130可以实现于集成电路(integrated circuit)上的逻辑电
路。上述流处理器簇110、数据读取分发电路120以及(或是)配置单元130的相关功能可以利
用硬件描述语言(hardware description languages,例如Verilog HDL或VHDL)或其他合
适的编程语言来实现为硬件。举例来说,上述流处理器簇110、数据读取分发电路120以及
(或是)配置单元130的相关功能可以被实现于一或多个控制器、微控制器、微处理器、特殊
应用集成电路(Application‑specific integrated circuit, ASIC)、数字信号处理器
(digital signal processor, DSP)、场可程序逻辑门阵列(Field Programmable Gate 
Array, FPGA)及/或其他处理单元中的各种逻辑区块、模块和电路。以软件形式及/或固件
形式而言,上述流处理器簇110、数据读取分发电路120以及(或是)配置单元130的相关功能
可以被实现为编程码(programming codes)。例如,利用一般的编程语言(programming 
languages,例如C、C++或汇编语言)或其他合适的编程语言来实现上述流处理器簇110、数
据读取分发电路120以及(或是)配置单元130。所述编程码可以被记录/存放在“非临时的计
算机可读取媒体(non‑transitory computer readable medium)”中。在一些实施例中,所
述非临时的计算机可读取媒体例如包括带(tape)、碟(disk)、卡(card)、半导体内存、可程
序设计的逻辑电路以及(或是)存储装置。所述存储装置包括硬盘(hard disk drive,HDD)、
固态硬盘(Solid‑state drive,SSD)或是其他存储装置。中央处理器(Central Processing 
Unit,CPU)、控制器、微控制器或微处理器可以从所述非临时的计算机可读取媒体中读取并
执行所述编程码,从而实现上述流处理器簇110、数据读取分发电路120以及(或是)配置单
元130的相关功能。
[0041] 最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依
然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进
行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术
方案的范围。