用于区块链交易加速的装置、方法和系统与流程

文档序号:16753923发布日期:2019-01-29 17:09阅读:380来源:国知局
用于区块链交易加速的装置、方法和系统与流程

本公开一般地涉及电子器件,并且更具体地,本公开的实施例涉及用于区块链交易(transaction)加速的硬件线路(circuitry)。



背景技术:

处理器或处理器的集合执行来自指令集(例如,指令集架构(isa))的指令。指令集是与编程有关的计算机架构的部分,并且一般包括原生数据类型、指令、寄存器架构、寻址模式、存储器架构、中断和异常处置,以及外部输入和输出(i/o)。应当注意,本文中的术语指令可以指代宏指令,例如提供给处理器以用于执行的指令,或指代微指令,例如由处理器的解码器对宏指令进行解码所产生的指令。

附图说明

在附图中的各图中通过示例而非限制的方式图示了本公开,其中同样的参考指示类似的元件并且其中:

图1图示了根据本公开的实施例的示例区块链。

图2图示了根据本公开的实施例的示例区块链。

图3图示了根据本公开的实施例的示例区块链。

图4图示了根据本公开的实施例的具有硬件加速器的硬件处理器。

图5图示了根据本公开的实施例的硬件处理器和硬件加速器。

图6图示了根据本公开的实施例的具有网络接口控制器(nic)的硬件处理器。

图7图示了根据本公开的实施例的硬件处理器和网络接口控制器(nic)。

图8图示了根据本公开的实施例的用于区块链交易加速的线路。

图9图示了根据本公开的实施例的区块链分派器(dispatcher)流程图。

图10图示了根据本公开的实施例的用于区块链交易加速的线路。

图11图示了根据本公开的实施例的用于区块链交易加速的硬件加速器。

图12图示了根据本公开的实施例的流程图。

图13a是图示了根据本公开的实施例的示例性有序流水线和示例性寄存器重命名、无序发出/执行流水线二者的框图。

图13b是图示了根据本公开的实施例的要被包括在处理器中的示例性寄存器重命名、无序发出/执行架构核心和有序架构核心的示例性实施例二者的框图。

图14a是根据本公开的实施例的单个处理器核心连同其到管芯(die)上互连网络的连接并且连同其级别2(l2)高速缓存的本地子集的框图。

图14b是根据本公开的实施例的图14a中的处理器核心的部分的展开图。

图15是根据本公开的实施例的处理器的框图,所述处理器可以具有不止一个核心,可以具有集成存储器控制器,并且可以具有集成显卡。

图16是依照本公开的一个实施例的系统的框图。

图17是依照本公开的实施例的更具体的示例性系统的框图。

图18,示出了依照本公开的实施例的第二个更具体的示例性系统的框图。

图19,示出了依照本公开的实施例的芯片上系统(soc)的框图。

图20是根据本公开的实施例的对比要将源指令集中的二进制指令转换成目标指令集中的二进制指令的软件指令转换器的使用的框图。

具体实施方式

在以下说明书中,阐述了许多具体细节。然而,要理解,可以在没有这些具体细节的情况下实践本公开的实施例。在其它实例中,没有详细地示出公知的电路、结构和技术以便不模糊对本说明书的理解。

在本说明书中对“一个实施例”、“实施例”、“示例实施例”等的引用指示所描述的实施例可以包括特定特征、结构或特性,但是每一个实施例可能不一定包括该特定特征、结构或特性。此外,这样的短语不一定指代同一实施例。进一步地,当结合实施例描述特定特征、结构或特性时,主张结合无论是否明确地描述的其它实施例来影响这样的特征、结构或特性在本领域技术人员的知识内。

(例如,硬件)处理器或处理器的集合执行来自指令集(例如,指令集架构(isa))的指令。指令集是与编程有关的计算机架构的部分,并且一般包括原生数据类型、指令、寄存器架构、寻址模式、存储器架构、中断和异常处置,以及外部输入和输出(i/o)。应当注意,本文中的术语指令可以指代宏指令,例如提供给处理器以用于执行的指令,或指代微指令,例如由处理器的解码单元(解码器)对宏指令进行解码所产生的指令。(例如,具有一个或多个核心以解码和/或执行指令的)处理器可以例如在执行算术、逻辑或其它功能时对数据进行运算。在一个实施例中,处理器耦合到一个或多个(例如,管芯上的)加速器(例如,卸载引擎),用来执行一个或多个(例如,经卸载的)操作,例如而不是仅在处理器上执行那些操作。在一个实施例中,处理器(例如,中央处理单元(cpu))包括(例如,管芯上的)加速器(例如,卸载引擎),用来执行一个或多个操作,例如而不是仅在处理器上执行那些操作。本文中的某些实施例提供用于区块链交易加速的线路(例如,硬件加速器)。用于区块链交易的线路(例如,硬件加速器)可以使区块链散列、签名和保障(security)或(例如,不包括区块链散列、签名和保障的)一个或多个其它操作加速。

区块链是战略性新兴的工作负荷,其从技术准备度和部署视角来看仍是早期的。区块链是新兴的技术,其可能具有对互联网本身的规模进行破坏的潜力。虽然区块链技术可能非常好地具有许多未来前景,但是其现在的实现伴随严格地约束可以应用其的方式的限制而发生,例如针对比特币类型的区块链实现,交易速率可以被限于大约4个/秒,而一些其它区块链实现可以被限于大约2、3、4、5、6、7、8、9、10、100或1000个交易/秒。本文中的某些实施例可以扩展到更高数目的交易,例如多于大约50,000个交易/秒或多于大约100,000个交易/秒。例如通过高效地扩展到比先前可能的高得多的交易处理速率,本文中的某些实施例允许区块链利用(例如,处理)在企业设置中变成产生值得的。本文中的某些实施例提供加速技术(例如,硬件加速器、网络接口电路(nic)和/或分派器)以改进区块链交易处理等待时间和吞吐量周围的性能。本文中的某些实施例提供基于硬件和组合的硬件/软件的技术。尽管本文中的讨论中的某些可以适用于当前区块链实现,但是其不应当被如此限制并且预见与(多个)未来的区块链实现一起使用。本文中的某些实施例提供区块链加速以减少成本、改进效率、去居间化等。

在高级别处区块链可以被看作区块的链,例如其中每个区块包含对链中的(多个)先前区块的引用并且可以包括一些附加信息,例如如下面进一步所讨论的。区块链一般可以是用来维持被称作区块的记录的连续增长的列表的分布式数据库。在一个实施例中,每个区块包含时间戳和到前一区块的链接。区块链(例如,区块链数据结构)可以由共同地遵守用于验证新区块的协议的对等网络管理。通过设计,区块链固有地抵抗对数据的修改。在某些实施例中,一旦记录,就不能在没有对所有随后区块的变更和网络大多数(majority)的共谋的情况下追溯地变更任何给定区块中的数据。功能上,区块链可以充当可以高效地并且以可核实且永久的方式来记录两方之间的交易的开放的、分布式分类账(ledger)。分类账本身还可以被编程以触发交易,例如自动地触发交易。区块链可以用于记录事件、医疗记录和其它记录管理活动,诸如但不限于身份管理、交易处理(例如,金融交易)和记录起源。

现在转向图,图1图示了根据本公开的实施例的示例区块链100。每个区块可以包括一个或多个记录,例如交易。每个区块可以包括多批经散列和编码的有效交易。每个区块可以包括例如链接这两个区块的区块链中的在前区块的散列。在所描绘的区块链100中的主链(八个无阴影的盒子)是从创世区块102到当前区块104的最长区块系列。孤儿区块(106和108)存在于区块链100中的主链外部。

图2图示了根据本公开的实施例的示例区块链200。区块链200中的每个区块包括对链中的前一区块的引用(例如,图2中的prev_hash)和组成该区块的内容的一些附加信息。到前一区块的链接是使其成为链的东西,例如给定一区块,你可以找到通向该区块、恰当地回到被称作创世区块(链中的第一个区块)的区块的所有先前区块中的所有信息。区块链可以由分布式节点的网络管理(例如,和存储)。每一个节点可以具有整个区块链的拷贝。新节点可以来来去去,例如在它们加入网络时使它们的区块链的拷贝与其它节点的那些同步。节点的分布式网络上的区块链的多个拷贝可以是区块链的强大特征中的一个。其可以使得区块链相对临时地或永久地消失的节点是稳健的,例如不管所述消失是由于连接性问题、硬件故障还是干扰。网络中存在越多节点,破坏区块链的存储可能就越困难,例如不存在单点故障,不像在具有单个管理机构的中心式系统中那样。

