首页> 中国专利> 一种微内核阵列的实现方法

一种微内核阵列的实现方法

摘要

在计算机技术中,处理器硬件与软件之间并非泾渭分明。事实上,无论是处理器硬件还是软件,它们都必须完成两项基本任务,才能达成用户的需求。这两项任务便是:“进程处理”和“算术处理”。在计算机技术领域,存在有关于RISC和CISC的区分,事实上在于“进程处理”是计算机技术的必要条件,否则并不需要CISC。所以,可以换一个思路,即在处理器内部同时存在RISC和CISC的功能,它们之间互为寄生,但并不相互拖累。本发明技术方案所实现的便是在CISC的硬件框架内实现RISC的微系统架构,并将这种微系统矩阵化,以达到超算的需求,以兼顾通用处理器与专用处理器的功能。

著录项

  • 公开/公告号CN112463723A

    专利类型发明专利

  • 公开/公告日2021-03-09

    原文格式PDF

  • 申请/专利权人 王志平;

    申请/专利号CN202011494721.4

  • 发明设计人 王志平;

    申请日2020-12-17

  • 分类号G06F15/82(20060101);G06F15/80(20060101);

  • 代理机构

  • 代理人

  • 地址 310000 浙江省杭州市西湖区文三路199号18室

  • 入库时间 2023-06-19 10:08:35

说明书

技术领域

本发明涉及集成电路及计算机领域,尤其指一种微内核阵列的实现方法。

背景技术

在现有背景技术条件下,现有处理器技术中,比较难准确划分出“进程处理”这一概念,尽管现有处理器技术具有很鲜明的RISC和CISC两大阵营的处理器架构。但是,理论上很容易划分出或定义出“算术处理”这一概念,如果可以很清楚地认识到处理器技术中事实上仅包含“进程处理”和“算术处理”这两项概念,那么“进程处理”就是除“算术处理”以外的所有处理器技术的范畴。

当然,事实上现有背景技术中的两大处理器架构的阵营中从来就没有很清楚地意识到自己为什么是自己(RISC并不清楚自己是RISC,而CISC也并不清楚自己是CISC),仅仅是市场根据它们的指令集的繁易程度给予了这样的划分(所有,整个现有背景技术条件下的处理器技术更多的是先有产品后有理论基础,这已严重地阻碍了处理器技术的发展)。并不否认这样划分的正确性,因为这是客观存在的。但是,如果并不清楚如何会形成这样的划分,处理器技术的发展必然遭遇瓶颈(事实上无论是RISC或者CISC技术,都已经处于技术发展的瓶颈,而毫无发展的后劲)。

在现有背景技术中,正是“进程处理”推高了对于用户需求的实现的难度,从而造就了面向更多的系统级的需求,需要更复杂的指令集。事实上,如果并不是由于更多系统级的需求,RISC是更优选的方案。但是,向低端市场发展的技术,其底端是很明显的,换句话说RISC存在优化的空间,而且是日益缩小的优化空间,但实际上不存在“发展”的空间。然而,系统级的需求事实上是日益增长的,也就是说被迫成为CISC的处理器技术向上发展的空间事实上非常巨大。“进程处理”对于实现用户需求在处理器技术中,所占据的比重事实上在增加。但是,在现有背景技术条件下,“算术处理”与“进程处理”不能很好地融合,或者说不能很好地协调,很大程度上增加了“进程处理”的难度和限制了“进程处理”技术可以发挥的空间,即在基于超长流水线才能实现的CISC架构中,流水线的硬件大部分功能必须用于“进程处理”,而用于“算术处理”的硬件很难做到更广域范围的扩展,且在“算术处理”中存在的小范围的指令跳转及迭代循环,严重地制约了“进程处理”在流水线硬件中实现的实际效率。

所以,在现有背景技术条件下,出现各种用于解决“算术处理”的专用内核,如GPU、NPU等其它定义的内核。但是,显而易见,以不同类型专用内核所构建起的处理器结构,只能达到逻辑上的合理性,而不能达到物理上的合理性,存在以下几个较大且固有的缺点:

1、专用内核所能适用的计算应用场景为特定应用场景,并不能达到通用性的应用需求。比如GPU、NPU这一类的专用处理器,对于存储算法应用、数据库检索算法应用,诸如此类的应用场景将不能发挥其该有的功效。在一个通用应用场景中,集成了类似GPU和NPU这样的专用内核的处理器,在大多数时候,其专用内核资源都处于休眠状态。排除功耗的影响之外,这种结构的处理器,其成本所能转为使用价值的比例较低。所以,处理器市场上一个很明显的现象就是处理器厂商必须依赖于不停地出新才能维持市场份额。否则,很快就会被对手超越,处理器产品版本更新的频率往往与大型软件更新的频率相同,甚至超过软件版本的更新频率。事实上,处理器产品并没有或者说没有主要在以性能作为竞争要点,而更像是在比谁家处理器内的硅资源更便宜;

2、基于专用内核的处理器结构,将本属于进程内部处理的“算术处理”由于物理实现上的原因而上升至系统级的处理任务,这导致了在完成所需求的“算术处理”将大幅增加系统总线的带宽,整个系统在硬件实现上需要为此付出巨大的成本代价以提高系统总线的数据交换吞吐量和实时带宽。另外一方面,由于“算术处理”任务扩散至系统级,整个系统的时钟频率以及系统总线控制器都将因为本属于进程内部处理的“算术处理”而处于高功耗状态;

