CN115344526A - 一种数据流架构的硬件加速方法及装置 - Google Patents
一种数据流架构的硬件加速方法及装置 Download PDFInfo
- Publication number
- CN115344526A CN115344526A CN202210980907.3A CN202210980907A CN115344526A CN 115344526 A CN115344526 A CN 115344526A CN 202210980907 A CN202210980907 A CN 202210980907A CN 115344526 A CN115344526 A CN 115344526A
- Authority
- CN
- China
- Prior art keywords
- data
- ntt
- subtask
- subtasks
- calculation
- 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.)
- Granted
Links
Images
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/76—Architectures of general purpose stored program computers
- G06F15/78—Architectures of general purpose stored program computers comprising a single central processing unit
- G06F15/7867—Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture
- G06F15/7871—Reconfiguration support, e.g. configuration loading, configuration switching, or hardware OS
- G06F15/7878—Reconfiguration support, e.g. configuration loading, configuration switching, or hardware OS for pipeline reconfiguration
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/15—Correlation function computation including computation of convolution operations
- G06F17/156—Correlation function computation including computation of convolution operations using a domain transform, e.g. Fourier transform, polynomial transform, number theoretic transform
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Mathematical Physics (AREA)
- General Engineering & Computer Science (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Computer Hardware Design (AREA)
- Data Mining & Analysis (AREA)
- Computing Systems (AREA)
- Software Systems (AREA)
- Databases & Information Systems (AREA)
- Algebra (AREA)
- Complex Calculations (AREA)
Abstract
一种数据流架构的硬件加速方法及装置,该方法通过主机端存储NTT计算所需输入数据,将N个输入的NTT计算任务划分成I个规模为J的子任务;使用OpenCL异构计算框架,建立FPGA设备端的计算核,并将划分得到的子任务数据传输到FPGA设备端上的缓存区;第一个子任务内部数据以Dataflow的方式处理,当第一轮蝶形运算单元完成第一个子任务的数据处理时,第二个子任务的数据流入第一轮蝶形运算单元,使FPGA设备端处理子任务数据时形成两级Dataflow架构。本发明实现了不同步长蝶形运算间以及多个NTT子任务间的流水式计算;能够根据FPGA片上资源的规模灵活缩放,且具有良好的吞吐性能。
Description
技术领域
本发明涉及数据处理技术领域,具体涉及一种数据流架构的硬件加速方法及装置。
背景技术
zk-SNARKs是一种加密技术,即“零知识简洁非交互知识论证”(Zero-KnowledgeSuccinct Non-Interactive Argument of Knowledge)的缩写,允许“证明提供者”以数学方式向“验证者”证明信息的准确性,而不会透露除其真实性和完整性之外的任何内容。
针对零知识证明的加速需求,现有技术采用在多种硬件架构上的加速方案。2019年Zcash团队基于FPGA对zk-SNARK计算过程中的椭圆曲线操作进行了加速,将点加、点乘、配对等一系列椭圆曲线计算函数实例化为硬件模块,通过设计指令级驱动实现了对椭圆曲线操作的软硬件协同加速。2021年清华大学提出了零知识证明加速方案PipeZK,在28nm级ASIC架构上实现了专用的多项式计算模块和多标量乘法模块,相比于纯软件实现加速了5倍。同年上海交通大学也基于FPGA提出了一种专门用于区块链的零知识证明硬件加速设计方案,其内部设计了FFT、ECP、MAC三个模块进行协同运算,将证明的生成过程加速了10倍。
尽管设计专用的零知识证明芯片确实可以获得更佳的性能,但是也存在着面向不同零知识证明协议适配性差的缺陷。除此之外,现有使用Verilog或VHDL方式实现的FPGA/ASIC模块化加速方案,开发周期长且更新困难。相比之下,使用GPU加速虽然大大缩短了开发周期,但高功耗的弱点也使得GPU加速方案难以落地实现。
综上所述,亟需一种新的用于zk-SNARK中NTT算法的数据流架构FPGA硬件加速方案。
发明内容
为此,本发明提供一种数据流架构的硬件加速方法及装置,以解决全部或部分解决背景技术中提及的问题。
为了实现上述目的,本发明提供如下技术方案:一种数据流架构的硬件加速方法,包括:
通过主机端存储NTT计算所需输入数据,将N个输入的NTT计算任务划分成I个规模为J的子任务;
使用OpenCL异构计算框架,建立FPGA设备端的计算核,并将划分得到的子任务数据传输到FPGA设备端上的缓存区;
第一个子任务内部数据以Dataflow的方式处理,当第一轮蝶形运算单元完成第一个子任务的数据处理时,第二个子任务的数据流入第一轮蝶形运算单元,使FPGA设备端处理子任务数据时形成两级Dataflow架构。
作为数据流架构的硬件加速方法优选方案,FPGA设备端上的缓存区包括多端口读写的BRAM,FPGA设备端通过BRAM访问缓冲区的数据。
作为数据流架构的硬件加速方法优选方案,FPGA设备端对第一个子任务的规模为J的数据进行流式访问,第一个子任务的规模为J的数据以队列的方式流入第一个NTT计算核;
当流入第一个NTT计算核的数据启动第一轮蝶形运算单元时,第一个NTT计算核开始运作;
将第一轮蝶形运算单元的输出数据流入第二轮蝶形运算单元。
作为数据流架构的硬件加速方法优选方案,当第一个NTT计算核开始依次输出每一个子任务的计算结果时,通过一组连接到BRAM的FIFO对输出数据进行重排,使原本I个规模为J的子任务结果通过数据选择器分散到J个BRAM存储单元组,重新产生J个规模为I的子任务。
作为数据流架构的硬件加速方法优选方案,对重排后J个规模为I的子任务的BRAM依次将数据传输至第二个NTT计算核;
第二个NTT计算核仿照第一个NTT计算核的两级Dataflow架构模式逐渐充盈并依次计算产生J个子任务的输出结果。
作为数据流架构的硬件加速方法优选方案,规模为N的NTT计算任务的输出由第二个NTT计算核流式产生,将第二个NTT计算核流式产生的输出按批次通过PCIe总线传回主机端。
作为数据流架构的硬件加速方法优选方案,将N个NTT计算任务划分为J个规模为I的子任务后,采用折半递归算法分别计算每个子任务的结果向量,对J个子任务的结果向量分别乘以对应旋转因子;再对J个子任务进行转置重排,重新划分为I个规模为J的子任务分别进行折半递归计算。
作为数据流架构的硬件加速方法优选方案,将各次递归调用关系中的输入向量组织成树形结构,根据蝶形运算的输入输出将树形结构的每层数据重新排列为新的向量,将递归结构的NTT算法转化为迭代算法以适应并行或流水的加速模式;
相邻两轮蝶形运算间的数据读写依赖存在以下关系:
第二轮迭代需要读取的数据在第一轮迭代计算完成1/2时准备好,第三轮迭代需要读取的数据在第二轮迭代计算完成1/4时准备好,第四轮迭代需要读取的数据在第三轮迭代计算完成1/8时准备好,并以此关系类推。
本发明还提供一种数据流架构的硬件加速装置,包括主机端和FPGA设备端;
通过主机端存储NTT计算所需输入数据,将N个输入的NTT计算任务划分成I个规模为J的子任务;
使用OpenCL异构计算框架,建立FPGA设备端的计算核,并将划分得到的子任务数据传输到FPGA设备端上的缓存区;
第一个子任务内部数据以Dataflow的方式处理,当第一轮蝶形运算单元完成第一个子任务的数据处理时,第二个子任务的数据流入第一轮蝶形运算单元,使FPGA设备端处理子任务数据时形成两级Dataflow架构。
作为数据流架构的硬件加速装置优选方案,FPGA设备端上的缓存区包括多端口读写的BRAM,FPGA设备端通过BRAM访问缓冲区的数据。
作为数据流架构的硬件加速装置优选方案,FPGA设备端对第一个子任务的规模为J的数据进行流式访问,第一个子任务的规模为J的数据以队列的方式流入第一个NTT计算核;
当流入第一个NTT计算核的数据启动第一轮蝶形运算单元时,第一个NTT计算核开始运作;
将第一轮蝶形运算单元的输出数据流入第二轮蝶形运算单元。
作为数据流架构的硬件加速装置优选方案,当第一个NTT计算核开始依次输出每一个子任务的计算结果时,通过一组连接到BRAM的FIFO对输出数据进行重排,使原本I个规模为J的子任务结果通过数据选择器分散到J个BRAM存储单元组,重新产生J个规模为I的子任务。
作为数据流架构的硬件加速装置优选方案,对重排后J个规模为I的子任务的BRAM依次将数据传输至第二个NTT计算核;
第二个NTT计算核仿照第一个NTT计算核的两级Dataflow架构模式逐渐充盈并依次计算产生J个子任务的输出结果。
作为数据流架构的硬件加速装置优选方案,规模为N的NTT计算任务的输出由第二个NTT计算核流式产生,将第二个NTT计算核流式产生的输出按批次通过PCIe总线传回主机端。
作为数据流架构的硬件加速装置优选方案,将N个NTT计算任务划分为J个规模为I的子任务后,采用折半递归算法分别计算每个子任务的结果向量,对J个子任务的结果向量分别乘以对应旋转因子;再对J个子任务进行转置重排,重新划分为I个规模为J的子任务分别进行折半递归计算;
将各次递归调用关系中的输入向量组织成树形结构,根据蝶形运算的输入输出将树形结构的每层数据重新排列为新的向量,将递归结构的NTT算法转化为迭代算法以适应并行或流水的加速模式。
作为数据流架构的硬件加速装置优选方案,相邻两轮蝶形运算间的数据读写依赖存在以下关系:
第二轮迭代需要读取的数据在第一轮迭代计算完成1/2时准备好,第三轮迭代需要读取的数据在第二轮迭代计算完成1/4时准备好,第四轮迭代需要读取的数据在第三轮迭代计算完成1/8时准备好,并以此关系类推。
本发明具有如下优点:实现了不同步长蝶形运算间以及多个NTT子任务间的流水式计算;能够根据FPGA片上资源的规模灵活缩放,对不同规模的NTT任务进行计算,且具有良好的吞吐性能;限制了单个NTT计算任务中蝶形运算的轮次,从而节省了单个NTT计算任务的资源占用,进而对不同步长的蝶形运算分别进行实例化;通过片上数据流控制,实现了NTT计算任务子任务间的流水,解决了PipeZK中NTT整体计算中迭代启动间隔长的问题,可以提高近一倍的数据处理速度;本发明开发周期短,修改维护难度低,可以针对不同的零知识证明协议快速更新,很方便地以比特流的形式发布使用,省去了传统硬件开发过程中的复杂IP的设计流程,相比于实现相同功能的其他异构方案,本发明功耗更低,对资源利用率更高,灵活度高。
附图说明
为了更清楚地说明本发明的实施方式或现有技术中的技术方案,下面将对实施方式或现有技术描述中所需要使用的附图作简单地介绍。显而易见地,下面描述中的附图仅仅是示例性的,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图引申获得其他的实施附图。
本说明书所绘示的结构、比例、大小等,均仅用以配合说明书所揭示的内容,以供熟悉此技术的人士了解与阅读,并非用以限定本发明可实施的限定条件,故不具技术上的实质意义,任何结构的修饰、比例关系的改变或大小的调整,在不影响本发明所能产生的功效及所能达成的目的下,均应仍落在本发明所揭示的技术内容能涵盖的范围内。
图1为本发明实施例提供的数据流架构的硬件加速方法整体流程示意图;
图2为本发明实施例提供的数据流架构的硬件加速方法中NTT计算任务总体架构示意图;
图3为本发明实施例提供的数据流架构的硬件加速方法中第一个NTT计算核流程;
图4为本发明实施例提供的数据流架构的硬件加速方法中第二个NTT计算核流程;
图5为本发明实施例提供的数据流架构的硬件加速方法中进行子任务划分的NTT计算流程;
图6为本发明实施例提供的数据流架构的硬件加速方法中不同步长蝶形运算间的数据读写依赖及迭代间Dataflow结构;
图7为本发明实施例提供的数据流架构的硬件加速方法中任务间Dataflow结构;
图8为本发明实施例提供的数据流架构的硬件加速方法中数据计算流程;
图9为本发明实施例提供的数据流架构的硬件加速装置示意图。
具体实施方式
以下由特定的具体实施例说明本发明的实施方式,熟悉此技术的人士可由本说明书所揭露的内容轻易地了解本发明的其他优点及功效,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
相关技术中,基于蒙哥马利约简模乘设计了计算与I/O负载均衡的NTT计算模块,然而由于并未复用高效的NTT计算单元,导致其用于多项式乘法计算的NTT计算模块的bitch size仅为1024个定点数,这对于零知识证明过程中百万级别的多项式乘法计算来说是远远不够的。
相关技术中,设计了集成若干NTT计算单元的较小的NTT模块,通过将百万级别的NTT计算任务划分为小段,采用递归NTT算法解决了片上传输带宽限制。虽然尽可能地在设计的NTT模块中实现了多轮蝶形运算之间的流水,但NTT整体计算中迭代启动间隔长,未能实现流水。
设计专用的零知识证明芯片确实可以获得更佳的性能,但是也存在着面向不同零知识证明协议适配性差的缺陷。
有鉴于此,本发明设计一种基于递归NTT算法的两级数据流水计算架构,同时实现不同步长蝶形运算间以及多个NTT子任务间的流水式计算;能够根据FPGA片上资源的规模灵活缩放,对不同规模的NTT任务进行计算,且具有良好的吞吐性能。以下为本发明技术方案的具体实施情况。
实施例1
参见图1、图2、图3、图4、图5、图6和图7,本发明实施例1提供一种数据流架构的硬件加速方法,包括:
通过主机端存储NTT计算所需输入数据,将N个输入的NTT计算任务划分成I个规模为J的子任务;
使用OpenCL异构计算框架,建立FPGA设备端的计算核,并将划分得到的子任务数据传输到FPGA设备端上的缓存区;
第一个子任务内部数据以Dataflow的方式处理,当第一轮蝶形运算单元完成第一个子任务的数据处理时,第二个子任务的数据流入第一轮蝶形运算单元,使FPGA设备端处理子任务数据时形成两级Dataflow架构。
作为数据流架构的硬件加速方法优选方案,FPGA设备端上的缓存区包括多端口读写的BRAM,FPGA设备端通过BRAM访问缓冲区的数据。
本实施例中,FPGA设备端对第一个子任务的规模为J的数据进行流式访问,第一个子任务的规模为J的数据以队列的方式流入第一个NTT计算核;当流入第一个NTT计算核的数据启动第一轮蝶形运算单元时,第一个NTT计算核开始运作;将第一轮蝶形运算单元的输出数据流入第二轮蝶形运算单元。当第一个NTT计算核开始依次输出每一个子任务的计算结果时,通过一组连接到BRAM的FIFO对输出数据进行重排,使原本I个规模为J的子任务结果通过数据选择器分散到J个BRAM存储单元组,重新产生J个规模为I的子任务。对重排后J个规模为I的子任务的BRAM依次将数据传输至第二个NTT计算核;第二个NTT计算核仿照第一个NTT计算核的两级Dataflow架构模式逐渐充盈并依次计算产生J个子任务的输出结果。规模为N的NTT计算任务的输出由第二个NTT计算核流式产生,将第二个NTT计算核流式产生的输出按批次通过PCIe总线传回主机端。
辅助图1、图2、图3、图4和图5,具体的,主机端首先对具有N个输入的NTT计算任务进行任务划分,根据使用设备的资源情况不同,划分的子任务数量和子任务计算规模有所不同,接下来通过OpenCL异构计算框架,创建FPGA设备端的NTT计算核,并将划分得到的I个规模为J的子任务的数据通过PCIe总线流式传输到FPGA设备端板卡的NTT计算核的缓存区。
其中,这些缓存区由可以进行多端口读写的BRAM构成,而FPGA设备端可以通过BRAM快速访问缓存区的数据。当FPGA设备端运作时,先会对第一个子任务的规模为J的数据进行流式访问,这些数据会以队列的方式相继流入第一个NTT计算核,当流入的数据足以启动第一个NTT计算核的第一轮蝶形运算单元时,第一个NTT计算核开始运作,而第一轮蝶形运算单元的输出数据将会流入第二轮蝶形运算单元,以此类推,第一个子任务内部数据以Dataflow的方式处理。
需要说明的是,当第一轮蝶形运算单元完成第一个子任务的数据处理时,第二个子任务的数据会紧接着流入第一轮蝶形运算单元,通过这个操作使得FPGA设备端处理数据时形成两级Dataflow的架构。当第一个NTT计算核开始依次输出每一个子任务的计算结果时,通过一组连接到BRAM的FIFO对输出数据进行重排,原本的I个规模为J的子任务结果通过数据选择器分散到J个BRAM存储单元组,这样将重新产生J个规模为I的子任务。
对于重排后新的子任务的BRAM依次将数据传输至第二个NTT计算核。接下来第二个NTT计算核将仿照第一个NTT计算核的两级Dataflow模式逐渐充盈并依次计算产生J个子任务的输出结果。至此,规模为N的NTT计算任务的输出将流式的由第二个计算核产生,只需将流式输出以一定的批次通过PCIe总线传回主机端即可。
本实施例中,将N个NTT计算任务划分为J个规模为I的子任务后,采用折半递归算法分别计算每个子任务的结果向量,对J个子任务的结果向量分别乘以对应旋转因子;再对J个子任务进行转置重排,重新划分为I个规模为J的子任务分别进行折半递归计算。
辅助图5,具体的,折半递归算法根据奇偶数下标对计算任务进行折半划分,有利于NTT算法的递归实现并降低了算法的时间复杂度。类似的,当NTT算法的输入向量的长度过大时,可以先对整体输入进行多子任务的划分,进而再对这些子任务进行折半任务划分并递归计算。
将规模为N的NTT任务划分为J个规模为I的NTT子任务后,首先采用折半递归算法分别计算每个子任务的结果向量,进而对J个子任务的结果向量分别乘以对应旋转因子。接下来,再对这J个子任务进行转置重排,重新划分为I个规模为J的子任务分别进行折半递归计算,至此便可以完成一次规模为N的完整NTT计算。从而使得NTT算法在保证O(nlogn)的时间复杂度的情况下,将完整的计算任务划分成了尽可能多的可独立计算的子任务,每一个子任务还可以采用折半递归的方法计算。这样做的好处是尽可能地提高了NTT算法的并行度,同时使得NTT算法可以裁剪成任意规模的子任务以适应不同性能的计算设备。零知识证明中NTT的输入向量规模通常高达百万,受限于FPGA设备端与主机端的传输带宽以及片上器件资源数目,通常难以在片上实现一个处理完整输入向量的NTT加速核心。因此可以首先将规模为m的输入向量划分为个规模为的向量,进而设计一个计算规模较小、高效且可以被复用的NTT模块。
本实施例中,将各次递归调用关系中的输入向量组织成树形结构,根据蝶形运算的输入输出将树形结构的每层数据重新排列为新的向量,将递归结构的NTT算法转化为迭代算法以适应并行或流水的加速模式。
考虑到NTT递归结构的公用子表达式——蝶形运算计算逻辑简单,因此可以将各次递归调用关系中的输入向量组织成树形结构,根据蝶形运算的输入输出将树形结构的每层数据重新排列为新的向量,从而将递归结构的NTT算法转化为迭代算法,以适应并行或流水的加速模式。这对于在FPGA上对NTT算法进行数据流设计来说至关重要。
本实施例中,将输入向量长度为N的NTT计算任务划分为J个计算规模为I的子任务后,可以设计一个专门用于处理规模为I的NTT计算核。
本实施例中设计了一个用于处理4096个输入标量的NTT计算核,这对于百万级别NTT进行任务划分后的子任务规模来说,是完全足够的。计算核心内部首先还是先对4096个输入进行了多任务划分,将其划分为16个256输入的NTT子任务。从而减少迭代更新的轮次,避免长流水结构。接下来就需要对每一个子任务迭代的进行8轮步长为2i i∈[8]的蝶形运算。
本实施例中,相邻两轮蝶形运算间的数据读写依赖存在以下关系:
第二轮迭代需要读取的数据在第一轮迭代计算完成1/2时准备好,第三轮迭代需要读取的数据在第二轮迭代计算完成1/4时准备好,第四轮迭代需要读取的数据在第三轮迭代计算完成1/8时准备好,并以此关系类推。
辅助图6,展示了每一轮所需要更新的数据段,数据段中灰色部分表示的是下一轮迭代启动时当前一轮迭代已经更新的数据项。可以发现,任意一轮迭代并不需要前一轮迭代完全结束后才能启动,当前轮次相对于上一轮的启动间隔完全可以减少为上一轮启动间隔的一半。这种迭代启动间隔逐次减半的特性,使得多轮蝶形运算之间可以通过FIFO来实现高效的Dataflow,从而避免了每轮迭代之后数据重排的位反转操作以及冗余的启动间隔时间。因此,对于每一个256输入的NTT子任务,只需要根据不同的步长分别各实例化一份蝶形运算的硬件实现,原本需要8轮蝶形运算迭代才能完成,通过轮次间的Dataflow,仅通过大约两轮迭代时间就能够完成。
辅助图7,通过实现N轮不同步长蝶形运算间的Dataflow,可以实现一个较为紧密的流水架构,用以计算具有输入的NTT任务。考虑到经过划分的16个256输入的NTT子任务完全独立,即不存在任何数据依赖,因此各个子任务完全可以复用8轮蝶形运算的硬件实现以节省片上资源消耗。由于多轮蝶形运算间的启动间隔是逐级递减的,因此任意两个子任务的相同阶段可以实现任务间的良好的Dataflow。向Stage1阶段的FIFO连续不断地按计算顺序依次传入各子任务的输入,可以使得相邻子任务的每一个阶段都连续不停地运算,从而实现任务间无缝衔接。
本发明设计的两级Dataflow架构分别在多轮蝶形运算间以及子任务间实现了迭代级别、函数级别的流水。这种两级Dataflow架构具有良好的扩展性,尤其对于FPGA设备端而言是友好的。当FPGA设备端板卡的片上资源充足时,可以适当地减少子任务划分数目,增加不同步长的蝶形运算的实例化数目;当片上资源紧张时,则可以减少蝶形运算单元的数目、划分更多的子任务。由于NTT问题的分治规模不会影响到时间复杂度,因此该架构在相同硬件频率下,采用不同的Dataflow方案对于整个NTT计算核心的时延不会有太大的影响。
参见图8,使用本技术方案前需要在Vitis开发套件中将C++语言编写的加速器代码编译生成可烧录在FPGA芯片上的比特流文件。主机端借助OpenCL异构计算框架查找FPGA设备,同时将比特流文件加载、烧录到FPGA芯片上,进而初始化本加速器,等待运行。主机端程序将NTT计算任务的输入数据传输到FPGA板卡的存储缓冲区。传输结束后,主机端程序向设备发出指令,加速器开始运行NTT计算任务。加速器完成一次计算任务后,主机端从设备端的数据缓冲区读回计算数据,至此完成一次加速器的调用。
具体的,主机端将NTT计算数据在DDR上准备好,借助OpenCl异构计算框架,然后在U50加速卡上开辟相同大小的缓存区,同时在主机端查设备、查平台、上下文、创建kernel和命令队列,把内核任务入列,这时主机端将数据缓存区映射到U50设备端。数据传输到U50片上缓存区后,启动第一个加速核。加速核将NTT任务划分为16个子任务,同时将第一个子任务的数据按照步长为128的蝶形运算的读取顺序,输入到第一级FIFO,充盈蝶形运算单元并不断输出,同时将输出导入到连接步长为64的蝶形运算单元中,以此类推,直到从步长为1的蝶形运算单元中输出。16个子任务计算完后重新划分为256个子任务,并启动第二个加速核,第二个加速核与第一个计算流程类似,区别只是划分方式不同,256个子任务每个子任务从步长为8的蝶形运算单元以数据流的方式计算直到从步长为1的蝶形运算单元中输出结束。主机端通过PCIe将计算结果从U50缓冲区读回到主机端DDR,完成一次完整的NTT计算。
综上所述,本发明通过主机端存储NTT计算所需输入数据,将N个输入的NTT计算任务划分成I个规模为J的子任务;使用OpenCL异构计算框架,建立FPGA设备端的计算核,并将划分得到的子任务数据传输到FPGA设备端上的缓存区;第一个子任务内部数据以Dataflow的方式处理,当第一轮蝶形运算单元完成第一个子任务的数据处理时,第二个子任务的数据流入第一轮蝶形运算单元,使FPGA设备端处理子任务数据时形成两级Dataflow架构。本发明实现了不同步长蝶形运算间以及多个NTT子任务间的流水式计算。这种架构能够根据FPGA片上资源的规模灵活缩放,对不同规模的NTT任务进行计算,且具有良好的吞吐性能;本发明限制了单个NTT模块中蝶形运算的轮次,从而节省了单个NTT模块的资源占用,进而在模块内对不同步长的蝶形运算分别进行实例化。进一步通过片上数据流控制模块,实现了NTT模块内子任务间的流水,解决了PipeZK中NTT整体计算中迭代启动间隔长的问题,可以提高近一倍的数据处理速度;本发明实现了一种通过PCIe连接主机与FPGA加速卡对zk-SNARK进行软硬件协同加速的方案。
需要说明的是,本公开实施例的方法可以由单个设备执行,例如一台计算机或服务器等。本实施例的方法也可以应用于分布式场景下,由多台设备相互配合来完成。在这种分布式场景的情况下,这多台设备中的一台设备可以只执行本公开实施例的方法中的某一个或多个步骤,这多台设备相互之间会进行交互以完成所述的方法。
需要说明的是,上述对本公开的一些实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于上述实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
实施例2
参见图9,本发明实施例2提供一种数据流架构的硬件加速装置,包括主机端和FPGA设备端;
通过主机端存储NTT计算所需输入数据,将N个输入的NTT计算任务划分成I个规模为J的子任务;
使用OpenCL异构计算框架,建立FPGA设备端的计算核,并将划分得到的子任务数据传输到FPGA设备端上的缓存区;
第一个子任务内部数据以Dataflow的方式处理,当第一轮蝶形运算单元完成第一个子任务的数据处理时,第二个子任务的数据流入第一轮蝶形运算单元,使FPGA设备端处理子任务数据时形成两级Dataflow架构。
本实施例中,FPGA设备端上的缓存区包括多端口读写的BRAM,FPGA设备端通过BRAM访问缓冲区的数据。
本实施例中,FPGA设备端对第一个子任务的规模为J的数据进行流式访问,第一个子任务的规模为J的数据以队列的方式流入第一个NTT计算核;
当流入第一个NTT计算核的数据启动第一轮蝶形运算单元时,第一个NTT计算核开始运作;
将第一轮蝶形运算单元的输出数据流入第二轮蝶形运算单元。
本实施例中,当第一个NTT计算核开始依次输出每一个子任务的计算结果时,通过一组连接到BRAM的FIFO对输出数据进行重排,使原本I个规模为J的子任务结果通过数据选择器分散到J个BRAM存储单元组,重新产生J个规模为I的子任务。
本实施例中,对重排后J个规模为I的子任务的BRAM依次将数据传输至第二个NTT计算核;
第二个NTT计算核仿照第一个NTT计算核的两级Dataflow架构模式逐渐充盈并依次计算产生J个子任务的输出结果。
本实施例中,规模为N的NTT计算任务的输出由第二个NTT计算核流式产生,将第二个NTT计算核流式产生的输出按批次通过PCIe总线传回主机端。
本实施例中,将N个NTT计算任务划分为J个规模为I的子任务后,采用折半递归算法分别计算每个子任务的结果向量,对J个子任务的结果向量分别乘以对应旋转因子;再对J个子任务进行转置重排,重新划分为I个规模为J的子任务分别进行折半递归计算;
将各次递归调用关系中的输入向量组织成树形结构,根据蝶形运算的输入输出将树形结构的每层数据重新排列为新的向量,将递归结构的NTT算法转化为迭代算法以适应并行或流水的加速模式。
本实施例中,相邻两轮蝶形运算间的数据读写依赖存在以下关系:
第二轮迭代需要读取的数据在第一轮迭代计算完成1/2时准备好,第三轮迭代需要读取的数据在第二轮迭代计算完成1/4时准备好,第四轮迭代需要读取的数据在第三轮迭代计算完成1/8时准备好,并以此关系类推。
需要说明的是,上述装置各硬件之间的信息交互、执行过程等内容,由于与本申请实施例1中的方法实施例基于同一构思,其带来的技术效果与本申请方法实施例相同,具体内容可参见本申请前述所示的方法实施例中的叙述,此处不再赘述。
实施例3
本发明实施例3提供一种非暂态计算机可读存储介质,所述计算机可读存储介质中存储有数据流架构的硬件加速方法的程序代码,所述程序代码包括用于执行实施例1或其任意可能实现方式的数据流架构的硬件加速方法的指令。
计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘(SolidState Disk、SSD))等。
实施例4
本发明实施例4提供一种电子设备,包括:存储器和处理器;
所述处理器和所述存储器通过总线完成相互间的通信;所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行实施例1或其任意可能实现方式的数据流架构的硬件加速方法。
具体的,处理器可以通过硬件来实现也可以通过软件来实现,当通过硬件实现时,该处理器可以是逻辑电路、集成电路等;当通过软件来实现时,该处理器可以是一个通用处理器,通过读取存储器中存储的软件代码来实现,该存储器可以集成在处理器中,可以位于所述处理器之外,独立存在。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
虽然,上文中已经用一般性说明及具体实施例对本发明作了详尽的描述,但在本发明基础上,可以对之作一些修改或改进,这对本领域技术人员而言是显而易见的。因此,在不偏离本发明精神的基础上所做的这些修改或改进,均属于本发明要求保护的范围。
Claims (10)
1.一种数据流架构的硬件加速方法,其特征在于,包括:
通过主机端存储NTT计算所需输入数据,将N个输入的NTT计算任务划分成I个规模为J的子任务;
使用OpenCL异构计算框架,建立FPGA设备端的计算核,并将划分得到的子任务数据传输到FPGA设备端上的缓存区;
第一个子任务内部数据以Dataflow的方式处理,当第一轮蝶形运算单元完成第一个子任务的数据处理时,第二个子任务的数据流入第一轮蝶形运算单元,使FPGA设备端处理子任务数据时形成两级Dataflow架构。
2.根据权利要求1所述的一种数据流架构的硬件加速方法,其特征在于,FPGA设备端上的缓存区包括多端口读写的BRAM,FPGA设备端通过BRAM访问缓冲区的数据。
3.根据权利要求2所述的一种数据流架构的硬件加速方法,其特征在于,FPGA设备端对第一个子任务的规模为J的数据进行流式访问,第一个子任务的规模为J的数据以队列的方式流入第一个NTT计算核;
当流入第一个NTT计算核的数据启动第一轮蝶形运算单元时,第一个NTT计算核开始运作;
将第一轮蝶形运算单元的输出数据流入第二轮蝶形运算单元。
4.根据权利要求3所述的一种数据流架构的硬件加速方法,其特征在于,当第一个NTT计算核开始依次输出每一个子任务的计算结果时,通过一组连接到BRAM的FIFO对输出数据进行重排,使原本I个规模为J的子任务结果通过数据选择器分散到J个BRAM存储单元组,重新产生J个规模为I的子任务。
5.根据权利要求3所述的一种数据流架构的硬件加速方法,其特征在于,对重排后J个规模为I的子任务的BRAM依次将数据传输至第二个NTT计算核;
第二个NTT计算核仿照第一个NTT计算核的两级Dataflow架构模式逐渐充盈并依次计算产生J个子任务的输出结果。
6.根据权利要求5所述的一种数据流架构的硬件加速方法,其特征在于,规模为N的NTT计算任务的输出由第二个NTT计算核流式产生,将第二个NTT计算核流式产生的输出按批次通过PCIe总线传回主机端。
7.根据权利要求1所述的一种数据流架构的硬件加速方法,其特征在于,将N个NTT计算任务划分为J个规模为I的子任务后,采用折半递归算法分别计算每个子任务的结果向量,对J个子任务的结果向量分别乘以对应旋转因子;再对J个子任务进行转置重排,重新划分为I个规模为J的子任务分别进行折半递归计算。
8.根据权利要求7所述的一种数据流架构的硬件加速方法,其特征在于,将各次递归调用关系中的输入向量组织成树形结构,根据蝶形运算的输入输出将树形结构的每层数据重新排列为新的向量,将递归结构的NTT算法转化为迭代算法以适应并行或流水的加速模式;
相邻两轮蝶形运算间的数据读写依赖存在以下关系:
第二轮迭代需要读取的数据在第一轮迭代计算完成1/2时准备好,第三轮迭代需要读取的数据在第二轮迭代计算完成1/4时准备好,第四轮迭代需要读取的数据在第三轮迭代计算完成1/8时准备好,并以此关系类推。
9.一种数据流架构的硬件加速装置,其特征在于,包括主机端和FPGA设备端;
通过主机端存储NTT计算所需输入数据,将N个输入的NTT计算任务划分成I个规模为J的子任务;
使用OpenCL异构计算框架,建立FPGA设备端的计算核,并将划分得到的子任务数据传输到FPGA设备端上的缓存区;
第一个子任务内部数据以Dataflow的方式处理,当第一轮蝶形运算单元完成第一个子任务的数据处理时,第二个子任务的数据流入第一轮蝶形运算单元,使FPGA设备端处理子任务数据时形成两级Dataflow架构。
10.根据权利要求9所述的一种数据流架构的硬件加速装置,其特征在于,FPGA设备端上的缓存区包括多端口读写的BRAM,FPGA设备端通过BRAM访问缓冲区的数据;
FPGA设备端对第一个子任务的规模为J的数据进行流式访问,第一个子任务的规模为J的数据以队列的方式流入第一个NTT计算核;
当流入第一个NTT计算核的数据启动第一轮蝶形运算单元时,第一个NTT计算核开始运作;
将第一轮蝶形运算单元的输出数据流入第二轮蝶形运算单元;
当第一个NTT计算核开始依次输出每一个子任务的计算结果时,通过一组连接到BRAM的FIFO对输出数据进行重排,使原本I个规模为J的子任务结果通过数据选择器分散到J个BRAM存储单元组,重新产生J个规模为I的子任务;
对重排后J个规模为I的子任务的BRAM依次将数据传输至第二个NTT计算核;
第二个NTT计算核仿照第一个NTT计算核的两级Dataflow架构模式逐渐充盈并依次计算产生J个子任务的输出结果;
规模为N的NTT计算任务的输出由第二个NTT计算核流式产生,将第二个NTT计算核流式产生的输出按批次通过PCIe总线传回主机端;
将N个NTT计算任务划分为J个规模为I的子任务后,采用折半递归算法分别计算每个子任务的结果向量,对J个子任务的结果向量分别乘以对应旋转因子;再对J个子任务进行转置重排,重新划分为I个规模为J的子任务分别进行折半递归计算;
将各次递归调用关系中的输入向量组织成树形结构,根据蝶形运算的输入输出将树形结构的每层数据重新排列为新的向量,将递归结构的NTT算法转化为迭代算法以适应并行或流水的加速模式;
相邻两轮蝶形运算间的数据读写依赖存在以下关系:
第二轮迭代需要读取的数据在第一轮迭代计算完成1/2时准备好,第三轮迭代需要读取的数据在第二轮迭代计算完成1/4时准备好,第四轮迭代需要读取的数据在第三轮迭代计算完成1/8时准备好,并以此关系类推。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210980907.3A CN115344526B (zh) | 2022-08-16 | 2022-08-16 | 一种数据流架构的硬件加速方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210980907.3A CN115344526B (zh) | 2022-08-16 | 2022-08-16 | 一种数据流架构的硬件加速方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115344526A true CN115344526A (zh) | 2022-11-15 |
CN115344526B CN115344526B (zh) | 2023-04-18 |
Family
ID=83951480
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210980907.3A Active CN115344526B (zh) | 2022-08-16 | 2022-08-16 | 一种数据流架构的硬件加速方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115344526B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117971163A (zh) * | 2024-03-29 | 2024-05-03 | 苏州元脑智能科技有限公司 | 基于蝶形单元的计算架构、计算方法以及装置 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20010032227A1 (en) * | 2000-01-25 | 2001-10-18 | Jaber Marwan A. | Butterfly-processing element for efficient fast fourier transform method and apparatus |
CN105611302A (zh) * | 2015-12-29 | 2016-05-25 | 东南大学—无锡集成电路技术研究所 | 一种基于粗粒度可重构系统的二维离散小波变换实现方法 |
CN109815438A (zh) * | 2019-01-21 | 2019-05-28 | 清华大学 | 基于混合基运算的高效能浮点fft硬件加速器设计方法 |
US20190243800A1 (en) * | 2018-02-08 | 2019-08-08 | Cavium, Llc | Array-based inference engine for machine learning |
US20200265167A1 (en) * | 2019-02-19 | 2020-08-20 | Massachusetts Institute Of Technology | Configurable lattice cryptography processor for the quantum-secure internet of things and related techniques |
US20200334321A1 (en) * | 2017-12-27 | 2020-10-22 | Nec Corporation | Signal processing apparatus, method, program, and recording medium |
CN113313247A (zh) * | 2021-02-05 | 2021-08-27 | 中国科学院计算技术研究所 | 基于数据流架构的稀疏神经网络的运算方法 |
US20210318869A1 (en) * | 2018-07-10 | 2021-10-14 | Commissariat A L'energie Atomique Et Aux Energies Alternatives | Ntt processor including a plurality of memory banks |
-
2022
- 2022-08-16 CN CN202210980907.3A patent/CN115344526B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20010032227A1 (en) * | 2000-01-25 | 2001-10-18 | Jaber Marwan A. | Butterfly-processing element for efficient fast fourier transform method and apparatus |
CN105611302A (zh) * | 2015-12-29 | 2016-05-25 | 东南大学—无锡集成电路技术研究所 | 一种基于粗粒度可重构系统的二维离散小波变换实现方法 |
US20200334321A1 (en) * | 2017-12-27 | 2020-10-22 | Nec Corporation | Signal processing apparatus, method, program, and recording medium |
US20190243800A1 (en) * | 2018-02-08 | 2019-08-08 | Cavium, Llc | Array-based inference engine for machine learning |
US20210318869A1 (en) * | 2018-07-10 | 2021-10-14 | Commissariat A L'energie Atomique Et Aux Energies Alternatives | Ntt processor including a plurality of memory banks |
CN109815438A (zh) * | 2019-01-21 | 2019-05-28 | 清华大学 | 基于混合基运算的高效能浮点fft硬件加速器设计方法 |
US20200265167A1 (en) * | 2019-02-19 | 2020-08-20 | Massachusetts Institute Of Technology | Configurable lattice cryptography processor for the quantum-secure internet of things and related techniques |
CN113313247A (zh) * | 2021-02-05 | 2021-08-27 | 中国科学院计算技术研究所 | 基于数据流架构的稀疏神经网络的运算方法 |
Non-Patent Citations (1)
Title |
---|
杨平平;岳春生;胡泽明;: "异构信号处理平台中层次性流水线调度算法" * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117971163A (zh) * | 2024-03-29 | 2024-05-03 | 苏州元脑智能科技有限公司 | 基于蝶形单元的计算架构、计算方法以及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN115344526B (zh) | 2023-04-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10644877B2 (en) | Configurable number theoretic transform (NTT) butterfly circuit for homomorphic encryption | |
CN110352435B (zh) | 利用链接指令的神经网络处理 | |
US20210295168A1 (en) | Gradient compression for distributed training | |
CN111310904A (zh) | 一种用于执行卷积神经网络训练的装置和方法 | |
CN111338695B (zh) | 基于流水线技术的数据处理方法及相关产品 | |
CN111796797B (zh) | 一种利用ai加速器实现环上多项式乘法计算加速的方法和装置 | |
CN115344526B (zh) | 一种数据流架构的硬件加速方法及装置 | |
CN117785480B (zh) | 处理器、归约计算方法及电子设备 | |
CN118093203B (zh) | 数据搬运方法、分布式训练系统、电子设备和存储介质 | |
CN118035618B (zh) | 数据处理器、数据处理方法、电子设备、存储介质 | |
CN115310037A (zh) | 矩阵乘法计算单元、加速单元、计算系统和相关方法 | |
CN118012628A (zh) | 一种数据处理方法、装置和存储介质 | |
Wu et al. | Skeletongcn: a simple yet effective accelerator for gcn training | |
Zhao et al. | Hardware acceleration of number theoretic transform for zk‐SNARK | |
KR102616119B1 (ko) | 스트리밍 코어와 접힌 완전 파이프라인 fft를 이용한토러스 완전 동형 암호화(tfhe) 가속을 위한 하드웨어 아키텍처 | |
CN114880109B (zh) | 基于cpu-gpu异构架构的数据处理方法、设备以及存储介质 | |
US7847349B2 (en) | Single-cycle FFT butterfly calculator | |
CN116090518A (zh) | 基于脉动运算阵列的特征图处理方法、装置以及存储介质 | |
CN112799637B (zh) | 一种并行环境下高吞吐量的模逆计算方法及系统 | |
CN113591022B (zh) | 一种可分解数据的读写调度处理方法和装置 | |
CN112862079B (zh) | 一种流水式卷积计算架构设计方法及残差网络加速系统 | |
Qiu et al. | An FPGA‐Based Convolutional Neural Network Coprocessor | |
CN115344525B (zh) | 一种椭圆曲线点加硬件加速方法及装置 | |
CN116502028B (zh) | 基于浮点数压缩技术的大规模fft实现方法及装置 | |
Cetin et al. | Real-time fft computation using gpgpu for OFDM-based systems |
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 | ||
GR01 | Patent grant |