在图2中的实施例中,每个区块包括头部和交易(tx0、tx1……tx3)的列表。头部可以包括如下各项中的一个或多个:指向前一区块的指针(例如,图2中的prev_hash字段)、该区块包含的交易的概要(例如,那些交易的散列(例如,默克尔散列)(例如,图2中的tx_root字段)、指示何时创建了该区块的时间戳(例如,图2中的时间戳字段),以及从事创建该区块的工作的证明(例如,图2中的随机数(nonce)字段)。(例如,来自时间戳服务器的)时间戳可以提供区块中的数据在特定时间存在了的确凿证据。特定区块中给出的实际时间戳可能不一定准确到秒。事实上,没有什么东西使特定区块的时间戳停止在前一区块的时间戳之前。如果区块在区块链中,则所保证的是:该区块在其时间戳之前(例如,至多两小时)被添加,链中在该区块之前的区块在该区块被创建的时间存在了,该区块在链中的下一区块存在之前被添加到链,并且该区块中的数据(例如,交易)在该区块被创建的时间存在了。该区块的头部的散列,结合这些信息片中的每个,可以变成用于由链中的下一区块所使用的针对该区块的标识符。

网络中的(例如,每一个)节点可以向区块链添加区块。(例如,每一个)节点发送需要进入区块中的数据(例如,交易)。(例如,每一个)节点可以将该数据打包到向后链接到区块链中的最后区块的区块中,其具有所述最后区块的知识(例如,知道所述最后区块)。(例如,每一个)节点然后可以将该区块传输到其余网络以断言这是新的区块链。为了确保网络中的节点具有在某些实施例中区块链保持什么的一致的共识(consensus)意见,所有节点在确定有效区块看起来像什么的协议规则集合下操作。这些规则可以包括确保每个交易是有效交易:(例如,通过指向区块链内的前一匹配交易)确保其正在花费实际上为金融交易而存在的钱并且确保其已经由交易的创建者签名。这些规则可以确保交易之间的完整性:例如确保同一资源(例如,钱)不被消耗(例如,花费)两次(例如,交易的每个输出仅形成另一交易的输入)。针对有效区块的另一测试在其随机数到来的情况下。在一个实施例中,作为有效区块,该区块的头部的散列一直必须以某一数目的零开始,例如所述数目必须低于某一目标数目。头部可以包含链中的前一区块的散列、区块中的交易的(例如,默克尔)散列、时间戳和随机数值。因此如果节点包括多个要被一起放入要添加到链的区块中的交易,则节点可能知道链中的前一区块的散列。节点可以计算针对要放在区块中的交易的默克尔散列和当前时间。但是所可能不知道的和所要计算的是什么随机数将导致新区块的头部具有以多个零开始的散列。在一个实施例中,散列法意味着不存在节点可以在算法上计算什么随机数将给予区块该属性的现实方式。有效区块,例如其散列以多个零开始,可以是创建了它的节点做了许多工作的证明,因此随机数有时被称作工作证明。

区块的散列必须以其开始的零的数目或其必须低于的目标数目可以确定创建新区块的难度,并且因此确定其将花费的平均时间。目标数目越小,散列可能必须以其开始的零就越多,在这样的散列上命中的概率就越低,并且创建新区块就越难。

图3图示了根据本公开的实施例的示例区块链300。区块链300中的每个区块包括对链中的前一区块的引用以及组成该区块的内容的一些附加信息(例如,工作证明和交易)。在图3中的每个标题下的数目仅是示例。交易可以被数字签名并且链接到区块中,其中每个交易通过散列配对的数据而密码地链接到所有早期交易,叶然后配对和散列结果直到单个散列保持(例如,(例如,默克尔)根散列或主散列)。区块链中的每一个新交易可以使其带有货币的全部历史的不可伪造的记录和所有先前的交易。所有过去的交易的该紧的密码耦合使得难以假定多个身份或修改交易的细节。同时,其可以使得任一方能够核实交易细节是否是真实的以及是否没有被篡改。散列是单向函数,因此不存在容易的方式来在某些实施例中找到正确的随机数或将区块设计成正确的,例如改变区块要求重新生成所有后继者和重做它们包含的工作。

散列函数可以采取任何输入并且产生特定(例如,固定)大小的输出。将散列函数应用于一些数据的过程一般被称作散列法。散列函数的输出一般被称作散列。特定散列函数的基本特征是其产生的(例如,固定)大小的输出。安全密码散列函数的一个特性是其是单向的。这意味着从输出确定输入是什么实际上是不可能的或是数学上和计算上不大可能的。即,给定散列,学得或找到提供给散列函数的输入数据应当是不可行的。用于这一点的术语是抗原像性。在一个实施例中,安全的散列函数产生大大不同的输出,例如即使输入仅相差单个比特。密码散列函数还可以是抗碰撞的。碰撞在散列函数针对不止一个输入产生相同输出时。如果散列数据项1和散列不同的数据项2产生相同输出,则碰撞发生。散列法可以广泛地与区块链一起使用。可以通过散列公共密钥的过程导出区块链上的地址,例如可以通过利用sha2–256和ripemd160来散列公共密钥而当前计算出比特币地址。散列函数的抗碰撞性可以是重要的,因为如果两个用户生成相同地址(碰撞),则任一个可以能够访问该地址(例如,花费发送到该地址的钱)。签名也可以是区块链的基本部分。与签支票类似,密码签名可以确定哪些交易是有效的。签名可以从要被签名的数据的散列和私有密钥生成。交易散列在某些区块链中高度可见,例如交易由其散列指代。例如,5c504ed432cb51138bcf09aa5e8a410dd4a1e204ef84bfed1be16dfba1b22060可以是区块链中的交易。与比如“区块1337中的第1024个交易“的描述相比,使用交易散列还更加直接。区块链中的区块可以通过其散列来标识,所述散列服务于标识以及完整性核实的双重目的。也提供其自己的完整性的标识串可以被称作自我认证标识符。针对使用挖掘的区块链,工作证明可以是数字,一般被称为随机数,其在与其它数据组合和被散列时产生小于指定目标的值,例如超过10^25(10septillion)个散列中的一个。当找到有效随机数时,核实它可以在一秒内完成,并且然后新区块跨网络传播、形成最新的共识和区块链。

由于区块链中的存储可以被认为是永久的,并且将大量数据存储在区块链上是不经济的,在区块链上存储数据的实际方式可以是存储数据的固定(例如,且正常较小)大小的表示,其被称作“数据的散列”。区块链的另一使用是作为时间戳服务。人们现在可以将数据存储在区块链中,并且在后来的任何时间,他们可能可以在区块链上示出所述数据以证明所述数据先前存在了。在某些区块链中,代之以,数据本身被散列并且将散列存储在区块链上。当数据要被证明具有该年龄时,人们可以提供数据,然后人们可以散列图片并且将其与存储在区块链上的散列进行比较。还存在更多先进的示例,其中散列被涉及,例如涉及默克尔数,所述默克尔树在针对区块链的当前创新和可扩展性的根处。

本文中的某些实施例提供基于核心扩展、硬件加速器(例如,现场可编程门阵列(fpga)电路和/或专用集成电路(asic))和/或(例如,智能)网络接口控制器(nic)硬件(例如,电路)的区块链交易处理(例如,加速)。在一个实施例中,nic将计算机(例如,其组件)连接到网络。本文中的某些实施例提供软件和硬件技术,例如安全飞地(enclave)、硬件保障模块和/或用于数据(例如,分组)处理的数据平面库和网络接口控制器驱动的集合(例如,数据平面开发工具包(dpdk),作为例如在定制硬件不适当的情况下使某些类型的私有且安全的交易处理加速的方式。本文中的某些实施例提供用于将硬件线路(例如,一个或多个硬件加速器)集成到计算系统中的架构,例如包括新的分派器组件以将工作分发给处理(例如,执行)单元和/或对传入的交易执行初始处理。本文中的某些实施例扩展超过每秒(例如,大约1,000)交易的阈值。由于复杂的功能(例如,(例如,椭圆曲线数字签名算法(ecdsa))密钥恢复、(例如,ecdsa)签名核实和交易(或智能合约)本身的执行,本文中的某些实施例减小交易处理的瓶颈。本文中的某些实施例减小用于增强的隐私和保障保证的交易处理的瓶颈,例如诸如零知识证明和具有较高计算成本的同态加密。本文中的某些实施例提供用于使交易处理加速以改进吞吐量、等待时间和/或保障的硬件和方法。在任何给定部署中采取的实际方法可以基于领域的要求而变化。为了减轻在开发领域特定的解决方案中的负担,本文中的某些实施例提供支持多个加速器类型的模块化架构和/或用来将交易智能地分发到异构执行单元和/或加速器以用于处理的分派器。本文中的某些实施例提供用于区块链交易处理的加速技术和硬件,例如利用多核心扩展、硬件加速器(例如,现场可编程门阵列(fpga)电路和/或专用集成电路(asic))、(例如,智能)网络接口控制器(nic)硬件(例如,电路)、指令级别增强、硬件保障模块、安全飞地,和/或用于数据(例如,分组)处理的数据平面库和网络接口控制器驱动的集合(例如,数据平面开发工具包(dpdk)来提供用于区块链交易处理的加速技术和硬件。本文中的某些实施例在以下领域中的一个或多个中提供添加值:财务结算、支付、汇款、供应链、自主运载工具和/或黑盒运载工具记录器。

本文中的某些实施例提供利用在基于硬件的机制和硬件使能的机制上的焦点的区块链工作负荷加速。下面包括若干可能的基于硬件的加速器的示例。以下包括对各种加速器选项的描述,而图10的讨论描述了在区块链硬件系统中的资源分配的示例。

图4图示了根据本公开的实施例的具有硬件加速器404的硬件处理器400。硬件处理器400(例如,核心402)可以(例如,从软件)接收请求以执行区块链交易并且可以将执行区块链交易(例如,区块链交易的至少部分)卸载到硬件加速器(例如,硬件加速器404)。硬件处理器400可以包括一个或多个核心(0到n)。在一个实施例中,每个核心可以与硬件加速器404通信(例如,耦合到硬件加速器404)。在一个实施例中,每个核心可以与多个硬件加速器中的一个通信(例如,耦合到多个硬件加速器中的一个)。(多个)核心、(多个)加速器和存储器(例如,数据存储设备)406可以与彼此通信(例如,耦合)。箭头指示(例如,到和来自组件的)双向通信,但是可以使用单向通信。在一个实施例中,(例如,每个)核心可以与存储器通信(例如,耦合),所述存储器例如存储和/或输出数据。硬件加速器可以包括本文中讨论的任何硬件(例如,电路或线路)。在一个实施例中,(例如,每个)加速器可以与存储器通信(例如,耦合),例如用来接收数据。

图5图示了根据本公开的实施例的硬件处理器501和硬件加速器504。在一个实施例中,硬件加速器在具有硬件处理器的管芯上。在一个实施例中,硬件加速器在硬件处理器的管芯外。在一个实施例中,系统500至少包括硬件处理器501和硬件加速器504,作为芯片上系统(soc)。硬件处理器501(例如,核心502)可以(例如,从软件)接收请求以执行区块链交易并且可以将执行区块链交易(例如,区块链交易的至少部分)卸载到硬件加速器(例如,硬件加速器504)。硬件处理器501可以包括一个或多个核心(0到n)。在一个实施例中,每个核心可以与硬件加速器504通信(例如,耦合到硬件加速器404)。在一个实施例中,每个核心可以与多个硬件加速器中的一个通信(例如,耦合到多个硬件加速器中的一个)。(多个)核心、(多个)加速器和存储器(例如,数据存储设备)506可以与彼此通信(例如,耦合)。箭头指示(例如,到和来自组件的)双向通信,但是可以使用单向通信。在一个实施例中,(例如,每个)核心可以与存储器通信(例如,耦合),所述存储器例如存储和/或输出数据。硬件加速器可以包括本文中讨论的任何硬件(例如,电路或线路)。在一个实施例中,(例如,每个)加速器可以与存储器通信(例如,耦合),例如用来接收数据。

图6图示了根据本公开的实施例的具有网络接口控制器(nic)604加速器的硬件处理器600。nic604可以提供到利用联网协议的因特网协议套组的网络(例如,网络608)的接口。nic604可以对各种类型的联网协议分组进行响应,例如而不涉及处理器。附加地或替代地,nic604可以执行区块链交易(例如,区块链交易的一部分)。网络608可以提供对存储区块链的其它节点的访问。

硬件处理器600(例如,核心602)可以(例如,从软件)接收请求以执行区块链交易并且可以将执行区块链交易(例如,区块链交易的至少部分)卸载到硬件加速器(例如,硬件加速器606)和/或nic604。硬件处理器600可以包括一个或多个核心(0到n)。在一个实施例中,每个核心可以与硬件加速器606和/或nic604通信(例如,耦合到硬件加速器606和/或nic604)。在一个实施例中,每个核心可以与多个硬件加速器和/或nic中的一个通信(例如,耦合到多个硬件加速器和/或nic中的一个)。(多个)核心、(多个)加速器、nic和存储器(例如,数据存储设备)(未示出)可以与彼此通信(例如,耦合)。箭头指示(例如,到和来自组件的)双向通信,但是可以使用单向通信。在一个实施例中,(例如,每个)核心可以与存储器通信(例如,耦合),所述存储器例如存储和/或输出数据。硬件加速器或nic可以包括本文中讨论的任何硬件(例如,电路或线路)。在一个实施例中,(例如,每个)加速器或nic可以与存储器通信(例如,耦合),例如用来接收数据。nic可以与网络608通信。

图7图示了根据本公开的实施例的硬件处理器701和网络接口控制器(nic)704。在一个实施例中,硬件加速器在具有硬件处理器的管芯上。在一个实施例中,硬件加速器在硬件处理器的管芯外。在一个实施例中,nic在具有硬件处理器和/或加速器的管芯上。在一个实施例中,nic在硬件处理器和/或加速器的管芯外。在一个实施例中,系统700至少包括硬件处理器701和nic704,作为soc。

nic704可以提供到利用联网协议的因特网协议套组的网络(例如,网络708)的接口。nic704可以对各种类型的联网协议分组进行响应,例如而不涉及处理器。附加地或替代地,nic704可以执行区块链交易(例如,区块链交易的一部分)。网络708可以提供对存储区块链的其它节点的访问。

硬件处理器701(例如,核心702)可以(例如,从软件)接收请求以执行区块链交易并且可以将执行区块链交易(例如,区块链交易的至少部分)卸载到硬件加速器(例如,硬件加速器706)和/或nic704。硬件处理器701可以包括一个或多个核心(0到n)。在一个实施例中,每个核心可以与硬件加速器706和/或nic704通信(例如,耦合到硬件加速器706和/或nic704)。在一个实施例中,每个核心可以与多个硬件加速器和/或nic中的一个通信(例如,耦合到多个硬件加速器和/或nic中的一个)。(多个)核心、(多个)加速器、nic和存储器(例如,数据存储设备)(未示出)可以与彼此通信(例如,耦合)。箭头指示(例如,到和来自组件的)双向通信,但是可以使用单向通信。在一个实施例中,(例如,每个)核心可以与存储器通信(例如,耦合),所述存储器例如存储和/或输出数据。硬件加速器或nic可以包括本文中讨论的任何硬件(例如,电路或线路)。在一个实施例中,(例如,每个)加速器或nic可以与存储器通信(例如,耦合),例如用来接收数据。nic可以与网络708通信。

图8图示了根据本公开的实施例的用于区块链交易加速的线路800。线路800的框图示出一个实施例和用于可以在何处实现各种加速功能的选项。在以下文本中更详细地描述了加速功能中的每个的示例。线路800的框图包括一个或多个处理器(例如,中央处理单元(cpu)插座802),所述一个或多个处理器中的每个包含一个或多个核心,其可以继而支持一个或多个执行线程(例如,其指令)的解码和/或执行。核心可以经由(例如,高速的)芯片上的互连或(例如,高速)总线而连接到彼此和/或高速输入/输出(io)电路,诸如快速外围组件互连(pcie)电路。示出了经由(例如,高速)互连或(例如,高速)总线所连接的三个同伴电路(例如,芯片):(例如,智能)网络接口控制器(nic)804、第一加速器806(例如,asic)和第二加速器808(例如,fpga)。区块链加速系统可以具有所描述的组件中的任一个、任何组合或全部。线路800的框图也示出了可以被指派给各种组件的一个或多个加速功能的示例列表。在某些实施例中,在将这些功能指派到哪里方面存在灵活性。在某些实现中指派可以考虑应用要求、成本预算、功率预算、区块链架构/实现/算法的完备性、保障要求等。该图不意图示出加速器或到物理实现的映射的完备集,而是示例。

交易执行

交易(或智能合约)执行一般指代执行区块链交易的任务。在一个实施例中,这发生在通用核心上。在另一实施例中,这(例如,这的至少部分)发生在可重编程和/或专用硬件上(例如,以fpga、asic和/或专门指令的形式)以提供比具有较低功率消耗的通用核心更高的性能。这可以在交易中支持专门且可能受约束的语言的情况下尤其为真。比特币是可以支持用来描述交易的最小脚本语言的区块链的示例并且顺从例如包括硬件状态机的硬件级别实现。

密钥恢复、签名/核实

椭圆曲线数字签名算法(ecdsa)或其它(例如,签名)算法可以由区块链实现用于身份的证明和交易签名目的。因为许多消息(包括所有交易)可以利用算法(例如,ecdsa)来签名,并且因为在许多实现中公共密钥被恢复并且不与消息一起转发,所以密钥恢复可以变成区块链工作负荷的显著部分。虽然ecdsa是区块链中使用的数字签名技术的示例,但是这里提出的密钥恢复和/或签名/核实加速器概念将也适用于其它数字签名算法,例如但不限于rsa算法。

涉及密钥恢复和签名/核实的两个可能的加速器功能是:

(i)密钥恢复——如通过数字信号算法(例如,ecdsa)所定义的,公共密钥可以从(例如,ecdsa)签名的消息恢复。密钥恢复可以是(例如,在处理资源和/或时间方面)昂贵的操作并且需要发生以使用公共密钥来验证交易和消息的起源。因此,其可能变成交易处理方面的瓶颈。我们考虑针对密钥恢复加速的两个选项:

a.(a)功能特定的加速器——可以利用专门建造的硬件(例如,以asic、cpu指令、fpga或其它电路的形式)以使密钥恢复功能加速。

b.公共密钥高速缓存——可以采取高速缓存方法,借以根据需要来恢复公共密钥并且存储所述公共密钥以用于未来使用。协议可以使用随机唯一标识符的概念来标识系统中的每一个参与者。标识符可以与消息一起发送,例如并且在长度上比公共密钥短得多。该标识符可以被用作包含关联的公共密钥的字典中的键,从而利用密钥使用的局部性(locality)极大地减小工作负荷中的密钥恢复负荷。

(ii)签名/核实——消息(例如,区块链交易消息)可以被签名一次和核实许多次(例如,网络中的每一对等体(peer)(例如,节点)一次)。功能特定的加速器(例如,以asic、cpu指令、fpga或其它电路的形式)可以用来使签名/核实操作加速。

散列(例如,默克尔树)

默克尔树一般可以指代其中每一个非叶节点表示其孩子的密码散列的数据结构。默克尔树和散列法二者一般可以是区块链中的频繁操作并且可以保证加速。将(例如,高速)散列和/或默克尔树引擎添加到处理器(例如,cpu、asic、fpga或nic)可以使交易和区块构建和/或核实加速。在一个实施例中,给定交易集合,专门的硬件要构建整个区块链区块。

在一些系统中,例如当交易的并行执行被期望时,分派器(例如,分派器电路)可以用于接受网络外的分组、执行初始处理和/或将它们传递给适当的组件(例如,交易执行电路,诸如但不限于加速器)以用于进一步处理。在该上下文中,执行电路可以是负责处理交易的任何电路(和在该电路上运行的软件)。分派器可以计及可能在类型上异构并且能够处理多种类型的操作和/或交易的组件(例如,加速器)。分派器本身可以是基于软件、固件或硬件的。在软件中,专用线程、进程或cpu可以执行该功能。可以采用诸如数据平面开发工具包(dpdk)之类的网络栈加速库来改进软件的性能,例如,所述网络栈加速库减小网络开销和等待时间。作为硬件,加速器(例如,asic、fpga或其一些组合)和/或nic可以执行经加速的功能性。图9中的以下流程图和关联的文本说明区块链交易将如何流过分派器(例如,分派器电路)的实施例。

图9图示了根据本公开的实施例的区块链分派器流程图900。例如通过分派器与网络对接902,初始可以在网络外从对等体节点(例如,经由nic)接收(多个)区块链交易。初始处理904可以包括执行分派器的功能以执行其作业,例如诸如密钥恢复和高速缓存。初始处理904可以附加地包括分派器不需要但例如也许因为其具有较多适合的资源而可以在分派器中较好地完成的功能。这样的功能的示例包括ecdsa签名核实、解压缩、解密、向对等体请求缺失的交易或其它功能。为了请求缺失的交易,分派器可能需要通过例如使用所供应的相关性(dependency)信息或使用诸如来自订购服务的交易标识(id)信息对交易执行相关性分析来标识任何缺失的交易。一旦被标识,分派器就可以向对等体节点发送请求以取回缺失的交易信息,例如与等待直到后来在流水线中做出请求相比减少了等待时间。

在初始处理之后,例如使用许多可能的映射算法中的一个,分派器可以将交易映射908到硬件(例如,加速器或nic)。一个提出的映射基于由交易更新的状态,例如其中状态空间的范围被映射到多个执行资源中的每个执行资源(例如,加速器或nic)。这可以将状态的局部性提供给该(多个)执行资源,例如帮助改进性能。例如当交易的类型可以指示哪个加速器和/或nic能够处理它时,其它映射可以利用发起者的身份或消息本身的散列来分发工作。分派器可以关于适当的加速器和/或nic将工作排队910(例如,以用于进一步处理)。

并行化

区块链交易的并行执行具有极大地改进许多应用中的吞吐量的潜力。在某些实施例中,大多数交易不具有数据相关性并且可以被完全独立地执行。可以根据应用的具体要求来使用各种类型的硬件(例如,执行资源)。例如:

(1)硬件加速器(例如,fpga/asic)——在专门的硬件支持交易执行的情况下,多个引擎或芯片可以并行地执行许多交易。

(2)核心——使用以多核心处理器或多插座平台的形式的多个核心。这可以给每一核心提供按比例放大,直到核心的数目开始超过可用性独立的交易。

(3)多个节点——针对较大规模的并行化,例如如在机架(rack)或多个机架中,可以使用多个节点。在该情况下,可以共享专门的节点(例如,fpga、asic或(后来描述的)硬件保障模块)以使得仅将某些类型的交易发送到这些(例如,缺乏的)资源。

(4)映射/减少——这可以用于集群上的分布式处理。可以将数据分发给许多主机,所述主机对数据进行过滤和排序。然后于是可以以迭代树方式合并和减少来自多个主机的数据以得到最终的答案。该架构可以应用于区块链功能,包括:建造或验证默克尔树,诸如用于具有极大的交易计数的区块,例如每个节点可以建造默克尔树的一部分,其然后与其它节点组合以建造根;和/或处理大量交易,例如将交易状态指派给实际上执行交易的叶主机。本地状态然后可以被散列映射/减小以在区块中应用交易之后建造整个状态的签名。

保障/隐私

在一些情况下,保障或隐私将附加需求强加在交易处理(例如,执行)上,导致对于专门的加速硬件和/或更安全的执行环境的需要。以下考虑四个这样的情况:

(1)零知识证明——零知识证明是用于证明语句为真而不泄露关于该语句的任何信息的方法。该技术可以加强集中在用户隐私上的一些区块链实现的基础。由于这样的证据与不具有强隐私保证的交易相比可能是相对昂贵的,本文中的某些实施例包括(例如,以fpga或asic的形式的)加速硬件以使这些算法加速。这可能导致改进的执行时间、增加的吞吐量和减小的等待时间。

(2)同态加密——同态加密通过允许直接对经加密的数据执行计算而不是首先对其进行解密来提供改进的隐私和保障。区块链应用可以通过将经加密的数据存储在区块链上并且照现在的样子直接对其进行操作而采用同态加密。然而,甚至不只零知识证明,这些技术也可能是计算上昂贵的,导致使用加速硬件(例如,fpga或asic)改进性能的机会。

(3)硬件保障模块(例如,电路)——硬件保障模块是保卫在密码算法中使用的私有密钥的计算设备。在其中要求增加的保障或隐私(例如,但是同态加密或零知识证明被认为太昂贵或否则不适用)的区块链应用中,硬件保障电路(例如,模块)可以被用作提供具有高性能的较高保障和/或隐私级别的平台。硬件保障电路(例如,模块)可以确保正确的软件代码正在运行并且隐私被保护。

(4)安全飞地——安全飞地技术,诸如一个或多个指令,其在被执行时允许用户级别代码分配被称作飞地的存储器的私有区域,其被保护免于在较高的特权级别下运行的过程。飞地可以在核心而不是专用hsm硬件上运行,并且可以提供区块链交易的安全且私有的执行。

受信任的同步时间

时间戳是包括区块链的分布式系统的重要方面,然而准确且精确的时间源可能在典型的计算环境中不可用。网络时间协议可以提供同步时间,但经受跨许多对等体减小其有用性的精度和准确度限制。分布式同步时间从gps、原子时钟或其它可靠源的组合导出高度准确的时间连同错误界限。例如通过防篡改环境、经加密的固件和数据链路以及数据完整性检查,将信任建立到该系统中可以提供所产生的时间没有被篡改的置信度。这允许分布式系统中的对等体依靠时间戳以用于订购或其它目的,而不需要集中式时间戳服务器。

区块链加速器实现示例

图10图示了根据本公开的实施例的用于区块链交易加速的线路1000。在该部分中,利用先前描述的组件中的一个或多个来讨论区块链加速器线路1000的具体实现。在图10中,示例功能性(例如,职责)被描绘成紧挨着每个组件,并且示例接口被描绘成紧挨着每个接口(示出为块箭头)。注意,这些是示例,并且功能性中的一个或多个可以由组件中的一个或多个来执行。外部生成的交易和区块在图的顶部处从网络(例如,通过nic)进入线路1000。(例如,智能)nic将计算上昂贵的(例如,ecdsa)密钥恢复和签名验证卸载到加速器(例如,fpga或asic)上的专用电路。nic可以跟踪区块内容并且向对等体发出针对任何缺失的交易的请求。(多个)核心可以负责运行分布式分类账系统。可以将有效区块和交易传递到相对分类账执行它们的(多个)核心。可以应用户的请求在(多个)核心外发起新交易,并且可以将新区块作为对等共识协议的部分而发起。优化的库可以使(例如,默克尔树)散列和(例如,ecdsa)签名加速,并且(多个)专用加速器可以对可以直接存储在链上或利用链上的签名在链外散列和存储的数据进行压缩和解压缩。指令(例如,安全飞地指令)可以为安全或私有的交易提供隔离的执行环境,其可以包括私有侧分类账。附连的加速器(例如,fpga或asic)可以提供专用硬件资源以使高度昂贵的零知识证明或同态加密操作加速,返回有效/无效,以及一组分类账状态更新。加速器还可以连接到gps接收机和/或原子时钟(未示出)以提供受信任的绝对时间的源。

本文中的某些实施例包括硬件加速器,用来例如经由访问网络来填补缺失的交易。本文中的某些实施例包括硬件加速器,用来从经加密的日期(例如,从区块链的区块)恢复密钥。本文中的某些实施例高速缓存经恢复的密钥。

图11图示了根据本公开的实施例的用于区块链交易加速的硬件加速器1100。以下讨论传入数据(例如,分组)流的一个实现,并且可能存在关联的传出流。

图11的综述

图11示出了区块链加速器1100的一个实现。如果需要,可以使用其它处理引擎(例如,和电路)或配置以满足不同的需要。

一般引擎操作

每个引擎包括具有控制器(例如,控制)和一些数目的计算电路区块(a、b、c……)的电路。在一个实施例中,在复位时间,控制器对总线(或互连)进行轮询以发现存在什么计算区块。这可以基于应用、性能需要等而变化。

当数据从左边进入(例如,每个)引擎中时,相应的控制器首先检查数据以确定需要什么计算步骤并且将数据发送到所要求的第一计算区块。在计算区块完成之后,数据回到控制器,所述控制器确定所需要的下一计算区块,并且重复直到不再要求处理。然后将数据传递到下一引擎或组件。

如果控制器确定计算区块被需要但它不存在于实例中,或者如果任何其它不可恢复的错误发生,则可以通过异常路径(例如,异常路径1101)将数据传递到处理器(例如,cpu)。该结构可以提供数据的流水线化和缩放以实现吞吐量要求。

分组处理引擎

分组处理引擎(例如,其电路)取得网络外的分组并且处置它们到消息中的重构。这可以是tcp/ip栈或更特定于区块链的一些东西。

所存在的计算区块的类型可以包括(但不限于):

●分组重复数据删除(deduplication)

●分组重排序

●消息重构

●错误恢复。

消息处理引擎(例如,分派器)

该引擎(例如,其电路)从分组处理引擎取得经重构的消息并且执行处理,例如所述处理对所有消息类型而言是共同的。所存在的计算区块的类型可以包括(但不限于):

●解压缩

●认证。

在电路(例如,引擎)中完成该处理之后,其控制器可以基于消息的类型(例如,交易、区块或消息的对等体类型)确定所要求的下一引擎(例如,电路)并且将消息(例如,和/或其它数据)转发到多个引擎(例如,电路)中的适当引擎。例如,区块链中的每个区块可以具有一个或多个交易和其它有效载荷(例如,如图2或图3中所示)。在一个实施例中,分派器(例如,消息处理引擎)基于操作的类型(例如,所请求的动作的类型),例如并且基于引擎的类型,向多个引擎(例如,加速器或电路)中的一个路由(例如,转发)操作(例如,或针对动作的请求或用来引起动作的消息)。在一个实施例中,区块类型的操作(例如,区块操作)包括检查前一区块散列是否正确和/或工作证明是否满足要求。在一个实施例中,交易类型的操作(例如,交易操作)包括检查输入的总和是否等于输出的总和(例如,针对比特币)或针对不同区块链的一些其它函数。在一个实施例中,一些线路可以在多个引擎中重复,例如解压缩电路。

交易处理引擎

交易处理引擎(例如,其电路)处置交易类型消息。

所存在的计算区块的类型可以包括(但不限于):

●重复数据删除

●公共密钥恢复(例如,一旦被恢复,公共密钥就可以被高速缓存并且重新使用以用于来自同一发起者的未来交易)

●签名核实

●请求缺失的交易

●验证交易。

一旦被处理,交易就可以被存储在高速缓存中和/或发送到处理器(例如,cpu)。

区块处理引擎

区块处理引擎(例如,其电路)处置区块类型消息。所存在的计算区块的类型可以包括(但不限于):

●重复数据删除

●公共密钥恢复(例如,一旦被恢复,公共密钥就可以被高速缓存并且重新使用以用于来自同一发起者的未来交易)

●签名核实

●请求缺失的交易

●验证区块。

一旦被处理,区块就可以被存储在高速缓存中和/或发送到处理器(例如,cpu)。

对等体处理引擎

对等体处理引擎(例如,其电路)处置区块类型消息。

所存在的计算区块的类型可以包括(但不限于):

●注册对等体

●注销(unregister)对等体

●向对等体转发交易/区块。

高速缓存

高速缓存可以存储供由引擎(例如,其电路)使用的数据。

图12图示了根据本公开的实施例的流程图1200。所描绘的流程1200包括利用网络接口控制器接收用于硬件加速器的操作1202;当操作是交易操作时,利用网络接口控制器的分派器电路将操作路由到硬件加速器的交易处理电路1204;以及当操作是区块操作时,利用网络接口控制器的分派器电路将操作路由到硬件加速器的区块处理电路1206。

在一个实施例中,一种硬件处理器包括要执行线程并卸载区块链交易的操作的核心;以及要执行区块链交易的该操作的硬件加速器,其中硬件加速器包括分派器电路,所述分派器电路要在操作是交易操作时将操作路由到交易处理电路并且在操作是区块操作时将操作路由到区块处理电路。分派器电路可以在路由操作之前执行针对操作的初始处理。初始处理可以包括如下各项中的一个或多个:针对操作的密钥恢复、密钥高速缓存、签名或签名核实。分派器电路可以在操作是对等体操作时将操作路由到对等体处理电路。对等体操作可以包括向对等体请求区块的缺失的交易。对等体操作可以包括向对等体发送区块的缺失的交易。

在另一实施例中,一种方法包括将操作从硬件处理器卸载到硬件加速器;当操作是交易操作时,利用分派器电路将操作路由到硬件加速器的交易处理电路;以及当操作是区块操作时,利用分派器电路将操作路由到硬件加速器的区块处理电路。该方法可以包括在路由操作之前利用分派器电路执行针对操作的初始处理。初始处理可以包括如下各项中的一个或多个:针对操作的密钥恢复、密钥高速缓存、签名或签名核实。该方法可以包括在操作是对等体操作时利用分派器电路将操作路由到硬件加速器的对等体处理电路。对等体操作可以包括向对等体请求区块的缺失的交易。对等体操作可以包括向对等体发送区块的缺失的交易。

在又一实施例中,一种硬件处理器包括要执行区块链交易的操作的硬件加速器;以及包括分派器电路的网络接口控制器,所述分派器电路要在操作是交易操作时将操作路由到硬件加速器的交易处理电路并且在操作是区块操作时将操作路由到硬件加速器的区块处理电路。分派器电路可以在路由操作之前执行针对操作的初始处理。初始处理可以包括如下各项中的一个或多个:针对操作的密钥恢复、密钥高速缓存、签名或签名核实。分派器电路可以在操作是对等体操作时将操作路由到对等体处理电路。对等体操作可以包括利用网络接口控制器向对等体请求区块的缺失的交易。对等体操作可以包括利用网络接口控制器向对等体发送区块的缺失的交易。

在另一实施例中,一种方法包括利用网络接口控制器接收用于硬件加速器的操作;当操作是交易操作时,利用网络接口控制器的分派器电路将操作路由到硬件加速器的交易处理电路;以及当操作是区块操作时,利用网络接口控制器的分派器电路将操作路由到硬件加速器的区块处理电路。该方法可以包括在路由操作之前利用分派器电路执行针对操作的初始处理。初始处理可以包括如下各项中的一个或多个:针对操作的密钥恢复、密钥高速缓存、签名或签名核实。该方法可以包括在操作是对等体操作时利用分派器电路将操作路由到硬件加速器的对等体处理电路。对等体操作可以包括利用网络接口控制器向对等体请求区块的缺失的交易。对等体操作可以包括利用网络接口控制器向对等体发送区块的缺失的交易。

在又一实施例中,一种硬件处理器包括要执行线程并卸载区块链交易的操作的核心;以及要执行区块链交易的该操作的部件,其中该部件要在操作是交易操作时将操作路由到交易处理电路并且在操作是区块操作时将操作路由到区块处理电路。

在另一实施例中,一种硬件处理器包括要执行区块链交易的操作的部件;以及要在操作是交易操作时将操作路由到交易处理电路并且在操作是区块操作时将操作路由到区块处理电路的部件。

在又一实施例中,一种装置包括存储代码的数据存储设备,所述代码在被硬件处理器执行时使得硬件处理器实行在本文中公开的任何方法。一种装置可以如具体实施方式中描述的那样。一种方法可以如具体实施方式中描述的那样。

在另一实施例中,一种存储代码的非暂时性机器可读介质,所述代码在被机器执行时使得机器实行方法,所述方法包括在本文中公开的任何方法。

指令集可以包括一个或多个指令格式。给定的指令格式可以定义各种字段(例如,比特的数目、比特的位置),以指定除了其它之外要执行的操作(例如,操作码)和要在其上执行操作的(多个)操作数和/或(多个)其它数据字段(例如,掩码)。通过指令模板(或子格式)的定义来进一步分解一些指令格式。例如,给定指令格式的指令模板可以被定义成具有指令格式的字段的不同子集(所包括的字段通常采取相同的顺序,但至少一些具有不同的比特位置,因为有较少字段被包括)和/或定义成具有不同地解释的给定字段。因此,isa中的每个指令被使用给定指令格式(并且如果被定义,则采用该指令格式的指令模板中的给定一个)来表达并且包括用于指定操作和操作数的字段。例如,示例性加法(add)指令具有特定操作码和指令格式,所述指令格式包括用来指定该操作码的操作码字段和用来选择操作数(源1/目的地和源2)的操作数字段;并且该加法指令在指令流中的发生将在选择特定操作数的操作数字段中具有特定内容。被称为先进的向量扩展(avx)(avx1和avx2)并且使用向量扩展(vex)编码方案的simd扩展的集合已经被发布和/或公布(例如,参见intel®64和ia-32架构软件开发者的手册,2017年7月;并且参见intel®架构指令集扩展编程参考,2017年4月)。

示例性核心架构、处理器和计算机架构

可以以不同方式、为了不同目的和在不同处理器中实现处理器核心。例如,这样的核心的实现可以包括:1)意图用于通用计算的通用有序核心;2)意图用于通用计算的高性能通用无序核心;3)意图主要用于图形和/或科学(吞吐量)计算的专用核心。不同处理器的实现可以包括:1)包括意图用于通用计算的一个或多个通用有序核心和/或意图用于通用计算的一个或多个通用无序核心的cpu;以及2)包括意图主要用于图形和/或科学(吞吐量)的一个或多个专用核心的协处理器。这样的不同处理器导致不同的计算机系统架构,其可以包括:1)在与cpu分离的芯片上的协处理器;2)在与cpu在同一封装中的分离管芯上的协处理器;3)与cpu在同一管芯上的协处理器(在该情况下,这样的协处理器有时被称为专用逻辑,诸如集成的图形和/或科学(吞吐量)逻辑,或被称为专用核心);以及4)芯片上系统,其可以在同一管芯上包括所描述的cpu(有时被称为(多个)应用核心或(多个)应用处理器)、上面所描述的协处理器和附加功能性。接下来描述示例性核心架构,之后是对示例性处理器和计算机架构的描述。

示例性核心架构

有序和无序的核心框图

图13a是图示根据本发明的实施例的示例性有序流水线和示例性寄存器重命名、无序发出/执行流水线二者的框图。图13b是图示根据本发明的实施例的要被包括在处理器中的示例性寄存器重命名、无序发出/执行架构核心和有序架构核心的示例性实施例二者的框图。图13a-b中的实线框图示有序流水线和有序核心,而虚线框的可选附加图示寄存器重命名、无序发出/执行流水线和核心。假定有序方面是无序方面的子集,将描述无序方面。

在图13a中,处理器流水线1300包括获取阶段(stage)1302、长度解码阶段1304、解码阶段1306、分配阶段1308、重命名阶段1310、调度(还被称为分派或发出)阶段1312、寄存器读/存储器读阶段1314、执行阶段1316、回写/存储器写阶段1318、异常处置阶段1322和提交阶段1324。

图13b示出处理器核心1390,其包括耦合到执行引擎单元1350的前端单元1330,并且二者被耦合到存储器单元1370。核心1390可以是精简指令集计算(risc)核心、复杂指令集计算(cisc)核心、极长指令字(vliw)核心,或者混合或替代核心类型。作为又一选项,核心1390可以是专用核心,诸如例如网络或通信核心、压缩引擎、协处理器核心、通用计算图形处理单元(gpgpu)核心、图形核心等。