3、当属于进程内部的处理事务扩散到系统级,所有关于进程的安全问题都将被扩散。所以,基于专用内核的处理器结构将给整个系统的安全问题带来巨大的负担;

4、基于专用内核的处理器结构,对于软件本身而言,使用专用内核完成“算术处理”因不具有完全通用性,因此无法做到动态的程序框架,其对于软件的拓展性而言非常差(这将决定现有背景技术条件下的,以专用内核所构建的处理器可能永远无法进入真正意义上的AI)。

所以,对于处理器技术或者说计算机技术而言,需要一种在RISC与CISC之间做到“尺用所长,寸用所短”的技术,在内核技术与应用需求之间做到无缝匹配。

发明内容

真实世界的绝大部分逻辑运算及纯算术运算所涉及的信息,事实上都集中在一个有限的,或者说相对有限的范围之内。反应到程序中,对于应用而言,绝大部分的“算术处理”所涉及的输入及输出变量、以及中间变量都集中在一个十分有限的内存空间内。这也是RISC为什么能够具有一定的市场空间,或者说RISC能够更多地依赖于编程寄存器和简化的指令来实现软件所需实现的功能。在程序实际运行的过程中,“算术处理”通常包含纯算术运算、逻辑运算、以及循环的迭代运算,这些“算术处理”需要的是能够快速读取并写入的存储方式,以及适合快速完成条件跳转的简短流水线结构。

但是,不管是RISC还是CISC都无法避免的另外一个弊端是,在它们的指令集架构中,对于它们所需的操作数的初始化,以及对于编程寄存器的初始化都只能依赖于单个指令来完成。然而,在实际应用中,变量的实际位宽往往较短(比如单字节、双字节、字、以及双字等数据类型),这将极大地设置了内核在执行“算术处理”的过程中,读取或写入缓存的速度和效率。因此,CISC没有完全走向不断扩大编程寄存器的路是有客观原因的,因为相对而言,增加更多的编程寄存器并不能带来整个CISC指令集架构的实际执行效率的提升(事实上,这也是GPU和NPU的具有生存空间的原因)。

为了区别于现有的RISC及CISC指令集架构,本文将本发明技术方案所归属的指令集架构命名为“超级复杂指令集”,简写为CISC-H,即CISC Hyper的缩写。顾名思义,CISC-H具有更复杂的指令集,但并不表示拥有RISC及CISC的更多的缺点,而是将RISC和CISC的优点都集中到CISC-H中(自然就既不存在RISC的缺点,也不存在CISC的缺点)。

为了更容易阐明本发明技术方案的内容,本文将叙述更多的内容,其中存在并不属于本发明技术方案的原理及方法。如上述CISC-H,本发明技术方案为CISC-H所定义范围的一部分,或者说标志性的部分,但是并不代表本发明技术方案是CISC-H的全部部分。

为了深入浅出地阐述本发明技术方案的原理,以及关于CISC-H的标志性技术特点,此处首先介绍本发明技术方案所涉及的概念之一,该概念被命名为“有限编程单元”,简称为FPU,即Finite Programming Unit的缩写。FPU是一种微系统的定义,具有RISC特性的编程单元,或者说具有部分RISC指令执行功能的软硬件微架构。FPU中的“有限”特性体现在,任何一个FPU都只能具有有限的指令地址空间,以及只能具有有限的数据地址空间,不具备多级缓存的复杂电路结构。FPU中的“有限”特性还体现在,任何一个FPU不能拥有与外界实现指令交互或数据交互的“系统总线”端口,任何一个FPU不能拥有中断接口及中断服务功能。FPU中的“有限”特性还体现在,任何一个FPU不具有时效性编程功能,不具备实现实时编程的能力,不具备多线程或者多任务的能力。因此,从功能定义上看,FPU实现的是一个函数的功能,但每个FPU拥有独立的用于程序功能实现的“指令空间”和“数据空间”。每个FPU都拥有一定位宽的多个默认为输入,同时也可以被相关指令指定为输出的操作数,这些操作数在FPU运行过程中,对于FPU内的执行指令而言同时也是编程寄存器,后文将该“编程寄存器”或“操作数”简称为FOR,即FPU Operation Register的缩写。FPU拥有完全独立于其它电路结构(FPU之外的,内核的流水线电路结构)的指令集架构,用于完成“算术处理”的所有功能,但并不涉及“算术处理”以外的“进程处理”功能。所以,FPU具有更为简洁的流水线结构和适合更高速读写缓存的理论基础。

显而易见,FPU拥有可以完成“算术处理”、更加精简、完全独立的指令集架构。但是,FPU并不具备处理器或者处理器内核的能力。事实上,FPU是CISC-H中的一个内嵌对象,从物理的电路实现上看,FPU是CISC-H流水线(超长流水线)中被嵌入的一部分相对独立的模块。因此,从软件的角度看,或者说从指令集的角度看,FPU是CISC-H相关指令的操作对象(但并非操作数)。实施上,在CISC-H中的流水线硬件中可以不再需要ALU(ArithmeticLogical Unit)这样的功能模块,取而代之的便是FPU。在CISC-H指令集中,“操作数”并不是构成“算术处理”相关完整指令的必要条件,该必要条件是“操作对象”,即为FPU。所以,相较于RISC和CISC,CISC-H指令集架构在汇编语言级别便已属于“面向对象的编程”,后文将该汇编级的“面向对象的编程”称之为“面向对象的汇编”,简写为“OOA”,即Object OrientedAssembly的缩写。

