一种指令级并行处理方法

文档序号:6610015阅读:191来源:国知局
专利名称:一种指令级并行处理方法
技术领域
本发明涉及处理器,具体地说涉及处理器架构下的指令级并行处理。
背景技术
超标量是指处理器设有多条指令流水线,可以并行执行指令,确 保处理器可以在同 一时钟周期内执行多个指令。超标量能够立竿见影 地改善处理器性能。当指令之间不存在相关时,它们在流水线中是可 以重叠起来并行执行的。这种指令序列中存在的潜在并行性称为指令
级并行(ILP)。提高超标量处理器资源利用率的关键问题是如何在程 序中找到足够的指令级并行。
一种常规的超标量实现方法是采用编译器对指令进行重新排序。 假定一个程序包括指令i0、 il、 i2、 i3、 i4…,其中il依赖于iO, i3依赖于i2。编译器重新排序时,可以将指令i2和iO编成一组,指 令i3和il编成另一组,先后发射。这样的处理器称之为顺序执行机。 但是,编译器无法有效解决多个基本程序块之间的指令并行性。
另一种超标量实现方法是乱序执行。乱序执行的原理采用硬件窗 来观察指令序列,通过在两条相关指令中插入不相关的指令,使整条 流水线顺畅。 一种乱序执行的做法包括取指或译码后的指令按序放入 重排序緩冲器,乱序执行,并且按序提交;在提交前需要临时寄存器 来存放结果。乱序执行需要复杂的硬件配置。另外,对于彼此之间存 在指令并行性的基本程序块,需要将基本程序块解开,然后再乱序执 行。然而,这样做的结果是增大了目标代码的长度,消耗了过多的资 源和功率。
因此,迫切地需要有一种能够克服以上问题的新的指令并行处理 方法。

发明内容
根据第一方面,本发明提供一种基于单个处理器核的指令处理方 法,包括步骤确定属于同一个应用程序的多个指令序列彼此不相关; 在所述多个指令序列之前插入分叉指令,在其之后插入接合指令;由 此,所述处理器核将以分叉指令和接合指令标注的多个指令序列并行 执行。
根据第二方面,提供一种计算机程序产品,包括计算机可读介质, 计算机可读介质存储包含彼此不相关的多个指令序列,分叉指令和接 合指令的一个应用程序;其中,在所述多个指令序列之前插入分叉指 令,在其之后插入接合指令;由此以分叉指令和接合指令标注的多个
指令序列将由单个多线程处理器核并行执行。
根据第三方面,提供一种处理器,所述处理器包括多个架构性存 储,线程控制器,指令发射单元和执行引擎;所述多个架构性存储分 别为多个线程提供独立的指令和数据存放,所述多个线程来自同一应 用程序并且由分叉指令和接合指令标注为彼此独立;当多个线程中的 运行线程被译码出分叉指令的时候,线程控制器激活多个线程中的其 它线程,指令发射单元并行读取所述多个线程的指令并且将其发射到 执行引擎;执行引擎为多个线程共享,对来自指令发射单元的所述多 个线程的指令加以执行;当译码出接合指令的时候,线程控制器关闭 所述其它线程。
根据第四方面,提供一种指令集,包括分叉指令和接合指令,供 编译产生适于在单个多线程处理器核上运行的应用程序,所述应用程 序包含彼此不相关的多个指令序列;其中,在所述多个指令序列之前 插入分叉指令,在其之后插入接合指令;由此以分叉指令和接合指令 标注的多个指令序列将由单个多线程处理器核并行执行。
根据第五方面,提供一种基于多线程处理器的指令处理方法,所 述方法包括从多个线程中的一个运行线程译码出分叉指令,所述多 个线程来自同一应用程序并且由分叉指令和接合指令标注为彼此独 立;激活多个线程中的其它线程,并且将所述其它线程和运行线程并 行执行;当译码出接合指令时,关闭所述其它线程。
通过分叉和接合指令,软件可以在同一应用程序的多个功能块之 间建立虛拟的多线程机制,从而提高应用程序的运行速度。


下面将参照附图对本发明的优选实施方案进行更详细的说明,其

图l是根据本发明的执行分叉和接合指令过程的示意图2是采用分叉和接合指令之后的多个功能块处理顺序示意图3是采用主分叉和次分叉之后的多个功能块处理顺序示意图4示意了采用分叉和接合指令的三个场景图5是实施本发明的双线程处理器核的结构框图;以及
图6是本发明的一个应用实例的示意图。
具体实施例方式
应用程序一般包括多个功能块fO, fl, f2, f3...,部分功能块之 间不具有相关性。为了加速应用程序在处理器核上的处理,办法之一 是将应用程序的指令级并行最大化。本发明提供了两个指令,分叉 (FORK)和接合(JOINT)指令。通过这两个指令和多线程处理器,软 件可以在同 一应用程序的多个功能块之间建立虚拟的多线程机制,从
而提高应用程序的运行速度。
图l是根据本发明的执行分叉和接合指令过程的示意图。
如图1所示,开始时一个线程的程序计数值(PC)被启用,该线 程的指令被提取和执行。
当从该线程中提取出分叉指令,表明分叉指令之后存在一个独立 于当前执行线程的基本程序块或功能块时,则从当前执行线程分出一 个新的线程,而且启用专属于新线程的PC值。当前执行线程称为被分 线程。分出线程的PC值由处理器的取指单元自动计算。它通过将被分 线程的PC和分叉指令中的地址偏移相加得到。
在一个实施方案中,在处理器的取指单元中独立维持多个PC,以 便当对应的线程被启用的时候能够交替取出指令。
当在被分线程中提取到接合指令,表明分出线程执行完毕的时候 被分线程被禁用。接合指令后的指令将仅在被分线程和分出线程中的 指令提取完成的时候才能被提取。
分叉指令和接合指令可以由编译器自动加入,也可以由程序员手
工写入。
图2是采用分叉和接合指令之后的多个功能块处理顺序示意图。 如图2所示,多个功能块f0, fl, f2和f3同属于一个应用程序,其 中功能块fl和f2之间无相关性。
鉴于功能块fl和f2之间无相关性,可以并行执行。通过在功能
块f0的指令之后插入一个分叉指令FORK,功能块fl与功能块f2分 开,并行执行。
然后,通过在功能块fl和f2之后在功能块f 3之前插入接合指令, 应用程序重新恢复单线程执行。
为了进一步支持来自同一应用程序的多个线程,最大化地实现指 令级并行ILP和执行单元利用,本发明允许在分叉线程基础上进行进 一步的分叉。原分叉称为主分叉,再次分出的称为次分叉。采用主、 次分叉,可以允许至少可达4个数据无关的指令序列同时以单独的线 程并行执行。
图3是采用主分叉和次分叉之后的多个功能块的排序图。如图3 所示,多个功能块f0, fl, f2和f3同属于一个应用程序。功能块fl 和f2之间不相关。功能块fl包括彼此不相关的子功能块fl-a和fl-b, 功能块f2包括彼此不相关的子功能块f2_a和f2_b。
鉴于功能块fl和f2之间不相关,通过在功能块f 0的指令之后插 入一个主分叉指令,功能块fl与功能块f2分开,并行执行。
然后,通过在功能块fl的指令之中,子功能块fl-a和fl—b之前 插入一个次分叉指令,子功能块fl-a和fl-b并行执行。
接着,通过在功能块fl—a和fl-b之后插入从接合指令,功能块 f 1重新顺序执行。
类似地,通过在功能块f2的指令之中,子功能块f2-a和f2-b之 前插入另一个次分叉指令,子功能块f2—a和f2-b并行执行。然后, 在相应的时刻,通过在功能块f 2_a和f 2_b之后插入另 一从接合指令, 功能块f2重新顺序执行。
然后,通过在功能块fl和f2之后在功能块f 3之前插入主接合指 令,应用程序重新恢复单线程执行。
需要注意,根据本发明,对主分叉和次分叉进行了不同的处理。 它们之间的差别是主分叉的被分线程和分出线程使用了不同的架构性 存储,包括不同的通用寄存器(GPR)组(即GPR0和GPR1)、控制寄 存器CR(CRO和CR1)和执行单元内的内部寄存器。而来自次分叉的 被分线程和分出线程使用相同GPR、 CR和内部寄存器组的不同部分, 取决于线程如何从主程序被分出。以GPR为例,如果功能块fl使用 0-31个GPR,则子功能块fl—a使用第0-15个GPR,功能块fl-b使用第16-31个GPR。
由于主线程需要独立的GPR,次线程不需要独立的GPR,因此可以 有效节约硬件资源。
在一个例子中,GPRO, CRO和第一组内部寄存器对编程人员来说是 可见的;GPR1, CR1和笫二組内部寄存器仅对硬件、编译器和调度程 序(scheduler)来说是可见的。
图4示意了分叉和接合指令的三个场景图。场景1和2描述主分 叉和次分叉之间的不同点。场景3展示了如何从主程序中分出多达四 个线程。类似于场景1和2,从主分叉分出的线程使用不同的GPR(PCO 使用GPRO, PC1使用GPR1),而自次分叉分出的线程使用相同的GPR (PCO和PC2使用GPRO, PC1和PC3使用GPR1)。
如前文提到,在多线程操作中采用GPR0和GPR1可以提供较大的 灵活性和充分的存储空间。在一个实施方案中,当处于单一线程模式 或者在双重次线程模式(也就是场景1和2)中时,写到GPRO的结果 总是被写到GPR1的相同索引(index)。它允许分出线程中的指令在 分叉指令被接收之后立刻执行,无需在执行之前将运算元从GPRO拷贝 到GPR1。调度程序将会告诉执行单元从哪里取得运算元和执行结果该 写到哪里。在分出线程的指令完成之后,利用专用私有指令恢复返回 值指令(RRET)将执行结果从GPR1复制回GPRO。在一个例子中,这 一个指令仅对硬件、SL2编译器和调度程序是看得见的。它将会在归 还控制给主程序线程之前由编译器插入在接合指令之后。因此,整个 多线程机制对应用程序编程人员是透明的。
根据本发明,为了最大化ILP,在两个层次上支持虚拟多线程。粗 略层面上允许两个独立功能块同时在两个线程中执行。精细层面由调度
程序将两个数据无关的指令放在单独的两个线程中自动进行。这两个层 面的双线程支持可以有四个线程同时被执行。
图5是实施本发明的双线程处理器核的结构框图。该处理器核经 配置可以同时处理来自同一应用程序的两个线程,即线程0和线程1。 线程0和线程1的指令分别独立存储在指令高速緩沖存储器(简称指 令高速緩存)的不同区域。换句话说,不同线程的指令高速緩存或其 区域应当在物理或逻辑上是分离的。
如图5所示,处理器核包括取指单元510、指令发射单元530和共 享的执行引擎550。取指单元510从指令高速緩存502分别取出线程0 和1的指令。指令发射单元530从中选择可执行的指令,送往执行引 擎550执行。
指令高速緩存502可以集成于处理器核内,也可以位于处理器核外。
下文进一步说明处理器核的具体结构。
取指单元510包括两个程序计数器(PC) PC0和PC1、取指逻辑单 元512、指令緩冲单元514、和PC控制器516。
PC0和PC1产生分别指明线程0和线程1的下一组指令地址的程序 计数(PC)值。PC0和PC1可以是能够产生程序计数值的常规设计的 计数器,也可以包括增量计数器、分支检测逻辑和其它并非本发明关 键的特征。在一个例子中,PC0和PC1分别由start-pcO和start-pel 信号提供初始PC值。
取指逻辑单元512对PCO和PC1产生的PC值进行处理,并且将处 理后的PC值送往指令高速緩存。所述处理可以是交替选择PC值,也 可以是将PC值并行送往指令高速緩存。
在一个优选实施方案中,取指逻辑单元512是一个多路选择器, 用于在每个时钟周期交替从PCO和PC1产生的两个PC值中选择一个 PC值,并且将之送往指令高速緩存。
指令高速緩存502根据接收到的PC值,取出相应的指令,并且将 之送给指令緩冲单元514。优选地,当指令高速緩存未命中时,可以 从外部SDRAM存储器提取指令。另外,处理器核可以为每个线程配备 进出指令高速緩存的专用线路,以避免这2个线程发生冲突。
指令緩冲单元514接收和存放来自指令高速緩存的线程0和线程1 的指令,维持每个线程的程序次序并且为指令发射单元530提供每个 线程的指令。在一个优选实施方案中,指令緩冲单元514为每个线程 提供数个(比如4)指令緩冲区。如此,即便在由于分支预测或指令 高速緩存未命中而导致指令提取停顿的时候,指令緩冲区也保持足够 的指令供执行用。
如果指令緩冲单元514发现某个线程的指令緩冲区满,则发该线 程緩冲区满信号buf _f ul 1给PC控制器516,后者将指示该线程对应 的程序计数器,PC0或PC1,使之暂停计数。
指令发射单元530从指令緩沖单元514接收线程O和线程1的指 令,并且对线程0和线程1的指令进行冲突检查;然后将通过冲突检 查的指令发射给执行引擎550。指令发射单元530可以选择任一线程 的指令,而不管上一次选择的指令来自哪一个线程。
执行引擎550包括存取单元(LS ) 552,算术逻辑/存取(ALU/LS ) 单元554,算术逻辑(ALU) 556,乘法累加单元(MAC) 558和固定功 能单元560。固定功能单元560包含专用运算硬件,执行比如快速傅 立叶变换(FFT)。
执行引擎550可以包括任意数量的执行单元,每个执行单元可以 采用 一般意义上的常规设计。
对于不同的待执行指令,处理器核可以选择不同的指令执行单元 接收该指令并且加以执行。根据指令选择指令执行单元属于常规技术, 不是本发明的关键所在。
在一个优选实施方案中,双线程处理器核是一个多发射超标量机。 比如,指令发射单元可以将例如4个指令同时送往不同的执行单元。 多发射特征可以令处理器核利用现有的指令级并行(ILP)来实现性 能目标,而不需要过高的时钟频率。在一个例子中,每个时钟周期发 射的指令可以按任意需要的组合从候选线程的指令中选取,比如可以 限定为每个时钟周期每线程一个指令,也可以允许从同一线程发射多 个指令。
在一个优选实施方案中,算术逻辑/存取(ALU/LS )单元254通过 连接线向PC控制器216提供信号,指示PC控制器216条件分支此前 被错误预测并且需要恢复正确的PC值。需要说明,算术逻辑/存取 (ALU/LS )单元254也可以由具有算术逻辑功能的其它指令执行单元 代替。
处理器核也包括两个通用寄存器组GPRO和GPR1,分别存放两个线 程的操作数,便于执行单元读取。另外,也可以供执行单元回写两个 线程的执行结果。GPRO例如是由32个32比特寄存器构成的寄存器组, 用于线程0。 GPR1例如是由32个16比特的寄存器构成的寄存器組, 为线程1所用。处理器核还可以包括两个控制寄存器(CR),或者其 它的架构性存储。
处理器核还包括线程控制器540,它根据某个线程的运行线程(active_thread )信号控制与该线程相关PC值的产生与指令的提取。 在进一步优选的实施方案中,如果当前运行的线程(比如线程0)判 断有新的独立线程(比如线程l)需要执行的时候,则产生运行线程 信号。这样,线程控制器540通知前述的取指逻辑单元512与指令緩 冲单元514,允许取指逻辑单元512选择与该线程有关的PC值,将之 送往指令高速緩存502,并且允许指令緩冲单元514接收该线程的指 令。
由上文可见,本发明采用独立的架构性存储为2个线程提供各自 指令和数据的存放,同时流水线被统一而且为2个线程共享,从而取 得较好的负载平衡和硬件利用。
当处理器核译码到分叉指令的时候, 一个新的运行线程信号 (active-thread)作用在线程控制器540上。基于该信号,线程控制器 540激活一个新的线程,即分出线程。分出线程的起始PC位置由分叉 指令提供。该起始PC位置一般是相对被分线程的当前位置而言的相 对位置。此后,分出线程开始运行,通过该分出线程的PC使取指单 元510开始取分出线程的指令。当译码到接合指令的时候,与分出线 程有关的"运行线程"信号将被清零,并且清零后的该信号作用在线 程控制器540上。然后,分出线程被关闭,而不再取指令。结果,处 理器核返回单线程模式。
需要说明,以上的双线程处理器仅属举例。本发明同样可以运行 在采用基于单个可编程引擎进行多线程处理的多线程处理器中。
本发明可以处理同一程序不同层次的指令并行度。比如,可以并 行处理不同的功能块,或者同一功能块内的不同部分。本发明可以在 程序运行的过程中动态地去分叉和接合,有效提高了处理器资源的利 用。
本发明有广泛的应用。以视频编解码算法为例。在该算法中,图 像帧被分割为一行行称为宏块(MB)的子块。宏块按照光栅扫描次序 逐一处理。在一个实施例中,利用宏块处理次序来增加指令级并行性, 办法是将前一宏块在一个功能块中处理,将下一宏块在另一功能块中 处理。
图6示意了两个宏块中不同的功能如何在P帧编码中同时执行。 从图6中可见,在时刻T,在前一宏块中完成了运动补偿(MC),变
换(T),量化(Q),逆变换(T-l)和逆量化(Q-l),而在当前宏块 中计算了计算量大的整数运动估计IME。类似的,在稍后的时刻T,, 前一宏块执行解块滤波,当前宏块选择了 IME模式。同样,在时刻T", 当前宏块正在执行子像素运动估计(subpelME),而前一宏块采用熵 编码。
显而易见,在此描述的本发明可以有许多变化,这种变化不能认为 偏离本发明的精神和范围。因此,所有对本领域技术人员显而易见的改 变,都包括在本权利要求书的涵盖范围之内。
权利要求
1.一种基于单个处理器核的指令处理方法,包括步骤确定属于同一个应用程序的多个指令序列彼此不相关;在所述多个指令序列之前插入分叉指令,在其之后插入接合指令;由此,所述处理器核将以分叉指令和接合指令标注的多个指令序列并行执行。
2. 如权利要求1所述的指令处理方法,其特征在于所述分叉是主 分叉,被分指令序列与分出指令序列各自釆用不同的架构性存储。
3. 如权利要求1所述的指令处理方法,其特征在于所述分叉是次 分叉,被分指令序列与分出指令序列共享架构性存储。
4. 如权利要求1所述的指令处理方法,其特征在于所述指令序列 是功能块。
5. 如权利要求1所述的指令处理方法,其特征在于包括步骤当 处于单一线程模式或者在次分叉模式中时,写到归属于该单一线程或 者次分叉的架构性存储中的结果也被写到其它架构性存储中;当确定 有主分叉时,主分叉的分出线程基于被写入所述其它架构性存储中的 结果执行;在主分叉的分出线程的指令完成之后,将执行结果从所述 其它架构性存储复制回所述架构性存储。
6. —种处理器,所述处理器包括多个架构性存储,线程控制器, 指令发射单元和执行引擎;所述多个架构性存储分别为多个线程提供 独立的指令和数据存放,所述多个线程来自同一应用程序并且由分叉 指令和接合指令标注为彼此独立;当多个线程中的运行线程被译码出分叉指令的时候,线程控制器激活多个线程中的其它线程,指令发射 单元并行读取所述多个线程的指令并且将其发射到执行引擎;执行引 擎为多个线程共享,对来自指令发射单元的所述多个线程的指令加以 执行;当译码出接合指令的时候,线程控制器关闭所述其它线程。
7. 如权利要求6所述的处理器,其特征在于所述分叉是主分叉, 被分指令序列与分出指令序列各自采用所述多个架构性存储中的不同 架构性存储。
8. 如权利要求6所述的处理器,其特征在于所述分叉是次分叉, 被分指令序列与分出指令序列共享所述多个架构性存储中 一个架构性 存储的不同部分。
9. 一种基于多线程处理器的指令处理方法,所述方法包括从多 个线程中的一个运行线程译码出分叉指令,所述多个线程来自同 一应 用程序并且由分叉指令和接合指令标注为彼此独立;激活多个线程中的其它线程,并且将所述其它线程和运行线程并行执行;当译码出接 合指令时,关闭所述其它线程。
10. 如权利要求9所述的指令处理方法,其特征在于所述分叉是主 分叉,被分指令序列与分出指令序列各自采用不同的架构性存储。
11. 如权利要求9所述的指令处理方法,其特征在于所述分叉是次 分叉,被分指令序列与分出指令序列共享架构性存储。
12. 如权利要求9所述的指令处理方法,其特征在于所述指令序列 是功能块。
13. 如权利要求9所述的指令处理方法,其特征在于包括步骤当 处于单一线程模式或者在次分叉模式中时,写到归属于该单一线程或 者次分叉的架构性存储中的结果也被写到其它架构性存储中;当确定 有主分叉时,主分叉的分出线程基于被写入所述其它架构性存储中的 结果执行;在主分叉的分出线程的指令完成之后,将执行结果从所述 其它架构性存储复制回所述架构性存储。
全文摘要
本发明披露了一种基于单个处理器核的指令处理方法及处理器。所述方法包括步骤确定属于同一个应用程序的多个指令序列彼此不相关;在所述多个指令序列之前插入分叉指令,在其之后插入接合指令;由此,所述处理器核将以分叉指令和接合指令标注的多个指令序列并行执行。通过分叉和接合指令,软件可以在同一应用程序的多个功能块之间建立虚拟的多线程机制,从而提高应用程序的运行速度。
文档编号G06F9/38GK101344843SQ200710118589
公开日2009年1月14日 申请日期2007年7月10日 优先权日2007年7月10日
发明者劳詠仪, 宋继强, 梅思行 申请人:北京简约纳电子有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1