CN104583941A - 在多线程处理系统中选择性激活恢复检查操作 - Google Patents
在多线程处理系统中选择性激活恢复检查操作 Download PDFInfo
- Publication number
- CN104583941A CN104583941A CN201380041768.7A CN201380041768A CN104583941A CN 104583941 A CN104583941 A CN 104583941A CN 201380041768 A CN201380041768 A CN 201380041768A CN 104583941 A CN104583941 A CN 104583941A
- Authority
- CN
- China
- Prior art keywords
- instruction
- recovery
- counter value
- perform
- thread
- 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
- 238000012545 processing Methods 0.000 title abstract description 58
- 230000003213 activating effect Effects 0.000 title abstract description 42
- 238000000034 method Methods 0.000 claims abstract description 168
- 238000011084 recovery Methods 0.000 claims description 300
- 238000007689 inspection Methods 0.000 claims description 88
- 230000004913 activation Effects 0.000 claims description 73
- 230000004044 response Effects 0.000 claims description 70
- 238000004891 communication Methods 0.000 claims description 30
- 230000007420 reactivation Effects 0.000 abstract description 66
- 230000008569 process Effects 0.000 description 87
- 238000005516 engineering process Methods 0.000 description 41
- 238000011156 evaluation Methods 0.000 description 39
- 239000012190 activator Substances 0.000 description 26
- 238000010586 diagram Methods 0.000 description 26
- 238000012546 transfer Methods 0.000 description 19
- 238000013500 data storage Methods 0.000 description 16
- 238000000605 extraction Methods 0.000 description 9
- 230000001360 synchronised effect Effects 0.000 description 9
- 230000007704 transition Effects 0.000 description 9
- 230000009471 action Effects 0.000 description 7
- 230000005055 memory storage Effects 0.000 description 7
- 230000015572 biosynthetic process Effects 0.000 description 6
- 238000004364 calculation method Methods 0.000 description 5
- 230000009191 jumping Effects 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 238000012512 characterization method Methods 0.000 description 2
- 230000003247 decreasing effect Effects 0.000 description 2
- 239000000284 extract Substances 0.000 description 2
- 239000012634 fragment Substances 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000002411 adverse Effects 0.000 description 1
- 230000000712 assembly Effects 0.000 description 1
- 238000000429 assembly Methods 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000004040 coloring Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000013479 data entry Methods 0.000 description 1
- 230000005059 dormancy Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 238000002203 pretreatment Methods 0.000 description 1
- 230000001737 promoting effect Effects 0.000 description 1
- 230000008929 regeneration Effects 0.000 description 1
- 238000011069 regeneration method Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000001960 triggered 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30072—Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
-
- 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
-
- 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/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/3009—Thread control 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/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
-
- 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]
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)
- Executing Machine-Instructions (AREA)
- Debugging And Monitoring (AREA)
- Power Sources (AREA)
- Advance Control (AREA)
Abstract
本发明描述用于在单指令多数据SIMD处理系统中选择性地激活恢复检查操作的技术。描述一种处理器,其经配置以针对特定指令基于包含在所述指令中的指示是否针对所述指令执行恢复检查操作的信息,选择性地启用或停用恢复检查操作。还描述一种编译程序,其经配置以产生经编译代码,所述经编译代码在被执行时致使针对特定指令选择性地启用或停用恢复检查操作。本发明的所述技术可用于减少利用恢复检查操作管理经撤销激活的线程的再激活的SIMD系统的功率消耗及/或改善所述系统的性能。
Description
本申请案主张2012年8月8日提交的美国临时申请案第61/680,990号的权益,其整个内容以引用的方式并入本文中。
技术领域
本发明涉及多线程处理,且更确切地说,涉及用于管理多线程处理系统中的发散分支指令的技术。
背景技术
单指令多数据(SIMD)处理系统为包含对多个数据段执行相同指令的多个处理元件的一种类型的平行计算系统。SIMD系统可为独立计算机或计算系统的子系统。举例而言,一或多个SIMD执行单元可用于图形处理单元(GPU)中以实施支持可编程着色的可编程着色单元。
SIMD处理系统允许程序的多个执行线程以平行方式对多个处理元件进行同步执行,藉此增加需要对多个数据段执行相同操作集合的程序的处理量。因为每一线程对不同数据进行操作,所以若程序包含条件性分支指令,则有可能执行于系统中的一些线程可满足分支条件而执行于系统中的其它线程不满足所述条件。此指令可被称为发散分支指令,并致使SIMD系统不能够以同步方式对多个处理元件执行所有线程。
发明内容
本发明涉及用于处置发散分支指令的技术,且更确切地说,涉及用于响应于发散分支指令而管理可能经撤销激活的线程的再激活的技术。更确切地说,本发明涉及用于在单指令多数据(SIMD)处理系统中选择性地激活恢复检查操作的技术。此类技术可允许基于逐条指令选择性地启用或停用管理经撤销激活的线程的所述再激活的恢复检查操作。本发明的所述技术可用于减少利用恢复检查操作管理经撤销激活的线程的所述再激活的SIMD系统的功率消耗及/或改善所述系统的性能。
在一个实例中,本发明描述一种方法,其包含通过处理器执行指令,所述指令包含指示是否针对所述指令执行恢复检查操作的信息。所述方法进一步包含通过所述处理器针对所述指令基于包含在所述指令中的所述信息,选择性地启用或停用所述恢复检查操作。所述恢复检查操作为包含比较多个恢复计数器值中的每一者与相关联于所述指令的程序计数器值的操作。所述恢复计数器值中的每一者与执行于所述处理器上的多个线程中的相应的一者相关联。
在另一实例中,本发明描述一种装置,其包含经配置以执行指令的处理器,所述指令包含指示是否针对所述指令执行恢复检查操作的信息。所述处理器经进一步配置以针对所述指令,基于包含在所述指令中的所述信息,选择性地启用或停用所述恢复检查操作。所述恢复检查操作为包含比较多个恢复计数器值中的每一者与相关联于所述指令的程序计数器值的操作。所述恢复计数器值中的每一者与执行于所述处理器上的多个线程中的相应的一者相关联。
在另一实例中,本发明描述一种设备,其包含用于执行指令的装置,所述指令包含指示是否针对所述指令执行恢复检查操作的信息。所述设备进一步包含用于针对所述指令基于包含在所述指令中的所述信息选择性地启用或停用所述恢复检查操作的装置。所述恢复检查操作为包含比较多个恢复计数器值中的每一者与相关联于所述指令的程序计数器值的操作。所述恢复计数器值中的每一者与执行于处理器上的多个线程中的相应的一者相关联。
在另一实例中,本发明描述一种计算机可读存储媒体,其存储在被执行时致使一或多个处理器执行指令的指令,所述指令包含指示是否针对所述指令执行恢复检查操作的信息。所述指令进一步致使所述一或多个处理器针对所述指令基于包含在所述指令中的所述信息,选择性地启用或停用所述恢复检查操作。所述恢复检查操作为包含比较多个恢复计数器值中的每一者与相关联于所述指令的程序计数器值的操作。所述恢复计数器值中的每一者与执行于所述一或多个处理器上的多个线程中的相应的一者相关联。
在附图及下文描述中阐述本发明的一或多个实例的细节。本发明的其它特征、目标和优势将从所述描述及图式以及权利要求书而显而易见。
附图说明
图1为说明可用于实施本发明的选择性恢复检查激活技术的实例处理系统的框图。
图2为根据本发明更详细地说明图1的实例处理系统中的控制单元的框图。
图3为说明可用于实施本发明的选择性恢复检查激活技术的实例控制流模块的框图。
图4为说明可用于实施本发明的选择性恢复检查激活技术的另一实例控制流模块的框图。
图5为根据本发明特征化图4中所说明的控制流模块的示范性操作的状态转变表。
图6为说明可用于实施本发明的选择性恢复检查激活技术的实例计算系统的框图。
图7为说明根据本发明的用于选择性地激活恢复检查操作的实例技术的流程图。
图8为说明根据本发明的用于选择性地激活恢复检查操作的另一实例技术的流程图。
图9为说明根据本发明的用于执行恢复检查操作的实例技术的流程图。
图10为说明根据本发明的用于执行恢复检查操作的另一实例技术的流程图。
图11为说明根据本发明的用于产生选择性地激活恢复检查操作的经编译代码的实例技术的流程图。
图12为说明根据本发明的用于产生选择性地激活恢复检查操作的经编译代码的另一实例技术的流程图。
图13说明可在无需使用本发明的选择性恢复检查激活技术的情况下执行的实例程序。
图14为说明根据本发明的用于图13中的实例程序的实例执行序列的表。
图15说明可使用本发明的选择性恢复检查激活技术执行的实例程序。
图16为说明根据本发明的图15中的实例程序的实例执行序列的表。
具体实施方式
本发明涉及用于在单指令多数据(SIMD)处理系统中选择性地激活恢复检查操作的技术。具体来说,本发明的技术可允许基于逐条指令选择性地启用或停用管理撤销激活线程的再激活的恢复检查操作。本发明的技术可用于减少利用恢复检查操作以管理撤销激活线程的再激活的SIMD系统的功率消耗和/或改善所述系统的性能。
在SIMD处理系统中,可由包含单一程序计数器的单一控制流单元控制所有线程。这种情况可允许程序的多个执行线程以平行方式对多个处理元件进行同步执行,藉此增加需要对多个数据段执行相同操作集合的程序的处理量。然而,因为每一线程对不同数据进行操作,所以若SIMD处理系统的指令集架构(ISA)支持条件性分支指令,则有可能执行于系统中的一些线程可满足分支条件而执行于系统中的其它线程不满足所述条件。此分支指令可被称为发散分支指令。若出现发散分支指令,则经调度以用于一些作用中线程执行的下一指令可不同于经调度以用于其它作用中线程执行的下一指令。这种情况可致使SIMD处理系统不能够以同步步调一致方式执行所有线程。
用于处理发散分支指令的一种方法涉及撤销激活满足抑或不满足分支条件的所有线程,使得剩余作用中线程都经同步以执行相同下一指令。当在给定指令周期期间撤销激活线程时,所述线程并不在指令周期期间执行任何指令。因而,剩余线程可继续以步调一致方式执行。为控制此类撤销激活线程的再激活,可使用基于恢复计数器方法,所述方法涉及针对执行于处理系统中的每一线程分配恢复计数器,将用于每一撤销激活线程的恢复计数器设定为指示应再激活相应线程的程序计数器值的值,和在执行每一指令之前自动地执行恢复检查操作。针对每一指令自动地执行恢复检查操作的一个缺点为每次执行操作时恢复检查操作可消耗大量功率,且可显著耗用其花费以在SIMD处理系统中处理指令的时间。
根据本发明,描述用于允许基于逐条指令选择性地启用或停用恢复检查操作的技术。为在SIMD处理系统中适当执行程序,可未必需要在程序中针对每一指令执行恢复检查操作。举例而言,对于程序中的某些指令,编译程序可能够在程序执行期间确定将不需要在此类指令处发生线程再激活。因此,通过允许根据本发明的技术基于逐条指令选择性地启用和停用恢复检查操作,对于已确定将并不需要发生线程再激活的此类指令,可停用恢复检查操作。以此方式,相比于针对程序中的每一指令自动地执行恢复检查操作的处理系统,本发明的技术可用于减少SIMD处理系统的功率消耗和/或增加性能。
根据本发明的一些方面,描述经配置以基于指示是否针对指令执行恢复检查的包含在所述指令中的信息,选择性地启用或停用指令的恢复检查操作的处理器。若指令指示将针对所述指令执行恢复检查操作,则处理器可在用于执行指令的指令周期期间执行恢复检查操作。类似地,若指令并不指示针对所述指令执行恢复检查操作,则处理器可并不在用于执行指令的指令周期期间执行恢复检查操作。
恢复检查操作可为(例如)包含将多个恢复计数器值中的每一者与相关联于当前经处理指令的程序计数器值比较的操作。恢复计数器值中的每一者可与执行于处理器上的多个线程中的相应的一者相关联。若用于撤销激活线程的恢复计数器值等于当前程序计数器值,则可再激活线程。否则,若用于撤销激活线程的恢复计数器值不等于当前程序计数器值,则线程可保持为撤销激活。在执行恢复检查操作之前已处于作用中的任何线程可在执行恢复检查操作之后保持处于作用中。
根据本发明的额外方面,描述允许基于逐条指令选择性地启用或停用恢复检查操作的指令集架构(ISA)。举例而言,ISA可包含一或多个指令,其中指令中的每一者具有当执行相应指令时指定是否执行恢复检查操作的信息字段(例如,在与指令相关联的指令周期期间)。在一些实例中,信息字段可为取决于是否应针对指令执行恢复检查而设定抑或重设的单一位。
根据本发明的进一步方面,描述经配置以产生包含指示是否将针对特定编译指令执行恢复检查的信息的编译指令的编译程序。在一些实例中,编译程序可选择程序的一或多个指令作为在执行程序时将对其执行恢复检查操作的指令。响应于选择一或多个指令,编译程序可产生用于程序的编译代码,使得编译代码包含所选择一或多个指令且使得所选择一或多个指令包含指示将针对所选择一或多个指令执行恢复检查操作的信息。
作为一个特定实例,若指令为前向分支指令的目标指令、前向跳转指令的目标指令和若指令为后向分支指令之后的下一顺序指令,则编译程序可选择所述指令作为将对其执行恢复检查操作的指令。在这个特定实例中,对于未识别为前向分支指令或前向跳转指令的目标指令或识别为后向分支指令之后的下一顺序指令的任何其它指令,编译程序可确定对于此类指令并不需要执行恢复检查操作,这是因为将并不需要在此类指令处再激活程序执行期间撤销激活的任何线程。相比于针对每一指令执行恢复检查操作的系统,并不针对此类指令执行恢复检查操作可减少SIMD系统的功率消耗和/或改善性能。
用于管理发散线程的其它技术可包含使用堆栈以存储同步符记和发散符记。举例而言,每次出现允许发散的分支指令时,可将指示最初遇到分支指令时处于作用中的线程的同步符记推送到堆栈上。若分支指令为发散分支指令,则系统可将指示并不采取分支的线程和对应于并不采取分支的线程的下一指令的程序计数器值的发散符记推送到堆栈上。系统可继续执行确实采取分支的剩余线程直到遇到软件指令中指示系统从堆栈取出(即,拉取)发散符记的旗标为止。响应于从堆栈取出发散符记,系统可继续撤销激活确实采取分支的线程,并再激活且执行并不采取分支的线程。系统可继续执行并不采取分支的剩余线程直到遇到软件指令中指示系统从堆栈取出同步符记的另一旗标为止。响应于从堆栈取出同步符记,系统可继续再激活线程使得线程状态与最初遇到发散分支指令时相同。
然而,这种方法的一个缺点为基于堆栈的大小,系统可处置的嵌套式发散分支的数目是受限的。嵌套式发散分支可指在另一发散分支指令的采取路径抑或未采取路径的执行期间出现的发散分支。即,嵌套式发散分支为当已归因于先前出现的发散分支指令撤销激活一或多个线程且尚未再激活此类线程时出现的发散分支。
相反于上文所描述的用于再激活发散线程的基于堆栈方法,相对于堆栈,本发明中所描述的基于恢复计数器方法可使用有限集合的恢复计数器以控制撤销激活线程的再激活。因此,基于堆栈大小,此方法可处置的嵌套式发散分支的数目在概念上无限制且并不受限。此外,通过允许根据本发明的技术选择性地启用和停用恢复检查操作,相比于针对程序中的每一指令自动地执行恢复检查操作的处理系统,可减少处理系统的功率消耗和/或可增加处理系统的性能。
图1为说明可用于实施本发明的选择性恢复检查激活技术的实例处理系统10的框图。处理系统10经配置以平行方式执行程序指令。处理系统10包含控制单元12、处理元件14A到14D(统称为“处理元件14”)、指令存储装置16、数据存储装置18和通信路径20、22、24、26A到26D。通信路径26A到26D可统称为“通信路径26”。
在一些实例中,控制单元12和处理元件14可为形成可编程处理器或可编程处理器的部分的硬件组件。举例而言,控制单元12和处理元件14可一起形成图形处理单元(GPU)或GPU的部分。
处理系统10可实施于个人计算机、桌上型计算机、膝上型计算机、计算机工作站、平板计算装置、视频游戏平台或控制台、无线通信装置(例如,所谓的智能电话、移动电话、蜂窝式电话、卫星电话和/或移动电话听筒)、陆线电话、因特网电话、例如便携式视频游戏装置或个人数字助理(PDA)的手持式装置、个人音乐播放器、视频播放器、显示装置、电视、电视机顶盒、服务器、中间网络装置、主机计算机、处理和/或显示图形数据的任何其它类型装置或执行计算的任何类型装置中。
在一些实例中,处理系统10可为经配置以使用处理元件14执行程序的多个执行线程的单指令多数据(SIMD)处理系统。在此SIMD系统中,处理元件14可关于不同数据项一起一次处理单一指令。在完成执行与程序相关联的所有线程之后,可退除程序。
控制单元12经配置以控制处理系统10执行存储于指令存储装置16中的程序指令。对于程序的一或多个指令中的每一者,控制单元12可经由通信路径20从指令存储装置16检索指令、处理指令并确定待由处理系统10处理的下一指令。
在一些实例中,控制单元12可通过致使对处理元件14中的一或多者执行与指令相关联的操作而处理指令。举例而言,由控制单元12检索的指令可为指示处理系统10关于由指令所指定的数据项执行算术操作的算术指令,且控制单元12可致使处理元件14中的一或多者对指定数据项执行算术操作。在其它实例中,控制单元12可在无需致使对处理元件14执行操作的情况下处理指令。举例而言,指令可为未必要求由处理元件14执行操作的跳转指令。
控制单元12可通过经由通信路径22将指令提供到处理元件14而致使对处理元件14中的一或多者执行操作。指令可指定待由处理元件14执行的操作。提供到处理元件14的指令可相同或不同于从指令存储装置16检索的指令。在一些实例中,控制单元12可通过进行如下操作中的一或两者而致使对处理元件14的特定子集执行操作:激活应执行操作的处理元件14的特定子集,和撤销激活不应执行操作的处理元件14的另一子集。
控制单元12可通过经由通信路径22将相应激活和/或撤销激活信号提供到处理元件14中的每一者而激活和/或撤销激活处理元件14。在一些实例中,激活和/或撤销激活信号可包含在指定由处理元件14执行的操作的由控制单元12提供到处理元件14的指令中。在其它实例中,激活和/或撤销激活信号可与由控制单元12提供到处理元件14的指令分离。
控制单元12可使用处理元件14执行程序的多个执行线程。处理元件14中的每一者可经配置以针对多个线程中的相应的一者处理程序指令。举例而言,控制单元12可将执行线程中的每一者指派到用于处理线程的处理元件14中的个别一者。程序的不同执行线程可关于数据项集合中的不同数据项执行相同指令集。举例而言,处理元件14A可关于多个数据项中的第一数据项子集执行存储于指令存储装置16中的程序的第一执行线程,且处理元件14B可关于多个数据项中的第二数据项子集执行存储于指令存储装置16中的程序的第二执行线程。第一执行线程可不同于第二执行线程,且第一数据项子集可不同于第二数据项子集。
在一些实例中,控制单元12可在多个执行线程中激活并撤销激活个别线程。当控制单元12撤销激活线程时,控制单元12也可撤销激活和/或停用经指派以执行所述线程的处理元件14A到14D。类似地,当控制单元12激活线程时,控制单元12也可激活经指派以执行所述线程的处理元件14A到14D。控制单元12可激活并撤销激活一或多个线程的各种组合以帮助处置发散分支条件,如本发明中稍后进一步详细解释。
如本文中所使用,作用中线程可指经激活且当前经配置以执行程序指令的线程。非作用中线程可指撤销激活且当前经配置以并不执行程序指令的线程。对于给定指令处理周期期间执行于处理系统10中的多个线程,作用中线程中的每一者可经配置以在指令处理周期期间关于与相应作用中线程相关联的数据处理由全域程序计数器寄存器所识别的程序指令。在相同指令处理周期期间,非作用中线程中的每一者可经配置以并不处理程序指令。为配置作用中线程以执行指令,控制单元12可(例如)致使在指令处理周期期间激活与作用中线程相关联的处理元件14。类似地,为配置非作用中线程以并不执行指令,控制单元12可致使在指令处理周期期间撤销激活指派到非作用中线程的处理元件14。
在一些实例中,指令处理周期可指程序计数器的连续加载之间的时间间隔。举例而言,指令处理周期可指当程序计数器加载有与第一指令相关联的第一值时与当程序计数器加载有与第二指令相关联的第二值时之间的时间。第二指令可为由系统在紧接着第一指令之后处理的指令。第一和第二值可为相同或不同值,且第一和第二指令可为相同或不同指令。在一些实例中,指令处理周期可指程序计数器的连续同步加载之间的时间间隔。在一些实例中,程序计数器的同步加载可指由时钟信号触发的加载。指令处理周期可在本文中替代性地被称作指令周期或处理周期。
在处理下一指令之前的一些时间处,控制单元12可确定待由处理系统10处理的下一指令。取决于最近执行指令为顺序指令还是控制流指令,控制单元12确定待处理的下一指令的方式不同。若最近执行指令为顺序指令(即,并非控制流指令),则控制单元12可确定待由处理系统10处理的下一指令对应于存储于指令存储装置16中的下一顺序指令。举例而言,指令存储装置16可以有序序列存储程序指令,且下一顺序指令可为在指令的有序序列中紧接着最近执行指令之后出现的指令。
若最近执行指令为控制流指令,则控制单元12可基于控制流指令中所指定的信息确定待由处理系统10处理的下一指令。举例而言,控制流指令可为非条件性控制流指令(例如,非条件性分支指令或跳转指令),在此情况下控制单元12可确定待由处理系统10处理的下一指令为由控制流指令所识别的目标指令。作为另一实例,控制流指令可为条件性控制流指令(例如,条件性分支指令),在此情况下控制单元12可选择由控制流指令所识别的目标指令或存储于指令存储装置16中的下一顺序指令中的一者作为用以从指令存储装置16处理的下一指令。
如本文中所使用,控制流指令可指引导控制单元12以基于除了无条件选择下一顺序指令的技术确定用以执行的下一指令的指令。控制流指令可指定存储于指令存储装置16中的目标指令。举例而言,控制流指令可包含指示对应于存储于指令存储装置16中的目标指令的目标程序计数器值的值。作为另一实例,控制流指令可通过引导控制单元12以从堆栈存储结构取出返回地址而指定目标指令。返回地址可对应于存储于指令存储装置16中的目标指令。在一些实例中,目标指令可不同于存储于指令存储装置16中的下一顺序指令。高级程序代码可包含例如如果(if)、开关(switch)、循环(do)、循环(for)、当(while)、继续(continue)、中断(break)和转向(goto)语句的控制流语句。编译程序可将高级控制流语句转换成低级(例如,机器级)控制流指令。
并非控制流指令的指令可在本文中被称作顺序指令。顺序指令可指控制单元12必须选择下一顺序指令作为用以执行的下一指令的指令。在一些实例中,顺序指令可并不包含识别目标指令的信息。
对于控制流指令,识别目标指令的信息可为指示存储于指令存储装置16中的目标指令的值。在一些实例中,指示目标指令的值可为指示对应于存储于指令存储装置16中的目标指令的指令地址的值。在一些状况下,指示指令地址的值可为存储于指令存储装置16中的目标指令的地址。在额外状况下,指示指令地址的值可为用于计算目标指令的地址的值。在其它实例中,指示指令地址的值可为指示对应于目标指令的目标程序计数器值的值。在一些状况下,指示目标程序计数器值的值可为对应于目标指令的目标程序计数器值。在额外状况下,指示目标程序计数器值的值可为用于计算目标程序计数器值的值。在一些实例中,对应于目标指令的目标程序计数器值可等于存储于指令存储装置16中的目标指令的地址。
控制流指令可为前向控制流指令或后向控制流指令。控制流指令是前向还是后向的性质可被称为控制流指令的方向。前向控制流指令可为目标指令在存储于指令存储装置16中的有序指令序列中出现于控制流指令之后的控制流指令。后向控制流指令可为目标指令在存储于指令存储装置16中的有序指令序列中出现于下一顺序指令之前的控制流指令。下一顺序指令可在有序指令序列中紧接着控制流指令之后出现。
控制流指令可为条件性控制流指令或非条件性控制流指令。条件性控制流指令包含指定用于跳转到与控制流指令相关联的目标指令的条件的信息。当处理条件性控制流指令时,若控制单元12确定满足条件,则控制单元12可确定待处理的下一指令为目标指令。另一方面,若控制单元12确定不满足条件,则控制单元12可确定待处理的下一指令为存储于指令存储装置16中的下一顺序指令。非条件性控制流指令并不包含指定用于跳转到与控制流指令相关联的目标指令的条件的信息。当处理非条件性控制流指令时,控制单元12可无条件确定用以处理的下一指令为由控制流指令所识别的目标指令。换句话说,此状况下的确定并不取决于非条件性控制流指令自身中所指定的任何条件。
条件性控制流指令的实例包含条件性分支指令。除非分支指令另外表示为非条件性分支指令,否则通用术语分支指令在本发明中的使用通常是指条件性分支指令。非条件性控制流指令的实例包含跳转指令。
条件性分支指令可包含关于一或多个数据项值所指定的条件。举例而言,一种类型的条件可为针对执行于处理系统10中的每一作用中线程比较第一数据项值与第二数据项值的比较条件。比较数据项值可包含(例如)确定第一数据项值是否大于、小于、不超过、不低于、等于或不等于第二数据项值。另一类型的条件可为确定执行于处理系统10中的每一作用中线程的数据项值是否等于或不等于零的零检查条件。
因为处理元件14中的每一者对不同数据项进行操作,所以对于执行于处理系统10中的每一作用中线程,条件的评估结果可不同。若执行于处理系统10中的所有作用中线程都满足分支条件抑或执行于处理系统10中的所有作用中线程都不满足分支条件,则出现均一的分支条件且分支指令的分支发散被称为均一的。另一方面,若执行于处理系统10中的作用中线程中的至少一者满足分支条件且执行于处理系统10中的作用中线程中的至少一者并不满足分支条件,则出现发散分支条件且分支指令的分支发散被称为发散的。
执行于处理系统10中的线程可以步调一致方式执行相同指令。换句话说,对于所有作用中线程,处理元件14中的每一者可在处理周期期间一起执行相同指令。然而,当出现发散分支条件时,满足分支条件的线程可经调度以执行不同于经调度以由并不满足分支条件的线程所执行的下一指令的下一指令。这种情况可妨碍处理系统10中的线程以步调一致方式执行单一指令。
为处理发散分支指令,在一些实例中,控制单元12可撤销激活满足抑或并不满足分支条件的一个线程子集,使得剩余作用中线程都经同步以执行相同下一指令。为控制撤销激活线程的再激活,控制单元12可使用基于恢复计数器方法,所述方法涉及针对执行于处理系统中的每一线程分配恢复计数器,将用于撤销激活的每一线程的恢复计数器设定为指示经调度以再激活相应线程的程序计数器值的值,和在程序中在各种检查点处执行恢复检查操作以再激活线程。
在给定指令周期期间,恢复检查操作可在给定指令周期内激活经调度以在当前程序计数器值处再激活的任何撤销激活线程。恢复检查操作可基于与一或多个线程相关联的一或多个恢复计数器值,在当前程序计数器值处确定一或多个线程是否经调度以再激活。举例而言,恢复检查操作可比较多个恢复计数器值中的每一者与当前程序计数器值,且对于多个恢复计数器值中的每一者,若相应恢复计数器值等于当前程序计数器值,则激活对应于相应恢复计数器值的线程。
恢复计数器值中的每一者可与执行于处理系统10上的多个线程中的相应的一者相关联,且若线程处于非作用中,则其可指示经调度以激活线程的程序计数器值。在一些实例中,若对应于相应恢复计数器值的线程处于作用中,则恢复计数器值中的每一者等于缺省值。缺省值可对应于大于程序的地址范围的值。举例而言,缺省值可为最大寄存器值(即,为恢复计数器存储槽或恢复计数器寄存器中可表示的最大值的值)。
根据本发明,控制单元12可经配置以基于逐条指令选择性地启用和停用恢复检查操作的执行。举例而言,控制单元12可经配置以执行包含指示是否待由控制单元12针对指令执行恢复检查操作的信息的指令,并基于包含在指令中的信息针对所述指令选择性地启用或停用恢复检查操作。恢复检查操作可为包含比较多个恢复计数器值中的每一者与相关联于指令的程序计数器值,且对于多个恢复计数器值中的每一者,若相应恢复计数器值等于程序计数器值,则激活与相应恢复计数器值相关联的多个线程中的相应的一者的操作。
在一些实例中,为选择性地启用或停用恢复检查操作,控制单元12可经配置以:在指令周期期间执行指令,确定包含在指令中的信息是否指示将针对所述指令执行恢复检查操作,响应于确定包含在指令中的信息指示将针对指令执行恢复检查操作在指令周期内启用恢复检查操作,和响应于确定包含在指令中的信息指示并不针对指令执行恢复检查操作在指令周期内停用恢复检查操作。
在一些实例中,指示是否针对指令执行恢复检查操作的信息可包含指令中的信息字段。在一些状况下,信息字段可为指示是否针对指令执行恢复检查操作的一位旗标。在其它实例中,指示是否针对指令执行恢复检查操作的信息可包含可操作代码(例如,操作码)。举例而言,可操作代码的子集可指定待执行恢复检查操作的操作,且可操作代码的另一子集可指定并不执行恢复检查操作的操作。
在其它实例中,除是否执行恢复检查操作之外,指令可指定待由处理系统10执行的主操作。在此类实例中,可在执行主操作之前执行恢复检查操作。以此方式,作为恢复检查操作的部分,可针对再激活的任何线程执行主操作。在一些状况下,恢复检查操作和主操作可执行为相同指令周期的部分。
在一些实例中,恢复检查操作可涉及多个比较操作的执行,每次执行操作时所述操作可消耗大量功率,且可显著耗用其花费以在处理系统10中处理指令的时间。通过允许根据本发明的技术选择性地启用和停用恢复检查操作,对于已确定将并不需要出现线程再激活的此类指令,可停用恢复检查操作。因此,相比于针对每一指令执行恢复检查操作的系统中将发生的操作,恢复检查操作的数目可减少。以此方式,相比于针对程序中的每一指令自动地执行恢复检查操作的处理系统,本发明的技术可用于减少处理系统的功率消耗和/或增加性能。
为确保当使用上文所描述的基于恢复计数器方法以用于线程再激活时维持适当的控制流,控制单元12可使用“先最小值地址”的线程处理次序。一般来说,“先最小值地址”的线程处理次序可指在经调度以处理较高值地址处的指令的线程之前执行经调度以处理降低值地址处的指令的线程的处理次序。此处理次序可防止控制流跳转过非作用中线程的任何恢复点而不首次再激活此类线程。换句话说,此处理次序可确保在最后程序语句已结束执行时间处所有线程将处于作用中且将已完成处理。
“先最小值地址”的线程处理次序可基于分支指令的方向(即,前向或后向)响应于发散分支指令区分撤销激活哪些线程。举例而言,对于发散后向分支指令,控制单元12可撤销激活不满足分支条件的线程,将用于经撤销激活每一线程的恢复计数器值设定为与分支指令之后出现的下一顺序指令相关联的值,使程序计数器加载有与由分支指令所指定的目标指令相关联的值,并继续执行满足分支条件的那些线程。对于发散前向分支指令,控制单元12可撤销激活满足分支条件的线程,将用于撤销激活每一线程的恢复计数器值设定为与由分支指令所指定的目标指令相关联的值,使程序计数器加载有与分支指令之后出现的下一顺序指令相关联的值,并继续执行不满足分支条件的那些线程。以此方式撤销激活线程确保在经调度以处理较高值地址处的指令的线程之前执行经调度以处理较低值地址处的指令的发散线程(即,“先最小值地址”线程处理次序)。
控制单元12经由通信路径20以通信方式耦合到指令存储装置16,经由通信路径22耦合到处理元件14,并经由通信路径24耦合到数据存储装置18。控制单元12可使用通信路径20以将读取指令发送到指令存储装置16。读取指令可指定指令存储装置16中应从其检索指令的指令地址。响应于发送读取指令,控制单元12可从指令存储装置16接收一或多个程序指令。控制单元12可使用通信路径22以将指令提供到处理元件14,且在一些实例中,从处理元件14接收数据(例如,用于评估分支条件的比较指令的结果)。在一些实例中,控制单元12可使用通信路径24以直接从数据存储装置18检索数据项值(例如,以评估分支条件)。尽管图1将处理系统10说明为包含通信路径24,但在其它实例中,处理系统10可不包含通信路径24。
处理元件14中的每一者可经配置以执行操作以帮助处理系统10处理存储于指令存储装置16中的程序指令。在一些实例中,处理元件14中的每一者可经配置以执行相同操作集合。举例而言,处理元件14中的每一者可实施相同指令集架构(ISA)。在额外实例中,处理元件14中的每一者可为算术逻辑单元(ALU)。在其它实例中,处理系统10可为向量处理器(例如,GPU向量处理器),且处理元件14中的每一者可为向量处理器内的处理元件。在额外实例中,处理系统10可为SIMD执行单元,且处理元件14中的每一者可为SIMD执行单元内的SIMD处理元件。
由处理元件14所执行的操作可包含算术操作、逻辑操作、比较操作等。算术操作可包含例如加法操作、减法操作、乘法操作、除法操作等的操作。算术操作还可包含(例如)整数算术操作和/或浮点算术操作。逻辑操作可包含例如逐位“与”操作、逐位“或”操作、逐位异或操作等的操作。比较操作可包含例如大于操作、小于操作、等于零操作、不等于零操作等的操作。大于操作和小于操作可确定第一数据项是否大于或小于第二数据项。等于零操作和不等于零操作可确定数据项是否等于零或不等于零。用于操作的操作数可存储于数据存储装置18中所含有的寄存器中。
处理元件14中的每一者可经配置以响应于经由通信路径22从控制单元12接收到指令而执行操作。在一些实例中,处理元件14中的每一者可经配置以独立于其它处理元件14地经激活和/或撤销激活。在此类实例中,处理元件14中的每一者可在激活相应处理元件14A到14D时,响应于从控制单元12接收到指令而执行由指令所指定的操作,且在撤销激活(即,并不激活)相应处理元件14A到14D时,响应于从控制单元12接收到指令并不执行操作。
处理元件14A到14D中的每一者可经由相应通信路径26A到26D以通信方式耦合到数据存储装置18。处理元件14可经配置以从数据存储装置18检索数据并经由通信路径26将数据存储到数据存储装置18。在一些实例中,从数据存储装置18所检索的数据可为用于由处理元件14所执行的操作的操作数。在一些实例中,存储到数据存储装置18的数据可为由处理元件14所执行的操作的结果。
指令存储装置16经配置以存储用于由处理系统10执行的程序。程序可存储为有序指令序列。在一些实例中,每一指令可由唯一指令地址寻址。在此类实例中,指令序列中的稍后指令的指令地址大于指令序列中的早期指令的指令地址。在此类实例中,与指令序列中的稍后指令相关联的程序计数器值可在一些实例中大于与指令序列中的早期指令相关联的程序计数器值。在一些实例中,程序指令可为机器级指令。即,在此类实例中,指令可为对应于处理系统10的ISA的格式。指令存储装置16可经配置以经由通信路径20从控制单元12接收读取指令,并响应于接收到读取指令,经由通信路径20将对应于读取指令中所指定的指令地址的指令提供到控制单元12。读取指令可指定指令存储装置16中应从其检索指令的指令地址。
指令存储装置16可为任何类型的存储器、高速缓冲存储器或其组合。当指令存储装置16为高速缓冲存储器时,指令存储装置16可高速缓冲存储于处理系统10外部的程序存储器中的程序。尽管将指令存储装置16说明为在处理系统10内,但在其它实例中,指令存储装置16可在处理系统10外部。
数据存储装置18经配置以存储由处理元件14所使用的数据项。在一些实例中,数据存储装置18可包括多个寄存器,寄存器中的每一者经配置以存储由处理系统10所操作的多个数据项内的相应数据项。数据存储装置18可耦合到经配置以在数据存储装置18的寄存器与存储器或高速缓冲存储器(未展示)之间传送数据的一或多个通信路径(未展示)。
尽管图1说明用于存储由处理元件14所使用的数据的单一数据存储装置18,但在其它实例中,处理系统10可包含用于处理元件14中的每一者的单独专用数据存储装置。出于示范性目的,图1说明具有四个处理元件14的处理系统10。在其它实例中,处理系统10可具有呈相同或不同配置的相同或不同数目个处理元件14。
图2为根据本发明更详细地说明图1的实例处理系统10中的控制单元12的框图。控制单元12包含程序计数器28、提取模块30、解码模块32和控制流模块34。控制流模块34可在本文中替代性地被称作控制流单元。
程序计数器28经配置以存储程序计数器值。在一些实例中,程序计数器28可为例如程序计数器寄存器的硬件寄存器。程序计数器值可指示存储于指令存储装置16中的指令。在一些状况下,程序计数器值可等于存储于指令存储装置16中的指令的指令地址。在额外状况下,程序计数器值可用于计算存储于指令存储装置16中的指令的指令地址。举例而言,可将程序计数器值相加到偏移值以产生指令地址。程序计数器28可在本文中被称作“全域程序计数器”或“全域程序计数器寄存器”,这是因为程序计数器28可用作所有处理元件14的单一程序计数器。
提取模块30经配置以基于存储于程序计数器28中的程序计数器值,从指令存储装置16提取(例如,检索)指令。举例而言,提取模块30可从由存储于程序计数器28中的程序计数器值所识别的指令地址提取指令。提取模块30可将所提取指令提供到解码模块32以用于进一步处理。
解码模块32经配置以解码从提取模块30所接收的指令。解码指令可涉及确定指令是否为可由处理元件14处理的指令类型。若指令为可由处理元件14处理的指令类型,则解码模块32可致使对处理元件14中的一或多者执行指令。在一些实例中,解码模块32可致使对所有处理元件14执行指令。在其它实例中,解码模块32可致使对不到全部处理元件14执行指令。在一些状况下,致使对处理元件14中的一或多者执行指令可包含将用于执行的指令发布到处理元件14中的一或多者。举例而言,解码模块32可将顺序指令发布到对应于用于处理的作用中线程的所有处理元件14。若指令并非可由处理元件14处理的指令类型,则控制单元12可在并不将指令发布到处理元件14中的任一者以用于处理的情况下处理指令。举例而言,指令可为并不要求由处理元件14处理的控制流指令类型,在此情况下控制单元12可在并不将指令发布到处理元件14中的任一者的情况下处理指令。
在任一状况下,解码模块32可将控制信息转递到控制流模块34以用于进一步处理。在一些实例中,控制信息可为指令自身。在其它实例中,控制信息可包含(例如)指示指令为控制流指令还是顺序指令的信息;(若指令为控制流指令)指示指令为分支指令还是跳转指令的信息;(若指令为分支或跳转指令)指示分支或跳转指令为前向还是后向分支或跳转指令的信息;和(若指令为分支指令)指定分支条件的信息。
可由处理元件14处理的指令类型可包含算术指令和逻辑指令。算术指令可指指示处理元件14执行算术操作的指令,且逻辑指令可指指示处理元件14执行逻辑操作的指令。在一些实例中,控制流指令可为可由处理元件14处理的指令类型(例如,控制流指令可包含由处理元件14评估的分支条件)。并非可由处理元件14处理的指令类型可包含由控制单元12评估分支条件的控制流指令和/或并不具有分支条件的控制流指令。
控制流模块34可确定与待由控制单元12处理的下一指令相关联的程序计数器值,并将程序计数器值加载程序计数器28中。若先前所提取指令为顺序指令,则控制流模块34可选择指示下一顺序指令的程序计数器值以加载到程序计数器28中。在一些实例中,若先前所提取指令为分支或跳转指令,则控制流模块34可选择与由控制流指令所识别的目标指令相关联的目标程序计数器值或指示下一顺序指令的程序计数器值中的一者以加载到程序计数器28中。
在一些实例中,控制流模块34可利用最小恢复计数器(MINRC)以选择用以加载到程序计数器28中的新程序计数器值。MINRC值可指示来自恢复计数器值的集合的最小恢复计数器值。在一些状况下,恢复计数器值的集合可包含用于执行于系统中的所有线程的恢复计数器值。在额外状况下,恢复计数器值的集合可包含用于当起始执行当前执行处理模块时处于作用中的所有线程的恢复计数器值。当前执行处理模块可为(例如)主程序模块或子程序程序模块。在使用MINRC的实例中,控制流模块34可选择与由控制流指令所指定的目标指令相关联的目标程序计数器值、指示下一顺序指令的程序计数器值或MINRC值中的一者以加载到程序计数器28中以用于执行下一指令周期。
在一些实例中,控制流模块34可支持执行呼叫指令和返回指令。若先前所提取指令为呼叫指令,则控制流模块34可选择指示由呼叫指令所指定的目标指令的目标程序计数器值以加载到程序计数器28中。若先前所提取指令为返回指令,则控制流模块34可选择指示从子程序呼叫堆栈所取出的返回地址的程序计数器值以加载到程序计数器28中。
控制流模块34可存储用于执行于处理系统10中的每一线程的恢复计数器值。举例而言,存储于控制流模块34中的恢复计数器值的数目可等于处理系统10中所含有的处理元件14的数目。对于每一恢复计数器值,若对应于相应恢复计数器值的线程处于非作用中,则恢复计数器值可指示应激活或再激活非作用中线程的程序计数器值。换句话说,恢复计数器值可指示对应于调度非作用中线程以再激活的指令的程序计数器值。否则,在一些实例中,若对应于相应恢复计数器值的线程处于作用中,则可将恢复计数器值设定成缺省值(例如,最大寄存器值或为恢复计数器的存储槽或寄存器中可表示的最大值的值)。
控制流模块34可存储用于执行于处理系统10中的每一线程的作用中旗标。举例而言,存储于控制流模块34中的作用中旗标的数目可等于处理系统10中所含有的处理元件14的数目。每一作用中旗标可指示与作用中旗标相关联的线程处于作用中还是非作用中。控制流模块34可设定和重设作用中旗标以激活和撤销激活个别线程和对应于线程的处理元件14中的个别一者。举例而言,控制流模块34可设定作用中旗标以指示与作用中旗标相关联的线程处于作用中,并重设作用中旗标以指示与作用中旗标相关联的线程处于非作用中。在一些实例中,作用中旗标中的每一者可为单一位。
在一些实例中,控制流模块34可存储程序状态。举例而言,第一程序状态可指示所有线程处于作用中,第二程序状态可指示至少线程处于作用中且至少一个线程处于非作用中,且第三程序状态可指示所有线程处于非作用中。程序状态可在此类实例中用于选择用以加载程序计数器28中的程序计数器值。
在一些实例中,控制流模块34可经配置以经由通信路径22激活和撤销激活处理元件14中的一或多者。在额外实例中,控制流模块34可指示解码模块32激活和撤销激活特定处理元件14。
控制流模块34可经配置以执行恢复检查操作。恢复检查操作可在当前指令周期期间确定哪些线程经调度为再激活,并再激活此类线程。举例而言,对于多个或恢复计数器值中的每一者,恢复检查操作可涉及在当前指令周期内比较恢复计数器值与存储于程序计数器28中的程序计数器值,且若恢复计数器值等于程序计数器值,则再激活对应于恢复计数器值的线程。
根据本发明,控制流模块34可经配置以基于包含在指令周期期间所处理的指令中的信息,在特定指令周期内选择性地启用或停用恢复检查操作。包含在指令中的信息可指定是否在执行指令所在期间的指令周期内执行恢复检查操作。举例而言,每一指令周期可与存储于程序计数器28中的当前程序计数器值相关联。在每一指令周期期间,控制流模块34可确定对应于相应指令周期的当前程序计数器值的指令是否指示将针对所述指令执行恢复检查操作。若指令指示将针对指令执行恢复检查操作,则控制流模块34可在当前指令周期内启用恢复检查操作以便致使在当前指令周期内执行恢复检查操作。类似地,若指令指示并不针对指令执行恢复检查操作,则控制流模块34可在当前指令周期内停用恢复检查操作以便致使在当前指令周期内执行恢复检查操作。
在一些实例中,图1和图2的处理系统10可包含在图形处理单元(GPU)中。在此类实例中,处理系统10可用于实施含有于GPU内的着色器单元,例如,顶点着色器单元、像素着色器单元、片段着色器单元、几何结构着色器单元、统一着色器单元等。在此类实例中,处理系统10可经配置以执行着色器程序,例如,顶点着色器程序、片段着色器程序、几何结构着色器程序等。
图3为说明可用于实施本发明的选择性恢复检查激活技术的实例控制流模块34的框图。控制流模块34包含分支条件评估器40、下一指令产生器42、作用中旗标寄存器44、恢复计数器寄存器46、线程状态管理器48、线程撤销激活器50、恢复检查模块52和恢复检查激活模块54。
分支条件评估器40经配置以评估用于执行于处理系统10中的每一作用中线程的由条件性分支指令所指定的分支条件。分支条件评估器40可从解码模块32接收指示当前处理指令是否为分支指令的信息,且若当前处理指令为分支指令,则分支条件评估器40也可从解码模块32接收指示当前处理分支指令的分支条件的信息。在一些实例中,指示当前处理指令是否为分支指令的信息和指示分支条件的信息中的一或两者可表示指令自身。在其它实例中,这些信息成分中的一或两者可为由解码模块32所产生的信号。
分支条件评估器40可使用线程特定数据评估用于程序的作用中线程中的每一者的相同分支条件。在一些实例中,分支条件评估器40可获得用于评估用于每一线程的分支条件所需要的任何数据,并在内部评估用于每一线程的分支条件以产生用于每一线程的分支条件评估结果。在其它实例中,分支条件评估器40可引导对应于作用中线程的每一处理元件14以获得用于评估用于相应线程的分支条件所需要的数据,以评估分支条件并将用于相应线程的分支条件评估结果提供到分支条件评估器40。在任一状况下,对于每一作用中线程,分支条件评估器40可确定相应线程是否满足分支条件。
在一些实例中,分支条件评估器40可确定分支指令的分支发散是均一还是发散的。举例而言,分支条件评估器40可确定所有作用中线程是否满足分支条件和所有作用中线程是否都不满足分支条件。若所有作用中线程都满足抑或都不满足分支条件,则分支条件评估器40可确定分支指令的分支发散是均一的。若一些作用中线程满足分支条件且一些作用中线程并不满足分支条件,则分支条件评估器40可确定分支指令的分支发散是发散的。在分支发散是均一的实例中,分支条件评估器40可确定是均匀地满足还是均匀地不满足分支条件。
分支条件评估器40可将分支条件状态信息提供到线程状态管理器48的线程撤销激活器50。对于执行于处理系统10中的每一作用中线程,分支条件状态信息可指示相应线程是满足分支条件还是并不满足分支条件(即,用于线程的分支条件评估结果)。响应于执行分支指令,线程状态管理器48可使用分支条件状态信息以确定是否激活和/或撤销激活特定线程。
分支条件评估器40可将分支发散信息提供到下一指令产生器42。分支发散信息可包含指示分支指令的分支发散是均一的还是发散的信息。若分支指令的分支发散是均一的,则分支发散信息还可包含指示是均匀地满足还是均匀地不满足分支条件的信息。在一些实例中,分支发散信息可呈用于作用中线程中的每一者的分支条件状态信息的形式。在其它实例中,分支发散信息可未必包含用于个别线程的分支条件状态信息。
下一指令产生器42经配置以基于指示当前正执行指令类型的信息,指示当前正执行指令的分支发散的信息(若指令为分支指令),和指示由当前正执行指令所指定的目标指令的信息(若存在),产生对应于下一处理周期期间待执行的下一指令的程序计数器值。当起始执行下一指令周期时,下一指令产生器42可致使将由下一指令产生器42所产生的程序计数器值加载到程序计数器28中。
可从解码模块32接收指示当前正执行指令类型的信息,且所述信息包含(例如)指示指令为顺序指令还是控制流指令的信息。若指令为控制流指令,则指示指令类型的信息可包含(例如)指示指令为分支指令还是跳转指令的信息。若指令为分支或跳转指令,则指示指令类型的信息可包含(例如)指示指令是否为前向分支或跳转指令或指令是否为后向分支或跳转指令的信息。
可从分支条件评估器40接收指示指令的分支发散的信息,且所述信息包含(例如)指示分支发散是均一的还是发散的信息。若分支发散是均一的,则指示指令的分支发散的信息可包含(例如)指示是均匀地满足还是均匀地不满足分支条件的信息。
可从解码模块32接收指示目标指令的信息,且所述信息包含(例如)目标程序计数器值或指示目标程序计数器值的偏移值。偏移值可为(例如)相加到程序计数器以产生目标程序计数器值的值。当当前指令指定目标指令时,指示目标指令的信息可用于确定待执行的下一指令的程序计数器。这些指令可包含(例如)条件性分支指令和跳转指令。
对于顺序指令,下一指令产生器42可选择对应于下一顺序指令的程序计数器值作为用以加载到程序计数器28中的程序计数器值。下一顺序指令可指在存储于指令存储装置16中的程序的有序指令序列中紧接着当前执行指令之后出现的指令。
对于后向跳转指令,下一指令产生器42可选择指示由后向跳转指令所指定的目标指令的目标程序计数器值作为用以加载到程序计数器28中的程序计数器值。在一些实例中,对于前向跳转指令,下一指令产生器42可选择对应于下一顺序指令的程序计数器值作为用以加载到程序计数器28中的程序计数器值。在某一实例中,响应于处理前向跳转指令,控制流模块34可撤销激活所有线程,并依序递增程序计数器值直到到达非作用中线程的恢复计数器值中的第一者或到达跳转指令的目标程序计数器值为止。以此方式,维持线程的“先最小值地址”处理次序。
在其它实例中,对于前向跳转指令,控制流模块34可基于存储于MINRC寄存器(未展示)中的MINRC值,选择用以加载到程序计数器28中的程序计数器值,而非依序循环通过多个程序计数器值以维持“先最小值地址”处理次序。举例而言,在此类实例中,下一指令产生器42可确定目标程序计数器值是否小于或等于MINRC值。若目标程序计数器值小于或等于MINRC值,则下一指令产生器42可选择目标程序计数器值作为用以加载到程序计数器28中的程序计数器值。另一方面,若目标程序计数器值不小于或等于MINRC值,则下一指令产生器42可选择MINRC值作为用以加载到程序计数器28中的程序计数器值。以此方式,维持线程的“先最小值地址”处理次序。
对于后向分支指令,下一指令产生器42可确定是否均匀地不满足后向分支指令的分支条件。若均匀地不满足后向分支指令的分支条件,则下一指令产生器42可选择对应于下一顺序指令的程序计数器值作为用以加载到程序计数器28中的程序计数器值。另一方面,若均匀地满足后向分支指令的分支条件或所述条件是发散的,则下一指令产生器42可选择指示由后向分支指令所指定的目标指令的目标程序计数器值作为用以加载到程序计数器28中的程序计数器值。
对于前向分支指令,下一指令产生器42可确定是否均匀地不满足前向分支指令的分支条件或所述条件是否是发散的。若均匀地不满足前向分支指令的分支条件或所述条件是发散的,则下一指令产生器42可选择对应于下一顺序指令的程序计数器值作为用以加载到程序计数器28中的程序计数器值。若均匀地满足前向分支指令的分支条件,则在一些实例中,下一指令产生器42可选择对应于下一顺序指令的程序计数器值作为用以加载到程序计数器28中的程序计数器值。在一些实例中,响应于处理均匀地满足分支条件的前向分支指令,控制流模块34可撤销激活所有线程,并依序递增程序计数器值直到到达非作用中线程的恢复计数器值中的第一者或到达分支指令的目标程序计数器值为止。以此方式,维持线程的“先最小值地址”处理次序。
在其它实例中,对于均匀地满足的前向分支指令,控制流模块34可基于存储于MINRC寄存器(未展示)中的MINRC值,选择用以加载到程序计数器28中的程序计数器值。举例而言,在此类实例中,下一指令产生器42可确定目标程序计数器值是否小于或等于MINRC值。若目标程序计数器值小于或等于MINRC值,则下一指令产生器42可选择目标程序计数器值作为用以加载到程序计数器28中的程序计数器值。另一方面,若目标程序计数器值不小于或等于MINRC值,则下一指令产生器42可选择MINRC值作为用以加载到程序计数器28中的程序计数器值。以此方式,维持线程的“先最小值地址”处理次序。
作用中旗标寄存器44存储用于执行于处理系统10中的线程的多个作用中旗标。作用中旗标中的每一者可对应于执行于处理系统10中的线程中的相应的一者,且可指示线程是处于作用中(即,激活)还是非作用中(即,撤销激活)。在一些实例中,作用中旗标中的每一者可为单一位,且作用中旗标寄存器44可为经配置以存储对应于所有作用中旗标的位的一或多个寄存器。举例而言,一或多个寄存器中的每一位位置可对应于作用中旗标。作用中旗标寄存器44以通信方式耦合到线程状态管理器48。
恢复计数器寄存器46存储用于执行于处理系统10中的线程的多个恢复计数器值。恢复计数器值中的每一者可对应于执行于处理系统10中的线程中的相应的一者,且可指示相应线程经调度为在相应线程处于非作用中的情况下经再激活的程序计数器值。若线程处于作用中,则将恢复计数器值设定成缺省值,在一些状况下所述值可为大于用于执行程序的有效程序计数器值范围的值。举例而言,若线程处于作用中,则可将恢复计数器设定成为最大值的值(即,为恢复计数器的存储槽或寄存器中可表示的最大值的值)。因为在线程处于作用中时将用于对应线程的恢复计数器值设定成缺省值,所以每一恢复计数器值也可指示对应于相应恢复计数器的线程是处于作用中还是非作用中。当处理系统10开始执行程序时,可将恢复计数器值中的每一者初始化为缺省值。
在一些实例中,恢复计数器寄存器46可包含经配置以存储多个恢复计数器值的多个寄存器。举例而言,每一寄存器可为经配置以存储用于执行于处理系统10中的多个线程中的相应的一者的恢复计数器值的恢复计数器寄存器。恢复计数器寄存器46以通信方式耦合到线程状态管理器48。
线程状态管理器48经配置以管理执行于处理系统10中的线程的状态。举例而言,线程状态管理器48可激活和撤销激活执行于处理系统10中的线程,并按需要更新作用中旗标44和恢复计数器寄存器46。线程状态管理器48可包含线程撤销激活器50和恢复检查模块52。
线程撤销激活器50经配置以响应于处理系统10执行具有发散分支条件的分支指令而撤销激活一或多个线程。举例而言,线程撤销激活器50可从分支条件评估器40接收指示发散分支条件是否已发生的信息,从分支条件评估器40抑或解码模块32接收指示分支指令为前向分支指令还是后向分支指令的信息,和指示哪些线程满足分支条件且哪些线程并不满足分支条件的信息。线程撤销激活器50可确定发散分支指令为前向分支指令还是后向分支指令。若发散分支指令为前向分支指令,则线程撤销激活器50可撤销激活满足分支条件的每一作用中线程。若发散分支指令为后向分支指令,则线程撤销激活器50可撤销激活并不满足分支条件的每一作用中线程。
对于经撤销激活的每一线程,线程撤销激活器50可将存储于恢复计数器寄存器46中对应于相应线程的恢复计数器值设定成指示应再激活相应线程的程序计数器值的值。当响应于发散前向分支指令撤销激活线程时,线程撤销激活器50可将用于线程的恢复计数器值设定成指示由前向分支指令所指定的目标程序计数器值的值。当响应于发散后向分支指令撤销激活线程时,线程撤销激活器50可将用于线程的恢复计数器值设定成指示对应于下一顺序指令的程序计数器值的值。
在一些实例中,为撤销激活特定线程,线程撤销激活器50可撤销激活对应于特定线程的处理元件14中的相应的一者。在额外实例中,为撤销激活特定线程,线程撤销激活器50可将指示数据存储装置16不应存储对应于特定线程的任何计算结果的信号发送到对应于特定线程的数据存储装置16的一部分。在一些实例中,当撤销激活线程时,线程撤销激活器50可将对应于待撤销激活线程的作用中旗标(在作用中旗标寄存器44内)设定成指示已撤销激活线程的值。
恢复检查模块52可经配置以执行恢复检查操作以在当前指令周期内确定是否在当前程序计数器值处将任何撤销激活线程调度为再激活。在一些实例中,为执行恢复检查操作,恢复检查模块52可比较多个恢复计数器值中的每一者与相关联于当前处理指令的程序计数器值(即,当前加载到程序计数器28中的程序计数器值),并确定恢复计数器值中的每一者是否等于存储于程序计数器28中的当前程序计数器值。若用于特定线程的恢复计数器值等于当前程序计数器值,则恢复检查模块52可再激活线程。否则,若用于特定线程的恢复计数器值并不等于当前程序计数器值,则恢复检查模块52可维持线程的撤销激活状态。
对于正再激活的每一线程,恢复检查模块52可将对应于相应线程的恢复计数器值设定成指示线程处于作用中的缺省值。举例而言,缺省值可为可表示恢复计数器寄存器46中的一者中的恢复计数器值的最大值。
在一些实例中,为再激活特定线程,恢复检查模块52可激活对应于特定线程的处理元件14中的相应的一者。在其它实例中,为再激活特定线程,恢复检查模块52可将指示数据存储装置16应存储对应于特定线程的计算结果的信号发送到对应于特定线程的数据存储装置16的一部分。在一些实例中,当再激活线程时,恢复检查模块52可将对应于线程的作用中旗标设定成指示已激活线程的值。
在一些实例中,可基于由恢复检查激活模块54所提供的配置信息选择性地启用或停用恢复检查模块52。对于给定指令周期,若在指令周期内启用恢复检查模块52,则恢复检查模块52可在所述指令周期期间执行恢复检查操作。类似地,若在指令周期内停用恢复检查模块52,则恢复检查模块52不可在所述指令周期期间执行恢复检查操作。
在启用恢复检查模块52以执行恢复检查操作的指令周期期间,响应于将程序计数器值加载程序计数器28中,恢复检查模块52可起始恢复检查操作。在一些实例中,在给定指令周期期间,若执行恢复检查操作,则可在主操作之前执行恢复检查操作。主操作可为指令周期期间所处理的指令中所指定的操作(例如,算术操作、逻辑操作、控制流操作等)。
在一些实例中,指令周期可具有充分长度以在已完成恢复检查操作之后,作为恢复检查操作的部分,允许处理元件14针对已再激活的任何线程执行计算操作。在其它实例中,可延迟执行对应于存储于程序计数器28中的程序计数器值的指令,直到完成恢复检查操作且激活对于所述指令调度为再激活的任何线程之后为止。在此类实例中,在完成恢复检查操作之后,恢复检查模块52可致使处理元件14开始执行与当前指令相关联的任何计算操作。
恢复检查激活模块54经配置以基于包含在指令周期期间待执行的指令中的信息,在给定指令周期内选择性地激活(即,启用或停用)恢复检查模块52。包含在指令中的信息可指示是否将针对所述指令执行恢复检查操作。恢复检查激活模块54可确定包含在指令中的信息是否指示将针对所述指令执行恢复检查操作。若包含在指令中的信息指示将针对所述指令执行恢复检查操作,则恢复检查激活模块54可在由控制流模块34执行指令所在期间的指令周期内启用恢复检查模块52。在指令周期内启用恢复检查模块52可致使恢复检查模块52在指令周期期间执行恢复检查操作。若包含在指令中的信息指示并不针对所述指令执行恢复检查操作,则恢复检查激活模块54可在由控制流模块34执行指令所在期间的指令周期内停用恢复检查模块52。在指令周期内停用恢复检查模块52可致使恢复检查模块52并不在指令周期期间执行恢复检查操作。以此方式,恢复检查激活模块54可基于包含在指令中的信息,针对指令选择性地启用或停用恢复检查操作的执行。
图4为说明可用于实施本发明的选择性恢复检查激活技术的实例控制流模块34的框图。在一些实例中,图4中所说明的实例控制流模块34可用于实施上文关于图2和图3所描述的控制流模块34和/或上文关于图1所描述的控制单元12的部分。控制流模块34包含线程寄存器60、作用中旗标62A到62D(统称为“作用中旗标62”)、恢复计数器64A到64D(统称为“恢复计数器64”)、恢复检查模块66、恢复检查激活模块68、分支条件评估器70、事件信息产生器72、程序状态寄存器74、状态转变块76、线程撤销激活器78和下一指令块80。
在图4中所说明的控制流模块34用于实施图3中所展示的控制流模块34的实例中,图4中所展示的作用中旗标62可对应于图3中所展示的作用中旗标寄存器44,图4中所展示的恢复计数器64可对应于图3中所展示的恢复计数器寄存器46,图4中所展示的分支条件评估器70可对应于图3中所展示的分支条件评估器40,图4中所展示的恢复检查模块66可对应于图3中所展示的恢复检查模块52,且图4中所展示的恢复检查激活模块68可对应于图3中所展示的恢复检查激活模块54。因此,为了简洁且避免冗余,并不进一步详细描述这些共用组件的构造和操作。
另外,在图4中所说明的控制流模块34用于实施图3中所展示的控制流模块34的实例中,事件信息产生器72、程序状态寄存器74、状态转变块76和下一指令块80可经配置以实施图3中所展示的下一指令产生器42的功能性。类似地,事件信息产生器72、程序状态寄存器74、状态转变块76和线程撤销激活器78可经配置以实施图3中所展示的线程撤销激活器50的功能性。
线程寄存器60经配置以存储执行于处理系统10中的线程中的每一者的线程状态。如图4中所展示,线程寄存器60包含作用中旗标62和恢复计数器64。作用中旗标62中的每一者存储指示对应于相应作用中旗标62A到62D的线程是否处于作用中的作用中旗标。恢复计数器64中的每一者存储用于相应线程的恢复计数器值。在一些实例中,每一线程可指派到处理元件14中的相应的一者。在此类实例中,作用中旗标62和恢复计数器64中的每一者可对应于处理元件14中的相应的一者。举例而言,作用中旗标62A和恢复计数器64A可各自对应于图1中所说明的处理元件14A,且作用中旗标62B和恢复计数器64B可各自对应于图1中所说明的处理元件14B。尽管图4中所说明的实例控制流模块34说明具有四个作用中旗标62和四个恢复计数器64的系统,但在其它实例中,控制流模块34可具有相同或不同数目个作用中旗标62和恢复计数器64。
恢复检查模块66经配置以在由恢复检查激活模块68启用恢复检查模块66的指令周期期间执行恢复检查操作。当启用时,恢复检查模块66可响应于程序计数器28加载有新程序计数器值而执行恢复检查操作。在一些实例中,恢复检查模块66可根据图9和图10中所说明的恢复检查技术执行恢复检查操作。为执行恢复检查操作,恢复检查模块66可从程序计数器28接收当前程序计数器值,从作用中旗标62接收当前线程激活状态,并从恢复计数器64接收当前恢复计数器值。作为恢复检查操作的部分,恢复检查模块66可修改作用中旗标62和恢复计数器64。另外,恢复检查模块66可基于恢复检查操作的结果更新程序状态寄存器74。当在指令周期内未受到启用时,恢复检查模块66可避免在指令周期期间执行恢复检查操作。
恢复检查激活模块68可经配置以基于包含在当前指令周期期间待处理的指令中的信息,选择性地启用和停用恢复检查模块66。包含在指令中的信息可指示是否针对当前指令周期期间待处理的指令执行恢复检查操作。
当启用恢复检查模块66时,在完成恢复检查操作之后,恢复检查模块66可将指示恢复检查操作已完成的信号发送到提取模块30和解码模块32中的一或两者。当提取模块30接收到恢复检查操作已完成的信号时,提取模块30可将所提取指令转递到解码模块32以用于进一步处理。响应于接收到指令,解码模块32可检查作用中旗标62并基于作用中旗标62的当前状态(可已由恢复检查操作修改),更新处理元件14的作用中和非作用中状态。若指令为可发布到处理元件14的类型,则解码模块32可结合或在更新处理元件14的作用中和非作用中状态之后将指令发布到处理元件14。尽管实例控制流模块34将恢复检查模块66说明为在完成恢复检查操作之后发信提取模块30,但在其它实例中,恢复检查模块66可将指示恢复检查已完成的信号发送到解码模块32。在此类实例中,当解码模块32接收到信号时,解码模块32可检查作用中旗标62并基于作用中旗标62的当前状态更新处理元件14作用中和非作用中状态。
当解码模块32解码指令时,若解码模块32确定指令为分支指令(即,条件性分支指令),则解码模块32可将指示当前指令为条件性分支指令的信号发送到分支条件评估器70并将指示分支条件的信息提供到分支条件评估器70以用于进一步处理。在一些实例中,若解码模块32确定指令并非分支指令(例如,跳转指令或顺序指令),则解码模块32可将指示当前指令并非条件性分支指令的信号发送到分支条件评估器70。
解码模块32将控制信息提供到事件信息产生器72以用于进一步处理。在一些实例中,控制信息可为指令自身。在其它实例中,控制信息可包含如下信息,例如指示指令为控制流指令还是顺序指令的信息;(若指令为控制流指令)指示指令为分支指令还是跳转指令的信息;和(若指令为分支或跳转指令)指示分支或跳转指令为前向还是后向分支或跳转指令的信息;和(若指令为分支指令)指定分支条件的信息。
若当前处理指令为条件性分支指令,则分支条件评估器70可评估用于每一作用中线程的分支条件。在一些实例中,分支条件评估器70可经由通信路径22从处理元件14接收比较操作或零检查操作的结果。在其它实例中,分支条件评估器70可经由通信路径24访问数据存储装置18中的一或多个寄存器,并执行比较操作或零检查操作。在任何状况下,分支条件评估器70可确定每一作用中线程满足还是不满足分支条件。在一些实例中,分支条件评估器70可将指示每一作用中线程满足还是不满足分支条件的信息转递到事件信息产生器72。在额外实例中,分支条件评估器70可确定当前指令的分支发散是均一的还是发散的,并将指示分支发散是均一的还是发散的信息转递到事件信息产生器72。在其它实例中,若分支指令的分支发散是均一的,则分支条件评估器70可确定均匀地满足还是均匀地不满足分支条件,并将指示均匀地满足还是均匀地不满足分支条件的信息转递到事件信息产生器72。
事件信息产生器72从解码模块32接收控制信息,且若当前处理指令为分支指令,则其从分支条件评估器70接收分支条件信息。在一些实例中,若当前处理指令为分支指令,则事件信息产生器72也可从分支条件评估器70接收分支发散信息。若事件信息产生器72并未从分支条件评估器70接收到分支发散信息,则事件信息产生器72可确定当前指令的分支发散是均一的还是发散的。事件信息产生器72基于所接收信息产生事件,并将事件提供到状态转变块76、线程撤销激活器78和下一指令块80。
在一些实例中,事件信息产生器72可产生以下事件:
Jb: 跳转后向指令
Jf: 跳转前向指令
BbuT: 分支后向指令,所有线程都是均一的,条件为真
BbuF: 分支后向指令,所有线程都是均一的,条件为假
BfuT: 分支前向指令,所有线程都是均一的,条件为真
BfuF: 分支前向指令,所有线程都是均一的,条件为假
Bbd: 分支后向指令,线程是发散的
Bfd: 分支前向指令,线程是发散的
S: 顺序指令
根据上文所识别事件,指令可为顺序指令(S)、跳转指令(J)或分支指令(B)。对于跳转或分支指令,跳转或分支方向可为后向(b)抑或前向(f)。对于分支指令,分支发散可是均一的(u)抑或发散的(d)。对于分支指令,分支条件可为真(T)抑或假(F)。真分支条件可对应于所满足分支条件,且假分支条件可对应于所不满足分支条件。
程序状态寄存器74可存储执行于处理系统10中的程序的程序状态。在一些实例中,程序状态寄存器74可存储以下三种状态:
状态0:所有线程都处于作用中。
状态1:至少一个线程处于作用中且至少一个线程处于非作用中。
状态2:所有线程都处于非作用中。
在一些实例中,处理系统10可经配置,使得程序的初始状态和最后状态各自为状态0。
状态转变块76可从事件信息产生器72接收事件并从程序状态寄存器74接收当前程序状态,基于所接收事件和当前程序状态产生新程序状态,并将新程序状态存储于程序状态寄存器74中。状态转变块76可根据关于图5所进一步详细描述的状态转变表产生新程序状态。
线程撤销激活器78可从事件信息产生器72接收事件并从程序状态寄存器74接收当前程序状态,基于事件和当前程序状态确定是否撤销激活一或多个线程,并响应于事件和当前程序状态的某些组合撤销激活一或多个线程。当撤销激活线程时,线程撤销激活器78可更新正撤销激活线程的作用中旗标62和恢复计数器64。线程撤销激活器78可根据关于图5所进一步详细描述的状态转变表撤销激活线程。
下一指令块80可从事件信息产生器72接收事件并从程序状态寄存器74接收当前程序状态,确定用以加载到程序计数器28中的新程序计数器值,并将新程序计数器值加载到程序计数器28中。新程序计数器值可指示待由控制单元12处理的下一指令。下一指令块80可根据关于图5所进一步详细描述的状态转变表确定新程序计数器值。
如上文所论述,恢复检查模块66可基于恢复检查操作的结果更新程序状态寄存器74。可由恢复检查模块66以异步方式执行这种更新。举例而言,若在执行恢复检查操作之前程序状态为状态1并再激活所有非作用中线程,则程序状态寄存器74可以异步方式将程序状态寄存器74改变为状态0以反映所有线程都经激活。应注意,状态转变块76基于由恢复检查模块66进行任何更新之后可得到的当前程序状态产生新程序状态。类似地,线程撤销激活器78基于由恢复检查模块66进行任何更新之后可得到的当前程序状态确定是否撤销激活一或多个线程,且下一指令块80基于由恢复检查模块66进行任何更新之后可得到的当前程序状态确定新程序计数器值。因而,尽管归因于恢复检查程序状态可在单一处理周期期间在两个不同状态之间改变,但将处理周期的最后状态(即,恢复检查完成之后出现的状态)用作用于由状态转变块76、线程撤销激活器78和下一指令块80中的每一者处理的当前程序状态。
图5为根据本发明特征化图4中所说明的控制流模块34的示范性操作的状态转变表。图5中的状态转变表包含表示当前程序状态的“旧状态”栏,和“新状态”栏,其表示下一处理周期的新程序状态抑或归因于恢复检查操作在异步转变之后出现的程序状态。状态转变表也包含“事件”栏,其包含由事件信息产生器72所产生的事件。“事件”栏中的指示符“n/a”表示归因于恢复检查操作出现状态转变和动作且事件不相关于此转变。状态转变表也包含“动作”栏,其指示响应于特定组合的当前程序状态和事件发生的动作内容。“动作”栏中标记为“恢复”的动作表示归因于恢复检查操作出现异步状态转变。
如图5中所展示,响应于当前状态为状态0且接收到S事件、Jf事件、Jb事件、BfuT事件、BfuF事件、BbuT事件或BbuF事件,状态转变块76选择状态0作为用以加载到程序状态寄存器74中的新状态。响应于当前状态为状态0且接收到Bbd事件或Bfd事件,状态转变块76选择状态1作为用以加载到程序状态寄存器74中的新状态。响应于当前状态为状态1且接收到S事件、Jb事件、BbuF事件、BbuT事件、BfuF事件、Bbd事件或Bfd事件,状态转变块76也选择状态1作为用以加载到程序状态寄存器74中的新状态。响应于当前状态为状态1且接收到Jf事件或BfuT事件,状态转变块76选择状态2作为用以加载到程序状态寄存器74中的新状态。响应于当前状态为状态2且接收到任何事件,状态转变块76也选择状态2作为用以加载到程序状态寄存器74中的新状态。作为恢复检查操作的部分,响应于再激活一或多个线程,状态转变块76可以异步方式转变到状态0或状态1。
同样如图5中所展示,响应于当前状态为状态0抑或状态1且接收到Bbd事件或Bfd事件,线程撤销激活器78可确定撤销激活一或多个线程。Bbd事件和Bfd事件可被称为由评估分支指令的分支条件所产生的发散事件。线程撤销激活器78可响应于接收到Bbd事件确定撤销激活并不满足分支条件(即,假条件)的所有作用中线程,并响应于接收到Bfd事件撤销激活满足分支条件(即,真条件)的所有作用中线程。线程撤销激活器78可响应于当前状态为状态1且接收到Jf事件或BfuT事件确定撤销激活所有作用中线程。
如图5中所展示,响应于当前程序状态和事件的各种组合,下一指令块80可选择指示下一顺序指令的程序计数器值(即,“PC+1”)或指示目标指令的程序计数器值(即,目标程序计数器值)中的一者以加载到程序计数器28中。举例而言,响应于当前状态为状态0且接收到S事件、BfuF事件、BbuF事件或Bfd事件,下一指令块80可选择指示下一顺序指令的程序计数器值(即,“PC+1”)以加载到程序计数器28中。响应于当前状态为状态1且接收到S事件、BbuF事件、BfuF事件、Bfd事件、Jf事件或BfuT事件,下一指令块80也可选择指示下一顺序指令的程序计数器值(即,“PC+1”)以加载到程序计数器28中。响应于当前状态为状态2且接收到任何事件,下一指令块80也可选择指示下一顺序指令的程序计数器值(即,“PC+1”)以加载到程序计数器28中。响应于当前状态为状态0且接收到Jf事件、Jb事件、BfuT事件、BbuT事件或Bbd事件,下一指令块80可选择指示目标指令的程序计数器值(即,目标程序计数器值)以加载到程序计数器28中。响应于当前状态为状态1且接收到Jb事件、BbuT事件或Bbd事件,下一指令块80也可选择指示目标指令的程序计数器值(即,目标程序计数器值)以加载到程序计数器28中。
图6为说明可用于实施本发明的选择性恢复检查激活技术的实例计算系统100的框图。计算系统100包含处理器102、104、存储器106和总线108。处理器102、处理器104和存储器106可经由总线108以通信方式耦合到彼此。总线108可为多种总线结构或其它通信结构中的任一者,例如,第三代总线(例如,超传输总线或无限宽带总线)、第二代总线(例如,高级图形端口总线、外围组件互连(PCI)高速总线或高级可扩展接口(AXI)总线)或另一类型的总线或装置互连件。应注意,图6中所展示的不同组件之间的总线和通信接口的特定配置仅仅是示范性的,且具有相同或不同组件的其它配置的计算装置和/或计算系统可用于实施本发明的技术。
处理器102和104可各自对应于一个或多个处理器。一个或多个处理器可为任何类型的通用处理器或专用处理器。在一些实例中,处理器102可为应用程序处理器、主处理器和/或中央处理单元(CPU)。在其它实例中,处理器104可为图形处理单元(GPU)。在此类实例中,GPU可经配置以按处理器102引导加速图形操作处理和/或执行通用计算任务(例如,通用计算图形处理单元(GPGPU)任务)。处理器102经配置以执行编译程序模块110。处理器104可包含可对应于本发明的图1中所描述的处理系统10的处理系统10。尽管处理器102和104在图6中说明为不同处理器,但在其它实例中,处理器102和104可为相同处理器。
存储器106可经配置以存储可访问以用于由处理器102、104执行的程序模块和/或指令和/或存储用于由执行于处理器102和104上的程序使用的数据。存储器106可由一或多个易失性或非易失性存储器或存储装置形成,例如随机存取存储器(RAM)、静态RAM(SRAM)、动态RAM(DRAM)、只读存储器(ROM)、可擦除可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)、闪存、磁性数据媒体或光学存储媒体。存储器106包含编译程序代码112、源代码114和经编译代码116。
编译程序模块110可经配置以基于包含在编译程序代码112中的编译技术编译源代码114以产生经编译代码116。换句话说,编译程序模块110可为执行于处理器102上的编译程序代码112的运行时间执行个体。
源代码114可对应于待由处理器104和/或处理系统10执行的程序。经编译代码116可为源代码114的经编译版本。在一些实例中,经编译版本可为目标代码、字节代码和/或能够由处理器104和/或处理系统10执行的机器语言代码。
根据本发明,编译程序模块110可经配置以产生经编译代码116,使得在由执行经编译代码116的处理器(例如,处理器104和/或处理系统10)执行时经编译代码116包含各自包含指示是否针对相应指令执行恢复检查操作的一或多个指令。在一些实例中,包含在指令中的信息可为信息字段,例如,指示执行指令的处理器是否针对指令执行恢复检查操作的一位旗标。在额外实例中,包含在指令中的信息可呈其它形式,例如,特定可操作代码(即,操作码)参数、位的组合等。
在一些实例中,编译程序模块110可经配置以在经编译代码116的执行期间基于逐条指令选择性地致使针对特定指令执行恢复检查操作。举例而言,编译程序模块110可选择一或多个指令作为在执行由源代码114所指定的程序时将对其执行恢复检查操作的指令,并产生所述程序的经编译代码116,使得经编译代码包含所选择一或多个指令且使得所选择一或多个指令包含指示针对所选择一或多个指令执行恢复检查操作的信息。作为另一实例,经编译代码116可选择一或多个指令作为在执行由源代码114所指定的程序时并不对其执行恢复检查操作的指令,并产生所述程序的经编译代码116,使得经编译代码包含所选择一或多个指令且使得所选择一或多个指令包含指示并不针对所选择一或多个指令执行恢复检查操作的信息。
在其它实例中,如果指令为待通过响应于执行分支指令或跳转指令中的至少一者而撤销激活的一或多个线程执行的候选的下一指令,那么编译程序模块110可经配置以选择所述指令作为在执行程序时将对其执行恢复检查操作的指令。候选下一指令可指此类经撤销激活的线程将经调度为响应于执行分支指令或跳转指令而再激活的指令。举例而言,对于前向分支指令和前向跳转指令,候选下一指令可为前向跳转指令或前向分支指令的目标指令。作为另一实例,对于后向分支指令,候选下一指令可为后向分支指令之后的下一顺序指令。
分支指令可指基于相应线程是否满足分支条件,指定一或多个线程中的每一者待执行的下一指令的控制流指令。分支指令可包含指定目标指令的字段和指定用于分支到目标指令的分支条件的字段。对于执行分支指令的线程中的每一者,若相应线程满足分支条件,则分支指令可将目标指令指定为待由相应线程执行的下一指令。另一方面,若相应线程并不满足分支条件,则分支指令可将下一顺序指令指定为待由相应线程执行的下一指令。下一顺序指令可在有序指令序列中紧接着分支指令之后出现。
前向分支指令可指分支指令中所指定的目标指令在形成包含分支指令的程序的有序指令序列中于分支指令之后出现的分支指令。后向分支指令可指分支指令中所指定的目标指令在形成包含分支指令的程序的有序指令序列中于下一顺序指令之前出现的分支指令。
跳转指令可指无条件地指定一或多个线程中的每一者待执行的下一指令的控制流指令。跳转指令可包含指定目标指令的信息字段,且在一些实例中,其可不包含指定用于跳转到目标指令的条件的字段。跳转指令可将目标指令无条件地指定为待由执行跳转指令的线程中的每一者执行的下一指令。
类似于前向和后向分支指令,前向跳转指令可指跳转指令中所指定的目标指令在形成包含跳转指令的程序的有序指令序列中于跳转指令之后出现的跳转指令。后向跳转指令可指跳转指令中所指定的目标指令在形成包含跳转指令的程序的有序指令序列中于下一顺序指令之前出现的跳转指令。下一顺序指令可在有序指令序列中紧接着跳转指令之后出现。
如上文所论述,为确保在使用基于恢复计数器方法以用于线程再激活的处理系统中维持适当的控制流,处理系统10可使用“先最小值地址”线程处理次序。一般来说,“先最小值地址”的线程处理次序可指在经调度以处理较高值地址处的指令的线程之前执行经调度以处理降低值地址处的指令的线程的处理次序。“先最小值地址”的线程处理次序可基于分支指令的方向(即,前向或后向)响应于发散分支指令区分撤销激活哪些线程。
举例而言,对于发散后向分支指令,处理系统10可撤销激活不满足分支条件的线程,将用于经撤销激活每一线程的恢复计数器值设定为与分支指令之后出现的下一顺序指令相关联的值,使程序计数器加载有与由分支指令所指定的目标指令相关联的值,并继续执行满足分支条件的那些线程。对于发散前向分支指令,处理系统10可撤销激活满足分支条件的线程,将用于经撤销激活每一线程的恢复计数器值设定为与由分支指令所指定的目标指令相关联的值,使程序计数器加载有与分支指令之后出现的下一顺序指令相关联的值,并继续执行不满足分支条件的那些线程。以此方式撤销激活线程确保在经调度以处理较高值地址处的指令的线程之前执行经调度以处理较低值地址处的指令的发散线程(即,“先最小值地址”线程处理次序)。
在已撤销激活一或多个线程且剩余作用中线程执行前向跳转指令抑或均匀地满足的前向分支指令(即,所有作用中线程均匀地满足分支条件的前向分支指令)的状况下,用以处置控制流的一种方法可为始终跳转到前向跳转或前向分支指令中所指定的目标指令,这是因为所有作用中线程都将保持为处于作用中。然而,此方法并不保证“先最小值地址”线程处理次序。具体来说,在一些状况下,一或多个非作用中线程可具有介于跳转或分支指令的当前程序计数器值与目标程序计数器值(即,与分支或跳转指令中所指定的目标指令相关联的程序计数器值)之间的恢复计数器值。若控制流跳转过此类非作用中线程,则有可能在结束执行程序之前将不再激活此类线程。
为避免此情形,每当执行前向跳转指令或均匀地满足的前向分支指令时,处理系统10可经配置以撤销激活所有线程并依序递增程序计数器值直到到达非作用中线程的恢复计数器值中的第一者或到达跳转或分支指令的目标程序计数器值为止。以此方式,维持线程的“先最小值地址”处理次序。
在一些实例中,编译程序模块110可经配置以在程序执行期间确定在利用如上文所描述的“先最小值地址”线程处理次序的处理系统中是否可需要针对程序的一或多个指令执行恢复检查操作。在此类实例中,编译程序模块110可经配置以针对确定可需要在程序执行期间执行恢复检查操作的指令启用恢复检查操作,并针对确定将并不需要在程序执行期间再激活线程的指令停用恢复检查操作。
作为一个特定实例,对于发散前向分支指令,因为将撤销激活满足分支条件的所有线程,所以编译程序模块110可确定对于为前向分支指令的目标指令的任何指令应执行恢复检查操作。对于发散后向分支指令,因为将撤销激活并不满足分支条件的所有线程,所以编译程序模块110可确定对于紧接着后向分支指令之后出现的任何指令(即,后向分支指令之后的下一顺序指令)应执行恢复检查操作。对于前向跳转指令,因为可撤销激活所有线程以循环通过程序计数器值直到到达非作用中线程的恢复计数器值中的第一者或到达跳转指令的目标程序计数器值为止,所以编译程序模块110可确定对于为前向跳转指令的目标指令的任何指令应执行恢复检查操作。
在此实例中,对于未识别为前向分支指令或前向跳转指令的目标指令或识别为后向分支指令之后的下一顺序指令的任何其它指令,编译程序模块110可确定并不需要针对此类指令执行恢复检查操作,这是因为将并不需要在此类指令处再激活程序执行期间撤销激活的任何线程。相比于针对每一指令执行恢复检查操作的处理系统,并不针对此类指令执行恢复检查操作可减少SIMD处理系统的功率消耗和/或改善其性能。
对于确定可需要在程序执行期间执行恢复检查操作的指令,编译程序模块110可将信息放置于经编译指令中以指示将针对所述指令执行恢复检查操作。类似地,对于确定并不需要在程序执行期间执行恢复检查操作的指令,编译程序模块110可将信息放置于指令中以指示并不针对所述指令执行恢复检查操作。
图7到图10为说明用于根据本发明选择性地激活和/或执行恢复检查操作的实例指令处理技术的流程图。在一些实例中,图7到图10中所展示的实例技术可实施于图2到图4中的任一者的控制流模块34中和/或图1到图4和图6中的任一者的处理系统10内。为便于解释,将关于图2中所展示的控制流模块34描述技术,但应理解可在呈相同或不同配置具有相同或不同组件的其它系统中执行所述技术。
图7为说明用于根据本发明选择性地激活恢复检查操作的实例技术的流程图。控制流模块34执行包含指示是否针对指令执行恢复检查操作的信息的指令(120)。控制流模块34基于包含在指令中的信息选择性地启用或停用针对指令的恢复检查操作(122)。
恢复检查操作可为包含比较多个恢复计数器值中的每一者与相关联于指令的程序计数器值的操作。对于多个恢复计数器值中的每一者,若相应恢复计数器值等于程序计数器值,则恢复检查操作可进一步包含激活与相应恢复计数器值相关联的多个线程中的相应的一者。恢复计数器值中的每一者可与执行于处理器(例如,处理系统10)上的多个线程中的相应的一者相关联。
图8为说明用于根据本发明选择性地激活恢复检查操作的另一实例技术的流程图。控制流模块34在指令周期期间执行指令(124)。控制流模块34确定包含在指令中的信息是否指示将针对所述指令执行恢复检查操作(126)。响应于确定包含在指令中的信息指示将针对所述指令执行恢复检查操作,控制流模块34在指令周期内启用恢复检查操作(128)。举例而言,控制流模块34可致使在指令周期期间执行恢复检查操作。响应于确定包含在指令中的信息指示并不针对所述指令执行恢复检查操作,控制流模块34在指令周期内停用恢复检查操作(130)。举例而言,控制流模块34可致使并不在指令周期期间执行恢复检查操作。
图9为说明用于根据本发明执行恢复检查操作的实例技术的流程图。控制流模块34比较多个恢复计数器值中的每一者与相关联于指令的程序计数器值(132)。恢复计数器值中的每一者可与执行于处理器上的多个线程中的相应的一者相关联。程序计数器值可为与当前指令处理周期相关联的程序计数器值。对于多个恢复计数器值中的每一者,若相应恢复计数器值等于程序计数器值,则控制流模块34激活与相应恢复计数器值相关联的多个线程中的相应的一者(134)。
图10为说明用于根据本发明执行恢复检查操作的另一实例技术的流程图。控制流模块34选择非作用中线程(136)。控制流模块34确定非作用中线程的恢复计数器值是否等于程序计数器值(138)。若控制流模块34确定非作用中线程的恢复计数器值等于程序计数器值,则控制流模块34将与线程相关联的作用中旗标设定为真值以指示对应线程现在处于作用中(140),将与线程相关联的恢复计数器设定为最大值(142)并前进到决定框144。在一些实例中,最大值可为恢复计数器的存储槽或寄存器中可表示的最大值的值。
另一方面,若控制流模块34确定非作用中线程的恢复计数器值不等于程序计数器值,则控制流模块34前进到决定框144而不设定线程的作用中旗标且不设定线程的恢复计数器。在任一状况下,控制流模块34确定是否存在用以处理的较多非作用中线程(144)。若控制流模块34确定存在用以处理的较多非作用中线程,则控制流模块34返回到处理框136以处理另一非作用中线程。否则,若控制流模块34确定并不存在用以处理的较多非作用中线程,则控制流模块34结束恢复检查操作。尽管图10说明依序处理并再激活线程的实例恢复检查操作,但在其它实例中,可部分抑或完全平行处理并再激活线程。
图11和图12为说明用于产生根据本发明选择性地激活恢复检查操作的经编译代码的实例指令处理技术的流程图。经编译代码可包含各自指定是否针对相应指令执行恢复检查操作的一或多个指令。为便于解释,将关于图6中所展示的计算系统100的处理器102(例如,编译程序模块110)描述技术,但应理解可由相同或不同计算系统中的其它组件执行所述技术。
图11为说明用于产生根据本发明选择性地启用和停用恢复检查操作的经编译代码的实例技术的流程图。处理器102选择程序的一或多个指令作为在执行程序时将对其执行恢复检查操作的指令(146)。处理器102基于所选择一或多个指令产生程序的经编译代码(148)。举例而言,处理器102可产生程序的经编译代码,使得经编译代码包含所选择一或多个指令,且使得所选择一或多个指令包含指示将针对所选择一或多个指令执行恢复检查操作的信息。
在一些实例中,如果指令为待通过一或多个经撤销激活的线程执行的在分支指令或跳转指令中的至少一者之后的候选的下一指令,那么处理器102可选择所述指令作为在执行程序时将对其执行恢复检查操作的指令。在其它实例中,如果指令为前向分支指令及前向跳转指令中的至少一者的目标指令,那么处理器102可选择所述指令作为在执行程序时将对其执行恢复检查操作的指令。在额外实例中,如果指令为后向分支指令之后的下一顺序指令,那么处理器102可选择所述指令作为在执行程序时将对其执行恢复检查操作的指令。
除了或代替选择程序的一或多个指令作为在执行程序时将对其执行恢复检查操作的指令之外,处理器102可选择一或多个指令作为在执行程序时并不对其执行恢复检查操作的指令并产生程序的经编译代码,使得经编译代码包含所选择一或多个指令且使得所选择一或多个指令包含指示并不针对所选择一或多个指令执行恢复检查操作的信息。
图12为说明用于产生根据本发明选择性地启用和停用恢复检查操作的经编译代码的另一实例技术的流程图。处理器102基于程序的源代码产生程序的初步经编译代码(150)。在一些实例中,除了初步经编译代码中的指令并不指示是否针对此类指令执行恢复检查操作之外,初步经编译代码可类似于待由处理器102所产生的最后经编译代码。
处理器102确定初步经编译代码中的哪些指令为控制流指令(152)。控制流指令可包含(例如)跳转指令和条件性分支指令。处理器102选择用于处理的控制流指令(154)。处理器102确定所选择控制流指令是否为能够致使处理系统10响应于指令处理而撤销激活一或多个线程的指令(156)。在一些实例中,能够致使处理系统10响应于指令处理而撤销激活一或多个线程的指令集合包含前向分支指令、后向分支指令和前向跳转指令。在其它实例中,除上文已描述的指令之外,能够致使处理系统10响应于指令处理而撤销激活一或多个线程的指令集合还可包含后向跳转指令。
如果所选择控制流指令为能够致使处理系统10响应于指令处理而撤销激活一或多个线程的指令,那么处理器102可选择候选的下一指令作为将对其执行恢复检查操作的指令(158)。候选的下一指令可指响应于处理当前控制流指令而撤销激活的线程将经调度为再激活的指令。举例而言,若指令为前向跳转指令或前向分支指令,则候选下一指令可为前向跳转指令或前向分支指令中所指定的目标指令。作为另一实例,若指令为后向分支指令,则候选下一指令可为后向分支指令之后的下一顺序指令(即,紧接着后向分支指令之后出现的指令)。在后向跳转指令构成能够致使处理系统10响应于指令处理而撤销激活一或多个线程的指令的实例中,则后向跳转指令的候选下一指令可为后向分支指令之后的下一顺序指令(即,紧接着后向跳转指令之后出现的指令)。在选择候选的下一指令作为将对其执行恢复检查操作的指令之后,处理器102可记录选择以用于产生经编译代码时使用并前进到决定框160。
返回到决定框156,如果所选择控制流指令为不能够致使处理系统10响应于指令处理而撤销激活一或多个线程的指令,那么处理器102可前进到决定框158而不选择控制流指令的任何指令作为将对其执行恢复检查操作的指令。在任一状况下,处理器102确定是否存在用以处理的较多控制流指令(160)。若处理器102确定存在用以处理的较多控制流指令,则处理器102返回到处理框154以处理另一控制流指令。否则,如果处理器102确定并不存在用以处理的较多控制流指令,那么处理器102继续基于经选择作为将对其执行恢复检查的指令的指令产生经编译代码(162)。
举例而言,对于经选择作为将对其执行恢复检查的指令的指令中的每一者,处理器102可将指示待由执行程序的处理器执行恢复检查操作且在指令周期期间何时执行指令的信息放置于经编译指令中。对于并未经选择作为将对其执行恢复检查的指令的任何指令,处理器102可将指示并不由执行程序的处理器执行恢复检查操作且在指令周期期间何时执行指令的信息放置于经编译指令中。
图13说明可在无需使用本发明的选择性恢复检查激活技术的情况下执行的实例程序。如图13中所展示,左侧栏中的编号表示指令识别(ID)编号。在一些实例中,每一指令的指令ID编号对应于与指令相关联的程序计数器值和/或地址。中部栏代表与左侧栏中的指令ID相关联的指令。右侧栏提供指令解释。
具有以“alu”开始的名称的指令表示顺序(即,非控制流)ALU指令。接着“alu”名称的编号仅仅指明ALU指令可为不同指令。指明为“分支”指令的指令构成具有“分支”名称之后所指定的目标指令(例如,目标指令ID)的条件性分支指令。类似地,指明为“跳转”指令的指令构成具有“跳转”名称之后所指定的目标指令(例如,目标指令ID)的跳转指令(即,非条件性分支指令)。
如图13中所展示,指令2为将指令5指定为目标指令的前向分支指令。指令4为将指令7指定为目标指令的前向跳转指令。指令8为将指令1指定为目标指令的后向分支指令。
图14为说明图13中的实例程序的实例执行序列的表。关于执行于处理系统中的两个不同线程(即,线程0和线程1)展示执行序列。除了系统可具有两个处理元件14而非四个之外,处理系统可类似于图1中所展示的处理系统10(或等效地,可在程序的持续时间内永久地撤销激活处理元件14中的两者)。另外,这个实例中,处理系统在每一指令周期期间在执行指令之前自动地执行恢复检查操作。线程0和线程1可各自经指派以执行于处理元件14中的相应的一者上。两线程可步调一致地执行程序指令。即,在给定指令周期期间,每一线程(若处于作用中)可关于不同数据执行相同程序指令。
图14中的行中的每一者构成以表顶部上的最早指令处理周期开始的单一指令处理周期。“指令ID”栏指示给定指令处理周期期间所执行和/或处理的指令。“线程0”栏指示线程0在给定指令处理周期内是否处于作用中,且“线程1”栏指示线程1在给定指令处理周期内是否处于作用中。“线程0”抑或“线程1”栏中的“X”名称指示相应线程在给定指令处理周期内处于作用中。“线程0”抑或“线程1”栏中的“O”名称指示相应线程在给定指令处理周期内处于非作用中。
如图14中所展示,两线程(即,线程0和线程1)最初处于作用中,且在处理指令0和指令1(其为顺序指令)时保持处于作用中。当处理指令2(其为前向分支指令)时,线程1满足分支条件且线程0并不满足分支条件。因此,根据“先最小值地址”线程处理次序,控制单元12撤销激活线程1并将线程1的恢复计数器设定为5的值(即,目标指令的地址)以指示在指令5处将线程1调度为再激活。就作用中线程0来说,控制单元12继续处理指令3和指令4。
在指令4(其为前向跳转指令)处,控制单元12撤销激活处于作用中的所有线程。具体而言,控制单元12撤销激活线程0并将线程0的恢复计数器设定为7的值(即,目标指令的地址)以指示在指令7处将线程0调度为再激活。控制单元12继续依序递增程序计数器值直到到达非作用中线程的恢复计数器值中的第一者或到达跳转指令的目标程序计数器值为止。
如上文所论述,在这个实例中在每一指令期间执行恢复检查操作,之后处理指令。在指令3和指令4处,线程1的恢复计数器值(即,“5”)并不等于指令的程序计数器值(即,分别为“3”和“4”)。因此,在处理这些指令时线程1保持为撤销激活。然而,在指令5处,线程1的恢复计数器值(即,“5”)确实等于指令5的程序计数器值。因此,控制单元12在执行指令5之前再激活线程1。作为再激活处理的部分,控制单元12可将线程1的恢复计数器设定为缺省值(例如,最大寄存器值)。同时,线程0保持处于非作用中,这是因为线程0的恢复计数器值等于7。
就作用中线程1来说,控制单元12继续处理指令5和指令6。在指令7处,作为恢复检查操作的部分再激活线程0,这是因为线程0的恢复计数器值(即,“7”)等于指令7的程序计数器值。就两线程来说,控制单元12继续处理指令7。
在指令8(其为后向分支指令)处,线程0满足分支条件且线程1并不满足分支条件。因此,根据“先最小值地址”线程处理次序,控制单元12撤销激活线程1并将线程1的恢复计数器设定为9的值(即,后向分支指令之后的下一顺序指令)以指示应在指令9处再激活线程1。就作用中线程0来说,控制单元12继续处理指令1到指令4。在指令2处,线程0并不满足分支条件,且因此控制流前进到指令3。
在指令4(其为前向跳转指令)处,控制单元12撤销激活处于作用中的所有线程。具体而言,控制单元12撤销激活线程0并将线程0的恢复计数器设定为7的值(即,目标指令的地址)以指示应在指令7处再激活线程0。控制单元12继续依序递增程序计数器值直到到达非作用中线程的恢复计数器值中的第一者或到达跳转指令的目标程序计数器值为止。
处理指令5和指令6,但其为休眠指令周期,这是因为并未激活线程。在指令7处,作为恢复检查操作的部分再激活线程0,这是因为线程0的恢复计数器值(即,“7”)等于指令7的程序计数器值。就作用中线程0来说,控制单元12继续处理指令7和指令8。
在指令9处,作为恢复检查操作的部分再激活线程1,这是因为线程0的恢复计数器值(即,“9”)等于指令9的程序计数器值。就两线程来说,控制单元12继续处理指令9,所述操作为程序末端。
如上文所论述,在执行指令4之后两次撤销激活线程0,且每次在执行指令7之前再激活所述线程。在执行指令2和指令8之后撤销激活线程1且在执行指令5和指令9之前再激活所述线程。归因于发散分支抑或归因于前向跳转指令撤销激活线程。因为控制单元12在执行每一指令之前执行恢复检查,所以在此实例中,即使仅在四个指令周期期间再激活线程控制单元12执行18个不同恢复检查操作。
图15说明可使用本发明的选择性恢复检查激活技术执行的实例程序。除了指示针对此类指令执行恢复检查操作的星号(即,“*”)包含在某些程序指令中之外,实例程序类似于图13中所展示的实例程序。并不包含星号的指令指示并不针对此指令执行恢复检查。
如图15中所展示,编译程序可选择指令5、指令7和指令9作为将对其执行恢复检查操作的指令。选择指令5作为将对其执行恢复检查操作的指令,这是因为所述指令为前向分支指令(即,指令2)的目标指令。选择指令7作为将对其执行恢复检查操作的指令,这是因为所述指令为前向跳转指令(即,指令4)的目标指令。选择指令9作为将对其执行恢复检查操作的指令,这是因为所述指令为后向分支指令(即,指令8)之后的下一顺序指令。
图16为根据本发明说明图15中的实例程序的实例执行序列的表。除了并不在每一指令周期期间执行恢复检查操作之外,图16中的实例执行序列类似于上文关于图14所描述的序列。替代地,仅针对图15中标记有星号的指令(即,指令5、指令7和指令9)的指令周期执行恢复检查操作。
如图16中所展示,图16的实例执行序列期间所执行的恢复检查操作的数目为5。因此,通过根据本发明的技术选择性地激活恢复检查操作,这个实例中所执行的恢复检查操作的数目从18个不同指令周期期间所执行的18个操作(发生于图14中)减少到5个指令周期期间所执行的5个操作。在一些实例中,恢复检查操作可涉及许多比较操作的执行,每次执行操作时所述操作可消耗大量功率且可显著好用其花费以处理指令的时间。因此,通过根据本发明的选择性恢复检查激活技术减少需要由处理系统执行的恢复检查操作的数目,相比于自动针对每一程序指令执行恢复检查操作的处理系统,可减少处理系统的功率消耗和/或可增加处理系统的性能。
此外,因为针对确定将并不需要在程序执行期间再激活线程的指令停用恢复检查操作,所以恢复检查操作的选择性停用并不损害处理系统中的线程再激活完整性或增加执行程序所需要的处理周期数目。以此方式,在一些实例中,本发明的技术可用于减少处理系统的功率消耗和/或增加处理系统的性能,而不会不利地影响线程再激活处理的完整性且并不会增加执行程序所需要的处理周期数目。
本发明中所描述的技术可至少部分实施于硬件、软件、固件或其任何组合中。举例而言,所描述技术的各种方面可实施于一或多个处理器中,包含一或多个微处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA),或任何其它等效集成或离散逻辑电路,以及此类组件的任何组合。术语“处理器”或“处理电路”可大体上指前述逻辑电路中的任一者(单独或结合其它逻辑电路)或例如执行处理的离散硬件的任何其它等效电路。
此硬件、软件和固件可实施于相同装置内或单独装置内以支持本发明中所描述的各种操作和功能。另外,所描述单元、模块或组件中的任一者可一起或单独作为离散但可互操作逻辑装置而实施。将不同特征描述为模块或单元意图强调不同功能方面且未必暗示此类模块或单元必须由单独硬件或软件组件实现。替代地,与一或多个模块或单元相关联的功能性可由单独硬件、固件和/或软件组件执行,或整合到共用或单独硬件或软件组件内。
本发明中所描述的技术也可存储、体现或编码于计算机可读媒体(例如,存储指令的计算机可读存储媒体)中。嵌入或编码于计算机可读媒体中的指令可致使一或多个处理器执行本文中所描述的技术(例如,当由一或多个处理器执行指令时)。计算机可读存储媒体可包含随机存取存储器(RAM)、只读存储器(ROM)、可编程只读存储(PROM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、闪存、硬盘、CD-ROM、软盘、卡盒、磁性媒体、光学媒体或其它有形计算机可读存储媒体。
计算机可读媒体可包含计算机可读存储媒体,其对应于例如上文所列的那些的有形存储媒体。计算机可读媒体也可包括通信媒体,其包含促进计算机程序从一个地点到另一地点的传送(例如,根据通信协议)的任何媒质。以此方式,短语“计算机可读媒体”大体上可对应于(1)非暂时性有形计算机可读存储媒体和(2)例如暂时性信号或载波的非有形计算机可读通信媒体。
已描述各种方面和实例。然而,可在不脱离以下权利要求的范围的情况下对本发明的结构或技术作出修改。
Claims (50)
1.一种方法,其包括:
通过处理器执行指令,所述指令包含指示是否针对所述指令执行恢复检查操作的信息;以及
通过所述处理器针对所述指令,基于包含在所述指令中的所述信息,选择性地启用或停用所述恢复检查操作,所述恢复检查操作为包括比较多个恢复计数器值中的每一者与相关联于所述指令的程序计数器值的操作,所述恢复计数器值中的每一者与执行于所述处理器上的多个线程中的相应的一者相关联。
2.根据权利要求1所述的方法,
其中执行所述指令包括在指令周期期间执行所述指令,且
其中选择性地启用或停用所述恢复检查操作包括:
确定包含在所述指令中的所述信息是否指示将针对所述指令执行所述恢复检查操作;
响应于确定包含在所述指令中的所述信息指示将针对所述指令执行所述恢复检查操作,在所述指令周期内启用所述恢复检查操作;以及
响应于确定包含在所述指令中的所述信息指示并不针对所述指令执行所述恢复检查操作,在所述指令周期内停用所述恢复检查操作。
3.根据权利要求1所述的方法,其中所述恢复检查操作进一步包括,对于所述多个恢复计数器值中的每一者,在所述相应恢复计数器值等于所述程序计数器值的情况下,激活与所述相应恢复计数器值相关联的所述多个线程中的相应的一者。
4.根据权利要求1所述的方法,其中所述处理器为第一处理器,所述方法进一步包括:
通过第二处理器选择程序的一或多个指令作为在执行所述程序时将针对其执行恢复检查操作的指令;以及
通过所述第二处理器产生所述程序的经编译代码,使得所述经编译代码包含所述所选择一或多个指令,且使得所述所选择一或多个指令包含指示将针对所述所选择一或多个指令执行所述恢复检查操作的信息。
5.根据权利要求4所述的方法,其中选择所述一或多个指令包括:
在指令为待通过响应于执行分支指令或跳转指令中的至少一者而撤销激活的一或多个线程执行的候选的下一指令的情况下,选择所述指令作为在执行所述程序时将针对其执行恢复检查操作的指令。
6.根据权利要求4所述的方法,其中选择所述一或多个指令包括:
在指令为前向分支指令及前向跳转指令中的至少一者的目标指令的情况下,选择所述指令作为在执行所述程序时将针对其执行恢复检查操作的指令。
7.根据权利要求4所述的方法,其中选择所述一或多个指令包括:
在指令为后向分支指令之后的下一顺序指令的情况下,选择所述指令作为在执行所述程序时将针对其执行恢复检查操作的指令。
8.根据权利要求4所述的方法,其中所述第一处理器不同于所述第二处理器。
9.根据权利要求1所述的方法,其中所述恢复计数器值中的每一者指示一程序计数器值,在所述程序计数器值下,对应于所述相应恢复计数器值的线程经调度为在所述线程处于非作用中的情况下经激活。
10.根据权利要求9所述的方法,其中在对应于所述恢复计数器值中的每一者的所述线程处于作用中的情况下,所述相应恢复计数器值等于默认值。
11.根据权利要求1所述的方法,其中所述处理器包括一或多个寄存器,且其中所述处理器将所述恢复计数器值存储在所述一或多个寄存器中。
12.根据权利要求1所述的方法,其中除指示是否执行所述恢复检查操作之外,所述指令还指定待执行的主操作。
13.根据权利要求12所述的方法,其中当执行所述恢复检查操作时,在执行所述主操作之前执行所述恢复检查操作。
14.根据权利要求1所述的方法,其中指示是否针对所述指令执行所述恢复检查操作的所述信息包括一位旗标。
15.根据权利要求1所述的方法,其进一步包括:
其中执行所述指令包括通过所述处理器在指令周期期间执行所述指令,且
其中选择性地启用或停用所述恢复检查操作包括:
通过所述处理器确定包含在所述指令中的所述信息是否指示将针对所述指令执行所述恢复检查操作;
响应于确定包含在所述指令中的所述信息指示将针对所述指令执行所述恢复检查操作,通过所述处理器执行所述恢复检查操作;以及
响应于确定包含在所述指令中的所述信息指示并不针对所述指令执行所述恢复检查操作,并不通过所述处理器执行所述恢复检查操作。
16.根据权利要求15所述的方法,其中通过所述处理器执行所述恢复检查操作包括:
比较所述多个恢复计数器值中的每一者与相关联于所述指令的程序计数器值;以及
对于所述多个恢复计数器值中的每一者,在所述相应恢复计数器值等于所述程序计数器值的情况下,激活与所述相应恢复计数器值相关联的所述多个线程中的相应的一者。
17.一种装置,其包括:
处理器,其经配置以执行指令,所述指令包含指示是否针对所述指令执行恢复检查操作的信息,及针对所述指令基于包含在所述指令中的所述信息选择性地启用或停用所述恢复检查操作,所述恢复检查操作为包括比较多个恢复计数器值中的每一者与相关联于所述指令的程序计数器值的操作,所述恢复计数器值中的每一者与执行于所述处理器上的多个线程中的相应的一者相关联。
18.根据权利要求17所述的装置,其中所述处理器经进一步配置以在指令周期期间执行所述指令;确定包含在所述指令中的所述信息是否指示将针对所述指令执行所述恢复检查操作;响应于确定包含在所述指令中的所述信息指示将针对所述指令执行所述恢复检查操作,在所述指令周期内启用所述恢复检查操作;及响应于确定包含在所述指令中的所述信息指示并不针对所述指令执行所述恢复检查操作,在所述指令周期内停用所述恢复检查操作。
19.根据权利要求17所述的装置,其中所述恢复检查操作进一步包括,对于所述多个恢复计数器值中的每一者,在所述相应恢复计数器值等于所述程序计数器值的情况下,激活与所述相应恢复计数器值相关联的所述多个线程中的相应的一者。
20.根据权利要求17所述的装置,其中所述处理器为第一处理器,所述装置进一步包括:
第二处理器,其经配置以选择程序的一或多个指令作为在执行所述程序时将针对其执行恢复检查操作的指令,及产生所述程序的经编译代码,使得所述经编译代码包含所述所选择一或多个指令,且使得所述所选择一或多个指令包含指示将针对所述所选择一或多个指令执行所述恢复检查操作的信息。
21.根据权利要求20所述的装置,其中所述第二处理器经进一步配置以在指令为待通过在分支指令或跳转指令中的至少一者之后的一或多个经撤销激活的线程执行的候选的下一指令的情况下,选择所述指令作为在执行所述程序时将针对其执行恢复检查操作的指令。
22.根据权利要求20所述的装置,其中所述第二处理器经进一步配置以在指令为前向分支指令及前向跳转指令中的至少一者的目标指令的情况下,选择所述指令作为在执行所述程序时将针对其执行恢复检查操作的指令。
23.根据权利要求20所述的装置,其中所述第二处理器经进一步配置以在指令为后向分支指令之后的下一顺序指令的情况下,选择所述指令作为在执行所述程序时将针对其执行恢复检查操作的指令。
24.根据权利要求20所述的装置,其中所述第一处理器不同于所述第二处理器。
25.根据权利要求17所述的装置,其中所述恢复计数器值中的每一者指示一程序计数器值,在所述程序计数器值下,在对应于所述相应恢复计数器值的线程处于非作用中的情况下,应激活所述线程。
26.根据权利要求25所述的装置,其中在对应于所述恢复计数器值中的每一者的所述线程处于作用中的情况下,所述相应恢复计数器值等于默认值。
27.根据权利要求17所述的装置,其中所述处理器包括一或多个寄存器,且其中所述处理器将所述恢复计数器值存储在所述一或多个寄存器中。
28.根据权利要求17所述的装置,其中除指示是否执行所述恢复检查操作之外,所述指令还指定待执行的主操作。
29.根据权利要求28所述的装置,其中当执行所述恢复检查操作时,在执行所述主操作之前执行所述恢复检查操作。
30.根据权利要求17所述的装置,其中指示是否针对所述指令执行所述恢复检查操作的所述信息包括一位旗标。
31.根据权利要求17所述的装置,其中所述处理器经进一步配置以在指令周期期间执行所述指令;确定包含在所述指令中的所述信息是否指示将针对所述指令执行所述恢复检查操作;响应于确定包含在所述指令中的所述信息指示将针对所述指令执行所述恢复检查操作,在所述指令周期期间执行所述恢复检查操作;及响应于确定包含在所述指令中的所述信息指示并不针对所述指令执行所述恢复检查操作,在所述指令周期期间并不执行所述恢复检查操作。
32.根据权利要求31所述的装置,其中所述处理器经进一步配置以比较所述多个恢复计数器值中的每一者与相关联于所述指令的程序计数器值,且对于所述多个恢复计数器值中的每一者,在所述相应恢复计数器值等于所述程序计数器值的情况下,激活与所述相应恢复计数器值相关联的所述多个线程中的相应的一者。
33.根据权利要求17所述的装置,其中所述装置包括无线通信装置。
34.根据权利要求17所述的装置,其中所述装置包括移动电话手持机。
35.一种设备,其包括:
用于执行指令的装置,所述指令包含指示是否针对所述指令执行恢复检查操作的信息;以及
用于针对所述指令基于包含在所述指令中的所述信息选择性地启用或停用所述恢复检查操作的装置,所述恢复检查操作为包括比较多个恢复计数器值中的每一者与相关联于所述指令的程序计数器值的操作,所述恢复计数器值中的每一者与执行于处理器上的多个线程中的相应的一者相关联。
36.根据权利要求35所述的设备,
其中用于执行所述指令的所述装置包括用于在指令周期期间执行所述指令的装置,且
其中用于选择性地启用或停用所述恢复检查操作的所述装置包括:
用于确定包含在所述指令中的所述信息是否指示将针对所述指令执行所述恢复检查操作的装置;
用于响应于确定包含在所述指令中的所述信息指示将针对所述指令执行所述恢复检查操作,在所述指令周期内启用所述恢复检查操作的装置;以及
用于响应于确定包含在所述指令中的所述信息指示并不针对所述指令执行所述恢复检查操作,在所述指令周期内停用所述恢复检查操作的装置。
37.根据权利要求35所述的设备,其进一步包括:
用于选择程序的一或多个指令作为在执行所述程序时将针对其执行恢复检查操作的指令的装置;以及
用于产生所述程序的经编译代码的装置,使得所述经编译代码包含所述所选择一或多个指令,且使得所述所选择一或多个指令包含指示将针对所述所选择一或多个指令执行所述恢复检查操作的信息。
38.根据权利要求37所述的设备,其中用于选择所述一或多个指令的所述装置包括:
用于在指令为待通过响应于执行分支指令或跳转指令中的至少一者而撤销激活的一或多个线程执行的候选的下一指令的情况下,选择所述指令作为在执行所述程序时将针对其执行恢复检查操作的指令的装置。
39.根据权利要求35所述的设备,其中所述恢复计数器值中的每一者指示一程序计数器值,在所述程序计数器值下,对应于所述相应恢复计数器值的线程经调度为在所述线程处于非作用中的情况下经激活,且在对应于所述相应恢复计数器值的所述线程处于作用中的情况下,等于默认值。
40.根据权利要求35所述的设备,其中除指示是否执行所述恢复检查操作之外,所述指令还指定待执行的主操作,且其中当执行所述恢复检查操作时,在执行所述主操作之前执行所述恢复检查操作。
41.根据权利要求35所述的设备,其进一步包括:
其中用于执行所述指令的所述装置包括用于在指令周期期间执行所述指令的装置,且
其中用于选择性地启用或停用所述恢复检查操作的所述装置包括:
用于确定包含在所述指令中的所述信息是否指示将针对所述指令执行所述恢复检查操作的装置;
用于响应于确定包含在所述指令中的所述信息指示将针对所述指令执行所述恢复检查操作,执行所述恢复检查操作的装置;以及
用于响应于确定包含在所述指令中的所述信息指示并不针对所述指令执行所述恢复检查操作,并不执行所述恢复检查操作的装置。
42.根据权利要求41所述的设备,其中用于执行所述恢复检查操作的所述装置包括:
用于比较所述多个恢复计数器值中的每一者与相关联于所述指令的程序计数器值的装置;以及
用于对于所述多个恢复计数器值中的每一者,在所述相应恢复计数器值等于所述程序计数器值的情况下,激活与所述相应恢复计数器值相关联的所述多个线程中的相应的一者的装置。
43.一种计算机可读存储媒体,其存储指令,所述指令在被执行时致使一或多个处理器进行以下操作:
执行指令,所述指令包含指示是否针对所述指令执行恢复检查操作的信息;以及
针对所述指令,基于包含在所述指令中的所述信息,选择性地启用或停用所述恢复检查操作,所述恢复检查操作为包括比较多个恢复计数器值中的每一者与相关联于所述指令的程序计数器值的操作,所述恢复计数器值中的每一者与执行于所述一或多个处理器上的多个线程中的相应的一者相关联。
44.根据权利要求43所述的计算机可读存储媒体,
其中在被执行时致使一或多个处理器执行所述指令的所述指令包括在被执行时致使一或多个处理器在指令周期期间执行所述指令的指令,且
其中在被执行时致使一或多个处理器选择性地启用或停用所述恢复检查操作的所述指令包括在被执行时致使一或多个处理器进行以下操作的指令:
确定包含在所述指令中的所述信息是否指示将针对所述指令执行所述恢复检查操作;
响应于确定包含在所述指令中的所述信息指示将针对所述指令执行所述恢复检查操作,在所述指令周期内启用所述恢复检查操作;以及
响应于确定包含在所述指令中的所述信息指示并不针对所述指令执行所述恢复检查操作,在所述指令周期内停用所述恢复检查操作。
45.根据权利要求43所述的计算机可读存储媒体,其进一步包括在被执行时致使一或多个处理器进行以下操作的指令:
选择程序的一或多个指令作为在执行所述程序时将对其执行恢复检查操作的指令;以及
产生所述程序的经编译代码,使得所述经编译代码包含所述所选择一或多个指令,且使得所述所选择一或多个指令包含指示将针对所述所选择一或多个指令执行所述恢复检查操作的信息。
46.根据权利要求45所述的计算机可读存储媒体,其中在被执行时致使一或多个处理器选择所述一或多个指令的所述指令包括在被执行时致使一或多个处理器进行以下操作的指令:
在指令为待通过响应于执行分支指令或跳转指令中的至少一者而撤销激活的一或多个线程执行的候选的下一指令的情况下,选择所述指令作为在执行所述程序时将对其执行恢复检查操作的指令。
47.根据权利要求43所述的计算机可读存储媒体,其中所述恢复计数器值中的每一者指示一程序计数器值,在所述程序计数器值下,对应于所述相应恢复计数器值的线程经调度为在所述线程处于非作用中的情况下经激活,且在对应于所述相应恢复计数器值的所述线程处于作用中的情况下,等于默认值。
48.根据权利要求43所述的计算机可读存储媒体,其中除指示是否执行所述恢复检查操作之外,所述指令还指定待执行的主操作,且其中当执行所述恢复检查操作时,在执行所述主操作之前执行所述恢复检查操作。
49.根据权利要求43所述的计算机可读存储媒体,其进一步包括:
其中在被执行时致使一或多个处理器执行所述指令的所述指令包括在被执行时致使一或多个处理器在指令周期期间执行所述指令的指令,且
其中在被执行时致使一或多个处理器选择性地启用或停用所述恢复检查操作的所述指令包括在被执行时致使一或多个处理器进行以下操作的指令:
确定包含在所述指令中的所述信息是否指示将针对所述指令执行所述恢复检查操作;
响应于确定包含在所述指令中的所述信息指示将针对所述指令执行所述恢复检查操作,执行所述恢复检查操作;以及
响应于确定包含在所述指令中的所述信息指示并不针对所述指令执行所述恢复检查操作,并不执行所述恢复检查操作。
50.根据权利要求49所述的计算机可读存储媒体,其中在被执行时致使一或多个处理器执行所述恢复检查操作的所述指令包括在被执行时致使一或多个处理器进行以下操作的指令:
比较所述多个恢复计数器值中的每一者与相关联于所述指令的程序计数器值;以及
对于所述多个恢复计数器值中的每一者,在所述相应恢复计数器值等于所述程序计数器值的情况下,激活与所述相应恢复计数器值相关联的所述多个线程中的相应的一者。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201261680990P | 2012-08-08 | 2012-08-08 | |
US61/680,990 | 2012-08-08 | ||
US13/624,657 | 2012-09-21 | ||
US13/624,657 US9256429B2 (en) | 2012-08-08 | 2012-09-21 | Selectively activating a resume check operation in a multi-threaded processing system |
PCT/US2013/049599 WO2014025480A1 (en) | 2012-08-08 | 2013-07-08 | Selectively activating a resume check operation in a multi-threaded processing system |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104583941A true CN104583941A (zh) | 2015-04-29 |
CN104583941B CN104583941B (zh) | 2017-05-10 |
Family
ID=50067110
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201380041768.7A Active CN104583941B (zh) | 2012-08-08 | 2013-07-08 | 用于在多线程处理系统中选择性激活恢复检查操作的方法和设备 |
Country Status (4)
Country | Link |
---|---|
US (1) | US9256429B2 (zh) |
JP (1) | JP6077117B2 (zh) |
CN (1) | CN104583941B (zh) |
WO (1) | WO2014025480A1 (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109146764A (zh) * | 2017-06-16 | 2019-01-04 | 想象技术有限公司 | 对任务进行调度 |
CN110231909A (zh) * | 2019-05-15 | 2019-09-13 | 广州视源电子科技股份有限公司 | 书写操作的处理方法和装置 |
CN111930425A (zh) * | 2020-06-23 | 2020-11-13 | 联宝(合肥)电子科技有限公司 | 一种数据控制方法、装置以及计算机可读存储介质 |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8832417B2 (en) | 2011-09-07 | 2014-09-09 | Qualcomm Incorporated | Program flow control for multiple divergent SIMD threads using a minimum resume counter |
US9229721B2 (en) | 2012-09-10 | 2016-01-05 | Qualcomm Incorporated | Executing subroutines in a multi-threaded processing system |
US9582321B2 (en) * | 2013-11-08 | 2017-02-28 | Swarm64 As | System and method of data processing |
US10133572B2 (en) * | 2014-05-02 | 2018-11-20 | Qualcomm Incorporated | Techniques for serialized execution in a SIMD processing system |
US9983884B2 (en) * | 2014-09-26 | 2018-05-29 | Intel Corporation | Method and apparatus for SIMD structured branching |
US9928076B2 (en) * | 2014-09-26 | 2018-03-27 | Intel Corporation | Method and apparatus for unstructured control flow for SIMD execution engine |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4435758A (en) * | 1980-03-10 | 1984-03-06 | International Business Machines Corporation | Method for conditional branch execution in SIMD vector processors |
CN1441348A (zh) * | 2002-02-26 | 2003-09-10 | 皇家菲利浦电子有限公司 | 处理程序中的指令的系统 |
US20110078415A1 (en) * | 2009-09-28 | 2011-03-31 | Richard Craig Johnson | Efficient Predicated Execution For Parallel Processors |
US20110219221A1 (en) * | 2010-03-03 | 2011-09-08 | Kevin Skadron | Dynamic warp subdivision for integrated branch and memory latency divergence tolerance |
Family Cites Families (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2273377A (en) * | 1992-12-11 | 1994-06-15 | Hughes Aircraft Co | Multiple masks for array processors |
US5689677A (en) | 1995-06-05 | 1997-11-18 | Macmillan; David C. | Circuit for enhancing performance of a computer for personal use |
US6889319B1 (en) | 1999-12-09 | 2005-05-03 | Intel Corporation | Method and apparatus for entering and exiting multiple threads within a multithreaded processor |
US6947047B1 (en) | 2001-09-20 | 2005-09-20 | Nvidia Corporation | Method and system for programmable pipelined graphics processing with branching instructions |
US20050050305A1 (en) | 2003-08-28 | 2005-03-03 | Kissell Kevin D. | Integrated mechanism for suspension and deallocation of computational threads of execution in a processor |
US7477255B1 (en) | 2004-04-12 | 2009-01-13 | Nvidia Corporation | System and method for synchronizing divergent samples in a programmable graphics processing unit |
US7890735B2 (en) | 2004-08-30 | 2011-02-15 | Texas Instruments Incorporated | Multi-threading processors, integrated circuit devices, systems, and processes of operation and manufacture |
US7761697B1 (en) | 2005-07-13 | 2010-07-20 | Nvidia Corporation | Processing an indirect branch instruction in a SIMD architecture |
US7543136B1 (en) | 2005-07-13 | 2009-06-02 | Nvidia Corporation | System and method for managing divergent threads using synchronization tokens and program instructions that include set-synchronization bits |
US7788468B1 (en) | 2005-12-15 | 2010-08-31 | Nvidia Corporation | Synchronization of threads in a cooperative thread array |
JP2007272353A (ja) | 2006-03-30 | 2007-10-18 | Nec Electronics Corp | プロセッサ装置及び複合条件処理方法 |
US7617384B1 (en) | 2006-11-06 | 2009-11-10 | Nvidia Corporation | Structured programming control flow using a disable mask in a SIMD architecture |
US8312254B2 (en) * | 2008-03-24 | 2012-11-13 | Nvidia Corporation | Indirect function call instructions in a synchronous parallel thread processor |
US8677106B2 (en) | 2009-09-24 | 2014-03-18 | Nvidia Corporation | Unanimous branch instructions in a parallel thread processor |
US8539204B2 (en) | 2009-09-25 | 2013-09-17 | Nvidia Corporation | Cooperative thread array reduction and scan operations |
US8850436B2 (en) | 2009-09-28 | 2014-09-30 | Nvidia Corporation | Opcode-specified predicatable warp post-synchronization |
US8832417B2 (en) * | 2011-09-07 | 2014-09-09 | Qualcomm Incorporated | Program flow control for multiple divergent SIMD threads using a minimum resume counter |
US9229721B2 (en) | 2012-09-10 | 2016-01-05 | Qualcomm Incorporated | Executing subroutines in a multi-threaded processing system |
-
2012
- 2012-09-21 US US13/624,657 patent/US9256429B2/en active Active
-
2013
- 2013-07-08 WO PCT/US2013/049599 patent/WO2014025480A1/en active Application Filing
- 2013-07-08 CN CN201380041768.7A patent/CN104583941B/zh active Active
- 2013-07-08 JP JP2015526539A patent/JP6077117B2/ja not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4435758A (en) * | 1980-03-10 | 1984-03-06 | International Business Machines Corporation | Method for conditional branch execution in SIMD vector processors |
CN1441348A (zh) * | 2002-02-26 | 2003-09-10 | 皇家菲利浦电子有限公司 | 处理程序中的指令的系统 |
US20110078415A1 (en) * | 2009-09-28 | 2011-03-31 | Richard Craig Johnson | Efficient Predicated Execution For Parallel Processors |
US20110219221A1 (en) * | 2010-03-03 | 2011-09-08 | Kevin Skadron | Dynamic warp subdivision for integrated branch and memory latency divergence tolerance |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109146764A (zh) * | 2017-06-16 | 2019-01-04 | 想象技术有限公司 | 对任务进行调度 |
CN109146764B (zh) * | 2017-06-16 | 2023-10-20 | 想象技术有限公司 | 对任务进行调度的方法和系统 |
CN110231909A (zh) * | 2019-05-15 | 2019-09-13 | 广州视源电子科技股份有限公司 | 书写操作的处理方法和装置 |
CN111930425A (zh) * | 2020-06-23 | 2020-11-13 | 联宝(合肥)电子科技有限公司 | 一种数据控制方法、装置以及计算机可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN104583941B (zh) | 2017-05-10 |
JP2015531124A (ja) | 2015-10-29 |
US9256429B2 (en) | 2016-02-09 |
US20140047223A1 (en) | 2014-02-13 |
WO2014025480A1 (en) | 2014-02-13 |
JP6077117B2 (ja) | 2017-02-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104583941A (zh) | 在多线程处理系统中选择性激活恢复检查操作 | |
US9898616B2 (en) | Providing logical partitions with hardware-thread specific information reflective of exclusive use of a processor core | |
CN104603749B (zh) | 用于在单指令多数据simd处理系统中控制发散分支指令的方法和设备 | |
US8082420B2 (en) | Method and apparatus for executing instructions | |
JP3461704B2 (ja) | 条件コードを使用する命令処理システムおよびコンピュータ | |
CN106257411B (zh) | 单指令多线程计算系统及其方法 | |
CN104937541B (zh) | 用于调用多线程加速器的装置和方法 | |
CN109154886B (zh) | 用于处理数据的方法和设备 | |
CN106233248B (zh) | 用于在多线程处理器上执行发散操作的方法和设备 | |
CN103842959A (zh) | 在计算机系统中维持操作数活性信息 | |
ES2777827T3 (es) | Predicados uniformes en sombreadores para unidades de procesamiento de gráficos | |
WO2007107707A3 (en) | Computer architecture | |
CN103365628A (zh) | 用于执行预解码时优化的指令的方法和系统 | |
US7788659B1 (en) | Method of converting computer program with loops to one without loops | |
KR20140097651A (ko) | 멀티 모드 지원 프로세서 및 그 프로세서에서 멀티 모드를 지원하는 방법 | |
WO2020181670A1 (en) | Control flow optimization in graphics processing unit | |
JP2021528730A (ja) | メタデータを使用したニューラルネットワークにおける日和見的な負荷分散のための方法及びシステム | |
WO2002057908A2 (en) | A superscalar processor having content addressable memory structures for determining dependencies | |
KR20140131781A (ko) | 메모리 제어 장치 및 방법 | |
KR101420592B1 (ko) | 컴퓨터 시스템 | |
GB2610242A (en) | Graphics processing | |
KR20230124598A (ko) | 높은 처리량 및 낮은 오버헤드 커널 개시를 위한 압축 커맨드 패킷 | |
US12014208B2 (en) | Techniques for reducing serialization in divergent control flow | |
US20240078182A1 (en) | Parallel processing with switch block execution | |
CN115439303A (zh) | 图形处理 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
EXSB | Decision made by sipo to initiate substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |