CN108139932A - 关闭关键执行路径的任务信令 - Google Patents

关闭关键执行路径的任务信令 Download PDF

Info

Publication number
CN108139932A
CN108139932A CN201680060072.2A CN201680060072A CN108139932A CN 108139932 A CN108139932 A CN 108139932A CN 201680060072 A CN201680060072 A CN 201680060072A CN 108139932 A CN108139932 A CN 108139932A
Authority
CN
China
Prior art keywords
thread
relaying
processor
task
starting
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
CN201680060072.2A
Other languages
English (en)
Other versions
CN108139932B (zh
Inventor
A·拉曼
P·蒙特西诺斯奥尔特戈
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.)
Qualcomm Inc
Original Assignee
Qualcomm Inc
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 Qualcomm Inc filed Critical Qualcomm Inc
Publication of CN108139932A publication Critical patent/CN108139932A/zh
Application granted granted Critical
Publication of CN108139932B publication Critical patent/CN108139932B/zh
Expired - Fee Related 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/485Task life-cycle, e.g. stopping, restarting, resuming execution
    • 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4812Task transfer initiation or dispatching by interrupt, e.g. masked

Abstract

实施例包括用于计算设备上的任务信令的计算设备、系统和方法。可以中断关键执行路径上的起始线程对任务的执行,以由起始线程创建至少一个并行任务,其中所述至少一个并行任务可以与起始线程执行的任务并行执行。起始线程可以发送用于向中继线程指示所述至少一个并行任务的创建的起始信号。在获取所述至少一个并行任务之前,可以恢复起始线程对任务的执行。

Description