严格意义上讲,CISC-H并不完全是全新的概念,某种程度可以简单地认为CISC-H是将RISC进行了再一次精简,然后重新封装为FPU的对象,并以FPU取代CISC中的ALU,从而构成了CISC-H的雏形。这一雏形当中,FPU便是CISC-H的标志性部分,同时也是OOA的标志性的部分,同时也是本发明技术方案的标志性部分。

单丝不成线,孤木不成林。如果在CISC-H中的FPU仅仅是一个,那么事实上CISC-H在关于“算术处理”上并不能得到相较于CISC关于“算术处理”有较大的功能提升,或者说CISC-H不能具有GPU、NPU等类似专用内核的功能。作为具有“对象”特性的FPU,虽然其本质特性是硬件的物理实现,但也必须具备“例化”的特性,即有软件中关于“类”例化为“对象”的类似特性。因此,在CISC-H指令集架构中,内核中的FPU并非只有一个,而是相对于OOA而言,具有足够数量的FPU。在本发明技术方案中,对于一个内核,根据内核规格的需求,所有FPU资源是一个具有一定数量的FPU的阵列,在这个阵列中的每一个FPU具有唯一性的索引号,即表示某一具体FPU的唯一性标识。任意一个FPU并不固定属于CISC-H指令集架构下所实现的内核中的任意一条流水线(后文将CISC-H指令集架构下所实现的内核流水线简称为“CISC-H流水线”),因此FPU对于CISC-H流水线而言(在CISC-H指令集架构下的单个内核,可以拥有多条CISC-H流水线)属于公共资源,任意一条CISC-H流水线对于FPU资源的使用均为动态分配及动态释放。在本发明技术方案中,软件并不需要关心FPU阵列中拥有FPU的具体数量,而只需要使用相关CISC-H指令申明需要使用FPU资源。在FPU资源耗尽的情况下,CISC-H流水线会自动处于阻塞状态,等待FPU资源被释放(对于软件而言,从逻辑上看,FPU资源的数量在任何情况下都满足软件的需求)。

FPU阵列与内核中的每一条CISC-H流水线都具有与之对应的一个“对象入口”和一个“对象出口”。后文将“对象入口”简写为OWI,即Object Way In的缩写,将“对象出口”简写为OWO,即Object Way Out的缩写。对于任意一条CISC-H流水线而言,在获得FPU资源的前提下,程序指令在经历CISC-H流水线的前端部分(后文将“CISC-H流水线前端部分”简称为“PFE”,即Pipeline Front End的缩写)之后,与“算术处理”相关的指令及相关数据通过OWI进入相应FPU(后文将进入FPU内部的相关指令简称为“FEC”,即FPU Execution Code的缩写,将进入FPU内部的相关数据简称为“FED”,即FPU Execution Data的缩写),与“算术处理”不相关的指令绕过FPU阵列直接进入CISC-H流水线的后端部分(后文将“CISC-H流水线后端部分”简称为“PBE”,即Pipeline Back End的缩写)。当某一FPU在FEC执行过程中产生输出时,其输出结果会通过OWO进入PBE,当某一FPU在FEC执行完毕后,其默认输出结果会通过OWO进入PBE。后文将FEC执行过程中所产生的输出简称为“IOO”,即IntermediateOutputting of Object的缩写,将FEC执行完毕后的默认输出简称为“FOO”,即FinalOutputting of Object。

PFE完成程序在CISC-H流水线中执行的“指令预取”、“指令解码”、“间接寻址”、“直接寻址”、“线程控制”、“二叉树分支控制”、“动态链接安全控制”、“指令上下文相关性检测及控制”,等在CISC-H流水线中属于“进程处理”的任务。程序指令经历PFE后进入FPU,完成“算术处理”,随后回到CISC-H流水线的PBE,完成程序指令的输出结果的输出(在“进程处理”中存在部分直接对于缓存的操作或对于系统总线操作的指令并非属于“算术处理”范畴,这些程序指令会直接绕过FPU阵列从PFE进入PBE)。FPU可以在运行过程中产生输出,并及时将IOO传递给PBE,也可以在FPU完成FEC的执行之后产生默认输出,将FOO传递给PBE。IOO与FOO在本文中被明显区分,其原因在于FOO是由CISC-H专用指令所申明的FPU的输出,FOO会直接与FPU的“操作数”的地址关联,换句话说FOO的输出目标地址为“进程处理”所隶属程序范畴,因此FOO的输出目标将作为“进程处理”中的“指令上下文相关性检测及控制”的参考因素,即FOO的输出目标是否已进入PBE将直接决定是否阻塞PFE中的相关指令。而IOO为封装在FPU中的输出,即程序确认IOO不具备对于在PFE中的相关指令具有逻辑上的上下文相关性(或者说其相关性不应阻塞PFE中相关指令的执行),这也进一步体现了FPU作为OOA标志性部分的封装特性。

如前文所述,每个FPU都具有独立的“输入/输出端口”,这些“输入/输出端口”同时也是FPU的编程寄存器。在FPU被初始化的初始阶段,所有这些“输入/输出端口”均被用作为“输入”端口,通过PFE从内核的“数据耦合缓存”中向FPU输入FEC和FED(所谓“数据耦合缓存”是指与内核流水线存在直接的、物理连接的、用于存储程序数据的内核缓存)。当完成FPU的初始化之后,程序可以通过CISC-H指令将“输入/输出端口”设置为“输出端口”,即为该“输出端口”关联上输出到“数据耦合缓存”的目标地址,该“输出端口”所输出的内容即为FOO。在FPU运行的过程中,“输出端口”依然可以被FPU当作编程寄存器所使用,即在FPU的指令集中对于所有“输入/输出端口”(以及编程寄存器)均分配了固定的标识符(或者说地址),被设置为“输出端口”所关联的目标地址并不会因FPU对“输出端口”被当作为编程寄存器使用而发生变化。FPU在运行过程中所产生IOO,其输出的目标地址也是“数据耦合缓存”的地址,不过与FOO不同的是IOO的目标地址是由FPU内的FEC所决定的,即对于“进程处理而言”,IOO的目标地址是透明的(因此,CISC-H流水线硬件并不将IOO作为流水线对于“指令上下文相关性检测及控制”的参考因素)。

