一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

利用梅森数或者费马数快速计算模运算的技术和应用的制作方法

2022-02-22 07:47:38 来源:中国专利 TAG:

利用梅森数或者费马数快速计算模运算的技术和应用
1.各种实施例的领域
2.各种实施例通常涉及计算机处理架构,更具体来说,涉及通过梅森数或费马数快速计算模运算的技术和应用。
3.相关技术说明
4.模运算在本文中也称为“模运算”(modulo operations),在基于计算机的系统中具有各种应用。在将第一操作数(在本文中称为“被除数”)除以第二操作数(本文称为“除数”)后,会生成一个表示残差值,在本文中称为“残值”。就此而言,7模6生成的值为1,7模7生成的值为0,7模8生成的值为7,依此类推。在一个示例应用中,可以使用模运算将接收到的数据项定向引导到计算机系统中高速缓存存储器的某些部分。通常,将高速缓存存储器划分为一组高速缓存存储器片。将模运算应用于两个操作数,以确定用于存储、获取或者读取特定接收数据项的高速缓存存储器片。模运算的被除数是要存储在高速缓存中的接收数据项的高速缓存存储器片。模运算的除数是高速缓存存储器中的片数量。通过模运算生成的值标识了存储,从中读取或从中读取接收到的数据项的高速缓存存储器片的编号。该技术或多或少均匀地在高速缓存存储器片之间分配接收到的数据项。
5.高速缓存存储器片的总数通常是2的幂次方,例如8片或者16片。在这种情况下,取模运算的值就是所接收数据项地址的最后“x”位表示的值,其中“x”是与高速缓存存储器片数相对应的2的幂次方。如果将高速缓存存储器划分为23=8个高速缓存存储器片,则通过模运算生成的值是由接收到的数据项的地址的最后3位表示的值。类似地,如果将高速缓存存储器划分为24=16个高速缓存存储器片,则通过模运算生成的值是由接收到的数据项的地址的最后4位表示的值。
6.在某些情况下,高速缓存存储器片的所述数量不是2的幂次方。在一个示例中,由16个高速缓冲存储器片制造的高速缓冲存储器中的一个所述高速缓冲存储器片,可能在制造过程中例如由于制造缺陷或稍后在将高速缓冲存储器安装在计算机系统中时出现故障。通过采用模15运算,在剩余的15个高速缓存存储片之间分配数据项,尽管性能有所降低,仍然可以操作所述高速缓存。在另一示例中,可以用17个高速缓存存储器片来制造高速缓存存储器,这样,如果高速缓存存储器片发生故障,则所述高速缓存存储器将仍然具有16个高速缓存存储器片。然而,如果所有17个高速缓冲存储器片均可操作,则可以采用模17运算,在17个高速缓冲存储器片之间分配数据项。
7.用于在高速缓冲存储器中分配数据项的上述方法的一个潜在缺点是,当除数不是2的幂次方时,模运算明显复杂得多。这种模运算通常涉及执行多个循环,其中多个循环可以顺序地或者并发地执行。一个循环求和被除数的位数,本文中也称为“系数”。第二循环从总和中反复减去除数,直到所述结果小于除数。当所述除数为2的幂次方时,重复进行减法的过程可能比执行模运算要花费更长的时间。此外,随着被除数的系数的数值增加,执行模运算所需的时间也随之增加。这种执行模运算所需时间的增加相应地增加了接收数据项与将数据项存储在高速缓冲存储器之间的时间。结果,当所述高速缓冲存储器中的功能片的数目不是2的幂次方时,高速缓冲存储器的性能可能显著降低。
8.如前所述,本领域需要的是在基于计算机的系统中执行模运算的更有效的技术。


技术实现要素:

9.本公开的各种实施例阐述了一种用于在基于计算机的系统中执行模运算的计算机实现方法。所述方法包括对与所述模运算相关联的输入值执行第一组求和,以生成第一和。所述方法还包括访问与所述第一和的第一部分相关联的校正值。所述方法还包括对所述校正值和所述第一和的第二部分执行第二组求和,以生成第二和。所述方法还包括基于所述第二和生成所述模运算的结果。
10.其他实施例包括但不限于实现所公开技术的一个或更多个方面的系统以及包括用于执行所公开技术的一个或更多个方面的指令的一个或更多个计算机可读介质。
11.与现有技术相比,所公开技术的至少一个技术优势在于,利用所公开的技术,相对于涉及2的幂次的除数运算的模运算,在更短的时间内执行涉及非2的幂次的除数运算。此外,无论被除数的值是多少,只要除数不是2的幂次,则在相同的时间内执行模运算。结果,与现有技术相比,可以更有效地执行包括模运算的操作,例如在高速缓存中的片之间分配数据项。更具体地,包括15个切片或者17个切片的高速缓冲存储器的性能可以具有与包括16个切片的高速缓冲存储器相同或几乎相同的性能。这些优点代表了相对于现有技术方法的一项或多项技术改进。
附图说明
12.为了可以详细理解各个实施例的上述特征的方式,可以通过参考各个实施例来对以上简要概述的发明构思进行更具体的描述,其中在附图中示出了实施例中的一些。然而,应注意,附图仅示出了本发明构思的典型实施例,因此不应以任何方式被认为是对范围的限制,并且还有其他等效的
实施例
13.图1是被配置成实现各种实施例的一个或更多个方面的计算机系统的框图;
14.图2是根据各种实施例的包括在图1的并行处理子系统中的并行处理单元(ppu)的框图;
15.图3是根据各种实施例的包括在图2的并行处理单元中的通用处理集群的框图;
16.图4是根据各种实施例的可以配置为实现图2的并行处理单元的模15运算发生器的概念图;
17.图5是根据各种实施例的可以配置为实现图2的并行处理单元的模17运算发生器的概念图;
18.图6a-6b阐述了根据各种实施例的图2的并行处理单元可被配置为实现的模3/15运算发生器的概念图;
19.图7是根据各个实施例的用于经由图2的并行处理单元执行模运算的方法步骤的流程图。
20.详细说明
21.在以下描述中,阐述了许多具体细节以提供对各种实施例的更透彻的理解。然而,
对于本领域的技术人员将显而易见的是,可以在没有一个或更多个这些具体细节的情况下实践本发明构思。
22.系统概述
23.图1是配置成实现各种实施例的一个或更多个方面的计算机系统100的框图。如图所示,计算机系统100包括但不限于中央处理器(cpu)102和经由存储器桥105和通信路径113耦合到并行处理子系统112的系统存储器104。存储器桥105是还经由通信路径106耦合到i/o(输入/输出)桥107,并且i/o桥507反过来又耦合到开关116。
24.在一个实施例中,i/o桥107配置成从诸如键盘或鼠标的可选输入设备508接收用户输入信息,并将输入信息转发给cpu 102以经由通信路径106和存储器桥105进行处理。在一个实施例中,开关116配置为在i/o桥107与计算机系统100的其他组件(例如网络适配器118和各种插入卡120和121)之间提供连接。
25.如图所示,i/o桥107耦合到系统盘114,系统盘114可以配置成存储内容以及应用程序和数据,以供cpu 102和并行处理子系统112使用。一般来说,系统盘114为应用程序和数据提供非易失性存储器,并且可以包括固定或可移动硬盘驱动器、闪存设备以及cd-rom(紧凑型光盘只读存储器)、dvd-rom(数字多功能光盘-rom)、蓝光、hd-dvd(高清晰度dvd)或其他磁性、光学或固态存储设备。最后,虽然没有明确显示,诸如通用串行总线或其他端口连接、光盘驱动器、数字多功能盘驱动器、胶片记录设备等之类的其他组件也可以连接至i/o桥107。
26.在各个实施例中,存储器桥105可以是北桥芯片,并且i/o桥107可以是南桥芯片。另外,通信路径106和113以及计算机系统100内的其他通信路径可以使用任何技术上合适的协议来实现,包括但不限于agp(加速图形端口),超传输(hypertransport)或任何其他总线或本领域已知的点通信协议。
27.在一些实施例中,并行处理子系统112包括将像素传送到可选显示设备110的图形子系统,该可选显示设备110可以是任何常规的阴极射线管、液晶显示器、发光二极管显示器等。在这样的实施例中,并行处理子系统112包括为图形和视频处理而优化的电路,包括例如视频输出电路。如图2所示,这种电路可以跨包括在并行处理子系统112内的一个或更多个并行处理单元(ppu)中合并。在其他实施例中,并行处理子系统112包括为通用和/或计算处理而优化的电路。再次,可将这样的电路并入包括在并行处理子系统112内的一个或更多个ppu中,所述ppu配置成执行这种通用和/或计算操作。在其他实施例中,并行处理子系统112中包括的一个或更多个ppu可以配置成执行图形处理、通用处理和计算处理操作。系统存储器104包括至少一个设备驱动器,其配置成管理并行处理子系统112内的一个或更多个ppu的处理操作。
28.在各种实施例中,并行处理子系统112可以与图1的一个或更多个其他元件集成在一起以形成单个系统。例如,并行处理子系统112可以与cpu 102和其他连接电路集成在单个芯片上,以形成片上系统(soc)。
29.应当理解,本文所示的系统是说明性的,并且可以进行变化和修改。可以根据需要修改包括桥的数量和布置、cpu 102的数量以及并行处理子系统112的数量的连接拓扑。例如,在一些实施例中,系统存储器104可以直接而不是通过存储器桥105连接到cpu 102,并且其他设备将通过存储器桥105和cpu 102与系统存储器104通信。在其他实施例中,并行处
理子系统112可以将其连接到i/o桥107或直接连接到cpu 102,而不是连接到存储器桥105。在其他实施例中,i/o桥107和存储器桥105可以集成到单个芯片中,而不是以一个或更多个离散设备的形式存在。最后,在某些实施例中,可能不存在图1所示的一个或更多个组件。例如,可以省去开关116,并且网络适配器118和附加卡120、121将直接连接到i/o桥107。
30.图2是根据各种实施例的包括在图1的并行处理子系统112中的并行处理单元(ppu)202的框图。尽管图2描绘了一个ppu 202,但是如上所述,并行处理子系统112可以包括任意数量的ppu 202。如图所示,ppu 202耦合到本地并行处理(pp)存储器204。ppu 202和pp存储器204可以是使用一个或更多个集成电路设备(例如可编程处理器、专用集成电路(asic)或存储设备)或以任何其他技术上可行的方式来实现。
31.在一些实施例中,ppu 202包括图形处理单元(gpu),其可以配置成实现图形渲染管线以基于由cpu 102和/或系统存储器104提供的图形数据执行与生成像素数据有关的各种操作。当处理图形数据时,pp存储器204可以用作存储一个或更多个常规帧缓冲器以及如果需要的话还存储一个或更多个其他渲染目标的图形存储器。其中,pp存储器204可用于存储和更新像素数据,并将最终像素数据或显示帧传送到可选的显示设备110以进行显示。在一些实施例中,ppu 202也可以配置成用于通用处理和计算操作。在一些实施例中,计算机系统100可以是云计算环境中的服务器机器。
32.在操作中,cpu 102是计算机系统100的主处理器,其控制和协调其他系统组件的操作。特别地,cpu 102发布控制ppu 202的操作的命令。在一些实施例中,cpu 102将用于ppu 202的命令流写入可以位于cpu 102和ppu 202都可访问系统存储器104,pp存储器204或其他存储位置中的数据结构(在图1或图2中未明确示出)。将指向数据结构的指针写入推缓冲器,以启动对数据结构中的命令流的处理。ppu 202从推缓冲器中读取命令流,然后相对于cpu 102的操作异步地执行命令。在生成多个推缓冲区的实施例中,应用程序可以通过设备驱动程序103为每个推缓冲区指定执行优先级以控制不同推送缓冲区的调度。
33.如图所示,ppu 202包括i/o(输入/输出)单元205,其经由通信路径113和存储器桥105与计算机系统100的其余部分通信。i/o单元205生成数据包(或其他信号)以在通信路径113上传输,并且还从通信路径113接收所有传入的数据包(或其他信号),从而将传入的分组导向ppu 202的适当组件。例如,可以将与处理任务有关的命令导向主机接口206,而将与存储器操作有关的命令(例如,从pp存储器204的读取或写入)导向到交叉开关单元210。主机接口206读取每个推缓冲区并发送存储在推缓冲区中的命令流到达前端212。
34.如以上结合图1所述,ppu 202到计算机系统100的其余部分的连接可以改变。在一些实施例中,将包括至少一个ppu 202的并行处理子系统112实现为可以插入计算机系统100的扩展槽中的附加卡。在其他实施例中,ppu 202可以集成在具有总线桥(例如存储器桥105或i/o桥107)的单个芯片上。同样,在其他实施例中,ppu 202的某些或全部元素可以与cpu 102一起包含在单个集成电路或芯片系统中(soc)。
35.在一操作中,前端212将从主机接口206接收的处理任务发送到任务/工作单元207内的工作分配单元(未示出)。工作分配单元接收指向已编码的处理任务的指针作为任务元数据(tmd)并存储在内存中。指向tmd的指针包含在命令流中,该命令流存储为命令队列并由前端单元212从主机接口206接收。可以编码为tmd的处理任务也包括与要处理的数据关联的索引作为定义如何处理数据的状态参数和命令。例如,状态参数和命令可以定义要在
数据上执行的程序。任务/工作单元207从前端212接收任务,并确保在启动每个tmd所指定的处理任务之前,将gpc 208配置为有效状态。可以为每个tmd指定一个优先级,该优先级用于安排处理任务的执行。还可以从处理集群阵列230接收处理任务。可选地,tmd可以包括控制是否将tmd添加到处理任务列表的头部或尾部(或指向处理任务的指针的列表)的参数,从而提供了对执行优先级的另一级控制。
36.ppu 202方便地基于处理集群阵列230实现高度并行处理架构,该处理集群阵列230包括一组c个通用处理集群(gpc)208,其中c≥1。每个gpc 208能够执行大量并发线程数(例如数百或数千),其中每个线程是程序的一个实例。在各种应用中,可以分配不同的gpc 208用于处理不同类型的程序或用于执行不同类型的计算。gpc 208的分配可以根据每种类型的程序或计算产生的工作量而变化。
37.存储器接口214包括一组d个分区单元215,其中d≥1。每个分区单元215耦合到驻留在ppm存储器204内的一个或更多个动态随机存取存储器(dram)220。在一个实施例中,分区单元215的数量等于dram 220的数量,并且每个分区单元215耦合到不同的dram 220。在其他实施例中,分区单元215的数量可以与dram 220的数量不同。本领域普通技术人员将理解,可以用任何其他技术上合适的存储设备代替dram 220。在操作中,可以在dram 220上存储各种渲染目标,例如纹理映射和帧缓冲区,从而允许分区单元215并行写入每个渲染目标的部分,以有效地使用pp存储器204的可用带宽。
38.给定的gpc 208可以处理要写入pp存储器204中的任何dram 220的数据。交叉开关单元210配置为将每个gpc 208的输出路由到任何gpc 208的输入分区单元215或任何其他gpc 208进行进一步处理。gpc 208经由交叉开关单元210与存储器接口214通信以读取或写入各种dram 220。在一个实施例中,交叉开关单元210除了经由存储器接口214与pp存储器204的连接之外,还具有与i/o单元205的连接,从而使不同gpc 208中的处理核心能够与系统存储器104或不是ppu 202本地的其他存储器进行通信。在图2的实施例中,交叉开关单元210直接与i/o单元205连接。交叉开关单元210可以使用虚拟信道来分离gpc 208和分区单元215之间的业务流。
39.再一次,gpc 208可以被编程为执行与各种各样的应用有关的处理任务,包括但不限于线性和非线性数据变换、视频和/或音频数据的过滤、建模操作(例如,应用确定物体的位置、速度和其他属性的物理定律)、图像渲染操作(例如曲面细分着色器、顶点着色器、几何着色器和/或像素/片段着色器程序)、常规计算操作等。在操作中,ppu 202配置成将数据从系统存储器104和/或pp存储器204传输到一个或更多个片上存储器单元,处理数据,并将结果数据写回到系统存储器104和/或pp存储器204。结果数据可以然后由其他系统组件(包括cpu 102、并行处理子系统112中的另一个ppu 202或计算机系统100中的另一个并行处理子系统112)访问。
40.如上所述,并行处理子系统112中可以包括任意数量的ppu 202。例如,可以在单个插入卡上提供多个ppu 202,或者可以将多个插入卡连接到通信路径113,或者ppu 202中的一个或更多个可以集成到桥芯片中。多ppu系统中的ppu 202可以彼此相同或不同。例如,不同的ppu 202可能具有不同数量的处理核心和/或不同数量的pp存储器204。在存在多个ppu 202的实现中,这些ppu可以并行运行以处理比单个ppu可能处理的吞吐量高的数据。包含一个或更多个ppu 202的系统可以以各种配置和形式来实现,包括但不限于台式机、笔记本电
脑、手持个人计算机或其他手持设备、服务器、工作站、游戏机、嵌入式系统等等。
41.图3是根据各种实施例的包括在图2的并行处理单元(ppu)202中的通用处理集群(gpc)208的框图。在操作中,gpc 208可以被配置为并行执行大量线程以执行图形,通用处理和/或计算操作。如本文所使用的,“线程”是指在特定的一组输入数据上执行的特定程序的实例。在一些实施例中,单指令多数据(simd)指令发布技术用于支持大量线程的并行执行而无需提供多个独立指令单元。在其他实施例中,使用单指令多线程(simt)技术来支持并行执行大量一般同步的线程,方法是使用配置为向gpc 208中的一组处理引擎发出指令的通用指令单元。在所有处理引擎通常执行相同指令的执行机制下,simt执行允许不同的线程更容易地通过给定程序遵循不同的执行路径。本领域普通技术人员将理解,simd处理方案代表simt处理方案的功能子集。
42.通过管线管理器305来控制gpc 208的操作,管线管理器305将从任务/工作单元207内的工作分配单元(未示出)接收的处理任务分配给一个或更多个流式多处理器(sm)310。管线管理器305还可以配置成通过指定sm 310输出的处理数据的目的地来控制工作分配交叉开关330。
43.在一个实施例中,gpc 208包括m个一组的sm 310,其中m≥1。而且,每个sm 310包括一组功能执行单元(未示出),例如执行单元和负载存储单元。可以对针对任何功能执行单元的处理操作进行流水线化,这使得能够在前一条指令完成执行之前发出新指令以执行。可以提供给定sm 310内的功能执行单元的任何组合。在各种实施例中,功能执行单元可以配置成支持各种不同的操作,包括整数和浮点算术(例如,加法和乘法)、比较操作、布尔运算(and、or、xor)、位-移位以及各种代数函数(例如,平面插值和三角函数,指数函数和对数函数等)计算。有利地,相同的功能执行单元可以配置成执行不同的操作。
44.在操作中,每个sm 310配置成处理一个或更多个线程组。如本文所使用的,“线程组”或“线程束”是指在不同的输入数据上同时执行相同程序的一组线程,该组中的一个线程被分配给sm 310内的不同执行单元。可能包括的线程数量少于sm 310中执行单元的数量,在这种情况下,某些执行可能在处理该线程组的周期中处于空闲状态。线程组还可以包括比sm 310中的执行单元数量更多的线程,在这种情况下,处理可以在连续的时钟周期内进行。由于每个sm 310可以同时支持多达g个线程组,因此可以在任何给定时间在gpc 208中执行多达g*m个线程组。
45.另外,多个相关线程组可以在sm 310中同时活跃(处于不同的执行阶段)。线程组的这种集合在本文中称为“合作线程阵列”(“cta”)或“线程阵列”。特定cta的大小等于m*k,其中k是线程组中同时执行的线程数,通常是sm 310中的执行单元数的整数倍,m是sm310中同时活动的线程组的数量。
46.虽然图3中没有显示,每个sm 310包含一级(l1)高速缓存,或者使用sm 310外部的对应的l1高速缓存中的空间来支持(尤其是)执行单元执行的加载和存储操作。每个sm 310还可以访问在ppu 202中的所有gpc 208之间共享的二级(l2)高速缓存(未示出)。l2高速缓存可以用于在线程之间传输数据。最终,sm 310也可以访问片外“全局”存储器,其可以包括pp存储器604和/或系统存储器104。应当理解,ppu 202外部的任何存储器都可以用作全局存储器。此外,如图3所示,一点五级(l1.5)高速缓存(335)可以包含在gpc 208中,并配置为接收和保存sm 310通过内存接口214从内存中请求的数据。这一数据包括但不限于指令、统
一数据和常量数据。在gpc 6208内具有多个sm 310的实施例中,sm 310可以有益地共享在l1.5高速缓存335中高速缓存的公共指令和数据。
47.每个gpc 208可以具有相关联的存储器管理单元(mmu)320,该存储器管理单元配置成将虚拟地址映射为物理地址。在各种实施例中,mmu 320可以驻留在gpc 208内或存储器接口214内。mmu 320包括一组页面表项(pte),其用于将虚拟地址映射到瓦片或存储器页面的物理地址,并且可选地缓存行索引。mmu 320可以包括地址转换后备缓冲器(tlb)或可以驻留在sm 310内,一个或更多个l1高速缓存内或gpc 208内。
48.在图形和计算应用程序中,可以配置gpc 208,使得每个sm 310耦合到纹理单元315,除此之外,纹理映射加载和纹理操作,例如确定纹理样本位置、读取纹理数据和过滤纹理数据。
49.在操作中,每个sm 310将处理后的任务发送到工作分配交叉开关330,以便将处理后的任务提供给另一gpc 208以进行进一步处理或将处理后的任务存储在l2高速缓存(未示出)中,并行处理存储器204或经由交叉开关单元210的系统存储器104。此外,预光栅操作(prerop)单元325配置成从sm 310接收数据,将数据引导至分区单元215内的一个或更多个光栅操作(rop)单元,以执行颜色混合优化,组织像素颜色数据以及执行地址转换。
50.将意识到,本文描述的核心架构是说明性的,并且可以进行变化和修改。除其他事项外,gpc 608内可以包括任意数量的处理单元,例如sm 310、纹理单元315或预光栅操作单元325。此外,如以上结合图2所述,ppu 202可以包括配置为任意数量的gpc 208,这些gpc 208在功能上彼此相似的,从而使执行行为不取决于哪个gpc 208接收特定的处理任务。此外,每个gpc 208独立于ppu 202中的其他gpc 208操作以执行用于一个或更多个应用程序的任务。鉴于上述情况,本领域的普通技术人员将理解,图1-3中描述的架构绝不限制本公开的范围。
51.在一些实施例中,一个或更多个所述sm 310可以包括模运算生成器(mod op gen)312。如本文进一步所述,当一个sm 310执行涉及由所述模运算生成器312支持的除数的模指令时,所述sm 310可以通过模运算生成器312路由模运算,以生成相对于现有技术具有改善性能的残差值。此外,在一些实施例中,mmu 320包括或与模运算生成器322相关联。模运算生成器322对输入值的存储器地址执行模运算,其中模的除数是片数量。模运算的残差值标识要存储输入值的缓存内存片。
52.请注意,如本文中所使用的,对共享存储器的引用可以包括任何一种或多种技术上可行的存储器,包括但不限于由一个或更多个sm 310共享的本地存储器或可经由存储器接口214访问的存储器,例如高速缓存、并行处理存储器204或系统存储器104。还请注意,如本文所用,对高速缓冲存储器的引用可以包括任何一个或更多个技术上可行的存储器,包括但不限于一级缓存,1.5级高速缓存和二级缓存。
53.应用本文公开的一种或更多种技术产生的图像可以显示在监视器或其他显示设备上。在一些实施例中,所述显示设备可以直接耦合到生成或渲染图像的所述系统或处理器。在其他实施例中,所述显示设备可以例如经由网络间接地耦合到所述系统或处理器。此类网络的示例包括互联网、移动电信网络、wifi网络以及任何其他有线和/或无线联网系统等。当所述显示设备间接耦合时,由系统或处理器生成的图像可以通过网络流传输到显示设备。这种流传输允许例如在服务器上或在数据中心中执行渲染图像的视频游戏或其他应
用,并且渲染的图像可以在一个或更多个用户设备(例如计算机,视频游戏控制台,智能手机,其他移动设备等)上传输和显示,该用户设备与服务器或数据中心物理上分开。因此,本文公开的技术可以应用于增强流传输的图像并增强流传输图像的服务,例如nvidia geforce now(gfn),google stadia等。
54.此外,应用本文公开的一种或更多种技术生成的图像可以用于训练、测试或查证用于识别现实世界中的对象和环境的深度神经网络(dnn)。这样的图像可以包括道路、工厂、建筑物、城市环境、乡村环境、人类、动物和任何其他物理对象或真实世界场景的场景。此类图像可用于训练、测试或查证在机器或机器人中使用的dnn,以操纵、处理或修改现实世界中的物理对象。此外,此类图像可用于训练,测试或查证在自动驾驶车辆中使用的dnn,以在现实世界中导航和移动车辆。另外,应用本文公开的一种或多种技术生成的图像可以用于向这些机器、机器人和车辆的用户传达信息。
55.模运算的快速残差计算
56.如本文所述,用于计算模运算结果的传统方法涉及执行多个循环,其中多个循环可以顺序或并发地执行。一个循环求和被除数的位数,本文也称为“系数”。第二个循环重复从所述总和中减去除数,直到结果小于除数。当除数为2的幂次时,这种重复进行减法的过程可能比执行模运算要花费更长的时间。
57.各种实施例包括基于计算机的系统中的模运算生成器,相对于这些传统方法,该模运算生成器以更少的时间执行模运算。所述模运算生成器包括累加电路,所述累加电路对输入值执行第一组求和,以生成第一和。第一组求和可以包括加法函数和/或减法函数。模运算生成器还包括查找和校正电路,所述查找和校正电路包括查找表和加法器。将所述第一和的第一部分应用于生成校正值的查找表。所述加法器对所述校正值和所述第一和的第二部分执行第二组求和,以生成第二和。所述模运算生成器还包括测试和校正电路,如果所述第二和大于或等于所述模运算生成器的除数,则该测试和校正电路调整第二和。所述测试和校正电路传输由模运算生成器确定的所述最终残差值。
58.模运算生成器的一个用例是确定哪个缓存片接收特定的输入值。通常,mmu(例如mmu 320)包括高速缓存控制逻辑或与高速缓存控制逻辑相关联,该高速缓存控制逻辑具有诸如模运算生成器322之类的模运算生成器。这种高速缓存控制逻辑对输入值的存储器地址执行模运算,所述模运算的除数是片的数量。模运算的残差值标识要存储输入值的缓存存储器片。对于高速缓存存储器,其中高速缓存存储器片的数量是2的幂次,则模运算的残差值只是存储器地址的最低有效n位。如果高速缓存存储器片的数量不是2的幂次,则通过执行顺序或并发循环操作来执行残差值。这种方法可能很耗时,从而降低了高速缓存存储器的性能。利用本文所公开的方法,所述模运算生成器不执行循环运算。取而代之的是,所述模运算生成器仅在模运算生成器的各个阶段产生逻辑延迟。如果通过所述模运算生成器的逻辑延迟小于mmu的时钟周期,则可以在一个时钟周期内确定残差值。在一个示例中,模运算生成器能够以足够的余量在一个时钟周期中以2.14ghz时钟速率计算残差值。
59.所述模运算生成器的另一个用例是在处理器(例如gpu或者cpu)的算术逻辑单元(alu)中。在一些实施例中,一个或更多个sm 310可以包括一个模运算生成器322。当执行一个模运算时,所述alu可以被配置为利用所述公开的技术自动检测模运算生成器,所述生成器可用于所述模运算的除数。如果存在这样的模运算生成器,则所述处理器将通过所述模
运算生成器路由所述模运算,以生成相对于现有技术具有改进性能的所述残差值。另外或可选地,所述处理器的所述指令集可以包括一个或更多个用于加速模运算的特殊指令。当所述处理器执行这样的一个指令时,所述处理器通过所述模运算生成器路由所述模运算,以生成相对于现有技术具有改进的性能的所述残差值。
60.在一些实施例中,所述模运算生成器执行除数为梅森数的模运算。梅森数的形式为m=2n–
1,其中n是整数。梅森数的子集(在本文中称为“梅森素数”)的形式为m=2n–
1,其附加性质是n是素数。当n=2、3、4或5时,相应的梅森数分别为3、7、15和31。在这些梅森数中,3、7和31是梅森素数,而15不是梅森素数。
61.在一个示例中,所述模运算生成器对以基数16表示的输入值执行模15运算,在本文中也称为“十六进制”格式。以16为基数的格式,每个数字代表一个0到15范围内的4位数字。对于宽度为“w”位的给定数字“n”,可以为给定的梅森除数计算出系数“w”。基于所选的梅森除数,w和w之间存在很强的关系。对于给定的梅森除数“m”,每个系数“b”的位数由b和b=int(log2(m)) 1确定。例如,如果m=15,则b=4,表示梅森除数15会导致4位系数。为了确定系数w的所述数值,将w除以b如下:w=(int(w/b)!=w/b)?int(w/b) 1:int(w/b)。例如,如果数字n的宽度w为32位,且所述梅森除数m为15,则b为4位,且w=int(32/4)=8。类似地,如果数字n的宽度w为31位,且所述梅森除数m为15,则b为4位,且w=int(31/4) 1=8。此外,如果数字n的宽度w为33位,且所述梅森除数m为15,则b是4位数且w=int(33/4)=9。
62.通常地,任何以w为基数16位的整数n可以以16为基数的格式表示,如下公式1所示:
63.其中w是基数16的位数,(q
16
,n)是数n的基数16的系数,且n是表示的数字。以基数16格式表示的32位数字n具有w=32位
÷
4位/数字=8位。为了从模15运算确定残差值,并注意15=16-1,可以重写公式1的乘数,从而得出如下公式2
[0064][0065]
其中(ck,n)是二项式(15 1)n的展开结果,且n是所述代表的数字。给定方程式3,对于从0到w-1的每个n值,方括号内的表达式内容为乘积之和。这些总和中的每一个都有n 1个项(对于k=0到k=n)。每个总和中的唯一项是(q
16,n
)*c
k,n
*15k。这些项中的每一项均为15的幂次,因此,除k=0之外,不会对残差值有贡献。对于k=0,所述项为(q
16,n
)*c
0,n
*150。假设每一
[0066]
右侧加数的求和运算项分别乘以15k,其中k是大于或等于1的整数。因此,所述求和运算的所有项以及所述求和运算的结果是15的倍数。因为被除数是除数的倍数的模运算生成器产生的结果为0,因此公式4的右侧加数不会影响残差值。因此,只有公式4的左侧加数会影响残差值。此左侧加数在本文中称为系数和sc,
[0067]
公式5中所示的总和表示基数为16的系数之和。尽管所述系数总和是模运算最终残差值的唯一贡献者,但所述系数总和可能大于15。因此,处理所述系数总和,以生成小于15的最终残差值。现在描述所述公开的模运算生成器,所述公开的模运算生成器确定所述系数,并处理所述系数总和,以生成最终残差值。
[0068]
图4是根据各种实施例的图2的并行处理单元可以被配置来实现的模15运算生成器的概念图。在一些实施例中,所述模15运算发生器可以被实现为图3的所述模运算生成器312的一部分和/或被实现为图3的所述模运算生成器322的一部分。如图所示,所述模运算生成器包括累加电路410、查找和校正电路420,以及测试和校正电路430。所述模15运算发生器利用以下事实:15是梅森数,其中15=16

1。因此,输入值以基数16格式表示。结果,当以16进制格式表示时,输入值的每个系数都是4位数字。
[0069][0070]
累加电路410对八个4位系数执行求和运算。累加电路410通过一系列阶段将系数相加。第一阶段包括加法器412(0)、412(1)、412(2)和412(3)。第二阶段包括加法器414(0)和414(1)。第三阶段包括加法器416。
[0071]
在第一阶段,加法器412(0)生成w=0([03:00]位)和w=1([04:07]位)的系数之和。类似地,加法器412(1)生成w=2(位[11:08])和w=3([15:12]位)的系数之和。加法器412(2)生成w=4([19:16]位)和w=5([23:20]位)的系数之和。加法器412(3)生成w=6([27:24]位)和w=7([31:28]位)的系数之和。在第二阶段,加法器414(0)生成加法器412(0)的输出和加法器412(1)的输出之和。类似地,加法器414(1)生成加法器412(2)的输出和加法器412(3)的输出之和。在第三阶段,加法器416生成加法器414(0)的输出和加法器414(1)的输出之和。
[0072]
将两个4位数字相加可能会导致总和大于15,该最大值可以由4位数字表示。因此,每个加法器412(0)、412(1)、412(2)和412(3)生成一个包括第五位的和,在本文中被称为“保护位”。同样地,将两个5位数字相加可能会导致总和大于31,即可以由5位数字表示的最大值。因此,每个加法器414(0)和414(1)生成包括第六位的和,代表第二保护位。将两个6位数字相加,可能会导致总和大于63,所述最大值可以由6位数字代表。因此,加法器416生成第七位的和,代表第三保护位。所述累加电路410生成sum[6:0](求和[6:0]),所述sum[6:0]包括4位的低位部分sum[3:0]和3个位保护位sum[6:4]。所述累加电路410将sum[6:0]发送到所述查找和校正电路420。
[0073]
更一般地,所述累加电路410中包括的加法器、级和保护位的数量取决于输入值系数的数量和宽度。对于具有w个系数并以特定基数格式表示的输入值,在累加电路410中添加的保护位的数量为log2(w/log2(基数))。
[0074]
在操作中,所述查找和校正电路420从所述累加电路410中接收所述sum[6:0]。所述查找和校正电路420将sum[6:0]分成两个分量。第一分量sum[3:0]包括sum[6:0]的最低有效位,并且宽度与所述输入值的系数相同。因为所述输入值以基数16表示,所以所述输入
值的每个系数都是4位数字。因此,第一分量sum[3:0]包括sum[6:0]的4个最低有效位。第二分量sum[6:4]包括sum[6:0]的最高有效位。第二分量sum[6:4]表示由累加电路410的加法器生成的保护位的值。
[0075]
所述查找和校正电路420将第一分量sum[3:0]路由到一个加法器424。所述查找和校正电路420将第二分量sum[6:4]路由到一个查找表422。sum[6:4]的所述值表示sum[6:0]中包含16的倍数。例如,sum[6:4]=001表示值16,sum[6:4]=010表示值32,sum[6:4]=011表示值48,依此类推。为了生成模数15的残差值,必须从sum[6:0]中减去数字15,直到残差值在0到14的范围内。因为15的模数除数是梅森数,所以所述模数除数可以写为16