关闭关键执行路径的任务信令
背景技术
构建响应性、高性能和高效的应用程序对于提供满意的用户体验来说是至关重要的。为了提高性能和功效,程序的并行部分可以由运行在一个或多个计算内核上、中央处理单元(CPU)、图形处理单元(GPU)或者其它并行硬件上的一个或多个线程来执行。通常,称为“主线程”的一个线程进入并行部分,创建帮助任务,通知其它线程帮助执行该并行部分。
尽管任务创建通常不昂贵,但通知其它线程可能相对非常昂贵,这是因为它通常涉及操作系统调用。例如,在顶级四核智能手机中,等待条件变量的信号线程的延迟可能高达40微秒(大约90,000个CPU周期)。代码的几个并行部分中的每一部分可能需要40微秒才能执行,使得这种高信令成本对于并行执行来说是不可接受的。在关键执行路径上的信令期间,并行部分的执行不会在关键执行路径上或者该信令发起的另一个线程上开始,直到该信令完成为止。因此,并行化不是在关键执行路径上加速原始代码段,而是将关键执行路径上的执行速度放慢了将近两倍。当其它线程与关键执行路径上的任务并行执行任务时,可以恢复该延迟中的某些。
发明内容
各个实施例的方法和装置提供了用于计算设备上的任务信令的电路和方法。各个实施例可以包括:由关键执行路径上的起始线程中断任务的执行;由起始线程创建至少一个并行任务,所述至少一个并行任务可以与起始线程执行的任务并行执行;发送用于由起始线程向中继线程指示所述至少一个并行任务的创建的起始信号;在获取所述至少一个并行任务之前,恢复起始线程对任务的执行。
此外,一些实施例还可以包括:由所述中继线程接收所述起始信号;当所述中继线程处于等待状态时,响应于接收到所述起始信号,将所述中继线程改变成活动状态。
在一些实施例中,所述起始信号可以是直接起始信号,由所述中继线程接收所述起始信号可以包括:经由与所述起始线程的连接来接收所述直接起始信号。
在一些实施例中,所述起始信号可以是间接起始信号,所述实施例还可以包括:修改存储器设备的一个位置处的用于指示所述至少一个并行任务的所述创建的数据,其中,由所述中继线程接收所述起始信号可以包括:从所述存储器设备的所述位置获取所修改的数据。
一些实施例还可以包括:向至少一个工作线程发送用于指示所述至少一个并行任务的所述创建的中继信号。
此外,一些实施例还可以包括:由所述至少一个工作线程接收所述中继信号;当所述至少一个工作线程处于等待状态时,响应于接收到所述中继信号,将所述至少一个工作线程改变成活动状态;由所述至少一个工作线程获取所述至少一个并行任务;由所述至少一个工作线程与所述起始线程执行所述任务并行地执行所述至少一个并行任务。
此外,一些实施例还可以包括:判断所述中继线程是否保留另一个并行任务;由所述中继线程获取所述另一个并行任务;由所述中继线程与所述起始线程执行所述任务并行地执行所述另一个并行任务。
此外,一些实施例还可以包括:判断是否超过用于所述中继线程的状态改变门限;响应于确定超过用于所述中继线程的所述状态改变门限,将所述中继线程的状态从活动状态改变成等待状态,或者从所述等待状态的一个级别改变成所述等待状态的更低级别。
各个实施例可以包括被配置为用于任务信令的计算设备。该计算设备可以包括彼此之间通信连接的多个处理器核心,其中,所述多个处理器核心包括被配置为执行起始线程的第一处理器核心、被配置为执行中继线程的第二处理器核心、以及被配置为执行工作线程的第三处理器核心,其中所述处理器核心被配置为执行上面所描述的一个或多个实施例方法的操作。
各个实施例可以包括被配置为用于任务信令的计算设备,其具有用于执行上面所描述的方面方法中的一个或多个的功能的单元。
各个实施例可以包括其上存储有处理器可执行指令的非临时性处理器可读存储介质,其中所述处理器可执行指令被配置为使计算设备的处理器执行上面所描述的方法的操作。
附图说明
被并入本文并且构成本说明书一部分的附图,描绘了各个实施例的示例性实施例,并且连同上面给出的概括描述以及下面给出的详细描述一起来解释本发明的特征。
图1是示出适合于实现实施例的计算设备的组件框图。
图2是示出适合于实现实施例的示例性多核处理器的组件框图。
图3是根据一个实施例,示出使用直接起始信令的关键执行路径的任务信令关闭的例子的处理流程信令图。
图4是根据一个实施例,示出使用间接起始信令的关键执行路径的任务信令关闭的例子的处理流程信令图。
图5是根据一个实施例,示出用于实现关键执行路径的任务信令关闭的线程的状态进展的状态图。
图6是示出用于关键执行路径的任务信令关闭中的起始信令的实施例方法的处理流程图。
图7是示出用于关键执行路径的任务信令关闭中的中继信令的实施例方法的处理流程图。
图8是示出用于关键执行路径的任务信令关闭中的任务执行的实施例方法的处理流程图。
图9是示出适合于结合各个实施例使用的示例性移动计算设备的组件框图。
图10是示出适合于结合各个实施例使用的示例性移动计算设备的组件框图。
图11是示出适合于结合各个实施例使用的示例性服务器的组件框图。
具体实施方式
现在参照附图来详细地描述各个实施例。在可以的地方,贯穿附图使用相同的附图标记来指代相同或者类似的部件。对于特定示例和实现的引用只是用于说明目的,而不是旨在限制本发明的保护范围。
本文可互换地使用术语“计算设备”和“移动计算设备”来指代下面中的任何一项或者全部:蜂窝电话、智能电话、个人或移动多媒体播放器、个人数据助理(PDA)、膝上型计算机、平板计算机、可转换膝上型计算机/平板电脑(2合1电脑)、智能本、超级本、掌上型计算机、无线电子邮件接收机、具备多媒体互联网功能的蜂窝电话、移动游戏控制台、无线游戏控制器、以及包括存储器和多核可编程处理器的类似个人电子设备。虽然各个实施例对于诸如智能电话之类的移动计算设备(其中移动计算设备具有有限的存储器和电池资源)特别有用,但这些实施例通常也可用于实现多个存储器设备和有限的功率预算的任何电子设备,其中在该情况下,减少处理器的功耗可以延长移动计算设备的电池工作时间。术语“计算设备”还可以指代包括个人计算机、台式计算机、一体式计算机、工作站、超级计算机、大型计算机、嵌入式计算机、服务器、家庭影院计算机和游戏控制台的固定计算设备。
实施例包括用于通过减少关键执行路径上的信令负担并通过专用线程实现信令来提高设备性能的方法、以及实现这些方法的系统和设备。实施例包括用于混合信令方案的方法、系统和设备,其包括由起始线程向专用中继线程发信号通知用于执行的并行任务,由中继线程向一个或多个工作线程发信号通知用于执行的并行任务。
在设备上执行的外部进程可以包括能够与外部进程并行执行的并行部分。并行部分可以包括能够与外部进程并行执行的任何进程。为了便于解释起见,本文使用嵌套循环的非限制性示例来描述并行部分。嵌套循环可以涉及针对内部进程的各种执行的多个执行。为了帮助执行外部进程的嵌套循环,用于外部进程的关键执行路径上的起始线程创建并行任务以供其它工作线程执行,例如在与起始线程不同的处理器或处理器核心上执行的线程。
起始线程可以向中继线程发信号表示创建了并行任务以供工作线程执行。通过起始线程(例如,直接起始信令线程)来向该线程通知创建了用于由该线程执行的并行任务,以中断关键执行路径中的主线程对任务的执行。在一个实施例中,中继线程可以活动地检查或等待来自起始线程的信号(例如,到中继线程的直接起始信号或者设置中继线程所监测的存储器中布尔值)。
起始线程对中继线程的信号可以包括被配置为向中继线程通知以下信息的针对中继线程的信号:创建了用于由不同于起始线程的线程(例如,工作线程或者该中继线程本身)执行的并行任务。起始线程对中继线程的信号可以包括针对中继线程的直接起始信号,其可以将中继线程从空闲线程或非活动线程中唤醒。起始线程对中继线程的信号可以包括在存储器中的一个位置设置一个值(例如,寄存器中的布尔标志),其指示创建了并行任务,在该情况下,中继线程可以针对用于指示创建了并行任务的值,定期地检查存储器中的该位置。
在任一实施例中,只需要起始线程发信号通知中继线程来启动所创建的并行任务的并行处理。因此,起始线程不必发信号通知其它工作线程,从而减少起始线程发信号通知已创建并行任务所花费的时间和资源量。在向中继线程发送信号之后,起始线程返回到在关键执行路径上执行其任务,而无需承担必须向工作线程发送更多信号的开销,或者在各个实施例中,必须等待创建的并行任务被工作线程或中继线程获取。
在一个实施例中,起始线程可以通过将值(例如,布尔值)写入到多个中继线程可访问的存储器中的所述位置,或者通过直接发送通知信号来通知给每个中继线程,来发信号通知多个中继线程。所述多个中继线程的数量可以小于或等于所述多个工作线程的数量。中继线程和工作线程的数量以及将一组工作线程分配给中继线程,可以基于性能和/或功率要求来配置,并且可以是针对每个进程可配置的。
响应于从起始线程接收到该信号,在中继线程等待信号的同时,中继线程可以发信号通知一组工作线程,将这些工作线程分配给处于活动、空闲或非活动状态的处理器或处理器核心。中继线程的该信号可能会导致工作线程中的一个或多个被唤醒、获取并行任务和执行并行任务。工作线程的该信令可以通过操作系统调用来实现,其中该操作系统调用可以指定一组工作或中继线程内的特定工作或中继线程接收该信号或者将该信号广播给该组工作线程。在一个实施例中,分配给指定发送的工作线程的处理器或处理器核心可以被预先分配为执行并行任务。在一个实施例中,广播该信号可以在分配有工作线程(其被分配为执行并行任务)的处理器或处理器核心之间产生竞争状况。
图1示出了适合于结合各个实施例使用的包括有与远程计算设备50进行通信的计算设备10的系统。计算设备10可以包括具有处理器14、存储器16、通信接口18和存贮存储接口20的片上系统(SoC)12。此外,该计算设备还可以包括诸如有线或无线调制解调器之类的通信组件22、存贮存储器24、用于建立到无线网络30的无线连接32的天线26、和/或用于将有线连接44连接到互联网40的网络接口28。处理器14可以包括各种各样的硬件内核中的任何一种(例如,多个处理器核心)。
本文使用术语“片上系统”(SoC)来指代一组互连的电子电路,其通常包括(但不是仅此而已)硬件内核、存储器和通信接口。硬件内核可以包括各种各样的不同类型的处理器,例如通用处理器、中央处理单元(CPU)、数字信号处理器(DSP)、图形处理单元(GPU)、加速处理单元(APU)、辅助处理器、单核处理器和多核处理器。此外,硬件内核还可以体现其它硬件和硬件组合,例如现场可编程门阵列(FPGA)、专用集成电路(ASIC)、其它可编程逻辑器件、分离门逻辑、晶体管逻辑、性能监测硬件、看门狗硬件和时间基准。可以对集成电路进行配置使得集成电路的组件位于单片的半导体材料(例如,硅)上。SoC 12可以包括一个或多个处理器14。计算设备10可以包括一个以上的SoC 12,从而增加处理器14和处理器核心的数量。此外,计算设备10还可以包括与SoC 12不相关联的一个或多个处理器14。各个处理器14可以是如下面参照图2所描述的多核处理器。处理器14中的每一个可以被配置为用于特定目的,其可以与计算设备10的其它处理器14相同或者不同。可以将相同或不同配置的处理器14和处理器核心中的一个或多个组合在一起。一组处理器14或处理器核心可以称为多处理器簇。
SoC 12的存储器16可以是配置为存储由处理器14进行访问的数据和处理器可执行代码的易失性或者非易失性存储器。计算设备10和/或SoC 12可以包括配置为用于各种目的的一个或多个存储器16。在一个实施例中,一个或多个存储器16可以包括诸如随机存取存储器(RAM)或主存储器或者高速缓存的易失性存储器。这些存储器16可以被配置为临时地保持从数据传感器或子系统接收的有限数量的数据、数据和/或处理器可执行代码指令(其是从非易失性存储器请求的、基于各种因素预期未来访问而从非易失性存储器装载到存储器16的、和/或处理器14产生的中间处理数据和/或处理器可执行代码指令、以及临时地存储以便未来快速访问而无需存储在非易失性存储器中的数据和/或处理器可执行代码指令)。
存储器16可以被配置为至少临时地存储从另一个存储器设备(例如,另一个存储器16或存贮存储器24)装载到存储器16,以便处理器14的一个或多个进行访问的数据和处理器可执行代码。可以响应于处理器14对于某个功能的执行,对用于装载到存储器16的数据或处理器可执行代码进行装载。响应于某个功能的执行,将数据或处理器可执行代码装载到存储器16,可以源自于不成功或者未命中的针对存储器16的内存访问请求(由于所请求的数据或处理器可执行代码不位于存储器16中)。响应于未命中,可以进行针对另一个存储器16或存贮存储器24的内存访问请求,以便将所请求的数据或处理器可执行代码从另一个存储器16或存贮存储器24装载到存储器设备16中。响应于某个功能的执行,将数据或处理器可执行代码装载到存储器16,可以源自于针对另一个存储器16或存贮存储器24的内存访问请求,可以将数据或处理器可执行代码装载到存储器16中以便稍后访问。
通信接口18、通信组件22、天线26和/或网络接口28可以一致地工作,以使计算设备10能够经由无线连接32通过无线网络30进行通信,和/或通过有线网络44与远程计算设备50进行通信。无线网络30可以使用各种各样的无线通信技术(例如,其包括用于无线通信的无线电频谱)来实现,以向计算设备10提供针对互联网40的连接,其可以通过互联网40来与远程计算设备50交换数据。
存贮存储器接口20和存贮存储器24可以一致地工作,以允许计算设备10将数据和处理器可执行代码存储在非易失性存储介质上。可以非常类似于存储器16的实施例,对存贮存储器24进行配置,其中,存贮存储器24可以存储用于处理器14中的一个或多个进行访问的数据或处理器可执行代码。即使在计算设备10的电源被关闭之后,存贮存储器24(其是非易失性的)也可以保持该信息。当电源被再次打开,计算设备10重新启动时,计算设备10可获得存贮存储器24上存储的该信息。存贮存储器接口20可以控制针对存贮存储器24的访问,允许处理器14从存贮存储器24读取数据和向存贮存储器24写入数据。
可以对计算设备10的组件中的一些或全部进行不同地排列和/或组合,同时仍然服务必要的功能。此外,计算设备10并不限于这些组件中的每一个,在计算设备10的各个配置中可以包括每一个组件的多个实例。
图2示出了适合于实现实施例的多核处理器14。多核处理器14可以具有多个同构或者异构的处理器核心200、201、202、203。处理器核心200、201、202、203可以是同构的,其在于:单一处理器14的处理器核心200、201、202、203可以被配置为用于相同目的,具有相同或类似的性能特性。例如,处理器14可以是通用处理器,处理器核心200、201、202、203可以是同构的通用处理器核心。替代地,处理器14可以是图形处理单元或者数字信号处理器,处理器核心200、201、202、203可以分别是同构的图形处理器核心或者数字信号处理器核心。为了便于引用起见,本文可以互换地使用术语“处理器”和“处理器核心”。
处理器核心200、201、202、203可以是异构的,其在于:单一处理器14的处理器核心200、201、202、203可以被配置为用于不同的目的,和/或具有不同的性能特性。这种异构处理器核心的异构性可以包括不同的指令集、管道、工作频率等等。这些异构处理器核心的例子可以包括称为“big.LITTLE”架构的架构,在该架构中,可以将慢速、低功率处理器核心与更强大和功耗更大的处理器核心相耦合。在类似的实施例中,SoC 12可以包括多个同构或异构处理器14。
在图2所示出的例子中,多核处理器14包括四个处理器核心200、201、202、203(即,处理器核心0、处理器核心1、处理器核心2和处理器核心3)。为了便于解释起见,本文的例子可以指代图2中所示出的四个处理器核心200、201、202、203。但是,图2中所示出和本文所描述的四个处理器核心200、201、202、203只是提供成一个例子,决不意味着将各个实施例限制于四核处理器系统。与本文所示出和描述的四个处理器核心200、201、202、203相比,计算设备10、SoC 12或多核处理器14可以各自地或者组合地包括更少或者更多的内核。
图3根据一个实施例,示出了使用直接起始信令的关键执行路径的任务信令关闭的例子。在各个例子中,起始线程300、中继线程302a-302b和工作线程304a-304c可以实现在多核处理器的不同处理器核心、多线程处理器、或者各种配置的各种处理器上。
起始线程300可以在关键路径上执行程序的任务306a以执行该程序。该任务可以是用于该程序的进程。该进程可以包括并行部分(例如,循环),由此,该进程变成外部进程,该循环的迭代包括内部进程的至少一个执行。可以对内部进程进行配置,使得内部进程与外部进程以及内部进程的迭代并行地执行。例如,起始线程300可以执行外部进程,而一个或多个其它线程(例如,工作线程304a-304c或中继线程302a-302b)执行内部进程的迭代。
在遇到循环之后,起始线程300可以中断任务306a的执行,以划分内部循环的迭代和创建用于执行内部循环的并行任务308。每个并行任务的迭代次数和创建的并行任务的数量可以通过各种因素来确定,其中这些因素包括用于执行并行任务的延迟要求、用于执行并行任务的功率或资源需求(例如,处理器、处理器核心、存储器、带宽、中继线程302a-302b、以及工作线程304a-304c)、用于执行并行任务的资源可用性以及编程程序。这些并行任务可以配置相同数量或者不同数量的内部进程的迭代。所创建的并行任务的数量可以等于、大于或小于工作线程304a-304c和/或中继线程302a-302b的数量。
起始线程300可以向中继线程302a-302b中的至少一个发送直接起始信号310a、310b,以唤醒中继线程302a-302b和/或向其通知并行任务的创建,起始线程300可以返回到执行任务306b。在各个实施例中,中继线程302a-302b中的每一个可以处于多种状态中的一种,其包括活动或等待(例如,空闲和非活动)。
可以根据包括以下的各种因素来确定中继线程302a-302b的状态:用于执行并行任务的延迟、功率或资源需求、功率或资源可用性和编程程序。例如,因为并行任务的执行的延迟可能受到将中继线程302a-302b从非活动或空闲状态移动到活动状态所花费的时间的影响,所以较低的延迟要求可以从具有更多的中继线程302a-302b活动中获益;更多的中继线程302a-302b空闲可能足以满足中等延迟要求;更多的中继线程302a-302b非活动可能足够用于更高的延迟要求。在其它示例中,因为将中继线程302a-302b保持在活动或空闲状态所需的功率,所以较低的功率要求可以从具有更多的中继线程302a-302b非活动中获益;更多的中继线程302a-302b空闲可能足以满足中等延迟要求;更多的中继线程302a-302b活动可能足够用于更高的功率要求。取决于接收直接起始信号的中继线程302a-302b的状态,中继线程302a-302b的响应可以改变。
在图3所示出的例子中,中继线程302a可以处于活动状态,并且中继线程302b可以处于空闲状态或者非活动状态。响应于从起始线程300接收到直接起始信号,中继线程302a可以向工作线程304a-304c(例如,304a)中的至少一个发送中继信号312a-312c(例如,312a)。
响应于从起始线程300接收到直接起始信号,中继线程302b可以唤醒工作线程304a-304c中的至少一个,并发送中继信号312a、312c。中继线程302a-302b可以向工作线程304a-304c发送中继信号,以唤醒工作线程304a-304c和/或向工作线程304a-304c通知并行任务的创建。类似于中继线程302a-302b,在各个实施例中,工作线程304a-304c中的每一个可以处于多种状态中的一种,其包括活动、空闲和非活动。
可以根据包括以下的各种因素来确定工作线程304a-304c的状态:用于执行并行任务的延迟、功率或资源需求、功率或资源可用性和编程程序。例如,因为并行任务的执行的延迟可能受到将工作线程304a-304c从非活动或空闲状态移动到活动状态所花费的时间的影响,所以较低的延迟要求可以从具有更多的工作线程304a-304c活动中获益;更多的工作线程304a-304c空闲可能足以满足中等延迟要求;更多的工作线程304a-304c非活动可能足够用于更高的延迟要求。在其它示例中,因为将工作线程304a-304c保持在活动或空闲状态所需的功率,所以较低的功率要求可以从具有更多的工作线程304a-304c非活动中获益;更多的工作线程304a-304c空闲可能足以满足中等延迟要求;更多的工作线程304a-304c活动可能足够用于更高的功率要求。取决于接收中继信号的工作线程304a-304c的状态,工作线程304a-304c的响应可以改变。
在图3所示出的例子中,工作线程304a可以处于活动状态,工作线程304b可以处于空闲状态或者非活动状态,并且工作线程304c可以处于活动状态。响应于从中继线程302a接收到中继信号,工作线程304a可以获取并行任务和执行并行任务316a。响应于从中继线程302b接收到中继信号,工作线程304b可以唤醒318、以及获取和执行并行任务316b。响应于从中继线程302b接收到中继信号,工作线程304c可以获取并行任务和执行并行任务316c。当获取和执行并行任务时,工作线程304a-304c可以进入工作状态。在各个实施例中,中继线程302a-302b中的一些还可以尝试获取和执行进入工作状态的并行任务,同时使至少一个中继线程302a-302b处于活动状态、空闲状态或者非活动状态,使得其可用于接收来自起始线程300的另外直接起始信号。
在各个实施例中,中继线程302a-302b和工作线程304a-304c可以处于工作状态,其中中继线程302a-302b和工作线程304a-304c可以执行任务并且可以不接收或者接受来自起始线程300的直接起始信号或者来自中继线程302a-302b的中继信号。在完成在工作状态期间执行的任务之后,中继线程302a-302b和工作线程304a-304c可以尝试获取并行任务,或者可以改变为活动、空闲或非活动状态。中继线程302a-302b和工作线程304a-304c从工作状态改变到哪个状态,可以根据包括以下的各种因素来确定:用于执行并行任务的延迟、功率或资源需求、功率或资源可用性、编程程序和并行任务的可用性。
图4根据一个实施例,示出了使用间接起始信令的关键执行路径的任务信令关闭的例子。参照图3所示出的例子进行的描述也适用于图4所示出的例子,但具有以下的差异。不是在起始线程300和中继线程302a-302b之间引导起始信令,起始线程300可以通过发起信号表示(“表示信号”)400的值的改变,来间接地发信号通知中继线程302a-302b。信号表示400可以包括中继线程302a-302b访问并且能够检测该表示信号中的改变的任何硬件设备。在非限制性示例中,表示信号400可以包括写入存储器设备(例如,高速缓冲存储器、随机存取存储器、寄存器、其它固态易失性存储器)中的一个位置的布尔标志,其可以指示并行任务的创建或者缺乏。起始线程300可以向信号表示400发送修改信号402以指示并行任务的创建。
不管中继线程302a-302b的状态怎样,中继线程都可以针对并行任务的创建的指示,来定期地检查(404a-404e)信号表示400。例如,处于活动状态的中继线程302a可以针对并行任务的创建的指示,定期地检查(404a-404c)信号表示400,直到其检测到并行任务的创建的指示为止。响应于检测到并行任务的创建的指示,在中继线程302a从起始线程300接收到直接起始信号之后,中继线程302a可以以参考图3中所示的例子所描述的方式继续进行。处于空闲状态或非活动状态的中继线程302b可以重复地唤醒406a、406b,针对并行任务的创建指示来检查(404d、404e)信号表示400,直到其检测到并行任务的创建指示为止。在各个实施例中,与处于非活动状态的中继线程相比,处于空闲状态的中继线程302b可以更频繁地苏醒406a、406b和进行检查404d、404e。响应于检测到并行任务的创建指示,在中继线程302b接收到来自起始线程300的直接起始信号并苏醒之后,中继线程302b可以以参考图5所示出的例子所描述的方式继续进行。
图5根据一个实施例,示出了用于实现关键执行路径的任务信令关闭的线程的状态进展500。在各个实施例中,状态进展500可以应用于包括起始线程、中继线程和工作线程的任何线程。在判断框502中,线程可以判断其是否获取了要执行的并行任务。
响应于确定获取了要执行的任务(即,判断框502=“是”),线程可以进入工作状态504来执行该任务,并响应于完成该任务,返回到在判断框502中判断是否获取了另一个任务。在各个实施例中,在工作状态504期间执行其获取的任务的起始线程可能遇到并行部分(例如,循环),故进入生成状态506以创建并行任务,发送直接或间接起始信号508来向中继线程通知创建了并行任务。在完成了并行任务的创建并发信号通知中继线程之后,起始线程可以返回到工作状态504。
响应于确定其没有获取要执行的任务(即,判断框502=“否”),在判断框510中,该线程可以判断是否进入活动状态512。可以根据包括以下的各种因素来确定用于判断是否进入活动状态:用于执行并行任务的延迟、功率或资源需求、功率或资源可用性、编程程序、以及并行任务的可用性。
响应于确定进入活动状态512(即,判断框510=“是”),该线程可以进入并保持在活动状态512,检查用于指示并行任务的创建的直接或间接起始信号508。响应于接收到直接或间接起始信号508,线程可以进入信号状态513,向处于等待状态518a-518c的其它线程发送中继信号516a-516c。处于信号状态514的线程可以在判断框502中,判断其是否获取了要执行的并行任务。
响应于确定不进入活动状态512(即,判断框510=“否”),该线程可以进入并保持在等待状态518a-518c(例如,改变空闲和非活动的级别),直到接收到中继信号516a-516c或者超过状态改变门限(其触发改变为更低的等待状态518a-518c)为止。
响应于接收到中继信号516a-516c,处于等待状态518a-518c的线程可以在判断框502中,判断其是否获取了要执行的并行任务。在各个实施例中,触发改变为更低的等待状态518a-518c的状态改变门限可以包括与以下各项相对应的各种门限值:用于执行并行任务的延迟、功率或资源需求、功率或资源可用性、编程程序、并行任务的可用性和时间。例如,进入等待状态的线程可以基于这些因素,直接进入任何等待状态518a-518c中的一种。在一个实施例中,线程可以进入处于最高等待状态的等待状态518a(即,等待状态518a-518c之中具有切换到活动或者工作状态的最低延迟)。
响应于超过了状态改变门限,线程可以进入下一个更低等待状态518b(即,与最高等待状态518a相比,具有切换到活动或工作状态的更高延迟)。每当超过另一个状态改变门限时,这种等待状态级别的降低可以继续进行,直到达到最低等待状态518c(即,等待状态518a-518c之中具有切换到活动或工作状态的最高延迟)为止。
图6示出了用于关键执行路径的任务信令关闭中的起始信令的实施例方法600。可以在使用软件、和/或通用或专用硬件(例如,处理器)的计算设备中执行方法600。
在方框602中,计算设备可以使用起始线程来执行程序的一个进程的任务。在方框604中,计算设备可以在函数的执行期间,遇到诸如循环之类的并行部分。该进程可以包括循环,由此,该进程变成外部进程,并且该循环的迭代包括内部进程的至少一个执行。可以对内部进程进行配置,使得内部进程与外部进程以及内部进程的迭代并行地执行。例如,起始线程可以执行外部进程,而一个或多个其它线程(例如,工作线程或中继线程)执行内部进程的迭代。
在方框606中,计算设备可以中断任务的执行。在方框608中,计算设备可以创建用于执行内部循环的并行任务。可以对这些并行任务进行配置,使得所有这些并行任务一起包括内部循环的所有迭代;但是,每个并行任务不需要被配置为执行与内部循环相同的迭代次数。
在方框610中,计算设备可以发送起始信号。在各个实施例中,根据计算设备的配置,起始信号可以是直接起始信号或者间接起始信号。计算设备可以经由该计算设备中的通信网络(例如,共享或者共同总线或片上网络)或者经由专用直接信令线或者连接处理器和处理器核心的线路,在计算设备的处理器和处理器核心之间发送直接起始信号。可以从执行起始线程的处理器或处理器核心向执行中继线程的处理器或处理器核心发送直接起始信号。在各个实施例中,一组处于活动或等待状态的所有中继线程都可用于从任何起始线程接收直接起始信号。在各个实施例中,可以指定中继线程集合(其比计算设备的所有中继线程的集合更小)来从特定的起始线程接收直接起始信号。在各个实施例中,起始线程可以被配置为广播直接起始信号,与该起始线程不相关联的中继线程可以忽略该直接起始信号,或者起始线程可以向相关联的中继线程发送直接起始信号。
如本文所讨论的,中继线程可以处于包括活动和等待状态(例如,空闲和非活动状态)的各种执行状态。直接起始信号可以被配置为触发处于等待状态的中继线程进行苏醒,向中继线程指示已经创建了并行任务以便不同于起始线程的线程进行执行。
计算设备可以经由该计算设备中的通信网络(例如,共享或者共同总线或片上网络),在执行起始线程的计算设备的处理器和处理器核心和存储器设备(例如,高速缓冲存储器、随机存取存储器、寄存器、其它固态易失性存储器)之间发送间接起始信号。间接起始信号可以被配置为修改存储器设备,使得其可以指示并行任务的创建或者缺少。例如,存储器设备中的指定位置可被至少一个中继线程访问,以判断是否创建了任何并行任务。该间接起始信号可以触发存储在存储器位置的数据的改变,使得该改变可以向中继线程指示已创建了并行任务。各个示例可以包括写入到该存储器位置的布尔标志,该布尔标志具有表示并行任务的缺少或者并行任务的创建的两个值。在其它例子中,布尔标志的值并不专门地表示并行任务的创建的缺少;而是布尔标志值的改变可以指示并行任务的创建。在各个实施例中,中继线程可能需要至少临时地处于活动状态,以检查是否向存储器设备发送了间接起始信号。
在方框612中,计算设备可以恢复执行中断的任务。
图7示出了用于关键执行路径的任务信令关闭中的中继信令的实施例方法700。可以在使用软件、和/或通用或专用硬件(例如,处理器)的计算设备中执行方法700。
在方框702中,计算设备可以等待来自起始线程的直接或间接起始信号。不管中继线程的状态,在针对直接或间接起始信号的检查之间可能存在至少瞬间的等待,即使在中继线程等待所发出的针对直接或间接起始信号的检查的返回的时间期间。
在可选框704中,计算设备可以检查直接或间接起始信号。在各个实施例中,中继线程可以检查来自活动状态的直接或间接起始信号。中继线程可以持续地处于活动状态,或者可以在等待状态(例如,空闲或非活动)和活动状态之间转换以检查直接或间接起始信号。在各个实施例中,当中继线程处于等待状态时,可以跳过检查直接或间接发起信号,这是由于检查操作可能消耗资源。如本文所讨论的,中继线程可以检查存储器设备的指定位置以检测间接起始信号。
与方法700的各个方框并发地(例如,与方框702和可选框704中的一个或多个并发地),在可选的判断框706处,计算设备可以判断是否超过了状态改变门限。在各个实施例中,该状态改变门限可以包括与用于执行并行任务的延迟、功率或资源要求相对应的各种门限值、功率或资源可用性、编程程序、并行任务的可用性和时间。
响应于确定没有超过状态改变门限(即,可选的判断框706=“否”),计算设备可以返回到在方框702中,等待来自起始线程的直接或间接起始信号。
响应于确定超过状态改变门限(即,可选的判断框706=“是”),在可选框722中,计算设备可以改变中继线程的状态。在各个实施例中,可以将中继线程从活动状态降级到等待状态的多个级别中的一个(例如,空闲或非活动),从等待状态的一个级别降级到更低级别的等待状态,从等待状态的一个级别升级到更高级别的等待状态,或者从一个级别的等待状态升级到活动状态。
在方框702中,计算设备可以等待来自起始线程的直接或间接起始信号。在方框708中,计算设备可以从起始线程接收直接或间接起始信号。在各个实施例中,接收直接起始信号可以包括:经由计算设备中的通信网络,从起始线程接收信号。
在各个实施例中,接收间接起始信号可以包括:在可选框704中,在针对间接起始信号的检查期间,从存储器设备的指定位置获取指示并行任务的创建的数据。在各个实施例中,中继线程可能从与其不相关联的起始线程接收到直接或间接起始信号,故可以忽略该直接或间接起始信号。
在可选框710中,计算设备可以将中继线程从等待状态唤醒。处于活动状态的中继线程,可以不实现可选框710。
在方框712中,计算设备可以向至少一个工作线程发送中继信号。如同参照图6所讨论的起始线程的各个实施例,处于活动或等待状态的一组所有工作线程可用于从任何中继线程接收中继信号。在各个实施例中,可以指定工作线程集合(其比计算设备的所有工作线程的集合更小)来从特定的中继线程接收中继信号。
在各个实施例中,中继线程可以被配置为广播中继信号,与该中继线程不相关联的工作线程可以忽略该中继信号,或者中继线程可以向相关联的工作线程发送中继信号。工作线程可以处于包括活动和等待状态(例如,空闲和非活动状态)的各种执行状态。中继信号可以被配置为触发处于等待状态的工作线程进行苏醒,向工作线程指示已经创建了并行任务以便不同于起始线程的线程进行执行。
用于发送工作线程的信令开销由不同于起始线程的中继线程来分担,使得起始线程可以返回执行其任务,而无需等待获取其创建的并行任务。
在可选框714中,计算设备可以等待所述至少一个工作线程获取并行任务。该等待开销由不同于起始线程的中继线程来分担,使得中继线程可以返回执行其任务,而无需等待获取其创建的并行任务。
在可选的判断框716中,计算设备可以判断是否有任何并行任务保持。响应于确定有并行任务保持(即,可选判断框716=“是”),在可选框718中,计算设备可以获取用于该中继线程的剩余并行任务。在各个实施例中,中继线程可以帮助执行并行任务。但是,存在着关于多少中继线程可以执行并行任务的限制,使得存在足够的中继线程可用于处理任何后续并行任务的中继信令。在各个实施例中,在中继线程完成执行并行任务之前完成执行并行任务的工作线程,可以被重新分配成中继线程以弥补中继线程的缺乏。类似地,过量的中继线程可以导致中继线程被重新分配成工作线程。
在可选框720中,计算设备可以使用中继线程来执行所获取的并行任务。在完成所获取的并行任务的执行之后,计算设备可以返回到在可选的判断框716中,判断是否有并行任务保持。响应于确定没有并行任务保持(即,可选判断框716=“否”),在方框702中,计算设备可以返回到等待来自起始线程的直接或间接起始信号。
图8示出了用于关键执行路径的任务信令关闭中的任务执行的实施例方法800。可以在使用软件、和/或通用或专用硬件(例如,处理器)的计算设备中执行方法800。
在方框802中,计算设备可以等待来自中继线程的中继信号。不管工作线程的状态,在针对中继信号的检查之间存在至少瞬间的等待,即使在工作线程等待所发出的针对中继信号的检查的返回的时间期间。
在可选框804中,计算设备可以检查中继信号。在各个实施例中,工作线程可以检查来自活动状态的中继信号。工作线程可以持续地处于活动状态,或者可以在等待状态(例如,空闲或非活动)和活动状态之间转换以检查中继信号。在各个实施例中,当工作线程处于等待状态时,可以跳过检查中继信号,这是由于检查操作可能消耗资源。
与方法800的各个方框并发地(例如,与方框802和可选框804中的一个或多个并发地),在可选的判断框806处,计算设备可以判断是否超过了状态改变门限。在各个实施例中,该状态改变门限可以包括与用于执行并行任务的延迟、功率或资源要求相对应的各种门限值、功率或资源可用性、编程程序、并行任务的可用性和时间。
响应于确定没有超过状态改变门限(即,可选的判断框806=“否”),计算设备可以返回到在方框802中,等待来自中继线程的中继信号。
响应于确定超过状态改变门限(即,可选的判断框806=“是”),在可选框818中,计算设备可以改变工作线程的状态。在各个实施例中,可以将工作线程从活动状态降级到等待状态的多个级别中的一个(例如,空闲或非活动),从等待状态的一个级别降级到更低级别的等待状态,从等待状态的一个级别升级到更高级别的等待状态,或者从一个级别的等待状态升级到活动状态。
在方框802中,计算设备可以等待来自中继线程的中继信号。在方框808中,计算设备可以从中继线程接收中继信号。在各个实施例中,接收中继信号可以包括:经由计算设备中的通信网络,从中继线程接收信号。在各个实施例中,工作线程可能从与其不相关联的中继线程接收到中继信号,故可以忽略该中继信号。
在可选框810中,计算设备可以将工作线程从等待状态唤醒。处于活动状态的工作线程,可以不实现可选框810。
在方框812中,计算设备可以获取用于工作线程的并行任务。在方框814中,计算设备可以使用工作线程来执行所获取的并行任务。
在完成所获取的并行任务的执行之后,在判断框816中,计算设备可以判断是否有并行任务保持。响应于确定有并行任务保持(即,判断框816=“是”),在方框812中,计算设备可以获取用于该工作线程的剩余并行任务。响应于确定没有并行任务保持(即,判断框816=“否”),在方框802中,计算设备可以返回等待来自中继线程的中继信号。
可以在各种各样的计算系统中实现各个实施例(其包括但不限于上面参照图1-9所讨论的实施例),其中该计算系统可以包括适合于结合图9中所示出的各个实施例使用的示例性移动计算设备。移动计算设备900可以包括耦合到触摸屏控制器904和内部存储器906的处理器902。处理器902可以是被设计为实现通用或特定处理任务的一个或多个多核集成电路。内部存储器906可以是易失性存储器或非易失性存储器,还可以是安全和/或加密存储器,或者非安全和/或非加密存储器、或者其任意组合。可以利用的存储器类型的例子,包括但不限于:DDR、LPDDR、GDDR、WIDEIO、RAM、SRAM、DRAM、P-RAM、R-RAM、M-RAM、STT-RAM和嵌入式动态随机接入存储器(DRAM)。触摸屏控制器904和处理器902还可以耦合到触摸屏面板912,例如,电阻式感应触摸屏、电容感应触摸屏、红外线感应触摸屏等等。另外,计算设备900的显示器并不需要具有触摸屏能力。
移动计算设备900可以具有用于发送和接收通信的一个或多个无线信号收发机908(例如,Peanut、Bluetooth、Zigbee、Wi-Fi、RF无线电装置等等)和天线910,它们彼此之间相耦合和/或耦合到处理器902。收发机908和天线910可以结合上面所提及的电路来使用,以实现各种无线传输协议栈和接口。移动计算设备900可以包括蜂窝网络无线调制解调器芯片916,后者经由蜂窝网络来实现通信并耦合到处理器。
移动计算设备900可以包括耦合到处理器902的外围设备连接接口918。外围设备连接接口918可以被单独地配置为接受一种类型的连接,或者被配置为接受多种类型的物理和通信连接、共同或专有连接(例如,USB、火线、Thunderbolt或PCIe)。此外,外围设备连接接口918还可以耦合到类似配置的外围设备连接端口(没有示出)。
此外,移动计算设备900还可以包括用于提供音频输出的扬声器914。此外,移动计算设备900还可以包括使用塑料、金属、或材料的组合所构成的壳体920,以包含本文所讨论的所有部件或者一些部件。移动计算设备900可以包括耦合到处理器902的电源922,例如一次性或可充电电池。此外,该可充电电池还可以耦合到外围设备连接端口,以便从移动计算设备900之外的源接收充电电流。此外,移动计算设备900还可以包括用于接收用户输入的物理按键924。此外,移动计算设备900还可以包括用于打开和关闭移动计算设备900的电源按键926。
各个实施例(其包括但不限于上面参照图1-8所讨论的实施例)可以实现在包括多种各样的移动计算设备(例如,图10中所示出的膝上型计算机1000)的各种各样的计算系统中。很多膝上型计算机包括触摸板触摸接口1017,后者服务成该计算机的指向设备,故可以接收拖动、滚动和滑动手势(其类似于上面所描述的在装备有触摸屏显示器的计算设备上所实现的那些手势)。通常,膝上型计算机1000包括耦合到易失性存储器1012和大容量非易失性存储器(例如,闪存的硬盘驱动器1013)的处理器1011。另外,计算机1000可以具有用于发送和接收电磁辐射的一付或多付天线1008,这些天线1008可以连接到无线数据链路和/或耦合到处理器1011的蜂窝电话收发机1016。此外,计算机1000还可以包括耦合到处理器1011的软盘驱动器1014和压缩光盘(CD)驱动器1015。在笔记本配置中,计算机壳体包括全部都耦合到处理器1011的触摸板1017、键盘1018和显示器1019。该计算设备的其它配置可以包括(例如,经由通用串行总线(USB)输入)耦合到处理器的计算机鼠标或者跟踪球,如公众所知道的,这些部件也可以结合各个实施例来使用。
各个实施例(其包括但不限于上面参照图1-8所讨论的实施例)可以实现在多种多样的计算系统中(其可以包括各种各样的商业可用的服务器中的任何一种,以便对服务器高速缓冲存储器中的数据进行压缩)。图11示出了一种示例性服务器1100。通常,这种服务器1100包括耦合到易失性存储器1102和大容量非易失性存储器(例如,磁盘驱动器1104)的一个或多个多核处理器组件1101。如图11中所示,可以通过将多核处理器组件1101插入到组装的架中,来添加到服务器1100中。此外,服务器1100还可以包括耦合到处理器1101的软盘驱动器、压缩光盘(CD)或者DVD光盘驱动器1106。此外,服务器1100还可以包括耦合到多核处理器组件1101的网络接入端口1103,以便与网络1105(例如,耦合到其它广播系统计算机和服务器的局域网、互联网、公众交换电话网、和/或蜂窝数据网络(如,CDMA、TDMA、GSM、PCS、3G、4G、LTE或者任何其它类型的蜂窝数据网络))建立网络接口连接。
用于在可编程处理器上运行以执行本文的各个实施例的操作的计算机程序代码或“程序代码”,可以利用诸如C、C++、C#、Smalltalk、Java、JavaScript、Visual Basic、结构化查询语言(例如,Transact-SQL)、Perl之类的高级编程语言来编写,或者利用各种其它编程语言来编写。如本申请中所使用的计算机可读存储介质上所存储的程序代码或程序,可以指代其格式是处理器可理解的机器语言代码(例如,目标代码)。
上述的方法描述和处理流程图仅仅是用作为说明性例子,而不是旨在要求或者隐含着必须以所给出的顺序来执行各个实施例的步骤。如本领域普通技术人员所应当理解的,可以以任何顺序来执行上述的实施例中的操作顺序。诸如“其后”、“转而”、“接着”等等之类的词语,并不旨在限制这些操作的顺序;这些词语仅仅只是用于引导读者遍历该方法的描述。此外,任何对权利要求元素的单数引用(例如,使用冠词“一个(a)”、“某个(an)”或者“该(the)”),不应被解释为将该元素限制为单数形式。
结合本文的各个实施例描述的各种示例性的逻辑框、模块、电路和算法操作均可以实现成电子硬件、计算机软件或二者的组合。为了清楚地表示硬件和软件之间的这种可交换性,上面对各种示例性的部件、框、模块、电路和操作均围绕其功能进行了总体描述。至于这种功能是实现成硬件还是实现成软件,取决于特定的应用和对整个系统所施加的设计约束条件。熟练的技术人员可以针对每个特定应用,以变通的方式实现所描述的功能,但是,这种实现决策不应解释为背离本发明的保护范围。
用于执行本文所述功能的通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或其它可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件部件或者其任意组合,可以用来实现或执行结合本文所公开的实施例描述的用于实现各种示例性的逻辑、逻辑框、模块和电路的硬件。通用处理器可以是微处理器,或者,该处理器也可以是任何常规的处理器、控制器、微控制器或者状态机。处理器也可以实现为计算设备的组合,例如,DSP和微处理器的组合、若干微处理器、一个或多个微处理器与DSP内核的结合,或者任何其它此种结构。替代地,一些操作或方法可以由特定于给定的功能的电路来执行。
在一个或多个实施例,本文所述功能可以用硬件、软件、固件或它们任意组合的方式来实现。当在软件中实现时,可以将这些功能存储成非临时性计算机可读介质或者非临时性处理器可读介质上的一个或多个指令或代码。本文所公开的方法或算法的操作,可以体现在处理器可执行软件模块中,后者可以位于非临时性计算机可读存储介质或处理器可读存储介质上。非临时性计算机可读或处理器可读存储介质可以是计算机或处理器能够存取的任何存储介质。举例而言,但非做出限制,这种非临时性计算机可读介质或者处理器可读介质可以包括RAM、ROM、EEPROM、闪存、CD-ROM或其它光盘存储器、磁盘存储器或其它磁存储设备、或者能够用于存储具有指令或数据结构形式的期望的程序代码并能够由计算机进行存取的任何其它介质。如本文所使用的,磁盘和光盘包括压缩光盘(CD)、激光光盘、光盘、数字通用光盘(DVD)、软盘和蓝光光盘,其中磁盘通常磁性地复制数据,而光盘则用激光来光学地复制数据。上述的组合也应当包括在非临时性计算机可读介质和处理器可读介质的保护范围之内。另外,一种方法或算法的操作可以作为一个代码和/或指令集或者其任意组合,位于非临时性处理器可读介质和/或计算机可读介质上,其中该非临时性处理器可读介质和/或计算机可读介质可以并入到计算机程序产品中。
为使本领域任何普通技术人员能够实现或者使用本发明,上面围绕所公开的实施例进行了描述。对于本领域普通技术人员来说,对这些实施例的各种修改是显而易见的,并且,本文定义的总体原理也可以在不脱离本发明的保护范围的基础上应用于其它实施例。因此,本发明的公开内容并不限于本文所示出的实施例,而是与所附权利要求书和本文公开的原理和新颖性特征的最广范围相一致。

