CN103970511A - 能够支持多模式的处理器及其多模式支持方法 - Google Patents
能够支持多模式的处理器及其多模式支持方法 Download PDFInfo
- Publication number
- CN103970511A CN103970511A CN201410042215.XA CN201410042215A CN103970511A CN 103970511 A CN103970511 A CN 103970511A CN 201410042215 A CN201410042215 A CN 201410042215A CN 103970511 A CN103970511 A CN 103970511A
- Authority
- CN
- China
- Prior art keywords
- end unit
- treatment element
- instruction
- processor
- treatment
- 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
- 238000000034 method Methods 0.000 title claims abstract description 67
- 238000012545 processing Methods 0.000 claims abstract description 65
- 230000004913 activation Effects 0.000 claims description 84
- 230000004044 response Effects 0.000 claims description 28
- 230000003213 activating effect Effects 0.000 claims description 24
- 230000002779 inactivation Effects 0.000 claims description 22
- 238000012360 testing method Methods 0.000 claims description 4
- 238000001514 detection method Methods 0.000 claims description 2
- 238000003860 storage Methods 0.000 description 27
- 230000008569 process Effects 0.000 description 25
- 238000010586 diagram Methods 0.000 description 11
- 238000007726 management method Methods 0.000 description 11
- 238000011084 recovery Methods 0.000 description 9
- 230000006870 function Effects 0.000 description 8
- 230000008901 benefit Effects 0.000 description 7
- 238000013461 design Methods 0.000 description 5
- 238000013507 mapping Methods 0.000 description 5
- 230000008859 change Effects 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 238000009826 distribution Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 238000007792 addition Methods 0.000 description 2
- 238000000429 assembly Methods 0.000 description 2
- 230000000712 assembly Effects 0.000 description 2
- 230000007547 defect Effects 0.000 description 2
- 230000008034 disappearance Effects 0.000 description 2
- 239000011521 glass Substances 0.000 description 2
- 230000036541 health Effects 0.000 description 2
- 230000010387 memory retrieval Effects 0.000 description 2
- 238000011002 quantification Methods 0.000 description 2
- 239000013589 supplement Substances 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 230000001133 acceleration Effects 0.000 description 1
- 210000003423 ankle Anatomy 0.000 description 1
- 230000003190 augmentative effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000012512 characterization method Methods 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000009849 deactivation Effects 0.000 description 1
- 238000002474 experimental method Methods 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 230000009191 jumping Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000002156 mixing Methods 0.000 description 1
- 230000006855 networking Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000031877 prophase Effects 0.000 description 1
- 230000000284 resting effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
- G06F15/8007—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
- G06F15/8015—One dimensional arrays, e.g. rings, linear arrays, buses
-
- 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/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30058—Conditional branch instructions
-
- 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
- G06F9/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
-
- 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
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3851—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
-
- 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
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
-
- 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
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3889—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- Multimedia (AREA)
- Advance Control (AREA)
- Multi Processors (AREA)
Abstract
公开了一种能够支持多模式的处理器及其多模式支持方法。实施例包括能够支持多模式的处理器及对应的方法。所述处理器包括:多个前端单元;多个处理元件,其数量大于前端单元的数量;控制器,被构造为确定是否由于条件分支而发生线程分歧。如果有线程分歧,处理器可以使用多个当前激活的前端单元来设置控制信息以控制处理元件。如果没有线程分歧,处理器可以使用一个当前激活的前端单元来设置控制信息以控制处理元件。
Description
本申请要求于2013年01月28日提交到韩国知识产权局的第10-2013-0009326号韩国专利申请的权益,其全部公开通过出于各种目的引用完整地包含于此。
技术领域
以下描述涉及一种能够支持单指令流多数据流(SIMD)模式和多指令流多数据流(MIMD)模式的处理器,以及在所述处理器中支持多模式功能的方法。
背景技术
基于单指令流多数据流(SIMD)结构的处理器使包括在处理器中的所有处理元件能够通过读取和解码指令的单个前端单元的装置来共享普通指令,从而通过管理同时指令执行来减少硬件资源的需求并提高并行数据处理的性能。在使用SIMD结构的处理器中,当处理器处理条件分支(conditionalbranch)时,依次执行每个条件分支,这阻碍资源的有效利用。然而,SIMD结构需要依次执行条件分支。由于只有一个前端单元,并且由于SIMD结构导致线程相互依赖,因此SIMD结构需要依次解决代码导致的线程分歧的情况。因此,由于SIMD结构只需要一个前端单元,SIMD结构能够降低处理器复杂性,但是线程分歧导致SIMD环境中的问题。
可选择地,基于多指令流多数据流(MIMD)结构的处理器使用不同的前端单元使所有处理元件能够同时处理各个线程。在线程分歧期间MIMD结构实现快速操作处理,因此被认为适用于处理条件分支。然而,提供使用MIMD结构的处理器的各个前端单元使硬件设计复杂化并增大处理器的尺寸,这也会增加制造成本。此外,具有固定的MIMD结构的处理器要求将处理器构建为即使当实际上不是所有的前端单元都被使用时也提供多个前端单元。
发明内容
提供本发明内容来以简单的形式引入将在以下具体实施方式中进一步描述的概念的选择。本发明内容不是旨在确定所要求保护的主题的关键特征或基本特征,也不是旨在帮助确定所要求保护的主题的范围。
在一个总体方面,一种处理器,包括:多个前端单元;多个处理元件,其数量大于前端单元的数量;控制器,被构造为确定是否由于由前端单元检测的条件分支指令而发生线程分歧,并且响应于确定发生线程分歧,被构造为使用多个当前激活的前端单元来设置控制信息以控制处理元件处理指令,或者,响应于确定没有发生线程分歧,被构造为使用一个当前激活的前端单元来设置控制信息以控制处理元件处理指令。
处理器还可以包括:内部连接器,被构造为基于控制信息确定哪个处理元件将用于处理当前激活的前端单元中的一个前端单元的指令,并且将所述指令发送到确定的处理元件。
控制器可以包括与各自前端单元相关的多个寄存器,并且被构造为存储各自对应的前端单元的控制信息。
控制信息可以包括各自前端单元的处理元件分配信息。
所述多个寄存器中的每个寄存器可以包括和处理元件的总数一样多的位区域,其中,所述位区域用于存储与所述多个寄存器中的每个寄存器对应的前端单元的处理元件分配信息。
控制器可以通过从处理元件接收处理由当前激活的前端单元中的一个前端单元检测的条件分支指令的结果来确定是否发生线程分歧,并且,如果确定发生线程分歧,则另外激活未激活的前端单元中的一个前端单元。
控制器可将一些处理元件分配到另外激活的前端单元,并在与另外激活的前端单元相关的寄存器中存储关于分配的分配信息。
处理器可以提供:响应于当前激活的前端单元和另外激活的前端单元完成条件分支的处理,控制器使另外激活的前端单元失活,并使分配到另外激活的前端单元的处理元件重新分配到当前激活的前端单元。
在另一总体方面,一种用于支持多模式处理的方法,包括:在处理器的当前激活的前端单元,检测条件分支指令;在处理器的控制器,基于检测到的条件分支指令确定是否发生线程分歧;响应于确定发生线程分歧,另外激活未激活的前端单元中的一个前端单元;在控制器,设置控制信息,以使处理元件处理从激活的前端元件接收的指令。
所述方法可以提供:处理器,包括多个前端单元和多个处理元件,其中,处理元件的数量大于前端单元的数量。
所述方法可以提供:确定是否发生线程分歧的步骤还包括从处理元件接收处理条件分支指令的结果,并基于接收到的结果确定是否发生线程分歧。
所述方法可以提供:控制器还包括与各自前端单元相关的多个寄存器,并在寄存器中存储各自对应的前端单元的控制信息。
控制信息还可以包括各自前端单元的处理元件分配信息。
所述多个寄存器中的每个寄存器可以包括和处理元件的总数一样多的位区域,其中,所述位区域用于存储与所述多个寄存器对应的前端单元的处理元件分配信息。
设置控制信息的步骤还可以包括:设置与另外激活的前端单元相关的寄存器的位区域的位值,其中,位值对应于分配到另外激活的前端单元的处理元件。
所述方法还可以包括:在控制器确定由当前激活的前端单元和另外激活的前端单元两者处理的条件分支是否终止;响应于确定条件分支全部终止,使另外激活的前端单元失活;设置控制信息,以将分配到另外激活的前端单元的处理元件重新分配到当前激活的前端单元。
在另一总体方面,一种多模式处理器,包括:当前激活的前端单元,被构造为检测条件分支指令;控制器,被构造为基于检测到的条件分支指令,确定是否发生线程分歧,并且响应于确定发生线程分歧,另外激活未激活的前端单元,并设置控制信息以使处理元件处理从激活的前端单元接收的指令。
多模式处理器还可以包括一个或更多个未激活的前端单元和多个处理元件,其中,处理元件的数量大于前端单元的总数。
确定是否发生线程分歧的步骤还可以包括:从处理元件接收处理条件分支指令的结果,并基于接收到的结果确定是否发生线程分歧。
在另一总体方面,一种多模式处理器,包括:当前激活的前端单元,被构造为执行独立的条件分支;控制器,被构造为确定条件分支是否全部终止,并且响应于确定条件分支全部终止,使至少一个前端单元失活。
控制器还可以被构造为将失活的前端单元的处理元件重新分配到另一前端单元。
处理器还可以包括与各自前端单元相关的多个寄存器,并且在寄存器中存储各自对应的前端单元的控制信号。
控制信息还可以包括各自前端单元的处理元件分配信息。
所述多个寄存器中的每个寄存器可以包括和处理元件的总数一样多的位区域,其中,位区域用于存储与所述多个寄存器对应的前端单元的处理元件分配信息。
设置控制信息的步骤还可以包括:设置与另外激活的前端单元相关的寄存器的位区域的位值,其中,位值对应于分配到另外激活的前端单元的处理元件。
可通过在失活的前端单元和其他前端单元的位区域上执行逻辑或操作来执行所述重新分配的步骤。
通过下面的具体实施方式、附图和权利要求,其他特征和方面将是显而易见的。
附图说明
图1是示出根据示例性实施例的处理器的示图;
图2是示出如何在处理器中处理条件分支的示例的示图;
图3是示出根据示例性实施例的如何在处理器中处理条件分支的示例的示图;
图4是示出根据示例性实施例的在处理器中支持多模式的方法的流程图。
整个附图和具体实施方式中,除非另有描述或规定,否则相同的附图标号将被理解为表示相同的元件、特征和结构。附图可不按比例,并且为了清楚、说明和方便,可以夸大附图中元件的相对尺寸、比例和描述。
具体实施方式
下面提供具体实施方式以帮助读者获得对这里所描述的方法、设备和/或***的全面的理解。然而,这里所描述的***、设备和/或方法的各种变化、修改和等同物对本领域的普通技术人员来说将是显而易见的。所描述的处理步骤和/或操作的进程为示例;然而,除了必需以特定顺序发生的步骤和/或操作之外,步骤和/或操作的顺序并不局限于这里所阐述的并且可以被修改为本领域所公知的。此外,为更加清楚和简明,可省略对本领域的普通技术人员公知的功能和结构的描述。
这里所描述的特征可以以不同的形式来体现,且将不被解释为局限于在这里所描述的示例。相反,已提供这里所描述的示例使得本公开将是彻底和完全的,并将本公开的完整的范围传达给本领域的普通技术人员。
以下,将参照附图描述使用用于在处理器中支持多模式执行的方法的处理器。用于这种处理器的一个应用为增强现实,包括诸如三维图形、视频和光线追踪的应用。这样的应用由GPU潜在加速,但是可能会有太多的分支分歧以至于不能有效地处理它们。各种实施例提供了有效地处理分支分歧的方法。
如上所讨论的,处理器(诸如具有多个处理元件的并行处理器)可以是SIMD-模式或MIMD-模式处理器。对于处理器而提供的实施例允许处理元件动态共享前端单元,并允许处理器在SIMD和MIMD执行之间转换模式。通过共享前端单元并在SIMD和MIMD之间转换,实施例使针对前端单元的设计成本最小化,而同时获得在存在线程分歧的情况下伴随MIMD模式操作的性能优势。
图1是示出根据示例性实施例的处理器的示图。参照图1,处理器100可以包括前端单元120、内部连接器130、处理元件140和控制器150。提供至少两个前端单元120,考虑控制器100的可扩展性来适当地选择前端单元120的数量。控制器100的可扩展性指的是处理器100处理增加的工作量的能力。可扩展性也可以包含取决于增加的工作的特性的不同考虑。在示例中,基于处理器100需要的数据量选择前端单元120的数量,以在给定的时间内执行。然而,由于某些处理任务更好地适应于并行执行,可扩展性也可以需要考虑利用并行性处理数据的能力。
例如,如果处理器100的处理需求主要是具有几乎没有分歧的顺序线程,则比起要求处理器100处理多个高线程分歧,存在不同可扩展性考虑。针对可扩展性考虑线程的分歧的原因是,如果线程是连续的,则很容易并行运行线程,而无需线程在继续执行前等待另一线程。基于处理器100被设计为处理的数据的数量和特征、以及所述处理的时间要求,前端单元的适当的数量变化。例如,如果预计由处理器100要处理的数据将包含复杂、高度分支化的代码,则实施例包括相对大量的前端单元120是合适的。如果预计要处理的数据将是具有少量线程分歧的大量顺序代码,则可将处理器100设计为包含更少数量的前端单元120。可选择地,基于为在性能和处理器复杂性之间提供可接受的平衡的适当数量的前端单元120而提供的实验或其他启发法或原则来选择适当数量的前端单元120。在示例中,基于使用关于各种因数和统计的信息的算法或者公式来导出前端单元120的数量,所述因数和统计表征处理器将工作的数据,并且基于所述信息,产生建议数量的前端单元120。
在示例中,有数量为M的前端单元120,利用上面所讨论的方法或者另一种对于实施例允许确定数量M的方法来确定数量M。前端单元120从指令高速缓存110获取指令并解码所获取的指令。指令高速缓存110通过提供比主存储器更快的指令的替代源来存储处理器100的指令以减少访问指令所需的时间。例如,指令高速缓存110通过前端单元120提供快速访问的指令,以加快获取可执行指令。在不同的实施例中,在不同的指令高速缓存110中使用各种类型的高速缓存实现。在各种示例中,高速缓存包括多个级,使用不同的类型和速度的存储器等。
如上所述,指令高速缓存110通过处理器100来获取指令并解码用于处理的可执行的指令。各种类型的指令高速缓存110实现用于提供指令高速缓存110的功能。然而,在一些情况下,指令高速缓存110不包括特定的可执行的指令。与高速缓存“命中(hit)”相比,这种情况被称为高速缓存“缺失(miss)”,高速缓存“命中”是期望的信息在高速缓存中可用并且没有必要在主存储器中找到期望的信息的情况。当有高速缓存“命中”时,高速缓存通过访问高速缓存中的合适的指令来获取指令。当有高速缓存“缺失”时,为了访问期望的信息,高速缓存从主存储器检索对应的信息,这会慢得多。通常,当信息从主存储器检索到信息时,所述信息被引入到高速缓存中,由于高速缓存背后的原则之一是如果信息被使用一次,则它更有可能被再次使用,因此它随后被保存在高速缓存中。然而,由于高速缓存通常具有有限的存储容量,高速缓存使用各种不同的算法和技术来消除不太相关的信息,以确保存储在高速缓存中的信息最有可能防止访问主存储器的需要。
可执行指令可以是机器语言指令。这样的机器语言指令提供处理元件140执行单个处理步骤所必要的信息。在示例中,可执行指令包括操作码和操作数。当由前端单元120解码操作码时,所述操作码确定要执行的操作,操作数是受到操作作用的数据。在示例中,操作数指的是包含受到操作码作用的信息的处理器100的寄存器。例如,例如,操作码可能是各种类别,诸如算法、数据传送、逻辑、条件分支或无条件转移。如上所述,在实施例中,处理器100被设计成为以特殊方式响应于条件分支操作码。操作码通常提供在不引起线程分歧的情况下可以并行执行的指令的顺序。然而,由于条件分支操作码可以以多种方式解决,当执行条件分支操作码时,它可导致线程分歧,并且不大可能立即解决条件分支的影响。因此,为了在发生条件分支时继续并行执行,处理器100通过使用多个前端单元120继续处理并行执行,直到线程分歧被解决。
由前端单元120获取的指令的解码允许处理器100来解释所获取的指令,以使指令可以执行。如上所讨论,如果指令可用,则前端单元120通过从指令高速缓存110请求指令来获取指令,或者如果有高速缓存缺失,则从主存储器(未示出)获取指令。然后,前端单元120解码指令以基于操作码确定正在执行什么操作并基于操作数确定它所操作的数据。通常,操作数的意义基于对应于操作码的操作而变化。例如,对于“相加”操作码,将其操作数中的两个相加,并将总和置于第三个操作数中。可选择地,对于“加载字”操作码,操作数可表示加载的存储器地址和存储存储器信息的目的寄存器。
处理元件140处理从前端单元120输入的指令,并且有至少两个处理元件(PE_0,…,和PE_N-1)140。处理元件140自主处理指令,因此处理元件140依靠前端单元120以适当的方式管理分配指令,以使并行性不会导致任何不正确的结果。在示例中,存在多于前端单元120的数量M的数量N的处理元件140。当N大于M时,其创建M个前端单元120中的至少一个将解码的指令发送到多于一个的处理元件140的情况。因此,前端单元120管理并行性并管理处理元件140之间的关系。
多个处理元件140可利用单个前端单元120或者两个或更多个前端单元120来处理指令。当多个处理元件140使用单个前端单元120时,处理器100用作SIMD处理器。当多个处理元件140使用两个或更多个前端单元120时,处理元件100用作MIMD处理器。在实施例中,处理器100具有调节前端单元120的数量以优化处理器100的性能的能力,所述前端单元120积极操作解码指令并将其发送到多个处理元件140。
指令高速缓存110和处理元件140之间的数据流基于各个指令如何通过前端单元120发送以被处理元件140处理而变化。此外,数据流基于发送的指令的类型而变化。例如,普通的指令只是按顺序执行,并且通过前端单元120被并行分配到处理元件140。然而,如果有条件分支指令,则前端单元120可能有必要确定如何管理处理元件140以在最小化延迟和减速的同时确保正确的结果。
在示例中,根据实施例的配置,控制器150动态选择前端单元120以从指令高速缓存110获取指令并解码获取的的指令,并选择处理元件140以利用被选择的前端单元120来处理指令。因此,控制器150用作允许前端单元120和处理元件140之间的动态映射的媒介物。由于由控制器150提供的动态映射,处理器100能够结合SIMD模式和MIMD模式的优势。如果SIMD模式是足够的,由于缺乏分支和线程分歧,控制器150在单个前端单元120和处理元件140之间发送指令,因此处理器100以与SIMD模式处理器相似的方法操作。然而,控制器150也可以在前端单元120和处理元件140之间动态映射指令。在这种情况下,处理器100以MIMD模式操作。由于控制器150能够动态选择哪个前端单元120将指令发送到哪个处理元件140,因此控制器150能够适应如何以提高性能的方式处理指令,这是因为处理器100能够以降低低效率和提高处理速度的方式更好地管理资源。例如,控制器150能够通过将激活的前端单元120的数量最小化至特定处理任务所需的数量,来最小化处理开销。然而,控制器150也能够激活所需要的前端单元120,因此当处理任务要求多个前端单元120时,控制器150能够激活另外的前端单元120。例如,因为没有线程分歧或分支,控制器150最初使用单个前端单元120,因此,处理器用作SIMD处理器。然而,当处理器100遇到分支指令时,控制器150能够动态激活前端单元120,从而可以并行追踪多个分支,以使处理器100不需要等待,从而当遇到线程分歧时避免停留在SIMD模式中的潜在缺点,所述潜在缺点可能需要在等待解决单个线程分歧的同时推迟并行处理的全过程。下面进一步讨论用于优化处理的前端单元的动态激活和去激活。
在实施例中,通过前端单元120的动态选择的资源管理包括单指令流多数据流(SIMD)模式和多指令流多数据流(MIMD)模式之间的改变模式。这些模式中的每种模式指的是处理并行计算的不同的方法。在SIMD处理中,有同时对多个数据点执行相同的操作的多个处理元件。因此,SIMD包括数据级并行性,其中所有的数据都以相同的方法处理。然而,由于为了要以相同的方法处理所有的数据,如果存在分支,则由于SIMD需要一起处理数据,其它线程可能需要等待分歧线程来赶上,因此,当发生分支或线程分歧时SIMD方法产生问题。在MIMD处理中,使用MIMD的机器具有自主和异步运行的多个处理器。在MIMD中,每个处理器的处理独立于其他处理器的处理,不同的处理器可对不同的多条数据执行不同的指令。然而,当由MIMD提供的独立性允许每个处理器执行其功能而不需要考虑其他处理器的操作时,为了允许处理器以这种方式独立运行,有必要包括额外的基础设施,以确保处理器不干扰彼此的操作。例如,MIMD的存储器架构可能需要能够防止处理器在访问存储器时互相干扰的共享存储器模型或分布式存储器模型。
正如上面所讨论的,这些模式中的每个更好地适应于特定的使用方案。MIMD模式提供同时处理分歧线程的能力,这样允许更好的并行性,特别是对于分支代码,但是由于MIMD可能需要对分离线程所需的功能的足够的支持,导致一定的开销。因此,前端单元120的动态选择可包括SIMD模式和MIMD模式之间的选择性转换,从而当使用导致性能改进的MIMD时可调用MIMD。例如,一些实施例以SIMD模式开始执行,当执行遇到分支和线程分歧时,基于诸如线程的数量、线程的特性、可用前端单元120的数量的因素,实施例激活仍然可以用来提供尽可能多的并行性的前端单元120。
例如,可以在任何执行线程都不分歧的情况下选择SIMD,因此在这种情况下,涉及MIMD的处理开销超过了使用MIMD所带来的并行处理效益。正如上面所讨论的,当有数据级平行性时,SIMD的适应性强。由于所有的处理元件140能够容易地从单个前端单元120接收同样的指令,因此,如果所有的处理元件140执行相同的操作,并且唯一的区别是处理元件140对不同的数据操作,则没有必要让多个前端单元120获取和解码指令。
在由于条件分支的线程分歧尚未发生或者所有的条件分支已经结束的情况下,控制器150设置以SIMD模式操作的处理器100的控制信息,在所述SIMD模式中,只有前端单元120被激活,所有的处理元件140通过使用当前激活的前端单元120来执行数据处理以处理数据。在这种情况下,所有的处理元件140执行相同、单个的指令。通过使用唯一被激活的前端,当管理从指令高速缓存110接收的指令时,处理器100不需要区分多个前端单元120,避免了在MIMD操作中发生的高前端单元成本。虽然使用多个前端单元120以允许处理元件140更自主地运行提供了在管理多个线程分歧时的优势,但是使用多个前端单元120产生对通过多个前端单元120对指令的前期管理和调度的需要,从而由可由于额外的开销而导致更多的处理器复杂性和潜在的减速。
在使用SIMD的示例中,可以预先指定单个前端单元120,例如,可将控制信息设置为如图1中所示的激活的前端单元120FEU_0以用于处理数据。当有单个激活的前端单元120并且因此处理器100以SIMD模式操作时,单个激活的前端单元120是从指令高速缓存110获取和解码指令的唯一的前端单元120,其他前端单元120是失活的,并且不与指令高速缓存110相互作用。相反,处理器100如激活的前端单元120是它唯一的前端单元120一样简单地操作。然而,在实施例中,任何前端单元120可以被选择为单个前端单元120。此外,在一些实施例中,单个前端单元120不是预先制定的,是动态地确定的。例如,如果特定的前端单元120更快连接到处理器100的其他部分,则可以动态地选择特定的前端单元120。作为另一示例,如果存在区分前端单元120与其他前端单元的前端单元120的一些区别功能,则特定前端单元120可以被选择。
如果当前激活的前端单元120检测到条件分支指令,则当从指令高速缓存110获取指令并对获取的指令解码,并且由于条件分支指令而发生线程分歧时,控制器150可以设置以多指令流多数据流(MIMD)模式操作处理器100的控制信息,所述模式中,另外激活未激活的有效的前端单元120中的至少一个,并且处理元件140使用两个或更多个激活的前端单元120以一起并行处理指令。通过使用多个激活的前端单元120,控制器150能够使前端单元120独立地跟踪执行的单独分支,直到执行的线程分歧恢复统一的执行流程。由于MIMD模式提供了一种通过同时跟踪多个线程的执行来处理条件分支指令的方法,因此,一旦已发生条件分支指令和线程分歧,适合使用MIMD模式。控制器150从处理元件140接收由当前激活的前端单元120检测的处理条件分支指令的结果,并确定是否基于接收的结果发生线程分歧,并确定是否另外激活另一前端单元120。例如,处理条件分支指令可能会导致布尔性质值,诸如“真”或“假”。然而,条件分支指令可以以其他形式提供相似的结果。例如,条件分支指令的返回值可以是“0”或“1”,其中“0”可表示“假”并且“1”表示“真”。可选择地,条件分支指令可以返回是否分支或不分支的枚举确定。本质上,条件分支指令以两种可能的方法指导连续执行。在一种情况中,程序的执行在没有分支的情况下继续。在这种没有发生分支的情况中,可以继续执行,而不需要要求涉及另一个前端单元。在其他可能的情况中,由于条件分支指令,执行分支从主要的执行路径分叉。当执行分支时,有多于一个的将被执行的潜在指令集。因此,由于额外的前端单元120可以彼此独立和异步地执行这些额外的指令,额外的前端单元120能够管理这些额外的指令集,避免了在SIMD模式中要求执行一次进行一个分支的相互依赖性。
响应于被激活的至少一个额外的前端单元120,控制器设置控制信息,以使已经分配到当前激活的前端单元120或者还没有被分配到任何前端单元120的一些处理元件140可以被重新分配到额外激活的前端单元120。通过将处理元件140重新分配到新的前端单元120,控制器150就能够控制从多个前端单元120到合适的处理元件140的信息流,以使适当地并行执行由前端单元120检索的指令,而在线程分歧期间不相互干扰。
内部连接器130将指令从前端单元120发送到处理元件140。例如,内部连接器130可以使用由控制器150设置的控制信息来确定处理元件140以处理当前激活的前端单元120的指令,并将指令传送到确定的处理元件140。控制器150和内部连接器130相互作用以确定哪些前端单元120被激活以及如何将用于执行的指令从前端单元120传送到处理元件140。
在示例中,图1中的内部连接器130包括从M个前端单元120到N个处理元件140的多路复用器。换句话说,内部连接器将N个处理元件140的处理元件140连接到M个前端单元120中的一个,处理元件140从所述M个前端单元120中的一个接收指令。为了使用内部连接器130中的这种多路复用器,多路复用器接收多路复用器选择(mux-selection)信息,所述信息指示来自M个前端单元120中的一个的哪个输入信号被连接到接收信号的N个处理元件140的哪个输出。当控制器150检测到分支指令时,它提供这种连接信息,从而将前端单元120映射到处理元件140。
图2是示出如何在处理器中处理条件分支的示例的示图。例如,图2示出如何以SIMD模式处理条件分支,以及如何以以MIMD模式处理相同的条件分支。图3是示出根据实施例的如何在处理器中处理条件分支的示例的示图。图3与图2不同的一种方法在于在实施例中,处理器使用提供SIMD或MIMD模式的多个优点同时最小化它们的缺点的混合方法,而不是仅仅根据SIMD或MIMD方法处理条件分支。因此,提供图2作为比较的基础,示出SIMD和MIMD模式如何自主操作以帮助阐明,并示出由实施例提供的多模式处理如何包含SIMD和MIMD模式功能的特征。图2示出SIMD处理器210和MIMD的处理器230以及它们如何执行分支代码块260。
图2的左手边示出SIMD模式执行构造,其中,八个处理元件利用单个前端单元来处理获取和解码的指令。图2示出SIMD模式处理器210。SIMD处理器210使用一个FEU212。在220中示出通过SIMD处理器210的数据流,通过八个处理元件0到7来跟踪执行。在发生条件分支之前(行0到行7)和在所有条件分支终止之后(行100及以下),八个处理元件0到7并行处理数据,从而可以实现高处理性能。由于在代码的这些部分没有条件分支,没有必要单独执行线程和减速执行。因此,所有的处理元件可以同时处理这些指令。与此同时,当发生条件分支时(行8至行99),由于一些处理元件已经按顺序处理指令,因此处理性能下降。例如,第一条件分支执行代码的行8至行19。在这个分支解决之前,下一个处理元件无法执行由来自行20至行44的代码定义的下一个条件分支。另一个条件分支遵循从行45到行69以及从行70到行99。图2示出可由可以通过处理元件2、3和7同时执行的从行45至行69的代码定义的条件分支和由可以通过处理元件4、5和6同时执行的从行70至行99的代码定义的分支。在图2中,由于在SIMD模式下,只有分支的子集能够在有条件分支的时候执行,一些分支需要在这些分支能够继续运行之前知道其他分支的结果。如图2中所示,有时多个处理元件处理来自相同的分支的指令,并能够同时执行这些指令。例如,图2示出通过处理元件2、3和7同时执行的行45到行69中提供的指令,以及通过处理元件4、5和6同时执行的在行70至行99中提供的指令。因此,即使有SIMD模式的条件分支,有可能是多个处理元件能够同时执行它们的处理并提供并行性。然而,如行8至行19和行20至行40所示,也有可能在SIMD模式下所有执行等待单个条件分支的解决。因此,SIMD模式有时能够使用多个处理元件来并行执行,但有时SIMD模式要求一些处理元件的执行等待将解决的在另一个处理元件上的条件分歧的执行。
图2的右手边示出MIMD模式执行构造,其中八个处理元件和八个处理元件0至7用于处理指令。图2示出MIMD模式处理器230。MIMD处理器230使用八个前端单元270。在250中示出通过MIMD处理器230的数据流。由于有八个前端单元270和八个处理元件,通过获取和解码仅用于处理元件的指令的各个前端单元对每个处理元件反馈指令。因此,每个前端单元/处理元件对(pair)能够完全独立于所有其他的对来处理数据和执行指令,因此,对于任何对没有等待其它线程解决在执行线程本身时的执行的必要。例如,在MIMD模式下,八个前端单元270独立地处理每个条件分支的指令,因此可以快速处理条件分支。因此,图2示出在250中所有的前端单元270如何同时执行行0至行7。FEU0使处理元件0执行第一条件分支,FEU1使处理元件1执行第二条件分支,FEU2、3和7使处理元件2、3和7执行第三条件分支,FEU4、5和6使处理元件4、5和6执行第四条件分支。随后,在条件分支被解决之后,所有的前端单元继续一起执行。虽然MIMD模式不完全消除当解决条件分支时一定程度的延迟的必要,但是由于每个前端单元能够独立管理其处理元件,因此通过将其与其他前端单元/处理元件对一起管理,没有必要等待每个处理元件在解决其他分支之前解决其分支的部分。因此,虽然处理器可能潜在地需要等待最耗时的分支来解决,但是没有必要让处理器等待将在开始其他分支之前解决的其他分支。
然而,MIMD模式需要多个独立的前端单元来管理到处理元件的指令的单独提取和解码,因此增加处理器的设计复杂性和尺寸。由于这种限制,MIMD处理器往往具有比SIMD处理器更少的处理元件,以创建可控的设计复杂性和尺寸的处理器。在MIMD处理器中每个处理元件对应于自己的前端单元的要求意味着在SIMD中可控的多个处理元件可能在MIMD中是不可控的。这样的MIMD不仅需要许多处理元件,而且需要该数量的前端单元,因此,由于这个原因,具有给定数量的处理元件的MIMD比具有给定数量的处理元件的SIMD更加复杂、更大。因此,在设计SIMD模式处理器和MIMD模式处理器的方式中存在内在的权衡,这将导致在特定情况和使用实例中的每个模式的特定优点和缺点。
图3是示出如何处理包括四个前端单元FEU 0 312、FEU 1 314、FEU 2 316和FEU 3 318及八个处理元件0至7的处理器中的指令的示图。图3示出根据示例性实施例的示例使用实例。如图3中所示,实施例提供被称为“动态MIMD”的模式类型。例如,在310中提供动态MIMD处理器。在320中示出通过动态MIMD的数据流。在这种模式下,根据是否适合使用前端单元312、314、316和318,对前端单元312、314、316和318进行动态地激活或失活,以有效地处理分支代码的执行。因此,“动态MIMD”提供SIMD模式和MIMD模式处理之间混合的操作模式。在SIMD模式处理足够的情况下,“动态MIMD”处理器只使用一个前端单元进行操作。在其他情况下,它将有助于激活附加前端单元帮助允许当代码开始分支时的并行性,在分支期间逐步激活前端单元以允许这样的并行性。由于分支解决,可以使不必要的前端单元失活以最小化不必要的资源使用。因此,“动态MIMD”提供最大化平行性的能力,同时最小化开销和资源使用。
例如,实施例在以下的示例“动态MIMD”的方法中执行以下的操作。前端单元检测在线程之间潜在引起分歧的条件分支指令。然后,处理元件和控制器确定对应于线程的哪些处理元件跳转到分支目标程序计数器(PC)指令以及哪些处理元件必须转到下一个PC指令。跳转的处理元件被称为“已采用”处理元件,因为这些处理元件调用跳转,其他处理元件被称为“未采用”处理元件,因为这些处理元件不调用跳转。随后,如果有由处理元件执行的线程之间的分歧,则控制器将当前没有被激活的新前端单元分配到必须跳转到分支目标PC的处理元件。接下来,控制器更新用于内部连接器的连接信息。这里,控制器将启动信号和分支目标PC信息发送到新分配的前端单元。之后,前端单元检测指示应该将分歧的线程合并成一个单指令多线程(SIMT)线程的恢复指令。然后,控制器更新用于内部连接器的连接信息。最后,控制器发送禁用信号并使前端单元失效。
针对恢复指令,如果当解码恢复指令时前端单元检测到恢复指令,则前端单元等待,直到被分配到其他前端单元的分歧线程到达它们的恢复指令。控制器从两个分歧的前端单元接收信息,并使它们中的一个失活。
参照图3,最初只有FEU 0 312被激活。虽然图3示出最初激活FEU 0 312的说明性示例,但是任何一个前端单元可以是最初激活的前端单元。FEU 0312被所有八个前端单元0至7使用,以处理指令(行0至行7),直到检测到条件分支。即,FEU 0 312获取和解码用于所有处理元件0至7的指令。由于没有分支,每个处理元件并行处理从FEU0312接收的相同的指令。直到这个时候,处理器使用SIMD方法有效地运作。虽然有其他前端单元出现在MIMD处理器310,但是这些前端单元是失活的。因此,对于其他前端单元没有开销,并且因为前端单元是失活的,有效的单个前端单元像如它是处理器中存在的唯一前端单元一作操作。由于没有不存在有效的其他前端单元,没有必要在这个时候协调多个前端单元之间的活动。没有必要多于一个的前端单元,由于没有分支,因此所有处理可以并行发生,而无需要求多个前端单元的单独的获取和解码。
然而,分支发生在图3的示例代码之后,在第8行开始。响应于由FEU0 312从指令高速缓存110获取的在第8行的条件分支指令(if(c.0==c.1)),处理元件0处理条件分支指令(if(c.0==c.1))。响应于由FEU 0 312获取的在第9行的后续的条件分支指令(if(d.0==d.1)),处理元件0处理所获取的条件分支指令(if(d.0==d.1))。在这种情况下,如果发生线程分歧,则在其他有效前端单元FEU 1 314、FEU 2 316和FEU 3 318之中激活FEU 1 314。然而,FEU 1的激活是任意的选择,并且另一个有效的前端单元(诸如FEU 2316和FEU 3 318)可以代替FEU 1 314被激活。通过使用激活的FEU 1 314,处理元件1执行条件分支指令(即,ELSE指令),所述指令与条件分支指令(if(d.0==d.1))及其以下指令配对。因此,可以使用这两个前端单元(FEU0 312和FEU 1 314)来继续执行,而不需要等待要解决的线程分歧。在示例实施例中,图3示出从每个前端单元FEU 0 312、FEU 1 314、FEU 2 316和FEU 3 318的角度获取的代码。如图3中所示,针对初始分支,从FEU 0 312的角度,基于c.0等于c.1并且d.0等于d.1的分支方案获取代码。从FEU 1 314的角度,基于c.0等于c.1但d.0不等于d.1的方案提取代码。FEU 0 312获取并解码用于处理元件0的这些指令,FEU 1 314获取并解码用于处理元件1的这些指令。然而,由于多个前端单元可用,FEU 1 314能够将指令发送到处理元件1以立即并行处理,没有必要让处理元素0在处理元素1完成处理之前完成其处理。
以类似的方式,当由于处理由FEU 0 312在第8行获取的条件分支指令(if(c.0==c.1))而发生线程分歧时,FEU2 316被激活并且处理元件2、3和7通过使用激活的FEU 2 316执行与条件分支指令(if(c.0==c.1))和其下列的指令(至行34)配对的条件分支指令(else if(c.0==c.2))。此外,如果当FEU 2 316执行第9行的条件分支指令(else if(c.0==c.2))时发生线程分歧,FEU 3 318被激活并且处理元件4、5和6执行与条件分支指令(else if(c.0==c.2))和其下列的指令(至行39)配对的条件分支指令(即,else指令)。因此,前端单元FEU 0 312、FEU 1 314、FEU 2 316和FEU 3 318中的每一个由于线程分歧而逐步地被激活,并且变得有利于激活每个前端单元。另外,每个前端单元能够为处理元件的族提供获取和解码。例如,FEU 2 316能够为处理元件2、3和7获取和解码相同的指令,因为所有的这些处理元件与在由FEU 2 316管理的代码区中的相同的代码对应,因此在实施例中,这些处理元件并行操作而无需使用单独的前端单元来获取和解码用于处理元件的指令。
如图3所示,处理器100动态地激活前端单元120(图3示出四个前端单元120的示例集,包括FEU 0 312、FEU 1 314、FEU 2 316和FEU 3 318),以根据由代码中的条件分支产生的线程分歧的发生来处理指令,从而实现有效的数据并行性和条件分支处理。例如,控制器150根据是否合适激活前端单元120,来将信号发送到前端单元120。此外,控制器150可以包括包含用于前端单元120的运行参数的寄存器160。正如以上所述,一些实施例通过允许前端单元120为一组执行相同代码的处理元件140提供并行指令而不是要求每个处理元件140具有其各自的前端单元来变得更加有效。由于前端单元120被动态激活,因此它们在被需要时是可用的,但是由于前端单元120除了被需要的时候之外是失活的,因此在另一方面,开销被最小化。
如图1所示,控制器150可以包括至少两个寄存器160。例如,控制器150包括多个寄存器160,其中,以和存储与各自的前端单元FEU_0到FEU_M-1120相关的控制信息的前端单元120的数目M相同的数量来提供所述多个寄存器160。因此,每个寄存器160存储定义运行参数的信息并且提供使控制器150能够控制前端单元120中的一个的操作的临时存储区。
控制信息可以包括关于每个前端单元120的信息,诸如处理元件分配信息、已占用程序计数器(PC)信息、空闲PC信息、返回PC信息和分支FEU信息。然而,控制信息可以也存储附加信息,并且也可以以不同的顺序存储关于每个前端单元120的信息。通常,PC指的是包含管理存取用于执行的程序的指令的存储器地址的寄存器。这里,使用包含在条件分支指令中的PC信息来获取已占用的PC信息162,并且PC信息162可以是例如通过将当前PC值和相对PC值相加而获取的值,其中,所述相对PC值指示指令响应于条件分支的布尔值为真而跳转到的相对位置。例如,当前的PC值可以存储当前指令的地址,并且相对PC值可以存储指示当分支时向前跳过多少指令的数目。空闲的PC信息163指示当前条件分支指令的下一个指令,并且使用相对返回PC信息来获取返回PC信息164,所述相对返回PC信息指示当包含在恢复指令中的条件分支被终止时指令返回的相对位置。
例如,如果分支FEU信息是连接信息,它会在FEU检测到条件分支指令或者恢复指令时被更新。分支FEU信息是指示哪个FEU将指令供应到处理元件的信息,并且它被用来配置内部连接器。
此外,如果没有检测到任何类型的分支,则在每个周期每个FEU将它的PC更新为PC+指令尺寸。例如,指令尺寸,可以是32位或者64位,取决于处理架构。可选择地,如果FEU检测到跳跃或条件分支指令,FEU将PC值更新为分支目标PC值,诸如当前的PC+相对PC值。更新PC值的这种方法使程序流适当地考虑分支而继续。
另外,分支FEU信息165是关于帮助管理处理从由于条件分支指令而发生的线程分歧产生的每个线程的每个前端单元120的信息。在前端单元120被激活以帮助处理条件分支指令的情况下,定义父前端单元和子前端单元之间的关系的关系信息可以被包括在分支FEU信息中。由于分支在线程分歧期间发展子分支,这种关于关系的信息允许处理器100调整前端单元120之间的关系。
返回参照图1,在与各自的前端单元120相关的控制器150中的每个寄存器160可以包括一个或者更多个区域161至165来存储以上所讨论的各自的多条控制信息。在这种情况下,为存储相应的前端单元120的处理-元件分配信息而被分配的寄存器中的一个的区域161可以被划分为和处理元件140的总数目一样多的多个位区域V0至VN-1。因此,在区域161中的每个位V0至VN-1可以与各自的处理元件140静态地映射以通过它们的设置值来指示是否将对应的处理元件140分配到前端单元120。例如,处理元件PE_0至PE_N-1可以与位区域V0至VN-1的位顺序地映射,并且控制器150可以将与被分配到前端单元120的处理元件140映射的位设置为“1”,并将剩下的位设置为“0”。因此,来自位区域161的每个位表示指示前端单元120是否在将指令发送到所述处理元件的布尔值。
如果一个前端单元120(例如,FEU 0)被预先设置为最初在SIMD模式下操作处理器100,控制器150激活前端单元120FEU0以使它能够获取和解码用于处理元件140的指令。每个处理元件140与寄存器160中的每个位区域V0至VN-1中的位映射以存储相关的处理元件分配信息。当位与将要处理当前激活的前端单元120FEU0的指令的处理元件140对应时,控制器150将这个位设置为“1”。例如,假定FEU0包括4个位,V0至V3。如果V0和V1被设置为“1”,并且V2和V3被设置为“0”,则这指示FEU0正在将指令提供到PE_0和PE_1,而不是到PE_2或者PE_3。
例如,在当前被激活的前端单元120FEU0解码从指令缓存110中获取的指令的同时检测到条件分支指令时,前端单元120FEU0基于包含在被检测到的条件分支指令中的PC信息将已占用的PC信息和空闲的PC信息发送到控制器150。在示例中,已占用的PC信息指的是与执行分支指令的采用的PC信息对应的PC信息,而空闲的PC信息指的是与未执行分支指令的未采用的PC信息相应的PC信息。响应于从激活的前端单元120FEU0接收已占用的PC信息和空闲的PC信息,控制器150可以分别在与前端单元120FEU0相关的寄存器160的已占用PC信息存储区162和空闲的PC信息存储区163中存储接收到的多条信息。通过存储所述多条PC信息,实施例可以确定可用于协调同时执行多个分支的程序流程的存储器地址。
例如,当有单独的当前被激活的前端单元120 FEU 0时,内部连接器130参照存储在寄存器160中的控制信息来识别被分配到当前激活的前端单元120 FEU 0的处理元件140,并将从前端单元120 FEU 0输出的指令发送到被识别的处理元件140。
处理元件140可以处理从内部连接器130接收的条件分支指令来确定从条件分支指令获取的处理结果,并将处理结果(“真”或“假”)发送到控制器150。
控制器150可以根据接收的处理结果来确定线程分歧的发生。例如,如果处理结果指示为“真”,那么控制器150确定没有发生线程分歧,并且被分配到当前激活的前端单元120 FEU 0的处理元件140移动到已占用的PC点以继续处理指令。在这种处理结果为“真”的情况下,“真”的结果被视为对不被视为分歧的条件分支指令的解。正如上面所讨论,已占用的PC点是与当条件分支指令不分歧时发生的下一个指令相应的存储器地址。
响应于处理结果为“假”,控制器150确定发生线程分歧。正如上面所讨论的,由于“假”结果被认为是分歧的结果,因此发生线程分歧。由于有线程分歧,现在需要激活新的前端单元120以并行处理分歧执行,从而避免任何额外的延时。控制器150激活新的前端单元120 FEU 1,更新与当前激活的前端单元120 FEU 0和新激活的前端单元120 FEU 1有关的寄存器的位区域,并将处理元件140分配到前端单元120 FEU 0和FEU 1。当控制器150执行这些操作时,它以影响前端单元120的设置的方式来改变以上所讨论的寄存器160,以使它们获取和解码指令,并适当地通过内部连接器130将它们发送到处理元件140。
此外,控制器150可将从当前的前端单元120 FEU 0接收的空闲的PC信息存储在与另外激活的前端单元120 FEU 1相关的寄存器160的已占用的PC信息存储区162中,并且可以控制处理元件140来移动到存储器中空闲的PC点并使前端单元120 FEU 1能够基于空闲的PC点处理指令。
此外,控制器150可以在当前激活的前端单元120 FEU 0的分支FEU信息165中将前端单元120 FEU 1设置为子FEU,并在与前端单元120 FEU 0对应的寄存器160的分支FEU信息存储区165中存储分支FEU信息。此外,控制器150可以在另外激活的前端单元120FEU1的分支FEU信息中将前端单元120FEU0设置为父FEU,并在寄存器160的分支FEU信息存储区165中存储分支FEU信息。因此,存储FEU0和FEU1之间的父子关系以使FEU0的分支FEU信息指示FEU1为FEU0的子类,并且FEU1的分支FEU信息指示FEU0是FEU1的父类。
检测到恢复指令的当前激活的前端单元120 FEU 0或另外激活的前端单元120 FEU 1可将基于包括在被检测的恢复指令中的PC信息的返回PC信息发送到控制器150。返回PC信息可以包括例如存储器地址,其中,在线程不再分歧之后从所述存储器地址重新开始执行。这种恢复指令指的是这种程序的一部分,在这之后线程不再分歧,因此不再需要由单独的执行路径处理。例如,控制器150在与已检测到恢复指令的前端单元120相关的寄存器的返回PC信息存储区中存储接收到的返回PC信息。例如,将返回PC信息存储在寄存器的164区域中。此外,控制器150可以使用已检测恢复指令的前端单元120的分支FEU信息来选择与前端单元120配对的前端单元120,然后保持待机,直到配对的前端单元120完成其条件分支的处理。通过使用该信息,可以协调处理,以使在继续执行之前条件分支的两边被完成。虽然使用多个前端单元120允许条件分支的不同边在无需彼此等待的情况下同时被执行,但是一些实施例要求在继续整个执行之前解决条件分支的两边。
在前端单元120检测到恢复指令从而条件分支终止的情况下,控制器150使前端单元120的另外激活的子前端单元120 FEU 1失活。由于条件分支结束,不再需要通过子前端单元120进行处理,并且再次使用唯一一个前端单元120来管理处理。此外,控制单元150可以设置控制信息,以使对与FEU 1相关的寄存器的位字段和与FEU 0相关的寄存器的位字段执行逻辑或操作,从而将已被分配到FEU 1的处理元件140重新分配到FEU 0。通过使用逻辑或操作,先前被分配到FEU 0或FEU 1的至少一个的任何处理元件140在对寄存器一起进行或操作之后被分配到FEU 0。通过这样做,被分配到FEU1的分歧线程可被重新整合到FEU 0,以在动态基础上最小化可操作的前端单元120的数量。
图4是示出根据示例性实施例的在处理器中支持多模式的方法的流程图。即,参照图4描述在图1的处理器1中动态支持多模式的方法。
首先,在操作410中,当处理器100的当前激活的前端单元120在从指令高速缓存110获取指令并解码指令的过程中检测到条件分支指令时,基于包括在条件分支指令中的PC信息,已占用的PC信息和空闲的PC信息被发送到控制器150。正如上面所讨论的,已占用的PC信息属于线程不分歧的情况,并且空闲的PC信息属于线程分歧的情况。这里,“当前激活的前端单元”最初指的是预先定义的前端单元120,并且如果在随后的操作中另外激活其他前端单元120,则“当前激活的前端单元”指的是任何被激活的前端单元120。
然后,被分配到当前激活的前端单元120的处理元件140从内部连接器130接收条件分支指令以处理已接收的条件分支指令,并且在操作420中将处理结果(“真”或“假”)发送到控制器150。内部连接器130可基于存储在与当前激活的前端单元120相关的寄存器160中的控制信息,确定将从当前激活的前端单元120输出的指令发送到的处理元件140。例如,正如讨论的,可以基于指定哪个处理元件与激活的前端单元120对应的位的区域161,选择将输出的指令发送到的处理元件140。
其后,在操作430中,控制器150从当前激活的前端单元120接收已占用的PC信息和空闲的PC信息。控制器在与当前激活的前端单元120相关的寄存器160的已占用的PC信息存储区160和空闲的PC信息存储区163中分别存储接收到的已占用的PC信息和空闲的PC信息,并且基于作为操作420的结果的与从处理元件140接收的条件分支指令对应的处理结果来确定是否发生线程分歧。
响应于确定没有发生线程分歧,例如,响应于来自操作420的处理结果为“真”,分配到当前激活的前端单元120的处理元件140移动到已占用的PC位置,因此在操作490中使用当前激活的前端单元120能连续处理下一条指令。在这种情况下,没有必要激活另一前端单元120,因此执行使用前端单元120的现有分配来继续进行。
响应于确定发生线程分歧,例如,响应于来自操作420的处理结果为“假”,控制器150在操作440中另外激活其他前端单元120。如果处理器100的全部的前端单元120被激活,则由于没有其他可用的前端单元120,因此控制器150可以控制当前被激活并且已经检测到条件分支指令的前端单元120继续处理指令。正如上面所讨论的,不同的实施例通常使用少于或者等于处理元件140的数量N的数量M个前端单元120。如果使用全部前端单元120,则有必要按顺序处理条件分支指令。
然后,在操作450中更新和设置关于当前激活的前端单元120和另外激活的前端单元120的控制信息。例如,将与各自的前端单元120相关的寄存器160的位字段更新为将处理元件140分配到各自的前端单元120。正如上面所讨论的,位字段中的每个位表示特定的前端单元120是否将指令发送到给定的处理元件140。此外,控制器150可存储将从当前激活的前端单元120接收到的空闲的PC信息,作为另外激活的前端单元120的已占用的PC信息,并且控制处理元件140移动到空闲的PC位置并处理指令。由于包括用于当前激活的前端单元120的进一步分支的空闲的执行路径是不包括用于另外激活的前端单元120的进一步分支的已占用的执行路径,因此保持当前激活的前端单元120的空闲的PC信息和另外激活的前端单元120的已占用的PC信息之间的这种关系。
此外,控制器150设置当前激活的前端单元120的分支FEU信息以使另外激活的前端单元120被指定为子FEU,并在与当前激活的前端单元120相关的寄存器160的分支FEU信息存储区165中存储设置的信息。此外,控制器150设置另外激活的前端单元120的分支FEU信息以使当前激活的前端单元120指定为父FEU,并在寄存器160的分支FEU信息存储区165中存储设置的信息。因此,分支FEU信息管理父子前端单元之间的关系,这帮助了当(诸如通过内部连接器130)在前端单元120和处理元件140之间传输指令时保护分支层次。
此后,在操作460中,响应于从检测到恢复指令的当前激活的前端单元120或者另外激活的前端单元120接收返回PC信息,控制器150使用发送返回PC信息的前端单元120的分支FEU信息来选择与已检测到恢复指令的前端单元120配对的前端单元120,并且保持待机,直到被确定的前端单元120完成处理条件分支。当接收到返回PC信息时,返回PC信息充当条件分支已被解决的信号。这构成了恢复指令,指示从发送这个指令的前端单元120的角度,条件分支完成。然而,正如指出,分支FEU信息提供关于在执行能够继续之前需要哪些其他前端单元120完成执行的信息。此外,控制器150可以在与已检测到恢复指令的前端单元120相关的寄存器160的返回PC信息存储区164中存储接收的返回PC信息。如果存储接收的返回PC信息,则它随后可能会被使用,以确保以适当的顺序继续程序流程。
然后,在操作470中,响应于配对的前端单元120检测到恢复指令并从而全部条件分支被终止,控制器150使另外激活的前端单元120失活。此时,不需要继续使用另外激活的前端单元120,因此只有那些被有效地使用的前端单元120继续执行。
在操作480中,设置控制信息,以对与失活的前端单元120相关的寄存器的位区域和与当前的前端单元120相关的寄存器的位区域执行逻辑或操作,从而将被分配到失活的前端单元120的处理元件140重新分配到当前激活的前端单元120。正如上面所讨论的,将被分配到失活的前端单元120的任何处理元件140重新分配到当前激活的前端单元120,而无需移除任何先前分配的处理元件140。
在操作490中,控制器150控制当前激活的前端单元120继续处理下一个指令。例如,当前激活的前端单元120可以继续获取下一个要被处理的指令,并且可以重复地执行在操作410之后的操作。
能够支持多模式的处理器的示例和相关的多模式支持方法可以在执行数据并行处理时提供优势。根据实施例,可以允许处理元件动态地共享前端单元,并允许处理器在SIMD和MIMD执行之间转换模式,从而减少前端单元损耗并增强处理速度。
可以使用硬件组件来实现在这里所描述的设备和单元。硬件组件可以包括,例如,控制器、传感器、处理器、发生器、驱动器,和其他等效的电子组件。硬件组件可以使用一个或更多个通用的或专用的计算机来实现,诸如,例如,处理器、控制器和算术逻辑单元、数字信号处理器、微型计算机、现场可编程阵列、可编程逻辑单元、微处理器或者任何其他能够以定义的方式响应和执行指令的装置。硬件组件可以运行操作***(OS)和运行在OS上运行的一个或多个软件应用。硬件组件也可以响应于软件的执行来存取、存储、操作、处理和创建数据。为了简便的目的,处理装置的描述被用作单数;然而,本领域技术人员将会领会处理装置可以包括多个处理元件和多种类型的处理元件。例如,硬件组件可以包括多个处理器或者一个处理器和一个控制器。此外,不同的处理构造是可行的,诸如并行处理器。
为了独立地或者共同地指示或者构造根据需要运行的处理装置,上述方法可以被编写为计算机程序、一段代码、指令或者它们的一些组合。可以在能够将指令或者数据提供给处理装置或者能够被处理装置解释的任何类型的机器、组件、物理或者虚拟装备、计算机存储介质或者装置中,永久或者暂时地包含软件和数据。软件也可以分布在联网的计算机***上,从而以分布式的方式存储和执行软件。具体地讲,可以通过一个或者更多个非暂时性计算机可读记录介质来存储软件和数据。介质可以也包括,单独的软件程序指令、数据文件、数据结构等或者它们的组合。非暂时性计算机可读记录介质可以包括可以存储其后可以由计算机***或处理装置读取的数据的任何数据存储装置。非暂时性计算机可读记录介质的示例包括只读存储器(ROM)、随机存取存储器(RAM)、光盘只读存储器(CD-ROMs)、磁带、USBs、软盘、硬盘、光学记录介质(例如,CD-ROMs或DVDs)和PC接口(例如,PCI、PCI-express、WiFi等)。此外,基于附图的流程图和框图以及如这里提供的它们相应的描述,本领域的技术程序员能够解释用于完成这里所公开的示例的功能程序、代码和代码段。
只作为简单的说明,这里所描述的终端/装置/单元可以指的是移动装置诸如,例如,蜂窝电话、智能电话、可穿戴式智能装置(诸如,例如,戒指、手表、眼镜、手镯、脚踝架、腰带、项链、耳环、头带、头盔、嵌入到衣服里的装置等)、个人计算机(PC)、平板个人计算机(平板)、平板手机、个人数字助理(PDA)、数码相机、便携式游戏机、MP3播放器、便携式/个人多媒体播放器(PMP)、手持电子书、超移动个人计算机(UMPC)、便携式笔记本计算机、全球定位***(GPS)导航以及诸如高清电视机(HDTV)、光盘播放器、DVD播放器、蓝光播放器、机顶盒或与这里所公开的一致的能够无线通信或者网络通信的任何其它装置的装置。在一个简单示例里,可以将可穿戴的装置自行安装在用户的身体上,诸如,例如,眼镜或者手镯。在另一个简单示例中,可以通过附戴装置将可穿戴的装置安装在用户的身体上(诸如,例如,使用臂章将智能电话或者平板计算机附戴到用户的手臂上,或者使用系索将可穿戴装置悬挂到用户的脖子周围)。
计算***或者计算机可以包括电连接到总线、用户接口和存储器控制器的微处理器,并且可以进一步包括闪存储器装置。闪存储器装置可以通过存储器处理器存储N位数据。N位数据可以是已被和/或将被微处理器处理的数据,并且N可以是等于或大于1的整数。如果计算***或者计算机是移动装置,电池可被提供给电源以操作计算***或计算机。对于本领域普通技术人员来说显而易见的是,计算***或者计算机可以进一步包括应用芯片、相机图像处理器、移动动态随机存取存储器(DRAM)和对于本领域普通技术人员公知的包括在计算***和计算机中的任何其他装置。存储器控制器和快闪存储器装置可以构成使用非易失存储器来存储数据的固态驱动器或磁盘(SSD)。
虽然已在上面描述多个实例。然而,将会理解可以进行各种修改。例如,如果以不同的顺序执行所描述的技术和/或如果所描述的***、体系结构、装置或电路中的组件以不同的方式结合和/或由其他组件或其等价物替换或补充,则可以实现合适的结果。因此,其他实施方式在权利要求的范围内。虽然本公开包括特定实施例,但是本领域普通技术人员应当理解,在不脱离权利要求和其等同物的精神和范围的情况下,可以在这些示例中进行形式和细节上的各种改变。这里所描述的示例将仅以描述性的意义被考虑,而不是为了限制的目的。在每个示例中的特征或方面的描述被认为是适用于其他示例中的类似的功能或在其他方面。如果所描述的技术以不同顺序被执行,和/或如果所描述的***、体系结构、装置或电路中的组件以不同的方式结合和/或由其他组件或其等价物替换或补充,则可以实现合适的结果。因此,本公开的范围不是由具体实施方式来限定,而是由权利要求及其等同物来限定,在权利要求及其等同物范围内所有变化被解释为包括在本公开中。
Claims (26)
1.一种处理器,所述处理器包括:
多个前端单元;
多个处理元件,其数量大于前端单元的数量;
控制器,被构造为确定是否由于由前端单元检测的条件分支指令而发生线程分歧,并且响应于确定发生线程分歧,被构造为使用多个当前激活的前端单元来设置控制信息以控制处理元件处理指令,或者,响应于确定没有发生线程分歧,被构造为使用一个当前激活的前端单元来设置控制信息以控制处理元件处理指令。
2.根据权利要求1所述的处理器,所述处理器还包括:
内部连接器,被构造为基于控制信息确定哪个处理元件将用于处理当前激活的前端单元中的一个前端单元的指令,并且将所述指令发送到确定的处理元件。
3.根据权利要求1所述的处理器,其中,所述控制器包括与各自前端单元相关的多个寄存器,并且被构造为存储各自对应的前端单元的控制信息。
4.根据权利要求3所述的处理器,其中,所述控制信息包括各自前端单元的处理元件分配信息。
5.根据权利要求4所述的处理器,其中,所述多个寄存器中的每个寄存器包括与处理元件的总数一样多的位区域,其中,所述位区域用于存储与所述多个寄存器中的每个寄存器对应的前端单元的处理元件分配信息。
6.根据权利要求1所述的处理器,其中,所述控制器通过从处理元件接收对由当前激活的前端单元中的一个前端单元检测的条件分支指令进行处理的结果来确定是否发生线程分歧,并且,如果确定发生线程分歧,则另外激活未激活的前端单元中的一个前端单元。
7.根据权利要求6所述的处理器,其中,所述控制器将一些处理元件分配到另外激活的前端单元,并在与另外激活的前端单元相关的寄存器中存储关于分配的分配信息。
8.根据权利要求6所述的处理器,其中,响应于当前激活的前端单元和另外激活的前端单元完成条件分支的处理,控制器使另外激活的前端单元失活,并使分配到另外激活的前端单元的处理元件重新分配到当前激活的前端单元。
9.一种用于支持多模式处理的方法,包括:
在处理器的当前激活的前端单元,检测条件分支指令;
在处理器的控制器,基于检测到的条件分支指令确定是否发生线程分歧;
响应于确定发生线程分歧,另外激活未激活的前端单元中的一个前端单元;
在控制器,设置控制信息,以使处理元件处理从激活的前端元件接收的指令。
10.根据权利要求9所述的方法,其中,所述处理器包括多个前端单元和多个处理元件,其中,处理元件的数量大于前端单元的数量。
11.根据权利要求9所述的方法,其中,确定是否发生线程分歧的步骤还包括从处理元件接收对条件分支指令进行处理的结果,并基于接到收的结果确定是否发生线程分歧。
12.根据权利要求9所述的方法,其中,所述控制器还包括与各自前端单元相关的寄存器,并在寄存器中存储各自对应的前端单元的控制信息。
13.根据权利要求12所述的方法,其中,所述控制信息还包括各自前端单元的处理元件分配信息。
14.根据权利要求13所述的方法,其中,所述多个寄存器中的每个寄存器包括和处理元件的总数一样多的位区域,其中,所述位区域用于存储与所述多个寄存器对应的前端单元的处理元件分配信息。
15.根据权利要求14所述的方法,其中,设置控制信息的步骤还包括:设置与另外激活的前端单元相关的寄存器的位区域的位值,其中,位值对应于分配到另外激活的前端单元的处理元件。
16.根据权利要求9所述的方法,还包括:
在控制器确定由当前激活的前端单元和另外激活的前端单元两者处理的条件分支是否终止;
响应于确定条件分支全部终止,使另外激活的前端单元失活;
设置控制信息,以将分配到另外激活的前端单元的处理元件重新分配到当前激活的前端单元。
17.一种多模式处理器,所述多模处理器包括:
当前激活的前端单元,被构造为检测条件分支指令;
控制器,被构造为基于检测到的条件分支指令,确定是否发生线程分歧,并且响应于确定发生线程分歧,另外激活未激活的前端单元,并设置控制信息以使处理元件处理从激活的前端单元接收的指令。
18.根据权利要求17所述的处理器,还包括:
一个或更多个未激活的前端单元;以及
多个处理元件,其中,处理元件的数量大于前端单元的总数。
19.根据权利要求17所述的处理器,其中,确定是否发生线程分歧的步骤还包括:从处理元件接收处理条件分支指令的结果,并基于接收到的结果确定是否发生线程分歧。
20.一种多模式处理器,所述多模式处理器包括:
当前激活的前端单元,被构造为执行单独的条件分支;
控制器,被构造为确定条件分支是否全部终止,并且响应于确定条件分支全部终止,使至少一个前端单元失活。
21.根据权利要求20所述的处理器,其中,所述控制器还被构造为将失活的前端单元的处理元件重新分配到另一前端单元。
22.根据权利要求21所述的处理器,其中,所述处理器还包括与各自前端单元相关的寄存器中,并且在寄存器中存储各自对应的前端单元的控制信号的寄存器。
23.根据权利要求22所述的处理器,其中,所述控制信息还包括各自前端单元的处理元件分配信息。
24.根据权利要求24所述的处理器,其中,所述多个寄存器中的每个寄存器包括和处理元件的总数一样多的位区域,其中,位区域用于存储与所述多个寄存器对应的前端单元的处理元件分配信息。
25.根据权利要求24所述的处理器,其中,设置控制信息的步骤还包括:设置与另外激活的前端单元相关的寄存器的位区域的位值,其中,位值对应于分配到另外激活的前端单元的处理元件。
26.根据权利要求25所述的处理器,其中,通过在失活的前端单元和其他前端单元的位区域上执行逻辑或操作来执行重新分配的步骤。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR10-2013-0009326 | 2013-01-28 | ||
KR1020130009326A KR101603752B1 (ko) | 2013-01-28 | 2013-01-28 | 멀티 모드 지원 프로세서 및 그 프로세서에서 멀티 모드를 지원하는 방법 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103970511A true CN103970511A (zh) | 2014-08-06 |
CN103970511B CN103970511B (zh) | 2018-06-05 |
Family
ID=51224349
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410042215.XA Active CN103970511B (zh) | 2013-01-28 | 2014-01-28 | 能够支持多模式的处理器及其多模式支持方法 |
Country Status (4)
Country | Link |
---|---|
US (2) | US10120833B2 (zh) |
JP (1) | JP6400296B2 (zh) |
KR (1) | KR101603752B1 (zh) |
CN (1) | CN103970511B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2019157743A1 (zh) * | 2018-02-14 | 2019-08-22 | 华为技术有限公司 | 线程处理方法和图形处理器 |
CN111930428A (zh) * | 2020-09-27 | 2020-11-13 | 南京芯瞳半导体技术有限公司 | 一种条件分支指令的融合方法、装置及计算机存储介质 |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20170365237A1 (en) * | 2010-06-17 | 2017-12-21 | Thincl, Inc. | Processing a Plurality of Threads of a Single Instruction Multiple Data Group |
US10133572B2 (en) * | 2014-05-02 | 2018-11-20 | Qualcomm Incorporated | Techniques for serialized execution in a SIMD processing system |
US9690361B2 (en) * | 2014-12-24 | 2017-06-27 | Intel Corporation | Low-power context-aware control for analog frontend |
US10996959B2 (en) * | 2015-01-08 | 2021-05-04 | Technion Research And Development Foundation Ltd. | Hybrid processor |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6272616B1 (en) * | 1998-06-17 | 2001-08-07 | Agere Systems Guardian Corp. | Method and apparatus for executing multiple instruction streams in a digital processor with multiple data paths |
CN1716185A (zh) * | 2004-06-29 | 2006-01-04 | 英特尔公司 | 用于单指令、多数据执行引擎的条件指令 |
US7353369B1 (en) * | 2005-07-13 | 2008-04-01 | Nvidia Corporation | System and method for managing divergent threads in a SIMD architecture |
US7594095B1 (en) * | 2005-11-29 | 2009-09-22 | Nvidia Corporation | Multithreaded SIMD parallel processor with launching of groups of threads |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5212777A (en) * | 1989-11-17 | 1993-05-18 | Texas Instruments Incorporated | Multi-processor reconfigurable in single instruction multiple data (SIMD) and multiple instruction multiple data (MIMD) modes and method of operation |
JP3604029B2 (ja) | 1999-01-12 | 2004-12-22 | 日本電気株式会社 | マルチスレッドプロセッサ |
US6643763B1 (en) * | 2000-02-28 | 2003-11-04 | International Business Machines Corporation | Register pipe for multi-processing engine environment |
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 |
US7324112B1 (en) * | 2004-04-12 | 2008-01-29 | Nvidia Corporation | System and method for processing divergent samples in a programmable graphics processing unit |
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 |
CN101379481A (zh) | 2006-08-23 | 2009-03-04 | 日本电气株式会社 | 处理元件、混合模式并行处理器***、处理元件方法、混合模式并行处理器方法、处理元件程序、以及混合模式并行处理器程序 |
US8381203B1 (en) * | 2006-11-03 | 2013-02-19 | Nvidia Corporation | Insertion of multithreaded execution synchronization points in a software program |
US8677106B2 (en) * | 2009-09-24 | 2014-03-18 | Nvidia Corporation | Unanimous branch instructions in a parallel thread processor |
US8959319B2 (en) * | 2010-12-13 | 2015-02-17 | Advanced Micro Devices, Inc. | Executing first instructions for smaller set of SIMD threads diverging upon conditional branch instruction |
US9606808B2 (en) * | 2012-01-11 | 2017-03-28 | Nvidia Corporation | Method and system for resolving thread divergences |
-
2013
- 2013-01-28 KR KR1020130009326A patent/KR101603752B1/ko active IP Right Grant
-
2014
- 2014-01-28 US US14/165,881 patent/US10120833B2/en active Active
- 2014-01-28 CN CN201410042215.XA patent/CN103970511B/zh active Active
- 2014-01-28 JP JP2014013823A patent/JP6400296B2/ja active Active
-
2015
- 2015-01-27 US US14/606,240 patent/US20150143081A1/en not_active Abandoned
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6272616B1 (en) * | 1998-06-17 | 2001-08-07 | Agere Systems Guardian Corp. | Method and apparatus for executing multiple instruction streams in a digital processor with multiple data paths |
CN1716185A (zh) * | 2004-06-29 | 2006-01-04 | 英特尔公司 | 用于单指令、多数据执行引擎的条件指令 |
US7353369B1 (en) * | 2005-07-13 | 2008-04-01 | Nvidia Corporation | System and method for managing divergent threads in a SIMD architecture |
US7594095B1 (en) * | 2005-11-29 | 2009-09-22 | Nvidia Corporation | Multithreaded SIMD parallel processor with launching of groups of threads |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2019157743A1 (zh) * | 2018-02-14 | 2019-08-22 | 华为技术有限公司 | 线程处理方法和图形处理器 |
CN111712793A (zh) * | 2018-02-14 | 2020-09-25 | 华为技术有限公司 | 线程处理方法和图形处理器 |
CN111712793B (zh) * | 2018-02-14 | 2023-10-20 | 华为技术有限公司 | 线程处理方法和图形处理器 |
CN111930428A (zh) * | 2020-09-27 | 2020-11-13 | 南京芯瞳半导体技术有限公司 | 一种条件分支指令的融合方法、装置及计算机存储介质 |
CN111930428B (zh) * | 2020-09-27 | 2021-01-15 | 南京芯瞳半导体技术有限公司 | 一种条件分支指令的融合方法、装置及计算机存储介质 |
Also Published As
Publication number | Publication date |
---|---|
US10120833B2 (en) | 2018-11-06 |
US20150143081A1 (en) | 2015-05-21 |
JP2014146335A (ja) | 2014-08-14 |
KR20140097651A (ko) | 2014-08-07 |
KR101603752B1 (ko) | 2016-03-28 |
CN103970511B (zh) | 2018-06-05 |
JP6400296B2 (ja) | 2018-10-03 |
US20140215193A1 (en) | 2014-07-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103970511A (zh) | 能够支持多模式的处理器及其多模式支持方法 | |
CN103218209B (zh) | 控制分支预测逻辑的方法和装置 | |
CN101950259B (zh) | 用于执行事务的装置、***及方法 | |
CN106462395B (zh) | 多线程处理器架构中的线程等待 | |
US10346212B2 (en) | Approach for a configurable phase-based priority scheduler | |
CN110308982B (zh) | 一种共享内存复用方法及装置 | |
US9535833B2 (en) | Reconfigurable processor and method for optimizing configuration memory | |
CN108027766A (zh) | 预取指令块 | |
US20130091507A1 (en) | Optimizing data warehousing applications for gpus using dynamic stream scheduling and dispatch of fused and split kernels | |
CN103197953A (zh) | 推测执行和回滚 | |
CN104603749A (zh) | 在多线程处理***中执行子例程 | |
CN104583941B (zh) | 用于在多线程处理***中选择性激活恢复检查操作的方法和设备 | |
US11847497B2 (en) | Methods and apparatus to enable out-of-order pipelined execution of static mapping of a workload | |
CN104050032A (zh) | 用于有条件的屏障和急迫的屏障的硬件调度的***和方法 | |
CN102855121A (zh) | 分支处理方法与*** | |
US20110078418A1 (en) | Support for Non-Local Returns in Parallel Thread SIMD Engine | |
US11880715B2 (en) | Method and system for opportunistic load balancing in neural networks using metadata | |
KR102152735B1 (ko) | 그래픽 처리 장치 및 이의 동작 방법 | |
US20140013087A1 (en) | Processor system with predicate register, computer system, method for managing predicates and computer program product | |
US20130166887A1 (en) | Data processing apparatus and data processing method | |
US10877926B2 (en) | Method and system for partial wavefront merger | |
WO2021013727A1 (en) | Processor | |
US11237827B2 (en) | Arithemetic logic unit register sequencing | |
US20230131430A1 (en) | Compiler device, instruction generation method, program, compiling method, and compiler program | |
KR20240061650A (ko) | 셰이더 시스템에서 공동 작업의 효율적인 실행을 위한 시스템 및 방법 |
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 |