1。因此,从sum[6:0]中减去15,等于减去16再加上1。从sum[6:0]中减去30,等于减去32再加上2。从sum[6:0]中减去45,等于减去48再加上3,依此类推。所述查找表422通过接收第二分量sum[6:4]和生成一个correction[3:0](校正[3:0])来执行此功能,所述第二分量sum[6:4]是16的倍数,所述correction[3:0]表示要添加到第一分量sum[3:0]对应的数字。下表1中显示了各种输入值的所述校正值。
[0076]
sum[6:4]减去的值增加的值correction[3:0]00000000000116100010103220010011483001110064401001018050101110966011011111270111
[0077]
表1:模15发生器的校正值
[0078]
对于模15生成器和32位输入值,所述输入sum[6:4]的宽度为3位。所述查找表422的条目数(在本文中被称为“深度”)是8,并且所述输出correction[3:0]的宽度是4位。所述输出correction[3:0]的范围为0到7。更一般地,所述查找表422的深度:depth=w
÷
(log2(基数)),其中“w”是所述输入值以位表示的宽度。所述查找表422的校正输出的宽度:width=log2(基数)。
[0079]
查所述找表422将correction[3:0]传送到所述加法器424。所述加法器424将第一分量sum[3:0]与correction[3:0]相加,以生成初步残差值。所述加法器424将所述初步残差值发送到所述测试和校正电路430。
[0080]
在操作中,如果所述初步残差值大于15,则所述测试和校正电路430将执行最终校正。第一分量sum[3:0]的范围为0至15,而所述correction[3:0]的范围为0至7。因此,由所述加法器424生成的所述初步残差值是范围为0至23的5位数值。所述最终调整432测试所述初步残差值,以确定是否初步残差值小于15。如果初步残差值小于15,则最终调整432,将初步残差值的最低有效4位作为最终residue[3:0](残差[3:0])。然而,如果所述初步残差值大于或等于15,则最终调整432,从初步残差值中减去15以生成最终residue[3:0]。
[0081]
在本公开的范围内,所公开的技术可以进一步应用于除数不是梅森数的某些模运算。例如,所公开的技术可以进一步应用于除数为费马数的某些模运算。如本文所指,费马
数的形式为f=2n 1,其中n是整数。对于n=2、3、4或5,相应的费马数分别为5、9、17和33。
[0082]
图5是根据各种实施例的图2的并行处理单元可以被配置来实现的模17运算生成器的概念图。在一些实施例中,所述模17运算发生器可以被实现为图3的所述模运算生成器312的一部分,和/或可以被实现为图3的模运算生成器322的一部分。如图所示,所述模运算生成器包括累加电路510、查找和校正电路520以及测试和校正电路530。所述累加电路510、查找和校正电路520以及测试和校正电路530的功能与所述累加电路410、查找和校正电路420以及测试基本上相同,除了下面进一步描述以外,它们分别与图4的校正电路430和校正电路430相同。所述模17运算发生器利用以下事实:17是一个费马数,其中17=16 1。因此,所述输入值以基数16格式表示。结果,当以基数16格式表示时,输入值的每个系数都是4位数字。
[0083][0084]
数的除数是费马数而不是梅森数。因此,将w的偶数值的系数相加,而将w的奇数值的系数相减。因为所述输入值是32位数字,所以所述累加电路510对8个4位系数执行求和运算。所述累加电路510经由一系列阶段对系数执行求和运算。第一阶段包括减法器512(0)、512(1)、512(2)和512(3)。第二阶段包括加法器514(0)和514(1)。第三阶段包括加法器516。
[0085]
在第一阶段,减法器512(0)生成w=0([03:00]位)系数与w=1([04:07]位)系数的差值。类似地,减法器512(1)生成w=2([11:08]位)系数与w=3([15:12]位)系数的差值。减法器512(2)生成w=4([19:16]位)系数与w=5([23:20]位)系数的差值。减法器512(3)生成w=6([27:24]位)系数与w=7([31:28]位)系数的差值。在第二阶段,加法器514(0)生成减法器512(0)输出和减法器512(1)输出之和。类似地,加法器514(1)生成减法器512(2)输出和减法器512(3)输出之和。在第三阶段,加法器516生成加法器514(0)输出和加法器514(1)输出之和。所述累加电路510生成sum[6:0],所述sum[6:0]包括4位sum[3:0]的低位部分和sum[6:4]的3个保护位。所述累加电路510将所述sum[6:0]发送到所述查找和校正电路520。更一般地,所述累加电路510包括的减法器、加法器、级和保护位的数量取决于所述输入值系数的数量和宽度。
[0086]
在操作中,所述查找和校正电路520从所述累加电路510接收sum[6:0]。所述查找和校正电路520将sum[6:0]分成两个分量。第一分量sum[3:0]包括sum[6:0]的最低有效位,并且与所述宽度和输入值的系数相同。因为所述输入值以基数16表示,所以所述输入值的每个系数都是4位数字。因此,第一分量sum[3:0]包括sum[6:0]的4个最低有效位。第二分量sum[6:4]包括sum[6:0]的最高有效位。第二分量sum[6:4]表示由所述累加电路510的加法器生成的保护位的值。
[0087]
所述查找和校正电路520将第一分量sum[3:0]路由到减法器524。所述查找和校正电路520将第二分量sum[6:4]路由到查找表522。sum[6:4]的所述值表示sum[6:0]中包含的16的倍数。例如,sum[6:4]=001表示值16,sum[6:4]=010表示值32,sum[6:4]=011表示值48,依此类推。为了生成模17残差值,必须从sum[6:0]中减去数字17,直到残差值在0到16的范围内。因为17的所述模除数是一个费马数,所以所述模除数可以写为16 1。因此,从sum[6:0]减去17,等于减去16再减去1。从sum[6:0]减去34,等于减去32再减去2。从sum[6:0]中
减去51,等于48再减去3,依此类推。所述查找表522通过接收第二分量sum[6:4]和生成correction[3:0]来执行此功能,所述第二分量sum[6:4]是16的倍数,所述生成correction[3:0]表示第一分量sum[3:0]中减去的对应的数字。下表2中显示了各种输入值的校正值。
[0088][0089][0090]
表2:模7生成器的校正值
[0091]
所述查找表522将所述correction[3:0]发送到所述减法器524。所述减法器524从第一分量sum[3:0]中减去所述correction[3:0]以生成一个初步残差值。所述减法器524将所述初步残差值发送到所述测试和校正电路530。
[0092]
作为替代地且等效地,所述查找表522可以生成一个有符号整数,所述有符号整数表示加到第一分量sum[3:0]上的负数。在这种情况下,16的第一减法值16可以生成-1的加法值,则32的第一减法值32可以生成-2的加法值,48的第一减法值可以生成-3的加法值,依此类推。减法器524将由加法器代替,所述加法器将第一分量sum[3:0]与correction[3:0]表示的负值相加,以生成一个初步残差值。所述加法器将所述初步残差值发送到所述测试和校正电路530。
[0093]
在操作中,如果所述初步残差值大于17,则所述测试和校正电路530执行最终校正。所述最终调整532测试所述初步残差值,以确定初步残差值是否小于17。如果所述残差值小于17,则所述最终调整532将初步残差值的4个最低有效位作为最终residue[3:0]。然而,如果所述初步残差值大于或等于17,则最终调整532从初步残差值中减去17,以生成最终residue[3:0]。
[0094]
在一些实施例中,模运算生成器可以是多模的,其中所述模运算生成器被配置,以生成针对一个除数的模残差数值,所述除数针对从两个或更多个可能的除数中选择。在一个示例中,可以配置模运算生成器,以生成模3残差值或者模15残差值。现在描述这种模运
算生成器。
[0095]
图6a-6b阐述了根据各种实施例模3/15运算生成器的概念图,所述模3/15运算生成器,图2的并行处理单元可以配置实现。在一些实施例中,所述模3/15运算发生器可以被实现为图3的模运算生成器312的一部分,和/或被实现为图3的模运算生成器322的一部分。如图所示,所述模运算生成器包括累加电路610、查找和校正电路620以及测试和校正电路630。除了下面进一步描述的以外,所述累加电路610、查找和校正电路620以及测试和校正电路630的功能与图4的累加电路410、查找和校正电路420,以及测试和校正电路430基本相同。类似地,除了另外如下面所描述的,所述累加电路610、查找和校正电路620以及测试和校正电路630的功能,分别与图5的累加电路510、查找和校正电路520以及测试和校正电路530基本相同。模3/15运算发生器从多个除数中选择除数,其中多个除数包括3和15。如果所选除数为3,则模运算生成器配置累加电路610中的至少一个搜索,校正电路620或测试和校正电路630执行模3运算。如果选择的除数为15,则模运算生成器配置累加电路610、查找和校正电路620或测试和校正电路630中的至少一个以执行模15运算。
[0096]
所述模3/15运算发生器利用以下事实:3和15都是梅森数,其中3=4-1和15=16-1。因此,在模3模式下,所述输入值表示为基数4的格式。结果,当以基数4的格式表示时,所述输入值的每个系数都是2位数字。在模15模式下,所述输入值以16为基数格式表示。结果,当以基数16格式表示时,所述输入值的每个系数都是4位数字。
[0097][0098]
数相加。第一阶段包括添加/连接单元(在本文中也称为“addconcat(添加级联)”单元)618(0)、618(1)、618(2)、618(3)、618(4)、618(5)、618(6)和618(7)。第二阶段包括加法器612(0)、612(1)、612(2)和612(3)。第三阶段包括加法器614(0)和614(1)。第四阶段包括加法器616。
[0099]
在模3模式下,因为所述输入值是一个32位数字,所以所述累加电路610对16个2位系数执行求和运算。在模3模式下,所述添加/级联单元618被配置为处于添加模式。每个添加/级联单元618将两个相邻的2位系数相加。在这方面,添加/级联单元618(0)生成w=0([01:00]位)和w=1([03:02]位)的系数之和。类似地,添加/级联单元618(1)生成w=2([05:04]位)和w=3([07:06]位)的系数之和。添加/级联单元618(2)、618(3)、618(4)、618(5)和618(6)类似地为各个系数对求和,添加/级联单元618(7)生成w=14([29:28]位)和w=15([31:30]位)的系数之和。每个添加/级联单元618生成一个3位和,所述3位和包括一个保护位。
[0100]
在第二阶段,加法器612(0)生成添加/级联单元618(0)的输出和添加/级联单元618(1)的输出之和。类似地,加法器612(1)

612(3)生成各对添加/级联单元618的输出之和。每个加法器612生成一个4位和,包括两个保护位。在第三阶段,加法器614(0)生成所述加法器612(0)的输出和加法器612(1)的输出之和。类似地,加法器614(1)生成所述加法器612(2)的输出和加法器612(3)的输出之和。每个加法器614生成一个5位和,所述5位和包括3个保护位。在第四阶段,加法器616生成所述加法器614(0)的输出和加法器614(1)的输出之和。加法器614生成6位和,所述6位和包括3个保护位。所述累加电路610生成sum[6:0],所
述sum[6:0]包括sum[1:0]的2位低位部分和sum[5:2]的4个保护位。在模3模式下,sum[06]为0。所述累加电路610将所述sum[6:0]发送到所述查找和校正电路620。
[0101]
在操作中,所述查找和校正电路620从所述累加电路610中接收所述sum[6:0]。所述查找和校正电路620将所述sum[6:0]分成两个分量。第一分量sum[1:0]包括sum[6:0]的最低有效位,并且与所述输入值的系数有相同的宽度。因为所述输入值表示以4为基数,所以所述输入值的每个系数都是2位数字。因此,第一分量sum[1:0]包括sum[6:0]的两个最低有效位。第二分量sum[6:2]包括sum[6:0]的最高有效位。第二分量sum[6:2]表示由累加电路610的加法器生成的保护位的值,其中sum[6]设置为0。
[0102]
所述查找和校正电路620将第一分量sum[1:0]路由到加法器624。所述查找和校正电路620将第二分量sum[6:2]路由到查找表622。sum[6:2]的值表示sum[6:0]中包含的4的倍数。例如,sum[6:2]=0 0001表示值4,sum[6:2]=0 0010表示值8,sum[6:2]=0 0011表示值12,依此类推。为了生成模3残差值,必须从sum[6:0]中减去数字3,直到残差值在0到2的范围内。因为3的所述模数除数是梅森数,所以所述模数除数可以写为4

1。因此,从sum[6:0]减去3,等于减去4再加1。从sum[6:0]减去6,等于减去8再加2。从sum[6:0]减去9,等于减去12再加上3,依此类推。所述查找表622通过接收第二分量sum[6:2]并生成一个correction[1:0]来执行此功能,所述第二分量sum[6:2]为4的倍数,所述correction[1:0]表示要添加到第一分量sum[1:0]的相应数值。下表3中显示了各种输入值的校正值。
[0103][0104][0105]
表3:模3生成器的校正值
[0106]
对于模3生成器和32位输入值,所述输入sum[6:2]的宽度为4位sum[5:2],对应于4个保护位,再加上未使用的位sum[6]。查找表422的与sum[5:2]相对应的活动条目的数量为16,并且输出correction[1:0]的宽度为2位。输出correction[1:0]在0到3的范围内。所述
查找表422将所述correction[1:0]发送到所述加法器624。所述加法器624将第一分量sum[1:0]添加到所述correction[1:0],以生成一个初步残差值。所述加法器624将所述初步残差值发送到所述测试和校正电路630。
[0107]
在操作中,如果所述初步残差值大于2,则所述测试和校正电路630将执行最终校正。所述第一分量sum[1:0]在0到3的范围内,而所述correction[1:0]在0到2的范围内。因此,所述加法器624生成的所述初步残差值是一个5位数值,且0到5的范围内。所述最终调整632测试所述初步残差值,以确定是否所述初步残差值小于3。如果所述初步残差值小于3,则所述最终调整632将初步残差值的最低有效2位作为最终residue[1:0]。如果所述初步残差值大于或等于3,则所述最终调整632从所述初步残差值中减去3以生成最终residue[1:0]。
[0108]
在模15模式下,因为所述输入值是一个32位数字,所以所述累加电路610对8个4位系数执行求和运算。在模15模式下,所述添加/级联单元618被配置为处于级联模式。每个添加/级联单元618将4个输入位传递给添加/级联单元618的输出,以生成4位系数。添加/级联单元618不执行求和操作或不添加任何保护位。结果,每个加法器612(0)

