一种带有流水线时分复用调度器的处理器结构的制作方法

文档序号:17317771发布日期:2019-04-05 21:22阅读:242来源:国知局
一种带有流水线时分复用调度器的处理器结构的制作方法

本发明涉及处理器结构领域,尤其是细粒度多线程的结构优化与调度方法。

背景

在目前的嵌入式处理器领域,尚无通过硬件支持的细粒度多线程调度的多任务处理器,嵌入式程序通过实时操作系统间接实现多任务,但是操作系统的精度较低,且有额外开销,通过多线程调度器,可以实现流水线时钟级的定时精度且无需操作系统,可以节省片上存储器空间,同时通过针对性的优化流水线结构,提高线程执行效率,此外可以支持大量的线程调度,远远超过流水线级数,为多任务应用编程提供简单的途径。



技术实现要素:

一种带有流水线时分复用调度器的处理器结构,包括:一个处理器的n级流水线,该处理器的指令在n个流水线时钟周期完成,n的具体数值取决于实际需要,例如想要更高的时钟频率,可以将n取大,将取指,译码,执行,写回等每一个操作分成多个流水级,在多个时钟周期完成。一个流水线调度器,可以调度的线程数量大于n,简便起见,我们称可以调度的线程数量为m,m的具体大小也取决于实际需要,更大的数值会引入更多的电路开销。调度器使用的时钟与流水线时钟同频或者是流水线时钟的整数倍或者是流水线时钟的整数分频;流水线的每一级流水单元在同一个时流水线钟周期执行不同线程的操作;调度器对所有线程都有确定的基于流水线时钟周期的调度规则,且各个线程的调度规则可以不相同。规则的一种具体理解可以是在多少个流水线时钟周期内,一个具体的线程被执行一次或若干次。

由于处理器的流水级数为n,一个线程的一条指令需要n个流水时钟周期才能完成,所以任何线程的指令执行速度最大值为流水线时钟的n分之1,且只能有n个这样的线程同时运行,这也是细粒度多线程的基本原理。当有些线程并不需要以最大速度运行或者需要的线程数量大于n的时候,普通细粒度多线程结构无法满足需求,这时候,通过增加一个使用流水线时钟的调度器,可以完成对m个线程的精确调度,并且使得每个被调度的线程都等效于运行在一个较低频率的独立处理的效果。例如:一个简单的线程调度规则可以表示为当计数器低4比特等于0时将线程a送入流水线执行,这时这个线程a的均匀性最好或者执行时间间隔最稳定,此时该线程a可以等效于独自运行在一个16分之一原流水线时钟频率的处理器上。为了调度器可以调度的更加灵活,还可以进一步增加规则,例如:计数器高4比特等于0且低2比特等于1时将线程b送入流水线执行,计数器高4比特等于1且低4比特等于1时将线程b送入流水线执行,计数器高4比特大于1时不将线程b送入流水线执行。这时,线程b是的执行频率是不均匀的,但是可以适应某些特定场景的需要。

通过优化流水线结构,将取指操作提前到上一指令的译码或执行或写回阶段,可以有效节省取指的等候时间,提高效率。

此外由于调度器可以预知流水线的运行情况,在流水线无线程需要处理的空闲时刻,可以通过关闭流水线时钟脉冲的方式来节约功耗。当所有线程所需要的运行频率都很小的时候,还可以降低主频,节省功耗。由于多个线程同时运行,故线程之间通信将会是一个极大的带宽瓶颈,如果直接通过外部存储器,势必引入时间延迟,通过在处理器内部增加一个专门的存储区域用于线程之间的通信,可以极大提高运行效率。

附图说明

图1是处理器基本调度复用结构图

图2是处理器基本调度复用时序图

图3是处理器调度复用快速取指方式结构图

图4是处理器调度复用时钟控制图

图5是处理器调度复用线程通信结构图

具体实施方式

通常情况下,所公开的实施例在下面的说明中,给出了具体的细节,以便于透彻理解这些实施例。但是,本领域技术人员应当理解的是,这些实施例也可以不用这些具体细节来实现。尤其是关于寄存器和存储器以及计数器等功能性部件,实施例中的方法只是为了说明意图而选用的特例技术,这些实施例可以选择其他公知方法。

第一实施例

图1说明处理器基本调度复用结构,该结构主要包含:位于第1级流水线的取指部件101,位于第2级流水线的译码部件102,位于第3级流水线的执行部件103,位于第4级流水线的写回部件104,线程程序指针部件105,调度器部件106,其中调度器部件106内部还包含一个计数器107和一个线程规则区108。所有部件都使用相同的时钟。线程规则区108存储有每一个需要调度的线程的调度规则,例如:当计数器低2比特等于0时将线程r1送入流水线执行1次,当计数器低3比特等于1时将线程r5送入流水线执行1次,当计数器低2比特等于2时将线程r3送入流水线执行1次,当计数器低3比特等于3时无线程执行,当计数器低3比特等于5时将线程r6送入流水线执行1次,当计数器低3比特等于7时将线程r7送入流水线执行1次。线程规则区108在每一个时钟周期都会根据计数器107的数值检查一次所有有效的线程规则,并选出当前需要执行的线程送给线程程序指针部件105,线程程序指针部件105查找出需要执行的线程的程序指针送给流水线取指部件101,流水线取指部件101从程序存储区取得需要执行的指令并送给流水线译码部件102,流水线译码部件102将得到的指令解释为需要执行的操作,必要时也需要取得源操作数,并将所有数据发送给流水线执行部件103,流水线执行部件103执行具体的运算或其他需要执行的操作,最后生成结果送给流水线写回部件104,流水线写回部件104责将结果写回寄存器或者存储器,需要注意的是,并非所有操作都会需要写回操作,在不需要写回操作的时候,流水线写回部件104并不产生写回动作。还需要注意的是,每一级流水线部件在具体实现时可能还需要当前线程的线程号信息用于区别不同线程,这个线程号可以由调度器部件106直接提供给第一流水线,经由流水线依次传递给各级流水线部件,或者由调度器部件106直接提供给各级流水线部件。如果有必要,调度器部件106可以直接向任何需要线程号的部件提供其所需要的线程号。

图2是第一实施例所对应的时序图。在t0时钟周期,此时计数器107数值为0,位于第1级流水线的取指部件101执行r1线程,位于第2级流水线的译码部件102执行r7线程,位于第3级流水线的执行部件103执行r3线程,位于第4级流水线的写回部件104执行r6线程。

在下一个时钟周期t1时钟周期,此时计数器107数值为1,位于第1级流水线的取指部件101执行r5线程,位于第2级流水线的译码部件102执行r1线程,位于第3级流水线的执行部件103执行r7线程,位于第4级流水线的写回部件104执行r3线程。

在下一个时钟周期t2时钟周期,此时计数器107数值为2,位于第1级流水线的取指部件101执行r3线程,位于第2级流水线的译码部件102执行r5线程,位于第3级流水线的执行部件103执行r1线程,位于第4级流水线的写回部件104执行r7线程。

在下一个时钟周期t3时钟周期,此时计数器107数值为3,位于第1级流水线的取指部件101空闲,位于第2级流水线的译码部件102执行r3线程,位于第3级流水线的执行部件103执行r5线程,位于第4级流水线的写回部件104执行r1线程。

在下一个时钟周期t4时钟周期,此时计数器107数值为4,位于第1级流水线的取指部件101执行r1线程,位于第2级流水线的译码部件102空闲,位于第3级流水线的执行部件103执行r3线程,位于第4级流水线的写回部件104执行r5线程。

在下一个时钟周期t5时钟周期,此时计数器107数值为5,位于第1级流水线的取指部件101执行r6线程,位于第2级流水线的译码部件102执行r1线程,位于第3级流水线的执行部件103空闲,位于第4级流水线的写回部件104执行r3线程。

在下一个时钟周期t6时钟周期,此时计数器107数值为6,位于第1级流水线的取指部件101执行r3线程,位于第2级流水线的译码部件102执行r6线程,位于第3级流水线的执行部件103执行r1线程,位于第4级流水线的写回部件104空闲。

在下一个时钟周期t7时钟周期,此时计数器107数值为7,位于第1级流水线的取指部件101执行r7线程,位于第2级流水线的译码部件102执行r3线程,位于第3级流水线的执行部件103执行r6线程,位于第4级流水线的写回部件104执行r1线程。

第二实施例

图3是处理器调度复用快速取指方式结构图,该结构主要包含:位于第1级流水线的译码部件301,位于第2级流水线的执行部件302,位于第3级流水线的写回部件303,线程指令堆304,取指部件305,调度器部件306,其中调度器部件306内部还包含一个空闲部件预测器307和负载计算器308。当一个线程开始进入流水线第一级的译码部件301时,指令已经由线程指令堆304提供出来,经过1个时钟周期后,指令进入执行部件302,此时部分指令已经可以计算出下一指令的地址并送给取指部件305,但是还有部分指令还需要由位于第2级流水线的执行部件302计算后提供给取指部件305,又经过1个时钟周期后,对于需要写回操作的指令,在这时候由位于第3级流水线的写回部件303进行写回操作,经过写回时钟周期后,该线程退出流水线并等待调度器在预定的规则下再次调度入流水线。但是这个线程的下一条指令已经在译码或者执行时钟周期之后就开始由取指部件305向程序存储器进行读取,取回的指令会存入线程指令堆304并等待该线程被调度入的时候由线程指令堆304取出。但是在特定情况下,一条指令可能刚刚由取指部件305送至线程指令堆304便需要提供给译码部件301,这时候该指令可直接通过线程指令堆304提供给译码部件301,无需存入再取出环节。需要注意的是,并非所有操作都会需要写回操作,在不需要写回操作的时候,流水线写回部件303并不产生写回动作。还需要注意的是,每一级流水线部件在具体实现时可能还需要当前线程的线程号信息用于区别不同线程,这个线程号可以由调度器部件306直接提供给第一流水线,经由流水线依次传递给各级流水线部件,或者由调度器部件306直接提供给各级流水线部件。如果有必要,调度器部件306可以直接向任何需要线程号的部件提供其所需要的线程号。

第三实施例

图4是处理器调度复用时钟控制图,该结构主要包含:第1级流水线部件401,第2级流水线部件402,第3级流水线部件403,时钟控制器404,调度器部件405,其中调度器部件405内部还包含一个负载计算器406和一个空闲部件计算器407。当处理在非满载负载情况下,第一级流水部件401在第t个时钟周期没有线程使用,因此第二级流水部件402在第t+1个时钟周期没有线程使用,第三级流水部件403在第t+2个时钟周期没有线程使用。调度器部件405里面的空闲部件计算器407根据调度器的调度信息可以计算出在第t周期第一级流水部件401不需要时钟,并通过时钟控制器404在第t周期关闭了第一级流水部件401的时钟,如果在第t+1周期第一级流水部件401仍然空闲,可继续关闭其时钟,否则需要打开其时钟。同理在第t+1周期关闭了第二级流水部件402的时钟,在第t+3周期关闭第三级流水部件403的时钟。

当处理在低负载情况下,例如只有一个线程以十六分之一的频率占用流水线时,负载计算器406根据调度器的调度信息可以预测出将流水线时钟降低仍然可以满足所有需要调度的线程的执行频率时,可以通过时钟控制器404降低流水线时钟频率。

需要注意的是,在降低频率后,需要相应提高线程的调用频率弥补其性能损失。例如当将流水线时钟降低为原时钟频率一半后,原线程十六分之一的流水线占用频率需要提高到以八分之一的流水线占用频率。

还需要注意的是,在降低频率后,当负载提高后,需要提升流水线频率同时降低线程的调用频率。

第四实施例

图4是处理器调度复用线程通信结构图,该结构主要包含:该结构主要包含:位于第1级流水线的取指部件501,位于第2级流水线的译码部件502,位于第3级流水线的执行部件503,位于第4级流水线的写回部件504,线程通信存储器505,线程程序指针部件506,调度器部件507,其中调度器部件507内部还包含一个计数器508和一个线程规则区509。所有部件都使用相同的时钟。改结构具体工作机制和第一实施例类似,但是增加了一个线程通信存储器505,线程通信存储器505可以在译码周期被线程读取,或者在写回周期被写入。线程通信存储器505的大小可以配置,最大可以支持所有可调度线程,最小可以只支持1个线程,每个线程具体分配的容量也可以配置,最小可以仅1比特。线程通信存储器505与流水线之间有专用读写信号线,可以被流水线快速直接读写。

此外,流水线还有配置线程规则区509的途径,在具体应用软件的配合下,线程可以在处理器运行的期间动态的改写线程规则区509内的规则,从而可以更加灵活的调度线程。需要注意的是,为了防止线程以外改写线程规则区509内的规则,可以只开放改写权限给特定的线程。

对所公开实施方式的先前的说明以使得任何所属技术领域的专业人员可以实施或者使用本发明。对本领域的技术人员而言可以很容易的对这些实施方式进行各种修改,并且在不脱离本发明的精神上、或者范围的情况下可以将在此定义的通用原理应用于其他实施方式。因此,并非意在将本发明限于在此显示的实施方式,而是应当同符合在此公开的原理和非常规设计的最宽范围相一致。

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