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

配置精简指令集计算机处理器架构以执行全同态加密算法的制作方法

2022-06-16 07:45:04 来源:中国专利 TAG:

配置精简指令集计算机处理器架构以执行全同态加密算法
1.相关专利申请资料
2.本技术为于2018年5月4日提交的的申请号为15/970,915的美国申请的部分继续案申请,本技术要求于2019年8月7日提交的申请号为62/883,967的美国临时申请的优先权,上述专利申请的全部公开内容以引用方式并入本技术。
技术领域
3.本公开涉及一种用于配置精简指令集计算机处理器架构从而以流模式执行全同态加密算法的系统及方法。


背景技术:

4.在过去的若干年中,计算需求已发生巨大变化。自20世纪80年代以来,计算机处理器设计一直专注于优化处理器,以执行超大规模的计算机代码。例如,微软office,一款流行的办公套件,据估计具有数千万行代码。然而,这些庞大的代码基所操纵的数据大小却相对较小。例如,在大多数情况下,由代码基所操纵的全部数据仅仅是若干兆字节的word文档。其它应用程序,诸如图形处理应用程序,在生成大量数据时也具有使用大型代码基来操纵相对较小的工作集的数据的相同的不平衡特征。因此,常规图形处理器的设计往往是基于类似于用于更加代码密集型的应用程序的处理器的技术。
5.复杂指令集计算(cisc)处理器所基于的处理器设计中,单条指令可执行若干个低级操作(诸如从存储器加载、算术运算、以及存储器存储),或者能够在单条指令内进行多步的运算或寻址模式。cisc处理器的特征在于每条指令有具有很多个时钟周期、由于实施每条复杂指令所需的大量电路导致的缓慢的整体时钟、以及单个控制线程,因此cisc处理器被表征为以控制为中心。如本文所提及的,术语“以控制为中心”是指主要依靠读取指令和执行指令以用于处理和移动数据的处理器。在大多数应用中,移动数据为最消耗资源的操作。
6.更近期地,精简指令集计算机(risc)处理器已变得流行。risc处理器为这样的一个处理器:其指令集架构具有一组属性,允许其具有实施其指令所需的简单得多的电路,并且因此每条指令比复杂指令集计算机具有更少的周期。相比于运行得更慢的具有一组大量复杂和专用指令的处理器,运行得更快的具有一组少量简单和通用指令的处理器通常具有更高的效率。risc处理器的特征在于具有针对每条指令的相对较少的时钟周期、快时钟、单个时钟线程,并且risc处理器被表征为以控制为中心。
7.由于处理器必须运行非常大的指令代码基的要求,因此,risc处理器已利用由甚至更大的双数据速率(ddr)dram存储器进行备份的多级存储器高速缓存进行优化。从时钟周期存取视角来看,较小的存储器高速缓存比大的dram更快。由于代码呈现了“调用的局部性”,即需要在代码基中执行的下一条指令相对较近(由其地址来定义的距离)的可能性,该dram保存了大部分可执行代码,并且要执行的特定代码从dram被加载到存储器高速缓存中,使得待访问的下一条指令在高速缓存中以很高的概率可直接获得。虽然这个多级高速
缓存系统在加速执行大型代码基方面非常出色,但在移动大量数据时却失败了。
8.新式risc处理器设计由多个级别的高速缓存构成。对于大型可执行代码基,这允许指令流的灵活性,但对于大量数据来说却不是有效的。将数据移进和移出高速缓存是相对较慢的,在所有级别的高速缓存和存储器中维持缓存一致性需要附加电路方面的开销,而且需要大量的能量。这样的“惩罚性效应”在一组指令从dram中输入并从高速缓存中多次执行时为可接受的,但对于数据移动来说效率为非常低下的。仅需要被处理一次的数据仍必须经过高速缓存的缓存开销(附加功耗、意味着更慢的时钟速度的附加电路,以及多个高速缓存中的多个副本)。
9.数据移动惩罚性效应为包括图形处理器单元(gpu)的新式处理器架构的特征。处理器和gpu的多核设计针对每个个体处理器内核对高速缓存进行复制,这在使用这些传统的架构来解决需要大量数据移动的问题时只会加重性能和功耗方面的惩罚性效应。诸如全同态加密(fhe)、人工智能(ai)、深度学习(dl)、机器学习(ml)、机器智能(mi)、神经网络(nn)的近期发展的计算技术需要巨量的计算资源,其所需数量的处理器内核的总体综合性能以每秒万亿次运算(teraoperations)或万亿次浮点运算(teraflops)计量并且功耗以100瓦为单位计量。
10.利用各种加密算法对数据进行加密以便于在传输和存储期间保证数据的安全是众所周知的。然而,大体上来说,被加密的数据必须解密,以便于处理该数据。这意味着该数据至少在数据被处理的时间窗内是不安全的。在该时间窗期间,该未加密数据可能被攻击者复制或篡改。针对该原因,对于需要极高安全级别的数据,在基于云的环境和其它潜在的不安全的环境中处理数据是不常见的。
11.最近,“全同态加密”(fhe)的概念,即可在加密数据上实现任意函数而无需解密的加密方案(例如,对于m1
……
mt的给定加密e(m1)
……
e(mt),其可针对任何可计算的函数f有效地计算出加密f(m1
……
mt)的紧凑密文)。换句话说,在解密后,应用于加密数据的函数的结果将与应用于被解密的输入数据的对应函数的结果相同。例如,文献《全同态加密方案》,craig gentry,2009年9月,教导了此类加密方案。然而,由于fhe算法是由一组复杂的以控制为中心的指令模块来实现的,这些指令模块作为顺序代码进行运算,并调用同样作为顺序代码运算的其它模块,因此fhe算法还没有成为广泛可行的。因此,针对上文列出的原因,fhe算法的实际使用通常需要基于常规处理器技术不容易获得的计算资源水平。
12.例如,tfhe为针对fhe处理的开源软件库。tfhe是根据apache 2.0许可证的条款发行的。iacr会议asiacrypt 2016的会议论文《更快速的全同态加密:在少于0.1秒的时间内引导程序》,ilaria chillotti、nicolas gama、mariya georgieva及malika izabach
è
ne,描述了tfhe的底层方案。tfhe为允许使用门对门引导程序对由二进制门、过加密数据构成的任意布尔电路进行fhe评估的c/c 软件库。tfhe支持对10个二进制门(与、或、异或、与非、或非等
……
)以及否定门和多通道门进行同态评估。
13.该软件库实现了对gsw密码系统的环变型。其还实现了针对反循环的环的专用快速傅里叶变换(fft),并使用avx组件对指令进行矢量化。该默认参数集基于理想晶格假设来实现110位密码安全。该软件库接口可用于常规c代码的实施。
14.由于fft函数在fhe中是至关重要的,因此,专用fft处理器是运行tfhe所需要的。fhe确实是众所周知地难于实现,由于fhe的巨大的计算需求,以未加密形式通常仅需花费
数毫秒的任务在以fhe形式处理时往往需要花费数小时。fhe的巨大的计算需求主要是由于fhe代码中的for循环。针对每个加密布尔门运算:
15.·
存在环的500次迭代,
16.·
在每次环迭代中存在五个步骤,
17.·
一个步骤由四个1024点的ifft组成,并且
18.·
另一个步骤由两个1024点的fft组成。
19.这导致在每个加密布尔门运算中存在3000个ifft/fft。此外,由于在每次环迭代中包含五个步骤,因此,这五个步骤在常规处理器架构中不能被流水线化而是必须串行执行。另外,这500次迭代中的各次迭代必须串行执行。这导致必须串行执行的2500个步骤。在使用常规处理架构和技术时,这存在巨大的计算负担。


技术实现要素:

20.本文所述的实施方式包括创建从tfhe函数获得的以数据为中心的流式拓扑。当以本文所述的方式转化成流式拓扑时,tfhe函数可利用少得多的计算资源来实现。换句话说,就能够以显著更快并且更实用的方式实现fhe算法而言,本文所公开的方法及装置使得计算机以更高效的方式运行。
21.所公开的实施方式的一个方面为一种用于配置精简指令集计算机处理器架构以处理有限长度序列n的离散傅里叶变换(dft)的方法,其中该计算机处理器架构包括由risc处理器定义的多个主处理内核,每个主处理内核包括主存储器、至少一个高速缓冲存储器和多个算术逻辑单元,每个主内核具有相关联的节点封装器,该节点封装器包括与每个算术逻辑单元相关联的存取存储器、与每个算术逻辑单元相关联的加载/卸载矩阵,该方法包括:(a)将频域抽取算法应用于dft,以将有限长度序列n的dft分解成各自n/2长度的两个派生dft;(b)为派生dft的每个级构建等效逻辑元件,所构建的等效逻辑元件的输入和输出由实数成分和虚数成分构成;(c)针对dft的每个级重复(a)和(b),除dft的端点级之外;(d)针对dft的每个端点级,为派生dft的对应级构建等效逻辑元件,所构建的等效逻辑元件的输入和输出仅由实数成分构成;(e)将计算机处理器架构的至少一个主内核配置为以流模式运算的方式实现dft的每个级的等效逻辑元件,其中从对应算术逻辑单元流出的数据流进主存储器中以及多个算术逻辑单元中的其它算术逻辑单元中;以及(f)将计算机处理器架构配置成将dft的每个级的输出耦接到后续级的输入。
22.所公开的实施方式的另一方面为一种用于配置精简指令集计算机处理器架构以将全同态加密(fhe)逻辑门作为流式拓扑来执行的方法,其中该计算机处理器架构包括由risc处理器定义的多个主处理内核,每个主处理内核包括主存储器、至少一个高速缓冲存储器和多个算术逻辑单元,每个主内核具有相关联的节点封装器,节点封装器包括与每个算术逻辑单元相关联的存取存储器、与每个算术逻辑单元相关联的加载/卸载矩阵,该方法包括:解析顺序fhe逻辑门代码;将fhe逻辑门代码转化成一组代码模块,该一组代码模块中的每个代码模块各自具有输入和作为输入的函数的输出并且不将控制传递给其他函数;在每个代码模块周围创建节点封装器;将所述主处理内核中的至少一个主处理内核配置成以流模式运算的方式实现每个元件的等效逻辑元件,其中从对应算术逻辑单元流出的数据流进主存储器中以及多个算术逻辑单元中的其它算术逻辑单元中。
23.所公开的实施方式的另一方面为一种用于处理有限长度序列n的离散傅里叶变换(dft)的计算机处理器架构,其中该计算机处理器架构包括:由risc处理器定义的多个主处理内核,每个主处理内核包括主存储器、至少一个高速缓冲存储器和多个算术逻辑单元,每个主内核具有相关联的节点封装器,该节点封装器包括与每个算术逻辑单元相关联的存取存储器、与每个算术逻辑单元相关联的加载/卸载矩阵;其中dft的多个级通过以下步骤进行构造:(a)将频域抽取算法应用于所述dft,以将有限长度序列n的dft分解成各自n/2长度的两个派生dft,(b)为派生dft的每个级构建等效逻辑元件,所构建的等效逻辑元件的输入和输出由实数成分和虚数成分构成,(c)针对dft的每个级重复(a)和(b),除dft的端点级之外,(d)针对dft的每个端点级,为派生dft的对应级构建等效逻辑元件,所构建的等效逻辑元件的输入和输出仅由实数成分构成;其中该计算机处理器架构的至少一个主内核被配置成以流模式运算的方式实现dft的每个级的等效逻辑元件,其中从对应算术逻辑单元流出的数据流进主存储器中以及多个算术逻辑单元中的其它算术逻辑单元中;并且其中该计算机处理器架构被配置成将dft的每个级的输出耦接到后续级的输入。
24.所公开的实施方式的另一方面为一种用于将全同态加密(fhe)逻辑门作为流式拓扑来执行的计算机处理器架构,其中该计算机处理器架构包括:由risc处理器定义的多个主处理内核,每个主处理内核包括主存储器、至少一个高速缓冲存储器和多个算术逻辑单元,每个主内核具有相关联的节点封装器,该节点封装器包括与每个算术逻辑单元相关联的存取存储器、与每个算术逻辑单元相关联的加载/卸载矩阵;其中顺序fhe逻辑门代码被转化成一组代码模块,所述一组代码模块中的每个代码模块各自具有输入和作为所述输入的函数的输出并且不将控制传递给其他函数,节点封装器在每个代码模块周围被创建;并且其中所述主处理内核中的至少一个主处理内核被配置成以流模式运算的方式实现每个元件的等效逻辑元件,其中从对应算术逻辑单元流出的数据流进主存储器中以及多个算术逻辑单元中的其它算术逻辑单元中。
25.在参考附图并阅读下列具体描述和所附权利要求书之后,本技术的技术方案的这些和其它特征和特点,其运算方法和相关结构元件的功能,结构部件和制造步骤的组合,都将变得更加容易理解,所有这些形成本说明书的一部分,其中相似的附图标记在各个附图中表示相对应的部件。然而,应当明确理解的是,附图仅为例示和说明的目的,并且不旨在作为对本发明的范围的限定。在说明书中和权利要求书中所提及的单数形式“一”、“一个”和“所述”也包含复数个指代物的意思,除非上下文另有明确规定。
26.附图简要说明
27.图1为根据一个或多个实施例的处理器架构的示意图。
28.图2a为单个risc处理器和相关硬件的示出控制模式和流模式两者的数据流的示意图。
29.图2b为处理器架构的示出可动态且灵活地配置的内核模式的示意图。
30.图3为根据一个或多个实施例的处于流传输模式中的处理器架构的流水线的流程图。
31.图4为根据一个或多个实施例的处于流模式中的辅内核的示意图。
32.图5为根据一个或多个实施例的辅内核的特定拓扑的示意图。
33.图6为根据一个或多个实施例的用于配置架构的方法的流程图。
34.图7为segnet架构的示意图。
35.图8为segnet实施例的一部分的数据流的流程图。
36.图9为压缩数据结构的示意图。
37.图10为xencoder的实施例的流程图。
38.图11为zmac的实施例的流程图。
39.图12示出了根据一个或多个实施例的从用于全同态加密的tfhe库中的bootsand函数获得的顶级拓扑。
40.图13示出了根据一个或多个实施例的利用部分展开tfhe_muxrotate_fft循环的bootsand顶级拓扑。
41.图14示出了根据一个或多个实施例的从tgswfftexternmultotlwe函数获得的顶级拓扑。
42.图15以图形方式示出了根据一个或多个实施例的频率抽取如何可用于将n=8点的dft分解成两个n/2=4点的dft。
43.图16为根据一个或多个实施例的将8点的dft分解成四个2点的dft的频率抽取分解的流程图。
44.图17为fft蝶形结构的基本流程图。
45.图18为根据一个或多个实施例的fft蝶形函数的逻辑元件图示。
46.图19示出了根据一个或多个实施例的图19的蝶形函数映射到流式拓扑的物理内核。
47.图20为根据一个或多个实施例的将n=8点的dft分解成两个n/2=4点的计算的时域抽取(dit)的流程图。
48.图21为根据一个或多个实施例的将n=8点的dft分解成四个2点的计算的时域抽取的流程图。
49.图22示出了根据一个或多个实施例的针对单级的输入蝶形运算的图示。
50.图23示出了根据一个或多个实施例的图23的蝶形运算的逻辑元件图示。
51.图24示出了根据一个或多个实施例的图24的逻辑元件映射到本文所述的流式拓扑的内核上。
52.图25示出了根据一个或多个实施例的示出系数表示和点值对表示的多项式乘法。
53.图26示出了根据一个或多个实施例的等效简化逻辑流。
54.图27示出了根据一个或多个实施例的第一级流式拓扑。
55.图28示出了根据一个或多个实施例的特殊最后一级流式拓扑。
56.图29示出了根据一个或多个实施例的简化形式的优化ifft的最后一级。
57.图30示出了根据一个或多个实施例的最后一级流式拓扑映射到内核上。
58.图31a-图31d示出了根据一个或多个实施例的整个fft映射到内核。
59.图32a-图32d示出了根据一个或多个实施例的整个ifft映射到内核。
具体实施方式
60.发明人已开发出允许处理器内核(诸如已知的risc处理器)用于增加计算能力的架构和方法。在此被称为“主内核”的处理器内核被分割成控制逻辑元件和简单处理元件,
诸如算术逻辑单元。节点封装器允许架构被配置成其中可定义流水线并且可将数据直接流传输到作为“辅内核”的执行单元/处理元件的流模式(“碎片化模式”)。申请人是指使用商品名“fractal corestm”的辅内核。在流模式中,无需使用处理器的控制逻辑。该辅内核独立寻址,并且当数据在流水线中从一点流传输到另一点时,将数据存储在临时存储装置中的需求减少。该架构在芯片、主板和机架上可扩展。
61.图1示出了计算架构的实例。如在图1中所示的,架构102包含多个主处理内核108a、108b
……
108n。如在下文更详细地描述的,每个主处理内核108可包含对应节点封装器110a、110b
……
110n(为清楚起见,仅这些对应节点封装器中的一些对应节点封装器在图1中被标记)。每个主处理内核108可由risc处理器诸如“altera nios
tm”处理器定义。作为非限制性实例,每个主处理内核108可包含具有多个高速缓冲存储器的对应主存储器112a、112b
……
112n(为清楚起见,仅这些对应主存储器中的一些对应主存储器在图1中被标记)。节点封装器110可包含与每个辅内核相关联的存取存储器,以及与每个辅内核相关联的加载/卸载矩阵。每个主处理内核108还可包含可独立或共同定义在下文详细描述的辅处理内核的一组处理单元114a、114b
……
114n,诸如算术逻辑单元(alu)。
[0062]“封装器”通常被称为容纳(“包覆在它们周围”)其它硬件、数据或软件的硬件或软件,使得所包含的元件可存在于较新的系统中。该封装器提供到现有元件的新接口。在实施例中,该节点封装器提供可被配置成允许在常规的以控制为中心的模式中、或在流模式中、或在碎片化模式中进行执行的可配置接口,如下文所述。
[0063]
在常规的以控制为中心的模式(risc模式)中,该架构使用内核控制逻辑来控制数据流并且其运行方式使得数据从高速缓冲存储器读取以及被写入高速缓冲存储器,并且该数据根据控制逻辑由主内核进行处理。然而,如在下文更详细地描述的,作为流水线的一部分,辅内核114可选择性地“碎片化”,以在碎片化模式中运行,其中从对应辅内核流出的数据流进主存储器中和多个辅内核中的其它辅内核中,并且从主存储器和其它辅内核流出的数据流进对应内核中。例如,可使用单精度浮点算法从结果矩阵y创建矩形分区。
[0064]
节点封装器110可被配置成对逻辑部件和用于将数据从存储器传送到处理元件的输入状态机进行分区,并且其中每个算术逻辑单元具有与输出存储器相关联的输出。在整个处理过程中,该输出存储器在进行计算时可利用最新的和值进行更新。risc处理器的算术逻辑单元114在流模式中可被用作流传输辅内核。每个节点封装器110可被配置成定义将被分配到内核中的特定多个内核的多个硬件流,即流水线。
[0065]
图2a示出了架构的两种可能的运行模式,即risc模式和碎片化模式。如图2所示,risc处理器208包含两个处理元件,alu1和alu2。节点封装器210包含两个辅节点封装器nw0和nw1。存储器212包含辅存储器m0和m1。在risc模式中,由实线指示的数据流从片上网络(noc)诸如pcie总线流向存储器112,以由risc处理器208进行处理。在碎片化模式中,该流由虚线指示。在碎片化模式中,节点封装器210被用作辅节点封装器nw0和nw1,并且存储器212被用作辅存储器m0和m1,以定义该实例中的两个数据流。一个数据流穿过alu1并且另一个数据流穿过alu2,其中alu1和alu2各自定义辅内核。当然,risc处理器可具有任何数量的处理元件,并且数据流可根据需要进行配置。需注意,在该实例中,该risc模式包含四个数据流和相对较大的存储器,而在碎片化模式中包含两个数据流和相对较小的存储器。
[0066]
如在图2b中示意性地所示的,该架构的一些内核可被配置成在risc模式中运行,
而该架构的另一些内核可被配置成在碎片化模式运行,如在任何特定时间由任何特定应用所需要的。此外,内核模式可在执行期间被实时动态配置。在图2b中的左边,所有内核被配置作为主内核(risc模式)。在图2b中的右边,一些内核被配置作为主内核并且另一些内核被配置作为辅内核(破碎模式)。该配置可采取在特定时间由特定应用所需要的任何形式。一些实例包括:
[0067]
·
112个risc内核/1480个碎片化(fc)内核:每个1u服务器具有896个risc内核/12k个fc内核,每个机架具有36k个risc内核/474k个fc内核
[0068]
·
480个risc内核/7420个fc内核:每个1u服务器具有4k个risc内核/60k个fc内核,每个机架具有154k个risc内核/2.4m个fc内核
[0069]
·
8196个risc内核/131136个fc内核:每个1u服务器具有66k个risc内核/1m个fc内核,每个机架具有2.6m个risc内核/42m个fc内核
[0070]
参见图1,各种互连装置由节点封装器使用片上网络(noc)进行配置。在该实例中,该noc为l0开关经由64位通道互连到l1开关的双层noc。该noc还具有以线性方式将所有辅内核互连的覆盖网络,如由图1中的红色箭头所示的。在该实例中,该开关为“交叉点”开关,即被布置成矩阵配置的开关的集合。每个开关可具有形成互连线的交叉图案的多个输入线和输出线,通过闭合位于各个交叉点(矩阵的元素)处的开关,可在互连线之间建立连接。在该实例中,使用pci express(pcie)总线接口。pcie提供信道的可在
×
2、
×
4、
×
8、
×
16和
×
32配置中组合的切换架构,从而创建独立控制的“通道”的并行接口。
[0071]
在一些实施例中,该架构可形成在单个芯片上。每个高速缓冲存储器可为包括多个小存储器的节点存储器。在一些实施例中,每个内核可具有多个算术逻辑单元。在一些实施例中,作为非限制性实例,该算术逻辑单元可包含以下各项中的至少一者:整数乘法器、整数乘法器加速器、整数除法器、浮点乘法器、浮点乘法器加速器、浮点除法器。在一些实施例中,该算术逻辑单元可为单指令多数据单元。作为简单的实例,架构可由各自具有16个处理元件的500个主处理内核108构成。在流模式中,最多至8000个辅内核114可独立寻址。这允许执行如人工智能应用程序中所需要的大量的数学运算。主内核和辅内核可动态地混合,以实现新算法。
[0072]
在下文描述了用于配置架构的过程和机制。如上文所指出的,碎片化模式通过限定辅内核之间的流式数据的一条或多条流水线来实现。图3示出了将4个算术逻辑单元302,304,306和308串联连接使得来自源301的输入被处理成输出309的简单的数据流水线。alu为上文所述的定义辅内核的处理元件的实例。通过在noc中设置上文所述的开关l0和l1而定义该流水线。当然,noc可以任何方式配置,以定义任一条或多条数据流水线。合适的一个或多个节点封装器110能够执行代码,以配置noc。例如,图2的流水线可通过执行下面展示的c 代码对象来进行配置。需注意,关键字“threadmodule”是该工具使得指要执行的代码将运行在risc内核上,而关键字“streammodule”是指要执行的代码将运行在碎片化内核上。
[0073][0074]
[0075]
下文的代码服务于连接图3的流水线的拓扑,其中源(source)和接收端(sink)运行在risc内核上,并且4个碎片化内核执行mac(乘法累加):
[0076][0077]
图4示出了由处理元件定义的辅内核400的实例的顶级图示。流水线配置需要一定数量的时钟周期,以用于在再次访问该元件之前,从y存储器读取一个值,添加到新的结果值中,并送回到y存储器中。在y存储器元件准备好被读取之前到达的结果值被分流到t-fifo以供随后的累加。存储器危险逻辑(未示出)可用于确定用于新的结果值的y存储器中的位置最近是否已被使用,这在设计中控制数据的转向。预加载的x存储器(x mem)将x(右)矩阵的分区保持为适用于由这一小内核执行的y(结果)矩阵的分区。a(左)矩阵的可适用的分区以压缩形式流入到处理元件(pe)中(仅非零元素,随附有行/列信息)。在矩阵被计算时,y存储器(y mem)对结果值进行累加。该实施例还可包含环中的相邻处理元件114之间的点对点连接,以允许在两个或多个处理元件之间划分特定y元件的处理负载,这有助于使设计可扩展到更大的矩阵,而不会有显著的性能损失。
[0078]
图5示出了辅内核500的特定拓扑。该设计包含围绕处理元件创建的测试架构,该测试架构允许测试矩阵最初存储在中央存储器中,自动分区并递送到处理元件,通过处理元件运行并可以对测试矩阵进行连续的重复(用于功率测量),并且然后将结果分区收集起来并重新组装到完整的输出矩阵中,然后送回到中央存储器中,其中,可使用存储初始化和转储工具轻松地访问中央存储器中的运算结果。
[0079]
图5中的每个处理元件114在输入侧上与用于将数据从本地存储器传送到处理元件的节点输入存储器、分区逻辑部件和输入状态机相关联。在输出侧上,每个处理元件114与在整个过程中在计算时利用每个y元素的最新和值进行更新的输出存储器相关联。在矩阵处理完成时,在输出存储器中累加的数据经由组合器传送回到中央存取存储器,该组合器或者从前置级的处理元件114传递数据,或者利用来自本地处理元件114的数据来替换输入值,以在按行和列扫描矩阵时重构完整矩阵。
[0080]
中央存取存储器中的编程信息和数据信息包括针对每个包含处理元件114的用于处理元件114的分区信息的设置词。该设置词将位于每个处理元件114处的分区逻辑部件配置成仅使用具有与处理元件的分区相关联的行和列的数据。预加载x矩阵数据和流式a矩阵数据两者通过相同的路径抵达并使用相同的分区设置从来自中央存储器的数据流中选择数据。位于每个处理元件114处的所选择的数据被写入节点输入存储器,并被保持,直到存
取管理器完成传送数据并开始进行处理。当处理开始时,该处理仅使用已被传送到节点存储器中的数据并且在已达到数据的末尾时停止。如果在开始词中设定了重复位,当到达缓冲数据的末尾时,进入节点输入存储器的指针将被重置为0,并允许无限地重复该数据。这允许将进行的功率测量。
[0081]
图6示出了根据一个或多个实施例的用于重新配置精简指令集计算机处理器架构的方法600。在下文呈现的方法600的操作旨在为示例性的。在一些实施例中,方法600可利用未描述的一个或多个附加操作来实现,和/或无需所讨论的操作中的一个或多个操作来实现。另外,在图6中示出并在下文中描述的方法600的操作顺序并非旨在为限制性的。
[0082]
操作602可包括将配置代码提供给一个或多个节点封装器。操作604可包括执行配置代码,从而以至少在管道上创建的方式设定noc的互连装置。操作606可包括以流模式操作架构,其中从对应辅内核流出的数据流进主存储器中和多个辅内核中的其它辅内核中,并且以流模式或以控制为中心的模式从主存储器和其它辅内核流出的数据流进对应内核中。
[0083]
图7和图8示出了应用到segnet拓扑的架构的特定实例。如上文所指出的,segnet为用于语义像素级分割的全卷积神经网络(cnn)架构。该内核可训练分割引擎由编码器网络、对应的解码器网络和像素级分类层组成。编码器网络的架构与vgg16网络中的13个卷积层在拓扑方面是相同的。解码器网络的角色是将低分辨率编码器特征图映射到全输入分辨率特征图,以进行像素级分类。该segnet解码器对其较低分辨率的一个或多个输入特征图进行上采样。具体地,该解码器使用对应编码器的最大池化步骤计算的池化索引来执行非线性上采样。这消除了学习上采样的需要。上采样地图是稀疏的,并且然后与可训练过滤器进行卷积,以产生密集特征地图。
[0084]
如在图7中所示的,segnet拓扑700包含编码器710和解码器720。三维cnn拓扑可使用本文所公开的技术被转化成等效一维拓扑。第一segnet层712可被转化成在图8中示出的77级碎片化内核流水线800。在图8中示出的各级执行以下操作:
[0085]-填充(顶部)、填充(底部)、填充(左部)和填充(右部)在图像周围添加零填充。不需要存储器。
[0086]-重排序级将基于行的视频流转换为基于窗口的流。访问片上sram。
[0087]-64个卷积级为64个过滤器(核)中的每个过滤器(核)执行卷积。访问片上sram。
[0088]-批量归一化级执行批量归一化。访问片上sram。
[0089]-relu级实现校正线性单元(relu)激活函数。不需要存储器。
[0090]-三个池化级执行最大池化。访问片上sram。
[0091]
该实施例有利于更有效的数据压缩。根据它们的定义,神经网络包含高度的稀疏性,对于segnet cnn,超过3成的计算涉及零元素。清楚地,具有可自动消除针对零数据的多余数据移动以及对于随机稀疏性和非随机稀疏性两者的乘以零的冗余运算的架构将导致更高的性能和更低的功耗。不被移动的数据导致带宽减少和功率节省。不需要执行的乘法运算也节省了功耗,并且允许将乘法器被非零的数据所利用。就乘法累加而言,最高带宽和计算负载发生在退出“重排序”模块801并馈送至“卷积”模块802的数据流中。对离开重排序模块801的数据进行自动压缩减小了馈送至卷积模块所需的带宽,而且减少了每个卷积模块所执行的最大mac(乘法累加)。存在若干种可以被执行的可能的零压缩方案,所示出的是
考虑了卷积神经网络的性质的方案。至卷积器802的输入由三维数据结构(宽度*高度*信道长)构成。卷积被定义为将w*h*c的每个元素与也由(宽度*高度*信道长)构成的核权重数据结构相乘的乘积进行求和(累加)。输入到卷积器中的数据表现出两种类型的稀疏性-分布在w*h*c数据结构中的随机零位,以及跨连续的(w 1)*(h 1)*c数据元素的零位的短“突发”。从重排序模块发送到卷积器模块的压缩数据结构在图9中详细描述。对于可能的每32个值,发送一个位掩码值901,该位掩码值901后面跟着任何非零数据值902。位掩码中的每个比特位指示该位置中是否存在有效数据或零数据。在该位置不存在零数据的情况下,901将全部为零,后面跟着32个数据值902。在该位置存在32个零数据值的另一极端情况下,901将全部为“1”,后面没有跟着数据值902。在存在非零数据值和有效数据值的混合的情况下,位掩码901将指示这种情况并且只有非零数据值将在902中跟随其后。图10为驻留在执行压缩的重排序模块801中的电路的流程图。
[0092]
图11为驻留在执行解压缩的卷积器802中的电路的流程图。需注意,非零的比特位非常关键,因为卷积运算必须将非零数据与正确的核权重相乘——因此必须维护计数器(图11,步骤1和步骤5)。优势如下文:给定宽度为7,高度为7,信道长为64的segnet重排序/卷积,没有压缩的方法将来自重排序模块801的3136(7*7*64)个值发送到每个卷积器802,其中将执行3136个乘法累加。以50%的零值概率,所述电路将发送98个位掩码和仅1568个数据值。这导致了将近50%的带宽节省以及在64个单独卷积器中的乘法累加运算量的50%的减少。作为另外一种选择,更简单的压缩方案诸如向每个数据值添加附加比特位以指示“零”数据并且添加若干个比特位以指示零值的“计数”也可用于执行压缩,但代价是增加承载数据值的总线的位宽。
[0093]
如上面所看到的那样,本文所述的流式拓扑可在使用远比常规处理器所需的计算资源更少的计算资源的条件下被应用于实现fhe处理。fhe具有非常复杂并且计算资源密集型的专业逻辑门。例如,tfhe的bootsand逻辑门具有各自带有501个32位整数的两个输入(lwesample)。将fhe逻辑部件(诸如tfhe逻辑部件)转换为本文所期望的流式拓扑产生了效率高得多的处理。本文所述的实施例包括从三个tfhe函数获得的拓扑:(1)bootsand,(2)tfhe_muxrotate_fft和(3)tgswfftexternmultotlwe。
[0094]
下面是tfhe代码中使用的常量。它们用于计算如下所述的流式拓扑中的数据成员的大小和for循环限制。
[0095][0096]
torus32为在tfhe代码和在trustream拓扑中使用的关键类型定义:
[0097][0098][0099]
tfhe代码被划分为参考(“结构”),这些参考是复合数据类型声明,用于定义一个名称下的变量的物理分组列表。该结构可被看作是由函数处理的数据。例如,tfhe bootsand代码包括可分类为1)静态/非流式(这些类型的数据值针对特定布尔and门是固定的/静态的,并且因此可存储在sram中)或2)动态/流式(周期性或不断变化的数据值,从一个内核流到另一个内核)的23个结构。
[0100]
tfhe代码为利用c/c 表达的,这两种语言都广泛使用了:
[0101]-新建(请求过程的堆上的存储器分配的库函数)
[0102]-分配存储器(分配所请求的存储器并返回一个指向该存储器的指针的库函数)
[0103]-删除(请求移除过程的堆上的存储器分配的库函数)
[0104]-指针。
[0105]
本文所述的该流式拓扑不使用这些系统函数。相反,其使用流。当适于流处理器安排时,这对tfhe代码的9个动态/流式结构有影响。实施例使用机制将这9个结构中的指针数据成员替换为所指向的实际数组,因为代替将数组指针从一个函数传递给另一个函数,流式程序将实际数组从一个模块传递/流向另一个模块。然而,对于常规微处理器,流式编程模型的益处往往是通过流式指针来予以最佳实现。然而,对于常规处理器的流式指针,该安排出于如下原因是不利的。
[0106]
·
流式计算结构是任意可伸缩的
[0107]
·
流式计算结构可实现更高的性能水平
[0108]
·
流式计算结构不具有常规微处理器的如高速缓存、上下文切换、调度和分派的任一个瓶颈
[0109]
·
流式计算结构不具有“膨胀”代码(诸如控制代码),仅在流式计算结构中运行的代码是应用程序代码
[0110]
·
流式计算结构在能耗和硅资产占用的方面远远更高效
[0111]
因此,tfhe bootsand代码的动态结构可转化成可被流化的下列结构体(“s”指代流式结构)。
[0112]
[0113]
[0114][0115]
上文的流式结构可从原始结构中通过例如以下过程创建:
[0116]
·
确定代码中的指针的位置;
[0117]
·
回溯该代码,以查找被创建的数据和被指针指向的所分配的数据块;
[0118]
·
确定所分配的块的尺寸;
[0119]
·
利用与所分配的块对应的数据阵列来替换所述指针;以及
[0120]
·
将所述阵列用作流式数据。
[0121]
图12示出了从用于全同态加密的bootsand函数获得的顶级拓扑。需注意,“内务处理”函数诸如新建和删除在流式编程模型中是不相关的。同样,因为静态函数参数诸如tfhegatebootstrappingcloudkeyset、lwebootstrappingkeyfft和tgswparams可存储在流式架构的合适内核的存储器诸如图1的112a中,因此它们从图12中被省略。拓扑可通过开始调用堆栈、创建具有控制的函数块、并将函数调用转化为模块来获得。下文将列出一个实例。以tfhe_bootstrap_woks_fft函数开始举例:
[0122]
[0123][0124]
对应模块被创建:
[0125]
[0126][0127]
模块的代码被生成:
[0128]
[0129][0130]
最终,流式模块被创建:
[0131][0132]
作为结果,图12每个框表示与tfhe函数对应的流式函数模块,其中一个或多个模块输入流可向该函数提供数据,一个或多个模块输出流从tfhe函数接收输出数据。该输出数据最终传送到另一个流式函数模块。没有传递对其他函数的控制或调用。每个流式函数模块为顶级bootsand拓扑的一部分。该拓扑允许利用并行化和流水线的方式在硅片上重现bootsand运算,并且因此允许在处理bootsand函数方面的高得多的效率以及性能。
[0133]
限制tfhe的性能的最大因素为trustream模块tfhe_blindrotate_fft中的500次for循环的迭代。在部分循环展开过程中,for循环的n次迭代被包含m个for循环的流水线替代,每个for循环具有n/m次迭代。在部分展开流水线中,这些循环被并行执行,而每个循环
内的步骤串行执行。在全循环展开过程中,for循环的n次迭代被包含for循环中的各个步骤的n个实例的无循环流水线替代。在完全展开的流水线中,所有步骤并行执行。
[0134]
图13示出了具有部分展开的tfhe_tfhe_blindrotate_fft循环的bootsand顶级拓扑。在图13中,存在各自包含具有125次迭代的for循环的4个tfhe_blindrotate_fft模块。相比之下,图12的bootsand顶级拓扑具有tfhe_blindrotate_fft模块的单个实例,该实例包含500次迭代的for循环。当然,bootsand顶级拓扑可进一步展开为适用于任何特定应用程序。
[0135]
图14示出了从gswfftexternmultotlwe函数获得的顶级拓扑。
[0136]
有必要确定流式拓扑的吞吐量的上限。申请人已开发出用于确定执行以下运算的序列的流式拓扑的吞吐量的上限的算法:吞吐量的上限(以每次运算的时钟周期为单位)对于流式拓扑,其为单个运算期间的单个拓扑流上所承载的数据值的最大数量。这是因为流能够以每个时钟周期一个数据值的最大速率来传送数据值。对于每个流,对一个运算的数据值的传送必须在可开始传送下一个运算的数据值之前完成。因此,运算的执行速度不能快于每n个时钟周期一个运算,其中n为单个运算期间的单个流上所承载的数据值的最大数量。
[0137]
例如,图12中的拓扑的吞吐量的上限为:(int32’s中的ts_tlwesampleint的大小)*(循环迭代的次数),即每个运算2048*500=1024000个时钟周期。而图13中的拓扑的吞吐量的上限为:(int32’s中的ts_tlwesampleint的大小)*(循环迭代的次数),即每个运算2048*125=256000个时钟周期。
[0138]
如果图12中的循环被完全展开,则可以实现吞吐量的上限为:(int32’s中的ts_tlwesampleint的大小),即每个运算2048个时钟周期。本文所述的流式拓扑可实现该上限是因为每个内核能够:a)在每个时钟周期将数据值输入到其一个或多个输出流,以及b)在每个时钟周期从其一个或多个输入流获取数据值。
[0139]
表1汇总了两个时钟频率下的bootsand函数吞吐量的值:a)125mhz,流拓扑的一些fpga实施例的时钟频率,以及b)1ghz,拓扑的一些自定义asic实施例的预期时钟频率。
[0140]
表1:
[0141][0142]
使用表1中的数值,我们能够计算执行一千种最常见的算术运算所需的时间,这些算术运算包括:加法、减法、取最小值、取最大值和取平均值。表2示出了使用流式拓扑来执行一千种最常见的算术运算所需的时间,这些算术运算包括加法、减法、取最小值、取最大值和取平均值。
[0143] 时钟周期处于125mhz的毫秒处于1ghz的毫秒bootsand(无展开)1,024,0008,1921,024
bootsand(4
×
展开)256,0002,048256bootsand(完全展开)2,048162
[0144]
可以看出,本文描述的流式拓扑大大提高了计算机处理fhe函数的效率。然而,fhe处理的核心为快速傅里叶变换(fft)和快速傅里叶反变换(ifft)。因此,如果能更快地处理fft和ifft,就能获得附加效率。申请人已发现,用于优化傅里叶变换的一些已知的技术可用于在流式环境中创建更高效的处理。
[0145]
傅里叶变换(ft)将时间函数分解其频率分量。时间函数的傅里叶变换本身为频率的复值函数,其幅值(模量)表示该频率在原始函数中存在的量,并且其辐角为该频率中基本正弦信号的相移。傅里叶变换并不局限于时间函数,但原始函数的域通常被称为时域。傅里叶反变换从其频域表示中以数学方式合成原始函数。在一个域(时间域或频率域)中执行的线性运算在另一个域中具有有时更容易执行的对应运算。因此,傅里叶变换在数据处理过程中具有许多应用并且对于一些fhe实施例至关重要。
[0146]
本文所述的实施例定义了处理fft和ifft的新方式。fft可然后被映射到具有高并行性的新的计算实施例,诸如本文描述的流式拓扑。此外,实施例处理每个多项式的fft,并在频域中逐项相乘,然后转换回到时域。常规处理使用系数表示(即乘以每一项的系数)。常规计算成本是n2的量级(其中n为多项式的阶数)。本文所述的方法产生大约是n
×
log(n)的计算成本。
[0147]
本文所述的实施例创建了流水线架构,该流水线架构在端点处以特定级来计算fft算法,该fft算法计算n阶多项式的乘积。这大大减少了计算需求。
[0148]
有限长度序列n的离散傅里叶变换(dft)为:
[0149][0150]
其中,
[0151]
离散傅里叶反变换由以下公式给出
[0152][0153]
使用频域抽取法,我们可利用以下公式将dft的输出序列分割成更小的子序列。
[0154][0155]
公式(2.1)为(n/2)点序列g[n]=x[n] x[n (n/2)]的(n/2)点的dft。
[0156][0157]
图15以图形方式示出了如何使用频域抽取来通过将公式2.1用于偶数输出并且将公式2.2用于奇数输出从而将n=8点的dft分解为两个n/2=4点的dft。图16为将8点的dft分解为4个2点的dft的频域抽取的流程图。需注意,在图16中,存在三个列/级。第一列具有4个各自具有输入和输出的“蝶形”结构。dft的蝶形结构为将较大dft的结果分解成子变换的计算的一部分。图16的每列具有4个蝶形结构。
[0158]
在图17中示出了蝶形结构的基本流程图。上支路的输入为p,并且下支路的输入为
q。每个蝶形结构可映射到一个逻辑元件,并且因此映射到流式拓扑中的一系列内核。图18为fft蝶形函数的逻辑元件图。可以看出,该逻辑结构是由标准逻辑元件(加法器、乘法器
……
)组成的。为了创建流程图,复数输入被划分为实数部分和虚数部分以用于进行计算。上面的输入/输出用于实数部分,而下面的输入/输出用于虚数部分。输入/输出被交叉存取成p和q。在不同级处,蝶形的p输入和q输入选自输入缓冲区内的不同地址。“fan out”和“fifo”完成该地址选择。“加”、“减”和“乘”逻辑元件用于计算复数输入与复数常数“w”的乘积的实数部分和虚数部分。在不同级处,蝶形结构的p输出和q输出被置于不同地址处的输出缓冲区中。“fan in”完成此寻址。
[0159]
图19示出了图18的蝶形函数映射到流式拓扑的物理内核。如上文所述,内核包含可被配置成表示任何处理算法的逻辑元件。结果是fft的一个级的单个蝶形结构被映射到硅片上,以定义用于完成蝶形功能的流式架构。然而,如所讨论的,处理fft需要很多蝶形函数。
[0160]
fft(x[n])的输入序列也可通过应用时域抽取(dit)变换算法分解成越来越小的子序列。如所讨论的,在dif算法中,抽取是在频域中进行的。这就是原因,频率索引是按比特位逆序排列的。在dit中,例如,我们从单个8点的dft开始,然后发展到两个4点的dft,并且最后通过应用以下公式3.1以四个2点的dft结束。
[0161][0162]
公式(3.1)中的每个和值均为(n/2)点的dft。第一个和值为原始输入序列的偶数点的(n/2)点的dft,并且第二个和值为输入序列的奇数点的(n/2)点的dft。图20为将n=8点的dft分解为两个n/2=4点的计算的时域抽取(dit)的流程图。图21为将8点的dft分解为4个2点的dft计算的时域抽取的流程图。这是通过应用公式3.1继续将n/2点的dft划分为n/4点的dft,直到我们得到2点的dft来实现的。图22为单级的输入蝶形运算的图示。图23为以类似于上文关于图18所述的方式而获得的图22的蝶形结构所对应的逻辑元件图。图24为上述逻辑结构映射到本文所述的流式拓扑的内核上。当然,上文描述的工序可用于将逻辑图映射到内核。
[0163]
图25示出了显示系数表示和点值对表示的多项式乘法。图25的上侧是常规方法。在图25的下侧,根据本文所公开的实施例,fft输出的a和b被点乘以获得c。将两种方法的结果应用于逆(插值)算法达到了相同的结果。给定阶界为n的两个多项式和它们的乘积c(x)=a(x)b(x)是阶界为2n-1的多项式。
[0164][0165]
其中,
[0166]
当我们以点值格式表示多项式时,此类计算需要的时间为o(n2)。
[0167]
c=ifft
2n
[fft
2n
(a)
·
fft
2n
(b)],
ꢀꢀꢀ
(4.3)
[0168]
其中,向量a和b利用0填充到长度为2n,并且表示两个2n长度的元素向量的逐分量形式的点乘。
[0169]
考虑到这些向量中的元素为实数(与用作fft的标准输入的复数的情况相反)并且向量具有为n的长度且被零填充为长度2n,fft可通过部署特殊第一级和(n/2)点的fft而被优化,如图25所示。作为结果,优化的fft的第一级具有非常简单的等效逻辑流,如图26所示。这产生了如图27所示的第一级流式拓扑。出于同样的原因,类似的优化的(n/2)点的ifft(以及对应的相对简单的逻辑结构和流式拓扑)可用作最后一级。该特定的最后一级在图28中示出。作为结果,优化的ifft的最后一级具有非常简单的等效逻辑流,如图29所示。这产生了如图30所示最后一级流式拓扑映射到内核。
[0170]
理论上,要将两个n阶多项式相乘,一种有效的方式是对每个多项式的系数应用fft,对fft系数执行点乘,然后执行逆fft。fft和ifft的维度应该为2n。每个多项式的系数均被“零填充”,以成为2n维度的向量。两个n阶多项式的乘积为2n-1阶。在tfhe中,需要利用多项式进行模量算术运算。将两个环面多项式相乘后,最终的乘积(2n-1阶多项式)根据下列公式简化为x
n 1
的模数。
[0171]
c(i)=p(i)-p(n i),i=0,1,