612(3)添加2个4位系数,如图4的加法器412(0)

412(3)所述级联。类似地,每个加法器614(0)

614(1)添加2个5位系数,如图4的加法器414(0)

414(1)所述级联。加法器616添加2个6位系数,如图4的加法器416所述级联。所述查找和校正电路620以及测试和校正电路630,以图4描述的级联方式处理累加电路610的输出。结果,所述模3/15运算发生器可配置为生成在单个电路中的模3残差值或者模15残差值。
[0109]
应当理解,本文所述系统是说明性的,并且可以进行变化和修改。在一个示例中,所述公开的模运算生成器可以被配置为生成用于任何梅森数除数的残差值。所公开的模运算生成器可以被配置为执行模3运算、模7运算、模15运算、模31运算等等,直到达到所述输入值的宽度。在另一个示例中,公开的模运算生成器可以被配置为生成用于任何费马数除数的残差值。所公开的模运算生成器可以被配置为执行模5运算,模9运算,模17运算,模33运算等等,直到输入值的宽度。在又一个示例中,所公开的模运算生成器可以被配置为在单个电路中与梅森数除数生成模运算的不同组合。如果图6a和6b的所述添加/级联单元618接收到2个3位数值而不是2个2位数值,则模运算生成器可以被配置为生成模7或模31的残差值。在又一示例中,所公开的模运算生成器可以被配置为在单个电路中生成与费马数除数的模运算的不同组合。所述模运算生成器可以被配置为生成模5或模17的残差值。附加地或替代地,所述模运算生成器可以被配置为生成模9或模33的残差值。各种这样的运算发生器可以被组合成单个电路,该单个电路可以被配置为计算模3、5、7、9、15、17、31、33运算的残差值。在又一个示例中,公开的模运算生成器可以被配置为生成既不是梅森数也不是费马数的除数的残差值。如果所述模运算生成器被配置为对超过一个除数执行取模运算,则所述模运算生成器将从多个除数中选择一个除数。所述模运算生成器配置所述累加电路、查找和校正电路或测试和校正电路中的至少一个,以基于所选的除数来执行模运算。
[0110]
例如,可以配置所述模运算生成器,以生成模14或模24运算的残差值,相对于图5-6b所述的模运算生成器而言,具有一些额外的复杂性。
[0111]
图7是根据各个实施例通过图2的并行处理单元执行模运算生成器方法步骤的流程图。尽管结合图1-6的系统描述了方法步骤,但是本领域普通技术人员将理解为在本公开
的范围内,配置为以任何顺序执行本方法步骤的任何系统。
[0112]
如图所示,方法700开始于步骤702,其中模运算生成器的一个累加电路对输入值执行一组求和,以生成第一和。所述累加电路将所述输入值划分为多个系数,其中每个系数中的位数取决于所述模运算的所述除数。如果所述除数是梅森数,则所述除数可以表示为m=2n–
1,其中n是每个系数中的位数。所述累加电路通过将系数相加来对梅森数除数执行的所述求和功能。所述累加电路可以通过一系列加法器阶段将系数相加。所述累加电路生成一个和,所述和可以包括一个或更多个保护位,以防止在对系数求和时发生溢出。
[0113]
如果所述除数是一个费马数,则所述除数可以用f=2n 1表示,其中n是每个系数中的位数。所述累加电路通过增加与2的偶数幂次相对应的系数且减去对应于2的奇数幂次的系数来对一个费马数除数执行求和功能。所述累加电路可以通过一系列加法器和/或减法器阶段来添加系数。所述累加电路生成一个和,所述一个和可以包括一个或更多个保护位,以防止在对系数求和时发生溢出。
[0114]
在步骤704,所述模运算生成器的一个查找和校正电路访问一个校正值,所述校正值与第一和的第一部分相关联。第一和的第一部分包括第一和的最高有效位,并且对应于由累加电路相加的保护位。第一和的第二部分包括第一和的最低有效位,并且包括与输入值的每个系数相同数目的位。如果除数是梅森数,则所述查找功能确定要添加到第一和的第二部分的校正值。如果除数是费马数,则所述查找功能确定要从第一和的第二部分减去的校正值。
[0115]
在步骤706,所述查找和校正电路对所述校正值和第一和的第二部分执行一组求和,以生成第二和。如果所述除数是一个梅森数,则所述查找和校正电路将所述校正值与第一和的第二部分相加,以生成第二和。如果所述除数是一个费马数,并且如果所述校正值表示为正值,则所述查找和校正电路从第一和的第二部分中减去所述校正值,以生成第二和。但是,如果所述除数是一个费马数,并且如果所述校正值表示为负值,则所述查找和校正电路会对第一和的第二部分增加所述校正值,以生成第二和。
[0116]
在步骤708,测试和校正电路基于所述第二和生成所述模运算的结果。所述测试和校正电路将第二和与所述模运算的除数进行比较。如果第二和小于所述模运算的除数,则所述测试和校正电路将第二和值的最低有效位,作为最终残差值。然而,如果第二和大于或等于所述模运算的除数,则所述测试和校正电路从第二和值中减去所述除数的值,以生成最终残差值。然后,方法700终止。
[0117]
总而言之,各种实施例在基于计算机的系统中包括模运算生成器。所述模运算生成器包括累加电路,所述累加电路对输入值执行第一组求和,以生成第一和。第一组求和可包括加法函数和/或减法函数。所述模运算生成器还包括查找和校正电路,所述查找和校正电路包括查找表和加法器。将第一和的第一部分应用于生成校正值的查找表。所述加法器对校正值和第一和的第二部分执行第二组求和,以生成第二和。所述模运算生成器还包括测试和校正电路,如果第二和总和大于或等于所述模运算生成器的除数,则该测试和校正电路调整第二和。所述测试和校正电路发送由模运算生成器确定的最终残差值。
[0118]
与现有技术相比,本公开技术的至少一个技术优势在于:利用本公开技术,相对于除数为2的幂次的模运算,涉及除数不是2的幂次的模运算的执行时间更少。此外,涉及除数不是2的幂次的除数的模运算,在相同的时间内执行,而与被除数的值无关。结果,相对于现
有技术,包括模运算的操作,诸如在高速缓冲存储器中的片之间分配数据项,被更有效地执行。更具体地,包括15个或17个切片的高速缓冲存储器的性能与包括16个切片的高速缓冲存储器可以具有相同或几乎相同的性能。这些优点表示相对于现有技术方法的一项或更多项技术改进。
[0119]
以任何方式,在任何权利要求中记载的任何权利要求要素和/或在本技术中描述的任何要素的任何和所有组合都落入本公开和保护的预期范围内。
[0120]
已经出于说明的目的给出了各种实施例的描述,但是这些描述并不旨在是穷举性的或限于所公开的实施例。在不脱离所描述的实施例的范围和精神的情况下,许多修改和变化对于本领域普通技术人员将是显而易见的。
[0121]
本实施例的各方面可以体现为系统,方法或计算机程序产品。因此,本公开的方面可以采取完全硬件实施例、完全软件实施例(包括固件、驻留软件、微代码等)或结合了通常可以被全部提及的软件和硬件方面的实施例的形式。此外,本公开的方面可以采取体现在其上体现有计算机可读程序代码的一个或更多个计算机可读介质中体现的计算机程序产品的形式。
[0122]
可以利用一个或更多个计算机可读介质的任何组合。所述计算机可读介质可以是计算机可读信号介质或计算机可读存储介质。计算机可读存储介质可以是例如但不限于电子、磁性、光学、电磁、红外或半导体系统、装置或设备、或前述的任何合适的组合。计算机可读存储介质的更具体示例(非详尽列表)将包括以下内容:具有一根或多根电线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(ram)、仅内存(rom)、可擦可编程只读存储器(eprom或闪存)、光纤、便携式光盘只读存储器(cd-rom)、光学存储设备、磁存储设备或任何其他前述的适当组合。在本文的上下文中,计算机可读存储介质可以是任何有形介质,其可以包含或存储供指令执行系统,装置或设备使用或与其结合使用的程序。
[0123]
上面参考根据本公开的实施例的方法,装置(系统)和计算机程序产品的流程图和/或框图描述了本公开的各方面。将理解的是,流程图图示和/或框图的每个框以及流程图图示和/或框图中的框的组合可以由计算机程序指令来实现。可以将这些计算机程序指令提供给通用计算机、专用计算机或其他可编程数据处理设备的处理器以生成机器,所述指令通过计算机或其他可编程数据处理设备的处理器执行,使得能够实现在流程图和/或框图方框中指定的功能/动作。这样的处理器可以是但不限于通用处理器,专用处理器,专用处理器或现场可编程门阵列。
[0124]
附图中的流程图和框图示出了根据本公开的各种实施例的系统、方法和计算机程序产品的可能的实现的架构、功能和操作。就这一点而言,流程图或框图中的每个方框可以代表代码的模块、段或部分,其包括用于实现指定的逻辑功能的一个或更多个可执行指令。还应注意,在一些替代实施方式中,方框中指出的功能可以不按图中指出的顺序发生。例如,取决于所涉及的功能,实际上可以基本上同时执行连续示出的两个框,或者有时可以以相反的顺序执行这些框。还应注意,框图和/或流程图说明的每个方框以及框图和/或流程图说明中的方框的组合可以由执行指定功能或动作的基于专用硬件的系统、或专用硬件和计算机指令的组合来实现。
[0125]
尽管前面针对本公开的实施例,但是可以在不脱离本公开的基本范围的情况下设计本公开的其他和进一步的实施例,并且本公开的范围由所附权利要求书确定。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献