前端单元1330包括耦合到指令高速缓存单元1334的分支预测单元1332,指令高速缓存单元1334被耦合到指令翻译后备缓冲器(tlb)1336,指令翻译后备缓冲器(tlb)1336被耦合到指令获取单元1338,指令获取单元1338被耦合到解码单元1340。解码单元1340(或解码器或解码器单元)可以对指令(例如,宏指令)进行解码,并生成一个或多个微操作、微代码入口点、微指令、其它指令或其它控制信号作为输出,它们被解码自或其以其它方式反映或被推导自原始指令。可以使用各种不同的机制来实现解码单元1340。适合的机制的示例包括但不限于查找表、硬件实现、可编程逻辑阵列(pla)、微代码只读存储器(rom)等。在一个实施例中,核心1390包括存储用于(例如,在解码单元1340中或否则在前端单元1330内的)某些宏指令的微代码的微代码rom或其它介质。解码单元1340被耦合到执行引擎单元1350中的重命名/分配器单元1352。

执行引擎单元1350包括耦合到引退单元1354和一个或多个调度器单元1356的集合的重命名/分配器单元1352。(多个)调度器单元1356表示任何数目的不同调度器,包括保留站、中央指令窗口等。(多个)调度器单元1356被耦合到(多个)物理寄存器堆(registerfile)单元1358。(多个)物理寄存器堆单元1358中的每个表示一个或多个物理寄存器堆,其中的不同的物理寄存器堆存储一个或多个不同的数据类型,诸如标量整数、标量浮点、紧缩的整数、紧缩的浮点、向量整数、向量浮点、状态(例如,是要被执行的下一指令的地址的指令指针)等。在一个实施例中,(多个)物理寄存器堆单元1358包括向量寄存器单元、写屏蔽寄存器单元和标量寄存器单元。这些寄存器单元可以提供架构向量寄存器、向量屏蔽寄存器和通用寄存器。(多个)物理寄存器堆单元1358与引退单元1354重叠以图示可以(例如,使用(多个)重排序缓冲器和(多个)引退寄存器堆;使用(多个)未来文件、(多个)历史缓冲器和(多个)引退寄存器堆;使用寄存器映射和寄存器的池;等等)实现寄存器重命名和无序执行的各种方式。引退单元1354和(多个)物理寄存器堆单元1358被耦合到(多个)执行集群1360。(多个)执行集群1360包括一个或多个执行单元1362的集合和一个或多个存储器访问单元1364的集合。执行单元1362可以执行各种操作(例如,移位、加法、减法、乘法)并且对各种数据类型(例如,标量浮点、紧缩的整数、紧缩的浮点、向量整数、向量浮点)执行所述各种操作。虽然一些实施例可以包括专用于特定功能或功能的集合的多个执行单元,但是其它实施例仅可以包括一个执行单元或都执行所有功能的多个执行单元。(多个)调度器单元1356、(多个)物理寄存器堆单元1358和(多个)执行集群1360被示出为可能是复数的,因为某些实施例针对某些类型的数据/操作创建分离流水线(例如,标量整数流水线、标量浮点/紧缩的整数/紧缩的浮点/向量整数/向量浮点流水线和/或存储器访问流水线,其每个具有它们自己的调度器单元、(多个)物理寄存器堆单元和/或执行集群——并且在分离的存储器访问流水线的情况下,实现其中仅该流水线的执行集群具有(多个)存储器访问单元1364的某些实施例)。还应当理解,在使用分离流水线的情况下,这些流水线中的一个或多个可以是无序的发出/执行,并且其余是有序的。

存储器访问单元1364的集合被耦合到存储器单元1370,存储器单元1370包括耦合到数据高速缓存单元1374的数据tlb单元1372,数据高速缓存单元1374耦合到级别2(l2)高速缓存单元1376。在一个示例性实施例中,存储器访问单元1364可以包括加载单元、存储地址单元和存储数据单元,其中的每个被耦合到存储器单元1370中的数据tlb单元1372。指令高速缓存单元1334被进一步耦合到存储器单元1370中的级别2(l2)高速缓存单元1376。l2高速缓存单元1376被耦合到一个或多个其它级别的高速缓存并最终到主存储器。

作为示例,示例性寄存器重命名、无序发出/执行核心架构可以如下实现流水线1300:1)指令获取1338执行获取及长度解码阶段1302和1304;2)解码单元1340执行解码阶段1306;3)重命名/分配器单元1352执行分配阶段1308和重命名阶段1310;4)(多个)调度器单元1356执行调度阶段1312;5)(多个)物理寄存器堆单元1358和存储器单元1370执行寄存器读/存储器读阶段1314;执行集群1360执行执行阶段1316;6)存储器单元1370和(多个)物理寄存器堆单元1358执行回写/存储器写阶段1318;7)各种单元可能在异常处置阶段1322中被涉及;以及8)引退单元1354和(多个)物理寄存器堆单元1358执行提交阶段1324。

核心1390可以支持一个或多个指令集(例如,(具有已随较新版本添加的一些扩展的)x86指令集;加利福尼亚州森尼维耳市的mipstechnologies的mips指令集;加利福尼亚州森尼维耳市的armholdings的(具有诸如neon的可选附加扩展的)arm指令集),其包括本文中描述的(多个)指令。在一个实施例中,核心1390包括用以支持紧缩的数据指令集扩展(例如,avx1、avx2)的逻辑,从而允许使用紧缩的数据来执行由许多多媒体应用使用的操作。

应当理解,核心可以支持多线程(执行操作或线程的两个或更多并行集合),并可以以多种方式来如此做,所述多种方式包括时间切片的多线程、同时多线程(其中单个物理核心为物理核心同时进行多线程的每个线程提供逻辑核心,或其组合(例如,诸如在intel®超线程技术中的时间切片的获取和解码以及其后的同时多线程)。

虽然在无序执行的上下文中描述寄存器重命名,但是应当理解,寄存器重命名可以用于有序架构中。虽然处理器的图示实施例还包括分离的指令和数据高速缓存单元1334/1374以及共享的l2高速缓存单元1376,但替代实施例可以具有用于指令和数据二者的单个内部高速缓存,诸如例如级别1(l1)内部高速缓存或多个级别的内部高速缓存。在一些实施例中,系统可以包括内部高速缓存和在核心和/或处理器外部的外部高速缓存的组合。替代地,所有高速缓存可以在核心和/或处理器外部。

具体的示例性有序核心架构

图14a-b图示了更具体的示例性有序核心架构的框图,所述核心将是芯片中的(包括相同类型和/或不同类型的其它核心的)若干逻辑块中的一个。逻辑块根据应用、通过高带宽互连网络(例如,环形网络)与一些固定的功能逻辑、存储器i/o接口和其它必要i/o逻辑进行通信。

图14a是根据本公开的实施例的单个处理器核心连同其到管芯上互连网络1402的连接并且连同其级别2(l2)高速缓存1404的本地子集的框图。在一个实施例中,指令解码单元1400支持具有紧缩的数据指令集扩展的x86指令集。l1高速缓存1406允许低等待时间访问以将存储器高速缓存到标量和向量单元中。虽然在一个实施例中(为了简化设计),标量单元1408和向量单元1410使用分离的寄存器集合(分别是标量寄存器1412和向量寄存器1414),并且在它们之间传送的数据被写到存储器并然后从级别1(l1)高速缓存1406读回,但本公开的替代实施例可以使用不同的方法(例如,使用单个寄存器集合或包括允许数据被在这两个寄存器堆之间传送而不被写和读回的通信路径)。

l2高速缓存1404的本地子集是全局l2高速缓存的部分,所述全局l2高速缓存被划分成分离的本地子集,每一处理器核心一个。每个处理器核心具有到l2高速缓存1404的它自己的本地子集的直接访问路径。由处理器核心所读的数据被存储在其l2高速缓存子集1404中并可以被与其它处理器核心访问它们自己的本地l2高速缓存子集并行地快速地访问。由处理器核心所写的数据被存储在它自己的l2高速缓存子集1404中并且如果必要则从其它子集中来冲刷。环形网络确保共享的数据的一致性。环形网络是双向的以允许诸如处理器核心、l2高速缓存和其它逻辑块之类的代理在芯片内互相通信。每个环形数据-路径每一方向为1012比特宽。

图14b是根据本发明的实施例的图14a中的处理器核心的部分的展开图。图14b包括l1高速缓存1404的l1数据高速缓存1406a部分,以及关于向量单元1410和向量寄存器1414的更多细节。具体地,向量单元1410是16-宽向量处理单元(vpu)(参见16-宽alu1428),其执行整数、单精度浮点和双精度浮点指令中的一个或多个。vpu支持利用拌和单元1420来拌和寄存器输入、利用数值转换单元1422a-b的数值转换,以及利用复制单元1424对存储器输入的复制。写屏蔽寄存器1426允许预测所得到的向量写。

图15是根据本公开的实施例的处理器1500的框图,所述处理器1500可以具有不止一个核心,可以具有集成存储器控制器,并且可以具有集成图形。图15中的实线框图示具有单个核心1502a、系统代理1510、一个或多个总线控制器单元1516的集合的处理器1500,而虚线框的可选附加图示具有多个核心1502a-n、系统代理单元1510中的一个或多个集成存储器控制器单元1514的集合以及专用逻辑1508的替代处理器1500。

因此,处理器1500的不同实现可以包括:1)cpu,其具有是集成图形和/或科学(吞吐量)逻辑(其可以包括一个或多个核心)的专用逻辑1508、以及是一个或多个通用核心(例如,通用有序核心、通用无序核心、所述两个核心的组合)的核心1502a-n;2)具有是意图主要用于图形和/或科学(吞吐量)的大量专用核心的核心1502a-n的协处理器;以及3)具有是大量通用有序核心的核心1502a-n的协处理器。因此,处理器1500可以是通用处理器、协处理器或专用处理器,诸如例如网络或通信处理器、压缩引擎、图形处理器、gpgpu(通用图形处理单元)、(包括30个或更多核心的)高吞吐量许多集成核心(mic)协处理器、嵌入式处理器等。处理器可以被实现在一个或多个芯片上。处理器1500可以是一个或多个衬底的一部分和/或可以使用多个工艺技术中的任何(诸如例如bicmos、cmos或nmos)而实现在一个或多个衬底上。

