验证基于块的处理器中的跳转目标的制作方法

文档序号:13950609阅读:119来源:国知局

背景技术
::微处理器已经从由于由摩尔定律预测的持续晶体管扩展而导致的晶体管计数、集成电路成本、制造资本、时钟频率和能量效率的持续增益中受益,其中相关联的处理器指令集架构(isa)几乎没有变化。然而,过去40年来推动半导体产业发展的光刻扩展带来的好处正在放缓甚至扭转。多年来,精简指令集计算(risc)架构一直是处理器设计的主要范例。无序超标量实现在面积或性能方面没有表现出持续改进。因此,在处理器isa方面有充分的机会来改善以扩展性能改善。技术实现要素:公开了用于在基于块的处理器指令集架构(bbisa)中验证为跳转指令计算的目标位置的方法、装置和计算机可读存储设备。所描述的用于提高处理器性能的解决方案的技术和工具可以分开实现,或者以各种组合的方式实现。如将在下面更充分地描述的,所描述的技术和工具可以在数字信号处理器、微处理器、专用集成电路(asic)、软处理器(例如,在使用可重配置逻辑的现场可编程门阵列(fpga)中实现的微处理器内核)、可编程逻辑或其他合适的逻辑电路中实现。本领域普通技术人员将容易明白,所公开的技术可以在各种计算平台中实现,包括但不限于服务器、大型机、蜂窝电话、智能电话、pda、手持式设备、手持式计算机、pda、触摸屏平板设备、平板计算机、可穿戴计算机和笔记本计算机。在所公开的技术的一些示例中,一种装置包括基于块的处理器,基于块的处理器包括:被配置为取回和执行指令块的一个或多个处理内核;以及被配置为至少部分基于接收指示从指令块之一接收到目标位置的跳转信号来验证目标位置是有效跳转目标的控制单元。在一些示例中,跳转信号包括目标位置的存储器地址或对存储器地址的引用。提供本“
发明内容”是为了以简化的形式介绍将在以下“具体实施方式”中进一步描述的概念的选择。本
发明内容部分不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。从下面参考附图进行的详细描述中,公开的主题的前述和其他目的、特征和优点将变得更加明显。附图说明图1示出了可以在所公开的技术的一些示例中使用的基于块的处理器内核。图2示出了可以在所公开的技术的一些示例中使用的基于块的处理器内核。图3示出了根据所公开的技术的某些示例的多个指令块。图4示出了可以在所公开技术的一些实例中使用的源代码和指令块的部分。图5示出了可以在所公开的技术的一些示例中使用的基于块的处理器头部和指令。图6示出了可以在所公开的技术的一些示例中使用的源代码和汇编代码的示例。图7示出了可以在所公开的技术的一些示例中使用的多个指令块。图8是可以在所公开技术的一些示例中使用的指令块的另一示例。图9是示出可以在所公开的技术的一些示例中使用的基于块的处理器和存储器的图。图10是示出可以在所公开的技术的一些示例中执行的验证目标位置的示例方法的流程图。图11是示出可以在所公开的技术的一些示例中执行的验证目标位置的示例方法的流程图。图12是示出用于实现所公开的技术的一些实施例的合适的计算环境的框图。具体实施方式i.一般考虑本公开在不旨在以任何方式进行限制的代表性实施例的上下文中阐述。如在本申请中使用的,除非上下文另有明确规定,否则单数形式“一(a)”、“一个(an)”和“该(the)”包括复数形式。另外,术语“包含(includes)”表示“包括(comprises)”。此外,术语“耦合(coupled)”涵盖将物品耦合或链接在一起的机械、电、磁、光学以及其他实际方式,并且不排除在耦合的项目之间存在中间元件。此外,如本文中使用的,术语“和/或”是指短语中的任何一个项目或项目的组合。本文中描述的系统、方法和装置不应当被解释为以任何方式进行限制。相反,本公开单独地以及以彼此的各种组合和子组合涉及各种公开的实施例的所有新颖的和非显而易见的特征和方面。所公开的系统、方法和装置不限于任何特定方面或特征或其组合,所公开的事物和方法也不要求存在任何一个或多个特定优点或解决问题。此外,所公开的实施例的任何特征或方面可以以彼此的各种组合和子组合来使用。尽管为了方便呈现而以特定的顺序次序描述了所公开的一些方法的操作,但是应当理解,除非下面阐述的特定语言需要特定的次序,否则这种描述方式包括重新排列。例如,顺序地描述的操作在一些情况下可以被重新排列或同时执行。而且,为了简单起见,附图可能并未示出所公开的事物和方法可以与其他事物和方法结合使用的各种方式。另外,本描述有时使用诸如“产生”、“生成”、“显示”、“接收”、“发出”、“验证”、“执行”和“发起”等术语来描述所公开的方法。这些术语是对所执行的实际操作的高级描述。对应于这些术语的实际操作将根据具体实现而变化,并且容易被本领域普通技术人员辨别。本文中参考本公开的装置或方法呈现的操作理论、科学原理或其他理论描述已经被提供用于更好理解的目的,并且不旨在限制范围。所附权利要求书中的装置和方法不限于以这种操作理论描述的方式起作用的那些装置和方法。所公开的方法中的任一个可以被实现为存储在一个或多个计算机可读介质(例如,计算机可读介质,诸如一个或多个光学介质盘、易失性存储器部件(诸如dram或sram)、或非易失性存储器部件(诸如硬盘驱动器))上并且在计算机(例如,任何市售计算机,包括智能电话或包括计算硬件的其他移动设备)上执行的计算机可执行指令。用于实现所公开的技术的任何计算机可执行指令、以及在实现所公开的实施例期间创建和使用的任何数据可以存储在一个或多个计算机可读介质(例如,计算机可读存储介质)上。计算机可执行指令可以是例如专用软件应用或者经由web浏览器或其他软件应用(诸如远程计算应用)访问或下载的软件应用的部分。例如,这样的软件可以在单个本地计算机上(例如,作为在任何合适的市售计算机上执行的代理)或者使用一个或多个网络计算机在网络环境(例如,经由因特网、广域网、局域网、客户端服务器网络(诸如云计算网络)或其他这样的网络)中执行。为了清楚起见,仅描述了基于软件的实现的某些选定方面。本领域公知的其他细节被省略。例如,应当理解,所公开的技术不限于任何特定的计算机语言或程序。例如,所公开的技术可以通过用c、c++、java或任何其他合适的编程语言编写的软件来实现。同样,所公开的技术不限于任何特定的计算机或硬件类型。合适的计算机和硬件的某些细节是众所周知的,并且不需要在本公开中详细阐述。此外,任何基于软件的实施例(例如,包括用于引起计算机执行任何所公开的方法的计算机可执行指令)可以通过合适的通信手段来上载、下载或远程访问。这样的合适的通信手段包括例如因特网、万维网、内联网、软件应用、电缆(包括光纤电缆)、磁通信、电磁通信(包括rf、微波和红外通信)、电子通信、或其他这样的通信手段。ii.所公开的技术的简介超标量无序微架构使用大量的电路资源来重命名寄存器,以数据流顺序调度指令,在错误推测之后进行清理,并且为了精确的异常而有序地回收(retire)结果。这包括昂贵的电路,诸如深度多端口的寄存器文件、用于数据流指令调度唤醒的多端口内容可访问存储器(cam)、以及很多宽总线多路复用器和旁路网络、所有这些都是资源密集型的。例如,多读多写ram的基于fpga的实现通常需要复制、多周期操作、时钟倍频、存储体交错、实时值表和其他昂贵的技术的混合。所公开的技术可以通过应用包括高指令级并行(ilp)、无序(ooo)、超标量执行在内的技术来实现性能增强,同时避免处理器硬件和相关联软件方面的实质复杂度和开销。在所公开的技术的一些示例中,基于块的处理器使用被设计用于面积和能量高效的高ilp执行的edgeisa。在一些示例中,使用edge架构和相关联的编译器消除(finesseaway)很多寄存器重命名、cam和复杂度。在所公开的技术的某些示例中,edgeisa可以消除对一个或多个复杂架构特征的需要,包括寄存器重命名、数据流分析、错误推测恢复和有序回收,同时支持主流编程语言,诸如c和c++。在所公开技术的某些示例中,基于块的处理器执行多个两个或更多个指令作为原子块。基于块的指令可以用于以更加明确的方式来表达程序数据流和/或指令流的语义,允许改善编译器和处理器性能。在所公开的技术的某些示例中,显式数据图执行指令集架构(edgeisa)包括关于可以用于改善对错误控制流指令的检测的程序控制流的信息,从而提高性能,节省存储器资源,和/或并且节约能量。在所公开的技术的一些示例中,在指令块内组织的指令被原子地取回、执行和提交。块内部的指令以数据流顺序执行,这减少或消除了使用寄存器重命名和提供功率高效的ooo执行。可以使用编译器以通过isa显式地编码数据依赖关系,从而减少或消除处理器内核控制逻辑在运行时重新发现依赖关系的负担。使用谓词执行,可以将块内跳转转换为数据流指令,并且除了存储器依赖关系之外的依赖关系可以被限制为直接数据依赖关系。所公开的目标形式编码技术允许块内的指令经由操作数缓冲器直接传送它们的操作数,减少了对耗电的多端口物理寄存器文件的访问。在指令块之间,指令可以使用存储器和寄存器进行通信。因此,通过利用混合数据流执行模型,edge架构仍然可以支持命令式编程语言和顺序存储器语义,但是理想地还享受具有近乎按顺序的功率效率和复杂度的无序执行的益处。如相关领域的普通技术人员将容易理解的,所公开的技术的一些实现可能具有各种面积和性能折衷。iii.示例性的基于块的处理器图1是可以在所公开技术的一些示例中实现的基于块的处理器100的框图10。处理器100被配置为根据描述处理器操作的多个方面的指令集架构(isa)来执行原子指令块,isa包括寄存器模型、由基于块的指令执行的多个定义的操作、存储器模型、中断和其他架构功能。基于块的处理器包括多个处理内核110,包括处理器内核111。如图1所示,处理器内核经由内核互连120彼此连接。内核互连120在内核110中的个体内核110、存储器接口140和输入/输出(i/o)接口145之间承载数据和控制信号。内核互连120可以使用电、光、磁或其他合适的通信技术传输和接收信号,并且可以取决于特定的期望配置提供根据多个不同拓扑结构布置的通信连接。例如,内核互连120可以具有交叉开关、总线、点对点总线或其他合适的拓扑结构。在一些示例中,内核110中的任何一个可以连接到任何其他内核,而在其他示例中,一些内核仅连接到其他内核的子集。例如,每个内核可以仅连接到最近的4、8或20个相邻内核。内核互连120可以用于传输输入/输出数据去往和来自内核,以及传输控制信号和其他信息信号去往和来自内核。例如,每个内核110可以接收和传输指示由相应内核当前正在执行的指令的执行状态的信号量。在一些示例中,内核互连120被实现为连接内核110和存储器系统的导线,而在其他示例中,内核互连可以包括用于在一个或多个互连导线上复用数据信号的电路、交换机和/或路由部件(包括有源信号驱动器和中继器)、或其他合适的电路。在所公开的技术的一些示例中,在处理器100内部和去往/来自处理器100传输的信号不限于全摆幅电数字信号,但是处理器可以被配置为包括用于传输数据和控制信号的差分信号、脉冲信号或其他合适的信号。在图1的示例中,处理器的存储器接口140包括用于连接到附加存储器的接口逻辑,例如位于除了处理器100之外的另一集成电路上的存储器。如图1所示,外部存储器系统150包括l2高速缓存152和主存储器155。在一些示例中,l2高速缓存可以使用静态ram(sram)来实现,并且主存储器155可以使用动态ram(dram)来实现。在一些示例中,存储器系统150被包括在与处理器100的其他部件相同的集成电路上。在一些示例中,存储器接口140包括允许在存储器中传送数据块而不使用一个或多个寄存器文件和/或处理器100的直接存储器访问(dma)控制器。在一些示例中,存储器接口管理虚拟存储器的分配,以扩展可用主存储器155。i/o接口145包括用于接收和向其他部件发送输入和输出信号的电路,诸如硬件中断、系统控制信号、外围接口、协处理器控制和/或数据信号(例如,用于图形处理单元、浮点协处理器、物理处理单元、数字信号处理器或其他协处理部件的信号)、时钟信号、信号量或其他合适的i/o信号。i/o信号可以是同步的或异步的。在一些示例中,全部或部分i/o接口使用存储器映射i/o技术结合存储器接口140来实现。基于块的处理器100还可以包括控制单元160。控制单元160监督处理器100的操作。可以由控制单元160执行的操作可以包括分配和解除分配内核用于执行指令处理,在任何内核、寄存器文件、存储器接口140和/或i/o接口145之间控制输入数据和输出数据,修改执行流程,以及验证跳转指令、指令头部和控制流程中的其他更改的一个或多个目标位置。控制单元160也可以处理硬件中断,并且控制特殊系统寄存器的读写,例如存储在一个或多个寄存器文件中的程序计数器。在所公开的技术的一些示例中,控制单元160至少部分使用一个或多个处理内核110来实现,而在其他示例中,控制单元160使用基于非基于块的处理内核(例如,耦合到存储器的通用risc处理内核)来实现。在一些示例中,控制单元160至少部分使用硬连线有限状态机、可编程微码、可编程门阵列或其他合适的控制电路中的一个或多个来实现。在替代示例中,控制单元功能可以由一个或多个内核110执行。在一些示例中,指令调度器206使用耦合到存储器的通用处理器来实现,存储器被配置为存储用于调度指令块的数据。在一些示例中,指令调度器206使用专用处理器或使用耦合到存储器的基于块的处理器内核来实现。在一些示例中,指令调度器206被实现为耦合到存储器的有限状态机。在一些示例中,在处理器(例如,通用处理器或基于块的处理器内核)上执行的操作系统生成可以至少部分用于利用指令调度器206来调度指令块的优先级、预测和其他数据。如相关领域的普通技术人员将容易明白的,以集成电路、可编程逻辑或其他合适的逻辑实现的其他电路结构可以用来实现用于指令调度器206的硬件。控制单元160包括用于向处理器内核110分配指令块的调度器。如本文中使用的,调度器分配是指引导指令块的操作,包括发起指令块映射、取回、解码、执行、提交、放弃、空闲和刷新指令块。处理器内核110在指令块映射期间被分配给指令块。所述的指令操作阶段是为了说明的目的,并且在所公开的技术的一些示例中,某些操作可以被组合、省略、分离成多个操作,或者添加附加的操作。调度器基于块的处理器100还包括时钟发生器170,其将一个或多个时钟信号分配给处理器内的各种部件(例如,内核110、互连120、存储器接口140和i/o接口145)。在所公开的技术的一些示例中,所有部件共享公共时钟,而在其他示例中,不同部件使用不同的时钟,例如具有不同时钟频率的时钟信号。在一些示例中,时钟的部分被门控以当一些处理器部件未被使用时允许功率节省。在一些示例中,时钟信号使用锁相环(pll)来生成以生成固定的、恒定的频率和占空比的信号。接收时钟信号的电路可以在单个边缘(例如,上升沿)被触发,而在其他示例中,至少一些接收电路被上升和下降时钟边缘触发。在一些示例中,时钟信号可以光学地或无线地传输。iv.示例性的基于块的处理器内核图2是进一步详细描述用于基于块的处理器100的示例微架构、以及具体地可以在所公开的技术的某些示例中使用的基于块的处理器内核之一的实例的框图200。为了便于解释,示例性的基于块的处理器内核被示出为具有五个阶段:指令取回(if)、解码(dc)、操作数取回、执行(ex)和存储器/数据访问(ls)。然而,相关领域的普通技术人员将容易理解,可以修改对所示出的微架构的修改(诸如添加/去除阶段、添加/去除执行操作的单元以及其他实现细节)以适应基于块的处理器的特定应用。如图2所示,处理器内核111包括控制单元205,其生成控制信号以调节内核操作并且使用指令调度器206调度内核内的指令流。可以由控制单元205和/或指令调度器206执行的操作可以包括分配和解除分配内核用于执行指令处理,在任何内核、寄存器文件、存储器接口140和/或i/o接口145之间控制输入数据和输出数据。控制单元205也可以处理硬件中断,并且控制特殊系统寄存器的读写,例如存储在一个或多个寄存器文件中的程序计数器。在所公开的技术的其他示例中,控制单元205和/或指令调度器206使用非基于块的处理内核(例如,耦合到存储器的通用risc处理内核)来实现。在一些示例中,控制单元205和/或指令调度器206至少部分使用硬连线有限状态机、可编程微码、可编程门阵列或其他合适的控制电路中的一个或多个来实现。示例性处理器内核111包括两个指令窗口210和211,每个指令窗口可以被配置为执行指令块。在所公开的技术的一些示例中,指令块是包括指令块头部和多个一个或多个指令的基于块的处理器指令的原子集合。如将在下面进一步讨论的,指令块头部包括可以用于进一步定义指令块内的多个指令中的一个或多个指令的语义的信息。取决于所使用的特定isa和处理器硬件,指令块头部也可以在指令的执行期间使用,并且用于通过例如允许指令和/或数据的提前取回、改进的跳转预测、推测执行、提高的能量效率和改进的代码紧凑性来提高指令块的执行性能。在其他示例中,不同数目的指令窗口是可能的,诸如一个、四个、八个或其他数目的指令窗口。指令窗口210和211中的每个可以从连接到互连总线和指令高速缓存227的输入端口220、221和222中的一个或多个接收指令和数据,互连总线和指令高速缓存227又连接到指令解码器228和229。附加的控制信号也可以在附加的输入端口225上被接收。指令解码器228和229中的每个解码指令块的指令头部和/或指令,并且将已解码指令存储在位于每个相应的指令窗口210和211中的存储器储存库215和216内。处理器内核111还包括耦合到l1(一级)高速缓存器235的寄存器文件230。寄存器文件230存储用于在基于块的处理器架构中定义的寄存器的数据,并且可以具有一个或多个读取端口和一个或多个写入端口。例如,寄存器文件可以包括用于将数据存储在寄存器文件中的两个或更多个写入端口,以及具有用于从寄存器文件内的个体寄存器读取数据的多个读取端口。在一些示例中,单个指令窗口(例如,指令窗口210)一次只能访问寄存器文件的一个端口,而在其他示例中,指令窗口210可以访问一个读取端口和一个写入端口,或者可以同时访问两个或多个读取端口和/或写入端口。在一些示例中,寄存器文件230可以包括64个寄存器,每个寄存器保存32位数据的字。(除非另有说明,否则本申请将32位数据称为字)。在一些示例中,寄存器文件230内的一些寄存器可以被分配给特殊目的。例如,一些寄存器可以专用为系统寄存器,其示例包括存储常数值(例如,全零字)的寄存器、指示正在执行的程序线程的当前地址的一个或多个程序计数器(pc)、物理内核号码、逻辑内核号码、内核分配拓扑、内核控制标志、处理器拓扑或其他合适的专用目的。在一些示例中,一个或每个程序计数器存在多个程序计数器寄存器,以允许跨一个或多个处理器内核和/或处理器并行执行多个执行线程。在一些示例中,程序计数器被实现为指定的存储器位置而不是寄存器文件中的寄存器。在一些示例中,系统寄存器的使用可能受操作系统或其他监督计算机指令的限制。在一些示例中,寄存器文件230被实现为触发器阵列,而在其他示例中,寄存器文件可以使用锁存器、sram或其他形式的存储器存储装置来实现。用于给定处理器(例如,处理器100)的isa规范规定如何定义和使用寄存器文件230内的寄存器。在一些示例中,处理器100包括由多个处理器内核共享的全局寄存器文件。在一些示例中,取决于处理器isa和配置,与处理器内核相关联的个体寄存器文件可以被静态地或动态地组合以形成更大的文件。如图2所示,指令窗口210的存储器储存库215包括多个已解码指令241、左操作数(lop)缓冲器242、右操作数(rop)缓冲器243以及指令记分板245。在所公开的技术的一些示例中,指令块的每个指令被分解成一行已解码指令、左和右操作数以及记分板数据,如图2所示。已解码指令241可以包括作为比特级控制信号存储的指令的部分或完全解码版本。操作数缓冲器242和243存储操作数(例如,从寄存器文件230接收的寄存器值、从存储器接收的数据、在指令内编码的立即操作数、由较早发出的指令计算的操作数或其他操作数值),直到它们相应的已解码指令已经准备好执行。指令操作数从操作数缓冲器242和243而不是寄存器文件中读取。第二指令窗口211的存储器储存库216存储与存储器储存库215相似的指令信息(已解码指令、操作数和记分板),但是为了简单起见而在图2中未示出。根据isa的限制并且根据控制单元205的指示,指令块可以由第二指令窗口211相对于第一指令窗口同时或顺序地执行。在所公开的技术的一些示例中,前端流水线阶段if和dc可以从后端流水线阶段(is、ex、ls)解耦。控制单元可以每个时钟周期取回两个指令并且将其解码到指令窗口210和211中的每个中。控制单元205提供指令窗口数据流调度逻辑,以监测每个已解码指令的输入的就绪状态(例如,使用计分板245的每个相应指令的一个或多个谓词和一个或多个操作数)。当特定已解码指令的所有输入就绪时,指令准备好发出。控制逻辑205然后每个周期发起一个或多个下一指令(例如,编号最小的就绪指令)的执行,并且其已解码指令和输入操作数被发送到一个或多个功能单元260引用执行,已解码指令也可以编码多个就绪事件,控制逻辑205中的调度器接受这些和/或来自其他来源的事件,并且更新窗口中的其他指令的就绪状态。因此,执行继续,从处理器内核111准备好的零输入指令、零输入指令所针对的指令等开始。已解码指令241不需要以它们被布置在指令窗口210的存储器储存库215内的相同顺序执行。而是,指令记分板245被用于跟踪已解码指令的依赖关系,并且当依赖关系已经满足时,相关联的个体已解码指令被调度用于执行。例如,当相应指令的依赖关系已经满足时,可以将对相应指令的引用推送到就绪队列上,并且指令可以从就绪队列中以先进先出(fifo)的顺序来调度。存储在记分板245中的信息可以包括但不限于相关联的指令的执行谓词(诸如,如果谓词位是真或者假,指令是否正在等待谓词位被计算以及指令是否执行)、操作数对指令的可用性、或在执行相关联的个体指令之前所需要的其他先决条件。存储在每个指令窗口中的指令的数目通常对应于指令块内的指令的数目。在一些示例中,指令块内的指令的数目可以是32、64、128、1024或另外数目的指令。在所公开的技术的一些示例中,指令块跨处理器内核的多个指令窗口被分配。指令可以使用位于处理器内核111内的控制单元205来分配和调度。控制单元205协调从存储器取回指令、解码指令、一旦指令被加载到相应的指令窗口中就执行指令、数据流入/流出处理器内核111、以及由处理器内核输入和输出的控制信号。例如,控制单元250可以包括用于在调度指令时使用的就绪队列,如上所述。存储在位于每个相应的指令窗口210和211中的存储器储存库215和216中的指令可以原子地执行。因此,对被执行的指令影响的可见架构状态(诸如寄存器文件230和存储器)的更新可以在内核200内本地缓冲直到指令被提交。控制单元205可以确定何时指令准备好提交,对提交逻辑进行排序,并且发出提交信号。例如,指令块的提交阶段可以在缓存所有寄存器写入被缓冲、到存储器的所有写入被缓冲和跳转目标被计算时开始。指令块可以在对可见架构状态的更新完成时提交。例如,当寄存器写入作为寄存器文件被写入、储存库被发送到加载/存储单元或存储器控制器、和提交信号被生成时,可以提交指令块。控制单元205还至少部分控制功能单元260到相应指令窗口中的每个的分配。如图2所示,具有多个执行流水线寄存器255的第一路由器250用于将来自指令窗口210和211中的任一个的数据发送到一个或多个功能单元260,功能单元260可以包括但不限于整数alu(算术逻辑单元)(例如,整数alu264和265)、浮点单元(例如,浮点alu267)、移位/旋转逻辑(例如,桶形(barrel)移位器268)或其他合适的执行单元,其可以包括图形功能、物理功能和其他数学运算。然后,取决于正在执行的特定指令的要求,来自功能单元260的数据可以通过第二路由器270路由到输出290、291和292,路由回到操作数缓冲器(例如,lop缓冲器242和/或rop缓冲器243),或者反馈到另一功能单元。第二路由器270包括可以用于发出存储器指令的加载/存储队列275、将正在从内核输入或输出的数据存储到存储器的数据高速缓存277、以及加载/存储流水线寄存器278。内核还包括用于指示例如一个或多个指令窗口215或216的所有指令的执行何时完成的控制输出295。当指令块的执行完成时,指令块被指定为“已提交”,并且来自控制输出295的信号又可以由基于块的处理器100内的其他内核和/或由控制单元160使用以发起其他指令块的调度、取回和执行。第一路由器250和第二路由器270都可以将数据发送回指令(例如,作为指令块内的其他指令的操作数)。如相关领域的普通技术人员将容易理解的,个体内核200内的部件不限于图2中所示出的那些,而是可以根据特定应用的要求而变化。例如,取决于基于块的处理器的特定目标应用,内核可以具有更少或更多的指令窗口,单个指令解码器可以被两个或更多个指令窗口共享,并且所使用的功能单元的数目和类型可以变化。在选择资源和向资源分配指令内核时适用的其他考虑包括性能要求、能量使用要求、集成电路晶片、工艺技术和/或成本。相关领域的普通技术人员将容易明白,通过在处理器内核110的指令窗口(例如,指令窗口210)和控制逻辑205内的资源的设计和分配,可以在处理器性能方面做出权衡。面积、时钟周期、能力和限制实质上决定了个体内核110的所实现的性能和基于块的处理器110的吞吐量。指令调度器206可以具有不同的功能。在某些更高性能的示例中,指令调度器是高度并发的。例如,每个周期,一个或多个解码器将指令的已解码就绪状态和已解码指令写入到一个或多个指令窗口中,选择要发出的下一指令,并且作为响应,后端发送就绪事件:针对特定指令的输入槽(谓词,左操作数、右操作数等)的就绪事件、或针对所有指令的广播就绪事件。每指令就绪状态位与已解码就绪状态一起可以用于确定指令已经准备好发出。在一些情况下,调度器206接受还没有被解码的目标指令的事件,并且还必须禁止重发已经发出的就绪指令。在一些示例中,指令可以是非谓词的,或者是谓词的(基于真或假条件)。直到谓词的指令被另一指令的谓词结果作为目标并且该结果与谓词条件相匹配时,谓词的指令才变为就绪。如果相关联的谓词不匹配,则指令永远不会发出。在一些示例中,可以推测性地发出和执行谓词的指令。在一些示例中,处理器可以随后检查推测性地发出和执行的指令被正确地推测。在一些示例中,可以重新执行错误推测的发出的指令和消耗其输出的块中指令的特定传递闭包,或者取消错误推测的副作用。在一些示例中,发现错误推测的指令导致整个指令块的完整的回滚和重新执行。在跳转到新的指令块时,一个或多个相应的指令窗口就绪状态被清除(块复位)。但是,当指令块跳转回自己(块刷新)时,只有活动的就绪状态被清除。因此可以保留指令块的已解码就绪状态,从而不需要重新取回和解码块的指令。因此,可以使用块刷新来节省循环中的时间和能量。v.指令块的示例流现在转到图3的图300,示出了包括多个可变长度指令块311-314的基于块的指令流的部分310。指令流可以用于实现用户应用、系统服务或任何其他合适的用途。在图3所示的示例中,每个指令块以指令头部开始,然后是不同数目的指令。例如,指令块311包括头部320和20个指令321。所示出的特定指令头部320包括部分地控制指令块内的指令的执行并且还允许改进性能增强技术(包括例如跳转预测、推测执行、懒惰评估和/或其他技术)的多个数据字段。指令头部320还包括指示头部是指令头部而不是指令的id位。指令头部320还包括指令块大小的指示。指令块大小可以在比1更大的指令分块(chunk)中,例如指令块内包含的4个指令分块。换言之,块的大小被移位4位,以便压缩被分配给规定指令块大小的头部空间。因此,大小值0指示最小尺寸的指令块,该指令块是随后是四个指令的块头部。在一些示例中,指令块大小被表示为字节数、字数、n字分块的数目、地址、地址偏移,或者使用用于描述指令块大小的其他合适的表达式来表示。在一些示例中,指令块大小由指令块头部和/或底部中的终止位模式指示。指令块头部320还可以包括指示特殊指令执行要求的执行标志。例如,取决于特定的应用,对于某些指令块可以禁止跳转预测或存储器依赖关系预测。在所公开的技术的一些示例中,指令头部320包括指示已编码数据是指令头部的一个或多个标识位。例如,在一些基于块的处理器isa中,最低有效位空间中的单个id位总是被设置为二进制值1以指示有效指令块的开始。在其他示例中,不同的位编码可以用于一个或多个标识位。在一些示例中,指令头部320包括指示相关联的指令块被编码的isa的特定版本的信息。块指令头部还可以包括用于例如跳转预测、控制流确定和/或不良跳跃检测的多个块出口类型。出口类型可以指示跳转指令的类型,例如:顺序跳转指令,其指向存储器中的下一连续指令块;偏移指令,其在相对于偏移计算的存储器地址处跳转到另一指令块;子例程调用或子例程返回。通过编码指令头部中的跳转出口类型,跳转预测器可以在相同指令块内的跳转指令已经被取回和/或解码之前至少部分开始操作。指令块头部320还包括标识被分配给存储操作的加载存储队列标识符的存储掩码。指令块头部还可以包括写入掩码,写入掩码标识相关联的指令块将写入哪个或哪些全局寄存器。在指令块可以完成之前,相关联的寄存器文件必须接收对每个条目的写入。在一些示例中,基于块的处理器架构不仅可以包括标量指令,而且还可以包括单指令多数据(simd)指令,其允许在单个指令内用更大数目的数据操作数进行操作。vi.示例块指令目标编码图4是描绘c语言源代码的两个部分410和415及其相应的指令块420和425的示例的图400,示出了基于块的指令如何可以明确地编码其目标。在该示例中,前两个read(读取)指令430和431分别指向add(相加)指令432的右(t[2r])和左(t[2l])操作数。在所示出的isa中,读取指令是从全局寄存器文件(例如,寄存器文件160)读取的唯一指令;但是任何指令都可以指向全局寄存器文件。当add指令432接收到两个寄存器读取的结果时,它将变为就绪并且执行。当tlei(测试少于或等于立即(test-less-than-equal-immediate))指令433从add接收到其单个输入操作数时,它将变为就绪并且执行。测试接着产生在信道1(b[1p])上向在广播信道上监听的所有指令(其在本例中为两个谓词跳转指令(bro_t434和bro_f435))广播的谓词操作数。接收到匹配谓词的跳转将被触发。还示出了指令块420的依赖关系图440,作为指令节点的数组450及其对应的操作数目标455和456。这示出了块指令420、对应的指令窗口条目和由指令表示的底层数据流图之间的对应关系。这里已解码指令read430和read431已经准备好发出,因为它们没有输入依赖关系。当它们发出并且执行时,从寄存器r6和r7中读取的值被写入到add432的右和左操作数缓冲器中,以将add432的左和右操作数标记为“就绪”。结果,add432指令变为就绪,发出给alu,执行,并且总和被写入tlei433的左操作数。vii.示例性的基于块的指令格式图5是示出指令头部510、通用指令520和跳转指令530的指令格式的一般化示例的图。指令头部或指令中的每个根据位的数目来标记。例如,指令头部510包括4个32位字并且从其最低有效位(1sb)(位0)直到其最高有效位(msb)(位127)被标记。如图所示,指令头部包括写入掩码字段、存储掩码字段、多个出口类型字段、多个执行标志字段、指令块大小字段和指令头部id位(指令头部的最低有效位)。出口类型字段包括可以用于指示在指令块内编码的控制流指令的类型的数据。例如,出口类型字段可以指示指令块包括以下中的一个或多个:顺序跳转指令、偏移跳转指令、间接跳转指令、调用指令和/或返回指令。在一些示例中,跳转指令可以是用于在包括相对和/或绝对地址的指令块之间传送控制流并且使用条件或无条件谓词的任何控制流指令。除了确定隐式控制流指令之外,出口类型字段还可以用于跳转预测和推测执行。在一些示例中,可以在出口类型字段中编码多达六种出口类型,并且可以通过例如检查指令块中的控制流指令来确定字段与对应的显式或隐式控制流指令之间的对应关系。所示出的通用块指令520被存储为一个32位字并且包括操作码字段、谓词字段、广播id字段(bid)、第一目标字段(t1)和第二目标字段(t2)。对于消费者多于目标字段的指令,编译器可以使用移动指令构建扇出树,也可以将高扇出指令分配给广播。广播支持通过轻量级网络将操作数发送到内核中的任意数目的消费者指令。广播标识符可以在通用块指令520中被编码。虽然由通用指令520概述的通用指令格式可以表示由基于块的处理器处理的一些或全部指令,但是本领域技术人员将容易理解,即使对于isa的特定示例,一个或多个指令字段可能偏离特定指令的通用格式。操作码字段规定由指令520执行的一个或多个操作,诸如存储器读取/写入、寄存器加载/存储、加、减、乘、除、移位、旋转、系统操作或其他合适的指令。谓词字段规定指令执行的条件。例如,谓词字段可以规定值“真”,并且只有在对应的条件标志匹配规定的谓词值的情况下才执行指令。在一些示例中,谓词字段至少部分规定哪个用于比较谓词,而在其他示例中,执行基于由先前指令设置的标志(例如,指令块中的先前指令)。在一些示例中,谓词字段可以规定指令总是或永远不会被执行。因此,通过减少跳转指令的数目,使用谓词字段可以实现更密集的目标代码、提高的能量效率和改进的处理器性能。目标字段t1和t2规定基于块的指令的结果被发送到的指令。例如,指令槽5处的add指令可以规定其计算结果将被发送到槽3和10处的指令。取决于特定指令和isa,所示出的目标字段中的一个或两个可以被其他信息替代,例如,第一目标字段t1可以被立即操作数、附加的操作码、指定的两个目标等来代替。跳转指令530包括操作码字段、谓词字段、广播id字段(bid)和偏移字段。操作码和谓词字段的格式和功能与关于通用指令描述的相似。偏移可以以四个指令的组为单位来表示,从而扩展了可以执行跳转的存储器地址范围。通用指令520和跳转指令530所示出的谓词可以用于避免指令块内的附加跳转。例如,特定指令的执行可以基于先前指令的结果(例如,两个操作数的比较)。如果谓词为假,则指令将不提交由特定指令计算的值。如果谓词值与所需要的谓词不匹配,则指令不会发出。例如,如果bro_f(谓词的错误)指令发送错误的谓词值,则其就会发出。应当容易理解,如本文中使用的,术语“跳转指令”不限于将程序执行改变为相对存储器位置,而是还包括跳转到绝对或符号存储器位置、子例程调用和返回、以及可以修改执行流程的其他指令。在一些示例中,执行流程通过改变系统寄存器(例如,程序计数器pc或指令指针)的值来修改,而在其他示例中,执行流程可以通过修改存储在存储器中的指定位置处的值来改变。在一些示例中,跳转寄存器跳转指令用于跳转到存储在寄存器中的存储器位置。在一些示例中,子例程调用和返回分别使用跳转和链接以及跳转寄存器指令来实现。viii.与基于块的处理器一起使用的示例源代码、汇编代码和对象代码图6示出了可以由基于块的处理器编译和执行的多个指令块的程序代码的示例。示出了c语言源代码610的一小部分。c代码610包括多个符号,包括a、z和jump_table、if/else语句、for循环以及通过jump_table的调用。c代码610可以由用于基于块的处理器的合适的编译器来编译,该编译器产生包括所示出的中间代码620的部分的中间代码作为第一遍。应当注意,c代码610包括编程错误,因为针对i的for测试循环小于或等于num_func,这将导致jump_table数组的未分配部分被访问和调用。中间代码620的所示出的部分包括多个标签:l0、l1、l2和l3,每个标签对应于指令块的开始。中间代码620还包括多个中间指令,其中操作数仍然被映射到存在于c代码610中的符号名称(例如,a、z和jump_table)。中间值被分配给临时操作数(例如,t1、t2、t3等),当生成最终汇编代码630时这些临时操作数将被重新分配给指令目标。中间代码620还包括将在最终汇编代码630中被分配广播值的多个谓词p1和p2。编译器生成最终汇编代码630,该汇编代码又将被用于生成用于执行的机器代码(目标代码)。如图所示,最终汇编代码630具有被映射到每个指令块(0,1,2,3,...)内的槽的指令,并且还具有到全局寄存器的源代码符号。此外,临时操作数和谓词已经分别映射到指令目标和广播谓词。因此,最终汇编代码630处于被映射到基于块的处理器的机器代码指令的状态。图7描绘了已经从图6的最终汇编代码630生成并且存储在存储器中的多个指令块710-713。还示出了偏移为2的jump_table数组所指向的另一指令块715。图7所示的机器代码仅用于说明目的,而并非包括将在完整编译的目标代码集中出现的所有机器代码。图7中的目标代码被示出为从存储器位置0x00100000开始存储作为多个32位字。从右到左,头部的第一字包括单个id位(位[0],值为1)、5位大小字段(位[5:1],值为00001)(其指示指令块的大小)、8个字(用于存储7个指令)和2个出口类型字段(位[16:14],值为010;以及位[19:17],值为010)(这两个字段是这个指令块内的两个跳转指令的偏移出口类型)。这些示例的机器代码值是二进制格式。因此,通过为原子指令块提供指令块头部,可以通过基于块的处理器(例如,推测性执行和/或跳转预测)来实现某些性能改进。图7所示的指令块头部包括存储掩码和写入掩码,这也允许在特定指令块之间进一步预取、高速缓存和存储结果。存储掩码和写入掩码也可以由控制逻辑使用以确定何时可以提交指令块,即确定特定指令块内的某些指令的执行可以并且实际上应当完成,并且结果被提交给存储器和/或寄存器文件。如图7所示,跳转指令的目标位置可以表示为从指令块的开始的偏移。在指令块710中,例如,br_t跳转指令的目标位置是到标记l1的离开第一跳转指令的头部的正的三个4字块的偏移。br_f跳转指令的目标位置是到标签l2的正的五个4字的指令分块的偏移。表达与指令块的开始处的跳转偏移通常会更高效,但是在一些示例中,偏移可以表示为例如与存储器中的特定跳转指令位置的偏移、以及与这些br_t和br_f指令的存储器位置0x100009或0x10000a的偏移。仅示出了跳转偏移的最低有效位,但是跳转偏移通常是例如21位的有符号整数,这允许直接跳转到超过32百万个地址位置。在其他示例中,取决于特定的isa,跳转偏移字段可以更短或更长。取决于指令块的大小、指令块内的任何跳转指令的出口类型、指令块内的存储器储存库和/或由指令块写入的任何寄存器,其他三个指令块711-713和715具有不同的头部。头部信息的概要在以下表1中总结:表1在所公开的技术的一些示例中,基于块的处理器也可以支持所计算的跳转指令目标位置。如图所示,当i等于2时,执行指令块713内的call指令720。存储在jump_table[2](0x00120000)处的存储器地址被发送到call指令右操作数(t[5r]),并且程序执行通过例如更新程序计数器(pc)被转移到指令块715。因此,跳转指令的目标位置不限于偏移,而是可以包括在运行时动态计算的存储器地址。处理器内核控制单元(例如,控制单元205)和/或处理器内核控制单元(例如,控制单元16)可以被配置为使用本文中公开的任何技术来验证目标位置是有效的跳转目标。在目标位置被确定为有效的情况下,控制单元更新程序计数器(pc)并且执行进行到下一指令块。如果目标位置被确定为无效,则引发异常并且发起错误处理,如下面进一步讨论的。图8是来自图7的相同汇编代码的机器代码的指令块810-813的示例,但是其包括可以使用本文中公开的方法和装置来检测的两个错误。如图8所示,跳转指令820之一具有不在指令块的开始处的目标位置。跳转指令820具有+2的偏移,其将解析为地址0x00010,该地址是指令块中的第一指令而不是指令块的指令头部。这样的错误可能是由于例如编译器错误、通信错误、篡改、或存储跳转指令的存储介质的损坏引起的。执行从第一指令开始的指令块、或将存储在该位置处的数据解释为指令头部可能导致错误、不可预知的操作或其他硬件故障。还在图8中示出,call指令830将引用无效存储器位置jump_table[4]。通过解引用jump_table[4]计算的存储器地址将导致执行从另一指令块815内的第十六(0x0f)指令开始。这个错误是由于c语言源代码610不正确地规定用于将表大小与循环索引x相比较的小于或等于操作而引起的。因此,存储在jump_table[4]处的值可以是未定义的,或者指向指令块开始处的无效存储器位置。因此,应当避免这样的不正确的跳转指令,或者引发异常,使得操作系统或其他异常处理程序可以采取正确的动作。例如,控制单元205可以被配置为通过以下操作来验证目标位置是有效跳转目标:检查存储在目标位置处的一个或多个id位匹配基于块的处理器的架构规范(例如,存储在目标位置的第一字节处的一个或多个id位匹配规定的位模式),该检查如下实现:通过验证存储在目标位置处的指令块头部符合指令块头部的规范(例如,头部的所有字段符合指令头部的isa规范),和/或通过验证目标位置在用于存储指令块的有效存储器地址处(例如,落在4字节存储器地址边界)。在一些示例中,控制单元205可以结合对应指令块内的一个或多个指令的各方面来验证指令头部的各方面(例如,写入掩码和存储掩码位对应于块中的指令中的有效字段)。ix.示例性的基于块的处理器和存储器配置图9是示出了包括基于块的处理器910的装置的图900,基于块的处理器910包括被配置为取回和执行指令块的一个或多个处理器内核930-937、和被配置为当从指令块之一接收到指示目标位置的跳转信号时验证跳转指令目标位置是否是有效跳转目标位置的控制单元920。所示出的基于块的处理器910具有多达八个内核,但是在其他示例中,可以具有64、512、1024或其他数目的基于块的处理器内核。基于块的处理器910耦合到包括多个指令块950-955的存储器940。在所公开的技术的一些示例中,除了或者代替使用指令块头部来指示在指令块950-954的开始处的有效目标位置,指令块地址表960可以被存储在存储器中,或者在运行时动态构建,以指示用于指令块的开始的合法地址。如本文中使用的,术语跳转指令不限于相对跳转,除非另有说明。例如,跳转指令包括:相对于偏移值的跳转、到存储器地址的绝对跳转(跳跃)、子例程调用、子例程返回、或在基于块的处理器内改变指令执行流程的其他合适形式。在一些示例中,指令或指令块的当前地址被存储在程序计数器中,该程序计数器可以是寄存器文件内的专用寄存器或存储器中的指定存储器位置。可以使用多个技术来验证目标位置是有效跳转目标。例如,控制单元可以被配置为通过检查存储在目标位置处的一个或多个位支持基于块的处理器的架构规范来验证目标位置是有效的。例如,在使用指令头部的实施例中,目标位置处的一个或多个位被设置为规定模式以指示目标位置是有效的。其他示例是可能的。例如,按照惯例,可以规定每个指令块以便以特定指令开始,例如从系统堆栈读取数据,清除或检查处理器标志,或其他合适的操作。在一些示例中,处理器内核或处理器的控制单元被配置为通过验证指令块头部被存储在目标位置来验证目标位置。在一些示例中,控制单元通过验证存储在目标位置处的指令块头部符合指令块头部的规范来验证目标位置。在一些示例中,控制单元被配置为验证目标位置在用于存储指令块的有效存储器地址处。例如,有效存储器地址可以在架构中以模4划分,该架构仅支持每四个存储器地址开始的指令块。在一些示例中,跳转信号通过由处理内核之一执行条件跳转指令来生成,并且目标位置由相对于条件跳转指令的存储器位置偏移来指示,或者相对于开始跳转指令所在的指令块的指令头部的存储器位置偏移来指示。在一些示例中,基于块的处理器被实现为定制集成电路、专用集成电路、现场可编程门阵列和/或片上系统模块。在所公开的技术的某些示例中,基于块的处理器也可以由通用处理器来模拟。在所公开的技术的一些示例中,可以通过从第一块开始枚举块来得出一组有效块地址,在每个块上,将一个块的大小加上该块的开始,以确定下一块的开始。在一些示例中,数组、散列表、布隆过滤器或其他搜索结构可以包含每个有效块的地址,并且可以通过在搜索结构中找不到跳转目标来推测到无效块的跳转。在一些示例中,跳转目标地址上的函数可以确定跳转目标是否为有效目标。例如,通过选择具有偶校验的块地址,到具有奇校验的地址的跳转不能成为有效的块。在一些示例中,跳转目标地址的一些属性存在于块头部中,并用于确定到无效地址的跳转。例如,跳转目标地址的奇偶校验可以被添加到块头部。x.验证跳转指令目标位置的示例方法图10是概述验证跳转指令的目标位置有效的示例性方法的流程图1000。在过程框1010处,发起指令块内的跳转指令的执行。例如,当谓词指示跳转指令应当执行,并且它的操作数数据可用时,可以发起跳转指令的执行。当已经计算出目标位置时,该方法前进到过程框1020以验证跳转指令目标位置。在过程框1020,验证目标位置以确定目标位置是否有效。例如,处理器内核中的逻辑可以基于例如与跳转指令相关联的操作数的值来确定在过程框1010处计算的跳转指令目标位置是否有效。在一些示例中,通过isa规范,指令头部的第一位被指定为总是1。在其他示例中,可以使用多于一个位或不同的位值(0、10、010等)。在一些示例中,目标位置至少部分通过验证以某个量为模的目标位置存储器地址为0来验证。例如,在32位字对齐架构中,检查存储器地址以确定它可以被4整除。在一些示例中,可以验证与目标位置相关联的指令头部和/或指令以确定它们确实是有效的指令。例如,位和特定字段的某些配置可以是非法的或保留的,并且在这些情况下,如果目标位置未被验证,则引发异常。如果目标位置被验证为有效,则可以允许在目标位置处取回和执行指令块。可以使用图10的示例性方法检测和验证的条件包括检测不是分块对齐的指令块,指令和/或指令块的非法编码,到寄存器位置的不良跳转,到偏移的不良跳转,到下一顺序指令块的不良跳转,或包括安全漏洞或缓冲器溢出在内的其他条件。xi.验证跳转指令目标位置的示例方法图11是概述检查跳转指令的有效目标位置的示例性方法的流程图1100,如可以在本技术的某些示例中执行的。在一些示例中,流程图1100中概述的方法可以至少部分使用用于控制基于块的处理器的执行流程的控制单元(例如,处理器控制单元160和/或处理器内核控制单元205)来执行。在过程框1110处,处理器发起规定指令块内的目标位置的跳转指令的执行。例如,跳转指令可以是相对跳转、绝对跳转、子例程调用或子例程返回、或者改变指令块的指令流顺序的其他指令。跳转指令的发起包括计算跳转指令的目标位置,例如作为存储器地址。在计算目标位置之后,该方法前进到过程框1120。在过程框1120,该方法验证跳转指令目标位置在有效存储器位置处开始。例如,根据基于块的架构的特定指令集架构,有效存储器位置可能需要被4、8、16或另一存储器对齐整除。在一些示例中,指令块可以仅存储在某个有限范围的存储器位置处。在一些示例中,指令块可以仅位于被指定为只读的存储器部分中,以防止执行数据或不可信代码。在一些示例中,取决于处理器是处于用户还是保护模式,指令块仅在位于存储器的指定部分时才被执行。在一些示例中,对于跳转指令的目标位置的其他限制可以由于各种其他原因而由指令集架构施加。如果跳转指令目标位置被确定为有效存储器位置,则该方法前进到过程框1130,否则该方法前进到过程框1160。在过程框1130,该方法检查目标位置处或者替代地距目标位置的位置偏移处的一个或多个标识(id)位和指令头部。例如,一些指令集架构可以具有这样的约定,即在目标位置的地址之前或之后,目标位置被偏移4、8或者一些其他数目的字。不管目标位置偏移如何,该方法检查存储在对应目标位置的存储器中的id位的存在。例如,在一些架构中,按照约定,指令头部在指令头部的第一字的最低有效位处存储1。如本领域技术人员将容易理解的,用于id位的其他约定是可能的,并且可以有多于一个位用于指定指令头部。如果该方法确定id位有效,则该方法前进到过程框1140,否则该方法前进到过程框1160。在过程框1140处,该方法检查存储在目标位置(或者距该位置的固定偏移)处的指令块头部符合基于块的处理器指令集架构规范。例如,取决于架构规范,指令块头部的字段的某些其他要求可以被施加,并且进而被检查以验证目标位置确实指向有效块头部。如果该方法确定块头部有效,则该方法前进到过程框1150。否则该方法前进到过程框1160。在段1150,该方法发起由跳转指令目标位置规定的下一指令块的执行。在一些示例中,目标位置可以不是在跳转指令内实际规定的,而是可以通过约定(例如,存储器中下一4字节分块的存储器位置)来规定。在一些示例中,如果指令块最后缺少跳转指令,则按照约定,处理器继续执行存储器中的下一指令块。在段1160,该方法发起跳转指令异常处理。例如,跳转指令异常处理可以包括但不限于:生成中断,将执行转移到监督过程,将执行转移到操作系统,将执行转移到跳转异常处理程序例程,发起当前程序计数器位置处的存储器内容的内核转储(dump),使用指示存在跳转指令异常的图形用户界面来发起信号或显示信息,或其他合适的异常处理技术。xii.示例性计算环境图12示出了其中可以实现所描述的实施例、技术和工艺(包括基于块的处理器中的不良跳转检测)的合适的计算环境1200的一般化示例。例如,计算环境1200可以实现本文中描述的用于验证跳转指令目标位置的所公开的技术。计算环境1200不意图对本技术的使用范围或功能提出任何限制,因为技术可以在不同的通用或专用计算环境中实现。例如,所公开的技术可以用其他计算机系统配置来实现,包括手持设备、多处理器系统、可编程消费电子产品、网络pc、小型计算机、大型计算机等。所公开的技术也可以在其中任务由通过通信网络链接的远程处理设备执行的分布式计算环境中实践。在分布式计算环境中,程序模块(包括用于基于块的指令块的可执行指令)可以位于本地和远程存储器存储设备中。参考图12,计算环境1200包括至少一个基于块的处理单元1210和存储器1220。在图12中,这个最基本的配置1230被包括在虚线内。基于块的处理单元1210执行计算机可执行指令并且可以是真实或虚拟处理器。在多处理系统中,多个处理单元执行计算机可执行指令以增加处理能力,并且因此多个处理器可以同时运行。存储器1220可以是易失性存储器(例如,寄存器、高速缓存、ram)、非易失性存储器(例如,rom、eeprom、闪存等)或这两者的某种组合。存储器1220存储例如可以实现本文中描述的技术的软件1280、图像和视频。计算环境可以具有附加功能。例如,计算环境1200包括存储装置1240、一个或多个输入设备1250、一个或多个输出设备1260以及一个或多个通信连接1270。诸如总线、控制器或网络等互连机构(未示出)互连计算环境1200的部件。通常,操作系统软件(未示出)为在计算环境1200中执行的其他软件提供操作环境,并且协调计算环境1200的部件的活动。存储装置1240可以是可移除的或不可移除的,并且包括可以用于存储信息并且可以在计算环境1200内被访问的磁盘、磁带或磁带盒、cd-rom、cd-rw、dvd或任何其他介质。存储装置1240存储用于软件1280的指令、插件数据和消息,其可以用于实现本文中描述的技术。一个或多个输入设备1250可以是向计算环境1200提供输入的触摸输入设备,诸如键盘、小键盘、鼠标、触摸屏显示器、笔或轨迹球、语音输入设备、扫描设备或另一设备。对于音频,一个或多个输入设备1250可以是接受模拟或数字形式的音频输入的声卡或类似设备、或者将音频样本提供给计算环境1200的cd-rom读取器。一个或多个输出设备1260可以是显示器、打印机、扬声器、cd刻录机或提供来自计算环境1200的输出的另一设备。一个或多个通信连接1270使得能够通过通信介质(例如,连接网络)与另一计算实体通信。通信介质在调制数据信号中传送诸如计算机可执行指令、压缩图形信息、视频或其他数据等信息。一个或多个通信连接1270不限于有线连接(例如,兆位或千兆位以太网、无限带宽技术、电气或光纤连接的光纤信道),而且还包括无线技术(例如,通过蓝牙的rf连接、wifi(ieee802.11a/b/n)、wimax、蜂窝、卫星、激光、红外)和用于为所公开的代理、网桥和代理数据消费者提供网络连接的其他合适的通信连接。在虚拟主机环境中,一个或多个通信连接可以是由虚拟主机提供的虚拟化网络连接。所公开的方法的一些实施例可以使用在计算云1290中实现所公开的技术的全部或部分的计算机可执行指令来执行。例如,所公开的编译器和/或基于块的处理器服务器位于计算环境1230中,或者所公开的编译器可以在位于计算云1290中的服务器上执行。在一些示例中,所公开的编译器在传统的中央处理单元(例如,risc或cisc处理器)上执行。计算机可读介质是可以在计算环境1200内被访问的任何可用介质。作为示例而非限制,在计算环境1200中,计算机可读介质包括存储器1220和/或存储装置1240。如应当容易理解的,术语计算机可读存储介质包括用于数据存储的介质,诸如存储器1220和存储装置1240,而不是诸如调制数据信号等传输介质。xiii.所公开的技术的附加示例根据上面讨论的示例,本文中讨论了所公开的主题的附加示例。在所公开的技术的一些示例中,一种控制单元被配置为通过检查存储在目标位置处的一个或多个位符合用于基于块的处理器的架构规范来验证目标位置。在一些示例中,控制单元被配置为通过验证指令块头部被存储在目标位置处来验证目标位置。在一些示例中,控制单元被配置为通过验证存储在目标位置处的指令块头部符合用于指令块头部的规范来验证目标位置。在一些示例中,控制单元被配置为验证目标位置在用于存储指令块的有效存储器地址处。在所公开的技术的一些示例中,一种装置,包括基于块的处理器,基于块的处理器包括被配置为取回和执行指令块的一个或多个处理内核;以及控制单元,控制单元被配置为至少部分基于接收指示从指令块之一接收到目标位置的跳转信号来验证目标位置是有效跳转目标。在一些示例中,跳转信号包括目标位置的存储器地址。在所公开的技术的一些示例中,一种在基于块的处理器中检测无效跳转指令的方法,其包括:发起指令块内的跳转指令的执行,跳转指令规定要从其取回下一指令块用于由基于块的处理器执行的目标位置,并且通过比较指定指令块的数据以确定目标位置是否有效来验证目标位置。在一些示例中,隐式地指定跳转(例如,基于指令块头部的一个或多个位)。在一些示例中,跳转指令不显式地规定目标位置(例如,返回或调用指令)。在所公开的技术的一些示例中,存储用于基于块的处理器的计算机可执行指令的一个或多个非暂态计算机可读存储介质包括一个或多个指令块,每个指令块包括指令块头部,指令块头部包括标识符(id)字段,id字段包括将指令块头部中的相应的每个标识为合法的跳转目标位置的一个或多个id位。在所公开的技术的一些示例中,编译器发出包括指令块头部和在基于块的处理器上可执行的多个两个或更多个指令的指令块。在所公开技术的某些示例中,一种装置包括具有被配置为取回和执行指令块的一个或多个处理内核的基于块的处理器。该装置还包括被配置为至少部分基于接收到指示从指令块之一接收到目标位置的跳转信号来验证目标位置是有效跳转目标的控制单元。在该装置的一些示例中,跳转信号包括目标位置的存储器地址。在一些示例中,控制单元还被配置为通过检查存储在目标位置处的一个或多个位匹配用于基于块的处理器的架构规范来验证目标位置。在一些示例中,控制单元还被配置为通过验证指令块头部被存储在目标位置处来验证目标位置。在一些示例中,控制单元被配置为通过验证存储在目标位置处的指令块头部符合用于指令块头部的规范来验证目标位置。在一些示例中,控制单元还被配置为验证目标位置处于用于存储指令块的有效存储器地址处。在一些示例中,跳转信号通过由处理内核之一执行条件跳转指令来生成,并且目标位置由相对于条件跳转指令的存储器位置来指示。在一些示例中,基于块的处理器被实现为现场可编程门阵列、专用集成电路和/或集成电路。在一些示例中,控制单元通过验证目标位置处的第一位是一(1)来验证目标位置。在所公开技术的一些示例中,一种在基于块的处理器中检测无效跳转指令的方法,其包括:发起指令块内的跳转指令的执行,跳转指令规定要从其取回下一指令块用于由基于块的处理器执行的目标位置,并且通过比较指定指令块的数据以确定目标位置是否有效来验证目标位置。在检测无效跳转指令的方法的一些示例中,验证包括检查在目标位置处或在距目标位置的固定偏移处的位模式。在一些示例中,验证包括检查存储在目标位置处或距目标位置的固定偏移处的头部符合用于基于块的处理器的指令集规范。在一些示例中,指定指令块的数据被存储为指令块内的指令块头部。在一些示例中,指定指令块的数据被存储在包括多个有效指令块地址的表中。在一些示例中,该方法还包括:如果目标位置被确定为有效,则发起下一指令块的执行。在一些示例中,该方法还包括:如果目标位置被确定为无效,则执行用于处理跳转地址异常的指令。在所公开技术的一些示例中,一种或多种存储用于基于块的处理器的计算机可执行指令的计算机可读存储介质,计算机可执行指令包括一个或多个指令块,每个指令块包括指令块头部,指令块头部包括标识符(id)字段,id字段包括将相应的每个指令块头部标识为合法的跳转目标位置的一个或多个id位。在一些示例中,指令块包括两个或更多个指令,每个指令包括在对应位置的位作为将相应指令标识为不合法的跳转目标位置的指令头部id字段。在一些示例中,id字段是指令块头部的第一字的最低有效位,并且其中第一字的最低有效位是一(1)。在一些示例中,一个或多个计算机可读存储介质存储用于基于块的处理器的计算机可执行指令,计算机可执行指令在被执行时引起处理器执行本文中公开的任何方法。鉴于可以应用所公开的主题的原理的很多可能的实施例,应当认识到,所说明的实施例仅是优选示例,并且不应当被视为将权利要求的范围限制为那些优选示例。而是,所要求保护的主题的范围由以下权利要求限定。因此要求保护在这些权利要求的范围内的所有发明。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1