CN109388429A - Mhp异构多流水线处理器的任务分发方法 - Google Patents

Mhp异构多流水线处理器的任务分发方法 Download PDF

Info

Publication number
CN109388429A
CN109388429A CN201811144473.3A CN201811144473A CN109388429A CN 109388429 A CN109388429 A CN 109388429A CN 201811144473 A CN201811144473 A CN 201811144473A CN 109388429 A CN109388429 A CN 109388429A
Authority
CN
China
Prior art keywords
task
assembly line
instruction
pipeline
descriptor
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.)
Granted
Application number
CN201811144473.3A
Other languages
English (en)
Other versions
CN109388429B (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.)
Individual
Original Assignee
Individual
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 Individual filed Critical Individual
Priority to CN201811144473.3A priority Critical patent/CN109388429B/zh
Publication of CN109388429A publication Critical patent/CN109388429A/zh
Application granted granted Critical
Publication of CN109388429B publication Critical patent/CN109388429B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multi Processors (AREA)

Abstract

本申请涉MHP(Multiple Heteroid Pipeline)异构多流水线处理器的任务分发方法。所提供的用于多流水线处理器的任务分发方法,包括:在第一流水线执行指令以调用任务分发编程接口,以指示在可用的流水线上处理第一任务;响应于任务分发接口指示第一任务分发失败,在所述第一流水线上处理第一任务。

Description