显而易见,FPU在被初始化的过程中,即PFE向FPU输入FEC和FED的过程中,并不是以单个指令或者单个变量位单位向FPU独立拥有的“指令空间”即“数据空间”写入,而是以高速、高带宽,连续地向FPU的“指令空间”和“数据空间”写入内容。所以,对于软件而言,在软件被编译的过程中,编译器可以对某一段代码或者说某一函数,以FPU指令集进行编译,并形成代码及相关数据,在具体程序运行过程中通过单个或多个CISC-H指令将相关指令及相关数据在较短的时间内高效地传输至FPU阵列中的相应FPU“指令空间”及“数据空间”(即完成对相应FPU的初始化)。后文将包含有FEC实质内容、FED实质内容(即FEC及FED已被初始化)、以及被设置了FOO的FPU称之为“OOA对象”。从逻辑上看,上述完成对于FPU初始化的相关CISC-H指令(汇编指令)便已实现了将某一类别的功能及数据结构封装后,在具体的硬件中例化并执行其功能,得到所需的数据输出,即实现了OOA,实现了“OOA对象”的例化过程。

当FPU被完成初始化后,PFE会令FPU开始独立运行,直到FPU内的FEC被全部执行完毕,将FOO传输至PBE,FPU会进入空闲状态,由FPU阵列相关硬件控制器回收FPU资源。在FPU独立运行的过程中,如果其FOO对于PFE的后续指令并不存在指令上下文相关性,那么PFE会不受FPU具体执行状态的影响而继续后续的指令(初始化其它的FPU,或者执行其它的非“算术处理”的CISC-H指令)。

综上所述,基于FPU阵列所实现的OOA,从程序执行效率上看,本发明技术方案将从以下3个方面以颠覆性变化超越现有背景技术:

1、实现程序功能的代码及相关数据从“数据耦合缓存”及“指令耦合缓存”到流水线的传输效率将获得较大倍数的超越(所谓“指令耦合缓存”是指与内核流水线存在直接的、物理连接的、用于存储程序代码的内核缓存)。现有背景技术对于代码从“指令耦合缓存”到流水线的实际平均传输效率基于单个指令为单位,即每个时钟节拍传输一个指令,即便在实现上扩大“指令耦合缓存”与流水线之间的数据位宽,也不能对代码从“指令耦合缓存”到流水线的实际传输效率产生任何改变(虽然在现有背景技术条件下的高端处理器存在支持所谓“多发”的流水线电路结构,但是“多发”条件属于概率范畴,即“多发”并不是保证能够发生,而大多数情况,在小范围内的“算术处理”的代码段内,指令上下文相关性存在的概率非常大,即“多发”的概率很小)。本发明技术方案对于代码从“指令耦合缓存”到流水线的传输效率则基于FPU所拥有的独立“代码空间”的大小和“指令耦合缓存”与流水线之间的数据位宽,即硬件实现资源的多少与代码传输效率成正比,且这种传输效率是固定的,而并非属于概率范畴;

2、对于单一进程或者单一线程而言,程序并发特性的执行效率将获得较大倍数的超越。当FPU被完成初始化后,PFE会令FPU开始独立运行。在FPU独立运行的过程中,如果其FOO相对于PFE的后续指令并不存在指令上下文相关性,那么PFE会不受FPU具体执行状态的影响而继续后续的指令,即初始化其它的FPU。所以,在程序运行的过程中,对于一个进程或者线程而言,在FPU阵列中同时存在多个FPU在为该进程或线程服务,即实现程序的并发运行。由于FPU阵列中的FPU资源属于动态管理,因此不需要更多FPU资源的CISC-H流水线不会被分配多余的FPU资源,而需要更多FPU资源的CISC-H流水线可以获得更多的FPU资源。FPU在执行完既定任务后,最终需要回到其所属CISC-H流水线的PBE。这些在FPU阵列中同步运行的FPU依据“先完成先输出”的原则(后文将“先完成先输出”简写为FDFO,即First DoneFirst Out的缩写),以最大可能性地确保FPU资源被循环使用的效率;

3、由于FPU指令集可以为专注于“算术处理”的通用RISC指令集,所以FPU阵列将完全兼容或替代诸如GPU、NPU这样的专用处理器的功能,实现XPU兼并众多精于运算的处理器的功能。但是,基于FPU阵列的处理器并不需要将属于进程(或者线程)内部的处理任务上升到系统层面,即不存在通过系统总线完成数据交互及相关控制。因此基于FPU阵列的大规模集群运算并不需要如同现有背景技术方案中,如同采用专用处理器,而增加大量的系统总线访问流量(以及为此而增加的硬件实现成本)。从硬件实现的角度看,基于FPU阵列,可以精确到每个FPU而控制整个处理器的功耗,即处于空闲状态的FPU即可以处于低功耗状态,这将比现有背景技术的多个专用处理器方案,大幅度节省处理器功耗。此外,OOA的实现将让软件对于某种复杂而庞大的运算需求的实现将变得更为简便,且效率将大幅提高。此外,虽然FPU指令集相对于CISC-H具有独立性,但FPU指令集客观上依然属于CISC-H指令集架构中的内嵌子集。从系统上看,基于FPU阵列的CISC-H指令集架构并不会如同背景技术的多个专用处理器方案将关于程序的安全问题从程序内部扩散到系统级,从而带来更多关于数据安全处理的负荷,以及潜在的数据安全问题。

CISC-H是一个相对庞大的指令集架构,FPU阵列是该CISC-H指令集架构下流水线中的核心组成部分,CISC-H指令集中关于FPU阵列使用的指令也是CISC-H指令集中的重要组成部分。本发明技术方案所涉及的范围为FPU阵列的结构,以及该结构在CISC-H流水线中的位置,以及CISC-H指令集中关于FPU阵列使用的相关指令。如上述内容所述,为关于CISC-H的部分原理以及关于FPU阵列的基本原理和基本结构。后文将就本发明技术方案所涉及的相关CISC-H指令以及FPU阵列的结构做更为详尽的阐述。

实现本发明技术方案,即实现使用FPU阵列的相关CISC-H指令包括:

1、“ICO标签”指令,该指令以字符“ICOTAG”作为指令符,但不限制仅以“ICOTAG”作为指令符。ICO表示“指令上下文顺序”,即Instruction Context Order的缩写。ICOTAG指令用于实现本发明技术方案中关于FDFO实现的理论完整性。CISC-H流水线中的PFE所涉及的“指令上下文相关性检测及控制”完成的是指令相关输入操作数内容与FPU阵列中或PBE中的指令相关输出之间的相关性检测及控制,即确保指令所读取的数据在流水线中或者不存在修改、或者已完成修改。但是,“指令上下文相关性检测及控制”并不对流水线中的指令输出的顺序进行控制,即FPU阵列中所有FPU的FOO进入PBE的顺序并不受PFE或者PBE控制。而当FPU阵列实行FDFO的输出策略后意味着FPU阵列中所有FPU的FOO进入PBE的顺序是随机的。在实际软件应用中,存在同一线程内某一输出地址被先后多次写入,这种逻辑上的“写入竞争”在实际软件应用中是合理的,因此必须确保它们之间的输出顺序。ICOTAG指令所实现的功能便是确保“写入竞争”的输出顺序不会因为FDFO而被打乱,即编译器可以在两个具有“写入竞争”关系的指令或指令块之间插入一个ICOTAG指令,那么FPU阵列在实行FDFO输出策略的时候就可以依据ICOTAG指令所提供的信息控制具有“写入竞争”关系的指令间的顺序。因此,FDFO的输出策略必须具有ICOTAG指令确保其可实现的理论完成性。

2、“FPU设置”指令,该指令以字符“SETFPU”作为指令符,但不限制仅以“SETFPU”作为指令符。本发明技术方案中,FPU阵列中的所有FPU并不需要被要求完全相同,即可以具有不同规格的FPU(或者不同精简指令集的FPU),这些不同规格FPU可以被分类,即每一类别的FPU具有一个相同的FPU“类别号”。由于FPU本身即为“微架构”,所以在FPU中运行FEC具有循环的程序功能,为了防止某一单个FEC循环错误不至于影响到系统的整体运行,FPU阵列中的所有FPU在运行过程中均可以被约束“最长运行时间”。超出“最长运行时间”,FPU会被强制退出,并释放相应FPU资源。同时,“最长运行时间”也可以被设置为不约束运行时间,即将“最长运行时间”设置为0(或者其它固定值)。SETFPU指令的功能即为完成设定FPU的“最长运行时间”和设定FPU的“类别号”,且SETFPU必须在FPU开始运行前被执行。FPU阵列中的每一个FPU都具有唯一的“索引号”,该“索引号”与“类别号”并无关联,仅为对于FPU的唯一识别符号。但是,在SETFPU指令参数中并不需要指定FPU的“索引号”,即软件并不需要考虑FPU资源的分配及回收。SETFPU指令包含以下必要参数:

参数1、“FPU最长运行时间”,即FPU在运行过程中被约束的最长运行时间,当该参数被设定0(或其它固定值,本发明技术方案并不限定该固定值只能为0,在具体的硬件实现中可以为其它的固定值)表示FPU的最长运行时间不受限制;

参数2、“FPU类别号”,指定SETFPU指令之后的其它非SETFPU指令所需要使用的FPU的类型。

3、“静态导入FEC”指令,该指令以字符“SFEC”作为指令符,但不限制仅以“SFEC”作为指令符。SFEC指令中的“静态”的含义是指所导入的FEC来自程序代码,即来自“指令耦合缓存”,亦即FEC的具体内容包含在指令参数当中(静态参数)。所以,流水线的PFE读取了SFEC指令也就读取了该指令所指向的FEC的内容。需要强调的是,一个FPU的全部FEC可以通过一个或多个SFEC指令,或者通过SFEC指令与DFEC指令(后文将阐述的指令)共同完成导入FEC的所有具体内容。但是,每次使用SFEC指令或者DFEC指令都不需要指定目标FPU的FEC缓存的基地址。因为,FPU的FEC缓存的默认基地址为0,在向FPU导入FEC内容的整个过程中,流水线硬件会记录相关指令写入FEC缓存的地址,每个向FPU导入FEC内容的指令都会延续流水线硬件所记录的这一地址,继续完成当前指令导入FEC的任务。SFEC指令包含以下必要参数:

