混合基于块的处理器和定制功能块的制作方法

文档序号:16595840发布日期:2019-01-14 19:38阅读:194来源:国知局
混合基于块的处理器和定制功能块的制作方法

由于摩尔定律所预测的持续的晶体管缩放(transistorscaling),微处理器已经从晶体管数的持续增加、集成电路成本、制造资本、时钟频率、以及能量效率中受益,而相关联的处理器指令集架构(isa)却变化很小。然而,从在过去40年里驱动半导体工业的光刻缩放实现的益处正在放缓或者甚至反转。精简指令集计算(risc)架构已经成为处理器设计中的主导典范很多年。乱序的超标量实现尚未在面积或性能方面展现出持续改进。因此,存在对于为扩展性能改进而在处理器isa中改进的足够机会。



技术实现要素:

公开了用于配置、操作并且编译用于基于块的处理器架构(bb-isa)(包括显式数据图形执行(edge)架构)的代码的方法、装置以及计算机可读存储设备。处理器的微架构包括并行指令调度器。用于例如改进处理器性能和/或降低能耗的解决方案的所描述的技术和工具可以分离地被实现,或者在彼此的各种组合中被实现。如下面将更充分地描述的,所描述的技术和工具可以被实现在以下各项中:数字信号处理器、微处理器、专用集成电路(asic)、软处理器(例如,使用可重新配置逻辑被实现在现场可编程门阵列(fpga)中的微处理器核)、可编程逻辑、或者其他适合的逻辑电路。如对于本领域的普通技术人员而言将显而易见的,所公开的技术可以被实现在各种计算平台中,包括但不限于服务器、大型机、手机、智能电话、手持式设备、手持式计算机、个人数字助理(pda)、触摸屏平板设备、平板计算机、可穿戴计算机、以及膝上型计算机。

基于块的处理器架构的软处理器实现可以改进设计生产力。例如,以适合的描述语言(例如,c、systemc、systemverilog或verilog)编写的基于块的软件处理器的描述可以经历逻辑合成以生成被映射到fpga的门极网表。针对fpga生成用于对fpga编程的比特流。软件到硬件中的昂贵的初始端口代替地变成针对软处理器的简单交叉编译,并且大多数设计轮是快速重新编译。应用瓶颈然后可以被卸载到被暴露为新指令、功能单元、自主加速器、存储器或互连件的定制硬件。

所公开的技术的某些示例允许在不降低复杂性和开销的情况下配置高指令级并行(ilp)、乱序(ooo)超标量的软处理器。在一些示例中,为了面积和能量高效的高ilp执行而提供显式数据图形执行(edge)指令集架构。edge架构及其编译器共同解决了大部分的寄存器重命名、cam和复杂性,从而实现用于比按序标量risc仅仅多几百个的fpga查找表(“lut”)的乱序处理器。

所公开的技术可以用于将附加的任意功能单元添加到处理器。在一些示例中,新功能单元在rtl中被定义,并且使用开发工具被编译并且被映射到fpga。在一些示例中,处理器被耦合到可以被配置(一次、先验地、或在运行时)以执行任意逻辑函数的可编程逻辑。通过使用所公开的操作数缓冲器,到新功能单元的输入操作数和来自新功能单元的输出操作数可以由处理器调度,正如任何其他内置功能一样。

该所公开的技术介绍了edgeisa,并且探索了与按序risc相比edge微架构如何。公开了用于构建fpga中的小型快速数据流指令调度器的方法和装置。

附图说明

图1图示了如可以根据所公开的技术的一些示例采用的包括多个处理器核的示例基于块的处理器。

图2图示了如可以在所公开的技术的某些示例中使用的、用于实现具有定制功能单元的基于块的处理器的示例微架构。

图3是概述如可以在所公开的技术的一些示例中使用的示例fpga微架构的块图。

图4图示了如可以在所公开的技术的某些示例中使用的可重新配置逻辑块中的示例可重新配置逻辑。

图5图示了如可以在所公开的技术的一些示例中使用的示例基于块的处理器头和指令。

图6图示了如可以在所公开的技术的某些示例中使用的示例源代码部分和对应的指令块。

图7图示了在所公开的技术的某些示例中的可以用于基于块的处理器的某些示例的指令格式的示例。

图8是图示了如可以在所公开的技术的某些示例中使用的、基于块的处理器中的处理器核的执行状态的进展的示例的流程图。

图9是概述如可以根据所公开的技术的某些示例实现的、包括定制功能块的示例微架构的块图。

图10是根据所公开的技术的某些示例的、可以用于执行融合的指令的定制功能块的块图。

图11是图示了如可以在所公开的技术的某些示例中使用的、包括基于块的处理器和存储器的示例配置的块图。

图12是概述如可以在所公开的技术的某些示例中执行的、执行指定定制功能单元的指令的示例方法的流程图。

图13是图示了如可以在所公开的技术的某些示例中执行的、利用定制功能单元来执行融合的指令的示例方法的流程图。

图14是概述如可以在所公开的技术的某些示例中执行的、使用针对指令块的轮廓性能数据以利用定制功能单元来执行指令的示例的流程图。

图15是概述如可以在所公开的技术的某些示例中执行的、产生用于包括定制功能块的基于块的处理器的配置比特流的示例的流程图。

图16是图示了用于实现所公开的技术的某些实施例的适合的计算环境的块图。

具体实施方式

i.总体考虑

在未旨在以任何方式进行限制的代表性实施例的上下文中阐述了本公开内容。

如在本申请中所使用的,除非上下文清楚地指明相反,否则单数形式“一”、“一种”和“该”包括复数形式。此外,术语“包括”意味着“包含”。而且,术语“耦合的”涵盖机械的、电的、磁的、光学的、以及将多个项耦合或链接在一起的其他实用方式,并且不排除耦合项之间的中间元件的存在。另外,如在此所使用的,术语“和/或”意味着短语中的任何一项或多项的组合。

在此所描述的系统、方法和装置不应当以任何方式被解释为限制性的。相反,本公开涉及单独以及以彼此的各种组合和子组合形式的各种所公开的实施例的所有新颖和非显而易见的特征和方面。所公开的系统、方法和装置既不限于任何特定方面或者特征或者其组合,所公开的内容和方法也不要求任何一个或多个特定优点存在或者问题被解决。此外,所公开的实施例的任何特征或者方面可以以彼此的各种组合和子组合被使用。

虽然为了方便呈现而以特定顺序的排序描述所公开的方法中的一些方法的操作,但是应当理解,除非特定排序由下面阐述的特定语言所要求,否则说明书的这种方式涵盖重新布置。例如,顺序地描述的操作可以在一些情况下被重新布置或者并发地执行。此外,出于简单的缘故,附图可能未示出所公开的内容和方法能够结合其他内容和方法使用的各种方式。此外,说明书有时使用类似“产生”、“生成”、“显示”、“接收”、“发射”、“验证”、“执行”和“发起”的术语来描述所公开的方法。这些术语是所执行的实际操作的高层描述。对应于这些术语的实际操作将取决于特定实现而变化,并且是由本领域的普通技术人员可容易地辨别的。

参考本公开的装置或者方法在此所呈现的操作理论、科学原理或者其他理论描述已经出于更好的理解的目的而被提供,并且不旨在限制范围。所附的权利要求中的装置和方法不限于以由这样的操作理论所描述的方式实现的那些装置和方法。

所公开的方法中的任一方法可以被实现为被存储在一个或多个计算机可读介质(例如,计算机可读介质(诸如一个或多个光学介质光盘、易失性存储器部件(诸如dram或sram))或非易失性存储器部件(诸如硬盘驱动器))上并且在计算机(例如,任何市售的计算机,包括智能电话或者包括计算硬件的其他移动设备)上被执行的计算机可执行指令。用于实现所公开的技术的计算机可执行指令中的任一指令以及在所公开的实施例的实现期间创建和使用的任何数据,可以被存储在一个或多个计算机可读介质(例如,计算机可读存储介质)上。计算机可执行指令可以是例如专用软件应用、或者经由网络浏览器或其他软件应用(诸如远程计算应用)而访问或下载的软件应用的一部分。这样的软件可以例如在单个本地计算机(例如,具有在任何适合的市售的计算机上执行的通用和/或基于块的处理器)上被执行,或者在使用一个或多个网络计算机的网络环境(例如,经由因特网、广域网、局域网、客户端服务器网络(诸如云计算网络)、或者其他这样的网络)中被执行。

为了清晰起见,仅描述了基于软件的实现的某些选择的方面。省略了在本领域中众所周知的其他细节。例如,应当理解,所公开的技术不限于任何特定计算机语言或者程序。例如,所公开的技术可以通过以c、c++、java或者任何其他适合的编程语言编写的软件来实现。同样地,所公开的技术不限于任何特定计算机或者硬件类型。适合的计算机和硬件的某些细节是众所周知的并且不需要在本公开中被详细阐述。

此外,基于软件的实施例(包括例如用于使计算机执行所公开的方法中的任一方法的计算机可执行指令)中的任一实施例可以通过适合的通信手段被上传、被下载或者被远程访问。这样的适合的通信手段包括例如因特网、万维网、内联网、软件应用、电缆(包括光纤电缆)、磁通信、电磁通信(包括rf、微波和红外通信)、电子通信、或者其他这样的通信手段。

ii.对所公开的技术的介绍

超标量乱序微架构采用大量的电路资源来重命名寄存器、以数据流顺序调度指令、在误推测之后清理、并且针对精确异常而按序引退结果。这包括昂贵的电路,诸如深度多端口的寄存器文件、用于数据流指令调度唤醒的多端口的内容可访问存储器(cam)、以及多宽度(many-wide)总线复用器和旁路网络,所有的这些都是资源密集的。例如,多读取、多写入ram的基于fpga的实现通常要求复制、多循环操作、时钟加倍、组交错、实况值表和其他昂贵技术的混合。

所公开的技术可以通过应用包括高指令集并行性(ilp)、乱序(out-of-order,ooo)、超标量执行的技术来实现性能增强,同时避免处理器硬件和相关联的软件二者中的大量的复杂性和开销。在所公开的技术的一些示例中,基于块的处理器使用针对区域和能量高效的高ilp执行所设计的edgeisa。在一些示例中,edge架构和相关联的编译器的使用解决了大部分的寄存器重命名、cam和复杂性。

在所公开的技术的某些示例中,edgeisa可以消除对于一个或多个复杂架构特征(包括寄存器重命名、数据流分析、误推测恢复以及按序引退)的需要,同时支持主流编程语言(诸如c和c++)。在所公开的技术的某些示例中,基于块的处理器执行多个(两个或更多个)指令作为原子块。基于块的指令可以被用于以更显式的方式表达程序数据流和/或指令流的语义,这允许改进的编译器和处理器性能。在所公开的技术的某些示例中,显式数据图形执行指令集架构(edgeisa)包括关于可以用于改进对不正确的控制流指令的检测的程序控制流的信息,从而增加性能、节省存储器资源和/或以及节省能量。

在所公开的技术的一些示例中,在指令块内组织的指令被原子地取指、执行和提交。块内部的指令以数据流顺序执行,其减少或消除使用寄存器的重命名并且提供功率高效的ooo执行。编译器可以被用于通过isa显式地编码数据依赖性,从而减少或者消除负担的处理器核控制逻辑在运行时重新发现依赖性。使用所断言的执行,块内分支可以被转换为数据流指令,并且除了存储器依赖性之外的依赖性可以限于直接数据依赖性。所公开的目标形式编码技术允许块内的指令经由操作数缓冲器直接地传递其操作数,从而减少对耗电的(power-hungry)多端口物理寄存器文件的访问。

在指令块之间,指令可以使用存储器和寄存器来通信。因此,通过利用混合数据流执行模型,edge架构可以仍然支持命令式编程语言和顺序的存储器语义,但是期望地还享有具有近按序的功率效率和复杂性的乱序执行的益处。

iii.示例基于块的处理器

图1是如可以被实现在所公开的技术的一些示例中的基于块的处理器100的块图10。处理器100被配置为根据指令集架构(isa)来执行原子指令块,isa描述了处理器操作的若干方面,包括寄存器模型、由基于块的指令执行的若干定义操作、存储器模型、中断、以及其他架构特征。基于块的处理器包括多个一个或多个处理器核110,其包括处理器核111。基于块的处理器可以被实现为定制或专用集成电路(例如,包括片上系统(soc)集成电路)、被实现为现场可编程门阵列(fpga)或其他可重新配置逻辑、或者被实现为由物理通用处理器托管的虚拟机。处理器核110可以包括一个或多个定制功能块,如下面进一步详述的。定制功能块被配置为提供定制功能,诸如不是由基于块的处理器的isa直接支持的功能。在一些示例中,定制功能块利用可重新配置逻辑来实现。

如在图1中所示,处理器核经由核互连120而彼此连接。核互连120携带数据并且控制核110中的单独的核、存储器接口140以及输入/输出(i/o)接口150之间的信号。核互连120可以使用电的、光学的、磁的或者其他适合的通信技术来发射和接收信号,并且可以取决于特定期望的配置而提供根据若干不同的拓扑来布置的通信连接。例如,核互连120可以具有交叉开关、总线、点对点总线、或者其他适合的拓扑。在一些示例中,核110中的任一核可以被连接到其他核中的任一核,而在其他示例中,一些核仅被连接到其他核的子集。例如,每个核可以仅被连接到最近的4、8或20个邻近核。核互连120可以用于将输入/输出数据发射至核以及从核发射输入/输出数据,以及将控制信号和其他信息信号发射至核以及从核发射控制信号和其他信息信号。例如,核110中的每个核110可以接收并且发射指示当前正由相应核中的每个核所执行的指令的执行状态的信号量(semaphore)。在一些示例中,核互连120被实现为将核110和存储器系统连接的接线,而在其他示例中,核互连可以包括用于多路复用(一条或多条)互连线上的数据信号的电路、开关和/或路由部件(包括活跃的信号驱动器和中继器)、或者其他适合的电路。在所公开的技术的一些示例中,在处理器100内发射的信号和/或向/从处理器100发射的信号不限于全摆幅电数字信号,而是处理器可以被配置为包括差分信号、脉冲信号、或者用于发射数据和控制信号的其他适合的信号。

在图1的示例中,处理器的存储器接口140包括被用于连接到存储器145(例如,被定位在除了处理器100之外的另一集成电路上的存储器(例如,存储器可以是静态ram(sram)或动态ram(dram)、或者嵌入在与处理器相同的集成电路上的存储器(例如,嵌入式sram或dram(edram))))的接口逻辑。存储器接口140和/或主存储器可以包括高速缓存(例如,n路或关联高速缓存)以改进存储器存取性能。在一些示例中,高速缓存使用静态ram(sram)被实现,并且主存储器145使用动态ram(dram)被实现。在一些示例中,存储器接口140被包括在与处理器100的其他部件相同的集成电路上。在一些示例中,存储器接口140包括允许在不使用(一个或多个)寄存器文件和/或处理器100的情况下传送存储器中的数据块的直接存储器访问(dma)控制器。在一些示例中,存储器接口140管理虚拟存储器的分配,从而扩展可用的主存储器145。在一些示例中,用于旁路高速缓存结构、或者用于当执行存储器同步操作(例如,处理争用问题或者在多个不同线程、进程或处理器之间共享的存储器)时确保高速缓存相干性的支持,由存储器接口140和/或相应的高速缓存结构提供。在一些示例中,针对一个或多个定制功能块的动态生成的部分重新配置比特流可以被存储在存储器145中。

i/o接口150包括用于将输入信号和输出信号接收并且发送到其他部件155的电路,其他部件155诸如硬件中断、系统控制信号、外围接口、协处理器控制和/或数据信号(例如,用于图形处理单元、浮点协处理器、物理处理单元、数字信号处理器或者其他协处理部件的信号)、时钟信号、信号量、或者其他适合的i/o信号。i/o信号可以是同步的或者异步的。在一些示例中,i/o接口的全部或部分结合存储器接口140使用存储器映射的i/o技术被实现。在一些示例中,i/o信号实现不限于全摆幅电数字信号,但是i/o接口150可以被配置为提供差分信号、脉冲信号、或者用于发射数据和控制信号的其他适合的信号。

基于块的处理器100还可以包括控制单元160。控制单元160监督处理器100的操作。能够由控制单元160执行的操作可以包括对核的分配和去分配以用于执行指令处理;对在核、寄存器文件、存储器接口140和/或i/o接口150中的任何项之间的输入数据和输出数据的控制;对执行流的修改;以及验证控制流中的分支指令、指令头和其他改变的(一个或多个)目标位置。控制单元160可以根据表示针对指令块的退出点和控制流概率的控制流和元数据信息来产生并且控制处理器。控制单元可以用于控制处理器核110的通用部分与核的定制功能块之间的数据流。

控制单元160还可以处理硬件中断,并且控制特殊系统寄存器(例如,被存储在一个或多个寄存器文件中的程序计数器)的读取和写入。在所公开的技术的一些示例中,控制单元160至少部分地使用处理器核110中的一个或多个核被实现,而在其他示例中,控制单元160使用非基于块的处理器核(例如,耦合到存储器的通用risc处理核、在fpga中提供的硬宏处理器块、或者通用软处理器)被实现。在一些示例中,控制单元160至少部分地使用以下各项中的一项或多项被实现:硬连线有限状态机、可编程微代码、可编程门阵列、或者其他适合的控制电路。在备选示例中,可以由核110中的一个或多个核来执行控制单元功能。

控制单元160包括用于控制处理器核110的指令流水线的多个调度器165-168。在其他示例中,调度器可以被布置为使得它们关于每个单独处理器核被包含。如在此所使用的,调度器块分配涉及引导指令块的操作,包括发起指令块映射、取指、译码、执行、提交、中止、空闲以及刷新指令块。另外,指令调度涉及调度指令块内的指令的发出和执行。例如,基于指示针对存储器存取指令的相对顺序的指令依赖性和数据,控制单元160可以确定指令块中的哪个(哪些)指令准备好发出,并且启动对指令的发出和执行。处理器核110在指令块映射期间被指派到指令块。所叙述的指令操作的阶段出于说明性目的,并且在所公开的技术的一些示例中,某些操作可以被组合、被省略、被分开为多个操作、或者被添加附加操作。调度器165-168中的每个调度器调度指令的流,包括:对用于执行指令处理的核的分配和解除分配;对在核、寄存器文件、存储器接口140和/或i/o接口150中的任何项之间的输入数据和输出数据的控制。由核110实现的定制功能块可以将指令标识符、有效位、以及其他信息发送到调度器165-168中的一个或多个以便于确定针对指令块的指令依赖性是否已经被满足,由此允许调度依赖的指令。

基于块的处理器100还包括时钟发生器170,其将一个或多个时钟信号分配到处理器内的各种部件(例如,核110、互连120、存储器接口140和i/o接口150)。在所公开的技术的一些示例中,所有部件共享共同的时钟,而在其他示例中,不同的部件使用不同的时钟(例如,具有不同的时钟频率的时钟信号)。在一些示例中,时钟的一部分被选通,以在处理器部件中的一些部件未被使用时允许功率节省。在一些示例中,时钟信号使用锁相环(pll)被生成以生成具有固定的恒定频率和占空比的信号。接收时钟信号的电路可以在单个沿(例如,上升沿)上被触发,而在其他示例中,接收电路中的至少一些电路由上升和下降时钟沿而被触发。在一些示例中,时钟信号可以光学地或无线地被传输。

iv.示例基于块的处理器微架构

图2是进一步详述如可以在所公开的技术的某些示例中使用的、用于实现基于块的处理器100(并且特别地,基于块的处理器核之一的实例)的示例微架构200的块图。为了便于解释,示例性微架构具有五个流水线阶段,其包括:指令取指(if)、译码(dc)、包括操作数取指的发出(is)、执行(ex)以及存储器/数据访问(ls)。然而,本领域的普通技术人员将容易地理解到,对所图示的微架构的修改(诸如添加/移除阶段、添加/移除执行操作的单元、以及其他实现细节)可以被修改为适合用于基于块的处理器的特定应用。

如图2所示,处理器核包括耦合到指令译码器220的指令高速缓存210。指令高速缓存210被配置为从存储器接收基于块的处理器指令。在一些fpga实现中,指令高速缓存可以由双读端口、双写端口、18或36kb(千比特)、32位宽块ram来实现。在一些示例中,物理块ram被配置为用作两个或更多个更小块的ram。

处理器核还包括指令窗口230,其包括指令调度器235、译码的指令存储236和多个操作数缓冲器239。在fpga实现中,这些指令窗口部件230中的每个可以被实现,包括使用lutram(例如,具有被配置为查找表的sram)或bram(块ram)。指令调度器235可以将针对指令的指令标识符(指令id或iid)作为控制信号发送到译码的指令存储236和操作数缓冲器239。如下面进一步讨论的,指令块中的每个指令具有唯一地标识指令块内的指令的相关联的指令标识符。在一些示例中,用于发送执行指令的结果的指令目标被编码在指令中。以这种方式,代替监视寄存器依赖性,指令之间的依赖性可以使用指令标识符来跟踪。在一些示例中,处理器核可以包括两个或更多个指令窗口。在一些示例中,处理器核可以包括具有多个块上下文的一个指令窗口。

如下面将进一步讨论的,微架构200包括存储针对基于块的处理器架构中定义的寄存器的数据的寄存器文件290,并且可以具有一个或多个读端口和一个或多个写端口。因为指令块在事务基础上执行,所以由指令块的实例做出的对寄存器值的改变对相同实例不可见;寄存器写将在完成了对指令块的执行后被提交。

示例微架构200还包括硬件分析器295。硬件分析器295可以收集关于在处理器上执行的程序的信息。例如,关于事件、功能调用、存储器位置以及其他信息的数据可以被收集(例如,使用诸如寄存器、计数器以及其他电路的硬件装置)并且被分析以确定程序的哪些部分可能被优化。例如,程序可以通过将指令或指令块映射到一个或多个定制功能单元(例如,定制功能单元258和268)来优化,其改进执行速度和/或能耗。

译码的指令存储236存储用于控制处理器流水线中的硬件部件的操作的译码的信号。例如,32位指令可以被译码成128位的译码的指令数据。译码的指令数据由译码器220在指令被取指之后被生成。操作数缓冲器239存储操作数(例如,从寄存器文件接收到的寄存器值,从存储器接收到的数据,编码于指令内的立即操作数,由早前发出的指令计算的操作数,或者其他操作数的值)直到它们相应的译码的指令准备好执行。用于流水线的执行阶段的指令操作数和断言相应地从操作数缓冲器239、而不是(至少直接地)从寄存器文件290读取。指令窗口230可以包括用于指向指令的断言的缓冲器,包括用于组合通过多个指令发送到指令的断言的线或逻辑(wired-orlogic)。

在一些示例中,除了寄存器读操作的所有指令操作数从操作数缓冲器239而不是从寄存器文件被读取。在一些示例中,这些值被维持直到指令发出并且操作数被传递到执行流水线。在一些fpga示例中,译码的指令存储236和操作数缓冲器239利用多个lutram被实现。

指令调度器235维持每个译码的指令的依赖性(例如,指令的断言和数据操作数)的就绪状态的记录。当全部指令的依赖性(如果有的话)都被满足时,指令唤醒并且准备好发出。在一些示例中,最低编号的就绪指令id在每个流水线时钟周期被选择并且其译码的指令数据和输入操作数被读取。在图示的示例中,除了数据复用和功能单元控制信号,译码的指令数据可以编码至多两个就绪事件。指令调度器235接受这些事件和/或从其他源(被选择用于输入到分别具有多路复用器237和238的输入t0和t1上的调度器)接收事件,并且更新窗口中的其他指令的就绪状态。因此,数据流执行继续,以指令块的就绪零输入指令开始,接着是这些指令瞄准的指令,等等。一些指令准备好在它们不具有依赖性时立即发出(例如,移动立即指令)。取决于isa、控制结构、以及其他因素,在一些示例中,译码的指令存储236大约为100位宽并且包括关于指令依赖性的信息,包括指示哪个(哪些)目标指令的活动就绪状态由于发出指令而将被设置的数据。

如本文中所使用的,就绪状态是指针对给定指令指示其操作数(如果有的话)是否就绪以及其操作数(如果有的话)中的哪些就绪、以及指令本身现在是否准备好发出的处理器状态。在一些示例中,就绪状态包括译码的就绪状态和活动就绪状态。译码的就绪状态数据通过译码(一个或多个)指令来初始化。活动就绪状态表示在指令块的当前实例的执行期间、到目前为止已经评估的指令的输入操作数的集合。相应指令的活动就绪状态通过执行瞄准例如相应指令的左操作数、右操作数和/或断言操作数的(一个或多个)指令来设置。

指令窗口230和指令调度器235的属性(诸如面积、时钟周期和功能)可以对edge核的实现的性能和edge多处理器的吞吐量具有重大影响。在一些示例中,微架构的前端(if、dc)部分可以与微架构的后端部分(is、ex、ls)解耦运行。在一些fpga实现中,指令窗口230被配置为每个时钟将两个指令取指和译码到指令窗口中。

指令调度器235具有各种各样的功能和要求。其可以是高度并发的。在每个时钟周期,指令译码器220将针对一个或多个指令的译码的就绪状态和译码的指令数据写入到指令窗口230中。在每个时钟周期,指令调度器235选择接下来的(一个或多个)指令来发出,并且作为响应,后端发送就绪事件,例如,瞄准特定指令的输入槽(例如,断言槽、右操作数(op0)或左操作数(op1))的目标就绪事件、或者瞄准在广播id上等待的所有指令的广播就绪事件。这些事件使得每指令的活动就绪状态被设置为,其与译码的就绪状态一起可以用于信号通知对应指令准备好发出。指令调度器235有时接受针对尚未被译码的目标指令的事件,并且调度器还可以抑制发出的就绪指令的重新发出。

指令窗口230中的控制电路(例如,使用译码的指令存储236生成的信号)用于生成控制信号,以调节核操作(包括例如对数据路径和多路复用器选择信号的控制)并且调度核内的指令的流。这可以包括生成并且使用存储器存取指令编码,对用于执行指令处理的核的分配和解除分配,在核110、寄存器文件、存储器接口140和/或i/o接口150中的任何一项之间的输入数据和输出数据的控制。

在一些示例中,指令调度器235被实现为耦合到其他指令窗口逻辑的有限状态机。在一些示例中,指令调度器被映射到fpga中的ram的一个或多个库,并且可以利用块ram、lutram或其他可重新配置ram来实现。如相关领域的普通技术人员将显而易见的,以集成电路、可编程逻辑或其他适合的逻辑实现的其他电路结构可以用于实现针对指令调度器235的硬件。在所公开的技术的一些示例中,前端流水线阶段if和dc可以与后端流水线阶段(is、ex、ls)解耦运行。

在图2的示例中,操作数缓冲器239经由一个或多个开关(例如,多路复用器241和242)将数据操作数(为了方便,其可以被指定为左操作数(lop)和右操作数(rop))发送到执行状态流水线寄存器245的集合。这些操作数还可以分别被称为op1和op0。第一路由器240用于将数据从操作数缓冲器239发送到功能单元250中的一个或多个,功能单元250可以包括但不限于整数alu(算术逻辑单元)(例如,整数alu255)、浮点单元(例如,浮点alu256)、移位/旋转逻辑(例如,桶式移位器257)、或者其他适合的执行单元,其可以包括图形功能、物理功能以及其他数学运算。在一些示例中,可编程执行单元258可以被重新配置为实现多个不同的任意功能(例如,先验或在运行时)。

来自功能单元250的数据可以随后通过第二路由器(未示出)被路由到加载/存储流水线寄存器260的集合、加载/存储队列270(例如,用于执行存储器加载和存储器存储操作),或者被反馈回到执行流水线寄存器、由此旁路操作数缓冲器239。加载/存储队列270被耦合到对用于存储器操作的数据进行高速缓存的数据高速缓存275。数据高速缓存275和加载/存储流水线寄存器260的输出可以被发送到第三路由器280,其转而根据正在流水线阶段中执行的指令而将数据发送到寄存器文件290、操作数缓冲器239和/或执行流水线寄存器245。

当指令块的执行完成时,指令块被指定为“已提交”,并且来自控制输出的信号可以转而由基于块的处理器100内的其他核和/或由控制单元160使用,以启动对其他指令块的调度、取指和执行。

如相关领域的普通技术人员将容易理解的,单独的核内的部件不限于图2中示出的那些,而是可以根据具体应用的要求而变化。例如,核可以具有更少或更多的指令窗口,单个指令译码器可以由两个或更多个指令窗口共享,并且使用的功能单元的数量和类型可以取决于针对基于块的处理器的具体目标应用而变化。在选择和分配具有指令核的资源中应用的其他考虑包括性能要求、能量使用要求、集成电路管芯、处理工艺、和/或成本。

对相关领域的普通技术人员将显而易见的是,可以通过设计和分配处理器核110的指令窗口和控制单元内的资源,而在处理器性能上做出权衡。面积、时钟周期、功能和限制基本上确定单独的核110的实现的性能和基于块的处理器100的吞吐量。

对受执行的指令影响的处理器(诸如寄存器文件290和存储器)的可见架构状态的更新可以被本地缓冲在核内,直到指令被提交。控制电路可以确定何时指令准备好被提交,对提交逻辑排序,并且发出提交信号。例如,针对指令块的提交阶段可以在所有寄存器写入被缓冲、所有对存储器的写入(包括无条件和有条件的存储)被缓冲以及分支目标被计算时开始。指令块可以在对可见架构状态的更新完成时被提交。例如,指令块可以在寄存器写被写入作为寄存器文件、存储被发送到加载/存储单元或存储器控制器以及提交信号被生成时而被提交。控制电路还至少部分地控制功能单元到指令窗口的分配。

因为指令块作为原子事务单元被提交(或中止),所以应当指出的是,某些操作的结果对指令块内的指令不可用。这与提供在单独的、逐个指令的基础上可见的结果的risc和cisc架构形成对比。因此,公开了用于在基于块的处理器环境中支持存储器同步和其他存储器操作的附加技术。

在一些示例中,基于块的执行可以是非断言的、或者被断言为真或假。断言的指令直到其被另一指令的断言结果瞄准、并且该结果与断言条件匹配时才变成就绪。如果指令的断言不匹配,则指令决不发出。

在一些示例中,在分支到新指令块后,(存储于指令调度器235中的)所有指令窗口就绪状态被闪速清除(块重置)。然而,当块分支回到其本身(块刷新)时,仅仅活动就绪状态被清除;译码的就绪状态被保留,以使得不必重新取指和译码块的指令。因此,代替执行块重置,刷新可以用于节省循环中的时间和能量。

由于一些软件关键路径包括相关指令的单个链(例如,指令a瞄准指令b,指令b转而瞄准指令c),所以通常期望的是,数据流调度器不添加用于连续的背靠背指令唤醒的流水线气泡(bubble)。在这样的情况下,is-阶段的就绪-发出-目标-就绪流水线的再次发生应当在一个周期中完成,假设这不会严重影响时钟频率。

诸如add的指令具有一个周期的延时。在ex阶段结果转发的情况下,调度器可以在is阶段中、甚至在指令完成之前唤醒它们目标的指令。其他指令结果可以等待alu比较、采用多个周期、或者具有未知的延时。这些指令等待直到稍后唤醒它们的目标。

最终,调度器设计可以在一定范围的edgeisa上可扩展。在一些示例中,每个流水线周期可以接受从一个至四个的译码的指令和从两个至四个的目标就绪事件,并且在每个周期发出一个至两个指令。

多种不同的技术可以用于实现指令调度器235。例如,调度器235可以被实现为并行调度器,其中指令的就绪状态被显式地表示在fpgad型触发器(ff)中,并且其中每一个指令的就绪状态在每个周期都被重新评估。在其他示例中,指令调度器235可以被实现为将就绪状态保持在lutram中的更紧凑的增量调度器,并且指令调度器235在每个周期更新大约两个至四个目标指令的就绪状态。

寄存器文件290可以包括用于将数据存储在寄存器文件中的两个或更多个写端口,以及具有用于从寄存器文件内的单独的寄存器读取数据的多个读端口。在一些示例中,单个指令窗口(例如,指令窗口230)可以一次访问寄存器文件的仅一个端口,而在其他示例中,指令窗口230可以访问一个读端口和一个写端口、或者可以同时访问两个或更多个读端口和/或写端口。在一些示例中,微架构被配置为使得并非寄存器290的所有读端口都可以使用旁路机构。对于图2中所示的示例微架构200,寄存器文件可以将旁路路径上的寄存器数据发送到针对操作数op0、而不是操作数op1的多路复用器242中的一个。因此,对于一个周期内的多次寄存器读取,仅仅一个操作数可以使用旁路,而另一寄存器读取结果被发送到操作数缓冲器239,其将额外时钟周期插入指令流水线中。

在一些示例中,寄存器文件290可以包括64个寄存器,寄存器中的每个寄存器保持32位的数据的字。(为便于解释,除非另外指定,否则本申请将把32位的数据称为字。根据所公开的技术的适合的处理器可以利用8位、16位、64位、128位或其他数量的位的字进行操作)在一些示例中,寄存器文件290内的寄存器中的一些寄存器可以被分配至特殊目的。例如,寄存器中的一些寄存器可以被专用作系统寄存器,其示例包括以下的寄存器:存储恒定值(例如,所有零字)、(一个或多个)程序计数器(pc)(其指示正被执行的程序线程的当前地址)、物理核数目、逻辑核数目、核分配拓扑、核控制标志、执行标志、处理器拓扑或者其他适合的专用目的。在一些示例中,寄存器文件290被实现为触发器阵列,而在其他示例中,寄存器文件可以使用锁存器、sram、fpgalutram、fpga块ram、或者其他形式的存储器存储装置被实现。针对给定处理器的isa规格指定寄存器文件290内的寄存器如何被定义并且被使用。

v.示例现场可编码门阵列架构

图3是描绘被配置为实现所公开的技术的某些示例的示例现场可编程门阵列(fpga)架构的块图300。例如,以上关于图1讨论的基于块的处理器100(包括使用图2中描绘的微架构200的那些示例)可以被映射到图3的fpga架构。

fpga包括以阵列布置的可重新配置逻辑块的阵列。例如,fpga包括:第一行逻辑块,其包括逻辑块310、311和319;以及第二行逻辑块,其包括逻辑块320、321和329。逻辑块中的每个包括可以被重新配置为实现任意逻辑功能的逻辑,以及还可以包括诸如锁存器、触发器和存储器的顺序逻辑元件的逻辑。逻辑块使用包括多个互连开关(其也可以是可编程的)的路由结构而被彼此互连。例如,存在被定位在第一行可重新配置逻辑块与第二行可重新配置逻辑块之间的第一行开关块330、331、332等等。开关可以被配置以便改变在可重新配置逻辑块之间运送信号的有线连接。例如,指令调度器、功能单元、流水线缓冲器以及操作数缓冲器可以使用图3的开关块而被映射到逻辑块。

fpga还包括多个更复杂的部件。例如,逻辑块包括多个块ram,例如块ram340和块ram349。块ram通常包含更大数量的存储器位,例如,通过将地址应用到存储器并且从一个或多个读端口读取来访问的几千个存储器位。在一些示例中,块ram可以包括两个或更多个写端口和两个或更多个读端口。在其他示例中,块ram可以仅仅具有单个读端口和/或单个写端口。在块ram通常通过应用地址并且读取对应数据来访问的同时,在一些示例中,块ram可以被配置有附加电路,其允许实现包括移位寄存器和先进先出(fifo)缓冲器的更复杂的功能。

图示的fpga还包括多个硬宏块,其包括硬宏块350和硬宏块359。这些宏块可以包括更复杂的功能,诸如处理器功能、数字信号处理功能、加速器或认为是期望的其他功能。图示的fpga还包括可以用于对fpga中的逻辑器件进行重新编程的配置端口360。在一些示例中,存储针对逻辑器件的配置信息的配置存储器可以直接被寻址并且读/写。在其他示例中,扫描链架构用于以串行方式存储配置信息。

fpga还由可以被耦合到逻辑块、块ram和/或硬宏块的i/o环370环绕,以便向远离fpga的部件接收和发送信号。在一些示例中,i/o信号是全轨电压信号,而其他示例使用差分信号。在一些示例中,i/o端口可以被多路复用(例如,时分多路复用)以便支持比在fpga上可用的管脚的数量更多的信号的输入和输出。

尽管fpga的许多示例通常是通过使用电可擦存储器而可重新配置任意次数的,但是在其他示例中,可以使用一次性可编程逻辑元件。例如,逻辑块和开关可以利用熔丝、反熔丝的使用而被编程,或者利用rom掩码而被编程,以不容易可逆的方式一次性编程逻辑功能。

在可重新配置情况中,fpga通常具有根据被称为比特流或配置比特流的文件来接收数据的配置端口。比特流被读取到设备中并且用于编程和配置逻辑块、开关、块ram和/或硬宏。当期望新设计时,配置可以被擦除并且新的设计被配置到设备中。在一些示例中,fpga可以被部分地重新配置以便节省编程时间。例如,逻辑块、开关或块ram的子集可以在现场被动态地重新配置而无需对整个设备重新编程。

针对被映射到可重新配置逻辑上的基于块的处理器的实现的一个挑战是确定可以使用定制或现成设备的可用块高效实现的微架构结构。然而,使用所公开的技术,可以实现更高的性能和/或更高效的结构。另外,应当容易理解,尽管fpga的一些示例是独立集成电路,但是在其他示例中,fpga可以被不同地封装,例如在多芯片模块(mcm)中、或者在与定制或基础片上系统(soc)相同的电路管芯上被封装。

图4是图示可以被配置为形成示例fpga集成电路的逻辑结构的部分的四个可重新配置逻辑块410、411、412和413的块图400。示出的可重新配置逻辑块内部的部件是相同的或均质的,但是应当容易理解,在其他示例中,多于一种类型的可重新配置逻辑块可以存在于单个fpga上。

第一可重新配置逻辑块410包括被耦合到进位逻辑430、多个多路复用器440和445以及存储元件(这里为d触发器)450的六输入查找表(lut)420。lut420可以使用小的存储器(例如,如所示的具有六个地址位和两个输出位的存储器)来实现。因此,任何六输入布尔函数可以通过使用单个lut来实现。在一些示例中,lut的输出可以被组合,或者可重新配置逻辑块可以具有能够被连接在一起以便执行更复杂的逻辑功能的多个lut。在一些示例中,除了lut,可以提供常见逻辑功能。例如,进位逻辑430可以被配置为执行针对加法器的进位传播逻辑。多路复用器用于选择来自其他部件的各种输出。例如,多路复用器440可以用于选择lut420或进位逻辑430的输出,而多路复用器445可以用于选择lut420或多路复用器440的另一输出。在一些示例中,多路复用器用于选择状态元件(例如触发器450)的顺序输出或者查找表的组合输出。对本领域的普通技术人员而言应当容易理解,不同的逻辑函数、lut大小和顺序要素可以被采用于可重新配置逻辑元件中。因此,用于将基于块的处理器映射到这样的可重新配置逻辑的技术可以取决于特定目标fpga架构而变化。可重新配置逻辑块内部的逻辑的配置可以使用fpga的配置端口来编程。在一些示例中,lut不被一次编程,而是可以被配置为用作存储在基于块的处理器中使用的特定数据的小的存储器。

在所公开的技术的一些示例中,逻辑合成工具(逻辑编译器)用于将针对块处理器的规格转换成可以被应用到fpga的配置端口,以将逻辑配置为实现基于块的处理器的配置比特流。在一些示例中,设计者可以使用rpm(关系放置宏)技术来改进面积和互连延迟,并且实现用于在模块组成和大规模复制下的轻松路由和定时关闭的可重复布局。例如,通过包括实例化模块并且将它们拼接到调度器中的结构rtl,针对指令调度器的逻辑可以被锁定到单个lut的集合,从而允许对fpga内的逻辑的紧凑聚类和放置。

vi.示例指令块流

现在转到图5的图500,图示了基于块的指令流的一部分510,包括若干可变长度指令块511-514。指令流可以用于实现用户应用、系统服务或者任何其他适合的用途。指令流可以被存储在存储器中,从存储器中的另一过程接收,通过网络连接接收,或者以任何其他适合的方式被存储或接收。在图5中所示的示例中,每个指令块从指令头开始,其跟随有不同的数目的指令。例如,指令块511包括头520和二十条指令521。所图示的特定指令头520包括部分地控制指令块内的指令的执行的若干数据字段,并且还允许改进的性能增强技术,包括例如分支预测、推测执行、惰性评估和/或其他技术。指令头520还包括指令块大小的指示。指令块大小可以处于比例如被包含在指令块内的4指令数据块(chunk)的数目更大的指令的数据块中。换句话说,块的大小被移位4位以便压缩被分配到指定指令块大小的头空间。因此,0的大小值指示最小大小的指令块,其是跟随有四条指令的块头。在一些示例中,指令块大小被表达为字节数、字数、n字数据块数、地址、地址偏移或者使用用于描述指令块的大小的其他适合的表达。在一些示例中,指令块大小由指令块头和/或脚中的终止位模式来指示。

指令块头520还可以包括一个或多个执行标志,其指示用于执行指令块的一种或多种操作模式。例如,操作模式可以包括核融合操作、向量模式操作、存储器依赖性预测和/或按序或确定性指令执行。另外,执行标志可以包括抑制指令块的推测执行的块同步标志。

在所公开的技术的一些示例中,指令头520包括指示编码数据是指令头的一个或多个标识位。例如,在一些基于块的处理器isa中,最低有效位空间中的单个id位总是被设定为二进制值1,以指示有效指令块的开始。在其他示例中,不同的位编码可以用于(一个或多个)标识位。在一些示例中,指令头520包括指示相关联的指令块被编码所针对的isa的特定版本的信息。

在所公开的技术的一些示例中,块头520的字段编码指示块包含要执行特定定制指令的数据,该特定定制指令需要定制功能块或特定定制功能块以被呈现、预先配置或动态配置。

指令块头还可以包括用于在例如分支预测、控制流确定和/或分支处理中使用的若干块退出类型。退出类型可以指示分支指令的类型是什么,例如:顺序分支指令,其指向存储器中的下一相连的指令块;偏移指令,其是相对于偏移而计算的存储器地址处的另一指令块的分支;子例程调用、或者子例程返回。通过编码指令头中的分支退出类型,分支预测器可以至少部分地在相同指令块内的分支指令已经被取指和/或被译码之前开始操作。

图示的指令块头520还包括存储掩码,其指示编码于块指令中的加载存储队列标识符中的哪些被指派到存储操作。指令块头还可以包括写入掩码,其标识相关联的指令块将写入的(一个或多个)全局寄存器。在一些示例中,存储掩码由例如指令译码器(例如,译码器220)存储在存储向量寄存器中。在其他示例中,指令块头520不包括存储掩码,而是在指令块被译码时由指令译码器通过分析指令依赖性来动态地生成存储掩码。例如,译码器可以生成针对指令块的加载存储标识符以确定存储掩码并且将存储掩码数据存储在存储向量寄存器中。类似地,在其他示例中,写入掩码未被编码于指令块头中,而是被动态地生成(例如,由指令译码器通过分析指令块中的指令所涉及的寄存器)并且被存储在写入掩码寄存器中。写入掩码可以用于确定指令的执行何时已经完成并且因此启动指令块的提交。相关联的寄存器文件必须在指令块可以完成之前接收对每个条目的写入。在一些示例中,基于块的处理器架构可以不仅包括标量指令,而且还包括单指令多数据(simd)指令,其允许具有单个指令内的更大数目的数据操作数的操作。

可以用于指令521的合适的基于块的指令的示例可以包括用于执行整数和浮点运算、逻辑操作、类型转换、寄存器读和写、存储器加载和存储、分支和跳的执行的指令,以及其他适合的处理器指令。在一些示例中,指令包括用于将处理器配置为根据通过例如推测的一个或多个操作来进行操作的指令。因为指令的依赖性被编码于指令块中(例如,指令块头、瞄准指令的其他指令中、和/或指令本身中),所以指令可以在指令的依赖性被满足时发出并且不按程序顺序执行。

vii.示例块指令目标编码

图6是描绘c语言源代码的两个部分610和615及其相应的指令块620和625的示例的图600,其图示了基于块的指令可以如何显式地编码其目标。在该示例中,前两个read(读取)指令630和631分别瞄准add(加法)指令632的右(t[2r])和左(t[2l])操作数(2r指示瞄准指令号2的右操作数;2l指示指令号2的左操作数)。在所图示的isa中,读指令是从全局寄存器文件(例如,寄存器文件290)读取的唯一指令;然而,任何指令可以瞄准全局寄存器文件。当add指令632接收到这两个寄存器读取的结果时,其将变为就绪并且执行。要指出,本公开内容有时将右操作数称为op0并且将左操作数称为op1。

当tlei(测试小于等于立即(test-less-than-equal-immediate))指令633从add接收其单个输入操作数时,其将变为准备好发出并且执行。测试然后产生在信道一(b[1p])上广播到在用于断言的广播信道上监听的所有指令的断言操作数,其在该示例中是两个断言的分支指令(bro_t634和bro_f635)。接收匹配断言的分支指令将发出,但是利用互补断言编码的其他指令将不发出。

指令块620的依赖性图640还被图示为指令节点阵列650和其对应的操作数目标655和656。这图示了块指令620、对应的指令窗口条目以及由指令所表示的底层数据流程图之间的对应性。此处,译码的指令read630和read631准备好发出,因为其不具有输入依赖性。当其发出并且执行时,从寄存器r6和r7读取的值被写入到add632的右操作数缓冲器和左操作数缓冲器中,这使得add632的左操作数和右操作数“就绪”。因此,add632指令变为就绪、发出到alu、执行、并且和被写入到tlei指令633的左操作数。

viii.示例基于块的指令格式

图7是图示用于指令头710、通用指令720、分支指令730和存储器访问指令740(例如,存储器加载或存储指令)的指令格式的一般化示例的图。指令格式可以用于根据在指定操作模式的指令头中指定的多个执行标志而执行的指令块。指令头或者指令中的每一个根据位数而被标记。例如,指令头710包括四个32位的字并且从其最低有效位(lsb)(位0)被标记直到其最高有效位(msb)(位127)。如所示出的,指令头包括写入掩码字段、多个执行标志字段、指令块大小字段和指令头id位(指令头的最低有效位)。在一些示例中,指令头710包括附加元数据715和/或716,其可以用于控制指令块执行和性能的附加方面。在一些示例中,附加元数据用于指示一个或多个指令被融合。在一些示例中,附加元数据用于配置定制功能块。在一些示例中,附加元数据通过硬件或软件分析器工具而被生成和/或使用。

图7中描绘的执行标志字段占据指令块头710的第6至第13位并且指示用于执行指令块的一种或多种操作模式。例如,操作模式可以包括核融合操作、向量模式操作、分支预测器抑制、存储器依赖性预测器抑制、块同步、块之后的中断、块之前的中断、块下降、和/或按序或确定性的指令执行。块同步标志占据指令块的第9位并且当被设置为1时抑制指令块的推测执行。

退出类型字段包括可以用于指示被编码在指令块内的控制流指令的类型的数据。例如,退出类型字段可以指示指令块包括以下各项中的一项或多项:顺序分支指令、偏移分支指令、间接分支指令、调用指令、和/或返回指令。在一些示例中,分支指令可以是用于在指令块之间传递控制流的任何控制流指令,其包括相对地址和/或绝对地址,并且使用有条件的断言或者无条件的断言。除了确定隐式控制流指令之外,退出类型字段可以用于分支预测和推测执行。

所图示的通用块指令720被存储为一个32位的字,并且包括操作码字段、断言字段、广播id字段(bid)、向量操作字段(v)、单指令多数据(simd)字段、第一目标字段(t1)、以及第二目标字段(t2)。对于具有比目标字段更多的消费者的指令而言,编译器可以使用移动指令来构建扇出树,或者其可以将高扇出结果指派到广播。广播支持通过轻量网络而将操作数发送到核中的任何数目的消费者指令。

虽然由通用指令720概述的通用指令格式可以表示由基于块的处理器处理的一些或全部指令,但是本领域的技术人员将容易理解到,即使对于isa的特定示例而言,指令字段中的一个或多个指令字段也可以偏离用于特定指令的通用格式。操作码字段指定由指令720执行的(一个或多个)操作,诸如存储器读/写、寄存器加载/存储、加法、减法、乘法、除法、移位、旋转、系统操作或者其他适合的指令。断言字段指定指令将执行的条件。例如,断言字段可以指定值“真”,并且指令将仅在对应的条件标志匹配指定的断言值的情况下执行。在一些示例中,断言字段至少部分地指定哪一个被用于比较断言,而在其他示例中,执行在由先前指令(例如,指令块中的先前指令)设定的标志上被断定。在一些示例中,断言字段可以指定指令将总是被执行或者绝不被执行。因此,断言字段的使用可以通过减少分支指令的数目来允许更密集的目标代码、改进的能量效率以及改进的处理器性能。

目标字段t1和t2指定基于块的指令的结果被发送到的指令。例如,在指令槽7处的add指令可以指定其计算结果将被发送到槽3和10处的指令,包括操作数槽(例如,左操作数、右操作数、或断言操作数)的指定。取决于特定指令和isa,所图示的目标字段之一或二者可以由其他信息替换,例如,第一目标字段t1可以由中间操作数、附加操作码、指定两个目标等来替换。

分支指令730包括操作码字段、断言字段、广播id字段(bid)以及偏移字段。操作码和断言字段在如关于通用指令所描述的格式和功能方面是类似的。偏移可以以四个指令的组为单位被表达,因此扩展在其上可以执行分支的存储器地址范围。利用通用指令720和分支指令730示出的断言可以用于避免指令块内的附加分支。例如,特定指令的执行可以根据先前指令的结果(例如,两个操作数的比较)被断定。如果断言是假的,则指令将不提交由特定指令计算出的值。如果断言值未匹配所要求的断言,则指令不发出。例如,bro_f(断言假)指令在其被发送假断言值的情况下将发出。

应当容易理解到,如在此所使用的,术语“分支指令”不限于将程序执行改变到相对存储器位置,而且还包括跳转到绝对或者符号存储器位置、子例程调用和返回,以及可以修改执行流的其他指令。在一些示例中,通过改变系统寄存器(例如,程序计数器pc或者指令指针)的值来修改执行流,而在其他示例中,可以通过修改被存储在存储器中的指定位置处的值来改变执行流。在一些示例中,跳转寄存器分支指令用于跳转到被存储在寄存器中的存储器位置。在一些示例中,分别使用跳转和链接和跳转寄存器指令来实现子例程调用和返回。

存储器访问指令740格式包括操作码字段、断言字段、广播id字段(bid)、立即字段(imm)和目标字段(t1)。操作码字段、广播字段、断言字段在格式上类似并且如关于通用指令所描述的起作用。例如,对特定指令的执行可以在先前指令的结果(例如,两个操作数的比较)上断言。如果断言为假,则指令将不提交由该特定指令计算的值。如果断言值与所要求的断言不匹配,则指令不发出。立即字段可以被用作针对被发送到加载或存储指令的操作数的偏移。操作数加上(移位的)立即偏移被用作针对加载/存储指令的存储器地址(例如,用于从存储器中读取数据或者将数据存储到存储器中的地址)。对于一些指令,附加位(例如,编码在操作码中或者指令的另一字段中)用于指示指令是否与指令块中的一个或多个其他指令融合。这样的融合的指令可以利用定制功能块来执行,如下面进一步详述的。在一些示例中,来自指令头或指令的某些字段可以用于提供配置定制功能块的操作的参数。

在所公开的技术的一些示例中,针对定制功能块的目标代码可以如下被生成。如对本领域普通技术人员而言将容易理解的,其他适合的技术可以用于生成这样的目标代码。高级语言编译器将程序编译成一系列指令块(例如,以上关于图5讨论的指令块)。编译器具有定制功能意识,并且可以将表达式树模板进行模式匹配以将它们转化成诸如complexmultiply的定制功能单元指令。在一些示例中,程序员可以显式地调用代表定制功能的固有功能(例如,“complex_cmul(constcomplex&a,constcomplex&b)”),使得编译器将该_cmul固有的每一次援引转化成诸如complexmultiply的定制功能单元指令。在一些示例中,(由轮廓反馈引导的)编译器标识热点代码区域,定义针对该功能的新的定制功能索引,将定制逻辑数据路径和有限状态机合成以控制它,发出具有对应的定制功能索引参数的定制功能援引指令,合成针对包括定制功能单元的定制功能块的部分配置比特流,将配置比特流复制到程序二进制中,并且生成代码或数据以确保无论何时定制功能块被使用时引用的定制功能块的配置比特流都被加载。在一些示例中,编译器生成热点代码区域的纯软件版本,以及还生成发出具有对应的定制功能索引参数的定制功能援引指令的版本。

在一些实施例中,具有定制功能块910的处理器核(例如,具有下面讨论的微架构的处理器核)900还将包括标准功能单元(例如,255、256、256、258、等等)的全员,使得处理器核仍然可以运行所有程序以及定制功能(例如,定制功能单元930-933)。

在一些示例中,源代码中的某些功能的两个版本通过编译器产生,一个版本瞄准基本(非定制)处理器,以使得被编译成基本指令集架构指令的所有源代码都在基本处理器的预先存在的固定功能单元上执行,并且第二版本包括使用具有对应的定制功能块的定制处理器执行的定制功能指令。在一些实施例中,编译器还生成代码来询问当前处理器配置,并且在处理器被如此配置的情况下使用机器代码的第一版本或者使用第二(定制功能单元)版本来动态地运行功能。

在一些实施例中,在基本处理器上执行的并且在适当定制的处理器上更快地执行的这样的程序代码的库被提供,使得软件开发者可以简单地调用库函数而无需具有存在于任何给定处理器上的定制功能单元的存在或类型的具体知识。

ix.示例处理器状态图

图8是图示在指令块被映射、执行和引退时被分配给指令块的多个状态的状态图800。例如,状态中的一个或多个可以在执行指令期间根据一个或多个执行标志来分配。应当容易理解,图8中示出的状态是所公开的技术的一个示例,但是在其他示例中,指令块可以具有附加的或更少的状态、以及具有与状态图8中描绘的状态不同的状态。在状态805处,指令块未被映射。指令块可以驻留在耦合到基于块的处理器的存储器中、被存储在诸如硬盘驱动器或闪存驱动器的计算机可读存储设备上,并且可以在处理器本地或者被定位在远程服务器处并且可使用计算机网络访问。未映射的指令还可以至少部分地驻留在耦合到基于块的处理器的高速缓存存储器中。

在指令块映射状态810处,针对基于块的处理器(例如指令调度器)的控制逻辑可以用于监视基于块的处理器的处理核资源,并且将指令块映射到处理核中的一个或多个。

控制单元可以将指令块中的一个或多个映射到处理器核和/或特定处理器核的指令窗口。在一些示例中,控制单元监视先前已经执行了特定指令块的处理器核并且可以重新使用针对仍然驻留在“预热”的处理器核上的指令块的译码的指令。一旦一个或多个指令块已经被映射到处理器核,指令块就可以前进到取指状态820。

当指令块处于取指状态820(例如,指令取指)时,映射的处理器核从基于块的处理器的存储器系统中取指计算机可读块指令,并且将它们加载到与特定处理器核相关联的存储器中。例如,针对指令块的取指的指令可以被取指并且被存储在处理器核内的指令高速缓存中。指令可以使用核互连而被传送到处理器核。一旦已经取指了指令块的至少一个指令,该指令块就可以进入指令译码状态830。

在指令译码状态830期间,取指的指令的各个位被译码成能够由处理器核用于控制特定指令的执行的信号,包括对指示存储器访问指令的相对顺序的标识符的生成。例如,译码的指令可以被存储在以上在图2中示出的存储器存储中的一个中。译码包括生成针对译码的指令的依赖性、针对译码的指令的操作数信息和针对译码的指令的目标。一旦指令块的至少一个指令已经被译码,指令块就可以前进到发出状态840。

在发出状态840期间,指令依赖性被评估以确定指令是否准备好执行。例如,指令调度器可以监视指令的源操作数并且(针对断言的指令)断言操作数必须在指令准备好发出之前可用。对于一些编码,某些指令还必须根据指定顺序发出。例如,存储器加载存储操作根据编码于每个指令中的lsid值来排序。在一些示例中,多于一个指令准备好同时发出,并且指令调度器选择准备好发出的指令之一来发出。指令可以使用它们的iid来标识以方便评估指令依赖性。一旦已经发出了指令块的至少一个指令,针对(一个或多个)发出的指令的源操作数可以被取指(或者在旁路路径上维持),并且指令块可以前进到执行状态850。

在执行状态850期间,与指令相关联的操作使用例如如以上关于图2所讨论的功能单元260来执行。如以上所讨论的,执行的功能可以包括算术功能、逻辑功能、分支指令、存储器操作和寄存器操作。与处理器核相关联的控制逻辑监视指令块的执行,并且一旦确定了指令块可以被提交或者指令块要被中止,指令块状态就被设置为提交/中止状态860。在一些示例中,控制逻辑使用针对指令块的写掩码和/或存储掩码来确定执行是否已经足够地前进到提交指令块。

在提交/中止状态860处,处理器核控制单元确定由指令块执行的操作可以被完成。例如存储器加载存储操作、寄存器读/写、分支指令和其他指令将必定根据指令块的控制流来执行。对于条件存储器指令,数据将被写入到存储器,以及在提交/中止状态860期间生成的指示成功的状态指示符值。备选地,如果指令块要被中止,例如,因为指令的依赖性中的一个或多个未被满足、或者指令在未被满足的针对指令块的断言上被推测地执行,则指令块被中止使得其将不会影响存储器或寄存器文件中的指令的顺序的状态。不管指令块是已经提交了还是中止了,指令块都进行到状态870以确定指令块是否应当被刷新。如果指令块被刷新,则处理器核通常使用新数据值(特别是通过刚刚提交的块的执行而更新的寄存器和存储器)重新执行指令块,并且直接前进到执行状态850。因此,可以避免在映射、取指和译码指令块中花费的时间和能量。备选地,如果指令块未被刷新,则指令块进入空闲状态880。

在空闲状态880中,执行指令块的处理器核可以通过例如对处理器核内的硬件掉电、同时维持针对指令块的译码的指令的至少一部分而被空闲。在某个时刻,控制单元确定890处理器核上的空闲指令块是否要被刷新。如果空闲指令块要被刷新,则指令块可以在发出状态840处重新开始指令执行。备选地,如果空闲指令块不要被刷新,则指令块不被映射并且处理器核可以被冲洗并且随后指令块可以被映射到冲洗的处理器核。

尽管为便于解释,状态图800将指令块的状态图示为在单个处理器核上执行,但是对相关领域的普通技术人员而言应当容易理解,在某些示例中,多个处理器核可以用于并发执行给定指令块的多个实例。

x.具有定制功能块的示例微架构

图9是详述如可以在所公开的技术的某些示例中使用的、已经被配置为包括定制功能块910的示例微架构900的块图。例如,以上关于图2讨论的包括可编程执行单元258和268的示例微架构200可以适于形成描绘的微架构900。在一些示例中,定制功能块910被实现为定制集成电路的部分或者被实现为asic。在一些示例中,定制功能块910使用包括诸如fpga中的一次性可编程或多次可重新编程逻辑的可配置逻辑来实现。

如本文中所使用的,除非另行陈述,否则术语“定制功能块”一般用于指代基于块的处理器的可定制部分以及相关联的数据和控制单元。术语“定制功能单元”指代被配置为提供特定功能的定制功能块的子部件,例如参数化alu、特定alu、加法器、乘法器、比较器、查找表、或其他任意算术、逻辑或其他数据处理功能、和/或定制ram、fifo队列以及其他互连。

如在图9的示例中所示出的,数据操作数(例如,op0-0、op0-1、op1-0和op1-1)被临时存储在操作数缓冲器239中。在示出的示例中,正执行两个复数的乘法运算:(x+yi)×(u+vi)。来自操作数缓冲器239的数据可以经由多路复用器241和242被发送到定制功能块910。数据被发送到一系列流水线寄存器245,诸如以上关于图2讨论的那些。在一些示例中,定制功能块与基于块的处理器的通用执行单元共享流水线寄存器的集合。在其他示例中,定制功能块包括存储从操作数缓冲器接收的数据的其自己的流水线寄存器的集合。来自操作数缓冲器239的数据还可以被发送到参数寄存器920的集合。参数寄存器920可以用于指定由定制功能块执行的功能。例如,适合的参数包括向量化、单个数据或多个数据指令、指令是否被融合、诸如算术和逻辑运算的特定功能、输入和/或输出数据字段的宽度、舍入模式、恒定系数、查找表内容、存储器配置、或其他适合的参数。

图示的共享的流水线寄存器可以转而将数据发送到通用功能单元,包括如所示出的整数alu255以及定制功能单元930至933。在图示的示例中,定制功能块910已经被配置为执行两个复数的乘法。定制功能单元930至933产生中间乘积值:xv、yu、xu和yv。这些中间值被发送到加载存储阶段流水线寄存器260的集合。第二阶段的操作之后使用定制功能单元940和941来执行,定制功能单元940和941被配置为分别执行加法(xv+yu)和减法(xu–yv)运算。通过对底层逻辑电路进行重新编程,定制功能块910可以被编程为执行大量不同的任意功能。例如,在功能单元下面的逻辑可以在处理器的操作期间、在初始化指令块之前、在初始化处理器的使用之前、或者在用于对逻辑进行重新编程的另一适合的间隔处被重新编程,这取决于性能要求和底层可配置逻辑的可配置性。所计算的值转而被发送到路由器280并且可以在之后被存储回操作数缓冲器239中、加载存储队列270中、和/或寄存器文件290中。

定制功能块910还包括控制信号生成器,其生成可以被发送到指令调度器235和/或定制控制单元905的一个或多个指令完成信号。指令完成信号可以用于标识(1)发出的(并且现在完成的)定制功能指令和/或(2)指令的目标。在诸如本文中公开的基于块的架构和edge架构中,目标可以是数据值或断言,并且可以被标识为要写入的(其他)指令的操作数、广播信道或寄存器。在执行指定尚未如此配置的定制功能块的块后,定制控制电路905可以将定制功能块的部分重新配置比特流复制到设备的配置端口中以将其加载到可重新配置逻辑中。

定制功能块完成信号的一致使用实现了跨任意定制功能单元以及跨处理器的其他固定功能单元的指令的均匀且高效的数据流调度,该任意定制功能单元具有单个周期、多个周期或者变化的或不可断言的操作延时(包括乱序完成)。当指令发出时,无论是固定功能还是定制功能,其完成导致其结果写回到合适的目标以及消耗其结果的指令的准备、唤醒和发出。在一些示例中,完成信号是指示定制功能操作的完成的简单完成信号。

在一些示例中,完成信号包括由有效性信号v验证的发出的指令的iid。诸如这些的更多的复杂完成信号可以在许多或变化的延时定制功能并发在运行中的情况下有用。处理器核、尤其是处理器核指令调度器,可以将该iid映射到定制指令的目标信息中。这可以包括数据的类型(例如,值或断言)和目标位置(例如,另一待定指令的特定操作数或特定操作数的广播信道)。这可以直接由指令调度器用于更新,并且可能唤醒并且发出定制功能指令的(一个或多个)任何目标。

在一些示例中,完成信号是指令的目标信息本身。这可以直接由指令调度器用于更新,并且可能唤醒并且发出定制功能指令的(一个或多个)任何目标。

就绪状态数据的示例包括目标指令id标识符(iid)和有效位,其指示针对定制功能块指定的操作已经被完成。通过利用控制信号生成器950生成就绪状态数据,任意数量的定制功能块可以使用一致接口被添加到基于块的处理器,以允许定制功能与由基于块的处理器的通用指令指定的通用功能的无缝添加。

基于块的微架构900还包括分析器295,其可以利用硬件和/或软件资源来实现。分析器监视利用基于块的处理器对程序的执行来标识高度适合于优化的指令流的热点或其他区域。基于利用分析器295捕获的信息,使用通用指令定义的一个或多个指令块的部分可以被映射到定制功能块910,由此改进执行速度和/或能耗。

xi.关于定制功能块和融合的指令的示例

图10包括已经被配置为使用两个融合的指令来执行操作的定制功能块1010的块图1000。定制功能块1010包括生成用于操作单元的数据路径的控制信号的定制控制电路1015,和存储指定操作定制功能块1010的某些方面的参数值的参数寄存器1017。

在被扩展具有定制功能块的处理器中,有时有利的是使处理器设计不仅适应0输入、1输入和2输入操作数指令,而且还适应具有更多输入(诸如3输入乘法-加法(a*b+c)或8输入4向量点积(a0*b0+a1*b1+a2*b2+a3*b3))的指令。因此,这样的示例可以使用一系列“融合”的指令以收集跨若干指令和它们的操作数缓冲器的(大于两个)数量输入操作数,其之后一起(同时或者以紧密流水线方式)发出。

如图10中所示出的,(下面在表i中复制的)源代码的部分包括多个基于块的处理器指令,其包括标记为i[3]和i[4]的两个融合的指令。

表i

融合的指令是针对复数乘法-加法运算a×b+c的。存在由两个融合的指令使用的四个操作数,包括存储b的op0-、存储a的op0-0、存储c的op1-0以及存储参数p的op1-1。操作数由定制功能块1010接收。操作数a、b和c被发送到定制执行单元1030和1035。定制控制电路1015控制融合的操作的序列化。参数p被发送到参数寄存器1017。参数p可以用于从可能操作的集合之中指定或配置融合的操作的方面,包括要执行的指定操作。在图示的情况中,参数p可以用于指定指令是针对单指令多数据(simd)操作(例如,simd操作,其中操作数a、b和c各自表示4个8位整数而非单个32整数)的。在其他示例中,参数可以设置融合的操作的其他方面,诸如指令是否有符号、被向量化、整数或固定点或其他适合的参数。定制控制电路1015控制序列化以使用定制功能块1010优化执行。例如,定制控制电路1015可以确保第一融合的乘法指令i[3]在后续融合的加法指令i[4]之前立即被执行。因此,乘积a×b可以旁路操作数缓冲器239并且被直接发送到流水线寄存器245以用于由执行单元1035加载,执行单元1035被配置为将乘积a×b与值c相加。应当指出,输出a×b+c通常直到在乘积a×b由执行单元1030生成之后的一个或多个时钟周期才被生成。

在一些示例中,定制控制电路1015延迟对两个或更多个融合的指令的集合中的第一指令的发出,即使第一指令已经使其全部依赖性被满足。定制控制电路1015确定融合的指令的集合中的第二指令已经使其依赖性在稍后时刻被满足,并且随后,定制控制单元发出延迟的第一指令。第一指令一旦被执行就生成由第二指令消耗的操作数。因此,通过延迟对融合的指令的集合中的第一指令的发出,由对操作数缓冲器进行写入和读取引起的附加的延迟可以使用旁路机构而被避免。在一些示例中,定制控制电路1015引起对指定对定制功能块的使用的两个或更多个融合的指令的集合中的第一指令的发出。融合的指令的集合中的第二指令之后被发出,第二指令以允许旁路操作数缓冲器的序列被发出。

在一些示例中,左操作数缓冲器和右操作数缓冲器上的读端口的数量被增加,使得在发出了消耗(例如)四个输入操作数的指令后,所有四个操作数可以在单个周期中从操作数缓冲器被读取,从而能够以每周期(每定制功能单元)一个指令的启动间隔(节奏)发出并且执行4输入定制功能。在一些示例中,每指令的操作数缓冲器的数量从两个增加到更高数量,使得代替如以上所描述的从多个2输入功能形成融合的指令,四个输入的定制功能可以被直接表示在单个指令中,并且使得多达块中的每一个指令都可以是4输入定制功能。因此,对数据流指令调度器以及显式目标信息和目标就绪事件的均匀应用,实现了常规微架构、调度、以及跨2输入固定功能单元和多输入多周期延时定制功能单元两者的结果写回。

xii.示例基于块的处理器系统和定制功能块

图11是图示包括基于块的处理器1110的装置的图1100,基于块的处理器1110包括被配置为执行包括用于包括存储器同步和存储器锁定的存储器操作的指令的指令块的控制单元1120。控制单元包括核调度器1125,其控制:对用于执行指令处理的核的分配和解除分配,对在核、寄存器文件、存储器接口和/或i/o接口中的任何项之间的输入数据和输出数据的控制。控制单元1120还可以包括用于执行某些存储器操作的专用寄存器。

基于块的处理器1110还包括被配置为取指并且执行指令块的一个或多个处理器核1130–1137。核中的每个核包括控制指令块中的指令被取指、译码、发出和执行的顺序的指令调度器(例如,并行指令调度器1141)。图示的基于块的处理器1110具有至多八个核,但是在其他示例中可以存在1个、2个、4个、64个、512个、1024个或其他数量的基于块的处理器的核。核1130-37中的每个核可以被配置和/或重新配置为执行针对一个或多个定制功能块(例如,定制功能块1145)定义的编程的功能。定制功能块可以使用可重新配置逻辑(诸如fpga类结构的可重新编程存储器)来实现。

基于块的处理器1110被耦合到存储器1150并且被耦合到计算机可读存储介质盘1160,存储器1150包括多个指令块、包括指令块a和b,其包括实现所公开的存储器操作的指令(分别为1155和1156),计算机可读存储介质盘1160存储用于执行所公开的存储器操作的指令1165。另外,存储器1150和介质盘1160可以存储用于对核的定制功能块进行编程的配置信息。例如,硬件描述语言可以被编译成被施加到处理器核1130-37中的一个或多个的配置端口的配置比特流。在一些示例中,针对一个或多个定制功能块的动态生成的部分重新配置比特流可以被存储在存储器1150或介质盘1160中。

xiii.操作基于块的处理器的示例方法

图12是概述如可以在所公开的技术的某些示例中执行的、使用定制功能块来执行指令的示例方法的流程图1200。例如,以上关于图9讨论的微架构可以用于执行图12的方法,但是该方法不是排他性地被限制于实现这样的微架构的硬件。

在处理块1210处,初始化对具有基于块的isa指令的指令块的执行。例如,指令块可以从存储器读取、被存储在指令高速缓存中,并且指令块头和/或指令可以开始被译码。

在处理块1220处,执行指令块的指令中的一个指令。执行的指令指定对利用可配置逻辑器件实现的定制功能块的使用。在一些示例中,可配置逻辑器件是一次性可编程器件,诸如prom。在其他示例中,可配置逻辑器件可以被重新配置多次,例如通过电擦除可配置逻辑器件的编程并且将新编程应用到器件(例如,如在eeprom或闪存中)。在一些示例中,该重新配置可以在指令块的集合正被执行时发生,而在其他示例中,执行程序的基于块的处理器的操作被停止以便被重新配置,并且之后该执行在稍后重新开始。

在处理块1230处,通过在处理块1220处执行指令的定制功能块来发送目标指令指示。

在处理块1230处,通过在处理块1220处执行指令的定制功能块来发送指令完成信号。该信号包括(或者备选地,可以用于获得)目标指令信息。目标指令指示指示用于消耗结果的指令标识符和操作数说明符,并且被发送到指令调度器。在一些示例中,多于一个目标指令被标识以用于消耗结果。在一些示例中,多于一个结果值由定制功能块生成。指令调度器可以使用该信息来确定指令块中的哪些附加指令使其依赖性被满足并且可以被指定为准备好发出。因为定制功能块被配置为产生从其可以获得目标指令信息的完成信号,所以代替写入到寄存器以指示依赖性的满足,指令调度器的实现可以通过降低接收指令调度器的复杂度而被简化并且得到性能改进。

目标指令指示指示用于消耗结果的有效性和/或指令标识符,并且被发送到指令调度器。指令调度器可以使用该信息来确定指令块中的哪些额外指令使其依赖性被满足并且可以被指定为准备好发出。因为定制功能块被配置为发送指令标识符而不是写入到寄存器以指示依赖性的满足,所以指令调度器的实现可以通过降低接收指令调度器的复杂度而被简化并且得到性能改进。

xiv.利用任选旁路来操作基于块的处理器的示例方法

图13是概述利用包括一个或多个定制功能块的基于块的处理器来执行两个或更多个融合的指令的集合的示例方法的流程图1300。例如,以上关于图10讨论的微架构可以用于实现图示的方法,但是也可以使用其他适合的微架构。

在处理块1310处,延迟对两个或更多个融合的指令的集合中的第一指令的发出。例如,指令调度器可以检测指令块中的两个或更多个融合的指令的编码,并且基于融合的指令的某些依赖性来延迟对融合的指令中的一个或多个指令的发出。例如,对第一指令的发出可以被延迟,直到针对融合的指令的所有源操作数都可用。在一些示例中,指令是否被融合通过编码在融合的指令中的操作码来指示。在其他示例中,对指令的融合通过编码在块头字段中的一个或多个位来指示。在另外的其他示例中,指令块中的特殊指令用于指示块中的其他指令被融合。

在处理块1320处,确定融合的指令中的第二指令使其依赖性被满足。例如,由指令块中的其他指令生成的操作数可以到达操作数缓冲器,来自存储器加载操作的值可以被接收,和/或寄存器读操作数可以被接收。在一些示例中,用于生成基于块的指令的编译器将指令块布置为避免关于融合的指令可能出现的死锁和活锁情形。

在处理块1330处,发出在处理块1310处被延迟的第一指令。当发出延迟的指令时,附加控制信号可以被生成以控制定制功能块的数据路径。例如,控制信号可以指示由第一延迟的指令生成的一个或多个操作数能够旁路其他操作数缓冲器,并且立即由将在延迟的第一指令之后立即发出的另一指令消耗。

在处理块1340处,可以针对执行指令的至少一个源操作数来旁路基于块的处理器的操作数缓冲器。例如,基于在发出延迟的指令时生成的控制信号,控制硬件和数据路径可以被操作以便从数据路径的执行单元选择操作数,而不是读取存储在操作数缓冲器中的操作数。

在处理块1350处,执行融合的指令的集合中的附加的融合的指令。例如,接收旁路操作数的第二指令可以在第一延迟的指令之后立即执行,并且消耗由第一指令生成的结果作为其源操作数中的一个或多个。在一些示例中,指令调度器对融合的指令的集合中的指令进行排序以允许旁路操作数缓冲器。

xv.配置可重新配置逻辑器件的示例方法

图14是概述使用分析器来执行针对基于块的处理器的指令块的示例方法的流程图1400。例如,以上关于图2、9和10讨论的微架构可以用于实现图14的方法,但是其他微架构也可以适于图示的方法。

在处理块1410处,使用基于块的处理器的通用执行单元来执行一个或多个指令块。如以上所讨论的,这样的通用执行单元包括整数alu、浮点alu、加法器、乘法器、移位器、以及至少部分地由基于块的处理器isa定义的其他通用执行单元。数据可以随着执行前进而关于指令块的执行来收集。在一些示例中,基于块的处理器包括分析器寄存器,其存储指示例如特定指令被执行的次数、被共同访问的存储器位置、被共同执行的操作的序列以及其他适合的配置数据的数据。在一些示例中,软件用于捕获分析器数据中的全部或部分。例如,分析器变量可以基于由编译器插入、或者由生成指令块代码的程序员添加的装置而被编译成指令块。

在处理块1420处,基于针对使用基于软件和/或硬件的分析器生成的指令块的性能数据,定制功能块可以被配置为执行来自指令块的功能。例如,如果未由处理器isa定义的一系列操作被检测到,则这些操作可以被映射到定制功能块。在一些示例中,未由通用执行单元支持的特定功能可以被定义并且被映射到定制功能块。定制功能块可以被重新配置以在不同时间实现新功能,包括在基于块的处理器上运行指令块之前实现新功能、在运行指令块多次之后实现新功能、或者在程序本身正在运行时动态地实现新功能。

在处理块1430处,使用在处理块1420处重新配置的新配置的定制功能块来执行指令块。在一些示例中,新指令块代码还被生成以实现定制功能,而在其他示例中,指令块的执行被自动地映射到定制功能块。因此,通过使用可以在适合的时间处被配置的定制功能块,性能可以被改进并且能耗通过使用定制功能块而被降低。对基于块的处理器架构的使用(包括使用由定制功能块生成的指令标识符以指示针对由定制功能单元生成的结果的完成和/或目的)、而不是对如将在risc或cisc处理器中使用的通用寄存器的使用,允许了对这样的定制功能的有效实现。

xvi.配置具有定制功能块的逻辑器件的示例方法

图15是概述如可以在所公开的技术的某些示例中执行的配置可重新配置逻辑器件的示例方法的流程图1500。例如,以上关于图3所讨论的fpga可以被配置为使用以上关于图2、图9或图10讨论的示例微架构来实现图1的基于块的处理器,包括以上讨论的定制功能块。

在处理块1510处,将基于块的处理器部件的描述映射到fpga的可重新配置逻辑器件部件。例如,处理器设计者可以指定以硬件描述语言的对基于块的处理器的描述,硬件描述语言诸如为systemverilog、systemc、verilog或硬件描述语言的任何其他适合的组合。在一些示例中,以诸如c或c++的传统编程语言编写的描述用于描述基于块的处理器的至少部分。基于块的处理器的描述可以包括以上讨论的部件中的任何部件。在一些示例中,设计者可以指定要由处理器微架构的元件瞄准的特定fpga单元。例如,设计者可以指定指令高速缓存和/或数据高速缓存使用fpga的块ram资源来实现。在一些示例中,程序员可以使用由fpga供应商提供的可用宏来实现定制功能单元、fifo缓冲器、移位寄存器和使用针对该fpga的经济映射的其他部件。在一些示例中,定制功能块的至少部分在使用分析器数据的情况下来生成。

在处理块1520处,产生配置比特流以用于实现针对基于块的处理器的电路,其包括生成由指令标识符索引的就绪状态数据的定制功能块。例如,以硬件描述语言表示的基于块的处理器的描述可以被编译以生成网表,并且该网表转而用于生成比特流文件。在比特流文件中指示的信号可以被施加到fpga的配置接口以便将fpga配置为执行用于实现根据所公开的技术的基于块的处理器的功能。

在处理块1530处,可重新配置逻辑器件使用在处理块1520处生成的比特流来配置。例如,一些fpga具有用于将数据连续地流传输到fpga的配置存储器中的配置端口,由此配置fpga。在一些示例中,fpga的配置存储器通过并行或其他可寻址端口被寻址。在一些示例中,具有与fpga类似的结构的可重新配置逻辑器件可以被配置一次,而不被重新配置。在其他示例中,fpga可以被电擦除并且被重新写入以便提供新配置。在一些示例中,fpga在无论何时集成电路被重新上电时都被重新配置,而在其他示例中,fgpa配置跨重复的电力周期维持状态。

