CN104375804A - 多线程执行处理器及其操作方法 - Google Patents
多线程执行处理器及其操作方法 Download PDFInfo
- Publication number
- CN104375804A CN104375804A CN201410379557.0A CN201410379557A CN104375804A CN 104375804 A CN104375804 A CN 104375804A CN 201410379557 A CN201410379557 A CN 201410379557A CN 104375804 A CN104375804 A CN 104375804A
- Authority
- CN
- China
- Prior art keywords
- thread
- execution
- processor
- instruction
- perform
- 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
- 238000011017 operating method Methods 0.000 title 1
- 238000000034 method Methods 0.000 claims description 177
- 238000012545 processing Methods 0.000 claims description 126
- 230000004044 response Effects 0.000 claims description 22
- 206010011469 Crying Diseases 0.000 claims description 4
- 238000010586 diagram Methods 0.000 description 57
- 230000006870 function Effects 0.000 description 11
- 230000003252 repetitive effect Effects 0.000 description 5
- 238000004364 calculation method Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- HPTJABJPZMULFH-UHFFFAOYSA-N 12-[(Cyclohexylcarbamoyl)amino]dodecanoic acid Chemical compound OC(=O)CCCCCCCCCCCNC(=O)NC1CCCCC1 HPTJABJPZMULFH-UHFFFAOYSA-N 0.000 description 2
- 230000000007 visual effect Effects 0.000 description 2
- 244000287680 Garcinia dulcis Species 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005265 energy consumption Methods 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 238000012958 reprocessing Methods 0.000 description 1
- 238000012827 research and development Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
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
-
- 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
-
- 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
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
- Advance Control (AREA)
- Debugging And Monitoring (AREA)
Abstract
提供了一种多线程执行处理器及其操作方法。多线程执行处理器包括:线程选择器,被配置为从用于执行程序代码的多个线程中选择第一线程;线程执行器,被配置为执行由线程选择器选择的第一线程,并在完成第一线程的执行之后执行由线程选择器从所述多个线程中选择的第二线程。
Description
本申请要求于2013年8月13日提交到韩国知识产权局的第10-2013-0096104号韩国专利申请的优先权,该申请的公开通过引用全部合并于此。
技术领域
与示例性实施例一致的设备和方法涉及多线程执行处理器及其操作方法。
背景技术
可以以顶点和像素为基本单元对图形进行处理,可彼此独立地执行这些单元的处理。因此,在图形处理单元(GPU)中,这些单元中的每个单元的处理可被认为是可被独立执行的线程。在并行处理算法方面已存在研究和发展,其中,并行处理算法用于在GPU的一个处理器核中同时执行这些多个线程。
另外,已提出通用计算图形处理单元(GPGPU),以允许GPU架构用于通用计算。在GPGPU中,应用于GPU的并行处理算法可用于处理传统上由中央处理单元(CPU)执行的应用的计算。GPGPU的示例是统一计算设备架构(CUDA),CUDA实现通过使用行业标准语言(诸如C编程语言)来编写在GPU中使用的并行处理算法。
已提出单指令多线程(SIMT)架构作为用于高效地执行多个线程的并行处理算法的示例。在SIMT架构中,在集成于一个处理核中的多个处理单元(PU)中同时处理多个线程的同一指令。另外,每个处理单元可顺序地处理两个或更多个线程的同一指令。因此,可通过使多个线程中的大多数线程可被同时执行来提高系统性能。可通过在处理单元中使用寄存器,以及通过复制用于线程执行的资源,来解决在各个处理单元(PU)中产生的线程切换开销,从而实现多个线程状态。
在由多个线程根据并行处理算法处理的程序代码中可包括一个或更多个分支分叉(divergence)和收敛(convergence)。在这种情况下,用于处理相应的程序代码的路径可与分叉和收敛的数量成比例地改变。即使在根据并行处理算法执行处理时,所有线程也无需遵循同一路径,而是多个线程中的每个线程可遵循自身的内部路径。在SIMT架构中多个线程遵循同一路径来处理程序代码的情况下,所有处理单元可同时处理可被同时执行的所有线程的同一指令,从而实现简单的控制流和处理单元的资源的高效使用,但是频繁的线程切换会导致开销。相比之下,在SIMT架构中多个线程遵循不同的路径来处理程序代码的情况下,遵循不同路径的所述线程中的每个线程具有明显多样化和复杂的控制流,在执行分支指令之后可能无法同时执行所有线程,使得处理单元的资源使用效率可能降低。
发明内容
根据示例性实施例的一方面,提供了一种多线程执行处理器,包括:线程选择器,被配置为从用于执行程序代码的多个线程中选择第一线程;线程执行器,被配置为执行由线程选择器选择的第一线程,并在完成第一线程的执行之后执行由线程选择器从所述多个线程中选择的第二线程。
多线程执行处理器还可包括:线程存储器,被配置为存储所述多个线程。
存储在线程存储器中的所述多个线程中的每个线程可处于初始状态和终止状态中的一个状态,其中,线程选择器还可被配置为:从所述多个线程中选择一个处于初始状态的线程。
线程存储器还可被配置为:使用轮叫方法从所述多个线程中选择处于初始状态的线程。
线程选择器还可被配置为:通过使用指示存储在线程存储器中的所述多个线程中的每个线程的状态的线程状态信息,从所述多个线程中选择处于初始状态的线程。
所述多个线程中的每个线程可被配置为遵循用于执行程序代码的多条执行路径中的任意一条执行路径。
可由与所述多条执行路径中的每条执行路径相应的程序计数器确定所述多条执行路径。
根据另一示例性实施例的一方面,提供了一种多线程执行处理器,包括:线程选择器,被配置为从用于执行程序代码的多个线程中选择第一线程;线程执行器,被配置为执行由线程选择器选择的第一线程;线程切换确定器,被配置为确定为执行第一线程而发出的指令是否为暂停指令,其中,线程执行器还被配置为:响应于由线程切换确定器确定在执行第一线程时发出的指令是暂停指令,执行到第二线程的线程切换,以执行第二线程,其中,由线程选择器从存储在线程存储器中的所述多个线程中选择第二线程。
多线程执行处理器还可包括:线程存储器,被配置为存储所述多个线程。
线程切换确定器还可被配置为:基于明确地标记在程序代码中的线程切换信息来确定发出的指令是否为暂停指令。
可在对程序代码进行编码时包括线程切换信息。
可由程序员在对程序代码进行编码时包括线程切换信息,或者在编码时根据特定算法自动包括线程切换信息。
存储在线程存储器中的所述多个线程中的每个线程可处于就绪状态、暂停状态和终止状态中的一个状态,其中,线程选择器还可被配置为:从所述多个线程中选择一个处于就绪状态的线程。
响应于线程执行器执行从第一线程到第二线程的线程切换,第一线程可变为暂停状态线程,其中,响应于线程执行器完成在线程切换之前发出的暂停指令的处理,第一线程可恢复为就绪状态线程。
线程选择器还可被配置为:通过使用指示存储在线程存储器中的所述多个线程中的每个线程的线程状态信息来从所述多个线程中选择就绪状态线程。
根据另一示例性实施例的一方面,提供了一种多线程执行处理器,包括:处理单元,被配置为执行多个线程,其中,所述多个线程被配置为执行程序代码,其中,处理单元通过执行所述多个线程中的一个线程,并随后执行线程切换以执行所述多个线程中的后续的另一线程,来顺序地执行所述多个线程。
多线程执行处理器还可包括:多个处理单元,其中,所述多个处理单元被配置为:通过在所述多个处理单元当中划分所述多个线程来执行所述多个线程。
所述多个处理单元中的每个处理单元还可被配置为使用内部的程序计数器。
根据另一示例性实施例的一方面,提供了一种多线程执行处理器,包括:处理单元,被配置为执行多个线程,其中,所述多个线程被配置为执行程序代码,其中,处理单元通过响应于在执行所述多个线程中的第一线程时发出的指令是暂停指令进行线程切换以执行第二线程,来顺序地执行所述多个线程。
处理单元还可被配置为:基于明确地标记在程序代码中的线程切换信息来确定发出的指令是否为暂停指令。
可由程序员在对程序代码进行编码时包括线程切换信息,或者根据特定算法自动包括线程切换信息。
所述多个线程中的每个线程可处于就绪状态、暂停状态和终止状态中的一个状态,其中,处理单元还可被配置为:从所述多个线程中选择一个处于就绪状态的线程,以执行选择的线程。
响应于线程切换,第一线程可变为暂停状态线程,其中,响应于完成暂停指令的处理,第一线程可恢复为就绪状态线程。
多线程执行处理器还可包括多个处理单元,其中,所述多个处理单元中的每个处理单元被配置为使用程序计数器,所述程序计数器在用于执行程序代码的多条执行路径当中指定任意一条执行路径。
根据另一示例性实施例的一方面,提供了一种操作用于执多个线程的多线程执行处理器的方法,其中,所述多个线程行用于执行程序代码,所述方法包括:执行所述多个线程中的第一线程,并执行线程切换以执行所述多个线程中的另一线程,其中,所述多个线程被顺序地执行,直到所述多个线程的执行完成为止。
根据另一示例性实施例的一方面,提供了一种操作用于执行多个线程的多线程执行处理器的方法,其中,所述多个线程用于执行程序代码,所述方法包括:当执行所述多个线程中的第一线程时,使用多线程执行处理器确定为执行而发出的指令是否为暂停指令;响应于确定发出的指令不是暂停指令,使用多线程执行处理器执行第一线程,响应于确定发出的指令是暂停指令,使用多线程执行处理器执行线程切换以执行所述多个线程中的第二线程。
可通过线程切换来顺序地执行所述多个线程,直到所述多个线程的执行完成为止。
用于确定发出的指令是否为暂停指令的线程切换信息可被明确地标记在程序代码中。
附图说明
通过下面结合附图的对示例性实施例的描述,以上和/或其它方面将变得清楚且更容易理解,其中:
图1是示出根据示例性实施例的多线程执行处理器的配置的框图;
图2是示出根据另一示例性实施例的多线程执行处理器的配置的框图;
图3是示意性地示出在多线程执行处理器中线程可具有的状态和状态转换的示例的示图;
图4是示出根据示例性实施例的多线程执行处理器的操作方法的流程图;
图5是示出根据另一示例性实施例的多线程执行处理器的操作方法的流程图;
图6是示出根据另一示例性实施例的多线程执行处理器的操作方法的流程图;
图7是示出根据另一示例性实施例的多线程执行处理器的操作方法的流程图;
图8A是示出在没有明确地标记暂停指令(passed instruction)的情况下的示例程序代码的示图;
图8B是示出在明确地标记暂停指令的情况下的示例程序代码的另一示例的示图;
图8C是示出在图8A和图8B中示出的示例程序代码的控制流图的示图;
图9A是示出使用图8A中的示例程序代码在一个处理单元中执行遵循同一执行路径的多个线程的示图;
图9B和图9C是示出使用图8A中的示例程序代码在一个处理单元中执行遵循不同执行路径的多个线程的示例的示图;
图9D是示出根据示例性实施例的使用图8A中的示例程序代码在一个处理单元中执行遵循同一执行路径的多个线程的示图;
图9E是示出根据示例性实施例的使用图8A中的示例程序代码在一个处理单元中执行遵循不同执行路径的多个线程的示图;
图10A是示出使用图8A中的示例程序代码在两个处理单元中执行遵循同一执行路径的多个线程的示图;
图10B和图10C是示出使用图8A中的示例程序代码在两个处理单元中执行遵循不同执行路径的多个线程的示图;
图10D是示出根据示例性实施例的使用图8A中的示例程序代码在两个处理单元中执行遵循同一执行路径的多个线程的示图;
图10E是示出根据示例性实施例的使用图8A中的示例程序代码在两个处理单元中执行遵循不同执行路径的多个线程的示图;
图11A是示出根据另一示例性实施例使用图8A中的示例程序代码在一个处理单元中执行遵循不同执行路径的多个线程的示图;
图11B是示出根据另一示例性实施例的使用图8A中的示例程序代码在两个处理单元中执行遵循不同执行路径的多个线程的示图。
具体实施方式
提供下面的具体实施方式来帮助读者对在此描述的方法、设备和/或系统获得全面了解。因此,将向本领域普通技术人员建议在此描述的方法、设备和/或系统的各种变化、修改和等同物。描述的处理步骤和/或操作的进行是示例;然而,除了必须按特定顺序发生的步骤和/或操作之外,步骤和/或操作的顺序不限于在此阐述的顺序,并且可如本领域所公知地改变。另外,为了更加清楚和简明,可省略对公知功能和构造的相应描述。
另外,在下文中将参照附图更全面地描述示例性实施例。然而,可按照许多不同的形式来实施示例性实施例,示例性实施例不应被解释为限于在此阐述的实施例。提供这些实施例以使本公开将是彻底且完全的,并将全面地向本领域普通技术人员传达示例性实施例。范围不由具体实施方式限定,而是由权利要求限定。相同的附图标号始终表示相同的元件。
贯穿附图和具体实施方式,除非另有描述,否则相同的附图标号将被理解为指示相同的元件、特征和结构。为了清楚、示出和方便,可夸大这些元件的相对大小和描绘。
在下文中,将参照附图详细描述多线程执行处理器及其操作方法。提供以下描述来帮助读者对在此描述的方法、设备和/或系统获得全面了解。因此,将向本领域普通技术人员建议在此描述的方法、设备和/或系统的各种变化、修改和等同物。另外,为了更加清楚和简明,可省略对公知功能和构造的描述。
在实施例中使用的术语“……单元”指示包括软件或硬件的组件(诸如现场可编程门阵列(FPGA)或专用集成电路(ASIC)),并且“……单元”执行特定功能。然而,“……单元”不限于软件或硬件。“……单元”可被配置为包括在可寻址存储介质中,或者被配置为再现一个或更多个处理器。因此,例如,“……单元”包括组件(诸如软件组件、面向对象的软件组件、类组件和任务组件)、处理、功能、属性、程序、子例程、程序代码段、驱动器、固件、微代码、电路、数据、数据库、数据结构、表、阵列和变量。在组件和“……单元”内提供的功能可被组合为更少数量的组件和“……单元”,或者被进一步划分为另外的组件和“……单元”。
虽然在此使用的术语是目前广泛使用并通过考虑其功能而选择的通用术语,但是术语的含义可根据本领域技术人员的意图、判例或新技术的出现而改变。另外,申请人可随机选择一些特定术语,在这种情况下,可在示例性实施例的描述中具体定义术语的含义。因此,术语不应该由自身的简单名称定义,而是基于自身的含义和示例性实施例的描述的上下文而定义。当在此使用诸如“中的至少一个”的表达且所述表达位于一列元素之后时,所述表达修饰整列元素而不修饰所述列中的单个元素。
将理解当在本说明书中使用术语“包括”、“包含”、“包括……的”和/或“包含……的”时,所述术语指定声明的元件和/或组件的存在,但并不排除存在或添加一个或更多个其它元件和/或组件。当在此使用术语“模块”时,所述术语指示可执行至少一个功能或操作的单元,并可利用硬件、软件或硬件和软件的组合中的任何形式来实现。
图1是示出根据示例性实施例的多线程执行处理器的配置的框图。参照图1,多线程执行处理器10包括线程存储器12、线程选择器14和线程执行器16。根据功能对在图1中示出的处理器10的配置进行逻辑上的划分,并可以以物理方式单独实现每个组成元件,或者可集成两个或更多个组成元件以实施为一个元件。
多线程执行处理器10涉及执行用于执行同一程序代码的多个线程的处理器。用于处理同一程序代码的多个线程称为“多线程”。换句话说,多线程可被认为是处理同一程序代码的线程池。在程序代码包括一个或更多个分支分叉和收敛的情况下,根据同一执行路径或不同执行路径来处理多线程(参见图8C)。另外,可由与每个执行路径相应的程序计数器(PC)来确定多个不同的执行路径。
多线程执行处理器10可以是中央处理单元(CPU)处理器、GPU处理器、GPGPU处理器等,但是对于多线程执行处理器的类型没有特定限制。多线程执行处理器10可包括一个或更多个处理器核,每个处理器核可包括一个或更多个处理单元(PU)。多线程可全部在一个PU中被处理,或者可通过分布于多个PU中而被同时处理。
另外,多线程执行处理器10可用于特定计算系统,例如,个人计算机、娱乐系统、媒体系统、游戏系统、通信装置、个人数字助理(PDA)或使用一个或更多个处理器的特定系统。除了处理器以外,计算系统通常包括输入和输出模块等,这些组成元件可通过总线连接。
多线程执行处理器10可包括一个或更多个处理器核。另外,一个处理器核可包括一个或多个处理单元(PU)。多个处理单元(PU)可全部使用同一程序计数器(PC),或者每个PU可使用自身的内部程序计数器(PC)。当所有处理单元使用同一程序计数器时,多个处理单元(PU)执行同一执行路径的线程,而当每个处理单元使用内部程序计数器(PC)时,多个处理单元分别执行与每个程序计数器(PC)相应的执行路径的线程,所述执行路径可以不相同。另外,一个处理单元以在完成一个线程之后执行另一线程的方式执行多个线程。
线程存储器12被配置为存储在多线程执行处理器10中执行的多个线程。存储在线程存储器12中的多个线程可以是稍后将在线程执行器16中执行的线程和/或已经在线程执行器16中执行的线程。根据另一示例性实施例,将执行的线程和已经执行的线程可被存储在别处。例如,所述线程可被存储在本地高速缓存存储器、本地存储单元中的至少一个中,或者被存储在诸如硬盘的外部存储位置或通过网络连接存储在别处。稍后将在线程执行器16中执行的线程可称为“初始状态”线程,已经在线程执行器16中执行的线程可称为“终止状态”线程。根据示例性实施例,“初始状态”线程包括处于一个指令都未被处理的状态的线程。
存储在线程存储器12中的多个线程可包括一个或更多个多线程。如上所述,多线程是执行同一程序代码的线程池。这意味着多线程被配置为处理具有同一特性的多个数据,诸如构成图形的多个顶点或像素,但不限于此。另外,每个多线程的执行路径(一系列指令)可全部相同,或者可彼此不同。构成多线程的多个线程中的每个线程可彼此独立地被执行,或者可同时被执行。
根据示例性实施例,可通过算法来确定将执行的线程和线程组的选择和/或确定。根据另一示例性实施例,存在这样的情况:多个算法可执行相同的操作但彼此独立,然而,所述多个算法仍然能够成为线程。例如,图像中的每个像素的处理可使用每个像素的独立的图像处理算法。在三维(3D)图形处理实施例中,另一示例包括顶点和像素渲染的处理。
线程选择器14被配置为从存储在线程存储器12中的多个线程中选择将在线程执行器16中执行的任意一个线程。在这种情况下,线程选择器14可选择“初始状态”线程作为将在线程执行器16中执行的线程。执行已经在线程执行器16中完成的“终止状态”线程不被线程选择器14选择。当存在多个“初始状态”线程时,线程选择器14顺序地选择多个线程,其中,对于用于选择将在线程执行器16中执行的线程的算法没有特定限制。例如,线程选择器14可使用轮叫(round-robin)方法从多个线程中顺序地选择将在线程执行器16中执行的线程。根据示例性实施例,线程选择器14可通过使用指示存储在线程存储器12中的多个线程的每个状态的信息(即,线程状态信息)来选择将在线程执行器16中执行的线程。可通过将线程状态信息记录在线程选择器14的特定存储单元中或者将线程状态信息记录在单独的存储单元中来存储线程状态信息。
线程状态信息可由线程选择器14产生并管理,对于线程状态信息的格式没有特定限制。为此,线程选择器14可持续地监视存储在线程存储器12中的线程的状态。根据示例性实施例,线程选择器14可从线程执行器16接收关于执行已经完成的线程的信息,所述信息可反映在线程状态信息中。
线程执行器16被配置为执行由线程选择器14选择的线程。更具体地,线程执行器16执行由线程选择器14选择的“初始状态”线程,并执行从线程的初始指令到末尾指令的处理。换句话说,线程执行器16在不中途进行线程切换的情况下执行线程,直到完成线程的执行为止。结果,线程执行器16按照线程选择器14选择线程的顺序完成“初始状态”线程的执行,使得所述线程变为“终止状态”线程,“终止状态”线程随后被存储在线程存储器12中。另外,根据示例性实施例,线程执行器16还可将指示完成执行线程的信息发送到线程选择器14。
以上描述的线程选择器14和线程执行器16的功能涉及多线程执行处理器10包括一个处理单元(PU)的情况。在多线程执行处理器10包括多个处理单元(PU)的情况下,线程选择器14可从“初始状态”线程中选择与处理单元(PU)的数量相应的多个线程。另外,线程执行器16可在每个处理单元中独立地同时执行由线程选择器14选择的多个线程中的每个线程。
如上所述,根据示例性实施例的多线程执行处理器10选择“初始状态”线程,并在每个处理单元(PU)中执行所述线程,直到所述线程变为“终止状态”为止。另外,仅当完成任意一个线程的执行之后,才选择将执行的另一线程。通过重复这样的选择和执行,可执行线程直到构成多线程的所有线程变为终止状态为止。结果,多线程执行处理器10(更具体地,处理单元(PU))始终在执行任意一个线程,从而实现资源的高效使用和硬件的简单配置,而不会因线程切换而导致任何负载负担。另外,即使当控制流由于多线程的不同路径而复杂时,也可高效且迅速地执行所有线程。
图2是示出根据另一示例性实施例的多线程执行处理器的配置的框图。参照图2,多线程执行处理器20包括线程存储器22、线程选择器24、线程执行器26和线程切换确定器28。根据功能对在图2中示出的处理器20的配置进行逻辑上的划分,并可以以物理方式将每个组成元件实现为单独元件,或者集成两个或更多个组成元件以实施为一个元件。
如同以上参照图1提及的多线程执行处理器10,多线程执行处理器20涉及执行用于执行同一程序代码的多个线程的处理器。多线程执行处理器20可以是CPU处理器、GPU处理器、GPGPU处理器等,但是对于多线程执行处理器的类型没有特定限制。多线程执行处理器20可包括一个或更多个处理器核,每个处理器核可包括一个或更多个处理单元(PU)。多线程可全部在一个PU中被处理,或者可通过分布于多个PU中而被同时处理。另外,多线程执行处理器20可用于特定计算系统,例如,个人计算机、娱乐系统、媒体系统、游戏系统、通信装置、个人数字助理(PDA)或使用一个或更多个处理器的特定系统。
多线程执行处理器20可包括一个或更多个处理器核,一个处理器核可包括一个或多个处理单元。一个处理单元以这样的方式执行多个线程:在由在处理器核中操作的多个线程执行确定的代码区域之后,执行线程切换以执行多个线程。这意味着:通过进一步扩展由单指令多线程(SIMT)架构限制的指令,一个线程基于程序结构以实现高效操作的方式顺序地执行多个指令,而不考虑分支分叉和收敛,然后线程切换被执行。在这种情况下,线程切换信息可由程序员直接指定,或者可由编译器或类似形式的软件自动产生。
线程存储器22被配置为存储在多线程执行处理器20中执行的多个线程。存储在线程存储器22中的多个线程可包括一个或更多个多线程。另外,每个多线程的路径(一系列指令)可全部相同,或者可彼此不同。构成多线程的多个线程中的每个线程可彼此独立地被执行,或者可同时被执行。存储在线程存储器22中的多个线程可以是“就绪状态”、“终止状态”或“暂停状态”,将参照图3更详细地对此进行描述。
图3是示出在多线程执行处理器中线程可具有的状态和状态转换的示例的示意图。参照图3,线程可具有“就绪状态32”、“暂停状态34”或“终止状态36”中的任意一个状态,其中,“终止状态36”线程指示其执行已经在线程执行器16中完成的线程。
“就绪状态32”线程指示其执行在线程执行器26中将要开始或将要恢复但尚未完成的线程。换句话说,“就绪状态32”线程指示这样的状态:线程处于能够被执行的状态。“就绪状态32”线程包括:指令尚未被执行的线程(即,线程被产生时的初始状态线程(参见图1)),以及在执行一些指令之后当执行特定指令时处理被临时挂起但当前准备好继续处理的线程。因此,“就绪状态”线程包括:如图1中所示的“初始状态”线程,以及一些指令被处理但不处于“终止状态”或“暂停状态34”的线程。可在线程执行器26中执行“就绪状态32”线程,并且如果在执行期间处理了暂停指令,则可将“就绪状态32”线程转变为“暂停状态34”,然后可停止所述执行。另外,当处理了所有指令而完成执行时,线程状态可转变为“终止状态36”。
“暂停状态34”线程指示在线程执行器26中在执行特定指令时因线程切换而使得执行被临时挂起的线程。具体地,“暂停状态34”指示这样的状态:在执行线程时发生到另一线程的线程切换,而对在线程切换之前发出的指令的处理尚未完成。因此,直到完成对在线程切换之前发出的指令的处理为止,“暂停状态34”线程才可被恢复。另外,在完成对在线程切换之前发出的指令的处理之后,相应的线程从“暂停状态34”重新转变为“就绪状态32”。
换句话说,根据另一示例性实施例,线程可置于的状态可取决于线程已承受的处理量和线程能够承受的处理量。具体地,就绪状态可被理解为这样的状态:线程的指令尚未被执行或者线程的一些指令已被执行,但更重要的是,线程准备好/能够由处理器继续执行。终止状态是这样的状态:线程的所有指令都已被执行并因而完成。最后,暂停状态可被理解为这样的状态:线程已经执行了一些指令,但仍有其它指令待处理。另外,与就绪状态相反,处于暂停状态的线程当前无法被处理器处理。这会是因为线程中的下一项所需的指令当前没有正被处理器执行。
另外,根据另一示例性实施例,如果线程被选择为将执行的线程,但是该线程所需的程序的指令已被处理器处理并暂停,则可将该线程置于暂停状态,直到再次达到程序中的该点的下一机会为止,然后可将该线程置于就绪状态,使得该线程可被选择和执行。一旦任意线程完成,则所述线程被移动到指示所述线程完成的终止状态。简单地说,中途通过处理周期选择的线程必须等待,直到所需的指令重新可用为止。
另外,根据另一示例性实施例,由于处理器仍在处理之前发出的指令,因此线程可被置于暂停状态,到达当前未被处理的线程中的任意指令执行请求意味着该线程无法进行进一步的处理。因此,如果线程位于当前未被处理的指令,则该线程必须被停止。可切换到处于就绪状态的另一线程。然后,原有线程状态可从“就绪”改变为“暂停”。该线程保持处于该状态,直到处理器改变并开始处理该线程所需的指令为止,此时,可再次开始处理该线程,因而线程的状态可从“暂停”改变回“就绪”。
另外,根据另一示例性实施例,如果处理器切换指令并因而使得线程未完成且无法继续进行,则该线程可进入“暂停状态”。在这种情况下,改变的是处理器,而不是如上所述的线程切换指令。效果是相同的,换句话说,线程的状态被设置为“暂停”,直到处理器和线程指令允许线程再次被处理器处理,从而使得线程被置于“就绪”状态为止。
在产生最初处于就绪状态32的线程之后,可将线程存储在线程存储器22中。就绪状态线程通过在线程执行器26中被执行而变为暂停状态34或终止状态36。在终止状态36下,就绪状态的所有指令在线程执行器26中被处理,从而终止相应的线程的执行。相比之下,在暂停状态34中,在顺序地处理就绪状态线程的指令的过程期间,在发出特定指令(在下文中,“暂停指令”)的情况下发生线程切换,使得不再在线程执行器26中处理(发出)后续指令。在这种情况下,可发出由线程选择器24选择的另一线程的指令,以在线程处理器26中处理所述另一线程的指令。然而,由于在线程切换之前已经在线程执行器26中发出了暂停指令,因此对暂停指令的处理完成。另外,当暂停指令的处理完成时,相应的线程从暂停状态34返回就绪状态32。线程选择器24稍后可再次选择返回就绪状态32的线程,以在线程执行器36中执行该线程。
再次参照图2,线程选择器24被配置为从存储在线程存储器22中的多个线程中选择将在线程执行器26中执行的任意一个线程。在这种情况下,线程选择器24可从存储在线程存储器22中的线程中选择“就绪状态”线程。由于通过线程切换挂起了“暂停状态”线程的执行,并且“终止状态”线程的执行已经在线程执行器26中完成,因此线程选择器24不选择“暂停状态”线程或“终止状态”线程。
当存在多个“就绪状态”线程时,线程选择器24可顺序地选择多个线程,其中,对于用于选择将在线程执行器26中执行的线程的算法没有特定限制。例如,线程选择器24可使用轮叫方法从多个线程中选择将在线程执行器26中执行的线程。然而,如果“就绪状态”线程中存在指令尚未开始被处理的线程以及指令已被部分处理的线程(即,从图3中的暂停状态34返回就绪状态35的线程)的组合,则可优先选择前一种线程,但这仅仅是示例性实施例。
线程选择器24可通过使用指示存储在线程存储器22中的多个线程的每个状态的信息(例如,线程状态信息)来选择将在线程执行器26中执行的线程。可通过将线程状态信息记录在构成线程选择器24的特定存储单元中来存储线程状态信息,或者通过将线程状态信息记录在单独的存储单元中来存储线程状态信息。
线程状态信息可由线程选择器24产生并管理,对于线程状态信息的格式没有特定限制。为此,线程选择器24可持续地监视存储在线程存储器22中的线程的状态。
根据示例性实施例,线程选择器24可从线程执行器26接收关于执行已经完成的线程的信息和/或关于在线程切换之后变为暂停状态线程的线程的信息,所述信息可反映在线程状态信息中。
线程执行器26被配置为执行由线程选择器24选择的线程。更具体地,线程执行器26执行由线程选择器24选择的“就绪状态”线程。线程执行器26从初始指令起按照顺序次序执行一个指令都未被执行的就绪状态线程。另外,关于执行已通过线程切换而被挂起的就绪状态线程,线程执行器26从暂停指令之后的指令(即,处于执行被挂起的点的指令)起按照顺序次序恢复就绪状态线程的执行。
另外,当在执行线程的同时处理暂停指令时,线程执行器26挂起该线程的执行。在这种情况下,执行被挂起的线程是被置于“暂停状态34”的线程(参见图3),如上所述,在线程执行器26中继续处理“暂停状态”线程的发出的指令。将“暂停状态”线程再次存储在线程存储器22中,在完成发出的指令的处理之后,可将该线程重新置于“就绪状态”。另外,根据示例性实施例,线程执行器26可将指示线程的执行被挂起的信息(例如,指示转变为暂停状态的信息)或指示发出的指令的处理已完成的信息(例如,指示从暂停状态转变为就绪状态的信息)发送到线程选择器24。根据示例性实施例,线程切换确定器28可发送指示线程的执行已被挂起的信息(即,指示转变为暂停状态的信息)。
当执行线程时,如果线程执行器26在不执行暂停指令的情况下执行所有指令,则线程被移动到“终止状态36”(参见图3)。将“终止状态”线程再次存储在线程存储器22中。根据示例性实施例,线程执行器26可将指示线程的执行已完成的信息发送到线程选择器24。
线程切换确定器28可被配置为确定当前排队等待处理的线程指令是否为暂停指令。例如,线程切换确定器28可逐一对线程选择器24选择的线程的指令进行提取和解码,以便在线程执行器26中执行所述指令,同时确定所述指令是否为暂停指令。如果确定指令不是暂停指令,则在线程执行器26中处理该指令,并且线程切换确定器28继续确定后续指令是否为暂停指令。与此相反,如果确定指令是暂停指令,则在线程执行器26中处理该指令,但是此后,线程选择器24选择将在线程执行器26中执行的另一线程。另外,线程切换确定器28可将确定结果(例如,指示提取并解码的指令是否为暂停指令的信息)发送到线程选择器24。根据示例性实施例,可存在用于使用线程切换确定器28确定当前排队等待处理的指令是否为暂停指令的各种方法。例如,线程切换确定器28可通过使用线程切换信息来进行确定,其中,线程切换信息明确指示指令是暂停指令(参见由图8B中的附图标号42的“*”所标记的区段)。为此,当编写程序代码(例如,指令集架构(ISA)的编码)时,可执行编码以包括线程切换信息。可由程序员任意地包括线程切换信息,或者可在编码时根据预定算法来自动包括线程切换信息。
可选地,即使关于暂停指令的信息未被明确地标记,线程切换确定器28也可确定指令是否为暂停指令。例如,线程切换确定器28可具有关于暂停指令的信息,并随后可通过使用该信息来确定提取并解码的指令是否为暂停指令。
在另一示例中,线程切换确定器28可基于指令的延时来确定提取并解码的指令是否为暂停指令,其中,线程切换确定器28可仅将延时大于预定值的指令确定为暂停指令。如上所述,如果具有相对大的延时的指令被确定为暂停指令,则在指令被处理之后发生线程切换,使得延时隐藏是可能的。使用指令的延时的方法不限于此,而是可通用于上述所有示例(包括使用关于暂停指令的明确信息的示例)。
如上所述,多线程执行处理器20执行从就绪状态线程中选择的线程。在这种情况下,如果选择的线程是首次选择的线程,则从初始指令起执行处理。与此相反,如果选择的线程是在处于暂停状态之后恢复为就绪状态的线程,则从挂起点(暂停指令之后的指令)起执行处理。另外,如果在执行线程时处理的指令是暂停指令,则多线程执行处理器20执行线程切换,并选择另一线程以开始或恢复该线程的执行。在这种情况下,在线程切换之前执行的线程变为暂停状态线程,并在完成暂停指令的处理之后返回就绪状态。随后,当在执行线程的同时不再处理暂停指令时,线程的执行完成,并变为终止状态线程。相比之下,如果暂停指令在完成线程的执行之前被处理,则再次执行线程切换,并且这样的处理继续进行,直到存储的指令全部变为终止状态为止。
线程选择器24、线程执行器26和线程切换确定器28的每个功能涉及多线程执行处理器20包括一个处理单元(PU)的情况。在多线程执行处理器20包括多个处理单元(PU)的情况下,线程选择器24可从“初始状态”线程中选择与处理单元(PU)的数量相应的多个线程。另外,线程执行器26可在每个处理单元(PU)中独立地同时执行由线程选择器24选择的多个线程中的每个线程。另外,还可在每个处理单元(PU)中分别确定是否在线程执行器26执行选择的线程时执行线程切换。
如上所述,多线程执行处理器20选择“就绪状态”线程,并在每个处理单元(PU)中执行所述“就绪状态”线程。通过重复这样的选择和执行,可执行线程直到构成多线程的所有线程到达终止状态为止。结果,多线程执行处理器20(更具体地,处理单元(PU))始终在执行任意一个线程,从而实现资源的高效使用和简单的硬件配置,而不会因线程切换而导致任何负载负担。另外,即使在控制流由于多线程的不同路径而复杂的情况下,也可高效且迅速地执行所有线程。
图4是示出根据示例性实施例的多线程执行处理器的操作方法(操作多线程执行处理器的示例方法)的流程图。在图4中示出的流程图可以是操作在图1中示出的多线程执行处理器10的方法。因此,将在下文中简要地描述所述操作方法,以避免重复。另外,在此未详细描述的事宜可与以上参照图1描述的事宜相应。
参照图1和图4,多线程执行处理器10从“就绪状态”线程中选择一个线程(S101)。如上所述,多线程执行处理器10的线程存储器12可存储就绪状态线程和/或终止状态线程,线程选择器14可从就绪状态线程中选择任意一个线程。另外,多线程执行处理器10的线程执行器16执行选择的线程(S102)。随后,确定在操作S102执行的线程的执行是否已完成(S103)。当确定所述执行尚未完成时,继续执行选择的线程。当S103的确定结果显示在操作S102执行的线程的执行已完成时,确定在线程存储器12中是否存在就绪状态线程(S104)。当操作S104的确定结果显示在线程存储器12中存在另外的初始状态线程时,重复上述操作S101到S104。相比之下,当S104的确定结果显示在线程存储器12中没有初始状态线程而只有终止状态线程时,终止相应的多线程的执行。
图5是示出根据另一示例性实施例的多线程执行处理器的操作方法的流程图。在图5中示出的流程图可以是在图2中示出的多线程执行处理器20的操作方法。因此,将在下文中简要地描述所述操作方法,以避免重复。另外,在此未详细描述的事宜可与以上参照图2描述的事宜相应。
参照图2和图5,多线程执行处理器20从就绪状态线程中选择一个线程(S111)。如上所述,多线程执行处理器20的线程存储器22可存储就绪状态线程、暂停状态线程和/或终止状态线程,线程选择器24可选择就绪状态线程中的任意一个就绪状态线程。另外,多线程执行处理器20的线程执行器26执行选择的线程(S112)。随后,确定在操作S112执行的线程的执行是否已完成(S113)。当确定选择的线程的执行尚未完成时,线程切换确定器28确定是否执行线程切换(S114)。如果确定进行线程切换,则将正被执行的线程转变为“暂停状态”并挂起进一步的执行(S115)。这可由当前正被处理的指令是否为暂停指令来确定。当确定选择的线程的执行完成时,线程切换确定器28确定在线程存储器22中是否存在另外的就绪状态线程(S116)。当基于操作S114的确定结果而不执行线程切换时,线程执行器26继续执行选择的线程,然而,当基于操作S114的确定结果而执行线程切换时,在操作S115,将正被执行的线程转变为暂停状态并挂起该线程的执行。
此后,当在操作S113确定线程的执行完成时,或者当在操作S114和操作S115执行线程切换时,确定在线程存储器22中是否存在另外的就绪状态线程(S116)。当在线程存储器22中存在另外的就绪状态线程时,从操作S111开始重复操作。相比之下,当在线程存储器22中没有另外的就绪状态线程时,确定在线程存储器22中是否存在暂停状态线程(S117)。当在操作S117确定在线程存储器22中没有暂停状态线程而只有终止状态线程时,终止多线程的执行,而当确定存在暂停状态线程时,在等待直到暂停状态线程被转变为就绪状态为止之后,从操作S111开始重复操作。
图6是示出根据另一示例性实施例的多线程执行处理器的操作方法的流程图。在图6中示出的流程图可以是示出在图1中示出的多线程执行处理器10、在图2中示出的多线程执行处理器20恢复一个线程的执行的流程图。如上所述,多线程执行处理器10、多线程执行处理器20存储并管理将在每个处理单元(PU)中执行的多线程,并从所述多线程中选择将在给定时间内执行的一个线程,以在处理单元(PU)中执行选择的线程。
另外,在图6中示出的流程图可与以上参照图4或图5所描述的操作方法大体相同。图6中的流程图与图4或图5中的流程图之间的差异产生于不同的视角,而实质彼此相似。因此,在此未详细描述的事宜可与以上参照图4或图5描述的事宜相应。
参照图6,多线程执行处理器确定构成多线程的多个线程是否全部处于终止状态(S121)。当确定所有线程都是终止状态线程(所有线程的执行已正常完成)时,多线程执行处理器结束多线程的执行。相比之下,当至少一个线程不处于终止状态时,确定是否存在就绪状态线程(包括图1中的初始状态线程;在下文中同样的描述将适用于示例性实施例)(S122)。当确定没有就绪状态线程时,在等待就绪状态线程之后重复操作S122(S123)。相比之下,当在操作S122存在至少一个就绪状态线程时,多线程执行处理器从就绪状态线程中选择至少一个线程,并执行线程切换以执行该线程(S124)。在图7中示出执行选择的线程的特定示例,以下将对此进行描述。另外,当选择的线程的执行被挂起时,多线程执行处理器从操作S121开始重复操作。
图7是示出根据另一示例性实施例的多线程执行处理器的操作方法的流程图。在图7中示出的流程图可以是在图1中示出的多线程执行处理器10、在图2中示出的多线程执行处理器20操作方法,但不限于此。另外,在图7中示出的流程图可与以上参照图4或图5描述的操作方法相似。然而,在图7中示出的流程图可以在以下方面与图4或图5中的流程图不同:在图7中示出的流程图可以是从在多线程执行处理器中执行和管理特定线程的视角描述的流程图。因此,在此未详细描述的事宜可与以上参照图4或图5描述的事宜相应。
参照图7,多线程执行处理器通过发出正被执行的线程的第i个指令来执行处理(S131)。正被执行的线程可包括n(n是2或大于2的整数)个指令,其中,i是从1到n的任意整数。另外,当完成第i个指令的处理时,确定线程的执行是否完成(S132)。当确定线程的执行尚未完成时,确定处理的第i个指令是否为暂停指令(S133)。当确定第i个指令不是暂停指令时,i的值增大1(S134),以从操作S131开始重复操作。相比之下,当确定第i个指令是暂停指令时,挂起该线程的执行,并将该线程作为暂停状态线程而进行管理(S135)。当在操作S132确定线程的执行已完成时,将执行已完成的线程作为终止状态线程而进行管理(S136)。
在下文中,将通过使用示例程序代码并通过将根据示例性实施例的多线程执行处理器的操作方法与根据SIMT架构的操作方法进行比较,来描述多线程执行处理器的操作方法。在下文中,虽然使用特定程序代码进行描述,但是对本领域普通技术人员而言这显然只是示例性的。上述示例性实施例还可适用于使用与以上示例程序代码不同的程序代码的情况。
图8A和图8B分别是示出示例程序代码的示例的示图,其中,图8A是在程序代码中没有明确地标记线程切换信息的情况,而图8B是在程序代码的特定指令中明确地标记线程切换信息的情况。这样的特定指令可被认为是暂停指令。在图8A和图8B的左列是程序计数器(PC),在图8A和图8B的右列是每个PC中的指令。另外,如图8A和图8B的右列所示,程序代码可被认为是基于流控制的一个或更多个指令(L0到L9)的组。在图8B中,装载字(LDW)指令被全部标记为暂停指令,但是这仅仅是示例性的。如上所述,用于指示这样的暂停指令的标记(线程切换信息)可由程序员手动添加,或者可由特定软件或硬件自动添加。
在下文中,将使用图8A中的示例程序代码来描述图4中的多线程执行处理器的操作方法,并将使用图8B中的示例程序代码来描述图5中的多线程执行处理器的操作方法。如上所述,在根据内部算法等在特定指令(暂停指令)下发生线程切换的情况下,虽然在图8A中的示例程序代码中没有明确地标记线程切换信息,但是也可根据图5中的多线程执行处理器的操作方法来执行处理。
图8C是示出在图8A和图8B中示出的示例程序代码的控制流图(CFG)的示图。为了方便示出,在图8B中示出的线程切换信息不在图8C中示出。参照图8C,当示例程序代码包括两个分支时,可理解为:可通过对所述两个分支进行比较来经由四条路径中的一条路径处理示例程序代码。所述四条路径如下:
路径P0:L0→L1→L2→L4→L9
路径P1:L0→L1→L3→L4→L9
路径P2:L0→L5→L6→L8→L9
路径P3:L0→L5→L7→L8→L9
图9A、图9B、图9C、图9D和图9E是示出均具有一个处理单元(PU)的多线程执行处理器执行图8A中的示例程序代码的示图,其中,为了方便,图9B和图9C中的示图是被划分的两个示图。图9A到图9E是在一个处理单元(PU)执行8个线程的情况下的示图,其中,图9A、图9B和图9C示出根据SIMT架构的多线程执行处理器的执行,图9D和图9E示出根据在图1中示出的示例性实施例的多线程执行处理器的执行。另外,图9A和图9D是在处理单元(PU)中执行的8个线程(T0到T7)全部遵循同一路径(即,仅路径P0)的情况下的示图。图9B、图9C和图9E是在8个线程(T0到T7)遵循四个不同路径(P0到P3)的情况下的示图,其中,线程T0和T1遵循路径P0,线程T2和T3遵循路径P1,线程T4和T5遵循路径P2,线程T6和T7遵循路径P3。
如在图9A、图9B和图9C中可见,在现有技术SIMT架构中,在同一程序计数器(PC)中读取的指令可由所有线程同时处理。例如,如果线程计数器具有0x00地址,则由所有线程(T0到T7)处理在内存中读取的“add”指令,以进行到下一程序计数器。在图9A、图9B和图9C中,以粗线示出程序计数器(PC)改变的点。在该执行方法中,隐含最多可发生8次线程切换以执行一个指令。
参照图9A,在所有线程(T0到T7)遵循同一路径的情况下,在每个程序计数器(PC)中获得的指令可由所有线程处理。结果,由于没有指令未在每个程序计数器(PC)中被处理的线程,因此会100%地使用处理资源。因此,在所有线程遵循同一路径的情况下,根据SIMT架构的多线程执行处理器在资源使用方面具有高效性。
相比之下,如图9B和图9C中所示,在线程(T0到T7)遵循不同的路径的情况下,一些线程的指令可能没有在特定程序计数器(PC)中被处理,这是因为在SIMT架构中在同一程序计数器(PC)中获得的指令将会由所有线程处理,但是在某些情况下,这些指令是不应按照一些线程的控制路径被执行的指令。例如,0x03地址的LDW指令应当由线程T0、T1、T2和T3处理,而不应由剩余线程T4、T5、T6和T7(在图9B和图9C中以斜线示出的区域)处理。结果,一些程序计数器(PC)中的指令不由一些线程处理,导致处理资源的使用低于100%。因此,在根据现有技术SIMT架构的多线程执行处理器中,当线程遵循不同路径时,资源的使用效率可能较低。
相比之下,如在图9D和图9E中可见,在根据示例性实施例的多线程执行处理器的操作方法中,在完成选择的任意一个线程的线程执行之后,执行后续线程,而不考虑所有线程(T0到T7)如在图9D中那样遵循同一路径还是所有线程(T0到T7)如在图9E中那样遵循不同路径。在图9D和图9E中,以粗线示出发生线程切换的点。可根据同等地选择所有线程的算法(诸如轮叫算法)来执行线程切换,但是没有特定的限定。另外,可在执行线程切换8次之后完成所有线程的执行,其中,8是将被执行的线程的数量。
当将根据示例性实施例的操作方法与根据SIMT架构的操作方法进行比较时,在SIMT架构中,一个处理单元(PU)同时执行8个线程,然而,在示例性实施例中,一个处理单元(PU)顺序地执行8个线程。如果所有线程(T0到T7)遵循同一路径,则现有技术方法和示例性实施例之间在高效使用处理资源方面不存在差别。然而,如果线程(T0到T7)遵循不同路径,则现有技术方法导致处理资源的使用效率较低,而在示例性实施例中,处理资源的使用如同所有线程(T0到T7)遵循同一路径的情况那样高效。
图10A、图10B、图10C、图10D和图10E是示出均具有两个处理单元(PU0、PU1)的多线程执行处理器执行图8A中的示例程序代码的示图,其中,为了方便,图10B和图10C中的示图是被划分的两个示图。图10A到图10E是在两个处理单元(PU0、PU1)中的每个处理单元执行4个线程的情况下的示图,其中,处理单元PU0执行线程T0、T1、T2和T3,处理单元PU1执行T4、T5、T6和T7。另外,图10A、图10B和图10C示出根据现有技术SIMT架构的多线程执行处理器的执行,图10D和图10E示出根据在图1中示出的示例性实施例的多线程执行处理器的执行。另外,图10A和图10D是在处理单元(PU0、PU1)中执行的8个线程(T0到T7)全部遵循同一路径(即,仅路径P0)的情况下的示图。图10B、图10C和图10E是在8个线程(T0到T7)遵循四个不同路径(P0到P3)的情况下的示图,其中,线程T0和T1遵循路径P0,线程T2和T3遵循路径P1,线程T4和T5遵循路径P2,线程T6和T7遵循路径P3。
如在图10A、图10B和图10C中可见,在现有技术SIMT架构中,即使当使用两个处理单元(PU0、PU1)来执行线程时,同一程序计数器(PC)中的指令也由所有线程处理。也就是说,在SIMT架构中,两个处理单元(PU0、PU1)使用同一程序计数器(PC)。在图10A、图10B和图10C中,以粗线示出程序计数器(PC)改变的点。根据该执行方法,在每个处理单元(PU0、PU1)中隐含最多可发生4次线程切换以执行一个指令。如同使用一个处理单元来执行线程(参见图9A、图9B和图9C)的情况,即使当使用两个处理单元(PU0、PU1)来执行线程时,如果所有线程(T0到T7)遵循同一路径,则100%地使用处理资源,而如果线程(T0到T7)遵循不同路径,则处理资源的使用效率较低(在图10B和图10C中,以斜线示出发出的指令未在相应的程序计数器中被处理的线程)。
如在图10D和图10E中可见,每个处理单元(PU0、PU1)使用单独的程序计数器(PC0、PC1),这与SIMT架构不同。程序计数器(PC0、PC1)在执行程序代码的多个执行路径中指定任意一个执行路径。另外,在根据示例性实施例的多线程执行处理器的操作方法中,当完成选择的任意一个线程的执行时,执行后续线程,而不考虑所有线程(T0到T7)如在图10D中那样遵循同一路径还是所有线程(T0到T7)如在图10E中那样遵循不同路径。例如,处理单元PU0以T0、T1、T2和T3的顺序次序来执行线程,处理单元PU1以T4、T5、T6、T7的顺序次序来执行线程。在图10D和图10E中,以粗线示出发生线程切换的点。在执行线程切换四次之后,所有线程的执行可完成,其中,四是在每个处理单元(PU0、PU1)中将被执行的线程的数量。
当将根据示例性实施例的操作方法与根据现有技术SIMT架构的操作方法进行比较时,在SIMT架构中,处理单元(PU0、PU1)分别同时执行四个线程,而在示例性实施例中,处理单元(PU0、PU1)分别顺序地执行四个线程。如果所有线程(T0到T7)遵循同一路径,则现有技术方法和示例性实施例之间在高效使用处理资源方面不存在差别。然而,如果线程(T0到T7)遵循不同路径,则现有技术方法导致处理资源的使用效率较低,而在示例性实施例中,处理资源的使用可如同所有线程(T0到T7)遵循同一路径的情况那样高效。
图11A和图11B是示出根据示例性实施例的均具有一个处理单元(PU)或者均具有两个处理单元(PU)的多线程执行处理器执行图8B中的示例程序代码的示图。如上所述,示例程序代码是在特定指令(暂停指令)中标记了线程切换信息的程序代码。图11A是示出一个处理单元(PU)执行8个线程的情况的示图,图11B是示出两个处理单元(PU0、PU1)均执行四个线程的情况的示图,其中,每个处理单元(PU0、PU1)使用单独的程序计数器(PC0、PC1)。另外,在图11A和图11B中,8个线程(T0到T7)遵循四个不同路径(P0到P3),其中,线程T0和T1遵循路径P0,线程T2和T3遵循路径P1,线程T4和T5遵循路径P2,线程T6和T7遵循路径P3。虽然未示出,但是对本领域普通技术人员而言显而易见的是:图11A和图11B还可适用于8个线程(T0到T7)遵循同一路径(例如,路径P0)的情况。
参照图11A和图11B,在根据示例性实施例的多线程执行处理器的操作方法中,当在执行选择的任意一个线程时发出的指令是暂停指令时,处理单元执行线程切换,并选择另一线程以执行该线程。例如,在图11A和图11B中,每当装载字(LDW)被发出并被处理时,处理单元(PU0、PU1)就执行线程切换。在这样的情况下,先前线程变为暂停状态线程,当完成发出的暂停指令的处理时,线程重新变为就绪状态线程。在图11A和图11B中,以粗线示出发生线程切换的点。以这种方式,通过针对暂停线程执行线程切换来顺序地执行线程,直到所有线程的处理完成为止,而不考虑所有线程(T0到T7)遵循同一路径还是所有线程(T0到T7)如在图11A和图11B中那样遵循不同路径。可根据同等地选择所有线程的算法(诸如轮叫算法)来执行线程切换,但是没有特定的限定。
在根据示例性实施例的操作方法中,在不考虑8个线程是否遵循同一线程的情况下实现处理资源的高效实用。另外,如果指令是长延时指令(诸如装载指令),则可通过线程切换来隐藏长延时。例如,当完成在线程T0的0x03地址发出的装载字(LDW)指令的处理时(稍后恢复线程T0的执行),处理单元(PU、PU0、PU1)可继续执行而不停止,结果,可在不降低具有复杂的控制流的程序的资源高效性的情况下实现长延时指令的延时隐藏。
根据示例性实施例,在完成选择的线程的执行之后或者仅当处理特定指令时执行线程切换,因此,可降低由线程切换导致的开销。
另外,可在不考虑多个线程是否遵循同一路径的情况下高效地使用处理资源,从而可高效地操作具有复杂的控制流的应用。
另外,在发出相对长延时的指令之后,执行线程切换以执行另一线程,以便实现资源的高效使用和延时隐藏。
此外,可对线程切换的点进行静态固定,从而确定线程切换的操作无需硬件逻辑。结果,可简化硬件结构,减小芯片尺寸,同时能耗较低。
以上已描述了多个示例。然而,应理解的是,可做出各种修改。例如,如果以不同的顺序执行描述的技术,并且/或者如果以不同的方式组合描述的系统、架构、装置或电路中的组件和/或使用其它组件或其等同物来替代或补充描述的系统、架构、装置或电路中的组件,则可实现合适的结果。因此,其它实施方式在权利要求的范围内。另外,上述示例用于示意性解释,因而本发明不限于此。
虽然已参照数量有限的实施例来描述了示例性实施例,但是得益于本公开的本领域技术人员将理解的是:可设想不脱离在此公开的范围的其它实施例。因此,所述范围应当仅由权利要求限定。
Claims (34)
1.一种多线程执行处理器,包括:
线程选择器,被配置为从用于执行程序代码的多个线程中选择第一线程;
线程执行器,被配置为执行由线程选择器选择的第一线程,并在完成第一线程的执行之后执行由线程选择器从所述多个线程中选择的第二线程。
2.如权利要求1所述的多线程执行处理器,还包括:线程存储器,被配置为存储所述多个线程。
3.如权利要求2所述的多线程执行处理器,
其中,存储在线程存储器中的所述多个线程中的每个线程处于初始状态和终止状态中的一个状态,
其中,线程选择器还被配置为:从所述多个线程中选择一个处于初始状态的线程。
4.如权利要求3所述的多线程执行处理器,其中,线程存储器还被配置为:使用轮叫方法从所述多个线程中选择处于初始状态的线程。
5.如权利要求3所述的多线程执行处理器,其中,线程选择器还被配置为:通过使用指示存储在线程存储器中的所述多个线程中的每个线程的状态的线程状态信息,从所述多个线程中选择处于初始状态的线程。
6.如权利要求1所述的多线程执行处理器,其中,所述多个线程中的每个线程被配置为遵循用于执行程序代码的多条执行路径中的任意一条执行路径。
7.如权利要求6所述的多线程执行处理器,其中,由与所述多条执行路径中的每条执行路径相应的程序计数器确定所述多条执行路径。
8.一种多线程执行处理器,包括:
线程选择器,被配置为从用于执行程序代码的多个线程中选择第一线程;
线程执行器,被配置为执行由线程选择器选择的第一线程;
线程切换确定器,被配置为确定为执行第一线程而发出的指令是否为暂停指令,
其中,线程执行器还被配置为:响应于由线程切换确定器确定在执行第一线程时发出的指令是暂停指令,执行到第二线程的线程切换,以执行第二线程,其中,由线程选择器从所述多个线程中选择第二线程。
9.如权利要求8所述的多线程执行处理器,还包括:线程存储器,被配置为存储所述多个线程。
10.如权利要求8所述的多线程执行处理器,其中,线程切换确定器还被配置为:基于明确地标记在程序代码中的线程切换信息来确定发出的指令是否为暂停指令。
11.如权利要求10所述的多线程执行处理器,其中,在对程序代码进行编码时包括线程切换信息。
12.如权利要求11所述的多线程执行处理器,其中,由程序员在对程序代码进行编码时包括线程切换信息,或者在编码时根据特定算法自动包括线程切换信息。
13.如权利要求9所述的多线程执行处理器,
其中,存储在线程存储器中的所述多个线程中的每个线程处于就绪状态、暂停状态和终止状态中的一个状态,
其中,线程选择器还被配置为:从所述多个线程中选择一个处于就绪状态的线程。
14.如权利要求13所述的多线程执行处理器,
其中,响应于线程执行器执行从第一线程到第二线程的线程切换,第一线程变为暂停状态线程,
其中,响应于线程执行器完成在线程切换之前发出的暂停指令的处理,第一线程被恢复为就绪状态线程。
15.如权利要求13所述的多线程执行处理器,其中,线程选择器还被配置为:通过使用指示存储在线程存储器中的所述多个线程中的每个线程的线程状态信息,从所述多个线程中选择就绪状态线程。
16.一种多线程执行处理器,包括:
处理单元,被配置为执行多个线程,其中,所述多个线程被配置为执行程序代码,
其中,处理单元通过执行所述多个线程中的一个线程,并随后执行线程切换以执行所述多个线程中的后续的另一线程,来顺序地执行所述多个线程。
17.如权利要求16所述的多线程执行处理器,还包括:
多个处理单元,其中,所述多个处理单元被配置为:通过在所述多个处理单元当中划分所述多个线程来执行所述多个线程。
18.如权利要求17所述的多线程执行处理器,其中,所述多个处理单元中的每个处理单元还被配置为使用内部的程序计数器。
19.一种多线程执行处理器,包括:
处理单元,被配置为执行多个线程,其中,所述多个线程被配置为执行程序代码,
其中,处理单元通过响应于在执行所述多个线程中的第一线程时发出的指令是暂停指令进行线程切换以执行第二线程,来顺序地执行所述多个线程。
20.如权利要求19所述的多线程执行处理器,其中,处理单元还被配置为:基于明确地标记在程序代码中的线程切换信息来确定发出的指令是否为暂停指令。
21.如权利要求20所述的多线程执行处理器,其中,由程序员在对程序代码进行编码时包括线程切换信息,或者根据特定算法自动包括线程切换信息。
22.如权利要求19所述的多线程执行处理器,
其中,所述多个线程中的每个线程处于就绪状态、暂停状态和终止状态中的一个状态,
其中,处理单元还被配置为:从所述多个线程中选择一个处于就绪状态的线程,以执行选择的线程。
23.如权利要求22所述的多线程执行处理器,
其中,响应于线程切换,第一线程变为暂停状态线程,
其中,响应于完成暂停指令的处理,第一线程恢复为就绪状态线程。
24.如权利要求19所述的多线程执行处理器,还包括多个处理单元,
其中,所述多个处理单元中的每个处理单元被配置为使用程序计数器,所述程序计数器在用于执行程序代码的多条执行路径当中指定任意一条执行路径。
25.一种操作用于执行多个线程的多线程执行处理器的方法,其中,所述多个线程用于执行程序代码,所述方法包括:
执行所述多个线程中的第一线程;
执行线程切换以执行所述多个线程中的另一线程,
其中,所述多个线程被顺序地执行,直到所述多个线程的执行完成为止。
26.一种操作用于执行多个线程的多线程执行处理器的方法,其中,所述多个线程用于执行程序代码,所述方法包括:
当执行所述多个线程中的第一线程时,使用多线程执行处理器确定为执行第一线程而发出的指令是否为暂停指令;
响应于确定发出的指令不是暂停指令,使用多线程执行处理器执行第一线程,响应于确定发出的指令是暂停指令,使用多线程执行处理器执行线程切换以执行所述多个线程中的第二线程。
27.如权利要求26所述的方法,其中,通过线程切换来顺序地执行所述多个线程,直到所述多个线程的执行完成为止。
28.如权利要求26所述的方法,其中,用于确定发出的指令是否为暂停指令的线程切换信息被明确地标记在程序代码中。
29.一种操作多线程处理器的方法,所述方法包括:
响应于第一线程处于就绪状态,使用线程执行器顺序地执行第一线程的指令,
当第一线程处于暂停状态时,使用线程选择器暂停第一线程的指令的执行,并在继续执行之前等待直到第一线程的线程状态改变回就绪状态;
使用线程执行器通过完成第一线程中的所有指令的执行而完成第一线程的执行,并使用线程选择器将第一线程置于终止状态。
30.如权利要求29所述的方法,还包括:
响应于第一线程处于暂停状态并被暂停,当第二线程处于就绪状态时,使用线程执行器顺序地执行第二线程的第二指令。
31.如权利要求29所述的方法,其中,响应于当将被执行的当前指令超出处理时间阈值时第一线程被置于暂停状态,完成暂停执行的操作。
32.一种多线程处理器,包括:
线程执行器,被配置为:响应于第一线程处于就绪状态,顺序地执行第一线程的指令;
线程选择器,被配置为:当第一线程处于暂停状态时,暂停第一线程的指令的执行,并在继续执行之前等待直到第一线程的线程状态改变回就绪状态;
其中,线程执行器和线程选择器还被配置为:使用线程执行器通过完成第一线程中的所有指令的执行而完成第一线程的执行,并使用线程选择器将第一线程置于终止状态。
33.如权利要求32所述的多线程处理器,其中,线程选择器还被配置为响应于第一线程处于暂停状态而选择第二线程,其中,线程执行器还被配置为执行第二线程的第二指令。
34.如权利要求32所述的多线程处理器,其中,响应于当将被执行的当前指令超出处理时间阈值时第一线程被置于暂停状态,线程选择器暂停第一线程的指令的执行。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR10-2013-0096104 | 2013-08-13 | ||
KR20130096104A KR20150019349A (ko) | 2013-08-13 | 2013-08-13 | 다중 쓰레드 실행 프로세서 및 이의 동작 방법 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104375804A true CN104375804A (zh) | 2015-02-25 |
CN104375804B CN104375804B (zh) | 2019-07-19 |
Family
ID=51300569
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410379557.0A Active CN104375804B (zh) | 2013-08-13 | 2014-08-04 | 多线程执行处理器及其操作方法 |
Country Status (5)
Country | Link |
---|---|
US (1) | US20150052533A1 (zh) |
EP (1) | EP2838019A1 (zh) |
JP (2) | JP2015036983A (zh) |
KR (1) | KR20150019349A (zh) |
CN (1) | CN104375804B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105824703A (zh) * | 2016-03-30 | 2016-08-03 | 联想(北京)有限公司 | 一种线程管理方法和线程管理器 |
CN106648550A (zh) * | 2015-11-04 | 2017-05-10 | 阿里巴巴集团控股有限公司 | 用于并发执行任务的方法与设备 |
CN109143983A (zh) * | 2018-08-15 | 2019-01-04 | 杭州电子科技大学 | 嵌入式可编程控制器的运动控制方法及装置 |
CN111078394A (zh) * | 2019-11-08 | 2020-04-28 | 苏州浪潮智能科技有限公司 | 一种gpu线程负载均衡方法与装置 |
CN113282802A (zh) * | 2021-06-17 | 2021-08-20 | 浙江毫微米科技有限公司 | 工作量证明算法优化方法、装置、计算机设备和存储介质 |
CN117389712A (zh) * | 2023-12-12 | 2024-01-12 | 沐曦集成电路(南京)有限公司 | 一种gpu多线程调度管理系统 |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10133572B2 (en) * | 2014-05-02 | 2018-11-20 | Qualcomm Incorporated | Techniques for serialized execution in a SIMD processing system |
GB2540937B (en) * | 2015-07-30 | 2019-04-03 | Advanced Risc Mach Ltd | Graphics processing systems |
DE102016200777A1 (de) * | 2016-01-21 | 2017-07-27 | Robert Bosch Gmbh | Verfahren und Vorrichtung zum Überwachen und Kontrollieren quasi-paralleler Ausführungsstränge in einem ereignisorientierten Betriebssystem |
US10452586B2 (en) * | 2017-04-17 | 2019-10-22 | Intel Corporation | Avoid thread switching in cache management |
KR102423768B1 (ko) * | 2017-09-26 | 2022-07-21 | 삼성전자주식회사 | 복수의 스레드들에 포함된 복수의 명령어들을 처리하기 위한 방법 및 그 전자 장치 |
JPWO2021255926A1 (zh) | 2020-06-19 | 2021-12-23 |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060095901A1 (en) * | 2004-10-07 | 2006-05-04 | Brokenshire Daniel A | System and method for partitioning processor resources based on memory usage |
GB2421325A (en) * | 2004-12-17 | 2006-06-21 | Sun Microsystems Inc | Setting a thread to a wait state using a wait instruction |
US20060168583A1 (en) * | 2005-01-25 | 2006-07-27 | Claude Basso | Systems and methods for TDM multithreading |
US20060230408A1 (en) * | 2005-04-07 | 2006-10-12 | Matteo Frigo | Multithreaded processor architecture with operational latency hiding |
US20070006231A1 (en) * | 2005-06-30 | 2007-01-04 | Hong Wang | Mechanism for instruction set based thread execution on a plurality of instruction sequencers |
JP2011028440A (ja) * | 2009-07-23 | 2011-02-10 | Nec Corp | マルチスレッドプロセッサ及びコンピュータプログラム |
US20110072248A1 (en) * | 2009-09-24 | 2011-03-24 | Nickolls John R | Unanimous branch instructions in a parallel thread processor |
US20120079503A1 (en) * | 2010-09-24 | 2012-03-29 | William James Dally | Two-Level Scheduler for Multi-Threaded Processing |
US20120246652A1 (en) * | 2011-03-22 | 2012-09-27 | International Business Machines Corporation | Processor Management Via Thread Status |
US20120260070A1 (en) * | 2011-04-05 | 2012-10-11 | Vladimir Vasekin | Thread selection for multithreaded processing |
CN102934084A (zh) * | 2010-06-29 | 2013-02-13 | 英特尔公司 | 用于通过将第一核类型与第二核类型耦合来提高功率性能的装置、方法和系统 |
Family Cites Families (36)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3169779B2 (ja) * | 1994-12-19 | 2001-05-28 | 日本電気株式会社 | マルチスレッドプロセッサ |
US6658447B2 (en) * | 1997-07-08 | 2003-12-02 | Intel Corporation | Priority based simultaneous multi-threading |
US6718457B2 (en) * | 1998-12-03 | 2004-04-06 | Sun Microsystems, Inc. | Multiple-thread processor for threaded software applications |
US8127121B2 (en) * | 1999-01-28 | 2012-02-28 | Ati Technologies Ulc | Apparatus for executing programs for a first computer architechture on a computer of a second architechture |
US7013454B2 (en) * | 1999-02-22 | 2006-03-14 | Sun Microsystems, Inc. | Thread suspension system and method using trapping instructions |
US6535905B1 (en) * | 1999-04-29 | 2003-03-18 | Intel Corporation | Method and apparatus for thread switching within a multithreaded processor |
US6748556B1 (en) * | 2000-08-15 | 2004-06-08 | International Business Machines Corporation | Changing the thread capacity of a multithreaded computer processor |
US7657880B2 (en) * | 2003-01-31 | 2010-02-02 | Intel Corporation | Safe store for speculative helper threads |
US7873785B2 (en) * | 2003-08-19 | 2011-01-18 | Oracle America, Inc. | Multi-core multi-thread processor |
US20050060517A1 (en) * | 2003-09-12 | 2005-03-17 | Morrow Michael W. | Switching processor threads during long latencies |
US7472390B2 (en) * | 2003-10-01 | 2008-12-30 | Intel Corporation | Method and apparatus to enable execution of a thread in a multi-threaded computer system |
US20050108711A1 (en) * | 2003-11-13 | 2005-05-19 | Infineon Technologies North America Corporation | Machine instruction for enhanced control of multiple virtual processor systems |
US7310722B2 (en) * | 2003-12-18 | 2007-12-18 | Nvidia Corporation | Across-thread out of order instruction dispatch in a multithreaded graphics processor |
US20050223385A1 (en) * | 2004-03-31 | 2005-10-06 | Christof Braun | Method and structure for explicit software control of execution of a thread including a helper subthread |
US7890735B2 (en) * | 2004-08-30 | 2011-02-15 | Texas Instruments Incorporated | Multi-threading processors, integrated circuit devices, systems, and processes of operation and manufacture |
US7418576B1 (en) * | 2004-11-17 | 2008-08-26 | Nvidia Corporation | Prioritized issuing of operation dedicated execution unit tagged instructions from multiple different type threads performing different set of operations |
US8756605B2 (en) * | 2004-12-17 | 2014-06-17 | Oracle America, Inc. | Method and apparatus for scheduling multiple threads for execution in a shared microprocessor pipeline |
US7657891B2 (en) * | 2005-02-04 | 2010-02-02 | Mips Technologies, Inc. | Multithreading microprocessor with optimized thread scheduler for increasing pipeline utilization efficiency |
US20070143582A1 (en) * | 2005-12-16 | 2007-06-21 | Nvidia Corporation | System and method for grouping execution threads |
US7577826B2 (en) * | 2006-01-30 | 2009-08-18 | Sony Computer Entertainment Inc. | Stall prediction thread management |
US7584344B2 (en) * | 2006-05-02 | 2009-09-01 | Freescale Semiconductor, Inc. | Instruction for conditionally yielding to a ready thread based on priority criteria |
GB2447907B (en) * | 2007-03-26 | 2009-02-18 | Imagination Tech Ltd | Processing long-latency instructions in a pipelined processor |
US7853950B2 (en) * | 2007-04-05 | 2010-12-14 | International Business Machines Corporarion | Executing multiple threads in a processor |
JP2009075948A (ja) * | 2007-09-21 | 2009-04-09 | Mitsubishi Electric Corp | マルチコアプロセッサ |
US8589925B2 (en) * | 2007-10-25 | 2013-11-19 | Microsoft Corporation | Techniques for switching threads within routines |
CN101739242B (zh) * | 2009-11-27 | 2013-07-31 | 深圳中微电科技有限公司 | 一种流数据处理方法及流处理器 |
US8732713B2 (en) * | 2010-09-29 | 2014-05-20 | Nvidia Corporation | Thread group scheduler for computing on a parallel thread processor |
JP2012128791A (ja) * | 2010-12-17 | 2012-07-05 | Toyota Motor Corp | マルチスレッド・プロセッサ |
US8601485B2 (en) * | 2011-05-25 | 2013-12-03 | Arm Limited | Data processing apparatus and method for processing a received workload in order to generate result data |
US10078515B2 (en) * | 2011-10-03 | 2018-09-18 | International Business Machines Corporation | Tracking operand liveness information in a computer system and performing function based on the liveness information |
US8719828B2 (en) * | 2011-10-14 | 2014-05-06 | Intel Corporation | Method, apparatus, and system for adaptive thread scheduling in transactional memory systems |
US20140157287A1 (en) * | 2012-11-30 | 2014-06-05 | Advanced Micro Devices, Inc | Optimized Context Switching for Long-Running Processes |
US9652284B2 (en) * | 2013-10-01 | 2017-05-16 | Qualcomm Incorporated | GPU divergence barrier |
US9384036B1 (en) * | 2013-10-21 | 2016-07-05 | Google Inc. | Low latency thread context caching |
US9547530B2 (en) * | 2013-11-01 | 2017-01-17 | Arm Limited | Data processing apparatus and method for processing a plurality of threads |
US9535815B2 (en) * | 2014-06-04 | 2017-01-03 | Nvidia Corporation | System, method, and computer program product for collecting execution statistics for graphics processing unit workloads |
-
2013
- 2013-08-13 KR KR20130096104A patent/KR20150019349A/ko not_active Application Discontinuation
-
2014
- 2014-07-22 US US14/337,633 patent/US20150052533A1/en not_active Abandoned
- 2014-07-29 JP JP2014153580A patent/JP2015036983A/ja active Pending
- 2014-08-04 CN CN201410379557.0A patent/CN104375804B/zh active Active
- 2014-08-07 EP EP14180118.3A patent/EP2838019A1/en not_active Withdrawn
-
2019
- 2019-06-28 JP JP2019121759A patent/JP2019160352A/ja active Pending
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060095901A1 (en) * | 2004-10-07 | 2006-05-04 | Brokenshire Daniel A | System and method for partitioning processor resources based on memory usage |
GB2421325A (en) * | 2004-12-17 | 2006-06-21 | Sun Microsystems Inc | Setting a thread to a wait state using a wait instruction |
US20060168583A1 (en) * | 2005-01-25 | 2006-07-27 | Claude Basso | Systems and methods for TDM multithreading |
US20060230408A1 (en) * | 2005-04-07 | 2006-10-12 | Matteo Frigo | Multithreaded processor architecture with operational latency hiding |
US20070006231A1 (en) * | 2005-06-30 | 2007-01-04 | Hong Wang | Mechanism for instruction set based thread execution on a plurality of instruction sequencers |
JP2011028440A (ja) * | 2009-07-23 | 2011-02-10 | Nec Corp | マルチスレッドプロセッサ及びコンピュータプログラム |
US20110072248A1 (en) * | 2009-09-24 | 2011-03-24 | Nickolls John R | Unanimous branch instructions in a parallel thread processor |
CN102934084A (zh) * | 2010-06-29 | 2013-02-13 | 英特尔公司 | 用于通过将第一核类型与第二核类型耦合来提高功率性能的装置、方法和系统 |
US20120079503A1 (en) * | 2010-09-24 | 2012-03-29 | William James Dally | Two-Level Scheduler for Multi-Threaded Processing |
US20120246652A1 (en) * | 2011-03-22 | 2012-09-27 | International Business Machines Corporation | Processor Management Via Thread Status |
US20120260070A1 (en) * | 2011-04-05 | 2012-10-11 | Vladimir Vasekin | Thread selection for multithreaded processing |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106648550A (zh) * | 2015-11-04 | 2017-05-10 | 阿里巴巴集团控股有限公司 | 用于并发执行任务的方法与设备 |
CN106648550B (zh) * | 2015-11-04 | 2020-06-09 | 阿里巴巴集团控股有限公司 | 用于并发执行任务的方法与设备 |
CN105824703A (zh) * | 2016-03-30 | 2016-08-03 | 联想(北京)有限公司 | 一种线程管理方法和线程管理器 |
CN105824703B (zh) * | 2016-03-30 | 2019-03-29 | 联想(北京)有限公司 | 一种线程管理方法和线程管理器 |
CN109143983A (zh) * | 2018-08-15 | 2019-01-04 | 杭州电子科技大学 | 嵌入式可编程控制器的运动控制方法及装置 |
CN109143983B (zh) * | 2018-08-15 | 2019-12-24 | 杭州电子科技大学 | 嵌入式可编程控制器的运动控制方法及装置 |
CN111078394A (zh) * | 2019-11-08 | 2020-04-28 | 苏州浪潮智能科技有限公司 | 一种gpu线程负载均衡方法与装置 |
CN113282802A (zh) * | 2021-06-17 | 2021-08-20 | 浙江毫微米科技有限公司 | 工作量证明算法优化方法、装置、计算机设备和存储介质 |
CN113282802B (zh) * | 2021-06-17 | 2022-06-24 | 浙江毫微米科技有限公司 | 工作量证明算法优化方法、装置、计算机设备和存储介质 |
CN117389712A (zh) * | 2023-12-12 | 2024-01-12 | 沐曦集成电路(南京)有限公司 | 一种gpu多线程调度管理系统 |
CN117389712B (zh) * | 2023-12-12 | 2024-03-12 | 沐曦集成电路(南京)有限公司 | 一种gpu多线程调度管理系统 |
Also Published As
Publication number | Publication date |
---|---|
JP2019160352A (ja) | 2019-09-19 |
JP2015036983A (ja) | 2015-02-23 |
CN104375804B (zh) | 2019-07-19 |
EP2838019A1 (en) | 2015-02-18 |
US20150052533A1 (en) | 2015-02-19 |
KR20150019349A (ko) | 2015-02-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104375804A (zh) | 多线程执行处理器及其操作方法 | |
CN105389158B (zh) | 数据处理系统、编译器、处理器的方法和机器可读介质 | |
KR102253628B1 (ko) | 복수-쓰레드 프로세서에서의 복수 쓰레드들의 상태들의 결합 | |
KR102262483B1 (ko) | 복수-타일 프로세싱 구성에서의 동기화 | |
US10831490B2 (en) | Device and method for scheduling multiple thread groups on SIMD lanes upon divergence in a single thread group | |
US9535833B2 (en) | Reconfigurable processor and method for optimizing configuration memory | |
US8417918B2 (en) | Reconfigurable processor with designated processing elements and reserved portion of register file for interrupt processing | |
CN111630505B (zh) | 深度学习加速器系统及其方法 | |
CN103809964A (zh) | 用线程组执行顺序代码的系统和方法和包含其的simt处理器 | |
CN103226463A (zh) | 用于使用预解码数据调度指令的方法和装置 | |
CN109614170A (zh) | 控制由计算系统执行的任务 | |
US20160091882A1 (en) | System and method of multi-core based software execution for programmable logic controllers | |
EP3973383B1 (en) | Multi-lane solutions for addressing vector elements using vector index registers | |
KR101603752B1 (ko) | 멀티 모드 지원 프로세서 및 그 프로세서에서 멀티 모드를 지원하는 방법 | |
RU2644535C2 (ru) | Архитектура параллельной вычислительной системы | |
CN104731561A (zh) | 在simd处理单元中的任务执行 | |
CN103970714A (zh) | 用于共享功能逻辑的设备和方法及其可重配置处理器 | |
US11635966B2 (en) | Pausing execution of a first machine code instruction with injection of a second machine code instruction in a processor | |
CN103714511A (zh) | 一种基于gpu的分支处理方法及装置 | |
TWI428833B (zh) | 多執行緒處理器及其指令執行及同步方法及其電腦程式產品 | |
JP6697457B2 (ja) | プロセッサ・コアをスレッド・モードからレーン・モードに遷移させ、2つのモードの間のデータ転送を可能にすること | |
GB2607349A (en) | Graphics processing |
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 |