参数1、“长度”,该“长度”是指当前SFEC执行所导入的FEC的字节数;

参数2、“FEC内容”,即字节数为参数“长度”所指定的,需要导入到FPU的FEC内容。

4、“动态导入FEC”指令,该指令以字符“DFEC”作为指令符,但不限制仅以“DFEC”作为指令符。DFEC指令中的“动态”的含义是指导入的FEC内容来自程序数据,即来自“数据耦合缓存”。需要强调的是,一个FPU的全部FEC可以通过一个或多个DFEC指令,或者通过DFEC指令与SFEC指令共同完成导入FEC的所有具体内容。DFEC指令可以令软件框架设计获得更大的拓展空间或者说发挥空间,实现软件框架设计与具体功能设计分离,即实现软件框架对于不同功能的便捷且动态的适配。这种动态的软件框架与具体功能的动态适配将在更大程度上实现软件工程的复用,以及更方便实现软件功能的迭代进化,为人工智能技术提供必要的软件框架基础。此外,DFEC指令将在更大程度上合理地利用“指令耦合缓存”和“数据耦合缓存”的带宽。由于指令预取的平均速度取决于流水线解码并执行指令的速度,所以并不能通过扩大“指令耦合缓存”输出带宽来持续提高指令预取的速度。但是,数据的读取往往需要比指令更大的带宽,因此可以通过提高“数据耦合缓存”输出带宽,同比例提高DFEC指令对于FEC内容的读取速度。DFEC指令包含以下必要参数:

参数1、“长度”,该“长度”是指当前SFEC执行所导入的FEC的字节数;

参数2、“FEC内容地址”,即在“数据耦合缓存”中存储FEC内容的基地址。对于FEC内容在“数据耦合缓存”中的寻址可以是直接寻址,也可以是间接寻址。即“FEC内容地址”可以是间接地址,也可以是直接地址。

5、“静态导入FED”指令,该指令以字符“SFED”作为指令符,但不限制仅以“SFED”作为指令符。SFED指令中的“静态”的含义是指所导入的FED来自程序代码,即来自“指令耦合缓存”,亦即FED的具体内容包含在指令参数当中(静态参数)。所以,流水线的PFE读取了SFED指令也就读取了该指令所指向的FED。需要强调的是,一个FPU的全部FED可以通过一个或多个SFED指令,或者通过SFED指令与DFED指令(后文将阐述的指令)共同完成导入FED的所有具体内容。但是,每次使用SFED指令或者DFED指令都不需要指定目标FPU的FED缓存的基地址。因为,FPU的FED缓存的默认基地址为0,在向FPU导入FED内容的整个过程中,流水线硬件会记录相关指令写入FED缓存的地址,每个向FPU导入FED内容的指令都会延续流水线硬件所记录的这一地址,继续完成当前指令导入FED的任务。很显然,由于SFED指令所导入的FED内容的数据来源为静态,因此,SFED指令的实际功能是为相应FED进行默认初始值的赋值。SFED包含以下必要参数:

参数1、“长度”,该“长度”是指当前SFED执行所导入的FED的字节数;

参数2、“FED内容”,即字节数为参数“长度”所指定的,需要导入到FPU的FED。

6、“动态导入FED”指令,该指令以字符“DFED”作为指令符,但不限制仅以“DFED”作为指令符。DFED指令中的“动态”的含义是指导入的FED内容来自程序数据,即来自“数据耦合缓存”。需要强调的是,FPU的全部FED可以通过一个或多个DFED指令,或者通过DFED指令与SFED指令共同完成导入FED的所有具体内容。很显然,DFED指令的功能是为相应FED进行初始值的复制,但并不是如同SFED指令的功能,所赋值的是“默认初始值”。通过DFED指令与DFEC指令的结合,DFED指令可以令软件框架设计获得更大的拓展空间或者说发挥空间,实现软件框架设计与具体功能设计分离,即实现软件框架对于不同功能的便捷且动态的适配。这种动态的软件框架与具体功能的动态适配将在更大程度上实现软件工程的复用,以及更方便实现软件功能的迭代进化,为人工智能技术提供必要的软件框架基础。此外,DFED指令将在更大程度上合理地利用“指令耦合缓存”和“数据耦合缓存”的带宽。由于指令预取的平均速度取决于流水线解码并执行指令的速度,所以并不能通过扩大“指令耦合缓存”输出带宽来持续提高指令预取的速度。但是,数据的读取往往需要比指令更大的带宽,因此可以通过提高“数据耦合缓存”输出带宽,同比例提高DFED指令对于FED内容的读取速度。DFED指令包含以下必要参数:

参数1、“长度”,该“长度”是指当前SFED执行所导入的FED的字节数;

参数2、“FED内容地址”,即在“数据耦合缓存”中存储FED内容的基地址。对于FED内容在“数据耦合缓存”中的寻址可以是直接寻址,也可以是间接寻址。即“FED内容地址”可以是间接地址,也可以是直接地址。

7、“设置FOO”指令,该指令以字符“SETFOO”作为指令符,但不限制仅以“SETFOO”作为指令符。SETFOO指令功能完成为FPU的FOR的输出特性进行设置,即指定可以输出到“数据耦合缓存”的FOR具体有哪些,并指定输出到“数据耦合缓存”的目标地址。SETFOO指令将影响CISC-H流水线PFE中的关于“指令上下文相关性检测及控制”的执行,因此SETFOO指令可以指定该指令所定义的FOO是否构成对于后续指令的“指令上下文相关性”的关联。默认情况下SETFOO所设置的FOO的输出特性具有与后续指令的“指令上下文相关性”的关联,即PFE需要对SETFOO所设置的FOO进行“指令上下文相关性检测及控制”。所以,SETFOO指令事实上是允许用户软件在确信不存在“指令上下文相关性”关联的前提下,可以人为地设定自身所设定的FOO不要求PFE进行“指令上下文相关性检测及控制”,从而提高CISC-H流水线的运行效率。SETFOO指令包含以下必要参数:

参数1、“ICO特性”,即表示上述的指定当前指令所设定的FOO是否具有“指令上下文相关性”关联的特性;

参数2、“FOR最小索引号”,该参数用于设定具有FOO功能的FOR的范围,该参数表示的是FOR范围的最小索引号。FOR索引号也可以理解为FOR的地址,其最小索引号也可以理解为被选定具有FOO功能的FOR范围内,地址最小的FOR(从地址最小的FOR到地址最大的FOR均为SETFOO指令所设定的具有FOO功能的FOR);

参数3、“FOR最大索引号”,该参数用于设定具有FOO功能的FOR的范围,该参数表示的是FOR范围的最大索引号。FOR索引号也可以理解为FOR的地址,其最大索引号也可以理解为被选定具有FOO功能的FOR范围内,地址最大的FOR(从地址最小的FOR到地址最大的FOR均为SETFOO指令所设定的具有FOO功能的FOR);

参数4、“目标地址”,即在“数据耦合缓存”中的目标基地址。该基地址在“数据耦合缓存”中的寻址可以是直接寻址,也可以是间接寻址。即“目标地址”可以是间接地址,也可以是直接地址。

8、“启动”指令,该指令以字符“INVOKE”作为指令符,但不限制仅以“INVOKE”作为指令符。INVOKE指令的功能是令FPU开始运行FEC,即FPU开始独立地运行。INVOKE指令被执行后,首先FPU会进入“运行状态”,其次CISC-H的PFE可以开始执行其它与当前FPU并不相关的指令或初始化下一个FPU。需要强调的是,所有与FPU运行相关的其它指令都必须在INVOKE之前执行,比如SETFPU指令、SFEC指令、DFEC指令、SFED指令、DFED指令、以及SETFOO指令。其中SETFPU指令可以在对于多个FPU使用之前仅执行一次,而并不要求每次执行INVOKE之前都必须执行SETFPU指令。

附图说明

图1为本发明技术方案的一种可能的硬件示意图,图示为基础方案示意图,并不表示本发明技术方案需要固定为图示结构。图中示例了具有4条CISC-H流水线的内核流水线的简易结构,在本发明技术方案中,由一条或多条CISC-H流水线所组成的结构也被称之为“CISC-H流水线结构”。图中所示这4条CISC-H流水线如图中所示“流水线0”至“流水线3”,每条流水线具有固定且唯一的索引号,即如图中所示例“流水线0”的索引号为0,“流水线1”的索引号为1,以此例推。图中所示PFE

图1所示,显而易见,FPU阵列中的所有FPU资源为所有流水线共享资源。图中OWI完成对于FPU资源的管理,即完成FPU资源对于所有流水线的分配以及FPU资源的回收。除此之外,OWI还完成对于SETFPU指令、SFEC指令、DFEC指令、SFED指令、DFED指令、SETFOO指令、以及INVOKE指令的具体执行,即完成对于FPU的初始化以及启动。图中OWO完成对于FPU的IOO及FOO的管理及控制,以及完成将IOO和FOO依据FPU所关联的流水线索引号将相应输出内容传输至相对应的流水线的PBE。除此之外,OWO还完成对于ICOTAG指令的最终执行,即控制具有“指令上下文相关性”的指令的输出次序。

图2为本发明技术方案的一种可能的硬件示意图,图示为基础方案示意图,并不表示本发明技术方案需要固定为图示结构。图中示例了FPU的简易结构,图中所示简易结构可实现精简指令集架构的,符合FPU定义的微系统内核功能,即完成所需的算术运算、逻辑运算、以及上述运算的迭代循环;

图2所示,显而易见,图中所示结构具有十分简短的流水线结构,但该结构并不影响FPU的运行效率,相反相对于仅仅实现“算术处理”,该结构具有更多RISC相较于CISC的优势;

图2所示,OWI和OWO分别对应于图1所示的OWI和OWO(即当FPU被选中时,其初始化过程中及运行过程中,图2与图1之间相对应的OWI和OWO会各自形成互连),并通过图1所示的OWI及OWO分别完成FPU与PFE及PBE的互连;

图2所示,FSR是FPU Status Register的缩写,FSR记录了当前FPU所关联的流水线的索引号,FSR还记录了FPU的状态信息。FPU具有以下必要状态:

状态1、“空闲状态”,表示当前FPU处于未被使用状态,或者未被选中状态,该FPU资源可以被OWI回收;

状态2、“等待状态”,表示当前FPU已被回收,并且正在等待被分配给某一条具体的流水线初始化;

状态3、“初始化状态”,表示当前FPU已被分配给某一条具体的流水线,并处于被初始化的过程中;

状态4、“运行状态”,表示当前FPU已接收到INVOKE指令,处于执行FEC的过程中;

状态5、“结束状态”,表示当前FPU已完成FEC的执行,进入等待FOO被传输进入PBE的过程中;

图2所示,上述FPU的5个状态中存在以下状态转换关系:

转换1、系统复位后,FPU进入“空闲状态”;

转换2、FPU阵列的OWI模块回收处于“空闲状态”的FPU,FPU进入“等待状态”;