在处理块1540处,基于通过在处理块1530处执行指令而生成的分析器数据来动态地且部分地重新配置可重新配置逻辑器件。例如,消耗指令流的执行时间的大部分的功能、或者在被映射到定制功能块时呈现出大量加速的功能可以被映射到这样的块。配置信息(例如,部分比特流)被生成以对更新的处理器进行编程,包括定义定制功能块功能的信息。部分比特流被施加到可重新配置逻辑器件的配置接口,并且指令流的执行重新开始。因此,修改的电路使用新编程的定制功能块来改进指令流的性能。

xvii.示例计算环境

图16图示了在其中可以实现所描述的实施例、技术和工艺(包括配置基于块的处理器)的适合的计算环境1600的一般示例。例如,计算环境1600可以实现所公开的技术,以用于配置处理器以实现所公开的基于块的处理器架构和微架构、和/或将代码编译成计算机可执行指令和/或用于执行包括定制功能块的这样的操作的配置比特流,如在此所描述的。

计算环境1600不旨在提出关于技术的使用或者功能的范围的任何限制,因为技术可以被实现在不同的通用或者专用计算环境中。例如,所公开的技术可以利用其他计算机系统配置被实现,包括手持式设备、多处理器系统、可编程消费者电子产品、网络pc、微型计算机、大型计算机,等等。所公开的技术还可以被实践在分布式计算环境中,其中任务由通过通信网络链接的远程处理设备来执行。在分布式计算环境中,程序模块(包括用于基于块的指令块的可执行指令)可以被定位在本地存储器存储设备和远程存储器存储设备二者中。

参考图16,计算环境1600包括至少一个基于块的处理单元1610、以及存储器1620。在图16中,该最基本配置1630被包括在虚线内。基于块的处理单元1610执行计算机可执行指令,并且可以是真实处理器或者虚拟处理器。在多处理系统中,多个处理单元执行计算机可执行指令以增加处理能力,并且由此多个处理器可以同时运行。存储器1620可以是易失性存储器(例如,寄存器、高速缓存、ram)、非易失性存储器(例如,rom、eeprom、闪存存储器等)、或者以上两者的组合。存储器1620存储可以例如实现在此所描述的技术的软件1680、图像和视频。计算环境可以具有附加的特征。例如,计算环境1600包括存储装置1640、一个或多个输入设备1650、一个或多个输出设备1660以及一个或多个通信连接1670。诸如总线、控制器或者网络的互连机制(未示出)将计算环境1600的部件互连。通常,操作系统软件(未示出)提供用于在计算环境1600中执行的其他软件的操作环境,并且协调计算环境1600的部件的活动。

存储装置1640可以是可移除或者不可移除的,并且包括磁盘、磁带或者磁带盒、cd-rom、cd-rw、dvd或者可以用于存储信息并且可以在计算环境1600内访问的任何其他介质。存储装置1640存储用于软件1680的指令、插件数据和消息,其可以用于实现在此所描述的技术。

(一个或多个)输入设备1650可以是触摸输入设备,诸如键盘、小键盘、鼠标、触屏显示器、笔、或轨迹球、语音输入设备、扫描设备、或者向计算环境1600提供输入的另一设备。对于音频而言,(一个或多个)输入设备1650可以是接受以模拟或者数字形式的音频输入的声卡或者类似设备,或者可以是向计算环境1600提供音频样本的cd-rom读取器。(一个或多个)输出设备1660可以是显示器、打印机、扬声器、cd刻录机、或者提供来自计算环境1600的输出的另一设备。

(一个或多个)通信连接1670实现通过通信介质(例如,连接网络)与另一计算实体的通信。通信介质传达诸如计算机可执行指令、压缩图形信息、视频、或者调制数据信号中的其他数据的信息。(一个或多个)通信连接1670不限于有线连接(例如,兆比特或吉比特以太网、infiniband、通过电连接或通过光纤连接的光纤信道),而且还包括无线技术(例如,经由蓝牙、wifi(ieee802.11a/b/n)、wimax、蜂窝、卫星、激光、红外的rf连接)以及用于提供用于所公开的方法的网络连接的其他适合的通信连接。在虚拟主机环境中,(一个或多个)通信连接可以是由虚拟主机所提供的虚拟化网络连接。

可以使用实现计算云1690中的所公开的技术的全部或部分的计算机可执行指令来执行所公开的方法的一些实施例。例如,所公开的编译器和/或基于块的处理器的服务器被定位在计算环境中,或者所公开的编译器可以在被定位在计算云1690中的服务器上执行。在一些示例中,所公开的编译器在传统的中央处理单元(例如,risc或者cisc处理器)上执行。

计算机可读介质是可以在计算环境1600内访问的任何可用介质。以示例而非限制的方式,利用计算环境1600,计算机可读介质包括存储器1620和/或存储装置1640。如应当容易理解的,术语计算机可读存储介质包括用于数据存储的介质(诸如存储器1620和存储装置1640)而非传输介质(诸如调制数据信号)。

xviii.所公开的技术的附加示例

在这里根据以上讨论的示例来讨论所公开的主题的附加示例。例如,以上关于图1、图2和图9讨论的基于块的处理器的方面可以用于实现这些附加示例,包括fpga、诸如以上关于图3和图4讨论的那些fpga。

在所公开的技术的某些示例中,基于块的处理器中的全部或一部分通过将fpga配置为包括用于执行在基于块的处理器isa中表达的程序的结构来实现。在一些示例中,处理器被实现在嵌入式设备中,诸如用于部署在物联网(iot)网络中。在一些示例中,诸如高速缓存的结构,以及在指令调度器、加载存储队列和/或寄存器文件中使用的存储被实现在具有单个写端口或单个读端口的存储器中。在其他示例中,这些结构中的一个或多个被实现在具有多个读端口和/或写端口的存储器中。在一些示例中,指令块的指令块头以及一个或多个指令可以从存储器和/或指令高速缓存并发地取指。在一些示例中,旁路机构允许从微架构流水线的执行部分生成的操作来旁路操作数,由此允许具有共享的或链式的依赖性的指令的背靠背发出。在一些示例中,旁路机构允许当在执行时钟周期期间与指令窗口操作数缓冲器上的写入端口相比存在更多生成的操作数时,避免流水线暂停。

在一些示例中,调度器可以使用译码的或先前译码的指令依赖性,来在它们已经被取指之前唤醒并且发出指令。在一些示例中,针对指令调度器的存储可以被分成两个或更多个部分,以便将存储映射到fpga的两个或更多个物理存储单元。在一些示例中,指令调度器包括并行调度器。在一些示例中,调度器被配置为在重新执行指令块后刷新指令中的一些但不是全部。在一些示例中,指令调度器包括增量调度器。

在所公开的技术的一些示例中,一种装置包括基于块的处理器,基于块的处理器具有:指令调度器,其被配置为发出至少一个指令;以及一个或多个定制功能块,其被配置为接收针对该至少一个指令的一个或多个输入操作数,并且生成指示由相应功能块执行的特定计算的完成的指令完成信号。在一些示例中,该指令完成信号包括指示由该至少一个指令瞄准的至少一个指令的指令标识符。在一些示例中,该指令完成信号包括指示该至少一个指令的目标指令的指令标识符。在一些示例中,该调度器响应于接收到该指令完成信号而发出目标指令,该指令完成信号包括指示该目标指令的指令标识符。在一些示例中,该定制功能块利用动态可重新配置逻辑来实现。在一些示例中,该定制功能块仅仅在初始化处理器操作之前利用可重新配置逻辑来实现。在一些示例中,该定制功能块至少部分地被实现在定制逻辑中。

在一些示例中,该定制功能块能够在可变数量的时钟周期中完成它们相应的计算。在其他示例中,该定制功能块能够在固定数量的时钟周期中完成它们相应的计算。在一些示例中,该基于块的处理器被配置为乱序地发出指令,并且其中该基于块的处理器使用现场可编程门阵列(fpga)来实现。在一些示例中,该基于块的处理器包括至少两个功能单元,该至少两个功能单元包括该定制功能块,并且该基于块的处理器被配置为并发地将两个源操作数发出到至少两个功能单元中的每个功能单元,该两个源操作数中的每个源操作数利用相同的源操作数槽而被指定。在所公开的技术的一些示例中,指令调度器是动态可配置调度器。在其他示例中,指令调度器的功能在处理器运行时间之前被定义。

在所公开的技术的一些示例中,一种操作可配置逻辑器件以执行基于块的处理器指令集的方法包括:初始化指令块的执行,该指令块包含根据该基于块的处理器指令集而被编码的多个指令;以及执行该指令中的一个指令,所执行的指令指定对利用该可配置逻辑器件实现的定制功能块的使用。在一些示例中,该方法还包括将标识符发送到指令调度器,该标识符指示目标指令以接收由该定制功能块生成的结果。在一些示例中,该定制功能块包括该可配置逻辑器件的可编程逻辑器件,并且方法还包括将该可编程逻辑器件配置为实现该定制功能块。在一些示例中,该配置在该指令块的初始化执行之前发生。在一些示例中,可配置逻辑器件包括用以存储指令操作数的操作数缓冲器,并且该方法还包括:发出两个或更多个融合的指令的集合中的第一指令,第一指令指定对定制功能块的使用;以及发出两个或更多个融合的指令的集合中的第二指令,第二指令以允许旁路操作数缓冲器的序列被发出。

在一些示例中,方法还包括:延迟对两个或更多个融合的指令的集合中的、其依赖性已经被满足的第一指令的发出;确定该融合的指令的集合中的第二指令的依赖性已经被满足;以及发出延迟的第一指令,该第一指令当被执行时生成由该第二指令消耗的操作数。在一些示例中,方法包括:利用该基于块的处理器的通用执行单元来执行一个或多个指令块;基于由分析器生成的针对指令块的性能数据,将该定制功能块配置为执行功能;并且利用所配置的定制功能块来执行该指令块。

在方法的一些示例中,由定制功能块执行的功能至少部分地基于参数而被定义。在一些示例中,参数由执行指令的操作数定义。在一些示例中,参数通过执行与执行指令不同的指令来定义。

在所公开的技术的一些示例中,一种形成具有可配置逻辑器件的基于块的处理器的方法包括:产生配置比特流,该配置比特流包括用于利用该可配置逻辑器件来实现基于块的处理器的配置信息,该基于块的处理器包括:指令调度器,其被配置为发出指令;以及可定制功能单元,其被配置为执行由所发出的指令的至少部分指定的操作。在一些示例中,方法还包括:基于通过执行该指令而生成的分析器数据,动态地且部分地重新配置该可配置逻辑器件,以在利用该基于块的处理器执行时改进该指令的性能。

在所公开的技术的一些示例中,配置比特流由处理器作为执行指定对应的定制功能块的块的结果而按需加载。在一些示例中,针对定制功能块的动态生成的部分重新配置比特流可以驻存在主存储器中、或者由基于块的处理器可访问的另一存储器中、或者由基于块的处理器可访问的计算机可读存储设备或介质中。在一些示例中,计算机可读存储设备或介质经由计算机网络来访问。在一些示例中,存储器中的比特流的地址取决于编码块头520的字段的值,该块头520指定特定定制功能块由相关联的指令块使用。

在一些示例中,方法还包括将配置比特流存储在计算机可读存储设备或存储器中。在一些示例中,方法还包括将配置比特流施加到包括可配置逻辑器件的集成电路的配置端口,并且利用基于块的处理器来执行指令。

鉴于所公开的主题的原理可以应用的许多可能实施例,应当认识到所图示的实施例仅是优选的示例,并且不应该当作将权利要求的范围限于那些优选的示例。相反,要求保护的主题的范围由所附的权利要求进行限定。我们因此对我们的发明要求保护落在这些权利要求的范围内的全部内容。

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