CN104094235A - 多线程计算 - Google Patents
多线程计算 Download PDFInfo
- Publication number
- CN104094235A CN104094235A CN201380006344.7A CN201380006344A CN104094235A CN 104094235 A CN104094235 A CN 104094235A CN 201380006344 A CN201380006344 A CN 201380006344A CN 104094235 A CN104094235 A CN 104094235A
- Authority
- CN
- China
- Prior art keywords
- passage
- kernel
- consumer
- data
- condition
- 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
Links
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/54—Interprogram communication
- G06F9/542—Event management; Broadcasting; Multicasting; Notifications
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Stored Programmes (AREA)
- Executing Machine-Instructions (AREA)
- Image Processing (AREA)
- Information Transfer Systems (AREA)
Abstract
本发明提供了一种系统、方法和计算机程序产品用于改进多线程应用程序的资源利用率。本文所公开的技术提供事件驱动方式以仅在需要时启动内核来进行通道数据上的操作且然后终止以释放资源,而不是要求线程在等待来自通道的数据时阻塞或要求上下文切换以将阻塞最小化。这些操作在硬件中被有效处理,但是足够灵活能以所有编程模型方式来实施。
Description
发明背景
发明领域
本发明大体上涉及软件编程,并且更具体来说,涉及多线程编程技术。
背景技术描述
许多高性能计算应用程序被使用多线程技术编写。当使用多线程技术时,执行的多个线程可以同时或通过交替访问处理流水线在不同的任务上工作。例如,如果可以将任务分解成两个不同的子任务,那么建立两个单独的线程可为有利的,每一个处理不同的子任务。然后,这些线程生成其对应的结果,其共同解决整个任务。
存在不同的技术用于给任务分配工作。一个方式通常被称为“生产者-消费者设计。”在生产者-消费者设计方式内,一个或多个线程负责生成数据,而一个或多个线程负责消费所生成的数据。举例来说,生产者线程可负责将数据从文件读取至可由消费者线程访问的存储区中。消费者线程从该存储区检索数据并且根据需要处理(消费)数据。
随着消费者线程的责任变得更复杂,消费者线程的资源要求通常也变得更复杂。在生产者-消费者设计方式中,随着数据从生产者线程到达存储区中,消费者线程可用于处理数据。对于消费者线程保持驻留在存储器中的该要求需要额外的资源利用率。另外,甚至在存储区为空,消费者线程不进行任何操作的情况下,交换消费者线程出入有源存储器也很昂贵(例如,对于额外的处理循环、完成时间、功率和其它方面)。
因此,所希望的是减少消费者线程的资源要求的技术。
发明的实施方案的概要
本发明的实施方案包括一种方法,其包括:定义通道、定义被配置成从所述通道读取数据的消费者内核、定义被配置成将数据写至所述通道的生产者内核、以及寄存被配置成在满足所述通道的条件时启动所述消费者内核的通道事件。
本发明的另一个实施方案包括计算机可读存储装置,其具有在其上存储的指令,由计算装置执行所述指令使所述计算装置进行包括以下的操作:定义通道、定义被配置成从所述通道读取数据的消费者内核、定义被配置成将数据写至所述通道的生产者内核、以及寄存被配置成在满足所述通道的条件时启动所述消费者内核的通道事件。
本发明的又一个实施方案包括一个系统,其具有:被配置成存储包括通道的模块的存储器、被配置成从所述通道读取数据的消费者内核、被配置成将数据写至所述通道的生产者内核、以及被配置成寄存通道事件的寄存模块,其中所述通道事件被配置成在满足所述通道的条件时启动所述消费者内核,并且一个或多个处理器被配置成处理所述模块。
本发明的进一步特征和优点以及本发明的各种实施方案的结构和操作在下文中参考附图详细描述。要注意的是本发明不受限于本文所述的具体实施方案。此类实施方案在此呈现仅用于说明的目的。基于本文所包含的教导,其它实施方案对于相关领域中的技术人员将是显而易见的。
附图简述
在此并入并形成说明书的部分的附图图示本发明的实施方案,并且与说明书一起进一步用于解释本发明的原理并使相关领域中的技术人员能够制作和使用本发明。
图1是使用现有技术的实例多线程应用程序。
图2图示根据本发明的实施方案的多线程应用程序。
图3是根据本发明的实施方案的图示开发多线程应用程序的操作的流程图。
图4是根据本发明的实施方案的图示扩展通道和事件处理的操作的流程图。
图5是根据本发明的实施方案的图示符合示例性生产者-消费者实施方式的消费者内核的操作的流程图。
图6描绘实例计算机系统,在其中可实施本发明的实施方案。
现在将参考附图描述本发明。在附图中,相同的附图标记大体上指示相同或功能类似的元件。另外,附图标记的最左边的数字标示所述附图标记首次出现的附图。
具体实施方式
本发明的下列详细说明参考图示符合本发明的示例性实施方案的附图。在不脱离本发明的精神和范围的情况下,其它实施方案是可能的并且可以对实施方案做出修改。因此,具体实施方式不意在限制本发明。相反,本发明的范围由所附的权利要求定义。
如下文所述的本发明的方面可以被实施在软件、硬件、固件和/或附图中所示的实体的许多不同的实施方案中,这对于本领域的一个技术人员将是显而易见的。用于实施本发明的任何实际软件代码以及硬件的专门控制不限制本发明。因此,将在给定本文所呈现的细节级别可做出实施方案的修改和变化的理解的基础上描述本发明的操作行为。
另外,本发明的各种实施方案的仿真、合成和/或制造可部分通过使用包括通用编程语言(诸如C或C++)、包括Verilog HDL、VHDL、Altera HDL(AHDL)等的硬件描述语言(HDL)、或者其它可用的编程和/或原理图捕获工具(诸如电路捕获工具)的计算机可读代码(如上文所提及的)来完成,并且这对于本领域的一个普通技术人员将是明显的。该计算机可读代码可以置于包括半导体、磁盘、光盘(诸如CD-ROM、DVD-ROM)的任何已知的计算机可使用介质中,并且作为在计算机可使用(例如可读)传输介质(诸如载波或包括基于数字、光学或模拟介质的任何其它介质)中体现的计算机数据信号。因此,可以通过包括(因特网和互联网)的通信网络传送代码。要理解的是由上文所述的系统和技术完成的功能和/或提供的结构可以在核(诸如图形处理单元(GPU)核)中表示(这体现在编程代码中)并且可被转换成硬件作为生产集成电路的部分。将了解的是其它类型的核或处理单元可以提供体现本发明的方面的功能和/或结构。例如,这些处理单元可包括中央处理单元(CPU)、上述图形处理单元、数字信号处理器、应用程序处理器及其类似物。
参考在该说明书中的模块和权利要求意指用于进行所指示的功能的硬件或软件部件的任何组合。模块不需要是严格定义的实体,使得若干模块可重复硬件和软件部件的功能。例如,软件模块可指代在程序内的单行代码,所述程序本身是单独的软件模块。相关领域中的一个技术人员将理解可根据例如许多格式或性能优化技术来定义模块的功能。
图1是使用现有技术的实例多线程应用程序100。在该实例中,主进程在步骤102产生线程,特别是根据生产者-消费者设计方式产生一个或多个生产者线程和一个或多个消费者线程。相关领域中的一个技术人员将了解存在并与该公开相关的其它线程模型,并且在该公开的此处和别处通过举例的方式使用生产者-消费者设计方式。
在步骤104中,生产者线程的任务是生成数据。例如,生产者线程可从文件或数据库读取数据。该数据可能是应用程序100被配置成处理的任何数据,诸如由线集组成的图形。为了该实例的目的,假定可以在处理来自图形文件的线或其它集的数据的同时处理其它线或集的数据。
在步骤106处,生产者确定在缓冲器112中是否存在放置数据的空间。如果不存在,生产者等待直至如在步骤108中所指示的空间变得可用。该等待状态有时已知为“阻塞”,其中线程不能够进行进一步处理直至资源变得可用。在阻塞时,线程尽管不进行任何有用功都继续使用系统资源。
一旦资源(在该情况中缓冲器112)变得可用,在步骤110中生产者就将数据放置在缓冲器112中。然后,生产者继续回到步骤104以生成任何其它数据(例如来自图形文件的其它图像线)。
消费者线程的任务是处理生产者放置在缓冲器112中的数据。多个生产者和多个消费者可以用在生产者-消费者设计方式中;尽管在实践中消费者的数量趋于超过生产者,因为消费者线程负责多个耗时的处理。
继续生产者-消费者设计方式的该实例,提供消费者线程以执行来自图形文件单个线或其它集的数据。在一个实施方案中,消费者线程能够以真实并行操作独立于来自图形文件的其它数据来进行该工作。例如,消费者线程可用于减少图形的色域(每个像素分配的位数),并且每个可以在图形的对应的数据上如此进行。相关领域的一个技术人员将再次了解仅通过举例而不是限制的方式提供该应用程序。
在步骤114处,消费者线程确定在缓冲器112中是否存在继续工作的数据以便进行其工作。如果不存在可用数据,消费者线程不能够继续进行并且必须如在步骤116中所指示的等待(阻塞)。如上文所论述的,消费者线程在阻塞时继续利用系统资源直至在缓冲器112中的数据变得可用。
存在用于线程阻塞的各种机构。例如,线程可以测试条件并且阻塞直至满足条件(例如测试缓冲器是否具有数据、锁定测试等)。当满足该条件时,线程则可以继续进行。在该情况下,线程继续进行至步骤118以从缓冲器112检索数据。然后,在步骤120处线程通过处理数据(例如减少图形数据的线的色域)来消费数据。然后,消费者线程返回至步骤114,并且准备好处理其它工作。
在方法100中所述的该方式的显著问题是在阻塞状态(例如上文的步骤108和116)中甚至没有进行有用功时线程的显著资源利用率。这可以在上下文切换处理器中通过将阻塞的线程切换出处理流水线以使其它线程能够利用一些处理资源而得到一定程度的改善。即使如此,上下文切换需要为已经切换出的线程保留每线程状态的信息,使得在将其切换进来时保存其状态信息。另外,不是所有处理器都能够进行必需的上下文切换操作,诸如尽管如此但是不能够多线程编程的许多GPU。
因此,传统的实施方式不是有效方式,其中一个线程编写且另一个线程读取、在阻塞是读取线程在空的通道上。这导致长期运行的线程占用系统资源,并且可需要由调度器切换出去。另外,即使切换出去,这些线程继续消费资源以保留每线程状态信息。
图2图示根据本发明的实施方案的多线程应用程序200。多线程应用程序200以及其中所体现的技术提供对于与线程阻塞相关联的现有资源利用率问题的低效的解决方案。再次呈现本文的生产者-消费者模型的环境下的论述,但是相关领域中的技术人员将了解该技术可应用于可发生阻塞的其它多线程模型。
多线程应用程序200根据本发明的实施方案提供生产者内核202和消费者内核210。通过非限制性实例的方式,本文的实施方式细节在由Khronos Group开发的OpenCL并行编程标准的环境下论述。然而,相关领域的一个技术人员将了解这些技术可应用于其它开发平台。
生产者内核202和消费者内核210是使用OpenCL“内核”术语的分别对应于生产者任务和消费者任务的代码块。在OpenCL中,内核是由线程或一组并行线程处理的任务。OpenCL运行时间将要执行的内核置于命令队列上,将该内核(线程)排队用于在特定装置上执行。OpenCL的灵活性准许为用于包括CPU和GPU的大量处理装置的内核排队。如将了解的,还可以采用API而不是OpenCL。例如,来自Microsoft Corporation的DirectComputeTM是可能采用的另一个API。
为了图示生产者内核202和消费者内核210的数据流程,图2还图示根据本发明的实施方案的生产者队列204和消费者队列208的使用。根据本发明的实施方案,生产者队列204不需要是字面上的队列,而是生产者内核202读取以提供工作用于一个或多个消费者内核210的执行的一些种类的数据源。参照回先前的实例,包含图形数据线的文件可能被视作生产者队列204,其中生产者内核202从文件读取图形数据线。相关领域中的一个技术人员将了解可以利用其它数据源,并且通过举例而不是限制的方式提供生产者队列204。
类似地,根据本发明的实施方案,消费者队列208不需要是字面上的队列,而是呈现消费者内核210处理的工作的一些目标。参照回先前的实例,根据本发明的实施方案,每个消费者内核210从消费者队列208拉出图形数据的单个线并进行处理。多个消费者内核210可以如此进行用于其各自的工作。相关领域中的一个技术人员将了解可使用用于消费者内核210的工作的其它源,并且通过举例而不是限制的方式提供消费者队列208。
代替使用图1的简单缓冲器实例,多线程应用程序200根据本发明的实施方案引入通道206。通道206以及支持的功能提供消除消费者线程阻塞的能力。
通道206不是单个缓冲器或队列,而是提供在生产者内核202与消费者队列208之间的准许寄存与通道相关联的内核启动触发器的更复杂的通信通路。该内核启动触发器将在满足条件(诸如消费者队列208中存在工作)时启动消费者内核210。
图3是根据本发明的实施方案的图示利用该方式开发的多线程应用程序的操作的方法300的流程图。该方法开始于步骤302并且继续进行至步骤304,其中定义了生产者内核。通过非限制性实例的方式,使用已经扩展以容纳本文所公开的新颖通道和事件处理概念的OpenCL语法,可以下列方式定义生产者内核:
在该实例生产者内核中,写入两个单独的通道。每个通道由通过生产者内核给定条件(诸如在当前实例中,数据值是否是否大于5)检索自阵列“a”(例如生产者队列204)的数据构成。
在步骤306处,根据本发明的实施方案定义消费者内核。继续上文具有扩展的OpenCL语法的非限制性实例,为所使用的每个通道(通道b和c)定义消费者内核。在本发明的实施方案中,以下列方式定义这些消费者内核:
在上文实例消费者内核中,每个内核执行类似的任务:从其各自的通道读取整数值并且将该值增加至全局整数值(例如消费者队列210)。
在步骤308处,根据本发明的实施方案定义通道。在步骤310处,当满足通道的某些条件时,将通道事件寄存至触发器动作。
继续上文具有扩展的OpenCL语法的非限制性实例,在步骤308处定义两个通道(通道B和通道C)以及对应的事件触发器。这些通道和事件可能以下列方式来定义:
在上文的实例中,用某些尺寸参数建立通道并且在满足特定通道条件时使用事件处理器的指示。通过非限制性实例的方式,编程语言编译器,诸如OpenCL的编译器,被扩展以如上文通过下列功能处理通道对象的建立:
在该示例性非限制性定义中,参数用于下列用途:
·context是用于建立通道对象的有效OpenCL环境
·flags是用于指定关于所建立的通道存储器对象的分配和使用信息的位字段
·number_of_elements指代元素的数量
·element_size是元素类型的字节大小。
·block_size是元素数量,此后将在块准备事件中设定CL_CHANNEL_BLOCK_READY状态。
·errcode_ret将返回适当的错误代码--如果errcode_ret为空(NULL),那么不返回错误代码。
继续该示例性非限制性定义,如果成功执行功能,那么可以利用errorcode ret来返回条件CL_SUCCESS,或另外返回NULL值以及下列示例性错误值中的一个:
·CL_INVALID CONTEXT如果环境是无效的环境
·CL_INVALID_VALUE如果在flags中指定的值无效
·CL_INVALID_CHANNEL_SIZE如果大小超过在CL_DEVICE_CHANNEL_MAX_SIZE中指定的值
·CL_MEM_OBJECT_ALLOCATION_FAILURE如果分配用于图像对象的存储失败
·CL_INVALID_OPERATION如果在环境中不存在支持通道的装置
·CL_OUT_OF_RESOURCES如果在装置上分配OpenCL实施方式所需的资源失败
·CL_OUT_OF_HOST_MEMORY如果在主机上分配OpenCL实施方式所需的资源失败
随着用事件触发器对应的通道定义和关联的事件触发器,在步骤310中当满足特定事件条件时寄存事件触发器。继续上文的非限制性实例,以下列方式寄存两个事件触发器:
上文示例性事件触发器寄存将触发CL_CHANNEL_BLOCK_READY条件,其在通道中存在至少一个数据块如同上文论述的由传送至clCreateChannel的block_size值测量时被设定。另一个事件CL_CHANNEL_FULL可代替地被利用用于其它应用程序,其在通道如由通道的大小值测量的已满时被设定。相关领域中的一个技术人员将了解可以根据需要扩展事件案触发器功能,并且通过举例而不是限制的方式提供这些事件。
在OpenCL的情况下,根据本发明的实施方案通过定义功能clAddEventTrigger来建立事件触发器。该功能的示例性非限制性定义将是:
在该示例性非限制性定义中,参数用于下列用途:
·queue是有效OpenCL命令队列,内核在其中排队
·kernel是要排队的有效OpenCL内核
·num_events在事件列表中指代将检验以评估触发器的事件的数量
·event_trigger_state是有效状态集的状态掩膜,内核启动将在其上发生,并且可以来自OpenCL事件状态以及上文所述的额外的新的状态的良序集
·event事件描述所启动的内核的状态
然后,方法300在步骤312处结束。在图3中和附图中的别处所述的步骤的次序不需要固定,因为可用以代码中的各种次序和位置展现的定义来编写程序。
图4是根据本发明的实施方案的图示扩展通道和事件处理的操作的方法400的流程图。该方法开始于步骤402并且继续进行至步骤404,其中要处理的数据被接收并存储在通道中(例如放置在通道内的队列中)。在步骤406处,测试用于通道的事件触发器条件。例如,如上文所述的,该条件可为CL_CHANNEL_BLOCK_READY条件,其在通道中存在至少一个数据块时被设定。
根据本发明的实施方案,如果条件测试肯定,那么在步骤408将对应的消费者内核分派至命令队列中。在上文的实例中,如果数据块可在“通道B”中获得,那么启动内核B来消费数据。该方法在步骤410处结束。
该方式的效果是避免消费者内核在阻塞时空闲或被切换出去。相反,消费者内核仅在需要时具现,并且在其工作完成后终止。虽然该公开在即时建立消费者内核的环境下呈现该应用程序,相关领域中的一个技术人员将了解本文所公开的通道事件处理可以适用于分派内核用于其它的应用程序。例如,事件触发器可以用于在已满的通道中的空间变得可用时分派生产者内核,这防止生产者内核在等待空间时阻塞。
图5是根据本发明的实施方案的图示符合示例性生产者-消费者实施方式的消费者内核的操作的方法500的流程图。该方法开始于步骤502并且继续进行至步骤504,其中启动消费者内核。根据本发明的实施方案,从OpenCL实施方式中的命令队列启动消费者内核,尽管可根据其它变成模型中的特定实施方式使用用于启动内核的其它技术。
在步骤506处,消费者内核从通道读取数据,并且在步骤508处消费数据。消费数据所需的工作量将随着特定的实施方式变化。然而,一般优选减少单个消费者内核消费数据所需的资源。当消费者内核完成其数据工作时,在步骤510处消费者内核终止并且释放其资源。然后,该方法在步骤512处结束。
为了改进本文所述的技术的性能,根据本发明的实施方案考虑对于编程语言编译器(例如OpenCL编译器)或运行时间系统的某些优化。例如,当编译用于在GPU上执行时,编译器可优化通道用于在运行时一定程度上表示GPU存储器,诸如在总体存储器(例如DRAM)中。或者,在运行时还可能在全局数据共享(GDS)SRAM结构中或甚至在本地数据共享(LDS)中在核接着核(core-by-core)的基础上表示通道以准许一定程度的线程持久性来提供针对存储器带宽的权衡。
根据本发明的实施方案,可以通过诸如在当前GPU上的控制处理器的升级版的硬件调度系统的实施方式来进一步促进事件触发器的有效处理。调度系统被配置成观察具有最小的延时和高效的事件和来自硬件的触发器内核启动,允许迅速启动较小的消费者块。
如先前所述的,贯穿该公开的实施方式细节一般是在OpenCL编程模型的环境下。然而,可以在其它编程模型中实现该公开提供的优点。在替代编程模型中实施的与上文所述的实例类似的实例如下:
本发明的各种方面可以通过软件、固件、硬件或其组合来实施。图6图示实例计算机系统600,其中可以将本发明或本发明的部分实施为计算机可读代码。例如,可以在系统600中实施由图3的流程图300、图4的400和图5的500所示的方法。依据该实例计算机系统600描述本发明的各种实施方案。在阅读该说明书后,如何使用其它计算机系统和/或计算机架构来实施本发明对于相关领域中的技术人员将变得显而易见。
计算机系统600包括一个或多个处理器,诸如处理器604。处理器604可以是专用或通用处理器。处理器604连接至通信基础设施606(例如总线或网络)。
计算机系统600还包括主存储器608,优选随机访问存储器(RAM),并且还可包括辅助存储器610。例如,辅助存储器610可包括硬盘驱动器612、可移动存储驱动器614和/或记忆棒。可移动存储驱动器614可包括软盘驱动器、磁带驱动器、光盘驱动器、闪速存储器或其类似物。可移动存储驱动器614以熟知的方式读取自和/或写入至可移动存储单元618。可移动存储单元618可包括由可移动存储驱动器614读取或写入的软盘、磁带、光盘等。如相关领域中的技术人员将了解的,可移动存储单元618包括计算机可使用存储介质,其具有存储在其中的计算机软件和/或数据。
在替代实施方式中,辅助存储器610可包括其它类似的构件用于允许将计算机程序或其它指令加载至计算机系统600中。例如,此类构件可包括可移动存储单元622和接口620。此类构件的实例可包括程序盒式存储器和盒式存储器接口(诸如在视频游戏装置中找到的)、可移动存储器芯片(诸如EPROM或PROM)和相关联的插口、以及允许将数据从可移动存储单元622传送至计算机系统600的其它可移动存储单元622和接口620。
计算机系统600还可包括通信接口624。通信接口624允许在计算机系统600与外部装置之间传送软件和数据。通信接口624可包括调制解调器、网络接口(诸如以太网卡)、通信端口、PCMCIA插槽和卡、或其类似物。经由通信接口624传送的软件和数据呈可为能够由通信接口624接收的电子、电磁、光学或其它信号的信号的形式。这些信号经由通信路径626被提供给通信接口624。通信路径626运载信号并且可被使用电线或电缆、光纤、电话线、蜂窝电话链接、RF链接或其它通信信道来实施。如将了解的,可以许多不同形状因数或类型的计算机系统来体现计算机系统600。例如,可在手持或其它移动计算系统、机顶盒、常规计算机(例如膝上型、台式、服务器)、平板计算机、嵌入式系统、电视机、音频/视频设备、及其类似物中体现本发明的方面。在某些情境下,体现本发明的方面的计算机系统可导致减少的费用(例如降低的活更有效的处理、减少的完成时间、降低的功率、及其类似物)。
在该文档中,术语“计算机程序介质(computer program medium)”和“计算机可使用介质(computer usable medium)”一般用于指代诸如可移动存储单元618、可移动存储单元622和在硬盘驱动器612中安装的硬盘的媒介。通过通信路径626运载的信号还可以体现本文所述的逻辑。计算机程序介质和计算机可使用介质还可以指代存储器,诸如主存储器608和辅助存储器610,其可以是存储器半导体(例如DRAM等)。这些计算机程序产品是用于给计算机系统600提供软件的构件。
计算机程序(也称为计算机控制逻辑)存储在主存储器608和/或辅助存储器610中。计算机程序还可被经由通信接口624来接收。此类计算机程序在被执行时使计算机系统600能够如本文所述的实施本发明。具体来说,计算机程序在被执行时使处理器604能够如上文所论述的实施本发明的进程,诸如由图3的流程图300、图4的400和图5的500所示的方法中的步骤。因此,此类计算机程序表示计算机系统600的控制器。在使用软件实施本发明的情况下,可使用可移动存储驱动器614、接口620、硬盘驱动器612或通信接口624将软件存储在计算机程序产品中并将其加载至计算机系统600中。
本发明还针对包括存储在任何计算机可使用介质上的软件的计算机程序产品。此类软件在一个或多个数据处理装置中被执行时使数据处理装置如上文所述的操作。本发明的实施方案采用现在已知或未来可知的任何计算机可使用或可读介质。计算机可使用介质的实例包括但不受限于主要存储装置(例如任何类型的随机访问存储器)、辅助存储装置(例如硬盘、软盘、CD ROMS、ZIP盘、磁带、磁存储装置、光学存储装置、MEMS、纳米技术存储装置等)、以及通信介质(例如有线和无线通信网络、局域网、广域网、内联网等)。
虽然已经在上文中描述了本发明的各种实施方案,但是应理解的是仅通过实例而不是限制的方式将其呈现。相关领域中的那些技术人员将理解的是在不脱离所附权利要求中定义的本发明的精神和范围的情况下可在其中做出各种形式和细节的改变。应理解的是本发明不受限于这些实例。本发明适用于如本文所述操作的任何元件。因此,本发明的宽度和范围不应受任何上文所述的示例性实施方案限制,而是应仅根据下列权利要求和其等效物来定义。
Claims (24)
1.一种方法,其包括:
定义通道;
定义被配置成从所述通道读取数据的消费者内核;以及
寄存被配置成在满足所述通道的条件时启动所述消费者内核的通道事件。
2.根据权利要求1所述的方法,其中所述通道的所述条件在至少一个数据块在所述通道中时被满足。
3.根据权利要求1所述的方法,其中所述通道的所述条件在所述通道已满时被满足。
4.根据权利要求1所述的方法,其还包括:
在运行时将所述通道分配给处理单元的存储器单元。
5.根据权利要求1所述的方法,其还包括:
执行被配置成观察所述通道事件并且触发所述消费者内核的所述启动的硬件调度系统。
6.根据权利要求1所述的方法,其还包括:
当满足所述通道的所述条件时,将所述消费者内核放置在命令队列中,其中所述命令队列被配置成处理所述消费者内核的所述启动。
7.根据权利要求1所述的方法,其还包括:
启动所述消费者内核;
在所述消费者内核处读取来自所述通道的所述数据;
消费所述数据;以及
终止所述消费者内核。
8.根据权利要求1所述的方法,其还包括:
定义被配置成将数据写入所述通道的生产者内核。
9.一种计算机可读存储装置,其具有存储在其上的指令,由计算装置执行所述指令使所述计算装置进行包括以下的操作:
定义通道;
定义被配置成从所述通道读取数据的消费者内核;以及
寄存被配置成在满足所述通道的条件时启动所述消费者内核的通道事件。
10.根据权利要求9所述的计算机可读存储装置,其中所述通道的所述条件在至少一个数据块在所述通道中时被满足。
11.根据权利要求9所述的计算机可读存储装置,其中所述通道的所述条件在所述通道已满时被满足。
12.根据权利要求9所述的计算机可读存储装置,所述操作还包括:
在运行时将所述通道分配给处理单元的存储器单元。
13.根据权利要求9所述的计算机可读存储装置,所述操作还包括:
执行被配置成观察所述通道事件并且触发所述消费者内核的所述启动的硬件调度系统。
14.根据权利要求9所述的计算机可读存储装置,所述操作还包括:
当满足所述通道的所述条件时,将所述消费者内核放置在命令队列中,其中所述命令队列被配置成处理所述消费者内核的所述启动。
15.根据权利要求9所述的计算机可读存储装置,所述操作还包括:
启动所述消费者内核;
在所述消费者内核处读取来自所述通道的所述数据;
消费所述数据;以及
终止所述消费者内核。
16.根据权利要求9所述的计算机可读存储装置,所述操作还包括:
定义被配置成将数据写入所述通道的生产者内核。
17.一种系统,其包括:
被配置成存储模块的存储器,其包括:
通道,
消费者内核,其被配置成从所述通道读取数据,以及
寄存模块,其被配置成寄存通道事件,其中所述通道事件被配置成在满足所述通道的条件时启动所述消费者内核;以及
一个或多个处理器,其被配置成处理所述模块。
18.根据权利要求17所述的系统,其中所述通道的所述条件在至少一个数据块在所述通道中时被满足。
19.根据权利要求17所述的系统,其中所述通道的所述条件在所述通道已满时被满足。
20.根据权利要求17所述的系统,其还包括:
分配模块,其被配置成在运行时将所述通道分配给所述一个或多个处理器的存储器单元。
21.根据权利要求17所述的系统,其还包括:
硬件调度系统,其被配置成观察所述通道事件并且触发所述消费者内核的所述启动。
22.根据权利要求17所述的系统,其还包括:
命令队列,其被配置成在满足所述通道的所述条件时接收所述消费者内核以及处理所述消费者内核的所述启动。
23.根据权利要求17所述的系统,其中所述消费者内核还被配置成消费所述数据以及终止。
24.根据权利要求17所述的系统,其还包括:
生产者内核,其被配置成将数据写入所述通道。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201261589468P | 2012-01-23 | 2012-01-23 | |
US61/589,468 | 2012-01-23 | ||
US13/606,741 | 2012-09-07 | ||
US13/606,741 US10235220B2 (en) | 2012-01-23 | 2012-09-07 | Multithreaded computing |
PCT/US2013/022729 WO2013126170A1 (en) | 2012-01-23 | 2013-01-23 | Multithreaded computing |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104094235A true CN104094235A (zh) | 2014-10-08 |
CN104094235B CN104094235B (zh) | 2019-05-28 |
Family
ID=48798336
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201380006344.7A Active CN104094235B (zh) | 2012-01-23 | 2013-01-23 | 多线程计算 |
Country Status (7)
Country | Link |
---|---|
US (1) | US10235220B2 (zh) |
EP (1) | EP2807559A1 (zh) |
JP (1) | JP6336399B2 (zh) |
KR (1) | KR102024283B1 (zh) |
CN (1) | CN104094235B (zh) |
IN (1) | IN2014DN06232A (zh) |
WO (1) | WO2013126170A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107368255A (zh) * | 2017-07-25 | 2017-11-21 | 广东欧珀移动通信有限公司 | 解锁方法、移动终端及计算机可读存储介质 |
CN109918141A (zh) * | 2019-03-15 | 2019-06-21 | Oppo广东移动通信有限公司 | 线程执行方法、装置、终端及存储介质 |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9477521B2 (en) | 2014-05-29 | 2016-10-25 | Netapp, Inc. | Method and system for scheduling repetitive tasks in O(1) |
US9256477B2 (en) * | 2014-05-29 | 2016-02-09 | Netapp, Inc. | Lockless waterfall thread communication |
US9304702B2 (en) | 2014-05-29 | 2016-04-05 | Netapp, Inc. | System and method for parallelized performance data collection in a computing system |
US9652817B2 (en) * | 2015-03-12 | 2017-05-16 | Samsung Electronics Co., Ltd. | Automated compute kernel fusion, resizing, and interleave |
CN105447285B (zh) * | 2016-01-20 | 2018-11-30 | 杭州菲数科技有限公司 | 一种提高OpenCL硬件执行效率的方法 |
US10013240B2 (en) * | 2016-06-21 | 2018-07-03 | Advanced Micro Devices, Inc. | Fingerprinting of redundant threads using compiler-inserted transformation code |
US10296393B2 (en) | 2016-09-19 | 2019-05-21 | Texas Instruments Incorporated | Method for scheduling a processing device |
US10467056B2 (en) * | 2017-05-12 | 2019-11-05 | Google Llc | Configuration of application software on multi-core image processor |
US10713746B2 (en) * | 2018-01-29 | 2020-07-14 | Microsoft Technology Licensing, Llc | FIFO queue, memory resource, and task management for graphics processing |
US10719268B2 (en) | 2018-06-29 | 2020-07-21 | Microsoft Technology Licensing, Llc | Techniques for safely and efficiently enqueueing and dequeueing data on a graphics processor |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1784658A (zh) * | 2003-05-08 | 2006-06-07 | 皇家飞利浦电子股份有限公司 | 将因数据分组传递而阻塞的处理节点解除阻塞的阈值 |
US20060182137A1 (en) * | 2005-02-14 | 2006-08-17 | Hao Zhou | Fast and memory protected asynchronous message scheme in a multi-process and multi-thread environment |
CN1991793A (zh) * | 2005-12-30 | 2007-07-04 | 英特尔公司 | 用于在多核系统中进行邻近高速缓存的方法及系统 |
US20080062450A1 (en) * | 2006-09-07 | 2008-03-13 | Ricoh Company, Limited | Image forming apparatus and input/output control method |
US20080104325A1 (en) * | 2006-10-26 | 2008-05-01 | Charles Narad | Temporally relevant data placement |
US7950017B1 (en) * | 1999-04-23 | 2011-05-24 | Avaya Inc. | Apparatus and method for forwarding messages between two applications |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2273591A (en) * | 1992-12-18 | 1994-06-22 | Network Systems Corp | Microcomputer control systems for interprogram communication and scheduling methods |
JP2003029980A (ja) | 2001-07-10 | 2003-01-31 | Toshiba Corp | データキュー管理システム、データキュー管理装置、データキュー管理方法、およびプログラム |
US8621184B1 (en) * | 2008-10-31 | 2013-12-31 | Netapp, Inc. | Effective scheduling of producer-consumer processes in a multi-processor system |
US8694625B2 (en) * | 2010-09-10 | 2014-04-08 | International Business Machines Corporation | Selective registration for remote event notifications in processing node clusters |
-
2012
- 2012-09-07 US US13/606,741 patent/US10235220B2/en active Active
-
2013
- 2013-01-23 CN CN201380006344.7A patent/CN104094235B/zh active Active
- 2013-01-23 IN IN6232DEN2014 patent/IN2014DN06232A/en unknown
- 2013-01-23 JP JP2014553528A patent/JP6336399B2/ja active Active
- 2013-01-23 KR KR1020147023157A patent/KR102024283B1/ko active IP Right Grant
- 2013-01-23 EP EP13702318.0A patent/EP2807559A1/en not_active Ceased
- 2013-01-23 WO PCT/US2013/022729 patent/WO2013126170A1/en active Application Filing
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7950017B1 (en) * | 1999-04-23 | 2011-05-24 | Avaya Inc. | Apparatus and method for forwarding messages between two applications |
CN1784658A (zh) * | 2003-05-08 | 2006-06-07 | 皇家飞利浦电子股份有限公司 | 将因数据分组传递而阻塞的处理节点解除阻塞的阈值 |
US7490178B2 (en) * | 2003-05-08 | 2009-02-10 | Koninklijke Philips Electronics N.V. | Threshold on unblocking a processing node that is blocked due data packet passing |
US20060182137A1 (en) * | 2005-02-14 | 2006-08-17 | Hao Zhou | Fast and memory protected asynchronous message scheme in a multi-process and multi-thread environment |
CN1991793A (zh) * | 2005-12-30 | 2007-07-04 | 英特尔公司 | 用于在多核系统中进行邻近高速缓存的方法及系统 |
US20080062450A1 (en) * | 2006-09-07 | 2008-03-13 | Ricoh Company, Limited | Image forming apparatus and input/output control method |
US20080104325A1 (en) * | 2006-10-26 | 2008-05-01 | Charles Narad | Temporally relevant data placement |
Non-Patent Citations (1)
Title |
---|
KHRONOS OPENCL WORKING GROUP: "The OpenCL Specification Version:1.1 Document Revision:44", 《OPENCL规范1.1》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107368255A (zh) * | 2017-07-25 | 2017-11-21 | 广东欧珀移动通信有限公司 | 解锁方法、移动终端及计算机可读存储介质 |
CN109918141A (zh) * | 2019-03-15 | 2019-06-21 | Oppo广东移动通信有限公司 | 线程执行方法、装置、终端及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
JP2015504226A (ja) | 2015-02-05 |
EP2807559A1 (en) | 2014-12-03 |
US20130191852A1 (en) | 2013-07-25 |
CN104094235B (zh) | 2019-05-28 |
IN2014DN06232A (zh) | 2015-10-23 |
KR102024283B1 (ko) | 2019-11-14 |
JP6336399B2 (ja) | 2018-06-06 |
WO2013126170A1 (en) | 2013-08-29 |
KR20140117578A (ko) | 2014-10-07 |
US10235220B2 (en) | 2019-03-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104094235A (zh) | 多线程计算 | |
US7979680B2 (en) | Multi-threaded parallel processor methods and apparatus | |
US10877766B2 (en) | Embedded scheduling of hardware resources for hardware acceleration | |
CN101320360B (zh) | 用于并行集成电路结构的消息排队系统和相关操作方法 | |
US10963299B2 (en) | Hardware accelerated dynamic work creation on a graphics processing unit | |
US9772879B2 (en) | System and method for isolating I/O execution via compiler and OS support | |
CN103262002A (zh) | 优化系统调用请求通信 | |
US20110050713A1 (en) | Hardware-Based Scheduling of GPU Work | |
CN103608776A (zh) | 异构型处理设备上的动态工作划分 | |
CN103262037A (zh) | 图形处理计算资源的可访问性 | |
US20110161965A1 (en) | Job allocation method and apparatus for a multi-core processor | |
CN103392171A (zh) | 来自用户模式的图形处理分派 | |
US10146575B2 (en) | Heterogeneous enqueuing and dequeuing mechanism for task scheduling | |
US9507633B2 (en) | Scheduling method and system | |
US10545890B2 (en) | Information processing device, information processing method, and program | |
CN103582877A (zh) | 计算机系统中断处理 | |
KR101377195B1 (ko) | 컴퓨터 마이크로 작업 | |
US9015719B2 (en) | Scheduling of tasks to be performed by a non-coherent device | |
US20240111578A1 (en) | Hierarchical work scheduling | |
WO2019188182A1 (ja) | プリフェッチコントローラ |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |