CN109800064B - 一种处理器和线程处理方法 - Google Patents

一种处理器和线程处理方法 Download PDF

Info

Publication number
CN109800064B
CN109800064B CN201711146942.0A CN201711146942A CN109800064B CN 109800064 B CN109800064 B CN 109800064B CN 201711146942 A CN201711146942 A CN 201711146942A CN 109800064 B CN109800064 B CN 109800064B
Authority
CN
China
Prior art keywords
thread
module
context
execution module
instruction
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201711146942.0A
Other languages
English (en)
Other versions
CN109800064A (zh
Inventor
刘国丁
陈会勇
涂水平
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN201711146942.0A priority Critical patent/CN109800064B/zh
Publication of CN109800064A publication Critical patent/CN109800064A/zh
Application granted granted Critical
Publication of CN109800064B publication Critical patent/CN109800064B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Advance Control (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本申请实施例公开了一种处理器以及线程处理方法,用于有效地提高报文处理效率。本申请实施例处理器包括:输入调度模块、执行模块、存储模块以及输出调度模块,其中,输入调度模块和输出调度模块分别与执行模块连接,执行模块至少包括一个指令引擎;输入调度模块,用于对未分配线程号的线程分配线程号,并按照预设调度方式将已分配线程号的线程送入执行模块;执行模块,用于通过执行引擎执行线程所对应的指令以对线程的上下文进行处理;输出调度模块,用于确定经过执行模块处理后输出的线程是否要继续处理;若要,则将线程环回至输入调度模块。本申请实施例还对应公开了一种线程处理方法。

Description

一种处理器和线程处理方法
技术领域
本申请涉及线程处理领域,尤其涉及到一种处理器和线程处理方法。
背景技术
随着互联网技术的发展,实际应用中对报文的处理既要满足处理速率,同时也要提供可编程能力的要求越来越高,处理器常用于报文处理,协议分析、路由查找等方面。以报文转发为例,通常使用处理器有效地进行报文处理,来满足短时间内处理大量的报文和有效地增加报文处理的需求。在过去,报文处理使用通用处理器(general purposeprocessor,gpp),或专用集成电路(application specific integrated circuits,asic),其中,gpp未针对适用于报文转发的需求而被特殊设计,因此gpp在处理报文转发的性能较差,导致gpp处理报文转发的速率较慢。而asic可以针对适用于报文转发而被特殊设计的集成电路,可以快速的处理报文转发工作,但常被用于特定格式的报文转发工作而被特殊设计,其计算逻辑已经固定在硬件中,未具有可编程能力,也就是说asic芯片确定后无法进行修改或者很难修改升级以增加新功能,因此,asic灵活度不够高。
因此,为了兼顾处理速度性能和灵活性的要求,可编程的多线程处理器被开发出来。多线程处理器的可编程能力可以适应各种报文格式,满足灵活性要求,另外多线程处理器可以运行多个线程,能够同时处理多个报文,满足处理速度性能。
现有技术中,提出了一种多线程处理器,该处理器包括基于运行至止(run tocomplete,rtc)结构的多个执行模块,可以同时处理不同的报文,执行模块中包括有一个指令引擎,每个执行模块以流水线方式依次执行用于处理该报文对应的处理指令。该处理器在处理报文时,通过执行模块以完成不同的报文处理动作,直至处理完毕。由于执行模块只包括一个指令引擎,执行模块处理每个报文包时,每个时间周期内能同时执行的指令数受限,现有处理器的做法,报文处理的效率较低。
发明内容
本申请实施例提供了一种处理器以及线程处理方法,用于解决报文处理效率较低的问题。
为了解决上述问题,本申请实施例提供以下技术方案:
本申请实施例第一方面提供了一种处理器,其特征在于,处理器包括输入调度模块、执行模块、存储模块以及输出调度模块,其中,输入调度模块和输出调度模块分别与执行模块连接,执行模块至少包括一个指令引擎;输入调度模块,用于对未分配线程号的线程分配线程号,并按照预设调度方式将已分配线程号的线程送入执行模块;执行模块,用于通过执行引擎执行线程所对应的指令以对线程的上下文(context)进行处理;输出调度模块,用于确定经过执行模块处理后输出的线程是否要继续处理;若要,则将线程环回至输入调度模块。
从以上方案可以看出,对于执行模块输出的需要继续处理的线程,该线程将在输出调度模块和输入调度模块之间环回处理,直至该线程不需要继续处理,这样,可以有效地保证该线程对应的任务被成功执行,以报文转发为例,可以有效地提高报文处理效率。
在一种可能的实现中,处理器还包括存储模块;该存储模块用于存储线程的上下文。例如,用于存储所述输出调度模块环回至所述输入调度模块的线程的上下文,以便所述输入调度模块调度所述环回的线程时从所述存储获取所述环回的线程的上下文。另外,可选的,该存储模块的存储深度为处理器的线程数总数,能够存储所所有线程的上下文。
在一种可能的实现中,输出调度模块具体用于:根据线程的上下文确定经过执行模块处理后输出的线程是否要继续处理,若线程的上下文指示要继续处理,则将线程环回至输入调度模块。
在一种可能的实现中,执行模块还用于:根据线程的上下文确定是否要在当前指令引擎进行环回处理,若要,则在当前指令引擎对线程进行环回处理。
在一种可能的实现中,指令引擎包括指令存储单元和执行单元,执行单元为算术逻辑单元ALU矩阵;指令存储单元,用于存储被送入指令引擎的线程对应的指令;执行单元,用于执行指令。
在一种可能的实现中,执行模块中的任意一个指令引擎为RTC结构或流水线(PIPLINE)结构。
在一种可能的实现中,执行模块还包括部分向量编辑单元以及全部向量编辑单元;其中,部分向量编辑单元,用于将线程的上下文分为部分向量和非部分向量,将非部分向量输送至全部向量编辑单元,将部分向量输入至指令引擎进行处理,其中,部分向量为线程的上下文中不需要指令引擎处理的部分,非部分向量为线程的上下文中需要指令引擎处理的部分;全部向量编辑单元,用于将从部分向量编辑单元接收到的非部分向量,以及经过指令引擎处理后的部分向量进行合并。
在一种可能的实现中,执行模块还包括数据调度单元;该数据调度单元,用于当指令引擎执行线程时发起IO访问的,将IO访问对应的返回数据合并入线程的上下文。
在一种可能的实现中,输入调度模块具体用于:按照先输入先分配原则为接收到的线程分配线程号,并按照先分配先调度原则将已分配线程号的线程输入至执行模块。
本申请实施例第二方面提供了一种线程处理方法,该方法应用于处理器中,其特征在于,处理器包括输入调度模块、执行模块以及输出调度模块,其中,输入调度模块和输出调度模块分别与执行模块连接,执行模块至少包括一个指令引擎;输入调度模块对未分配线程号的线程分配线程号,并按照预设调度方式将已分配线程号的线程送入执行模块;执行模块通过指令引擎执行线程对应的指令以对线程的上下文进行处理;输出调度模块确定经过执行模块处理后输出的线程是否要继续处理;若要,则将线程环回至输入调度模块。
在一种可能的实现中,输出调度模块确定经过执行模块处理后输出的线程是否要继续处理,包括:输出调度模块根据线程的上下文确定经过执行模块处理后输出的线程是否要继续处理,若线程的上下文指示要继续处理,则将线程环回至输入调度模块。
在一种可能的实现中,执行模块通过指令引擎执行线程对应的指令以对线程的上下文进行处理之后,方法还包括:执行模块根据线程的上下文确定是否要在当前指令引擎进行环回处理,若要,则在当前指令引擎对线程进行环回处理。
在一种可能的实现中,执行模块还包括部分向量编辑单元以及全部向量编辑单元;其中,部分向量编辑单元将线程的上下文分为部分向量和非部分向量,将非部分向量输送至全部向量编辑单元,将部分向量输入至指令引擎进行处理,其中,部分向量为线程的上下文中不需要指令引擎处理的部分,非部分向量为线程的上下文中需要指令引擎处理的部分;全部向量编辑单元将从部分向量编辑单元接收到的非部分向量,以及经过指令引擎处理后的部分向量进行合并。
在一种可能的实现中,执行模块还包括数据调度单元;当指令引擎执行线程时发起IO访问的,数据调度单元将IO访问对应的返回数据合并入线程的上下文。
在一种可能的实现中,输入调度模块对未分配线程号的线程分配线程号,并按照预设调度方式将已分配线程号的线程送入执行模块包括:输入调度模块按照先输入先分配原则为接收到的线程分配线程号,并按照先分配先调度原则将已分配线程号的线程输入至执行模块。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,还可以根据这些附图获得其他的附图。
图1为本申请实施例一种处理器的框架示意图;
图2为本申请实施例一种处理器一个实施例结构示意图;
图3为本申请实施例一种处理器另一实施例结构示意图;
图4为本申请实施例一种处理器另一实施例结构示意图;
图5为本申请实施例一种处理器另一实施例结构示意图。
具体实施方式
本申请实施例提供了一种处理器以及线程处理方法,用于解决报文处理效率较低的问题。
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,描述本申请实施例中的技术方案。显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员所获得的所有其他实施例,都应当属于本申请保护的范围。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
以下对本申请实施例进行说明。
首先,先对本申请实施例的处理器的整体框架进行描述,请参阅图1,图1为本申请实施例一种处理器的框架示意图,该处理器包括输入调度模块、输出调度模块以及执行模块,输入调度模块和输出调度模块分别与执行模块连接,上述处理器内的模块之间通过内部总线(internal bus)进行连接,其中,内部总线也称片内总线或内总线,处理器内部总线包括数据总线和地址总线,可选的,可以使用数据总线和地址总线复用技术使得处理器内的模块交互数据/指令交互,具体关于上述内部总线的内容这里不再展开叙述。该执行模块包括N个指令引擎(instruction engine,ie),即该执行模块包括ie0、ie1、ie2,…,ieN,N大于或等于1,换言之,该执行模块至少包括一个指令引擎,若有多个指令引擎,则各个指令引擎之间依次连接,示例性的,各个指令引擎之间的连接关系如图1所示。另外需要说明的是,在本申请实施例中,输入调度模块也称为(input scheduler,is),执行模块也称为(actionunit,au),输出调度模块也称为(output scheduler,os)。上述对图1所示的处理器的框架和以及处理器内部各个模块之间连接关系进行了描述,接下来对处理器各个模块的功能或作用进行描述。
如图1所示,输入调度模块用于对输入至处理器,并且未分配线程号的线程分配线程号,并按照预设调度方式将已分配线程号的线程送入执行模块。其中,上述线程对应某项待处理的任务,上述待处理的任务可以是某项报文处理任务,该报文处理任务具体可以是报文检测、报文封装、报文分类和报文转发等任务,上述待处理的任务也可以是图像处理任务,该图像处理任务具体的可以为图像增强任务、图像压缩任务、图像识别等任务;当然,上述待处理的任务还可以是数据处理任务或者其他处理任务,本申请实施例不做限定。另外需要说明的是,该处理器为多线程处理器,该处理器可并行处理的线程数可以根据处理器所需的成本,或性能需求进行配置,本申请实施例不做限定,示例性的,该处理器的线程数可以为16、32或64。由以上描述可知,输入调度模块对输入至处理器,并且未分配线程号的线程分配线程号,即一个线程对应一个线程号,例如,当线程数为64时,对应有64个线程号;并且当线程号分配完时,输入调度模块不再为输入至处理器的线程分配线程号,直至已分配线程号的线程被处理完毕并输出至处理器,也就是说,已分配的线程号被处理器回收时输入调度模块可以为新输入至处理器的线程分配线程号。
执行模块,用于通过指令引擎执行被送入该执行模块的线程所对应的指令,以对该线程的上下文进行处理。应理解,一个进程可以包括一个或多个线程,进程为可并发执行的并具有一定功能的程序段在给定数据集上的一次执行过程,为处理器进行资源分配和调度的单元,也就是说,线程为进程在处理器执行任务时的最小运行单元,上述程序段指的是一段有序指令的集合,上述给定数据集为处理器执行上述指令所涉及的数据集合(包括线程的上下文),简而言之,线程是与指令之间是相对应的,线程包括具有一定功能的有序指令。在本申请实施例中,执行模块通过指令引擎执行线程对应的指令,以对该线程的上下文进行处理。
输出调度模块,用于确定经过执行模块处理后从所述执行模块输出的线程是否要继续处理,若要,则将该线程环回至输入调度模块;若不需要,则将该线程从该处理器中输出,并回收该线程对应的线程号。对于输入调度模块而言,输入调度模块在新分配线程号的线程和输出调度模块环回的线程之间进行调度按照所述预设调度方式,将调度的线程送入执行模块。
从以上方案可以看出,对于执行模块输出的需要继续处理的线程,该线程将在输出调度模块和输入调度模块之间环回处理,直至该线程不需要继续处理,这样,可以有效地保证该线程对应的任务被成功执行,以报文处理为例,可以有效地提高报文处理成功率。
在本申请的一些实施例中,如图2所示,所述处理器还包括存储模块,所述存储模块,用于存储被输送入处理器的线程的上下文。例如,用于存储所述输出调度模块环回至所述输入调度模块的线程的上下文,以便所述输入调度模块调度所述环回的线程时从所述存储获取所述环回的线程的上下文。另外,可选的,该存储模块的存储深度为处理器的线程数总数,能够存储所所有线程的上下文。
在本申请的一些实施例中,在输入调度模块按照预设调度方式从已分配线程号的线程(包括输出调度模块环回至输入调度模块的线程)送入执行模块,具体可以有多种调度方式,包括轮询调度方式和固定优先级调度方式。其中,轮询调度方式指的是对于每个处理周期而言,按照先输入先分配原则为输送到处理器的线程分配线程号,并按照先分配先调度的原则将以分配线程号的线程输入至执行模块。例如,对于有16个线程数的处理器(假设线程号为0~15),所有已分配线程号的线程轮流被选中,输入调度模块轮流的选择的线程为0→1→2→3→…→15→0→…,按照上述调度方式将已分配线程号的线程送入执行模块。而固定优先级调度方式指的是,已经分配线程号的线程具有不同的优先级权重,输入调度模块根据线程的优先级权重的高低顺序,依次将已分配线程号的线程送入执行模块。例如,以优先级权重越高先调度为例,输入调度模块在调度已分配线程号的线程时,先选择其中优先级权重最高的线程输送至执行模块,然后按照优先级权重高→低的顺序,对应输送线程至执行模块。需要说明的是,上述优先级权重的衡量方法有很多,如:线程中指令越少的优先级越高、线程被停顿越久优先级越高,这里不做限定。
在本申请的一些实施例中,输出调度模块根据执行模块处理后输出的线程的上下文确定该线程是否需要继续处理,若需要,则将该线程环回至输入调度模块;当线程不需要继续处理,则将线程送出处理器,并回收该线程的线程号。
在本申请的一些实施例中,指令引擎包括指令存储单元以及执行单元,执行单元为算数逻辑单元(arithmetic and logic unit,ALU)矩阵。ALU矩阵中的ALU用于执行线程对应的指令,所述指令存储单元用于存储线程对应的指令。示例性的,以图1的指令引擎0为例,该指令引擎0的执行单元包括N×M的ALU矩阵,所述N和M为正整数,所述N≥1,所述M≥1。可以理解,指令引擎还包括取指单元,取指单元用于取线程对应的指令,并将取出来的指令存在指令存储单元中。另外,在实际应用中,指令存储单元可以为静态随机存取存储器(static random access memory,SRAM),具体此处不做限定。
在本申请的一些实施例中,执行模块中的任意一个指令引擎中为运行至于结束为止(run to complete,RTC)结构或流水线(PIPLINE)结构,换言之,执行模块中的任意一个指令引擎可以为RTC结构,也可以为PIPLINE结构,本申请实施例不做限定。其中,当指令引擎为RTC结构时,送入指令引擎的线程将在该指令引擎中一直运行,直至发现结束标记后被送出该指令引擎,可选的,该结束标记为该指令引擎从指令存储单元中从读出的结束指令。当指令引擎为PIPLINE结构时,送入该指令引擎的线程将在该指令引擎中运行固定阶数(ALU阵列阶数),当运行完固定阶数后线程被送出该指令引擎。示例性的,同样以图1的指令引擎0为例,假设指令引擎0中指令单元为N×M的ALU矩阵,送入该指令引擎0的线程将在该指令引擎0中运行固定阶数N,当运行完固定N阶后线程被送出该指令引擎0。可选的,在本申请的一些实施例中,对于处理器中的任意一个指令引擎,当线程被送出该指令引擎后,如果需要继续在该指令引擎运行,可以将该线程环回至该指令引擎的输入口,其中,环回的次数可以通过线程的上下文进行控制,具体这里也不做限定。
在本申请的一些实施例中,所述执行模块还包括部分向量编辑单元(partialvector builder,pv builder)以及全部向量编辑单元(full vector builder,fvbuilder)。
其中,所述部分向量编辑单元,用于将输入至执行模块的线程的上下文分为部分向量(partial vector,pv)和非部分向量(not partial vector,npv),将所述非部分向量输送至所述全部向量编辑单元,将部分向量输入至所述执行引擎进行处理,其中,所述部分向量为所述线程的上下文中不需要所述指令引擎处理的部分,非部分向量为线程的上下文中需要指令引擎处理的部分;所述全部向量编辑单元,用于将从所述部分向量编辑单元接收到的所述非部分向量,以及经过所述指令引擎处理后的所述部分向量进行合并。
为了便于理解,示例性的,请参阅图3所示,以执行模块包括第一指令引擎和第二指令引擎两个指令引擎为例,其中,所述部分向量编辑单元,用于将经过第一执行引擎的线程的上下文分为部分向量和非部分向量。其中,上述部分向量为线程的上下文中不需要指令引擎继续处理的部分,非部分向量为线程的上下文中需要指令引擎继续处理的部分。在部分向量编辑单元将线程第一执行引擎的上下文拆分为pv和npv后,将npv直接输送至所述全部向量编辑单元,将pv输入第二执行引擎进行处理;所述全部向量编辑单元,用于将从所述部分向量编辑单元接收到的非部分向量,以及经过所述第一指令引擎处理后的部分向量进行合并。
需要说明的是,在图3所示的情况下,全部向量编辑单元将所述部分向量编辑单元接收到的非部分向量,以及经过所述第一指令引擎处理后的部分向量进行合并后送入输出调度模块,上述图3在这里只是为了便于理解上述2个编辑单元的功能,以2个指令引擎的情况进行举例说明,但不对本申请中的处理器构成限定。
由上述对处理器的叙述可知,执行模块所包括的指令引擎可以为多个或多个,为了便于理解本申请,下面将以执行模块包括三个指令引擎的情况对本申请实施例进行更为详细描述。
请参阅图4,图4为本申请实施例一种处理器另一结构示意图,该处理器包括输入调度模块、指令引擎0,指令引擎1、指令引擎2、存储模块,除此之外,该处理器还包括数据调度单元(context scheduler,cs),其中,处理器模块之间通过片内总线连接,指令引擎0、指令引擎2均为PIPLINE结构,指令引擎1为RTC结构,指令引擎0、指令引擎2以及指令引擎3的指令单元均为1×8的ALU矩阵,也就是说3个指令引擎中的指令单元的ALU矩阵的阶数均为1,每阶有8个ALU。需要说明的是,上述关于指令引擎中指令执行单元的限定在这里只是举例说明,并不对本申请实施例的指令引擎造成限定。下面对上述各个模块/器之间的工作原理/过程进行描述:
1、输入调度模块为输入的线程分配线程号,其中,输入调度模块能够分配的线程数可以根据处理器所需的性能、成本进行配置,一个线程数对应一个线程号,本申请实施例中不对具体线程数目做限定。示例性,线程数可以为64或32。当线程号分配完时,则输入调度模块不再为新输入至输入调度模块的线程分配线程号,直至已分配线程号的线程被处理器处理完毕。输入调度模块从新分配线程号的线程和输出调度模块环回至输入调度模块的线程中,按照先分配先调度原则选取一个线程送入执行模块。为了便于描述,下文将以线程号为1(以下称线程1)为例,叙述本申请实施例处理器的工作过程。
2、如上所述,在本申请实施例中,执行模块包括3个指令引擎以及1个数据调度单元,线程1进入执行模块后,首先指令引擎0通过执行该线程1对应的指令对线程1的上下文进行处理,并且,该线程1可以在指令引擎0环回(slot)处理,上述环回处理的次数可以根据实际情况利用线程1的上下文的控制域进行控制,具体此处不做限定,另外,线程1经过指令引擎0处理后包括以下两种处理结果,一种是发起输入/输出(input/output,IO)访问,一种是没有发起IO访问,具体如下:
(1)、当指令引擎0处理线程1对应的指令时发起IO访问的,发起IO访问的同时指令引擎0把该线程1的上下文写入存储模块,而发起该IO访问后返回至处理器的返回数据将被送入数据调度单元,等待数据调度单元调度;数据调度单元从上述存储模块获取该线程1对应的上下文,并把该返回数据合并进入指令引擎0从存储模块获取的线程1对应的上下文中,将经过上述合并后的上下文作为该线程1的上下文。当该线程1结束在指令引擎0的环回后,该线程1被指令引擎0送入下一个指令引擎进行处理,即送入指令引擎1进行处理。
(2)、当指令引擎0处理上述线程1对应的指令时没有发起IO访问的,线程1直接被输送到数据调度单元直接请求调度,经数据调度单元调度后线程进入指令引擎1。
3、当线程1进入指令引擎1后,指令引擎1对该线程进行处理,需要说明的是,该线程1也可以在该指令引擎1进行环回处理,具体的环回次数也可以根据实际应用需求利用线程1的上下文的控制域进行控制,此处不做限定。经过指令引擎1处理后的线程1进入指令引擎2。
另外,这里需要说明的是,在本申请实施例中,指令引擎1只在执行模块内部与执行模块内部的其他单元连接,未与执行模块外部的模块连接,在实际应用中,可配置为用于执行不需要发起IO访问的处理动作。当然,在本申请的一些实施例中,指令引擎1也可以与内总线连接,此时,其功能与上述指令引擎0类似,可以发起IO访问,具体请参阅上述关于指令引擎0中的描述,这里不再赘述。
4、当线程1进入指令引擎2后,线程1也可以在该指令引擎2中进行环回处理,环回次数也可以根据实际需求利用线程1的上下文的控制域进行控制,这里也不做限定。另外,线程经过指令引擎2处理后包括以下两种处理结果,一种是发起IO访问,一种是未发起IO访问,具体如下:
(1)、当线程1经过指令引擎2处理时发起IO访问的,线程1被送进输出调度模块,并将线程1的上下文写入存储模块。其中,如果上述IO访问对应的返回数据返回到输入调度模块,则经过输入调度模块调度后进行执行模块,执行模块重复之前的操作,具体此处不再重复描述执行模块的功能/作用。
(2)、当线程1经过指令引擎2处理时没有发起IO访问的,该线程1将被送进输出调度模块,同时回收该线程1的线程号,如果输出调度模块根据线程1的上下文确定线程1需要继续处理,则该线程的1上下文会被写入存储模块,同时将该线程1环回输入调度模块请求调度,经过输入调度模块的调度重新进入执行模块,由执行模块继续处理,具体处理过程这里不再赘述。
下面将以执行模块包括三个指令引擎,并且包括部分向量编辑器以及全部向量编辑器的情况对本申请实施例进行详细描述。
请参阅图5,图5为本申请实施例一种处理器另一结构示意图,该处理器包括输入调度模块、指令引擎0,指令引擎1、指令引擎2、数据调度单元、部分向量编辑器、全部向量编辑器、输入调度模块以及存储模块,其中,指令引擎0、指令引擎1以及指令引擎3的结构均为PIPLINE结构,指令引擎0和指令引擎2的指令单元均为1×8阵列的ALU矩阵,也就是说指令引擎0、2中的指令单元的ALU矩阵的阶数均为1,每阶有8个ALU;而指令引擎1的指令单元为2×8阵列的ALU矩阵。需要说明的是,上述关于上述指令引擎中指令执行单元阶数的限定在这里只是举例说明,并不对本申请实施例的指令引擎造成限定。下面对上述各个模块/器之间的工作原理/过程进行描述:
1、输入调度模块为输入的线程分配线程号,其中,输入调度模块能够分配的线程数可以根据处理器所需的性能、成本的原因进行配置,一个线程数对应一个线程号,本申请实施例中不对具体线程数目做限定。示例性,线程数可以为64或32。当线程号分配完时,则输入调度模块不再为新输入至输入调度模块的线程分配线程号,直至已分配线程号的线程被处理完毕并输出至处理器。输入调度模块从新分配线程号的线程和输出调度模块环回至输入调度模块的线程中,选取一个线程送入执行模块。为了便于描述,下文将以线程号为1(以下称线程1)为例,叙述本申请实施例处理器的工作过程。
2、如上所述,在本申请实施例中,执行模块包括3个指令引擎、1个部分向量编辑器、1个全部向量编辑器和1个数据调度单元,线程1进入执行模块后,首先指令引擎0通过执行该线程1对应的指令对线程1的上下文进行处理,并且,该线程1可以在指令引擎0中环回处理,上述环回处理的次数可以根据实际情况利用线程1的控制域进行控制,具体此处不做限定,另外,线程1经过指令引擎0处理后包括以下两种处理结果,一种是发起IO访问,一种是没有发起IO访问,具体如下:
(1)、当指令引擎0处理线程1对应的指令时发起IO访问的,发起IO访问的同时指令引擎0把线程1的上下文写入存储模块,而发起该IO访问后返回至处理器的返回数据将被送入数据调度单元,等待数据调度单元,数据调度单元调度后从存储模块读取该线程1对应的上下文,并把该返回数据合并进入指令引擎0从存储模块读取的线程1对应的上下文中,将经过上述合并后的上下文作为该线程1的上下文,之后将上述合并后的线程1的上下文送入部分向量编辑器。
(2)、当指令引擎0处理上述线程1对应的指令后,对线程1的上下文进行处理时没有发出IO访问的,线程1直接被输送到数据调度单元请求调度,经过数据调度单元调度后线程1的上下文进入部分向量数据编辑器。
2、部分向量编辑器用于将线程1的上下文拆分为部分向量(pv)以及非部分向量(npv),其中,pv部分进入指令引擎1进行处理,npv部分被送入全部向量编辑器。
3、指令引擎1接收到上述部分向量后,对该部分向量进行处理,需要说明的是,此时,该线程1也可以在该指令引擎1进行环回处理,具体的环回次数也可以根据实际应用需求进行配置,具体此处不做限定。指令引擎1处理完线程1对应的pv进入全部向量编辑器。
4、全部向量编辑器用于将指令引擎1送过来的pv,以及部分向量编辑器送过来的npv合并为全部向量(fv),并将fv送入指令引擎2。这里值得注意的是,这里的fv也就是经过全部向量编辑器处理后,线程1对应的上下文。
5、指令引擎2用于对fv进行处理,同理,此时的线程1也可以在该指令引擎2中进行环回处理,环回次数也可以根据实际需求利用线程1的上下文的控制域进行配置,这里不做限定。另外,经过指令引擎2处理后包括以下两种处理结果,一种是发起IO访问,一种是未发起IO访问,具体如下:
(1)、当线程1经过指令引擎2处理时发起IO访问的,线程1被送进输出调度模块,并将线程1的上下文写入存储模块。其中,如果上述IO访问对应的返回数据返回到输入调度模块,则经过输入调度模块调度后进行执行模块,执行模块重复之前的操作,具体此处不再重复描述执行模块的功能/作用。
(2)、当线程1经过指令引擎2处理时没有发起IO访问的,该线程1将被送进输出调度模块,同时回收该线程1的线程号,如果输出调度模块根据线程1的上下文确定线程1需要继续处理,则该线程的1上下文会被写入存储模块,同时将该线程1环回输入调度模块请求调度,经过输入调度模块的调度重新进入执行模块,由执行模块继续处理,具体处理过程这里不再赘述。
基于上述处理器,本申请实施例对应提出了一种线程处理方法,该方法应用于处理器中,所述处理器包括输入调度模块、执行模块以及输出调度模块,其中,所述输入调度模块和所述输出调度模块分别与所述执行模块连接,所述执行模块至少包括一个指令引擎;
所述输入调度模块对未分配线程号的线程分配线程号,并按照预设调度方式将已分配线程号的线程送入所述执行模块;
所述执行模块通过所述指令引擎执行所述线程对应的指令以对所述线程的上下文进行处理;
所述输出调度模块确定经过所述执行模块处理后输出的所述线程是否要继续处理;若要,则将所述线程环回至所述输入调度模块。
在本申请的一些实施例中,所述输出调度模块确定经过所述执行模块处理后输出的所述线程是否要继续处理,包括:
所述输出调度模块根据所述线程的上下文确定经过所述执行模块处理后输出的所述线程是否要继续处理,若所述线程的上下文指示要继续处理,则将所述线程环回至所述输入调度模块。
在本申请的一些实施例中,所述执行模块通过所述指令引擎执行所述线程对应的指令以对所述线程的上下文进行处理之后,所述方法还包括:
所述执行模块根据所述线程的上下文确定是否要在当前指令引擎进行环回处理,若要,则在所述当前指令引擎对所述线程进行环回处理。
在本申请的一些实施例中,所述执行模块还包括部分向量编辑单元以及全部向量编辑单元;
所述部分向量编辑单元将所述线程的上下文分为部分向量和非部分向量,将所述非部分向量输送至所述全部向量编辑单元,将部分向量输入至所述指令引擎进行处理,其中,所述部分向量为所述线程的上下文中不需要所述指令引擎处理的部分,非部分向量为所述线程的上下文中需要所述指令引擎处理的部分;
所述全部向量编辑单元将从所述部分向量编辑单元接收到的所述非部分向量,以及经过所述指令引擎处理后的所述部分向量进行合并。
在本申请的一些实施例中,所述执行模块还包括数据调度单元;
当所述指令引擎执行所述线程时发起IO访问的,所述数据调度单元将所述IO访问对应的返回数据合并入所述线程所述线程的上下文。
在本申请的一些实施例中,所述输入调度模块对未分配线程号的线程分配线程号,并按照预设调度方式将已分配线程号的线程送入所述执行模块包括:
所述输入调度模块按照先所述输入先分配原则为所述接收到的线程分配线程号,并按照先分配先调度原则将已分配线程号的线程输入至所述执行模块。
需要说明的是,上述本线程处理方法中,各各模块/单元之间的信息交互、执行过程等内容,由于与前述关于处理器的实施例基于同一构思,其带来的技术效果与本申请关于处理器的实施例相同,具体内容可参见本申请前述所示的处理器实施例中的叙述,此处不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,模块和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件的方式来实现,当然也可以通过专用硬件包括专用集成电路、专用CPU、专用存储器、专用元器件等来实现。一般情况下,凡由计算机程序完成的功能都可以很容易地用相应的硬件来实现,而且,用来实现同一功能的具体硬件结构也可以是多种多样的,例如模拟电路、数字电路或专用电路等。但是,对本申请而言更多情况下软件程序实现是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘、U盘、移动硬盘、只读存储器、随机存取存储器、磁碟或者光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述的方法。
以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。

Claims (11)

1.一种处理器,其特征在于,所述处理器包括输入调度模块、执行模块、存储模块以及输出调度模块,其中,所述输入调度模块和所述输出调度模块分别与所述执行模块连接,所述执行模块至少包括一个指令引擎;
所述输入调度模块,用于对未分配线程号的线程分配线程号,并按照预设调度方式将已分配线程号的线程送入执行模块;
所述执行模块,用于通过所述指令引擎执行所述线程所对应的指令以对所述线程的上下文进行处理,根据所述线程的上下文确定是否要在当前指令引擎进行环回处理,若要,则在所述当前指令引擎对所述线程进行环回处理,所述环回处理的次数根据所述线程的上下文的控制域确定;
所述输出调度模块,用于确定经过所述执行模块处理后输出的所述线程是否要继续处理;若要,则将所述线程环回至所述输入调度模块;
所述执行模块还包括部分向量编辑单元以及全部向量编辑单元;
其中,所述部分向量编辑单元,用于将所述线程的上下文分为部分向量和非部分向量,将所述非部分向量输送至所述全部向量编辑单元,将部分向量输入至所述指令引擎进行处理,其中,所述部分向量为所述线程的上下文中不需要所述指令引擎处理的部分,非部分向量为所述线程的上下文中需要所述指令引擎处理的部分;
所述全部向量编辑单元,用于将从所述部分向量编辑单元接收到的所述非部分向量,以及经过所述指令引擎处理后的所述部分向量进行合并。
2.根据权利要求1所述的处理器,其特征在于,所述处理器还包括存储模块;
所述存储模块,用于存储所述线程的上下文。
3.根据权利要求1或2所述的处理器,其特征在于,所述输出调度模块具体用于:
根据所述线程的上下文确定经过所述执行模块处理后输出的所述线程是否要继续处理,若所述线程的上下文指示要继续处理,则将所述线程环回至所述输入调度模块。
4.根据权利要求1-2任一项所述的处理器,其特征在于,所述指令引擎包括指令存储单元和执行单元,所述执行单元为算术逻辑单元ALU矩阵;
所述指令存储单元,用于存储被送入所述执行模块的线程对应的指令;
所述执行单元,用于执行所述指令。
5.根据权利要求1-2任一项所述的处理器,其特征在于,所述执行模块中的任意一个指令引擎为运行至结束RTC结构或流水线PIPLINE结构。
6.根据权利要求1-2任一项所述的处理器,其特征在于,所述执行模块还包括数据调度单元;
所述数据调度单元,用于当所述指令引擎执行所述线程时发起IO访问的,将所述IO访问对应的返回数据合并入所述线程所述线程的上下文。
7.根据权利要求1-2任一项所述的处理器,其特征在于,所述输入调度模块具体用于:
按照先输入先分配原则为所述接收到的线程分配线程号,并按照先分配先调度原则将已分配线程号的线程输入至所述执行模块。
8.一种线程处理方法,所述线程处理方法应用于处理器中,其特征在于,所述处理器包括输入调度模块、执行模块以及输出调度模块,其中,所述输入调度模块和所述输出调度模块分别与所述执行模块连接,所述执行模块至少包括一个指令引擎;
所述输入调度模块对未分配线程号的线程分配线程号,并按照预设调度方式将已分配线程号的线程送入所述执行模块;
所述执行模块通过所述指令引擎执行所述线程对应的指令以对所述线程的上下文进行处理;
所述输出调度模块确定经过所述执行模块处理后输出的所述线程是否要继续处理;若要,则将所述线程环回至所述输入调度模块;
所述执行模块通过所述指令引擎执行所述线程对应的指令以对所述线程的上下文进行处理之后,所述方法还包括:
所述执行模块根据所述线程的上下文确定是否要在当前指令引擎进行环回处理,若要,则在所述当前指令引擎对所述线程进行环回处理,所述环回处理的次数根据所述线程的上下文的控制域确定;
所述执行模块还包括部分向量编辑单元以及全部向量编辑单元;
所述部分向量编辑单元将所述线程的上下文分为部分向量和非部分向量,将所述非部分向量输送至所述全部向量编辑单元,将部分向量输入至所述指令引擎进行处理,其中,所述部分向量为所述线程的上下文中不需要所述指令引擎处理的部分,非部分向量为所述线程的上下文中需要所述指令引擎处理的部分;
所述全部向量编辑单元将从所述部分向量编辑单元接收到的所述非部分向量,以及经过所述指令引擎处理后的所述部分向量进行合并。
9.根据权利要求8所述的方法,其特征在于,所述输出调度模块确定经过所述执行模块处理后输出的所述线程是否要继续处理,包括:
所述输出调度模块根据所述线程的上下文确定经过所述执行模块处理后输出的所述线程是否要继续处理,若所述线程的上下文指示要继续处理,则将所述线程环回至所述输入调度模块。
10.根据权利要求8-9任一项所述的方法,其特征在于,所述执行模块还包括数据调度单元;
当所述指令引擎执行所述线程时发起IO访问的,所述数据调度单元将所述IO访问对应的返回数据合并入所述线程所述线程的上下文。
11.根据权利要求8-9任一项所述的方法,其特征在于,所述输入调度模块对未分配线程号的线程分配线程号,并按照预设调度方式将已分配线程号的线程送入所述执行模块包括:
所述输入调度模块按照先输入先分配原则为所述接收到的线程分配线程号,并按照先分配先调度原则将已分配线程号的线程输入至所述执行模块。
CN201711146942.0A 2017-11-17 2017-11-17 一种处理器和线程处理方法 Active CN109800064B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201711146942.0A CN109800064B (zh) 2017-11-17 2017-11-17 一种处理器和线程处理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201711146942.0A CN109800064B (zh) 2017-11-17 2017-11-17 一种处理器和线程处理方法

Publications (2)

Publication Number Publication Date
CN109800064A CN109800064A (zh) 2019-05-24
CN109800064B true CN109800064B (zh) 2024-01-30

Family

ID=66556034

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201711146942.0A Active CN109800064B (zh) 2017-11-17 2017-11-17 一种处理器和线程处理方法

Country Status (1)

Country Link
CN (1) CN109800064B (zh)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1867891A (zh) * 2002-05-31 2006-11-22 德拉华州大学 用于实时多线程处理的方法和装置
CN101540727A (zh) * 2009-05-05 2009-09-23 曙光信息产业(北京)有限公司 一种ip报文的硬件分流方法
CN103493440A (zh) * 2011-04-20 2014-01-01 飞思卡尔半导体公司 集成电路装置和执行直通转发的方法

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6826749B2 (en) * 1998-12-08 2004-11-30 Nazomi Communications, Inc. Java hardware accelerator using thread manager
US8473964B2 (en) * 2008-09-30 2013-06-25 Microsoft Corporation Transparent user mode scheduling on traditional threading systems
US20100161938A1 (en) * 2008-12-23 2010-06-24 Marco Heddes System-On-A-Chip Supporting A Networked Array Of Configurable Symmetric Multiprocessing Nodes
US9355029B2 (en) * 2013-06-28 2016-05-31 Sap Se Thread-based memory management with garbage collection

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1867891A (zh) * 2002-05-31 2006-11-22 德拉华州大学 用于实时多线程处理的方法和装置
CN101540727A (zh) * 2009-05-05 2009-09-23 曙光信息产业(北京)有限公司 一种ip报文的硬件分流方法
CN103493440A (zh) * 2011-04-20 2014-01-01 飞思卡尔半导体公司 集成电路装置和执行直通转发的方法

Also Published As

Publication number Publication date
CN109800064A (zh) 2019-05-24

Similar Documents

Publication Publication Date Title
US10768989B2 (en) Virtual vector processing
CN110489213B (zh) 一种任务处理方法及处理装置、计算机系统
EP0502680B1 (en) Synchronous multiprocessor efficiently utilizing processors having different performance characteristics
US8402466B2 (en) Practical contention-free distributed weighted fair-share scheduler
US8963933B2 (en) Method for urgency-based preemption of a process
CN110955535B (zh) 一种多业务请求进程调用fpga设备的方法及相关装置
CN110308982B (zh) 一种共享内存复用方法及装置
CN104094235B (zh) 多线程计算
WO2013121085A2 (en) Method, apparatus, and computer program product for inter-core communication in multi-core processors
US20210311782A1 (en) Thread scheduling for multithreaded data processing environments
US10318456B2 (en) Validation of correctness of interrupt triggers and delivery
CN114637536A (zh) 任务处理方法、计算协处理器、芯片及计算机设备
CN102334104A (zh) 一种基于多核系统的同步处理方法及装置
CN110245024B (zh) 静态存储块的动态分配系统及其方法
US11875425B2 (en) Implementing heterogeneous wavefronts on a graphics processing unit (GPU)
CN113721990A (zh) 数据处理方法、数据处理设备、加速卡和存储介质
CN111913816A (zh) Gpgpu中簇的实现方法、装置、终端及介质
CN109800064B (zh) 一种处理器和线程处理方法
CN112395062A (zh) 任务处理方法、装置、设备及计算机可读存储介质
US20190317827A1 (en) Method and apparatus for managing kernel services in multi-core system
US20220300322A1 (en) Cascading of Graph Streaming Processors
CN110955461A (zh) 计算任务的处理方法、装置、系统、服务器和存储介质
CN112486638A (zh) 用于执行处理任务的方法、装置、设备和存储介质
CN111209079A (zh) 一种基于鲲鹏处理器的调度方法、装置及介质
CN111443898A (zh) 基于优先级队列与有限状态机的流程式控制软件设计方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant