用于调用多线程加速器的装置和方法_2

文档序号:9221608阅读:来源:国知局
执行的指令,而不是与执行单元内的内部程序代码相对应。
[0028]参照图2,然后,加速器所提供的加速至少部分源自多个线程203_1至203_Υ的并行执行,这与单个线程201_1的执行相对。换言之,在实施例中,加速器所提供的加速不仅通过调用专用执行单元而且通过它们并行执行多个线程来实现。在实施例中,例如,加速由多指令多数据(MMD)加速器通过专用执行单元提供,而执行主线程201_1所在的CPU核与具有通用执行单元的单指令机器(诸如单指令单数据(SISD)和/或单指令多数据(SIMD))相对应。
[0029]将多个微线程203_1至203_Υ散播到不同于主线程201_1的ISA的指令集架构(ISA)比将多个微指令散播到与主线程相同的ISA更常见。在加速器ISA不同于主线程ISA(例如,GPU)的典型情况下,加速器和主线程在不同的并且隔离的程序存储器区域和数据存储器区域之外执行。简言之,通用CPU核和加速器是各自具有其自身的对应程序代码和数据域的不同的隔离机器。
[0030]对比之下,在其中微线程203_1至203_Y在与主线程201_1相同的ISA上执行的情况中,加速器和主线程/通用CPU核之间的显著更紧密的关联是可能的。例如,参照图2和图3,加速器的微线程203_1至203_Υ可在与主线程201_1相同的程序存储器空间301之外操作。另一种可能性是微线程203_1至203_Υ可使用不仅来自与主线程201_1相同的数据存储器空间302而且可能来自相同的寄存器空间303的数据。也就是,加速器可以可想象地至少利用处理主线程201_1的通用CPU指令执行流水线的数据寄存器303。
[0031]为了支持多线程加速器的调用,其中与通用CPU相比ISA不改变,应当建立某些语义定义。这些包括用于以下内容的定义:i)初始微线程架构状态;ii)微架构状态的维护;iii)线程调度;以及iv)最终微线程架构状态。应当定义用于异常、中断和违规的其他语义定义。以下接着讨论这些定义中的每个定义。
[0032]微线程初始化、维护、调度和总结
[0033]微线程架构状态的初始化与其中启动每个微线程的环境相对应。在其中加速器和通用CPU核紧密关联的实施例中,可以以与子例程由在通用CPU核上作为典型/标准线程来执行的主程序调用的方式相同或类似的方式启动微线程。这样,通用CPU核ISA所支持的应用二进制接口(ABI)或嵌入式ABI (EABI)的某些(如果不是全部)方面用于启动微线程。这样,主线程调用加速器的方式和主线程调用在通用CPU核上执行的典型子例程的方式之间存在相似性。
[0034]ABI或EABI本质上定义如何进行从第一例程到第二子例程的函数调用。ABI或EABI的一部分(以下,简称“ABI”)指定用于嵌入式软件程序的文件格式、数据类型、寄存器使用、栈框架组织和函数参数传递的标准惯例。所考虑的另一个因素是通过定义,线程具有其自身的“上下文”,其中上下文与指令、数据和控制寄存器和/或存储器空间内的特定值相对应。除非其与在完全相同的数据上操作的完全相同的程序相对应,两个不同的线程被期望在其执行过程中具有不同的上下文。在此意义上,加速器的多个微线程可被视为具有其自身对应的上下文的独立线程。
[0035]这样,在实施例中,通用CPU核线程对多线程加速器的调用包括将主线程的上下文的多个实例传递到多个加速器线程中的每一个加速器线程,其中与主线程的ISA的ABI相一致地执行主线程的上下文的每次传递。在一种极端情况下,加速器具有其自身的相关联的寄存器330,包括用于每个单独微线程的专用寄存器空间,并且主线程的上下文的副本被多次复制331到每个微线程的专用加速器寄存器空间330。在这种情况下,通用CPU核包括用于将主线程的上下文的不同副本复制331到加速器的专用寄存器空间330中的第一逻辑电路310。
[0036]根据这种相同的方法,当加速器执行其任务时,主线程的上下文可后续被“切换出”通用CPU核。这样,例如另一个程序的另一个线程可将其上下文切换到通用CPU核中并且在加速器执行期间代替其执行。
[0037]在另一种极端情况下,加速器的多个微线程中的每个微线程仅可访问主线程的上下文,因为其位于主CPU核的寄存器空间340中。在这种情况下,主线程的上下文可或可不被切换出主CPU核,取决于设计者偏好,不管主线程的上下文对加速器微线程是永久地可用还是仅初始地可用。在后一种情况中主线程的上下文可被切换出,如上所述。
[0038]在其中微线程在通用CPU核的寄存器空间303之外操作的情况中,就在加速器代码的实际调用之前,主线程执行一个或多个分配指令以便在主CPU核寄存器空间303内为每个微线程分配栈区域和主线程的上下文的副本。所分配的栈为每个微线程保留空间以便进行其自身的函数调用。
[0039]相对于分配主线程的上下文,加速器的每个微线程在寄存器内具有其自身的主线程上下文的副本(为了绘图简单,未示出这些副本和加速器和寄存器空间303之间的耦合)。因此,再次,通用CPU核包括用于存储主线程的上下文的多个副本的逻辑电路310 (尽管在这种情况下不同的副本存储在通用CPU核的寄存器空间303中)。技术上讲,寄存器空间303对应于执行主线程的指令执行流水线所使用的操作数和控制寄存器空间。在此,逻辑电路310可以是用于执行分配指令(aloe)的逻辑电路。
[0040]在另一种中间方法中,主线程的上下文被复制到加速器微线程所引用的中间缓冲器或存储区域(例如,备用寄存器和/或存储器空间(未在图3中示出))。在这种情况下,在其上下文已经被写入中间缓冲器之后,主线程的上下文可被切换出通用CPU核。
[0041]在进一步的实施例中,由于效率,可由逻辑电路310使得主线程的上下文的部分对微线程可用。例如,根据一种方法,如果加速器不使用具有特定类型的寄存器空间(诸如SMD寄存器空间)的内容,不使得该寄存器类型的上下文对微线程可用(例如,不对微代码提供SMD上下文)。
[0042]在另一个或相关实施例中,微线程仅从逻辑电路310提供,具有可由ABI标识和/或使用的上下文。在此,相关的是理解通过ABI进行函数调用的动态。通常,函数调用仅将少量“输入”参数传递到其调用的子例程。子例程然后执行其操作而无需对调用线程数据的任何进一步引用。这样,仅仅用于将输入参数传递到所调用的例程的有限寄存器空间集合实际上由ABI利用。因此,ABI可设置限制或以其他方式标识比调用线程的整个上下文更小的寄存器子集。
[0043]沿着类似的思路,当主线程调用加速器及其多个微线程时,主线程的被传递到微线程的上下文信息仅与ABI所允许的上下文信息的有限子集相对应。在支持多个不同的ABI的ISA的情况下,寄存器子集可与一个、多于一个或全部ABI相对应,可被选择为可被传递到微线程的允许的上下文集合。这样,通用CPU核或者重新使用用于为了调用加速器的目的实现通用CPU核所处理的线程之间的典型子例程函数调用的逻辑电路,或者已经添加用于实现与ABI —致的加速器的调用的逻辑电
当前第2页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1