Claims (30)

1.一种计算设备上的任务信令的方法,包括:
中断关键执行路径上的起始线程对任务的执行;
由所述起始线程创建至少一个并行任务,其中所述至少一个并行任务能够与所述起始线程执行的所述任务并行执行;
由所述起始线程向中继线程发送用于指示所述至少一个并行任务的创建的起始信号;以及
在获取所述至少一个并行任务之前,恢复所述起始线程对所述任务的执行。
2.根据权利要求1所述的方法,还包括:
由所述中继线程接收所述起始信号;以及
当所述中继线程处于等待状态时,响应于接收到所述起始信号,将所述中继线程改变成活动状态。
3.根据权利要求2所述的方法,其中,所述起始信号是直接起始信号,并且其中,由所述中继线程接收所述起始信号包括:经由与所述起始线程的连接来接收所述直接起始信号。
4.根据权利要求2所述的方法,其中,所述起始信号是间接起始信号,所述方法还包括:
修改存储器设备的一个位置处的用于指示所述至少一个并行任务的所述创建的数据,其中,由所述中继线程接收所述起始信号包括:从所述存储器设备的所述位置获取所修改的数据。
5.根据权利要求2所述的方法,还包括:
向至少一个工作线程发送用于指示所述至少一个并行任务的所述创建的中继信号。
6.根据权利要求5所述的方法,还包括:
由所述至少一个工作线程接收所述中继信号;
当所述至少一个工作线程处于等待状态时,响应于接收到所述中继信号,将所述至少一个工作线程改变成活动状态;
由所述至少一个工作线程获取所述至少一个并行任务;以及
由所述至少一个工作线程与所述起始线程执行所述任务并行地执行所述至少一个并行任务。
7.根据权利要求2所述的方法,还包括:
判断所述中继线程是否保留另一个并行任务;
由所述中继线程获取所述另一个并行任务;以及
由所述中继线程与所述起始线程执行所述任务并行地执行所述另一个并行任务。
8.根据权利要求1所述的方法,还包括:
判断是否超过用于所述中继线程的状态改变门限;以及
响应于确定超过用于所述中继线程的所述状态改变门限,将所述中继线程的状态从活动状态改变成等待状态,或者从所述等待状态的一个级别改变成所述等待状态的更低级别。
9.一种计算设备,包括:
彼此之间通信连接的多个处理器核心,其中,所述多个处理器核心包括被配置为执行起始线程的第一处理器核心、被配置为执行中继线程的第二处理器核心、以及被配置为执行工作线程的第三处理器核心,并且其中,所述第一处理器核心配置有处理器可执行指令以执行包括以下的操作:
中断关键执行路径上的所述起始线程对任务的执行;
由所述起始线程创建至少一个并行任务,其中所述至少一个并行任务能够与所述起始线程执行的所述任务并行执行;
由所述起始线程向所述中继线程发送用于指示所述至少一个并行任务的创建的起始信号;以及
在获取所述至少一个并行任务之前,恢复所述起始线程对所述任务的执行。
10.根据权利要求9所述的计算设备,其中,所述第二处理器核心配置有处理器可执行指令以执行包括以下的操作:
由所述中继线程接收所述起始信号;以及
当所述中继线程处于等待状态时,响应于接收到所述起始信号,将所述中继线程改变成活动状态。
11.根据权利要求10所述的计算设备,其中,所述起始信号是直接起始信号,并且其中,所述第二处理器核心配置有处理器可执行指令以执行操作,使得由所述中继线程接收所述起始信号包括:经由与执行所述起始线程的所述第一处理器核心的连接来接收所述直接起始信号。
12.根据权利要求10所述的计算设备,还包括通信地连接到所述第一处理器核心和所述第二处理器核心的存储器设备,
其中,所述起始信号是间接起始信号,
其中,所述第一处理器核心配置有处理器可执行指令以执行还包括以下的操作:修改所述存储器设备的一个位置处的用于指示所述至少一个并行任务的所述创建的数据,以及
其中,所述第二处理器核心配置有处理器可执行指令以执行操作,使得由所述中继线程接收所述起始信号包括:从所述存储器设备的所述位置获取所修改的数据。
13.根据权利要求10所述的计算设备,其中,所述第二处理器核心配置有处理器可执行指令以执行还包括以下的操作:
向至少一个工作线程发送用于指示所述至少一个并行任务的所述创建的中继信号。
14.根据权利要求13所述的计算设备,其中,所述第三处理器核心配置有处理器可执行指令以执行包括以下的操作:
由所述工作线程接收所述中继信号;
当所述工作线程处于等待状态时,响应于接收到所述中继信号,将所述工作线程改变成活动状态;
由所述工作线程获取所述至少一个并行任务;以及
由所述工作线程与所述起始线程执行所述任务并行地执行所述至少一个并行任务。
15.根据权利要求10所述的计算设备,其中,所述第二处理器核心配置有处理器可执行指令以执行还包括以下的操作:
判断所述中继线程是否保留另一个并行任务;
由所述中继线程获取所述另一个并行任务;以及
由所述中继线程与所述起始线程执行所述任务并行地执行所述另一个并行任务。
16.根据权利要求9所述的计算设备,其中,所述第二处理器核心配置有处理器可执行指令以执行还包括以下的操作:
判断是否超过用于所述中继线程的状态改变门限;以及
响应于确定超过用于所述中继线程的所述状态改变门限,将所述中继线程的状态从活动状态改变成等待状态,或者从所述等待状态的一个级别改变成所述等待状态的更低级别。
17.一种计算设备,包括:
用于中断关键执行路径上的起始线程对任务的执行的单元;
用于由所述起始线程创建至少一个并行任务的单元,其中所述至少一个并行任务能够与所述起始线程执行的所述任务并行执行;
用于由所述起始线程向中继线程发送用于指示所述至少一个并行任务的创建的起始信号的单元;以及
用于在获取所述至少一个并行任务之前,恢复所述起始线程对所述任务的执行的单元。
18.根据权利要求17所述的计算设备,还包括:
用于由所述中继线程接收所述起始信号的单元;以及
用于当所述中继线程处于等待状态时,响应于接收到所述起始信号,将所述中继线程改变成活动状态的单元。
19.根据权利要求18所述的计算设备,其中,所述起始信号是直接起始信号,以及
其中,用于由所述中继线程接收所述起始信号的单元包括:用于经由与所述起始线程的连接来接收所述直接起始信号的单元。
20.根据权利要求18所述的计算设备,其中,所述起始信号是间接起始信号,以及
其中,所述计算设备还包括:用于修改存储器设备的一个位置处的用于指示所述至少一个并行任务的所述创建的数据的单元,其中,用于由所述中继线程接收所述起始信号的单元包括:用于从所述存储器设备的所述位置获取所修改的数据的单元。
21.根据权利要求18所述的计算设备,还包括:
用于向至少一个工作线程发送用于指示所述至少一个并行任务的所述创建的中继信号的单元;
用于由所述至少一个工作线程接收所述中继信号的单元;
用于当所述至少一个工作线程处于等待状态时,响应于接收到所述中继信号,将所述至少一个工作线程改变成活动状态的单元;
用于由所述至少一个工作线程获取所述至少一个并行任务的单元;以及
用于由所述至少一个工作线程与所述起始线程执行所述任务并行地执行所述至少一个并行任务的单元。
22.根据权利要求18所述的计算设备,还包括:
用于判断所述中继线程是否保留另一个并行任务的单元;
用于由所述中继线程获取所述另一个并行任务的单元;以及
用于由所述中继线程与所述起始线程执行所述任务并行地执行所述另一个并行任务的单元。
23.根据权利要求17所述的计算设备,还包括:
用于判断是否超过用于所述中继线程的状态改变门限的单元;以及
用于响应于确定超过用于所述中继线程的所述状态改变门限,将所述中继线程的状态从活动状态改变成等待状态,或者从所述等待状态的一个级别改变成所述等待状态的更低级别的单元。
24.一种存储有处理器可执行指令的非临时性处理器可读存储介质,其中所述处理器可执行指令被配置为使计算设备的处理器执行包括以下的操作:
中断关键执行路径上的起始线程对任务的执行;
由所述起始线程创建至少一个并行任务,其中所述至少一个并行任务能够与所述起始线程执行的所述任务并行执行;
由所述起始线程向中继线程发送用于指示所述至少一个并行任务的创建的起始信号;以及
在获取所述至少一个并行任务之前,恢复所述起始线程对所述任务的执行。
25.根据权利要求24所述的非临时性处理器可读存储介质,其中,所述存储的处理器可执行指令被配置为使所述处理器执行还包括以下的操作:
由所述中继线程接收所述起始信号;以及
当所述中继线程处于等待状态时,响应于接收到所述起始信号,将所述中继线程改变成活动状态。
26.根据权利要求25所述的非临时性处理器可读存储介质,其中,所述起始信号是直接起始信号,以及
其中,所述存储的处理器可执行指令被配置为使所述处理器执行操作,使得由所述中继线程接收所述起始信号包括:经由与所述起始线程的连接来接收所述直接起始信号。
27.根据权利要求25所述的非临时性处理器可读存储介质,其中,所述起始信号是间接起始信号,以及
其中,所述存储的处理器可执行指令被配置为使所述处理器执行还包括以下的操作:
修改存储器设备的一个位置处的用于指示所述至少一个并行任务的所述创建的数据,其中,由所述中继线程接收所述起始信号包括:
从所述存储器设备的所述位置获取所修改的数据。
28.根据权利要求25所述的非临时性处理器可读存储介质,其中,所述存储的处理器可执行指令被配置为使所述处理器执行还包括以下的操作:
向至少一个工作线程发送用于指示所述至少一个并行任务的所述创建的中继信号;
由所述至少一个工作线程接收所述中继信号;
当所述至少一个工作线程处于等待状态时,响应于接收到所述中继信号,将所述至少一个工作线程改变成活动状态;
由所述至少一个工作线程获取所述至少一个并行任务;以及
由所述至少一个工作线程与所述起始线程执行所述任务并行地执行所述至少一个并行任务。
29.根据权利要求25所述的非临时性处理器可读存储介质,其中,所述存储的处理器可执行指令被配置为使所述处理器执行还包括以下的操作:
判断所述中继线程是否保留另一个并行任务;
由所述中继线程获取所述另一个并行任务;以及
由所述中继线程与所述起始线程执行所述任务并行地执行所述另一个并行任务。
30.根据权利要求24所述的非临时性处理器可读存储介质,其中,所述存储的处理器可执行指令被配置为使所述处理器执行还包括以下的操作:
判断是否超过用于所述中继线程的状态改变门限;以及
响应于确定超过用于所述中继线程的所述状态改变门限,将所述中继线程的状态从活动状态改变成等待状态,或者从所述等待状态的一个级别改变成所述等待状态的更低级别。
CN201680060072.2A 2015-10-16 2016-09-14 关闭关键执行路径的任务信令 Expired - Fee Related CN108139932B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/884,929 2015-10-16
US14/884,929 US9778951B2 (en) 2015-10-16 2015-10-16 Task signaling off a critical path of execution
PCT/US2016/051729 WO2017065914A1 (en) 2015-10-16 2016-09-14 Task signaling off a critical path of execution

Publications (2)

Publication Number Publication Date
CN108139932A true CN108139932A (zh) 2018-06-08
CN108139932B CN108139932B (zh) 2021-08-24

Family

ID=56979715

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201680060072.2A Expired - Fee Related CN108139932B (zh) 2015-10-16 2016-09-14 关闭关键执行路径的任务信令

Country Status (7)

Country Link
US (1) US9778951B2 (zh)
EP (1) EP3362892A1 (zh)
JP (1) JP2018536917A (zh)
KR (1) KR20180069801A (zh)
CN (1) CN108139932B (zh)
BR (1) BR112018007619A2 (zh)
WO (1) WO2017065914A1 (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11086691B2 (en) * 2019-04-04 2021-08-10 Sap Se Producer-consumer communication using multi-work consumers
CN111506309B (zh) * 2020-03-16 2023-10-24 北京嘀嘀无限科技发展有限公司 任务执行方法和系统、计算机可读存储介质

Citations (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1540508A (zh) * 2003-04-24 2004-10-27 �Ҵ���˾ 多线程处理器在单线程与并发多线程模式之间的动态切换
US20050240930A1 (en) * 2004-03-30 2005-10-27 Kyushu University Parallel processing computer
CN1716209A (zh) * 2004-06-28 2006-01-04 英特尔公司 线程到线程通信
CN101135982A (zh) * 2006-08-28 2008-03-05 国际商业机器公司 在计算机中管理消息传信中断资源的方法和装置
US20090044188A1 (en) * 2003-08-14 2009-02-12 Tatsunori Kanai Method and system for performing real-time operation
CN101390057A (zh) * 2006-02-24 2009-03-18 高通股份有限公司 两级中断服务例程
US20100037222A1 (en) * 2008-08-06 2010-02-11 Michiaki Tatsubori Detecting the starting and ending of a task when thread pooling is employed
CN101681273A (zh) * 2007-05-10 2010-03-24 国际商业机器公司 响应于所接收的请求进行工作的服务器装置
US20110145834A1 (en) * 2009-12-10 2011-06-16 Sun Microsystems, Inc. Code execution utilizing single or multiple threads
CN102334104A (zh) * 2011-08-15 2012-01-25 华为技术有限公司 一种基于多核系统的同步处理方法及装置
US8209702B1 (en) * 2007-09-27 2012-06-26 Emc Corporation Task execution using multiple pools of processing threads, each pool dedicated to execute different types of sub-tasks
CN104266657A (zh) * 2014-09-12 2015-01-07 海华电子企业(中国)有限公司 基于cpu和mic协同计算的最短路径规划并行化方法
CN104471587A (zh) * 2012-05-16 2015-03-25 诺基亚公司 处理器中的方法,装置和计算机程序产品
US20150095912A1 (en) * 2013-09-27 2015-04-02 Andrey Semin Methods and apparatus for controlling affinity for execution entities
WO2015050594A2 (en) * 2013-06-16 2015-04-09 President And Fellows Of Harvard College Methods and apparatus for parallel processing

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7849465B2 (en) 2003-02-19 2010-12-07 Intel Corporation Programmable event driven yield mechanism which may activate service threads
US20050071438A1 (en) * 2003-09-30 2005-03-31 Shih-Wei Liao Methods and apparatuses for compiler-creating helper threads for multi-threading
US7950012B2 (en) * 2005-03-16 2011-05-24 Oracle America, Inc. Facilitating communication and synchronization between main and scout threads
US20080141268A1 (en) 2006-12-12 2008-06-12 Tirumalai Partha P Utility function execution using scout threads
US8195898B2 (en) 2007-12-27 2012-06-05 Intel Corporation Hybrid transactions for low-overhead speculative parallelization
US9052796B2 (en) 2012-01-08 2015-06-09 Microsoft Technology Licensing Llc Asynchronous handling of an input stream dedicated to multiple targets

Patent Citations (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1540508A (zh) * 2003-04-24 2004-10-27 �Ҵ���˾ 多线程处理器在单线程与并发多线程模式之间的动态切换
US20090044188A1 (en) * 2003-08-14 2009-02-12 Tatsunori Kanai Method and system for performing real-time operation
US20050240930A1 (en) * 2004-03-30 2005-10-27 Kyushu University Parallel processing computer
CN1716209A (zh) * 2004-06-28 2006-01-04 英特尔公司 线程到线程通信
CN101390057A (zh) * 2006-02-24 2009-03-18 高通股份有限公司 两级中断服务例程
CN101135982A (zh) * 2006-08-28 2008-03-05 国际商业机器公司 在计算机中管理消息传信中断资源的方法和装置
CN101681273A (zh) * 2007-05-10 2010-03-24 国际商业机器公司 响应于所接收的请求进行工作的服务器装置
US8209702B1 (en) * 2007-09-27 2012-06-26 Emc Corporation Task execution using multiple pools of processing threads, each pool dedicated to execute different types of sub-tasks
US20100037222A1 (en) * 2008-08-06 2010-02-11 Michiaki Tatsubori Detecting the starting and ending of a task when thread pooling is employed
US20110145834A1 (en) * 2009-12-10 2011-06-16 Sun Microsystems, Inc. Code execution utilizing single or multiple threads
CN102334104A (zh) * 2011-08-15 2012-01-25 华为技术有限公司 一种基于多核系统的同步处理方法及装置
CN104471587A (zh) * 2012-05-16 2015-03-25 诺基亚公司 处理器中的方法,装置和计算机程序产品
WO2015050594A2 (en) * 2013-06-16 2015-04-09 President And Fellows Of Harvard College Methods and apparatus for parallel processing
US20150095912A1 (en) * 2013-09-27 2015-04-02 Andrey Semin Methods and apparatus for controlling affinity for execution entities
CN104266657A (zh) * 2014-09-12 2015-01-07 海华电子企业(中国)有限公司 基于cpu和mic协同计算的最短路径规划并行化方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
NASSER GIACAMAN .ETAL: "Parallel Iterator for Parallelizing Object-Oriented Applications", 《INTERNATIONAL JOURNAL OF PARALLEL PROGRAMMING》 *
米乾宝: "基于RTX的并口实时中断控制系统", 《测控技术》 *

Also Published As

Publication number Publication date
BR112018007619A2 (pt) 2018-10-30
US9778951B2 (en) 2017-10-03
EP3362892A1 (en) 2018-08-22
WO2017065914A1 (en) 2017-04-20
CN108139932B (zh) 2021-08-24
KR20180069801A (ko) 2018-06-25
JP2018536917A (ja) 2018-12-13
US20170109195A1 (en) 2017-04-20

Similar Documents

Publication Publication Date Title
JP6423518B2 (ja) マルチプロセッサシステムのための指向性イベントシグナリング
US10747297B2 (en) Application processor performing a dynamic voltage and frequency scaling operation, computing system including the same, and operation method thereof
US20190073305A1 (en) Reuse Aware Cache Line Insertion And Victim Selection In Large Cache Memory
US10503656B2 (en) Performance by retaining high locality data in higher level cache memory
US10628321B2 (en) Progressive flush of cache memory
EP3472684B1 (en) Wake lock aware system wide job scheduling for energy efficiency on mobile devices
CN108139946A (zh) 用于在冲突存在时进行有效任务调度的方法
US10255181B2 (en) Dynamic input/output coherency
EP3497563B1 (en) Fine-grained power optimization for heterogeneous parallel constructs
JP2018511105A (ja) マルチクラスタシステムにおいて利用可能なキャッシュを選択する方法
CN108139932A (zh) 关闭关键执行路径的任务信令
US9582329B2 (en) Process scheduling to improve victim cache mode
JP6748298B2 (ja) ハードウェア制御分割スヌープディレクトリを使用するコヒーレント相互接続電力低減
US10078611B1 (en) Smart handling of input/output interrupts
CN108885569A (zh) 识别增强型同步操作结果以改善运行时操作
KR102143269B1 (ko) I/o 동작 특성에 기초한 soc 유휴 전력 상태 제어를 위한 시스템 및 방법
US11907138B2 (en) Multimedia compressed frame aware cache replacement policy
US10261831B2 (en) Speculative loop iteration partitioning for heterogeneous execution

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
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20210824