存储器层级包括核心内的一个或多个级别的高速缓存、一个或多个共享的高速缓存单元1506的集合,以及耦合到集成存储器控制器单元1514的集合的(未示出的)外部存储器。共享的高速缓存单元1506的集合可以包括一个或多个中级高速缓存,诸如级别2(l2)、级别3(l3)、级别4(l4)或其它级别的高速缓存、末级高速缓存(llc)和/或其组合。虽然在一个实施例中,基于环的互连单元1512将集成图形逻辑1508、共享的高速缓存单元1506的集合,以及系统代理单元1510/(多个)集成存储器控制器单元1514互连,但替代实施例可以使用任何数目的公知技术用于互连这样的单元。在一个实施例中,一个或多个高速缓存单元1506和核心1502-a-n之间的一致性被维持。

在一些实施例中,核心1502a-n中的一个或多个核心能够进行多线程。系统代理1510包括协调和操作核心1502a-n的那些组件。系统代理单元1510可以包括例如功率控制单元(pcu)和显示单元。pcu可以是或包括调节核心1502a-n和集成图形逻辑1508的功率状态所需要的逻辑和组件。显示单元用于驱动一个或多个外部连接的显示器。

核心1502a-n在架构指令集方面可以是同构或异构的;即,核心1502a-n中的两个或更多可能能够执行相同指令集,而其它核心可能能够仅执行不同指令集或该指令集的子集。

示例性计算机架构

图16-19是示例性计算机架构的框图。在膝上型计算机、台式机、手持pc、个人数字助理、工程工作站、服务器、网络设备、网络中枢、交换机、嵌入式处理器、数字信号处理器(dsp)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备以及各种其它电子设备的领域中已知的其它系统设计和配置也是适合的。一般地,能够合并如本文中所公开的处理器和/或其它执行逻辑的种类繁多的系统或电子设备一般是适合的。

现在参考图16,所示出的是依照本发明的一个实施例的系统1600的框图。系统1600可以包括被耦合到控制器中枢1620的一个或多个处理器1610、1615。在一个实施例中,控制器中枢1620包括图形存储器控制器中枢(gmch)1690和输入/输出中枢(ioh)1650(其可以在分离的芯片上);gmch1690包括存储器1640和协处理器1645被耦合到的存储器和图形控制器;ioh1650将输入/输出(i/o)设备1660耦合到gmch1690。替代地,存储器和图形控制器中的一个或二者被集成在处理器内(如本文中描述的),存储器1640和协处理器1645被直接耦合到处理器1610和具有ioh1650的单个芯片中的控制器中枢1620。存储器1640可以包括区块链加速模块1640a,例如用来存储代码,所述代码在被执行时使得处理器实行本公开的任何方法。

在图16中用虚线来表示附加处理器1615的可选性质。每个处理器1610、1615可以包括本文中描述的处理核心中的一个或多个,并可以是处理器1500的某一版本。

存储器1640可以是例如动态随机存取存储器(dram)、相变存储器(pcm)或这两个存储器的组合。对于至少一个实施例,控制器中枢1620经由诸如前侧总线(fsb)的多点总线、诸如快速路径互连(qpi)的点对点接口或类似连接1695与(多个)处理器1610、1615通信。

在一个实施例中,协处理器1645是专用处理器,诸如例如高吞吐量mic处理器、网络或通信处理器、压缩引擎、图形处理器、gpgpu、嵌入式处理器等。在一个实施例中,控制器中枢1620可以包括集成图形加速器。

在包括架构、微架构、热、功率消耗特性等的指标的量度范围方面,在物理资源1610、1615之间可能存在多种差异。

在一个实施例中,处理器1610执行控制一般类型的数据处理操作的指令。指令内嵌入的可以是协处理器指令。处理器1610将这些协处理器指令识别为具有应由附连的协处理器1645执行的类型。相应地,处理器1610在协处理器总线或其它互连上将这些协处理器指令(或表示协处理器指令的控制信号)发出到协处理器1645。(多个)协处理器1645接受并执行所接收的协处理器指令。