,n-1
[0172]
c(n-1)=p(n-1)
[0173]
在fft实施例方面,在执行2n点的fft之前,通过使用下列公式来调整fft输入,以实现这种模量运算。
[0174][0175][0176]
由于这种独特的输入结构,频域抽取分解通过部署特殊的第一级和(n)点的fft而可应用于优化fft。类似地,ifft可通过部署(n)点的ifft和特殊的最后一级来优化。由于tfhe中的多项式的模量算术运算,对于i=n,n 1,

2n-1,不需要计算ifft系数。
[0177]
上文提到的fft和ifft的流式拓扑的各个级可连接起来,以为它们各自创建一个单独的流式拓扑。结果为在图31a-图31d中示出的fft拓扑以及在图32a-图32d中示出的ifft。需注意,图31a-图31d包含特殊的第一级320并且图32a-图32d包含特殊的最后一级330。可以看出,以上述方式处理的fft和ifft可映射到本文描述的流式环境中的的相对简单的内核拓扑。这允许在流式环境中处理fft和ifft,并且因此允许在流式环境中处理fhe运算。如上所述,流式拓扑使得计算设备以更高的效率运行,并且因此减少了计算资源。可以看出,fft和ifft计算的所有级都是流式的。常规fft计算是以递归方式一次一级来完成的。该实施例允许fft和ifft的所有级以上文所述的方式使用多个内核在硬件上进行布局。
[0178]
本文所述的实施例可用于与各种计算平台结合。该计算平台可包含电子存储装置、一个或多个处理器,和/或其他部件。该计算平台可包含通信线路或端口,以实现与网络和/或其他计算平台的信息交换。该计算平台可能包含一起运行以提供本文所述的功能的多个硬件、软件和/或固件的部件。电子存储装置可包含以电子方式存储信息的非暂态存储介质。
[0179]
尽管为了说明的目的而基于目前被认为是实际实施例的内容已详细描述本技术
的技术方案,但应当理解的是,此类细节仅仅是用于该目的,并且本技术的技术方案并不局限于所公开的实施例,但恰恰相反,其旨在涵盖在所附权利要求书的实质和范围内的修改实施方式和等同实施方式。例如,应当理解的是,对于本技术的技术方案可以设想的是,在可能的范围内,任何实施例的一个或多个特征可与任何其他实施例的一个或多个特征组合在一起。
再多了解一些

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

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

相关文献