MHP异构多流水线处理器的任务分发方法
技术领域
本申请涉及处理器技术,具体地,涉及具有异构多流水线的处理器核的任务分发。
背景技术
现代处理器核通常具有多级流水线。处理器指令的执行过程被分为多个流水线阶段(也称为流水线级),例如,取指令、译码、执行、访存与写回等阶段。通过提高流水线的级数来降低流水线的每一级的复杂度,从而使处理器核可工作于更高的时钟频率。使用多级流水线也增加了处理器处理指令的并行性。
多核/多线程技术,也是常用的提高处理器处理指令的并行性的技术。
一些处理器采用多流水线架构。处理器核包括同构或异构的多条流水线。例如,公告号为CN100557593C、发明名称为“多流水处理系统和结合有该系统的集成电路”的中国专利,提供了具有多流水线的处理系统。
发明内容
根据本申请的实施例,提供了MHP(Multiple Heteroid Pipeline,异构多流水线)处理器核架构。程序可感知并显式使用异构的各流水线。以任务或函数为粒度使用流水线,易于编程。
根据本申请的第一方面,提供了根据本申请第一方面的第一多流水线处理器,包括第一流水线、第二流水线、取指令单元、数据访问与单元任务分发器;第一流水线与第二流水线共享取指令单元与数据访问单元,通过取指令单元获取指令,以及通过数据访问单元获取指令执行所需的数据;第一流水线通过任务分发器向第二流水线分发任务,第二流水线处理从任务分发器获取的任务。
根据本申请第一方面的第一多流水线处理器,提供了根据本申请第一方面的第二多流水线处理器,包括多个第一流水线。
根据本申请第一方面的第一或第二多流水线处理器,提供了根据本申请第一方面的第三多流水线处理器,包括多个第二流水线。
根据本申请第一方面的第一至第三多流水线处理器之一,提供了根据本申请第一方面的第四多流水线处理器,其中第一流水线的流水线级数大于第二流水线。
根据本申请第一方面的第一至第四多流水线处理器之一,提供了根据本申请第一方面的第五多流水线处理器,其中第一流水线与第二流水线具有相同的指令集架构。
根据本申请第一方面的第一至第五多流水线处理器之一,提供了根据本申请第一方面的第六多流水线处理器,其中所述任务分发器包括用于每个第二流水线的一个或多个任务存储器,响应于第一流水线的指示,所述任务分发器将任务描述符添加任务存储器。
根据本申请第一方面的第六多流水线处理器,提供了根据本申请第一方面的第七多流水线处理器,其中第二流水线从对应的任务存储器获取任务描述符,根据任务描述符的指示获取任务并处理。
根据本申请第一方面的第六或第七多流水线处理器,提供了根据本申请第一方面的第八多流水线处理器,其中第二流水线处理完成的任务的处理结果添加到完成任务存储器;第一流水线从完成任务存储器获取被处理完成的任务的处理结果。
根据本申请第一方面的第六至第八多流水线处理器之一,提供了根据本申请第一方面的第九多流水线处理器,其中任务描述符指示了任务的代码的入口地址和/或参数。
根据本申请第一方面的第一至第九多流水线处理器之一,提供了根据本申请第一方面的第十多流水线处理器,还包括第一高速缓存,第一高速缓存耦合到第一流水线,并缓存第一流水线访问的数据。
根据本申请第一方面的第十多流水线处理器,提供了根据本申请第一方面的第十一多流水线处理器,还包括第二高速缓存,第二高速缓存耦合到一个或多个第二流水线,并缓存一个或多个第二流水线的数据。
根据本申请第一方面的第十一或第十二多流水线处理器,提供了根据本申请第一方面的第十二多流水线处理器,还包括第一不可缓存的外部数据接口,第一流水线通过第一不可缓存的外部数据接口访问的数据不经过第一高速缓存。
根据本申请第一方面的第一至第十二多流水线处理器之一,提供了根据本申请第一方面的第十三多流水线处理器,其中第一流水线将待分发任务提供给任务分发器后,第一流水线不阻塞而继续执行其他指令。
根据本申请第一方面的第一至第十三多流水线处理器之一,提供了根据本申请第一方面的第十四多流水线处理器,其中响应于任务分发器向第一流水线指示任务分发失败,第一流水线处理分发失败的任务。
根据本申请第一方面的第一至第十三多流水线处理器之一,提供了根据本申请第一方面的第十五多流水线处理器,其中第一流水线耦合第一通用寄存器堆;第二流水线耦合第二寄存器堆;第一寄存器堆与第二寄存器堆各自提供了第一流水线或第二流水线的指令集架构的通用寄存器。
根据本申请第一方面的第一至第十五多流水线处理器之一,提供了根据本申请第一方面的第十六多流水线处理器,还包括一个或多个第三流水线;第一流水线、第二流水线与第三流水休闲共享取指令单元与数据访问单元,通过取指令单元获取指令,以及通过数据访问单元获取指令执行所需的数据。
根据本申请第一方面的第十六多流水线处理器,提供了根据本申请第一方面的第十七多流水线处理器,其中第一流水线通过任务分发器向第二流水线或第三流水线分发任务,第二流水线或第三流水线处理从任务分发器获取的任务。
根据本申请第一方面的第十六或第十七多流水线处理器,提供了根据本申请第一方面的第十五多流水线处理器,其中第一流水线、第二流水线与第三流水线是异构的;以及第一流水线、第二流水线与第三流水线具有相同的指令集架构。
根据本申请第一方面的第十八多流水线处理器,提供了根据本申请第一方面的第十九多流水线处理器,其中第二流水线的流水线级数大于第三流水线。
根据本申请第一方面的第十六至第十九多流水线处理器之一,提供了根据本申请第一方面的第二十多流水线处理器,其中第一流水线耦合第一通用寄存器堆;第二流水线耦合第二寄存器堆;第三流水线耦合第三寄存器堆;第一寄存器堆、第二寄存器堆与第三寄存器堆各自提供了第一流水线、第二流水线或第三流水线的指令集架构的通用寄存器。
根据本申请第一方面的第十六至第二十多流水线处理器之一,提供了根据本申请第一方面的第二十一多流水线处理器,其中每个第一流水线耦合指令存储器、数据存储器与分支预测单元。
根据本申请第一方面的第二十一多流水线处理器,提供了根据本申请第一方面的第二十二多流水线处理器,其中每个第一流水线还耦合各自的指令缓存、第一不可缓存的外部数据接口与数据缓存接口;指令缓存通过外部指令访问单元耦合取指令单元;数据缓存接口耦合第一高速缓存。
根据本申请第一方面的第二十一或第二十二多流水线处理器,提供了根据本申请第一方面的第二十三多流水线处理器,其中每个第二流水线耦合各自的第二外部指令访问单元与第二不可缓存的外部数据接口;第二外部指令访问单元耦合所述取指令单元;第二不可缓存的外部数据接口耦合所述数据访问单元。
根据本申请第一方面的第二十一至第二十三多流水线处理器之一,提供了根据本申请第一方面的第二十四多流水线处理器,其中一个或多个第三流水线耦合到共享的外部指令访问单元;共享的外部指令访问单元耦合所述取指令单元。
根据本申请第一方面的第二十一至第二十四多流水线处理器之一,提供了根据本申请第一方面的第二十五多流水线处理器,其中一个或多个第三流水线耦合到共享的第三不可缓存的外部数据接口;第三不可缓存的外部数据接口耦合所述数据访问单元。
根据本申请第一方面的第二十一至第二十四多流水线处理器之一,提供了根据本申请第一方面的第二十六多流水线处理器,其中一个或多个第三流水线耦合到第三外部指令访问单元;第三外部指令访问单元耦合所述取指令单元。
根据本申请第一方面的第一至第二十六多流水线处理器之一,提供了根据本申请第一方面的第二十七多流水线处理器,其中所述第一流水线与第二流水线的任何一个的暂停,不影响其他流水线的运行。
根据本申请第一方面的第十六至第二十七多流水线处理器之一,提供了根据本申请第一方面的第二十八多流水线处理器,其中第三流水线不包括栈,以及不处理函数调用。
根据本申请第一方面的第一至第二十八多流水线处理器之一,提供了根据本申请第一方面的第二十九多流水线处理器,其中第一流水线与第二流水线是异构的。
根据本申请第一方面的第六或第七多流水线处理器,提供了根据本申请第一方面的第三十多流水线处理器,其中第二流水线将对处理完成的任务的指示添加到完成任务存储器;第一流水线根据完成任务存储器的指示获取被处理完成的任务。
根据本申请的第二方面,提供了根据本申请第二方面的第一用于多流水线处理器的任务分发方法,包括:在第一流水线执行指令以调用任务分发编程接口,以指示在可用的流水线上处理第一任务;响应于任务分发接口指示第一任务分发失败,在所述第一流水线上处理第一任务。
根据本申请第二方面的第一用于多流水线处理器的任务分发方法,提供了根据本申请第二方面的第二用于多流水线处理器的任务分发方法,还包括:响应于任务分发接口指示第一任务分发成功,在第一流水线上继续执行其他指令或调用任务分发编程接口以指示在可用的流水线上处理第二任务。
根据本申请第二方面的第一或第二用于多流水线处理器的任务分发方法,提供了根据本申请第二方面的第三用于多流水线处理器的任务分发方法,还包括:生成第一任务的任务描述符,第一任务的任务描述符指示了第一任务的任务体的入口地址与用于第一任务的参数;以及将第一任务的描述符提供给任务分发编程接口。
根据本申请第二方面的第一至第三用于多流水线处理器的任务分发方法之一,提供了根据本申请第二方面的第四用于多流水线处理器的任务分发方法,还包括:在第一流水线执行指令以获取完成队列任务的处理结果。
根据本申请第二方面的第一至第四用于多流水线处理器的任务分发方法之一,提供了根据本申请第二方面的第五用于多流水线处理器的任务分发方法,还包括:为第一任务设置第一任务标识符(TID);将第一任务添加到具有第一任务包标识符(PID)的任务包。
根据本申请第二方面的第五用于多流水线处理器的任务分发方法,提供了根据本申请第二方面的第六用于多流水线处理器的任务分发方法,还包括:响应于第一任务包标识符(PID)的任务包被添加了指定数量的任务,向可用的流水线分发第一任务包标识符(PID)的任务包的所有任务。
根据本申请第二方面的第五用于多流水线处理器的任务分发方法,提供了根据本申请第二方面的第七用于多流水线处理器的任务分发方法,还包括:响应于将第一任务添加到第一任务包标识符(PID)的任务包,向可用的流水线分发第一任务。
根据本申请第二方面的第五至第七用于多流水线处理器的任务分发方法之一,提供了根据本申请第二方面的第八用于多流水线处理器的任务分发方法,还包括:响应于第一任务包标识符(PID)的任务包中的所有任务都被处理完成,回收第一任务包标识符(PID)。
根据本申请第二方面的第五至第八用于多流水线处理器的任务分发方法之一,提供了根据本申请第二方面的第九用于多流水线处理器的任务分发方法,还包括:记录第一任务包标识符(PID)的任务包的任务的指定数量、已经被开始处理的任务的数量和/或已经被处理完成的任务的数量。
根据本申请第二方面的第一至第九用于多流水线处理器的任务分发方法之一,提供了根据本申请第二方面的第十用于多流水线处理器的任务分发方法,还包括:响应于第一流水线不具备处理第一任务的资源,在第一流水线执行指令以调用任务分发编程接口,以指示在可用的流水线上处理第一任务。
根据本申请第二方面的第一至第十用于多流水线处理器的任务分发方法之一,提供了根据本申请第二方面的第十一用于多流水线处理器的任务分发方法,其中根据同流水线关联的任务存储器的可用容量,第一任务的任务描述符的指示、和/或流水线的资源,识别能够处理第一任务的可用的流水线。
根据本申请第二方面的第十一用于多流水线处理器的任务分发方法,提供了根据本申请第二方面的第十二用于多流水线处理器的任务分发方法,还包括:响应于调用任务分发编程接口,将第一任务的任务描述符添加到可用的流水线的任务存储器。
根据本申请第二方面的第十一或第十二用于多流水线处理器的任务分发方法,提供了根据本申请第二方面的第十三用于多流水线处理器的任务分发方法,还包括:响应于调用任务分发编程接口,从可用的流水线中选择第二流水线处理第一任务。
根据本申请第二方面的第十三用于多流水线处理器的任务分发方法,提供了根据本申请第二方面的第十四用于多流水线处理器的任务分发方法,还包括:在第二流水线执行指令以获取第一任务并处理第一任务。
根据本申请第二方面的第十四用于多流水线处理器的任务分发方法,提供了根据本申请第二方面的第十五用于多流水线处理器的任务分发方法,还包括:在第二流水线执行指令以从任务存储器获取第一任务的任务描述符。
根据本申请第二方面的第十三至第十五用于多流水线处理器的任务分发方法之一,提供了根据本申请第二方面的第十六用于多流水线处理器的任务分发方法,还包括:第二流水线获取第一任务的任务体的入口的指令并执行以处理第一任务;以及第一任务的处理结果被写入任务存储器。
根据本申请第二方面的第十三至第十五用于多流水线处理器的任务分发方法之一,提供了根据本申请第二方面的第十七用于多流水线处理器的任务分发方法,还包括:第二流水线获取第一任务的任务体的入口的指令并执行以处理第一任务;以及第二流水线将处理完成的第一任务添加到完成任务存储器。
根据本申请第二方面的第一至第十七用于多流水线处理器的任务分发方法之一,提供了根据本申请第二方面的第十八用于多流水线处理器的任务分发方法,还包括:响应于调用任务分发接口,任务分发器从可能的流水线中选择第二流水线,并将第一任务的任务描述符添加到第二流水线的任务存储器。
根据本申请第二方面的第十八用于多流水线处理器的任务分发方法,提供了根据本申请第二方面的第十九用于多流水线处理器的任务分发方法,还包括:任务分发器向任务分发接口指示第一任务分发成功作为调用任务分发接口的返回值。
根据本申请第二方面的第十八或第十九用于多流水线处理器的任务分发方法,提供了根据本申请第二方面的第二十用于多流水线处理器的任务分发方法,还包括:响应于未找到可用的流水线,任务分发器向任务分发接口指示第一任务分发失败作为调用任务分发接口的返回值。
根据本申请第二方面的第一至第二十用于多流水线处理器的任务分发方法之一,提供了根据本申请第二方面的第二十一用于多流水线处理器的任务分发方法,还包括:在第一流水线执行指令以调用任务分发编程接口,以指示在可用的流水线上处理第三任务;响应于调用任务分发编程接口,从可用的流水线中选择第三流水线处理第三任务;其中第三任务的任务体入口地址同第一任务的任务体入口地址相同。
根据本申请第二方面的第二十一用于多流水线处理器的任务分发方法,提供了根据本申请第二方面的第二十二用于多流水线处理器的任务分发方法,其中第三任务的参数同第一任务的参数的地址不同;第三任务的处理结果与第一任务的处理结果的地址不同。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
图1展示了根据本申请实施例的异构多流水线处理器的框图。
图2A展示了根据本申请实施例的向流水线分发任务的示意图;
图2B展示了根据本申请又一实施例的流水线提交任务处理结果的示意图;
图3展示了根据本申请又一实施例的异构多流水线处理器核的框图;
图4A展示了根据本申请实施例的高性能流水线的框图;
图4B展示了根据本申请实施例的普通流水线的框图;
图4C展示了根据本申请实施例的低功耗流水线的框图;
图5A展示了现有技术的处理器的函数调用示意图;
图5B展示了根据本申请实施例的处理器的函数调用示意图;
图6展示了根据本申请实施例的分发任务的时序图;
图7展示了根据本申请实施例的任务描述符;
图8展示了根据本申请实施例的任务与任务包的示意图;以及
图9展示了根据本申请实施例的任务包描述符集合。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
图1展示了根据本申请实施例的异构多流水线处理器核的框图。
根据本申请实施例的异构多流水处理器核包括主流水线110与一个或多个辅助流水线(120、122)。主流水线110与辅助流水线通过任务分发器130耦合。主流水线110使用任务分发器130向辅助流水线分发任务,并由辅助流水线处理被分发的任务。
可选地,主流水线110与辅助流水线(120、122)具有相同的指令集架构(ISA,Instruction Set Architecture),从而同样的程序既能由主流水线110执行,也能由任何一个辅助流水线执行。降低了程序开发、编译过程的复杂度,也降低了任务分发过程的复杂度。
依然可选地,主流水线110与辅助流水线(120、122)在相同的指令集架构下各自具有不同的指令集扩展。例如,主流水线110既执行64位字长的指令集的指令,也执行32位字长的指令集的指令,以获得较好的性能;而辅助流水线(120、122)仅执行32位字长指令集的指令。作为又一个例子,主流水线110支持指令集架构的所有指令集扩展,而辅助流水线(120、112)仅支持部分指令集扩展,例如,仅执行向量指令和/或浮点指令。进一步地,在一个例子中,待分发的任务被用主流水线与辅助流水线(120、122)都支持的指令集扩展编译,从而主流水线与辅助流水线都能处理被分发的任务。在又一个例子中,待分发的任务被编译为两个或更多版本,例如,由辅助流水线(120、112)执行的32位指令集扩展版本,与由主流水线执行的64位指令集扩展版本。在任务的入口设置代码来检查当前执行任务的流水线类型或者所支持的指令集,并选择加载当前流水线支持的任务版本并运行。
可选地,主流水线110与辅助流水线(120、122)具有不同的性能。例如,主流水线110具有更多的流水线级,辅助流水线具有更少的流水线级;主流水线110的工作时钟频率高于辅助流水线的工作时钟频率。
各辅助流水线(120、122)包括任务队列(记为Q)(170、172)。任务分发器130将分发给辅助流水线120的任务添加到任务队列170,而将分发给辅助流水线122的任务添加到任务队列172。各辅助流水线从耦合到自身的任务队列获取任务并处理。主流水线110还耦合到完成队列(174)。各辅助流水线将处理完成的任务添加到完成队列174。主流水线110从完成队列174获取被处理完成的任务。
可以理解地,任务队列(170、172)用于临时存储任务。任务队列中的任务可以是代表任务的任务描述符、包括任务体的任务本身或其他多种形式。也可采用不同于队列的其他存储方式来提供任务存储器来存储任务。类似地,完成队列(174)用于临时存储任务的处理结果。完成队列中的任务的处理结果是例如处理任务的返回值、代表了任务的任务描述符、指示任务处理结果的描述符等。也可采用不同于队列的其他存储方式来提供完成任务存储器来存储处理完成的任务。
可选地,各辅助流水线处理任务,将完成的任务的处理结果存储在辅助流水线与主流水线都能访问的共享存储器或高速缓存中。指示任务处理结果的描述符被添加到完成队列174。主流水线110轮询完成队列174,或者根据完成队列174非空而向主流水线110提供中断,以通知主流水线110有任务被处理完成。主流水线110从完成队列174获取指示任务处理结果的描述符,并根据指示任务处理结果的描述符访问共享存储器中的任务处理结果。指示任务处理结果的描述符包括例如任务处理成功或失败。响应于指示任务处理结果的描述符指示任务处理成功,主流水线无须进一步处理,而直接丢弃该指示任务处理结果的描述符。响应于指示任务处理结果的描述符指示任务处理失败,主流水线110对该指示任务处理结果的描述符指示的任务执行出错处理。
依然可选地,完成队列174包括多种子队列。被处理成功的任务的指示任务处理结果的描述符被添加到一种子队列,而被处理失败的任务的指示任务处理结果的描述符被添加到另一种子队列。
可选地,任务描述符被添加到任务队列。任务描述符指示了任务的代码的入口地址、参数和/或任务ID等信息。可选地,主流水线110与辅助流水线(120、122)都可访问完整的内存地址空间,从而根据任务描述符中的入口地址加载任务的代码,以及任务分发器130可将任务分发给任意的辅助流水线。
一些情况下,任务分发器130分发任务失败。例如,所有辅助流水线的任务队列都没有空闲条目容纳新任务。由于各流水线支持相同的指令集架构,也可由主流水线110处理任务,特别是分发失败的任务。在可选的实施方式中,响应于任务分发器130指示分发任务失败,主流水线110识别处理器的工作状况。若因短时间内出现了大量任务导致分发任务失败,而在较长时间范围内,处理器仍有能力处理出现的任务,则增加任务队列深度,或缓存待分发的任务。可选地,响应于任务分发器130指示分发任务失败,主流水线110开启更多的辅助流水线,提升任务处理能力。
在可选的实施方式中,流水线中执行的代码能够访问任务队列(170、172)和/或完成队列174。从而通过执行程序,向任务队列(170、172)添加任务,从任务队列(170、172)获取任务,向完成队列174添加任务处理结果,和/或从完成队列174获取任务处理结果。从而,可以省去任务分发器130。
根据本申请实施例的异构多流水线处理器核,还包括取指令单元140与数据访问单元150。主流水线110与辅助流水线(120、122)共享取指令单元140与数据访问单元150。流水线通过取指令单元140加载要执行的指令,而通过数据访问单元150读取或写回指令所访问的数据。
可选地,主流水线110和/或辅助流水线(120、122)各自具有优先级。在同时有多个流水线要加载指令和/或访问数据时,取指令单元140和/或数据访问单元150根据优先级,确定为各流水线提供服务的顺序和/或带宽。
根据本申请实施例的异构多流水线处理器核,还包括高速缓存160与可选的高速缓存162。高速缓存160专用于主流水线110,缓存主流水线访问的数据。高速缓存162是可选的,用于辅助流水线(120、122),缓存辅助流水线访问的数据。一些例子中,异构多流水线处理器核不包括高速缓存162,辅助流水线(120、122)的数据访问请求直接由数据访问单元150处理。
作为举例,在网络设备中使用根据本申请实施例的异构多流水线处理器核。网络处理器同时处理大量的网络报文。辅助流水线(120、122)的每个适合于处理简单而IO操作占比较高的单一报文。而主流水线110适合处理计算复杂度高的协议处理、服务质量控制等任务。
在依然可选的实施方式中,一个或多个辅助流水线(120、122)也使用任务分发器向主流水线110分发任务,并由主流水线110处理被分发的任务。主流水线110包括任务队列。任务分发器130将分发给主流水线110的任务添加到主流水线110的任务队列。主流水线110从耦合到自身的任务队列获取任务并处理。辅助流水线(120、122)还耦合到完成队列。主流水线110将处理完成的任务添加到发出任务的辅助流水线所耦合的完成队列。辅助流水线从完成队列获取被处理完成的任务。一些情况下,例如主流水线的任务队列没有空闲条目,任务分发器130向主流水线110分发任务失败,响应于向主流水线任务分发失败,发出任务的辅助流水线自己处理分发失败的任务,或者辅助流水线指示任务分发器再次尝试向主流水线分发任务,直到向主流水线分发任务成功。
在依然可选的实施方式中,主流水线110包括例如浮点处理单元,而辅助流水线(120、122)不包括浮点处理单元。从而主流水线110能够执行浮点指令,而辅助流水线(120、122)不能执行浮点指令。主流水线处理浮点任务时,任务通过执行代码而识别主流水线具有浮点处理单元,并执行使用浮点处理单元的代码段。辅助流水线处理浮点任务时,任务通过执行代码识别自身不具备浮点处理单元,而执行用整数运算单元替代浮点处理单元的代码段。可选地,辅助流水线处理浮点任务时,任务通过执行代码识别自身不具备浮点处理单元,将浮点处理任务通过任务分发器130分发给主流水线110执行。从而在辅助流水线上执行的任务也获得了浮点处理能力。
依然可选地,任务描述符中还指示请求分发任务的流水线的标识符,从而处理任务的流水线得以知晓向哪个流水线的完成队列提交任务处理结果。依然可选地,主流水线110包括向量单元,而辅助流水线(120、122)不包括向量单元。辅助流水线处理向量任务时,任务通过执行代码识别自身不具备向量单元,而将向量任务通过任务分发器130分发给主流水线110执行。
依然可选地,一个或多个辅助流水线,包括浮点处理单元和/或向量单元,并且专用于处理浮点和/或向量任务。
图2A展示了根据本申请实施例的向流水线分发任务的示意图。
作为举例,主流水线110通过任务分发器230将任务分发给各个辅助流水线。图2A中展示了辅助流水线(120、122、……127)。
可选地,任务分发器包括多个入口。任务分发器的入口耦合到主流水线与辅助流水线的一个或多个。从而各流水线均能够通过任务分发器向其他流水线分发任务。
任务分发器230协助主流水线110完成任务分发。有各个辅助流水线专用的任务队列(270、272……277)。将任务添加到任务队列270,意味着将该任务分发给辅助流水线120。将任务添加到任务队列272,意味着将该任务分发给辅助流水线122。将任务添加到任务队列277,意味着将该任务分发给辅助流水线127。
任务队列(270、272……277)包括多个条目。作为举例,每个条目的大小足以容纳任务描述符。任务描述符记录了任务的代码的入口地址、参数和/或任务ID等信息。作为队列,任务分发器230将任务描述符添加到任务队列的队尾,而辅助流水线从任务队列的队头获取任务描述符,并根据任务描述符的指示加载任务对应的代码与参数。任务队列具有指定或可配置的深度。任务分发器向任务队列添加任务描述符,还检查任务队列是否有可用的空间以容纳新的任务描述符。可选地,响应于向任务队列添加了任务描述符,任务分发器230还向提交任务的主流水线告知任务分发成功;响应于向任务队列添加任务描述符失败,任务分发器230还向提交任务的主流水线告知任务分发失败。响应于任务分发失败,可编程地,主流水线可自行处理分发失败的任务。主流水线将自身的程序计数器(PC)设置为分发失败的任务的代码入口地址以处理该任务。可选地,主流水线也耦合到专用于自身的任务队列,分发失败的任务被添加到主流水线的任务队列。
可选地,任务分发器230具有可配置或可编程的任务分发策略。例如,任务分发器将任务随机、轮转或加权轮转地分配给各辅助流水线。各流水线可被设置优先级。依然可选地,主流水线执行的代码在分发任务时已经指定了处理任务的目标辅助流水线,任务分发器230根据主流水线的指示将任务填充到同目标辅助流水线对应的任务队列。
响应于从任务队列获取了任务描述符,辅助流水线用任务描述符指示的任务的代码的入口地址设置程序计数器(PC),并根据程序计数器的指示加载指令。在一个例子中,为各个辅助流水线分发相同的任务,这些任务具有相同的代码入口地址。从而随着辅助流水线之一加载了任务的代码,代码被缓存,使得其他流水线加载该代码时,能够从缓存中得到该代码。
任务描述符还指示了用于任务的参数,或者存储参数的地址。辅助流水线根据任务描述符的指示获取任务参数,并处理任务。可选地,即使对于具有相同的代码的任务,分发给各辅助流水线的任务参数可以相同或不同,从而使得各辅助流水线用相同的代码并行地处理不同的数据包。依然可选地,任务的参数是只读的或可更新的。分发给各辅助流水线的相同的只读参数,可以只存储单一实例,并由各辅助流水线共享。分发给各辅助流水线的可更新的参数,为每个辅助流水线提供可更新参数的实例,使得各流水线对参数的更新,不会受其他流水线影响。
根据本申请的实施例,主流水线与辅助流水线的每个,各自具有完整的指令集架构寄存器组。每个流水线维护专属于自己的栈。
可以理解地,除了以任务队列形式向辅助流水线分发任务,所属领域技术人员将意识到有其他方式从主流水线向辅助流水线传递信息,例如,通过共享存储器,或专用/共享的数据通道。可选地,辅助流水线的任务队列包括具有不同优先级的多个实例,例如,高优先级队列、普通优先级队列与低优先级队列。任务分发器按照指定的或被配置的策略,选择要填入任务描述符的任务队列。辅助流水线照指定的或被配置的测试,选择任务队列,并从任务队列获取任务描述符。
辅助流水线将任务的处理结果,填入完成队列(例如,图1的完成队列174)。完成队列的条目指示了任务ID、任务的返回值、任务处理成功或失败等。主流水线110从完成队列获取任务的处理结果。以及可选地,对于处理失败的任务,主流水线110对其重新进行分发。
图2B展示了根据本申请又一实施例的流水线提交任务处理结果的示意图。
作为举例,辅助流水线(120、122、……127)通过任务回收器280将任务处理结果提交给主流水线110。
可选地,任务回收器包括多个出口。任务回收器的出口耦合到主流水线与辅助流水线的一个或多个。从而各流水线均能够通过任务回收器获取其他流水线提交的任务处理结果。
任务回收器280协助辅助流水线(120、122、……127)提交任务处理结果。有各个辅助流水线专用的完成队列(290、292……297)。将任务处理结果添加到完成队列(290、292……297),意味着辅助流水线完成了对该任务处理结果的提交。
完成队列(290、292……297)包括多个条目。作为举例,每个条目的大小足以容纳指示任务处理结果的描述符(简称处理结果描述符)。处理结果描述符记录了任务ID、任务的返回值、任务处理成功或失败等。可选地,处理结果描述符还指示了接收任务处理结果的流水线(例如提交任务的流水线)。依然可选地,处理结果描述符还指示了存放任务处理结果的共享存储器地址。
任务回收器280将处理结果描述符添加到完成队列的队尾,而例如主流水线110从任务队列的队头获取处理结果描述符,并根据处理结果描述符的指示获取任务的处理结果。
可选地,响应于任务的处理结果指示失败,主流水线110通过任务分发器230再次分发处理失败的任务。
可选地,任务回收器280包括仲裁器285。仲裁器285选取完成队列,并将选取的完成队列的处理结果描述符提供给主流水线110。例如,仲裁其285通过向主流水线110提供中断向主流水线110提供处理结果描述符。
可选地,仲裁器285具有可配置或可编程的仲裁策略。例如,仲裁器将随机、轮转或加权轮转地选择完成队列。各完成队列可被设置优先级。依然可选地,仲裁器向多个流水线提供处理结果描述符。
图3展示了根据本申请又一实施例的异构多流水线处理器核的框图。
图3的实施例的异构多流水处理器核包括三种流水线,高性能流水线310与、一个或多个普通流水线(320、322)以及一个或多个低功耗流水线(324、325、326、327)。可以理解地,在根据本申请的实施例中,处理器核可包括其他种类的流水线,每种流水线可具有多种数量。
高性能流水线310、普通流水线(320、322)与低功耗流水线(324、325、326、327)具有相同的指令集架构(ISA,Instruction Set Architecture),从而同样的程序既能由高性能流水线310执行,也能由任何一个其他流水线执行。依然可选地,高性能流水线310、普通流水线(320、322)与低功耗流水线(324、325、326、327)在相同的指令集架构下各自具有不同的指令集扩展。
在图3的实施例中,高性能流水线的性能高于普通流水线,普通流水线的性能高于低功耗流水线。例如,高性能流水线具有最高的时钟频率、最多的流水线级数,低功耗流水线具有最低的时钟频率与最少的流水线级数,普通流水线的时钟频率与流水线级数居中。从而高性能流水线310与、一个或多个普通流水线(320、322)以及一个或多个低功耗流水线(324、325、326、327)各自适合处理不同类型的任务。例如,由低功耗流水线来处理单一的网络数据包。处理网络数据包的任务相对简单、频繁发生并且有数据外发/接收操作。如果由高性能流水线处理网络数据包,会由于网络数据包的外发/接收以及数据包之间的切换,带来大量的流水线暂停,从而导致主流水线的处理能力难以得到充分利用。而由多个低功耗流水线的每个来处理网络数据包,处理过程中的流水线暂停仅影响当前的低功耗流水线,而不影响其他流水线,从而不会引起频繁的上下文切换或其他流水线暂停。从而有利于充分利用处理器核的资源(例如,各流水线、取指令单元的带宽、数据访问单元的带宽、高速缓存等)并得到较高的整体处理性能。
高性能流水线310通过任务分发器330向其他流水线分配任务。任务分发器330将任务添加到同其他各流水线耦合的任务队列。其他各流水线从任务队列获取任务并处理。可选地,高性能流水线还耦合到完成队列,其他各流水线将处理完成的任务添加到完成队列,高性能流水线从完成队列获取已被处理完成的任务的信息。一些情况下,响应于任务分发队列分发任务失败,高性能流水线310处理未分发成功的任务。
根据图3的实施例的异构多流水线处理器核,还包括取指令单元340与数据访问单元350。高性能流水线310与、一个或多个普通流水线(320、322)以及一个或多个低功耗流水线(324、325、326、327)共享取指令单元340与数据访问单元350。
可选地,高性能流水线310与、一个或多个普通流水线(320、322)以及一个或多个低功耗流水线(324、325、326、327)各自具有优先级。在同时有多个流水线要加载指令和/或访问数据时,取指令单元340和/或数据访问单元350根据优先级,确定为各流水线提供服务的顺序和/或带宽。
根据图3的实施例的异构多流水线处理器核,还包括高速缓存360与可选的高速缓存362。高速缓存360专用于主流水线310。高速缓存362是可选的,用于一个或多个普通流水线(320、322)以及一个或多个低功耗流水线(324、325、326、327)。可选地,高速缓存360与高速缓存362之间,不提供数据一致性,从而降低缓存系统的复杂度,并保证高速缓存360的性能。依然可选地,高速缓存360与高速缓存362仅为指定的地址空间提供数据一致性,从而高性能流水线、普通流水线与低功耗流水线得以通过指定的地址空间进行高效的数据交换。依然可选地,高速缓存362向一个或多个普通流水线(320、322)以及一个或多个低功耗流水线(324、325、326、327)提供的每个流水线提供独立的缓存空间,而不提供数据一致性,或者仅就指定的地址空间提供数据一致性。
高性能流水线310具有较大的指令缓存和/或数据缓存,以及分支预测单元,这一定程度降低了高性能流水线310对取指令单元340和/或数据访问单元350的带宽需求,而节省出来的取指令单元340和/或数据访问单元350带宽,恰好能被普通流水线(320、322)和/或低功耗流水线(324、325、326、327)所利用。从而使得取指令单元340和/或数据访问单元350得以充分利用。
在可选的实施方式中,用普通流水线(320、322)处理操作系统的进程调度任务。将操作系统的管理进程调度的代码段(任务)运行在普通流水线(320、322),以将进程分发给高性能流水线、普通流水线和/或低功耗流水线来处理。由高性能流水线处理的进程包括任务调度代码段,高性能流水线执行任务调度代码段而将任务分发给普通流水线和/或低功耗流水线。低功耗流水线仅用于处理任务而不分发任务。
图4A展示了根据本申请实施例的高性能流水线的框图。
相比于其他类型的流水线,高性能流水线包括数量最多的流水线级(410),从而高性能流水线可运行在相对最高的时钟频率。高性能流水线的流水线级(410)提供例如多发射、乱序执行等特性,以实现更高的指令处理性能。
高性能流水线还包括完整的用于指令集架构的通用寄存器412、数据存储器420、数据高速缓存接口426、NC-EDI(不可缓存的外部数据接口)424、指令存储器414、指令缓存/分支预测单元416与外部指令访问单元418。通用寄存器412、数据存储器420、数据高速缓存426、NC-EDI(不可缓存的外部数据接口)424、指令存储器414、指令缓存/分支预测单元416与外部指令访问单元418为高性能流水线所独占。可以理解地,现有技术的用于提高性能的处理器部件都可应用于高性能流水线。
指令存储器(I-RAM)414用于存储指令,而数据存储器(D-RAM)420用于存储数据。指令存储器414与数据存储器420耦合到高性能流水线的流水线级,并具有相对于外部存储器的高带宽与低延迟。指令存储器414与数据存储器420例如是各流水线的指令集架构可见的,在指令中可描述所使用的指令存储器414和/或数据存储器420中的地址。数据存储器420用于存储例如栈与任务处理过程中使用的变量。可选地,在各个流水线共享的存储器中存储栈。
指令缓存/分支预测单元416提供例如指令集架构不可见的高速缓存(Cache)和/或分支预测功能。可选地,指令缓存/分支预测单元416的容量较小,仅容纳指定大小的指令,完整程序被存储在外部存储器,通过外部指令访问单元418从外部存储器获取程序的未被缓存的指令部分。
数据缓存接口426耦合到例如高速缓存360(也参看图3),提供例如指令集架构不可见的高速缓存,用于容纳指令所使用的数据。
NC-EDI(不可缓存的外部数据接口,Non-cacheable External Data Interface)424提供对外部存储的数据访问,并且确保所访问的数据不会被缓存。
图4B展示了根据本申请实施例的普通流水线的框图。
普通流水线包括数量居中的流水线级(430),从而普通流水线可运行在相对居中的时钟频率。可选地,普通流水线的流水线级(430)不支持例如多发射、乱序执行等特性,以降低复杂度与功耗。普通流水线也不包括分支预测单元。
普通流水线包括完整的用于指令集架构的通用寄存器432。普通流水线还包括外部指令访问单元438与NC-EDI(不可缓存的外部数据接口)444。可选地或进一步地,普通流水线还包括数据存储器440与数据缓存接口缓存446。数据存储器440的容量可被配置,以适用于多种应用。数据缓存接口446耦合到例如高速缓存360。通过数据缓存接口446所提供的数据缓存的容量可被配置。
在可选的实施方式中,普通流水线不包括指令存储器434和/或指令缓存436。可以理解地,也可以为普通流水线设置指令存储器434和/或指令缓存436,和/或配置指令存储器434和/或指令缓存436的容量,以提升性能,并满足不同应用的需要。
依然可选地,普通流水线的数据存储器440具有比高性能流水线的数据存储器420更小的容量,指令缓存436具有比指令缓存/分支预测单元416更小的容量,指令存储器434具有比指令存储器414更小的容量。
图4C展示了根据本申请实施例的低功耗流水线的框图。
低功耗流水线的优化方向在于降低功耗,和/或适于处理大量并发的简单任务,例如,处理网络数据包。
低功耗流水线包括数量最少的流水线级(450、470、490),从而低功耗流水线可运行在较低的时钟频率。低功耗流水线的流水线级(450、470、490)不支持例如多发射、乱序执行等特性,以降低复杂度与功耗。低功耗流水线也不包括分支预测单元。
在同一处理器核内,多个低功耗流水线可具有相同或不同的配置。
参看图4C,低功耗流水线的流水线级(450、470、490)共享外部指令访问单元458。共享外部指令访问单元458以例如轮转的策略同其耦合的各个低功耗流水线的流水线级(450、470、490)服务。
可选地,为低功耗流水线设置共享的指令存储器454和/或共享的指令缓存456,和/或配置共享指令存储器454和/或共享指令缓存456的容量,以提升性能,并满足不同应用的需要。
低功耗流水线包括完整的用于指令集架构的通用寄存器(452、472、492)。
图4C的实施例中,低功耗流水线的流水线级(450与470)共享NC-EDI(不可缓存的外部数据接口)464。共享NC-EDI(不可缓存的外部数据接口)464以例如轮转的策略同其耦合的各个低功耗流水线的流水线级(450与470)服务。可选地,低功耗流水线的流水线级(450与470)共享数据存储器460与数据缓存接口466。
数据存储器460和/或通过数据缓存接口466使用的数据高速缓存的容量可被配置,以适用于多种应用。低功耗流水线的流水线级(490)独占NC-EDI(不可缓存的外部数据接口)496。可选地,低功耗流水线的流水线级(490)独占数据存储器494与数据高速缓存498。
依然可选地,低功耗流水线的数据存储器(460、494)具有比普通流水线的数据存储器440更小的容量,共享指令缓存456具有比指令缓存/分支预测单元436更小的容量,共享指令存储器454具有比指令存储器434更小的容量。
在可选的实施方式中,低功耗流水线(450、470、490)不包括指令存储器、指令缓存、数据存储器和/或数据缓存接口。
低功耗流水线的流水线级数少,从而在发生上下文切换时的开销低,适合替代高性能流水线来处理中断类型的任务。低功耗流水线还适合运行守护任务,来管理高性能流水线和/或普通流水线上的任务调度,实时监控高性能流水线和/或普通流水线的运行状态。低功耗流水线也适合于管理诸如串口的低速外设。通过设置多个低功耗流水线,让多个低功耗流水线并行处理诸如网络数据包的简单、大量的任务,有助于提高处理器核的数据包吞吐量,充分利用处理器核的数据访问单元。采用多个低功耗流水线处理大量并发任务,以流水线数量来获得处理能力。在同样芯片面积的情况下,多个低功耗流水线的处理能力例如超过高性能流水线或普通流水线。低功耗流水线也适合处理对运算要求低、访存操作多或者分支跳转多的任务。访存操作多和/或分支跳转多的任务,处理过程中将使得流水线频繁处于等待状态而难以充分发挥性能,低功耗流水线简单的特点,则适合处理此类任务。
可选地,普通流水线和/或低功耗流水线被用于执行守护进程的任务。
在又一个实施方式中,低功耗流水线不使用私有存储器作为栈甚至不支持栈操作,以进一步简化低功耗流水线的功能。在没有栈的配置中,低功耗流水线中运行的程序不支持函数调用,也不响应中断。
图5A展示了现有技术的处理器的函数调用示意图。
以Main函数(主函数)510为例,Main函数执行过程中调用函数520。图5A中,黑色实线箭头指示了处理器流水线执行代码的逻辑顺序。
响应于Main函数510调用函数520,首先执行压栈代码段512来保存Main函数的上下文。接下来,执行函数520的代码段。函数520执行完成前,执行弹栈512代码段来恢复所保存的Main函数的上下文,再回到Main函数510。在函数调用过程中,用于保存上下文与恢复上下文的操作频繁发生,降低了函数的执行效率。
图5B展示了根据本申请实施例的处理器的函数调用示意图。
也参看例如图1,主流水线110运行Main函数540,而辅助流水线(120、122)运行任务代码段550。可选地,任务代码段550被封装为“函数”,使得Main函数540通过例如调用函数(或称任务分发编程接口,(API,Application Programming Interface))方式来向辅助流水线(120、122)分发任务,而辅助流水线(120、122)通过执行任务代码段550来处理任务。
为分发任务,Main函数540执行分发任务代码段542,以将任务描述符添加到任务队列(也参看图1与图2)。被Main函数540分发的任务,相对于Main函数540是例如异步的。Main函数540将任务的描述符添加到任务队列,接下来,Main函数540得以继续执行,而不等待任务处理完成。可选地,分发任务代码段542操作任务分发器130来向任务队列添加任务描述符。依然可选地,若分发任务代码段542分发任务失败,由Main函数540来处理被分发失败的任务。
辅助流水线(120、122)通过执行获取任务的代码段(552)从任务队列获取任务描述符。根据任务描述符获取任务代码段550来处理任务。辅助流水线(120、122)响应于中断或在指定条件下执行获取任务的代码段(552)。辅助流水线(120、122)从任务队列获取的任务描述符,是Main函数540执行分发任务代码段542添加到任务队列的任务描述符。
在一个例子中,任务代码段550向主函数提供任务处理结果。任务代码段550通过执行代码段(552)填充完成队列以提交任务处理结果。代码段(552)相对于任务代码段550也是例如异步的。任务代码段550通过执行代码段(552)填充完成队列后,继续获取任务并执行,而不等待Main函数540从完成队列获取了任务处理结果。在Main函数540的指示下,主流水线通过执行代码段(548)以从完成队列获取任务处理结果。主流水线响应于中断或在指定条件下执行代码段(548)。
在又一个例子中,任务代码段550的任务处理结果无需向Main函数540报告。从而辅助流水线(120、122)无须执行代码段(552)。进而主流水线110也无须执行代码段(548)。
根据本申请的实施例,Main函数540与任务代码段550是异步的,Main函数540无须等待任务代码段550被执行完成。
虽然图5B展示了一个Main函数540与一个任务代码段550,可以理解地,处理器核的一个或多个流水线各自运行分发任务的Main函数,而处理器核的一个或多个流水线各自从任务队列获取任务并处理。除了Main函数,其他函数也能够分发任务。
图6展示了根据本申请实施例的分发任务的时序图。
也参看图1与图5B,主流水线110执行Main函数540(610),通过例如调用分发任务代码段542来分发任务A(612)。例如,分发任务代码段542生成任务描述符并将任务描述符提供给任务分发器130。
任务分发器130执行对任务A的分发(620)。例如,任务分发器130选取辅助流水线(120、122)之一,并将任务描述符添加到同所选的辅助流水线(例如,辅助流水线120)关联的任务队列。响应于将任务描述符添加到同辅助流水线120关联的任务队列,任务分发器130向主流水线110指示成功将任务A分发给辅助流水线120(622)。主流水线110通过例如分发任务代码段542获取任务分发器130提供的分发任务A的结果(任务A分发成功)(614)。以及主流水线110执行的例如Main函数510继续运行,并分发任务B(650)。
由于任务分发器130将任务描述符添加到同辅助流水线120关联的任务队列,辅助流水线120上执行的代码段(552)从任务队列获取任务描述符所指示的任务A(630)。根据获取的任务描述符,辅助流水线执行任务代码段550来执行任务A(632)。以及可选地,辅助流水线120根据执行任务A的结果更新完成队列(634)。
响应于主流水线110通过例如代码段(542)分发任务B,任务分发器130执行对任务B的分发(624)。例如,任务分发器130根据同辅助流水线122关联的任务队列中的任务描述符数量少于同辅助流水线120关联的任务队列中的任务描述符数量,而选择辅助流水线122来处理任务B,将任务B的任务描述符添加到同辅助流水线122关联的任务队列。响应于将任务描述符添加到同辅助流水线122关联的任务队列,任务分发器130向主流水线110指示成功将任务B分发给辅助流水线122(626)。主流水线110通过例如分发任务代码段542获取任务分发器130提供的分发任务B的结果(任务B分发成功)(652)。以及主流水线110执行的例如Main函数510继续运行,并分发任务C(654)。
辅助流水线122上执行的代码段(552)从任务队列获取任务描述符所指示的任务B(640)。根据获取的任务描述符,辅助流水线122执行任务代码段550来执行任务B(642)。以及可选地,辅助流水线122根据执行任务B的结果更新完成队列(644)。
响应于主流水线110分发任务C,任务分发器130执行对任务C的分发(628)。作为举例,任务分发器130发现辅助流水线(120与122)都无法接收更多的任务,而向主流水线执行任务C分发失败(629)。主流水线110通过例如分发任务代码段542获取任务分发器130提供的分发任务C的结果(任务C分发失败)(655)。以及主流水线110执行的例如Main函数510来执行任务C(656)。响应于任务C被执行完成,主流水线110再执行其他任务(658)。
可选地,主流水线120还响应于中断、周期性地或在其他指定条件下,访问完成队列,以获取例如任务A和/或任务B的执行结果。可以理解地,辅助流水线120就任务A的执行结果更新完成队列(634)后,或者辅助流水线122就任务B的执行结果更新完成队列(644)后,运行在主流水线120的Main函数510无须立即访问完成队列,而在主流水线120空闲或适当的时候,访问完成队列,以提高执行效率。
图7展示了根据本申请实施例的任务描述符。
任务描述符710是任务T1的任务描述符,任务描述符720是任务T2的任务描述符。函数T1(A,P)代表任务T1,而函数T2(A,P)代表任务T2。在代码中通过调用函数T1或函数T2来分发任务T1或任务T2。
以函数T1(A,P)为例,参数A指示了任务的入口指针,而参数P指示了任务的参数集合的指针。可选地,代表任务的函数包括更多或更少的参数。
任务描述符710,可选地,指示了代表任务T1的函数T1(A,P)的名字(T1)与参数列表(A与P)。任务描述符710还包括任务入口指针712与任务参数集指针714。任务描述符720还包括任务入口指针722与任务参数集指针724。任务入口指针,指示处理任务的代码段(例如,任务体713或任务体723)的入口在存储空间750中的地址。任务的参数集指针,指示任务的参数集合(例如任务参数集合715或任务参数集合725)在存储空间750中的地址。
任务可能需要0个、1个或多个参数,用任务参数集合指针P来指示任务参数集合,将任务需要的参数设置在任务参数集合中,从而在代表任务的函数(例如,函数T1或函数T2)中用单一的参数P来描述任务的参数,使得任务描述符具有例如固定的大小,以降低任务描述符的复杂度。
作为举例,采用如下的代码段来指示分发任务:
If(T(A,P)==FAIL)//--------(1)
{A(P);}//-----------------------(2)。
在(1)处,通过调用函数T(A,P),来尝试分发任务。如果分发任务成功,函数T(A,P)返回值为“FAIL”之外的其他值,则任务分发完成。若在(1)处,分发任务失败,函数T(A,P)返回值为“FAIL”,则执行(2)处的代码,调用函数A(P)来处理任务。
如果调用函数T(A,P)分发任务成功,任务分发器130接管对任务的分发。任务分发器130是硬件或函数T(A,P)的函数体。
可选地,任务T1与任务T2具有相同的任务体(例如任务体713)与不同的任务参数集(例如,分别是任务参数集715与任务参数集725)。
依然可选地,任务描述符还指示任务返回值集合指针。任务可能提供0个、1个或多个返回值,用任务返回值集合指针指示任务返回值集合(任务返回值集合718或任务返回值集合728)在存储空间750中的地址。可选地,任务返回值被添加到完成队列的条目中。
可选地,辅助流水线(120、122)能访问存储空间750的任务体(713与723)、任务参数集合(715与725)与返回值集合(718与728),从而任务T1与T2可被分发给辅助流水线(120、122)的任何一个。主流水线110仅能访问返回值集合(718与728)而不能访问存储空间750的任务体(713与723)、任务参数集合(715与725)。依然可选地,在主流水线110与辅助流水线(120、122)均能访问的存储空间中提供返回值集合(718与728),而在仅由辅助流水线(120、122)访问的存储空间中提供任务体(713与723)与任务参数集合(715与725)。
根据本申请的实施例,任务体的入口处的代码,可选地,识别是否需要保存上下文。当任务由例如辅助流水线(非产生任务的流水线)执行时,无须保存流水线的上下文,而当任务由主流水线(产生任务的流水线)执行时,需要保存流水线的上下文。相应地,在任务体的出口处的代码,识别是否需要恢复上下文。例如,任务体的入口处的代码,通过访问架构寄存器来识别自身运行在哪类流水线,进而确定是否需要保存上下文。可选地,产生任务描述符时,在任务描述符或者任务描述符所指示的存储空间中设置标志,以指示任务的代码开始执行时是否需要保存上下文,和/或任务的代码执行完成时,是否需要恢复上下文。
有多种方式确定任务分发的目标(执行处理任务的代码的流水线)。例如,用代表任务的函数的参数,指示任务分发的目标流水线。又例如,在高级语言编写的程序中,通过标记、编译指令等方式向编译器指示任务分发的建议或目标,由编译器在代表任务的函数中生成能够被调动来处理任务的流水线。依然可选地,在运行时,由任务分发器根据各流水线的负载(例如任务队列深度)来选择流水线处理任务,并且在其他流水线都无法处理任务时,由发出任务的流水线(例如主流水线110)来处理任务。
图8展示了根据本申请实施例的任务与任务包的示意图。
一个或多个任务构成任务包。用TID(任务标识符)唯一标识任务,用PID(任务包标识符)唯一标识任务包。参看图8,PID为0的任务包包括1个任务(TID为0的任务),PID为2的任务包包括3个任务(TID分别为2、3和4)。在可选的实施例中,代表任务的函数还包括指示TID和/或PID的参数。
通过TID,跟踪任务的处理结果,或对任务进行进一步处理。例如,响应于完成队列的条目指示了任务执行失败,通过TID识别执行失败的任务,并尝试重新执行当前TID所代表的任务。
通过任务包标记一组具有关联性的任务,以促进任务调度的灵活性和可管理性。例如,使属于相同任务包的多个任务被处理完成后,再开始对另一任务包的数据。例如,将矩阵运算分为多个子矩阵的运算,每个子矩阵计算作为一个任务,而将属于同一矩阵的所有子矩阵的计算添加到相同的任务包。
图9展示了根据本申请实施例的任务包描述符集合。
用任务包描述符集合管理各任务包。任务包描述符集合的每个条目包括计数器,指示一个任务包的正在被处理的任务数量。用PID索引任务包描述符集合的元素。任务包描述符集合的元素数量不小于所支持的任务包最大数量。
任务包描述符集合由任务分发器(也参看图1,例如,任务分发器130)或发出任务的流水线执行的代码段维护。
为分发任务,需要将任务添加到任务包。任务包可以被创建。响应于任务包中的任务都被处理完成,删除任务包。创建任务包时,向创建的任务包分配PID,删除任务包时,释放被删除任务包的PID。
响应于向例如PID为X的任务包添加任务,用PID X为索引访问任务包描述符集合中的元素,并使元素的计数器递增;响应于例如PID为Z的任务包的任务之一处理完成,用PID Z为索引访问任务包描述符集合中的元素,并使元素的计数器递减。
可选地,任务包描述符集合的元素还包括任务包的指定任务数量,任务包中已经开始处理的任务数量,和/或任务包中已经被处理完成的任务数量。
在一个例子中,任务包具有指定的任务数量(记为C),代表了任务包所能承载的任务数量的最大值。
为分发任务,首先将任务添加到任务包(例如,由PID为0的任务包)。若PID为0的任务包中任务数量已达到最大值,该任务包无法容纳更多的任务,则创建新任务包来容纳待分发的任务。
响应于任务包中的任务被分发(被分发给辅助流水线(120、122)或主流水线110),使任务包描述符的已经开始处理的任务数量递增;响应于任务包中的任务被处理完成,使任务包描述符的已经被处理完成的任务数量递增。若任务包描述符的已经被处理完成的任务数量同任务包描述符的指定的任务数量(C)相同,意味着该任务包描述符所代表任务包的所有任务被处理完成,该任务包描述符可被释放。
在可选的实施方式中,任务分发器识别任务包的所有任务都被处理完成后,才向发出任务的例如主线程110报告任务包被处理完成。而在任务包的所有任务都被处理完成前,不向例如主线程110报告任务包的任务的处理结果,以减少对主线程110的打扰。
作为又一个例子,任务包中任务数量的最大值被在运行时指定。从而发出任务的例如主流水线110通过指定任务包中任务数量的最大值,来向任务分发器指示分发任务的时机和/或报告任务处理完成的时机。例如,任务分发器在任务包的被添加的任务数量达到最大值时,开始任务分发;和/或,任务分发器在任务包中的所有任务都被执行完成后,向主流水线110报告这些任务被处理完成。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