转换3、FPU阵列的OWI模块将处于“等待状态”的FPU分配给具体流水线准备对FPU进行初始化,FPU进入“初始化状态”;

转换4、流水线完成对处于“初始化状态”FPU的初始化,并执行了INVOKE指令,FPU进入“运行状态”;

转换5、处于“运行状态”的FPU完成FEC的执行,等待FOO被FPU阵列的OWO模块传输进入PBE,FPU进入“结束状态”;

转换6、处于“结束状态”的FPU的FOO已被传输至PBE,FPU进入“空闲状态”。

图2所示,FPU在“运行状态”中结束FEC的执行,是FPU执行了FEC中的“FPU退出”指令,该指令以字符“FPUEXIT”作为指令符,但不限制仅以“FPUEXIT”作为指令符。FPUEXIT指令属于FPU的独立指令集架构中的指令之一,当FPU内部流水线执行FPUEXIT指令时,FPU会进入“结束状态”,与此同时FPU内部流水线不再“预取指令”,即其内部流水线停止工作。FPUEXIT指令被执行后,FPU的内部模块OWO会与FPU阵列的OWO模块取得联系,将FPU的FOO传输给PBE;

图2所示,图中黑色箭头表示FPU初始化的过程中,或者FPU执行了FPUEXIT指令后,FPU指令、数据、以及FPU状态信息被传输的方向以及被传输的路径的示意。图中白色箭头表示FPU在运行过程中,相关指令及相关数据在FPU内部流水线中、FOR中、以及FED中的传输方向以及传输路径的示意。显而易见,在FPU运行的过程中,所有的运行过程以及数据交互均仅限于FPU内部。

图1所示,图中的每一个FPU均对应于图2所示的结构。结合图1及图2所示,图1所示FPU阵列是本发明技术方案实现OOA的硬件基础。FPU阵列中的每一个FPU都可以对应于对于“对象”例化所需的硬件资源(程序和数据结构的物理载体)。软件通过SETFPU指令、SFEC指令、DFEC指令,这些汇编指令完成对于“对象”例化过程中的程序加载。软件通过SFED指令、DFED指令、SETFOO指令,这些汇编指令完成对于“对象”例化过程中的数据加载以及实现同一“类”到不同“对象”的例化。软件通过INVOKE指令,这一汇编指令实现对于“对象”的启动。

图3为本发明技术方案所涉及的关于不同指令集架构内核流水线中指令执行效率的对比的概念示意图。图中所示,“RISC/CISC”所示例的是现有背景技术条件下内核流水线指令执行的概念示意图,图中所示T

图3所示,图中所示在“RISC/CISC”和“CISC-H”中的标识A至标识G分别表示在“RISC/CISC”和“CISC-H”中FEC

图3所示,显而易见,以时间点T

具体实施方式

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面对照附图说明本发明的具体实施方式。显而易见地,下面描述中的附图仅仅是发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些图获得其它的附图,并获得其它的实时方式。

为了使图面简洁,各图中只示意性地表示了本发明相关的部分,它们不代表其作为产品的实际结构或流程。另外,以使图面简洁便于理解,在图中有些具有相同结构或功能部件,仅示意性地绘示了其中一个,或仅标出了其中的一个,在本文中,“一个”不仅表示“仅此一个”,也可以表示“多于一个”的情形。

实施例1

本发明的一个实施例,解决FDFO中存在的输出竞争问题,包括步骤:

步骤1、编译器完成对源代码的预编译;

步骤2、编译器对预编译后的代码进行输出竞争检测;

步骤3、编译器在存在输出竞争的指令之间初入ICOTAG指令;

步骤4、编译器对插入ICOTAG指令后的代码完成最终的编译。

实施例2

本发明的一个实施例,在实施例1的基础上,完成对一个“OOA对象”的例化,包括步骤:

步骤1、 将“OOA对象”的代码参考(即所需导入到FEC的内容)、初始化数据(即所需导入到FED的内容,亦即变量初始值和对象函数的输入参量)从其它缓存分别转移至“指令耦合缓存”和“数据耦合缓存”;

步骤2、执行SETFPU指令,确定所需FPU类型;

步骤3、FPU阵列的OWI模块向相关流水线分配FPU资源,相关FPU资源进入“等待状态”,相关FPU资源记录当前流水线的索引号;

步骤4、执行SFEC或者DFEC指令,导入代码参考,即导入FEC实际内容,相关FPU资源进入“初始化状态”;

步骤5、执行SFED或者DFED指令,导入初始化数据,即导入FED实际内容;

步骤6、执行SETFOO指令,设置“OOA对象”的输出;

步骤7、执行INVOKE指令,启动“OOA对象”,相关FPU资源进入“运行状态”。

实施例3

本发明的一个实施例,在实施2的基础上,完成一个“OOA对象”的注销,并回收相关FPU资源,包括步骤:

步骤1、处于“运行状态”的FPU,其EFC中的FPUEXIT指令被执行;

步骤2、FPU内部流水线停止“预取指令”,即其内部流水线停止工作,FPU进入“结束状态”;

步骤3、FPU的内部模块OWO依据FPU内部FSR所记录的流水线索引号与FPU阵列的OWO模块取得联系,将FPU的FOO传输给上述流水线索引号所指定的流水线的PBE;

步骤4、FPU完成所有FOO传输,进入“空闲状态”。

应该说明的是,上述实施例均可以根据需要自由组合。以上所述仅为本发明的优选实施方式,应该指出,对本技术领域的普通技术人员来说,在不脱离发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号