CN112463327B - 逻辑线程快速切换的方法、装置、cpu芯片及服务器 - Google Patents
逻辑线程快速切换的方法、装置、cpu芯片及服务器 Download PDFInfo
- Publication number
- CN112463327B CN112463327B CN202011342494.3A CN202011342494A CN112463327B CN 112463327 B CN112463327 B CN 112463327B CN 202011342494 A CN202011342494 A CN 202011342494A CN 112463327 B CN112463327 B CN 112463327B
- Authority
- CN
- China
- Prior art keywords
- register
- pointer
- memory
- thread
- cpu
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/321—Program or instruction counter, e.g. incrementing
Abstract
本发明的实施例公开了一种逻辑线程快速切换的方法、装置、CPU芯片及服务器,涉及集成电路技术领域,能够提高线程切换速度。所述逻辑线程快速切换的方法,应用于CPU,所述CPU的寄存器包括至少两行存储单元,每行存储单元对应一个逻辑线程执行现场,所述方法包括:接收存储单元行切换指令,所述存储单元行切换指令包含下一个需要运行的逻辑线程执行现场的内存地址;若所述寄存器中某行的存储单元的内存地址等于所述下一个需要运行的逻辑线程执行现场的内存地址,则根据该存储单元更新所述寄存器的当前线程行指针和所述CPU的PC指针。本发明适用于提高线程切换速度的场合。
Description
技术领域
本发明涉及集成电路技术领域,尤其涉及一种逻辑线程快速切换的方法、装置、CPU芯片及服务器。
背景技术
用户程序在CPU(Central Processing Unit,中央处理器)上执行时,对应到CPU的一个逻辑线程。逻辑线程包括内存中的用户程序代码、数据和CPU的线程执行现场(context)。CPU的线程执行现场通常由CPU使用的全部寄存器(即寄存器堆)组成。
CPU的寄存器堆(Register File),代表一个逻辑线程的现场。它存储了逻辑线程正在使用的寄存器数据。寄存器堆本质上是一小块SRAM(Static Random-Access Memory,静态随机存取存储器),通过指令中的寄存器域进行寻址。
现有技术中,一个CPU通常只包含一个线程执行现场。线程的切换需要软件保存前一个线程的执行现场到内存,并恢复下一个线程的执行现场到CPU的寄存器中。整个过程对应程序控制的寄存器的导出/导入,无法实现快速的切换。
发明内容
有鉴于此,本发明实施例提供一种逻辑线程快速切换的方法、装置、CPU芯片及服务器,以提高线程切换速度。
第一方面,本发明实施例提供一种逻辑线程快速切换的方法,应用于中央处理器CPU,所述CPU的寄存器包括至少两行存储单元,每行存储单元对应一个逻辑线程执行现场,每行存储单元均包括逻辑线程执行现场的内存地址、每个逻辑线程私有的通用寄存器、每个逻辑线程的程序计数器PC指针和状态寄存器,所述寄存器还包括当前线程行指针,所述当前线程行指针用于指向正在运行的逻辑线程使用的存储单元所在的行,所述方法包括:
接收存储单元行切换指令,所述存储单元行切换指令包含下一个需要运行的逻辑线程执行现场的内存地址;
若所述寄存器中某行的存储单元的内存地址等于所述下一个需要运行的逻辑线程执行现场的内存地址,则根据该存储单元更新所述寄存器的当前线程行指针和所述CPU的PC指针。
结合第一方面,在第一方面的一种实施方式中,所述接收存储单元行切换指令,包括:
将所述CPU的PC指针保存在当前运行的逻辑线程执行现场对应的存储单元的PC指针处;
和/或,所述接收存储单元行切换指令之前包括:
若所述CPU执行指令的结果影响状态寄存器,则将最新状态保存在当前运行的逻辑线程执行现场对应的存储单元的状态寄存器。
结合第一方面,在第一方面的另一种实施方式中,所述接收存储单元行切换指令之后包括:
若所述寄存器中所有行的存储单元的内存地址均不等于所述下一个需要运行的逻辑线程执行现场的内存地址且所述寄存器中存在一行空的存储单元,则根据所述下一个需要运行的逻辑线程执行现场的内存地址,从内存中将对应的逻辑线程执行现场加载至所述空的存储单元,并根据该存储单元更新所述寄存器的当前线程行指针和所述CPU的PC指针。
结合第一方面,在第一方面的再一种实施方式中,所述接收存储单元行切换指令之后包括:
若所述寄存器中所有行的存储单元的内存地址均不等于所述下一个需要运行的逻辑线程执行现场的内存地址且所述寄存器中不存在一行空的存储单元,则从所述寄存器中选择最长时间未使用的一行存储单元,将其通用寄存器、PC指针和状态寄存器保存至内存,然后根据所述下一个需要运行的逻辑线程执行现场的内存地址,从内存中将对应的逻辑线程执行现场加载至该存储单元,并根据该存储单元更新所述寄存器的当前线程行指针和所述CPU的PC指针。
结合第一方面,在第一方面的又一种实施方式中,所述根据该存储单元更新所述寄存器的当前线程行指针和所述CPU的PC指针,包括:
将该存储单元的行数赋值给所述寄存器的当前线程行指针;
将该存储单元的PC指针加1后赋值给所述CPU的PC指针。
第二方面,本发明实施例提供一种逻辑线程快速切换的装置,应用于中央处理器CPU,所述CPU的寄存器包括至少两行存储单元,每行存储单元对应一个逻辑线程执行现场,每行存储单元均包括逻辑线程执行现场的内存地址、每个逻辑线程私有的通用寄存器、每个逻辑线程的程序计数器PC指针和状态寄存器,所述寄存器还包括当前线程行指针,所述当前线程行指针用于指向正在运行的逻辑线程使用的存储单元所在的行,所述装置包括:
接收模块,用于接收存储单元行切换指令,所述存储单元行切换指令包含下一个需要运行的逻辑线程执行现场的内存地址;
第一切换模块,用于若所述寄存器中某行的存储单元的内存地址等于所述下一个需要运行的逻辑线程执行现场的内存地址,则根据该存储单元更新所述寄存器的当前线程行指针和所述CPU的PC指针。
结合第二方面,在第二方面的一种实施方式中,所述接收模块包括:
指针保存子模块,用于将所述CPU的PC指针保存在当前运行的逻辑线程执行现场对应的存储单元的PC指针处;
和/或,所述装置包括:
状态保存模块,用于若所述CPU执行指令的结果影响状态寄存器,则将最新状态保存在当前运行的逻辑线程执行现场对应的存储单元的状态寄存器。
结合第二方面,在第二方面的另一种实施方式中,所述装置包括:
第二切换模块,用于若所述寄存器中所有行的存储单元的内存地址均不等于所述下一个需要运行的逻辑线程执行现场的内存地址且所述寄存器中存在一行空的存储单元,则根据所述下一个需要运行的逻辑线程执行现场的内存地址,从内存中将对应的逻辑线程执行现场加载至所述空的存储单元,并根据该存储单元更新所述寄存器的当前线程行指针和所述CPU的PC指针。
结合第二方面,在第二方面的再一种实施方式中,所述装置包括:
第三切换模块,用于若所述寄存器中所有行的存储单元的内存地址均不等于所述下一个需要运行的逻辑线程执行现场的内存地址且所述寄存器中不存在一行空的存储单元,则从所述寄存器中选择最长时间未使用的一行存储单元,将其通用寄存器、PC指针和状态寄存器保存至内存,然后根据所述下一个需要运行的逻辑线程执行现场的内存地址,从内存中将对应的逻辑线程执行现场加载至该存储单元,并根据该存储单元更新所述寄存器的当前线程行指针和所述CPU的PC指针。
结合第二方面,在第二方面的又一种实施方式中,所述根据该存储单元更新所述寄存器的当前线程行指针和所述CPU的PC指针,包括:
将该存储单元的行数赋值给所述寄存器的当前线程行指针;
将该存储单元的PC指针加1后赋值给所述CPU的PC指针。
第三方面,本发明实施例提供一种CPU芯片,包括:处理器核心;
所述CPU的寄存器包括至少两行存储单元,每行存储单元对应一个逻辑线程执行现场,每行存储单元均包括逻辑线程执行现场的内存地址、每个逻辑线程私有的通用寄存器、每个逻辑线程的程序计数器PC指针和状态寄存器,所述寄存器还包括当前线程行指针,所述当前线程行指针用于指向正在运行的逻辑线程使用的存储单元所在的行;
所述处理器核心,用于接收存储单元行切换指令,所述存储单元行切换指令包含下一个需要运行的逻辑线程执行现场的内存地址;若所述寄存器中某行的存储单元的内存地址等于所述下一个需要运行的逻辑线程执行现场的内存地址,则根据该存储单元更新所述寄存器的当前线程行指针和所述CPU的PC指针。
结合第三方面,在第三方面的一种实施方式中,所述接收存储单元行切换指令,包括:
将所述CPU的PC指针保存在当前运行的逻辑线程执行现场对应的存储单元的PC指针处;
和/或,所述接收存储单元行切换指令之前包括:
若所述CPU执行指令的结果影响状态寄存器,则将最新状态保存在当前运行的逻辑线程执行现场对应的存储单元的状态寄存器。
结合第三方面,在第三方面的另一种实施方式中,所述接收存储单元行切换指令之后包括:
若所述寄存器中所有行的存储单元的内存地址均不等于所述下一个需要运行的逻辑线程执行现场的内存地址且所述寄存器中存在一行空的存储单元,则根据所述下一个需要运行的逻辑线程执行现场的内存地址,从内存中将对应的逻辑线程执行现场加载至所述空的存储单元,并根据该存储单元更新所述寄存器的当前线程行指针和所述CPU的PC指针。
结合第三方面,在第三方面的再一种实施方式中,所述接收存储单元行切换指令之后包括:
若所述寄存器中所有行的存储单元的内存地址均不等于所述下一个需要运行的逻辑线程执行现场的内存地址且所述寄存器中不存在一行空的存储单元,则从所述寄存器中选择最长时间未使用的一行存储单元,将其通用寄存器、PC指针和状态寄存器保存至内存,然后根据所述下一个需要运行的逻辑线程执行现场的内存地址,从内存中将对应的逻辑线程执行现场加载至该存储单元,并根据该存储单元更新所述寄存器的当前线程行指针和所述CPU的PC指针。
结合第三方面,在第三方面的又一种实施方式中,所述根据该存储单元更新所述寄存器的当前线程行指针和所述CPU的PC指针,包括:
将该存储单元的行数赋值给所述寄存器的当前线程行指针;
将该存储单元的PC指针加1后赋值给所述CPU的PC指针。
第四方面,本发明实施例提供一种服务器,包括:壳体、处理器、存储器、电路板和电源电路,其中,电路板安置在壳体围成的空间内部,处理器和存储器设置在电路板上;电源电路,用于为上述服务器的各个电路或器件供电;存储器用于存储可执行程序代码;处理器通过读取存储器中存储的可执行程序代码来运行与可执行程序代码对应的程序,所述处理器为上述的CPU芯片。
本发明实施例提供的逻辑线程快速切换的方法、装置、CPU芯片及服务器,应用于CPU,所述CPU的寄存器包括至少两行存储单元,每行存储单元对应一个逻辑线程执行现场,每行存储单元均包括逻辑线程执行现场的内存地址、每个逻辑线程私有的通用寄存器、每个逻辑线程的程序计数器PC指针和状态寄存器,所述寄存器还包括当前线程行指针,所述当前线程行指针用于指向正在运行的逻辑线程使用的存储单元所在的行,这样,使得CPU内部同时存在多个线程执行现场,逻辑线程之间的切换,就对应于存储单元行之间的切换,逻辑线程现场保存和恢复可以对应到寄存器对内存的读写实现,因此,本发明实施例可以简化线程切换的硬件和软件实现,实现逻辑线程的快速切换,简化程序设计,减少寄存器的导出/导入;并且当一个逻辑线程阻塞时,CPU硬件可以自动切换到下一个逻辑线程现场继续执行,从而大大提高CPU的工作效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1为本发明的逻辑线程快速切换的方法一个实施例的流程示意图;
图2为图1所示实施例中CPU的寄存器的结构示意图;
图3为图2中CPU执行指令时寄存器存取通路示意图;
图4为本发明的逻辑线程快速切换的方法另一实施例的流程示意图;
图5为本发明的逻辑线程快速切换的装置一个实施例的结构示意图;
图6为本发明的服务器一个实施例的结构示意图。
具体实施方式
下面结合附图对本发明实施例进行详细描述。
应当明确,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
一方面,本发明实施例提供一种逻辑线程快速切换的方法,应用于中央处理器CPU,如图1-3所示,CPU的寄存器包括至少两行存储单元,每行存储单元对应一个逻辑线程执行现场,每行存储单元均包括逻辑线程执行现场的内存地址、每个逻辑线程私有的通用寄存器、每个逻辑线程的程序计数器(Program Counter,PC)指针和状态寄存器,所述寄存器还包括当前线程行指针,所述当前线程行指针用于指向正在运行的逻辑线程使用的存储单元所在的行。
发明人在研究过程中发现,现有技术中一个CPU通常只包含一个线程执行现场,这是由于CPU的寄存器堆本质上是一小块SRAM,且该SRAM仅是一维的。因此,如果能够使用较大的寄存器Cache(类似数据Cache的概念,需要注意的是,此处并非指位于CPU和内存之间的高速缓冲存储器Cache)代替寄存器堆的SRAM,则可以在CPU中同时保存多个逻辑线程的现场。
本实施例中,CPU的寄存器暂时称呼为RegCache,可以理解为类似于数据Cache,由二维SRAM组成。图2示出了本实施例中寄存器的一种具体结构,即RegCache[][1+32+1+1],其为二维SRAM,包含N个RegCache行(N为整数),可用于保存N个逻辑线程现场。在图2中,该RegCache具有N行存储单元,每行存储单元(即RegCache行)对应一个逻辑线程执行现场,每行存储单元均包括逻辑线程执行现场的内存地址(即图中的标签tag)、每个逻辑线程私有的通用寄存器(Reg[0..31],本实施例中为32位通用寄存器,其他实施例中可以为64位或其他位数的寄存器)、每个逻辑线程的PC指针(PC_ptr)和状态寄存器(StatusReg);如图3所示,该RegCache还包括当前线程行指针(Cur_ctx_ptr),该当前线程行指针用于指向正在运行的逻辑线程使用的存储单元所在的行(即RegCache行)。
这样,逻辑线程之间的切换,就对应于RegCache行的切换。逻辑线程现场保存和恢复可以对应到RegCache对内存的读写实现。因此使用RegCache代替寄存器堆的SRAM,可以简化线程切换的硬件和软件实现。
如图1所示,本实施例的方法可以包括:
步骤101:接收存储单元行切换指令,所述存储单元行切换指令包含下一个需要运行的逻辑线程执行现场的内存地址(tag);
现有CPU一般只包含一个线程执行现场。线程的切换需要软件保存前一个线程的执行现场到内存,并恢复下一个线程的执行现场到CPU的寄存器中。整个过程对应到程序控制的寄存器的导出/导入。
本实施例中,通过使用较大的RegCache代替CPU寄存器的SRAM,能够在CPU内部同时存在多个线程执行现场,为这样的RegCache提供合适的指令和硬件(即二维SRAM、当前线程行指针Cur_ctx_ptr等)支持,就能够做到线程的快速切换,并简化程序设计。具体的,通过增加存储单元行切换指令(即RegCache行切换指令),CPU就可以快速的在不同的逻辑线程之间进行转换,有助于简化程序设计,减少寄存器的导出/导入。
本实施例中,RegCache行切换指令例如可以为ctx_sw ra指令,其中ctx_sw是操作码,ra是操作数,ra指向下一个需要运行的逻辑线程现场的内存地址。
由于RegCache还包括当前线程行指针Cur_ctx_ptr,故可知,CPU执行指令时,如果使用寄存器rx,则其位置在RegCache[Cur_ctx_ptr].Reg[rx],其中“.”之前的内容表示使用的是哪个RegCache行,“.”之后的内容表示使用的是该行中的哪个通用寄存器。
作为一种可选的实施例,所述接收存储单元行切换指令(步骤101),可以包括:
步骤1011:将所述CPU的PC指针保存在当前运行的逻辑线程执行现场对应的存储单元的PC指针处;
和/或,所述接收存储单元行切换指令(步骤101)之前可以包括:
步骤100:若所述CPU执行指令的结果影响状态寄存器,则将最新状态保存在当前运行的逻辑线程执行现场对应的存储单元的状态寄存器。
这样,CPU正在执行的指令的PC指针,会同步保存在RegCache[Cur_ctx_ptr].PC_ptr;CPU执行指令的结果,如果影响状态寄存器,则会保存在RegCache[Cur_ctx_ptr].StatueReg,以确保CPU内部同时存在多个线程执行现场时指令正常执行,避免出现混乱。
步骤102:若所述寄存器中某行的存储单元的内存地址等于所述下一个需要运行的逻辑线程执行现场的内存地址,则根据该存储单元更新所述寄存器的当前线程行指针和所述CPU的PC指针。
如前所述,假定步骤101中的RegCache行切换指令为ctx_sw ra,则本步骤的工作即是判断是否存在X,使RegCache[X].tag==ra,若存在,则说明下一个需要运行的逻辑线程执行现场已经在寄存器RegCache中,直接切换至其所在的RegCache行,即可实现不同逻辑线程之间的快速转换。可以理解的是,为实现逻辑线程之间的平稳转换,还需更新寄存器的当前线程行指针Cur_ctx_ptr和CPU的PC指针。
作为一种可选的实施例,所述根据该存储单元更新所述寄存器的当前线程行指针和所述CPU的PC指针,可以包括:
步骤1021:将该存储单元的行数赋值给所述寄存器的当前线程行指针;
具体的,本步骤可以执行Cur_ctx_ptr=X,以对当前线程行指针Cur_ctx_ptr进行更新。
步骤1022:将该存储单元的PC指针加1后赋值给所述CPU的PC指针。
具体的,本步骤可以执行PC=RegCache[X].Pc_ptr+1,以对CPU的PC指针进行更新。需要说明的是,CPU的PC指针与每个RegCache行中的PC指针(PC_ptr)是不同的指针。
作为另一种可选的实施例,所述接收存储单元行切换指令(步骤101)之后可以包括:
步骤102’:若所述寄存器中所有行的存储单元的内存地址均不等于所述下一个需要运行的逻辑线程执行现场的内存地址且所述寄存器中存在一行空的存储单元,则根据所述下一个需要运行的逻辑线程执行现场的内存地址,从内存中将对应的逻辑线程执行现场加载至所述空的存储单元,并根据该存储单元更新所述寄存器的当前线程行指针和所述CPU的PC指针。
本步骤中,说明不存在X,使RegCache[X].tag==ra,但存在X,使RegCache[X].tag==空,此种情况下,说明下一个需要运行的逻辑线程执行现场不在RegCache中而在内存中,但是当前存在空的RegCache行,故可以从内存中将下一个需要运行的逻辑线程执行现场加载至该空的RegCache行,以实现不同逻辑线程之间的快速转换。
其中,“根据该存储单元更新所述寄存器的当前线程行指针和所述CPU的PC指针”的执行方式与前面相同,此处不再赘述;加载的指令语句可以为:
Load RegCache[X].reg[0.31],Pc_ptr,StatusReg from mem[ra]
作为再一种可选的实施例,所述接收存储单元行切换指令(步骤101)之后可以包括:
步骤102”:若所述寄存器中所有行的存储单元的内存地址均不等于所述下一个需要运行的逻辑线程执行现场的内存地址且所述寄存器中不存在一行空的存储单元,则从所述寄存器中选择最长时间未使用的一行存储单元,将其通用寄存器、PC指针和状态寄存器保存至内存,然后根据所述下一个需要运行的逻辑线程执行现场的内存地址,从内存中将对应的逻辑线程执行现场加载至该存储单元,并根据该存储单元更新所述寄存器的当前线程行指针和所述CPU的PC指针。
本步骤中,说明不存在X,使RegCache[X].tag==ra,也不存在X,使RegCache[X].tag==空,此种情况下,说明下一个需要运行的逻辑线程执行现场不在RegCache中而在内存中,并且当前也不存在空的RegCache行,故需要腾出一个RegCache行(保存至内存中),具体腾出哪个RegCache行可以采用最长时间未使用算法(即选择一行最长时间未使用的RegCache[X],算法实现为本领域公知常识,此处不再赘述),腾出一个RegCache行之后,可以从内存中将下一个需要运行的逻辑线程执行现场加载至该腾出的RegCache行,以实现不同逻辑线程之间的快速转换。
其中,“根据该存储单元更新所述寄存器的当前线程行指针和所述CPU的PC指针”的执行方式与前面相同,此处不再赘述;保存(腾出)和加载的指令语句可以为:
Save RegCache[X].reg[0.31],Pc_ptr,StatusReg to mem[Reg Cache[X].tag]
Load RegCache[X].reg[0.31],Pc_ptr,StatusReg from mem[ra]
综上,本发明实施例的逻辑线程快速切换的方法,应用于中央处理器CPU,所述CPU的寄存器包括至少两行存储单元,每行存储单元对应一个逻辑线程执行现场,每行存储单元均包括逻辑线程执行现场的内存地址、每个逻辑线程私有的通用寄存器、每个逻辑线程的程序计数器PC指针和状态寄存器,所述寄存器还包括当前线程行指针,所述当前线程行指针用于指向正在运行的逻辑线程使用的存储单元所在的行,这样,使得CPU内部同时存在多个线程执行现场,逻辑线程之间的切换,就对应于存储单元行之间的切换,逻辑线程现场保存和恢复可以对应到寄存器对内存的读写实现,因此,本发明实施例可以简化线程切换的硬件和软件实现,实现逻辑线程的快速切换,简化程序设计,减少寄存器的导出/导入;并且当一个逻辑线程阻塞时,CPU硬件可以自动切换到下一个逻辑线程现场继续执行,从而大大提高CPU的工作效率。
图4为本发明的逻辑线程快速切换的方法一个具体例子的流程示意图,其中涉及的步骤在前面已有描述,故对于图4此处不再详述。
另一方面,本发明实施例提供一种逻辑线程快速切换的装置,应用于CPU,所述CPU的寄存器包括至少两行存储单元,每行存储单元对应一个逻辑线程执行现场,每行存储单元均包括逻辑线程执行现场的内存地址、每个逻辑线程私有的通用寄存器、每个逻辑线程的程序计数器PC指针和状态寄存器,所述寄存器还包括当前线程行指针,所述当前线程行指针用于指向正在运行的逻辑线程使用的存储单元所在的行,如图5所示,该装置可以包括:
接收模块11,用于接收存储单元行切换指令,所述存储单元行切换指令包含下一个需要运行的逻辑线程执行现场的内存地址;
第一切换模块12,用于若所述寄存器中某行的存储单元的内存地址等于所述下一个需要运行的逻辑线程执行现场的内存地址,则根据该存储单元更新所述寄存器的当前线程行指针和所述CPU的PC指针。
本实施例的装置,可以用于执行图1所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
优选的,所述接收模块11包括:
指针保存子模块,用于将所述CPU的PC指针保存在当前运行的逻辑线程执行现场对应的存储单元的PC指针处;
和/或,所述装置包括:
状态保存模块,用于若所述CPU执行指令的结果影响状态寄存器,则将最新状态保存在当前运行的逻辑线程执行现场对应的存储单元的状态寄存器。
优选的,所述装置包括:
第二切换模块,用于若所述寄存器中所有行的存储单元的内存地址均不等于所述下一个需要运行的逻辑线程执行现场的内存地址且所述寄存器中存在一行空的存储单元,则根据所述下一个需要运行的逻辑线程执行现场的内存地址,从内存中将对应的逻辑线程执行现场加载至所述空的存储单元,并根据该存储单元更新所述寄存器的当前线程行指针和所述CPU的PC指针。
优选的,所述装置包括:
第三切换模块,用于若所述寄存器中所有行的存储单元的内存地址均不等于所述下一个需要运行的逻辑线程执行现场的内存地址且所述寄存器中不存在一行空的存储单元,则从所述寄存器中选择最长时间未使用的一行存储单元,将其通用寄存器、PC指针和状态寄存器保存至内存,然后根据所述下一个需要运行的逻辑线程执行现场的内存地址,从内存中将对应的逻辑线程执行现场加载至该存储单元,并根据该存储单元更新所述寄存器的当前线程行指针和所述CPU的PC指针。
优选的,所述根据该存储单元更新所述寄存器的当前线程行指针和所述CPU的PC指针,包括:
将该存储单元的行数赋值给所述寄存器的当前线程行指针;
将该存储单元的PC指针加1后赋值给所述CPU的PC指针。
再一方面,本发明实施例提供一种CPU芯片,包括:处理器核心;
所述CPU的寄存器包括至少两行存储单元,每行存储单元对应一个逻辑线程执行现场,每行存储单元均包括逻辑线程执行现场的内存地址、每个逻辑线程私有的通用寄存器、每个逻辑线程的程序计数器PC指针和状态寄存器,所述寄存器还包括当前线程行指针,所述当前线程行指针用于指向正在运行的逻辑线程使用的存储单元所在的行;
所述处理器核心,用于接收存储单元行切换指令,所述存储单元行切换指令包含下一个需要运行的逻辑线程执行现场的内存地址;若所述寄存器中某行的存储单元的内存地址等于所述下一个需要运行的逻辑线程执行现场的内存地址,则根据该存储单元更新所述寄存器的当前线程行指针和所述CPU的PC指针。
本实施例的CPU芯片,可以用于执行图1所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
优选的,所述接收存储单元行切换指令,包括:
将所述CPU的PC指针保存在当前运行的逻辑线程执行现场对应的存储单元的PC指针处;
和/或,所述接收存储单元行切换指令之前包括:
若所述CPU执行指令的结果影响状态寄存器,则将最新状态保存在当前运行的逻辑线程执行现场对应的存储单元的状态寄存器。
优选的,所述接收存储单元行切换指令之后包括:
若所述寄存器中所有行的存储单元的内存地址均不等于所述下一个需要运行的逻辑线程执行现场的内存地址且所述寄存器中存在一行空的存储单元,则根据所述下一个需要运行的逻辑线程执行现场的内存地址,从内存中将对应的逻辑线程执行现场加载至所述空的存储单元,并根据该存储单元更新所述寄存器的当前线程行指针和所述CPU的PC指针。
优选的,所述接收存储单元行切换指令之后包括:
若所述寄存器中所有行的存储单元的内存地址均不等于所述下一个需要运行的逻辑线程执行现场的内存地址且所述寄存器中不存在一行空的存储单元,则从所述寄存器中选择最长时间未使用的一行存储单元,将其通用寄存器、PC指针和状态寄存器保存至内存,然后根据所述下一个需要运行的逻辑线程执行现场的内存地址,从内存中将对应的逻辑线程执行现场加载至该存储单元,并根据该存储单元更新所述寄存器的当前线程行指针和所述CPU的PC指针。
优选的,所述根据该存储单元更新所述寄存器的当前线程行指针和所述CPU的PC指针,包括:
将该存储单元的行数赋值给所述寄存器的当前线程行指针;
将该存储单元的PC指针加1后赋值给所述CPU的PC指针。
又一方面,本发明实施例还提供一种服务器,图6为本发明服务器一个实施例的结构示意图,可以实现本发明图1所示实施例的流程,如图6所示,上述服务器可以包括:壳体41、处理器42、存储器43、电路板44和电源电路45,其中,电路板44安置在壳体41围成的空间内部,处理器42和存储器43设置在电路板44上;电源电路45,用于为上述服务器的各个电路或器件供电;存储器43用于存储可执行程序代码;处理器42通过读取存储器43中存储的可执行程序代码来运行与可执行程序代码对应的程序,处理器为上述的CPU芯片。
处理器42对上述步骤的具体执行过程以及处理器42通过运行可执行程序代码来进一步执行的步骤,可以参见本发明图1所示实施例的描述,在此不再赘述。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。为了描述的方便,描述以上装置是以功能分为各种单元/模块分别描述。当然,在实施本发明时可以把各单元/模块的功能在同一个或多个软件和/或硬件中实现。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random AccessMemory,RAM)等。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
Claims (8)
1.一种逻辑线程快速切换的方法,应用于中央处理器CPU,所述CPU的寄存器包括至少两行存储单元,每行存储单元对应一个逻辑线程执行现场,每行存储单元均包括逻辑线程执行现场的内存地址、每个逻辑线程私有的通用寄存器、每个逻辑线程的程序计数器PC指针和状态寄存器,所述寄存器还包括当前线程行指针,所述当前线程行指针用于指向正在运行的逻辑线程使用的存储单元所在的行,其特征在于,所述方法包括:
接收存储单元行切换指令,所述存储单元行切换指令包含下一个需要运行的逻辑线程执行现场的内存地址;
若所述寄存器中某行的存储单元的内存地址等于所述下一个需要运行的逻辑线程执行现场的内存地址,则根据该存储单元更新所述寄存器的当前线程行指针和所述CPU的PC指针;
其中,所述接收存储单元行切换指令,包括:
将所述CPU的PC指针保存在当前运行的逻辑线程执行现场对应的存储单元的PC指针处;
其中,所述接收存储单元行切换指令之前包括:
若所述CPU执行指令的结果影响状态寄存器,则将最新状态保存在当前运行的逻辑线程执行现场对应的存储单元的状态寄存器;
其中,所述根据该存储单元更新所述寄存器的当前线程行指针和所述CPU的PC指针,包括:将该存储单元的行数赋值给所述寄存器的当前线程行指针;
将该存储单元的PC指针加1后赋值给所述CPU的PC指针。
2.根据权利要求1所述的方法,其特征在于,所述接收存储单元行切换指令之后包括:
若所述寄存器中所有行的存储单元的内存地址均不等于所述下一个需要运行的逻辑线程执行现场的内存地址且所述寄存器中存在一行空的存储单元,则根据所述下一个需要运行的逻辑线程执行现场的内存地址,从内存中将对应的逻辑线程执行现场加载至所述空的存储单元,并根据该存储单元更新所述寄存器的当前线程行指针和所述CPU的PC指针。
3.根据权利要求1所述的方法,其特征在于,所述接收存储单元行切换指令之后包括:
若所述寄存器中所有行的存储单元的内存地址均不等于所述下一个需要运行的逻辑线程执行现场的内存地址且所述寄存器中不存在一行空的存储单元,则从所述寄存器中选择最长时间未使用的一行存储单元,将其通用寄存器、PC指针和状态寄存器保存至内存,然后根据所述下一个需要运行的逻辑线程执行现场的内存地址,从内存中将对应的逻辑线程执行现场加载至该存储单元,并根据该存储单元更新所述寄存器的当前线程行指针和所述CPU的PC指针。
4.一种逻辑线程快速切换的装置,应用于中央处理器CPU,所述CPU的寄存器包括至少两行存储单元,每行存储单元对应一个逻辑线程执行现场,每行存储单元均包括逻辑线程执行现场的内存地址、每个逻辑线程私有的通用寄存器、每个逻辑线程的程序计数器PC指针和状态寄存器,所述寄存器还包括当前线程行指针,所述当前线程行指针用于指向正在运行的逻辑线程使用的存储单元所在的行,其特征在于,所述装置包括:
接收模块,用于接收存储单元行切换指令,所述存储单元行切换指令包含下一个需要运行的逻辑线程执行现场的内存地址;
第一切换模块,用于若所述寄存器中某行的存储单元的内存地址等于所述下一个需要运行的逻辑线程执行现场的内存地址,则根据该存储单元更新所述寄存器的当前线程行指针和所述CPU的PC指针;
其中,所述接收模块包括:
指针保存子模块,用于将所述CPU的PC指针保存在当前运行的逻辑线程执行现场对应的存储单元的PC指针处;
其中,所述装置包括:
状态保存模块,用于若所述CPU执行指令的结果影响状态寄存器,则将最新状态保存在当前运行的逻辑线程执行现场对应的存储单元的状态寄存器;
其中,所述根据该存储单元更新所述寄存器的当前线程行指针和所述CPU的PC指针,包括:
将该存储单元的行数赋值给所述寄存器的当前线程行指针;
将该存储单元的PC指针加1后赋值给所述CPU的PC指针。
5.根据权利要求4所述的装置,其特征在于,所述装置包括:
第二切换模块,用于若所述寄存器中所有行的存储单元的内存地址均不等于所述下一个需要运行的逻辑线程执行现场的内存地址且所述寄存器中存在一行空的存储单元,则根据所述下一个需要运行的逻辑线程执行现场的内存地址,从内存中将对应的逻辑线程执行现场加载至所述空的存储单元,并根据该存储单元更新所述寄存器的当前线程行指针和所述CPU的PC指针。
6.根据权利要求4所述的装置,其特征在于,所述装置包括:
第三切换模块,用于若所述寄存器中所有行的存储单元的内存地址均不等于所述下一个需要运行的逻辑线程执行现场的内存地址且所述寄存器中不存在一行空的存储单元,则从所述寄存器中选择最长时间未使用的一行存储单元,将其通用寄存器、PC指针和状态寄存器保存至内存,然后根据所述下一个需要运行的逻辑线程执行现场的内存地址,从内存中将对应的逻辑线程执行现场加载至该存储单元,并根据该存储单元更新所述寄存器的当前线程行指针和所述CPU的PC指针。
7.一种CPU芯片,其特征在于,包括:处理器核心;
所述CPU的寄存器包括至少两行存储单元,每行存储单元对应一个逻辑线程执行现场,每行存储单元均包括逻辑线程执行现场的内存地址、每个逻辑线程私有的通用寄存器、每个逻辑线程的程序计数器PC指针和状态寄存器,所述寄存器还包括当前线程行指针,所述当前线程行指针用于指向正在运行的逻辑线程使用的存储单元所在的行;
所述处理器核心,用于接收存储单元行切换指令,所述存储单元行切换指令包含下一个需要运行的逻辑线程执行现场的内存地址;若所述寄存器中某行的存储单元的内存地址等于所述下一个需要运行的逻辑线程执行现场的内存地址,则根据该存储单元更新所述寄存器的当前线程行指针和所述CPU的PC指针;
其中,所述接收存储单元行切换指令,包括:
将所述CPU的PC指针保存在当前运行的逻辑线程执行现场对应的存储单元的PC指针处;
其中,所述接收存储单元行切换指令之前包括:
若所述CPU执行指令的结果影响状态寄存器,则将最新状态保存在当前运行的逻辑线程执行现场对应的存储单元的状态寄存器;
其中,所述根据该存储单元更新所述寄存器的当前线程行指针和所述CPU的PC指针,包括:将该存储单元的行数赋值给所述寄存器的当前线程行指针;
将该存储单元的PC指针加1后赋值给所述CPU的PC指针。
8.一种服务器,其特征在于,包括:壳体、处理器、存储器、电路板和电源电路,其中,电路板安置在壳体围成的空间内部,处理器和存储器设置在电路板上;电源电路,用于为上述服务器的各个电路或器件供电;存储器用于存储可执行程序代码;处理器通过读取存储器中存储的可执行程序代码来运行与可执行程序代码对应的程序,所述处理器为权利要求7所述的CPU芯片。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011342494.3A CN112463327B (zh) | 2020-11-25 | 2020-11-25 | 逻辑线程快速切换的方法、装置、cpu芯片及服务器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011342494.3A CN112463327B (zh) | 2020-11-25 | 2020-11-25 | 逻辑线程快速切换的方法、装置、cpu芯片及服务器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112463327A CN112463327A (zh) | 2021-03-09 |
CN112463327B true CN112463327B (zh) | 2023-01-31 |
Family
ID=74808238
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011342494.3A Active CN112463327B (zh) | 2020-11-25 | 2020-11-25 | 逻辑线程快速切换的方法、装置、cpu芯片及服务器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112463327B (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1595351A (zh) * | 2004-06-25 | 2005-03-16 | 中国科学院计算技术研究所 | 一种基于mips指令集的处理器的多线程方法和装置 |
CN101763285A (zh) * | 2010-01-15 | 2010-06-30 | 西安电子科技大学 | 零开销切换多线程处理器及其线程切换方法 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6134653A (en) * | 1998-04-22 | 2000-10-17 | Transwitch Corp. | RISC processor architecture with high performance context switching in which one context can be loaded by a co-processor while another context is being accessed by an arithmetic logic unit |
US6408325B1 (en) * | 1998-05-06 | 2002-06-18 | Sun Microsystems, Inc. | Context switching technique for processors with large register files |
CA2383526A1 (en) * | 1999-09-01 | 2001-03-15 | Intel Corporation | Branch instruction for multithreaded processor |
CN102004719B (zh) * | 2010-11-16 | 2015-05-20 | 清华大学 | 支持同时多线程的超长指令字处理器结构 |
CN102520909A (zh) * | 2011-11-16 | 2012-06-27 | 杭州中天微系统有限公司 | 支持现场快速切换的通用寄存器装置 |
US20140095847A1 (en) * | 2012-09-28 | 2014-04-03 | Doron Orenstein | Instruction and highly efficient micro-architecture to enable instant context switch for user-level threading |
GB201717303D0 (en) * | 2017-10-20 | 2017-12-06 | Graphcore Ltd | Scheduling tasks in a multi-threaded processor |
-
2020
- 2020-11-25 CN CN202011342494.3A patent/CN112463327B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1595351A (zh) * | 2004-06-25 | 2005-03-16 | 中国科学院计算技术研究所 | 一种基于mips指令集的处理器的多线程方法和装置 |
CN101763285A (zh) * | 2010-01-15 | 2010-06-30 | 西安电子科技大学 | 零开销切换多线程处理器及其线程切换方法 |
Also Published As
Publication number | Publication date |
---|---|
CN112463327A (zh) | 2021-03-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9495136B2 (en) | Using aliasing information for dynamic binary optimization | |
US20120254542A1 (en) | Gather cache architecture | |
US7971040B2 (en) | Method and device for saving and restoring a set of registers of a microprocessor in an interruptible manner | |
US20230084523A1 (en) | Data Processing Method and Device, and Storage Medium | |
US20130036426A1 (en) | Information processing device and task switching method | |
EP4336352A1 (en) | Instruction execution method, processor and electronic apparatus | |
CN100440153C (zh) | 处理器 | |
US7496921B2 (en) | Processing block with integrated light weight multi-threading support | |
CN103748549A (zh) | 用于经频繁调用函数的表调用指令 | |
JP2005182659A (ja) | Vliw型dsp,及びその動作方法 | |
US20030188128A1 (en) | Executing stack-based instructions within a data processing apparatus arranged to apply operations to data items stored in registers | |
CN112463327B (zh) | 逻辑线程快速切换的方法、装置、cpu芯片及服务器 | |
CN101196808A (zh) | 一种8位微控制器 | |
US8332596B2 (en) | Multiple error management in a multiprocessor computer system | |
CN114047952B (zh) | 用于单片机的处理器、方法、单片机和存储介质 | |
CN115328390A (zh) | 基于c51的指针变量读写操作方法、装置、设备及介质 | |
US6886159B2 (en) | Computer system, virtual machine, runtime representation of object, storage media and program transmission apparatus | |
JP2008282105A (ja) | マイクロプロセッサおよびレジスタ退避方法 | |
CN100430890C (zh) | 一种8位risc微控制器 | |
US7363475B2 (en) | Managing registers in a processor to emulate a portion of a stack | |
US20040221141A1 (en) | Method for managing a microprocessor stack for saving contextual data | |
US6243798B1 (en) | Computer system for allowing a two word jump instruction to be executed in the same number of cycles as a single word jump instruction | |
EP1378825B1 (en) | A method for executing programs on selectable-instruction-length processors and corresponding processor system | |
US10817288B2 (en) | Combined instruction for addition and checking of terminals | |
CN115562730A (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 |