现在参考图17,所示出的是依照本公开的实施例的第一更具体的示例性系统1700的框图。如图17中所示,多处理器系统1700是点对点互连系统,并包括经由点对点互连1750耦合的第一处理器1770和第二处理器1780。处理器1770和1780中的每个可以是处理器1500的某一版本。在本公开的一个实施例中,处理器1770和1780分别是处理器1610和1615,而协处理器1738是协处理器1645。在另一个实施例中,处理器1770和1780分别是处理器1610、协处理器1645。

处理器1770和1780被示出分别包括集成存储器控制器(imc)单元1772和1782。处理器1770还包括点对点(p-p)接口1776和1778,作为它的总线控制器单元的部分;类似地,第二处理器1780包括p-p接口1786和1788。处理器1770、1780可以使用p-p接口电路1778、1788经由点对点(p-p)接口1750交换信息。如图17中所示,imc1772和1782将处理器耦合到相应存储器,也就是存储器1732和存储器1734,其可以是本地地附连到相应处理器的主存储器的部分。

处理器1770、1780可以每个使用点对点接口电路1776、1794、1786、1798经由单独的p-p接口1752、1754与芯片组1790交换信息。芯片组1790可以可选地经由高性能接口1792与协处理器1738交换信息。在一个实施例中,协处理器1738是专用处理器,诸如例如高吞吐量mic处理器、网络或通信处理器、压缩引擎、图形处理器、gpgpu、嵌入式处理器等。

(未示出的)共享的高速缓存可以被包括在任一处理器中或在两个处理器外部,还经由p-p互连与处理器连接,使得如果处理器被置于低功率模式中,则任一或两个处理器的本地高速缓存信息可以被存储在共享的高速缓存中。

芯片组1790可以经由接口1796耦合到第一总线1716。在一个实施例中,第一总线1716可以是外围组件互连(pci)总线或诸如pci快速总线或另一第三代i/o互连总线之类的总线,但是本公开的范围未被如此限制。

如图17中所示,各种i/o设备1714连同总线桥1718可以被耦合到第一总线1716,总线桥1718将第一总线1716耦合到第二总线1720。在一个实施例中,诸如协处理器、高吞吐量mic处理器、gpgpu、加速器(诸如例如图形加速器或数字信号处理(dsp)单元)、现场可编程门阵列或任何其它处理器之类的一个或多个附加处理器1715被耦合到第一总线1716。在一个实施例中,第二总线1720可以是低引脚计数(lpc)总线。在一个实施例中,各种设备可以被耦合到第二总线1720,包括例如键盘和/或鼠标1722、通信设备1727和诸如盘驱动器或其它大容量存储设备之类的存储单元1728,其可以包括指令/代码和数据1730。进一步地,音频i/o1724可以被耦合到第二总线1720。注意,其它架构是可能的。例如,代替图17的点对点架构,系统可以实现多点总线或其它这样的架构。

现在参考图18,所示出的是依照本公开的实施例的第二更具体的示例性系统1800的框图。图17和18中的相同元件具有相同的参考数字,并且已从图18省略图17的某些方面以便避免模糊图18的其它方面。

图18图示了处理器1770、1780可以分别包括集成存储器和i/o控制逻辑(“cl”)1772和1782。因此,cl1772、1782包括集成存储器控制器单元并包括i/o控制逻辑。图18图示了不但存储器1732、1734被耦合到cl1772、1782,而且i/o设备1814也被耦合到控制逻辑1772、1782。遗留i/o设备1815被耦合到芯片组1790。

现在参考图19,所示出的是依照本发明的实施例的soc1900的框图。图15中的类似元件具有相同的参考数字。并且,虚线框是更高级的soc上的可选特征。在图19中,(多个)互连单元1902被耦合到:应用处理器1910,其包括一个或多个核心202a-n的集合和(多个)共享的高速缓存单元1506;系统代理单元1510;(多个)总线控制器单元1519;(多个)集成存储器控制器单元1517;一个或多个协处理器1920的集合,其可以包括集成图形逻辑、图像处理器、音频处理器以及视频处理器;静态随机存取存储器(sram)单元1930;直接存储器访问(dma)单元1932;以及用于耦合到一个或多个外部显示器的显示单元1940。在一个实施例中,(多个)协处理器1920包括专用处理器,诸如例如网络或通信处理器、压缩引擎、gpgpu、高吞吐量mic处理器、嵌入式处理器等。

可以以硬件、软件、固件或这样的实现方法的组合来实现本文中所公开的(例如,机制的)实施例。可以将本公开的实施例实现为在可编程系统上执行的程序代码或计算机程序,所述可编程系统包括至少一个处理器、(包括易失性和非易失性存储器和/或存储元件的)存储系统、至少一个输入设备和至少一个输出设备。

可以将诸如图17中图示的代码1730之类的程序代码应用于输入指令以执行本文中描述的功能并生成输出信息。输出信息可以以已知方式应用于一个或多个输出设备。出于本申请的目的,处理系统包括具有处理器的任何系统,所述处理器诸如例如数字信号处理器(dsp)、微控制器、专用集成电路(asic)或微处理器。

程序代码可以以高级过程或面向对象的编程语言来实现以与处理系统通信。如果期望,则程序代码还可以以汇编或机器语言来实现。事实上,本文中描述的机制在范围上不限于任何特定的编程语言。在任何情况下,语言可以是编译或解释语言。

至少一个实施例的一个或多个方面可以通过存储在机器可读介质上的有代表性的指令来实现,所述有代表性的指令表示处理器内的各种逻辑,其当由机器读时使得机器制作用以执行本文中描述的技术的逻辑。这样的表示(被称为“ip核心”)可以被存储在有形的机器可读介质上并被供应给各种客户或制造设施以加载到实际做出逻辑或处理器的制作机器中。

这样的机器可读存储介质可以非限制性地包括由机器或设备所制造或形成的物品的非瞬时有形布置,其包括存储介质,诸如硬盘,包括软盘、光盘、紧致盘只读存储器(cd-rom)、可重写紧致盘(cd-rw)和磁光盘的任何其它类型的盘;半导体设备,诸如只读存储器(rom),诸如动态随机存取存储器(dram)、静态随机存取存储器(sram)之类的随机存取存储器(ram),可擦除可编程只读存储器(eprom)、闪存、电可擦除可编程只读存储器(eeprom)、相变存储器(pcm);磁卡或光卡;或适合于存储电子指令的任何其它类型的介质。

相应地,本公开的实施例还包括非瞬时有形机器可读介质,所述介质包含指令或包含设计数据,诸如硬件描述语言(hdl),其定义本文中描述的结构、电路、装置、处理器和/或系统特征。这样的实施例还可以被称为程序产品。

模拟(包括二进制翻译、代码变形等)

在一些情况下,可以使用指令转换器将指令从源指令集转换成目标指令集。例如,指令转换器可以对指令进行翻译(例如,使用静态二进制翻译、包括动态编译的动态二进制翻译)、变形、仿真或以其它方式将指令转换成要由核心来处理的一个或多个其它指令。可以以软件、硬件、固件或其组合来实现指令转换器。指令转换器可以在处理器上、离开处理器或部分在处理器上且部分离开处理器。

图20是根据本公开的实施例的对比软件指令转换器的使用的框图,所述软件指令转换器用以将源指令集中的二进制指令转换成目标指令集中的二进制指令。在图示的实施例中,指令转换器是软件指令转换器,但是替代地指令转换器可以以软件、硬件、固件或其各种组合来实现。图20示出可以使用x86编译器2004来编译用高级语言2002的程序以生成x86二进制代码2006,其可以由具有至少一个x86指令集核心的处理器2016本机执行。具有至少一个x86指令集核心的处理器2016表示可以通过兼容地执行或以其它方式处理如下各项以便实现与具有至少一个x86指令集核心的intel处理器基本上相同的结果而执行与具有至少一个x86指令集核心的intel处理器基本上相同的功能的任何处理器:(1)intelx86指令集核心的指令集的实质部分,或(2)目标是在具有至少一个x86指令集核心的intel处理器上运行的应用或其它软件的对象代码版本。x86编译器2004表示可操作以生成x86二进制代码2006(例如,对象代码)的编译器,所述x86二进制代码2006可以被在利用或不利用附加联接处理的情况下在具有至少一个x86指令集核心的处理器2016上执行。类似地,图20示出了可以使用替代指令集编译器2008来编译用高级语言2002的程序以生成替代指令集二进制代码2010,其可以由不具有至少一个x86指令集核心的处理器2014(例如,具有执行加利福尼亚州森尼维耳市的mipstechnologies的mips指令集和/或执行加利福尼亚州森尼维耳市的armholdings的arm指令集的核心的处理器)本机执行。使用指令转换器2012将x86二进制代码2006转换成可以由不具有x86指令集核心的处理器2014本机执行的代码。该经转换的代码不太可能与替代指令集二进制代码2010相同,因为有此能力的指令转换器难以做出;然而,经转换的代码将完成一般操作并由来自替代指令集的指令组成。因此,指令转换器2012表示软件、固件、硬件或其组合,其通过模拟、仿真或任何其它过程而允许不具有x86指令集处理器或核心的处理器或其它电子设备执行x86二进制代码2006。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1