Claims (10)

1.一种用于多流水线处理器的任务分发方法,包括:
在第一流水线执行指令以调用任务分发编程接口,以指示在可用的流水线上处理第一任务;
响应于任务分发接口指示第一任务分发失败,在所述第一流水线上处理第一任务。
2.根据权利要求1所述的方法,还包括:
响应于任务分发接口指示第一任务分发成功,在第一流水线上继续执行其他指令或调用任务分发编程接口以指示在可用的流水线上处理第二任务。
3.根据权利要求1或2所述的方法,还包括:
生成第一任务的任务描述符,第一任务的任务描述符指示了第一任务的任务体的入口地址与用于第一任务的参数;以及将第一任务的描述符提供给任务分发编程接口。
4.根据权利要求1-3之一所述的方法,还包括:
在第一流水线执行指令以获取完成队列任务的处理结果。
5.根据权利要求1-4之一所述的方法,还包括:
为第一任务设置第一任务标识符(TID);
将第一任务添加到具有第一任务包标识符(PID)的任务包。
6.根据权利要求5所述的方法,还包括:
响应于第一任务包标识符(PID)的任务包被添加了指定数量的任务,向可用的流水线分发第一任务包标识符(PID)的任务包的所有任务。
7.根据权利要求1-6之一所述的方法,还包括:
响应于第一流水线不具备处理第一任务的资源,在第一流水线执行指令以调用任务分发编程接口,以指示在可用的流水线上处理第一任务。
8.根据权利要求1-7之一所述的方法,还包括:
响应于调用任务分发编程接口,从可用的流水线中选择第二流水线处理第一任务。
9.根据权利要求1-8之一所述的方法,还包括:
响应于调用任务分发接口,任务分发器从可能的流水线中选择第二流水线,并将第一任务的任务描述符添加到第二流水线的任务存储器。
10.根据权利要求1-8之一所述的方法,还包括:
在第一流水线执行指令以调用任务分发编程接口,以指示在可用的流水线上处理第三任务;
响应于调用任务分发编程接口,从可用的流水线中选择第三流水线处理第三任务;其中
第三任务的任务体入口地址同第一任务的任务体入口地址相同。
CN201811144473.3A 2018-09-29 2018-09-29 Mhp异构多流水线处理器的任务分发方法 Active CN109388429B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811144473.3A CN109388429B (zh) 2018-09-29 2018-09-29 Mhp异构多流水线处理器的任务分发方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811144473.3A CN109388429B (zh) 2018-09-29 2018-09-29 Mhp异构多流水线处理器的任务分发方法

Publications (2)

Publication Number Publication Date
CN109388429A true CN109388429A (zh) 2019-02-26
CN109388429B CN109388429B (zh) 2024-01-02

Family

ID=65418244

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811144473.3A Active CN109388429B (zh) 2018-09-29 2018-09-29 Mhp异构多流水线处理器的任务分发方法

Country Status (1)

Country Link
CN (1) CN109388429B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111008042A (zh) * 2019-11-22 2020-04-14 中国科学院计算技术研究所 基于异构流水线的高效通用处理器执行方法及系统
CN111459551A (zh) * 2020-04-14 2020-07-28 上海兆芯集成电路有限公司 具高度领先分支预测器的微处理器
CN114610395A (zh) * 2022-03-11 2022-06-10 飞腾信息技术有限公司 指令分派方法、装置、电子设备及计算机可存储介质

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101464721A (zh) * 2007-12-19 2009-06-24 国际商业机器公司 控制流水线型处理器中的功率消耗的方法和系统
CN102004663A (zh) * 2009-09-02 2011-04-06 中国银联股份有限公司 一种多任务并发调度的系统及方法
CN103067524A (zh) * 2013-01-18 2013-04-24 浪潮电子信息产业股份有限公司 一种基于云计算环境的蚁群优化计算资源分配方法
US20140095836A1 (en) * 2012-06-13 2014-04-03 International Business Machines Corporation Cross-pipe serialization for multi-pipeline processor
CN103970602A (zh) * 2014-05-05 2014-08-06 华中科技大学 一种面向x86多核处理器的数据流程序调度方法
WO2015078380A1 (zh) * 2013-11-27 2015-06-04 上海芯豪微电子有限公司 一种指令集转换系统和方法
GB201521271D0 (en) * 2015-12-02 2016-01-13 Swarm64 As Data processing
CN106227591A (zh) * 2016-08-05 2016-12-14 中国科学院计算技术研究所 在异构多核片上系统上进行无线通信调度的方法和装置

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101464721A (zh) * 2007-12-19 2009-06-24 国际商业机器公司 控制流水线型处理器中的功率消耗的方法和系统
CN102004663A (zh) * 2009-09-02 2011-04-06 中国银联股份有限公司 一种多任务并发调度的系统及方法
US20140095836A1 (en) * 2012-06-13 2014-04-03 International Business Machines Corporation Cross-pipe serialization for multi-pipeline processor
CN103067524A (zh) * 2013-01-18 2013-04-24 浪潮电子信息产业股份有限公司 一种基于云计算环境的蚁群优化计算资源分配方法
WO2015078380A1 (zh) * 2013-11-27 2015-06-04 上海芯豪微电子有限公司 一种指令集转换系统和方法
CN103970602A (zh) * 2014-05-05 2014-08-06 华中科技大学 一种面向x86多核处理器的数据流程序调度方法
GB201521271D0 (en) * 2015-12-02 2016-01-13 Swarm64 As Data processing
CN106227591A (zh) * 2016-08-05 2016-12-14 中国科学院计算技术研究所 在异构多核片上系统上进行无线通信调度的方法和装置

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111008042A (zh) * 2019-11-22 2020-04-14 中国科学院计算技术研究所 基于异构流水线的高效通用处理器执行方法及系统
CN111008042B (zh) * 2019-11-22 2022-07-05 中国科学院计算技术研究所 基于异构流水线的高效通用处理器执行方法及系统
CN111459551A (zh) * 2020-04-14 2020-07-28 上海兆芯集成电路有限公司 具高度领先分支预测器的微处理器
CN111459551B (zh) * 2020-04-14 2022-08-16 上海兆芯集成电路有限公司 具高度领先分支预测器的微处理器
CN114610395A (zh) * 2022-03-11 2022-06-10 飞腾信息技术有限公司 指令分派方法、装置、电子设备及计算机可存储介质

Also Published As

Publication number Publication date
CN109388429B (zh) 2024-01-02

Similar Documents

Publication Publication Date Title
US11836524B2 (en) Memory interface for a multi-threaded, self-scheduling reconfigurable computing fabric
US10268609B2 (en) Resource management in a multicore architecture
EP1730628B1 (en) Resource management in a multicore architecture
CN103999051B (zh) 用于着色器核心中着色器资源分配的策略
CN100557570C (zh) 多处理器系统
US8307053B1 (en) Partitioned packet processing in a multiprocessor environment
JP4072271B2 (ja) 複数のオペレーティングシステムを実行する計算機
WO2016112701A9 (zh) 异构多核可重构计算平台上任务调度的方法和装置
Chen et al. Supporting distributed shared memory on multi-core network-on-chips using a dual microcoded controller
US20020103847A1 (en) Efficient mechanism for inter-thread communication within a multi-threaded computer system
CN109388429A (zh) Mhp异构多流水线处理器的任务分发方法
Tantalaki et al. Pipeline-based linear scheduling of big data streams in the cloud
US9747216B2 (en) Computer processor employing byte-addressable dedicated memory for operand storage
WO2021022964A1 (zh) 一种基于多核系统的任务处理方法、装置及计算机可读存储介质
CN110045988A (zh) 具有共享前端单元的处理核
IL264794B2 (en) Scheduling of tasks on a multi-processor device
Govindarajan et al. Design and performance evaluation of a multithreaded architecture
CN109408118A (zh) Mhp异构多流水线处理器
CN116909943A (zh) 一种缓存访问方法、装置、存储介质及电子设备
CN108958903A (zh) 嵌入式多核中央处理器任务调度方法与装置
US9747238B2 (en) Computer processor employing split crossbar circuit for operand routing and slot-based organization of functional units
CN109426562A (zh) 优先级加权轮转调度器
CN115525343A (zh) 一种并行译码的方法、处理器、芯片及电子设备
CN104636207A (zh) 基于gpgpu体系结构的协同调度方法及系统
CN114564420A (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