CN107430523A - 图形处理器的高效抢占 - Google Patents
图形处理器的高效抢占 Download PDFInfo
- Publication number
- CN107430523A CN107430523A CN201580058893.8A CN201580058893A CN107430523A CN 107430523 A CN107430523 A CN 107430523A CN 201580058893 A CN201580058893 A CN 201580058893A CN 107430523 A CN107430523 A CN 107430523A
- Authority
- CN
- China
- Prior art keywords
- execution unit
- register
- preemption instructions
- request
- instruction
- 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 claims abstract description 54
- 238000004590 computer program Methods 0.000 claims abstract description 38
- 230000015654 memory Effects 0.000 claims description 76
- 238000012545 processing Methods 0.000 claims description 39
- 238000003860 storage Methods 0.000 claims description 19
- 238000003780 insertion Methods 0.000 claims description 9
- 230000037431 insertion Effects 0.000 claims description 9
- 238000004458 analytical method Methods 0.000 claims description 8
- 230000006870 function Effects 0.000 description 24
- 238000010586 diagram Methods 0.000 description 18
- 239000000872 buffer Substances 0.000 description 16
- 230000033001 locomotion Effects 0.000 description 15
- 238000004891 communication Methods 0.000 description 14
- 230000008569 process Effects 0.000 description 14
- 238000004040 coloring Methods 0.000 description 9
- 238000005516 engineering process Methods 0.000 description 9
- 230000007246 mechanism Effects 0.000 description 9
- 238000004321 preservation Methods 0.000 description 9
- 230000004044 response Effects 0.000 description 9
- 108091006146 Channels Proteins 0.000 description 8
- 238000011084 recovery Methods 0.000 description 8
- 239000003795 chemical substances by application Substances 0.000 description 7
- 230000008878 coupling Effects 0.000 description 7
- 238000010168 coupling process Methods 0.000 description 7
- 238000005859 coupling reaction Methods 0.000 description 7
- 230000000694 effects Effects 0.000 description 6
- 208000019300 CLIPPERS Diseases 0.000 description 5
- 208000021930 chronic lymphocytic inflammation with pontine perivascular enhancement responsive to steroids Diseases 0.000 description 5
- 238000001914 filtration Methods 0.000 description 4
- 239000004065 semiconductor Substances 0.000 description 4
- 238000006243 chemical reaction Methods 0.000 description 3
- 230000000295 complement effect Effects 0.000 description 3
- 238000005070 sampling Methods 0.000 description 3
- XLYOFNOQVPJJNP-UHFFFAOYSA-N water Substances O XLYOFNOQVPJJNP-UHFFFAOYSA-N 0.000 description 3
- 230000003044 adaptive effect Effects 0.000 description 2
- 238000012512 characterization method Methods 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 238000009826 distribution Methods 0.000 description 2
- 238000007667 floating Methods 0.000 description 2
- 238000011010 flushing procedure Methods 0.000 description 2
- 239000012634 fragment Substances 0.000 description 2
- 238000007689 inspection Methods 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 229910044991 metal oxide Inorganic materials 0.000 description 2
- 150000004706 metal oxides Chemical class 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000012805 post-processing Methods 0.000 description 2
- 230000008707 rearrangement Effects 0.000 description 2
- 230000009467 reduction Effects 0.000 description 2
- 238000009877 rendering Methods 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 239000012536 storage buffer Substances 0.000 description 2
- 239000000758 substrate Substances 0.000 description 2
- 230000009897 systematic effect Effects 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- 101000912503 Homo sapiens Tyrosine-protein kinase Fgr Proteins 0.000 description 1
- 238000012952 Resampling Methods 0.000 description 1
- 102100026150 Tyrosine-protein kinase Fgr Human genes 0.000 description 1
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000001133 acceleration Effects 0.000 description 1
- 230000003190 augmentative effect Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 239000003086 colorant Substances 0.000 description 1
- 238000005056 compaction Methods 0.000 description 1
- 238000000151 deposition Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000012940 design transfer Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000018109 developmental process Effects 0.000 description 1
- 230000005611 electricity Effects 0.000 description 1
- 230000002349 favourable effect Effects 0.000 description 1
- 239000012530 fluid Substances 0.000 description 1
- 239000011521 glass Substances 0.000 description 1
- 238000005286 illumination Methods 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 230000000873 masking effect Effects 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 210000003205 muscle Anatomy 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 238000010977 unit operation Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/461—Saving or restoring of program or task context
- G06F9/462—Saving or restoring of program or task context with multiple register sets
-
- 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/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
-
- 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
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
- Image Generation (AREA)
Abstract
***和方法可以提供在编译计算机程序的同时***一条或多条抢占指令。将所述一条或多条抢占指令***所述计算机程序中的抢占窗口内减少了每个抢占指令位置处的活跃寄存器数量。进一步,所述抢占指令指示哪些寄存器要被保存在具体程序位置处,一般是在这个程序位置处活跃的寄存器。所述被编译程序可以在执行单元中运行。可以向所述执行单元做出抢占请求,并在正运行于所述执行单元中的所述程序中的下一可用抢占指令处执行所述抢占请求。
Description
相关申请的交叉引用
本申请要求于2014年11月18日提交的美国非临时专利申请号14/543,982的优先权权益。
技术领域
实施例总体上涉及针对图形处理器的抢占。更具体地,实施例涉及针对图形处理单元(GPU)的高效抢占机制。
技术背景
随着提高图形工作负载的复杂度并扩大应用领域,图形架构可以朝更加通用、快速、和响应型设计转移。传统上,图形处理单元(GPU)可以用于加速特定的三维(3D)图形应用,其中,不同的任务在可以被服务之前等待前一上下文被完成并从流水线放走。紧接着图形编程和多任务驱动器模型的最近发展,最近的GPU趋向于提供越来越可编程的执行单元(EU),所述执行单元不仅有用于图形目的(比如计算3D着色器功能),而且还有用于媒体编解码器功能以及从中央处理单元(CPU)卸载的其他一般目的工作负载。虽然多个任务可以通过时间共享的方式使用GPU,一些应用(具体地,触摸用户界面或实时***)要求提交给GPU的高优先级任务在一定的时间预算内执行。这些应用通常涉及抢占,这可以允许GPU暂时停止目前的工作,在抢占请求之后切换至不同的上下文,并在它完成了它由于抢占请求而执行的高优先级任务之后恢复所述已停止的工作。
现有的GPU平台可以为启用抢占提供基本支持。当执行单元接收到由抢占请求而产生的异常时,它可以停止进一步下发来自应用线程的指令,保存当前指令指针,并加载***例程以处理异常。为了保证功能正确性,***例程可以负责保存当前应用的执行状态并稍后在重新开始执行时恢复所述执行状态。由于当任何指令在运行时都可以产生抢占请求,所以常规硬件会保守地保存在当前执行上下文下可以更改的所有***状态。这种方法一般会涉及保存通用寄存器组(GRF)和架构寄存器组(ARF)中所包含的所有寄存器的内容。所述通用寄存器组(GRF)包括通用读写寄存器,而架构寄存器组(ARF)包括出于特定目的而定义的架构寄存器,比如地址寄存器、累加器、标记等。支持抢占的开销中的大部分是保存和恢复此类执行状态所导致的,这会显著地减缓整体***性能和响应性。现有的GPU已经提供了大型寄存器组,以便加速计算,并且结果,每次上下文切换会涉及保存高达几兆字节的数据。随着整合在出现的GPU平台上的执行单元的数量增长,有待保存/恢复的相应状态量和所产生的抢占响应时间会极大地影响***性能。
附图说明
通过阅读以下说明书和所附权利要求书并参考以下附图,实施例的各种优点对于本领域技术人员将变得显而易见,在附图中:
图1是根据实施例的计算机***的一部分的示例的框图;
图2是根据实施例的指令格式的示例的展示;
图3是根据实施例的执行单元的示例的框图;
图4和图5是根据实施例的方法的示例的流程图;
图6至图8是根据实施例的数据处理***的概况的示例的框图;
图9是根据实施例的图形处理引擎的示例的框图;
图10至图12是根据实施例的执行单元的示例的框图;
图13是根据实施例的图形流水线的示例的框图;
图14A至图14B是根据实施例的图形流水线编程的示例的框图;以及
图15是根据实施例的图形软件架构的示例的框图。
具体实施方式
图1根据实施例描绘了包括图形处理单元(GPU,例如,图形处理器)10的一部分的计算机***。所展示的GPU 10包括一个或多个执行单元14。每个执行单元14可以包括GRP16、ARF 18、和控制流栈20。GRF 16和ARF 18中的每一个可以包括具有多个寄存器组的多个寄存器。在所展示的示例中,数据接口12与GPU 10通信以向执行单元发送抢占请求。
编译器22可以对有待由执行单元14执行的应用程序进行编译。所展示的编译器22包括用于创建抢占指令并将其***编译程序中的抢占指令创建器和***器26。另外,存储器24可以与执行单元14通信。存储器24可以在执行抢占指令的过程中接收活跃寄存器(live register)的内容。可选定时器28可以与执行单元14通信从而引起在下面所讨论的环境下立即执行抢占请求。
在对有待在执行单元14中执行的程序进行编译时,编译器22可以***来自抢占指令创建器和***器26的指令。图2是在减少活跃寄存器数量的位置处被***编译程序中的抢占指令的示例,在执行抢占请求的过程中需要保存所述活跃寄存器的内容。在所展示的示例中,指令30具有一般的3部分格式。第一部分32可以是抢占命令本身。第二部分34可以涉及架构寄存器,而第三部分36可以涉及通用寄存器。在一个示例中,抢占命令部分32可以是与抢占命令相对应的8位操作码。在第二部分34中,第50至63位可以是14位的立即值,其中,每一位分辨相应的架构寄存器是否要被保存/恢复。在第三部分36中,第64至127位可以是64位的立即值,其中,每一位分辨其相应的两个通用寄存器是否要被保存/恢复。注意,所展示的指令30仅是可以被编译器***并且可以使用其他格式的指令的示例。
具体地,要注意的是,不同架构寄存器的大小和粒度可以不同。因此,对架构寄存器立即值进行编码可以是灵活的,取决于可用位的数量、保存附加子寄存器的开销、以及解码逻辑的复杂性。例如,用于代表不同架构寄存器的位可以是统一的,如果它们适应同一高速缓存路线的话。可替代地,剩余的保留位可以用来区分不同地址子寄存器,如果这样做将进一步减少上下文保存/恢复开销的话。
继续参照图1和图2,编译器抢占指令创建器和***器26可以在正被编译的程序中的各个点***抢占指令30。在编译时间,可以基于寄存器压力和抢占窗口在程序位置***抢占指令30。寄存器压力指示多少寄存器同时活跃于程序位置处。可以通过活跃性(liveness)分析来计算活跃寄存器的数量。活跃性分析通常是在编译器中执行的寄存器分配(RA)的整体部分。还可以使用其他方式来确定寄存器压力。可以保守地确定结果,从而使得它包括可以被使用的任何潜在寄存器,从而保证上下文切换之后的功能正确性。对于仅用于特殊目的架构寄存器,比如累加器寄存器或控制寄存器,编译器22可以执行上下文不敏感的分析来判定它们究竟是否被用于当前程序中。
寄存器压力越高(即同时活跃的寄存器越多),可以保存/恢复越多的执行状态,这会导致更高的抢占成本(时间、存储器使用等)。因此,可以用较低寄存器压力在选定的位置处***抢占指令。编译器22可以采取“贪婪”算法来在抢占窗口内以本地最小寄存器压力找到***位置,如下面所描述的。
抢占窗口可以是两条抢占指令之间的间隔。可以借助估计的后续指令执行时间、二进制大小和正常执行惩罚、和***响应度量来确定抢占窗口间隔的长度。关于后续指令的估计执行时间,要注意的是,在执行典型EU指令时,保存/恢复执行状态所涉及的存储器操作的等待时间会高得多。如果EU 14正以高寄存器压力执行指令时接收到抢占指令,则继续执行当前线程直到到达具有减小的寄存器压力的下一抢占指令所需的总时间比强制立即抢占可以少得多。对于离程序的末端不远的指令,抢占请求发生在这一点时,编译器22可以在不节约任何寄存器的情况下灵活地决定让程序运行直到完成。即,在一个示例中,当所估计的后续指令的执行时间较小时,在程序末端附近不***抢占指令。
关于二进制大小和执行惩罚,由于抢占指令30不是原始程序的一部分,所以当不存在活动的(active)抢占请求时,指令30可以在正常执行模式下被设定为无操作(即,指令将不被执行,即,在解码阶段被抑制)。因此,频繁***抢占指令会增加二进制大小并惩罚正常执行时间以及指令高速缓存性能。因而,可以选定抢占窗口大小,从而避免抢占指令的过度***以使执行惩罚最小化。
关于***响应要求,***不会等待太长时间以为抢占请求服务,因为这会消极地影响用户界面体验。如果等待时间太大,将引起超时检测和恢复(TDR)过程。例如,针对大型着色器程序,可以在策略点***抢占指令从而保证前向进度。在一个实例中,在页面错误时可能招致意外地长的等待时间的每次读取操作之后,***抢占指令。
在所估计的执行时间、二进制大小和正常执行惩罚之间实现平衡折中,并且***响应性要求可以涉及对抢占操作成本和程序执行时间的评估。抢占成本的大部分来自上下文保存/恢复。因此,所述成本可以与必须保存/恢复的活跃执行状态的量成比例。可以通过编译时间分析来估计程序执行时间,比如使用从指令调度器中完成的机器模型导出的静态周期计数。然而,这种方式可能不是动态执行时间的精确反映并且因此可以被调整。例如,如果程序中存在在抢占窗口内具有较大未知跳脱计数的循环,所述循环完成并到达下一抢占指令可能会花费太长时间。在这种情形下,可以在循环体内部进行截割从而保证在循环迭代中可以发生抢占。
在实践中,编译器22的抢占指令创建器和***器26被配置成用于:选择反映了以合理延迟(即,不影响用户界面体验的延迟)可以执行的普通指令的最大数量的阈值,所述阈值通常是总体抢占等待时间和***响应时限的一小部分。为了减轻不准确的编译时间分析结果所产生的任何较差软件决策效果,如果花费执行单元太长时间到达下一抢占指令的话,则所展示的计时器28指示执行单元14立即执行抢占请求。当计时器被触发时,GRF 16和ARF 18中的所有寄存器被保守地保存/恢复。
图3是执行单元70的示例的框图。注意,执行单元70可以同时作用于如图3中示意性描绘的八个线程;还可以选择其他数量的多个线程进行处理。执行单元70可以包括用于接收抢占请求的抢占状态机72和用于从指令高速缓存接收指令的指令队列73。来自抢占状态机和指令队列的输入可以在解码器74处被解码,所述输入描绘了各种线程状态,包括指令解码、依赖性检查、预测控制、通道启用、流控制、IP+偏移、和异常。解码器74可以将不存在未决抢占请求的抢占指令丢弃。如果在解码时存在带有未决抢占请求的抢占指令,则所展示的抢占状态机72与GRF和ARF 75交互(注意,在这个附图中,标记GRF代表GRF和ARF两者)。一个GRF/EU硬件线程用元素75的每个方框表示,其中,针对每个GRF可选地选定128个寄存器,其中,每个寄存器256位(8浮点数),虽然也可以选择其他值。抢占状态机与GRF和ARF 75交互,并确定或被指示在抢占过程中要保存哪些寄存器。如果被解码的指令不是抢占指令,则它可以前进至操作数拾取76、重排/数据记录器77、算术逻辑单元(ALU)78和向GRF/ARF 75发送数据的回写79。
继续参照图1至图3,图4描绘了在接收到抢占请求时由图1的***执行的方法60的示例的概况流程图。所述方法60可以被实现为逻辑指令集中的一个或多个模块,所述逻辑指令集存储在如随机存取存储器(RAM)、只读存储器(ROM)、可编程ROM(PROM)、固件、闪存等的机器或计算机可读存储介质中,在如例如可编程逻辑阵列(PLA)、现场可编程门阵列(FPGA)、复杂可编程逻辑器件(CPLD)的可配置逻辑中,在使用如例如专用集成电路(ASIC)、互补金属氧化物半导体(CMOS)或晶体管-晶体管逻辑(TTL)技术或其任何组合的电路技术的固定功能硬件逻辑中。
在方框62中,在计算机程序的编译过程中***抢占指令。在方框64中,已编译程序在执行单元14中运行。在方框66中,向执行单元14做出抢占请求。在方框68中,在已编译程序中发现的下一抢占指令处执行/服务抢占请求。
继续参照图1至图3,图5描绘了在接收到抢占请求时由图1的***执行的详细方法40的示例的概况流程图。方法40可以被实现为逻辑指令集中的一个或多个模块,所述逻辑指令集存储在如RAM、ROM、PROM、固件、闪存等的机器或计算机可读存储介质中,在如例如PLA、FPGA、CPLD的可配置逻辑中,在使用如例如ASIC、CMOS或TTL技术或其任何组合的电路技术的固定功能硬件逻辑中。
在接收到抢占请求之前,在处理框42,执行单元14/70正执行应用指令指针(AIP)处的程序指令。在执行单元14/70接收到抢占请求之前,它不对所***的抢占指令30采取行动。当抢占状态机72接收到抢占请求44时,它将不会停止在方框46、47运行当前应用(即,它将继续应用执行并更新AIP),直到它在方框48遇到下一条***的抢占指令30。此时,执行单元14/70可以执行抢占指令30。由于可以将活跃寄存器图编码在抢占指令中,所以抢占状态机72可以被准确地指示要保存哪些执行状态,由此节约了保存不活动的寄存器会需要的任何额外时间和带宽。在流程图中的方框50处示出了这种方法,其中,保存AIP和选定的状态。进一步,抢占状态机72可以在方框50直接执行保存/恢复操作,而不涉及***例程。***例程可能招致额外的上下文切换开销并且通常涉及额外的指令序列,以便保存/恢复一定的架构寄存器。
在将选定的状态存储在存储器24中之后,在方框52处可以执行新的上下文。所述新的上下文可以是所确定的用于由抢占请求执行的上下文。一旦新的上下文已经完成执行,在方框54处就可以恢复选定的状态和AIP。在恢复这些状态和AIP之后,在所展示的方框56处执行被抢占的程序中的下一指令,并且这个程序可以继续被执行单元14/70执行。
在替代方案中,在一些***中,由于硬件资源限制或其他约束,可能难以***抢占指令。这种经更改的方法可以涉及将静态分析结果比如抢占指令指针和活跃寄存器信息保存至存储器内查找表中。当为抢占请求服务时,***例程可以首先检索此信息并且用其仅保活跃活跃寄存器,从而使得仍然存在相当大的抢占开销减少。
综述——图6至图8
图6是根据实施例的数据处理***100的框图。数据处理***100包括一个或多个处理器102以及一个或多个图形处理器108,并且可以是单处理器桌面***、多处理器工作站***、或具有大量处理器102或处理器核107的服务器***。在一个实施例中,数据处理***100是用于移动式、手持式、或嵌入式设备的片上***(SOC)集成电路。
数据处理***100的实施例可以包括或并入基于服务器的游戏平台、游戏控制台,包括游戏或媒体控制台、移动游戏控制台、手持游戏控制台、或在线游戏控制台。在一个实施例中,数据处理***100是移动设备、智能电话、平板计算设备或移动互联网设备。数据处理***100还可以包括可穿戴设备(诸如智能手表可穿戴设备、智能眼镜设备、增强现实设备、或虚拟现实设备)、与所述可穿戴设备耦合、或者集成在所述可穿戴设备中。在一个实施例中,数据处理***100是电视或机顶盒设备,所述电视或机顶盒设备具有一个或多个处理器102以及由一个或多个图形处理器108生成的图形界面。
所述一个或多个处理器102各自包括用于处理指令的一个或多个处理器核107,所述指令在被执行时执行***和用户软件的操作。在一个实施例中,所述一个或多个处理器核107中的每一个被配置成用于处理特定指令集109。指令集109可以促进复杂指令集计算(CISC)、精简指令集计算(RISC)、或经由超长指令字(VLIW)的计算。多个处理器核107可以各自处理不同的指令集109,所述指令集可以包括用于促进对其他指令集进行仿真的指令。处理器核107还可以包括其他处理设备,如数字信号处理器(DSP)。
在一个实施例中,处理器102包括高速缓存存储器104。取决于架构,处理器102可具有单个内部高速缓存或多级内部高速缓存。在一个实施例中,在处理器102的各部件之间共享所述高速缓存存储器。在一个实施例中,处理器102还使用外部高速缓存(例如,三级(L3)高速缓存或末级高速缓存(LLC))(未示出),可以使用已知的高速缓存一致性技术在处理器核107之间共享所述外部高速缓存。寄存器组106附加地包括在处理器102中,所述处理器可以包括用于存储不同类型数据的不同类型的寄存器(例如,整数寄存器、浮点寄存器、状态寄存器、和指令指针寄存器)。一些寄存器可以是通用寄存器,而其他寄存器可以专用于处理器102的设计。
处理器102耦合至处理器总线110,所述处理器总线用于在处理器102与***100内的其他部件之间传输数据信号。***100使用示例性‘中枢’***架构,包括存储器控制器中枢116和输入输出(I/O)控制器中枢130。存储器控制器中枢116促进存储器设备与***100的其他部件之间的通信,而I/O控制器中枢(ICH)130经由本地I/O总线提供与I/O设备的连接。
存储器设备120可以是动态随机存取存储器(DRAM)设备、静态随机存取存储器(SRAM)设备、闪存设备、或具有合适的性能用作处理存储器的某个其他存储器设备。存储器120可以存储数据122和指令121,以供在处理器102执行过程时使用。存储器控制器中枢116还与可选的外部图形处理器112耦合,所述可选的外部图形处理器可以与处理器102中与所述一个或多个图形处理器108通信,从而执行图形和媒体操作。
ICH 130使得***设备能够经由高速I/O总线连接至存储器120和处理器102。I/O***设备包括音频控制器146、固件接口128、无线收发器126(例如,Wi-Fi、蓝牙)、数据存储设备124(例如,硬盘驱动、闪存存储器等)、和用于将传统(例如,个人***2(PS/2))设备耦合至***的传统I/O控制器。一个或多个通用串行总线(USB)控制器142连接输入设备,比如键盘和鼠标144组合。网络控制器134还可以耦合至ICH 130。在一个实施例中,高性能网络控制器(未示出)耦合至处理器总线110。
图7是具有一个或多个处理器核202A-N、集成存储器控制器214、和集成图形处理器208的处理器200的实施例的框图。处理器200可以包括附加核,高达且包括虚线框所代表的附加核202N。核202A-N中的每一个包括一个或多个内部高速缓存单元204A-N。在一个实施例中,每个核还可以访问一个或多个共享的高速缓存单元206。
所述内部高速缓存单元204A-N和共享的高速缓存单元206代表处理器200内部的高速缓存存储器层级。高速缓存存储器层级可以包括每个核内的至少一级指令和数据高速缓存、以及一级或多级共享中级高速缓存(比如2级(L2)、三级(L3)、四级(L4)、或其他级高速缓存,其中,外部存储器之前的最高级高速缓存被分类为末级高速缓存(LLC))。在一个实施例中,高速缓存一致性逻辑维持各个高速缓存单元206与204A-N之间的一致性。
处理器200还可以包括一组一个或多个总线控制器单元216和***代理210。所述一个或多个总线控制器单元216管理一组***总线,比如一个或多个***部件互连总线(例如,PCI、PCI快速总线)。***代理210提供对各处理器部件的管理功能。在一个实施例中,***代理210包括一个或多个集成存储器控制器214用于管理对各外部存储器设备(未示出)的访问。
在一个实施例中,核202A-N中的一个或多个包括对同步多线程的支持。在这种实施例中,***代理210包括用于在多线程处理过程中协调和操作核202A-N的部件。***代理210可以附加地包括功率控制单元(PCU),所述功率控制单元包括用于调节核202A-N的功率状态的逻辑和部件以及图形处理器208。
处理器200附加地包括用于执行图形处理操作的图形处理器208。在一个实施例中,图形处理器208耦合至共享高速缓存单元206集以及***代理单元210,所述***代理单元包括所述一个或多个集成存储器控制器214。在一个实施例中,显示控制器211耦合至图形处理器208从而以便将图形处理器输出驱动到一个或多个耦合的显示器。所述显示控制器211可以是经由至少一个互连与图形处理器耦合的单独模块,或者可以集成在图形处理器208或***代理210内。
在一个实施例中,基于环的互连单元212用于耦合处理器200的内部部件,然而,可以使用替代性互连单元,比如点到点互连、切换式互连、或其他技术,包括本领域众所周知的技术。在一个实施例中,图形处理器208经由I/O链路213与环形互连212耦合。
示例性I/O链路213代表多个I/O互连中的至少一个,包括促进各处理器部件与高性能嵌入式存储器模块218(比如eDRAM模块)之间的通信的封装体I/O互连。在一个实施例中,核202-N中的每一个和图形处理器208使用嵌入式存储器模块218作为共享末级高速缓存。
在一个实施例中,核202A-N是在同一指令集架构上执行的均质核。在另一实施例中,核202A-N就指令集架构(ISA)而言是异质的,其中,核202A-N中的一个或多个执行第一指令集,而其他核中的至少一个执行所述第一指令集的子集或不同的指令集。
处理器200可以是使用多项处理技术(例如,互补型金属氧化物半导体(CMOS)、双极结型/互补型金属氧化物半导体(BiCMOS)、或N型金属氧化物半导体逻辑(NMOS))中的任何处理技术的一个或多个衬底的一部分或者实现在所述一个或多个衬底上。另外,处理器200可以实现在一个或多个芯片上或被实现为具有除其他部件之外的所展示的片上***(SOC)集成电路。
图8是图形处理器300的一个实施例的框图,所述图形处理器可以是独立的图形处理单元,或者可以是整合有多个处理核的图形处理器。在一个实施例中,图形处理器经由到图形处理器上的寄存器的映射I/O接口并且经由被放置在处理器中的命令与存储器进行通信。图形处理器300包括用于访问存储器的存储器接口314。存储器接口314可以是到本地存储器、一个或多个内部高速缓存、一个或多个共享外部高速缓存、和/或到***存储器的接口。
图形处理器300还包括显示控制器302,所述显示控制器用于将显示输出数据驱动到显示设备320。显示控制器302包括用于显示器的一个或多个重叠平面的硬件以及多层视频或用户接口元件的组成。在一个实施例中,图形处理器300包括用于编码、解码、或者向、从或在一个或多个媒体编码格式之间进行媒体代码转换的视频编解码器引擎306,包括但不限于:运动图像专家组(MPEG)(诸如MPEG-2)、高级视频编码(AVC)格式(诸如H.264/MPEG-4AVC)、以及电影&电视工程师协会(SMPTE)421M/VC-1、和联合图像专家组(JPEG)格式(诸如JPEG、以及运动JPEG(MJPEG)格式)。
在一个实施例中,图形处理器300包括块图像转移(BLIT)引擎304以便执行二维(2D)光栅化器操作,包括例如位边界块转移。然而,在一个实施例中,使用图形处理引擎(GPE)310的一个或多个部件执行2D图形操作。图形处理引擎310是用于执行图形操作的计算引擎,所述图形操作包括三维(3D)图形操作和媒体操作。
GPE 310包括用于执行3D操作的3D流水线312,比如使用作用于3D图元形状(例如,矩形、三角形等)的处理功能来渲染三维图像和场景。3D流水线312包括可编程且固定的功能元件,所述可编程且固定功能元件在到3D/媒体子***315的元件和/或生成的执行线程内执行各种任务。虽然3D流水线312可以用来执行媒体操作,但是GPE 310的实施例还包括媒体流水线316,所述媒体流水线具体地用于执行媒体操作,诸如视频后处理和图像增强。
在一个实施例中,媒体流水线316包括固定功能或可编程逻辑单元以便代替、或代表视频编解码器引擎306来执行一种或多种专门的媒体操作,比如视频解码加速、视频去隔行、以及视频编码加速。在一个实施例中,媒体流水线316附加地包括线程生成单元以便生成用于在3D/媒体子***315上执行的线程。所生成的线程对3D/媒体子***中所包括的一个或多个图形执行单元的媒体操作进行计算。
3D/媒体子***315包括用于执行3D流水线312和媒体流水线316生成的线程的逻辑。在一个实施例中,流水线向3D/媒体子***315发送线程执行请求,所述3D/媒体子***包括用于仲裁并将各请求分派到可用的线程执行资源的线程分派逻辑。所述执行资源包括用于处理3D线程和媒体线程的图形执行单元阵列。在一个实施例中,3D/媒体子***315包括用于线程指令和数据的一个或多个内部高速缓存。在一个实施例中,子***还包括共享存储器(包括寄存器和可寻址存储器)以便在线程之间共享数据并用于存储输出数据。
3D/媒体处理——图9
图9是用于图形处理器的图形处理引擎410的实施例的框图。在一个实施例中,图形处理引擎(GPE)410是图8中所示GPE 310的一个版本。GPE 410包括3D流水线412和媒体流水线416,其中每个流水线可以与图8的3D流水线312和媒体流水线316的实现方式不同或者类似。
在一个实施例中,GPE 410与命令流送器403耦合,所述命令流送器向GPE 3D流水线412和媒体流水线416提供命令流。命令流送器403耦合至存储器,所述存储器可以是***存储器、或内部高速缓存存储器和共享高速缓存存储器中的一个或多个高速缓存存储器。所述命令流送器403从所述存储器接收命令并将这些命令发送至3D流水线412和/或媒体流水线416。所述3D和媒体流水线通过经由各自流水线内的逻辑执行操作或者通过将一个或多个执行线程分派至执行单元阵列414来处理所述命令。在一个实施例中,执行单元阵列414是可扩展的,从而使得所述阵列包括基于GPE 410的目标功率和性能水平的可变数量的执行单元。
采样引擎430与存储器(例如,高速缓存存储器或***存储器)和执行单元阵列414耦合。在一个实施例中,采样引擎430为可扩展执行单元阵列414提供存储器访问机制,所述存储器访问机制允许执行单元阵列414从存储器读取图形和媒体数据。在一个实施例中,采样引擎430包括用于执行针对媒体的专门图像采样操作的逻辑。
采样引擎430中的所述专门媒体采样逻辑包括去噪/去隔行模块432、运动估计模块434、和图像缩放和滤波模块436。所述去噪/去隔行模块432包括用于对经解码的视频数据执行去噪或去隔行算法中的一项或多项的逻辑。所述去隔行逻辑将隔行的视频内容的交替字段组合成单帧视频。所述去噪逻辑从视频和图像数据减少或去除数据噪声。在一个实施例中,所述去噪和去隔行逻辑是运动自适应的并且使用基于在所述视频数据中检测到的运动量的空间或时间滤波。在一个实施例中,去噪/去隔行模块432包括专门的运动检测逻辑(例如,在运动估计引擎434内)。
运动估计引擎434通过对视频数据执行视频加速功能(比如运动向量估计和预测)来为视频操作提供硬件加速。运动估计引擎确定运动向量,所述运动向量描述了连续视频帧之间的图像数据的变换。在一个实施例中,图形处理器媒体编解码器使用视频运动估计引擎434来对宏块级视频执行操作,对于其使用通用处理器来执行可以另外地是计算密集型的。在一个实施例中,运动估计引擎434通常可用于图形处理器部件以便辅助视频解码和处理功能,所述视频解码和处理功能对于视频数据内的运动的方向或幅度是敏感或自适应的。
图像缩放和滤波模块436执行图像处理操作以便增强所生成的图像和视频的视觉质量。在一个实施例中,所述缩放和滤波模块436在向执行单元阵列414提供数据之前在采样操作过程中处理图像和视频数据。
在一个实施例中,图形处理引擎410包括数据端口444,所述数据端口提供用于图形子***访问存储器的附加机制。数据端口444针对操作促进存储器访问,所述操作包括渲染目标写入、恒定缓冲器读取、暂时存储器空间读区/写入、和媒体表面访问。在一个实施例中,数据端口444包括用于高速缓存对存储器的访问的高速缓存存储器空间。所述高速缓存存储器可以是单个数据高速缓存或被分割为用于所述多个子***的多个高速缓存,所述多个高速缓存经由数据端口访问存储器(例如,渲染缓冲器高速缓存、恒定缓冲器高速缓存等)。在一个实施例中,在执行单元阵列414中的执行单元上执行的线程通过经由数据分配互连来交换消息而与所述数据端口进行通信,所述数据分配互连耦合所述图形处理引擎410的所述子***中的每个子***。
执行单元——图10至图12
图10是图形处理器的另一实施例的框图。在一个实施例中,图形处理器包括环形互连502、流水线前端504、媒体引擎537、和图形核580A-N。环形互连502将图形处理器耦合至其他处理单元,包括其他图形处理器或一个或多个通用处理器核。在一个实施例中,图形处理器是集成在多核处理***内的多个处理器之一。
图形处理器经由所述环形互连502接收多批命令。传入命令由流水线前端504中的命令流送器503来解译。图形处理器包括用于经由(多个)图形核580A-N执行3D几何处理和媒体处理的可扩展执行逻辑。对于3D几何处理命令,命令流送器503将命令提供给几何流水线536。对于至少一些媒体处理命令,命令流送器503将命令提供给视频前端534,所述视频前端与媒体引擎537耦合。媒体引擎537包括用于视频和图像后处理的视频质量引擎(VQE)530以及用于提供硬件加速的媒体数据编码和解码的多格式编码/解码(MFX)533引擎。几何流水线536和媒体引擎537各自生成执行线程,所述执行线程用于由至少一个图形核580A提供的线程执行资源。
图形处理器包括可扩展线程执行资源表征模块核580A-N(有时被称为核分片),各个可扩展线程执行资源表征模块核具有多个子核550A-N、560A-N(有时被称为核子分片)。图形处理器可以具有任意数量的图形核580A至580N。在一个实施例中,图形处理器包括图形核580A,所述图形核至少具有第一子核550A和第二子核560A。在另一实施例中,图形处理器是具有单个子核(例如,550A)的低功率处理器。在一个实施例中,图形处理器包括多个图形核580A-N,各自包括一组第一子核550A-N和一组第二子核560A-N。所述这组第一子核550A-N中的每个子核至少包括第一组执行单元552A-N和媒体/纹理采样器554A-N。所述这组第二子核560A-N中的每个子核至少包括第二组执行单元562A-N和采样器564A-N。在一个实施例中,每个子核550A-N、560A-N共享一组共享资源570A-N。在一个实施例中,所述共享资源包括共享的高速缓存存储器和像素操作逻辑。其他共享资源也可以包括在图形处理器的各实施例中。
图11展示了线程执行逻辑600,所述线程执行逻辑包括图形处理引擎的一个实施例中所采取的处理元件阵列。在一个实施例中,线程执行逻辑600包括像素着色器602、线程分派器604、指令高速缓存606、包括多个执行单元608A-N的可扩展执行单元阵列、采样器610、数据高速缓存612、和数据端口614。在一个实施例中,所包括的部件经由互连结构而互连,所述互连结构链接至所述部件中的每个部件。线程执行逻辑600包括通过指令高速缓存606、数据端口614、采样器610、和执行单元阵列608A-N中的一项或多项与存储器(比如***存储器或高速缓存存储器)的一个或多个连接。在一个实施例中,每个执行单元(例如,608A)是能够执行多个同步线程并针对每个线程并行地处理多个数据元素的个体向量处理器。执行单元阵列608A-N包括任意数量的个体执行单元。
在一个实施例中,执行单元阵列608A-N主要用于执行“着色器”程序。在一个实施例中,阵列608A-N中的执行单元执行指令集(所述指令集包括对许多标准3D图形着色器指令的本机支持),从而使得以最小的转换执行来自图形库(例如,Direct 3D和OpenGL)的着色器程序。执行单元支持顶点和几何处理(例如,顶点程序、几何程序、顶点着色器)、像素处理(例如,像素着色器、碎片着色器)和通用处理(例如,计算和媒体着色器)。
执行单元阵列608A-N中的每个执行单元在数据元素阵列上进行操作。数据元素的数量是“执行大小”、或针对指令的通道数量。执行通道是执行数据元素访问、掩盖、和指令内的流控制的逻辑单元。通道的数量可以与针对特定图形处理器的物理ALU或FPU的数量无关。执行单元608A-N支持整数和浮点数据类型。
执行单元指令集包括单指令多数据(SIMD)指令。所述各数据元素可作为紧缩数据类型存储在寄存器中,并且所述执行单元将基于所述元素的数据大小来处理所述各元素。例如,当在256位宽的向量上进行操作时,所述256位的向量存储在寄存器中,并且所述执行单元作为四个单独64位紧缩数据元素(四倍字长(QW)大小的数据元素)、八个单独32位紧缩数据元素(双倍字长(DW)大小的数据元素)、十六个单独16位紧缩数据元素(字长(W)大小的数据元素)、或三十二个单独8位数据元素(字节(B)大小的数据元素)在所述向量上进行操作。然而,不同的向量宽度和寄存器大小是可能的。
一个或多个内部指令高速缓存(例如,606)包括在所述线程执行逻辑600中以便高速缓存所述执行单元的线程指令。在一个实施例中,一个或多个数据高速缓存(例如,612)被包括用于高速缓存在线程执行过程中的线程数据。采样器610被包括用于为3D操作提供纹理采样并且为媒体操作提供媒体采样。在一个实施例中,采样器610包括专门的纹理或媒体采样功能,以便在向执行单元提供采样数据之前在采样处理过程中处理纹理或媒体数据。
在执行过程中,所述图形和媒体流水线通过线程生成和分派逻辑向线程执行逻辑600发送线程发起请求。线程执行逻辑600包括本地线程分派器604,所述本地线程分派器604对来自图形和媒体流水线的线程启动请求进行仲裁并在一个或多个执行单元608A-N上将所请求的线程实例化。例如,几何流水线(例如,图10的536)向线程执行逻辑600分派顶点处理、镶嵌、或几何处理线程。线程分派器604还可以处理来自执行着色器程序的运行时间线程生成请求。
一旦一组几何对象被处理并被光栅化成像素数据,则像素着色器602被调用以便进一步计算输出信息并且使得结果被写入到输出表面(例如,色彩缓冲器、深度缓冲器、模板缓冲器等)。在一个实施例中,像素着色器602计算各顶点属性的值,所述各顶点属性跨光栅化对象被内插。像素着色器602然后执行API供应的像素着色器程序。为了执行所述像素着色器程序,所述像素着色器602经由所述线程分派器604将线程分派至执行单元(例如,608A)。像素着色器602使用采样器610中的纹理采样逻辑来访问存储器中所存储的纹理图中的纹理数据。对纹理数据和输入几何数据的算术运算计算每个几何碎片的像素颜色数据,或丢弃一个或多个像素而不进行进一步处理。
在一个实施例中,数据端口614提供存储器访问机制,供线程执行逻辑600将经处理的数据输出至存储器以便在图形处理器输出流水线上进行处理。在一个实施例中,数据端口614包括并耦合至一个或多个高速缓存存储器(例如,数据高速缓存612)从而经由数据端口高速缓存数据以供存储器访问。
图12是根据实施例展示了图形处理器执行单元指令格式的框图。在一个实施例中,图形处理器执行单元支持具有多种格式的指令的指令集。实线框展示了通常包括在执行单元指令中的部件,而虚线包括可选的部件或仅包括在指令子集中的部件。所描述和展示的指令格式是宏指令,因为它们是供应至执行单元的指令,这与从指令解码产生的微操作相反(一旦所述指令被处理)。
在一个实施例中,图形处理器执行单元本机地支持采用128位格式710的指令。64位压缩指令格式730可用于基于所选择的指令、指令选项、以及操作数量的一些指令。所述本机128位格式710提供对所有指令选项的访问,而一些选项和操作限制在所述64位格式730中。64位格式730中可用的本机指令根据实施例而不同。在一个实施例中,使用索引字段713中的一组索引值将指令部分地压紧。所述执行单元硬件基于所述索引值来参考一组压缩表,并使用所述压缩表输出来重构采用128位格式710的本机指令。
对于每种格式,指令操作码712限定了所述执行单元要执行的操作。所述执行单元跨每个操作数的所述多个数据元素来并行地执行每条指令。例如,响应于添加指令,所述执行单元跨每个颜色通道执行同步添加操作,所述颜色通道表示纹理元素或图片元素。默认地,所述执行单元跨所述操作数的所有数据通道执行每条指令。指令控制字段714使得能够控制某些执行选项,比如通道选择(例如,预测)和数据通道排序(例如,重排)。对于128位的指令710,执行大小字段716限制了将并行执行的数据通道的数量。执行大小字段716不可用于64位的紧凑指令格式730。
一些执行单元指令具有多达三个操作数,包括两个源操作数(src0 720、src1722)和一个目的地操作数718。在一个实施例中,执行单元支持双目的地操作数指令,其中,这些目的地操作数之一是隐式的。数据操控指令可以具有三个源操作数(例如,SRC2 724),其中,指令操作码712确定源操作数的数量。指令的最后一个源操作数可以是指令所传递的中间值(例如,硬编码值)。
在一个实施例中,基于操作码位字段将指令进行分组从而简化操作码解码740。对于8位的操作码,第4、5、和6位允许执行单元确定操作码的类型。所示出的精确操作码分组是示例性的。在一个实施例中,移动和逻辑操作码分组742包括数据移动和逻辑指令(例如,mov、cmp)。所述移动和逻辑分组742共享五个最高有效位(MSB),其中,移动指令是0000xxxxb(例如,0x0x)形式,并且逻辑指令是0001xxxxb(例如,0x01)形式。流控制指令分组744(例如,call、jmp)包括0010xxxxb(例如,0x20)形式的指令。杂项指令分组746包括指令的混合,包括0011xxxxb(例如,0x30)形式的同步指令(例如,wait、send)。并行数学指令分组748包括0100xxxxb(例如,0x40)形式的分量式算术指令(例如,add、mul)。并行数据分组748跨数据通道并行地执行算术运算。向量数学分组750包括0101xxxxb(例如,0x50)形式的算术指令(例如,dp4)。向量数学分组对向量操作数执行算术运算,比如点积运算。
图形流水线——图13
图13是图形处理器的另一实施例的框图,所述图形处理器包括图形流水线820、媒体流水线830、显示引擎840、线程执行逻辑850、和渲染输出流水线870。在一个实施例中,图形处理器是包括一个或多个通用处理核的多核处理***内的图形处理器。图形处理器受到至一个或多个控制寄存器(未示出)的寄存器写入的控制或者经由环形互连802经由下发至所述图形处理器的命令被控制。环形互连802将图形处理器耦合至其他处理部件,比如其他图形处理器或通用处理器。来自所述环形互连的命令通过命令流送器803被解译,所述命令流转换器将指令供应至所述图形流水线820或媒体流水线830的单独部件。
所述命令流送器803引导顶点拾取器805部件的操作,所述顶点拾取器部件从存储器读取顶点数据并执行由所述命令流送器803所提供的顶点处理命令。所述顶点拾取器805将顶点数据提供给顶点着色器807,所述顶点着色器对每个顶点进行坐标空间转换和照明操作。顶点拾取器805和顶点着色器807通过经由线程分派器831向执行单元852A、852B分派执行线程来执行顶点处理指令。
在一个实施例中,执行单元852A、852B是具有用于执行图形和媒体操作的指令集的向量处理器阵列。执行单元852A、852B具有附接的L1高速缓存851,所述高速缓存对每个阵列是特定的或在阵列之间被共享。所述高速缓存可以被配置成数据高速缓存、指令高速缓存、或单个高速缓存,所述单个高速缓存被分区为包含不同分区中的数据和指令。
在一个实施例中,图形流水线820包括用于执行3D对象的硬件加速镶嵌的镶嵌部件。可编程的外壳着色器811配置镶嵌操作。可编程域着色器817提供对镶嵌输出的后端评估。镶嵌器813在外壳着色器811的方向上进行操作并且包含专用逻辑,所述专用逻辑用于基于粗糙几何模型来生成详细的几何对象集合,所述粗糙几何模型作为输入被提供至所述图形流水线820。如果未使用镶嵌,则所述镶嵌部件811、813、817可以被旁路掉。
完整的几何对象可以由几何着色器819经由被分派至所述执行单元852A、852B的一个或多个线程被处理、或者可以直接行进至剪裁器829。几何着色器在整个几何对象(而非顶点或者如所述图形流水线的先前级中的顶点分片)上进行操作。如果禁用所述镶嵌,则所述几何着色器819从所述顶点着色器807接收输入。几何着色器819可由几何着色器程序编程以便在镶嵌单元被禁用时执行几何镶嵌。
在光栅化之前,顶点数据由剪裁器829来处理,所述剪裁器是固定功能剪裁器或者是具有剪裁和几何着色器功能的可编程剪裁器。在一个实施例中,渲染输出流水线870的光栅化器873分派像素着色器以将几何对象转换成其每像素表示。在一个实施例中,像素着色器逻辑包括在线程执行逻辑850中。
图形引擎具有互连总线、互连结构、或某个其他的互连机制,所述互连机制允许数据和消息在所述图形引擎的主要部件之中传递。在一个实施例中,执行单元852A、852B和(多个)相关联的高速缓存851、纹理和媒体采样器854、以及纹理/采样器高速缓存858经由数据端口856进行互连,以便执行存储器访问并且与所述图形引擎的渲染输出流水线部件进行通信。在一个实施例中,采样器854、高速缓存851、858以及执行单元852A、852B各自具有单独的存储器访问路径。
在一个实施例中,渲染输出流水线870包含光栅化器和深度测试部件873,所述光栅化器和深度测试部件将基于顶点的对象转换为其相关联的基于像素的表示。在一个实施例中,光栅化逻辑包括用于执行固定功能三角形和线光栅化的窗口器/掩蔽器单元。相关联的渲染和深度缓冲器高速缓存878、879在一个实施例中也是可用的。像素操作部件877对所述数据执行基于像素的操作,尽管在一些实例中,与2D操作(例如,利用混合的位块图像转移)相关联的像素操作由所述2D引擎841来执行、或者在显示时间由所述显示控制器843使用重叠显示平面来代替。在一个实施例中,共享的L3高速缓存875可用于所有的图形部件,从而允许在无需使用主***存储器的情况下共享数据。
图形处理器媒体流水线830包括媒体引擎837和视频前端834。在一个实施例中,视频前端834从命令流送器803接收流水线命令。然而,在一个实施例中,媒体流水线830包括单独的命令流送器。视频前端834在将所述命令发送至所述媒体引擎837之前处理媒体命令。在一个实施例中,媒体引擎837包括用于生成线程以用于经由所述线程分派器831分派至所述线程执行逻辑850的线程生成功能。
在一个实施例中,图形引擎包括显示引擎840。在一个实施例中,显示引擎840在图形处理器外部并经由环形互连802、或某个其他互连总线或结果耦合至图形处理器。显示引擎840包括2D引擎841和显示控制器843。显示引擎840包含能够独立于3D流水线而运行的专用逻辑。显示控制器843与显示设备(未示出)耦合,所述显示设备可以是***集成显示设备(如在膝上型计算机中)、或者(经由显示设备连接器附接的)外部显示设备。
图形流水线820和媒体流水线830可配置成用于基于多个图形和媒体编程接口执行操作并且并非专用于任何一种应用编程接口(API)。在一个实施例中,所述图形处理器的驱动器软件将专用于特定图形或媒体库的API调度转换成可由所述图形处理器处理的命令。在各实施例中,为由科纳斯(Khronos)集团所支持的开放图形库(OpenGL)和开放计算语言(OpenCL)、来自微软公司的Direct3D库、或者在一个实施例中的OpenGL和D3D两者提供支持。还可以为开源计算机视觉库(OpenCV)提供支持。如果可进行从未来API的流水线到所述图形处理器的流水线的映射,则具有兼容3D流水线的未来API也将受到支持。
图形流水线编程——图14A至图14B
图14A是根据实施例展示了图形处理器命令格式的框图,并且图14B是根据实施例展示了图形处理器命令序列的框图。图14A中的实线框展示了通常包括在图形命令中的部件,而虚线包括是可选的部件或仅包括在图形命令子集中的部件。图14A的示例性图形处理器命令格式900包括用于标识命令的目标客户端902的数据字段、命令操作码(opcode)904、以及所述命令的相关数据906。子操作码905和命令大小908也包括在一些命令中。
客户端902限定了处理命令数据的图形设备的客户端单元。在一个实施例中,图形处理器命令解析器检查每个命令的客户端字段以便调整对命令的进一步处理并将命令数据路由至合适的客户端单元。在一个实施例中,图形处理器客户端单元包括存储器接口单元、渲染单元、2D单元、3D单元、和媒体单元。每个客户端单元具有对命令进行处理的相应处理流水线。一旦命令被客户端单元接收到,客户端单元就读取操作码904以及子操作码905(如果存在的话)从而确定要执行的操作。客户端单元使用命令的数据字段906内的信息来执行所述命令。对于一些命令,期望明确的命令大小908来限定命令的大小。在一个实施例中,命令解析器基于命令操作码自动地确定命令中的至少一些命令的大小。在一个实施例中,命令经由双倍字长的倍数被对齐。
图14B中的流程图示出了样本命令序列910。在一个实施例中,以图形处理器的实施例为特征的数据处理***的软件或固件使用所示出的命令序列的版本来设置、执行并终止图形操作集合。出于示例性目的示出并描述了样本命令序列,然而,实施例并不限于这些命令或者这个命令序列。而且,所述命令可以作为一批命令以命令序列被下发,从而使得所述图形处理器将以至少部分同时的方式处理所述命令序列。
样本命令序列910可以以流水线转储清除(flush)命令912开始以便使得任一活动的图形流水线完成针对所述流水线的当前未决命令。在一个实施例中,3D流水线922和媒体流水线924不同时运行。所述流水线转储清除以使得所述活动图形流水线完成任何未决命令。响应于流水线转储清除,用于图形处理器的命令解析器将停止命令处理直到活动的绘画引擎完成未决操作并且使得相关的读高速缓存失效。可选地,渲染高速缓存中被标记为‘脏’的任何数据可以被转储清除到存储器中。流水线转储清除命令912可以用于流水线同步或者用在将图形处理器置于低功率状态之前。
当命令序列需要图形处理器在流水线之间明确地切换时,使用流水线选则命令913。在下发流水线命令之前在执行上下文中仅需要一次流水线选定命令913,除非所述上下文要下发针对两条流水线的命令。在一个实施例中,在经由所述流水线选择命令913的流水线切换之前正好需要流水线转储清除命令912。
流水线控制命令914配置用于操作的图形流水线并且用于对3D流水线922和媒体流水线924进行编程。流水线控制命令914配置活动的流水线的流水线状态。在一个实施例中,流水线控制命令914用于流水线同步并且用于在处理一批命令之前清除来自活动的流水线内的一个或多个高速缓存存储器中的数据。
返回缓冲器状态命令916用于配置返回缓冲器的集合以供相应的流水线写入数据。一些流水线操作需要分配、选择、或配置一个或多个返回缓冲器,在处理过程中所述操作将中间数据写入所述一个或多个返回缓冲器中。图形处理器还使用一个或多个返回缓冲器以便存储输出数据并且执行跨线程通信。返回缓冲器状态命令916包括选择返回缓冲器的大小和数量以用于流水线操作集合。
命令序列中的剩余命令基于用于操作的活动的流水线而不同。基于流水线判定920,所述命令序列被定制成用于以3D流水线状态930开始的所述3D流水线922、或者在媒体流水线状态940处开始的所述媒体流水线924。
针对所述3D流水线状态930的命令包括针对顶点缓冲器状态、顶点元素状态、恒定色彩状态、深度缓冲器状态、以及在处理3D图元命令之前待配置的其他状态变量的3D状态设置命令。至少部分地基于使用中的特定3D API来确定这些命令的值。3D流水线状态930命令还能够选择性地禁用或旁路掉特定流水线元件(如果将不使用那些元件的话)。
所述3D图元932命令用于提交待由所述3D流水线处理的3D图元。经由3D图元932命令被传递至图形处理器的命令和相关联的参数被转发至所述图形流水线中的顶点拾取函数中。所述顶点拾取函数使用3D图元932命令数据来生成顶点数据结构。所述顶点数据结构存储在一个或多个返回缓冲器中。所述3D图元932命令用于经由顶点着色器对3D图元执行顶点操作。为了处理顶点着色器,所述3D流水线922将着色器执行线程分派至图形处理器执行单元。
所述3D流水线922经由执行934命令或事件被触发。在一个实施例中,寄存器写入触发命令执行。在一个实施例中,经由所述命令序列中的‘go’或‘kick’命令来触发执行。在一个实施例中,使用流水线同步命令来触发命令执行以便通过所述图形流水线转储清除所述命令序列。所述3D流水线将针对所述3D图元来执行几何处理。一旦完成操作,则对所产生的几何对象进行光栅化并且所述像素引擎对所产生的像素进行着色。针对那些操作,还可以包括用于控制像素着色和像素后端操作的附加命令。
当执行媒体操作时,所述样本命令序列910跟随在媒体流水线924路径之后。通常,针对媒体流水线924进行编程的具体用途和方式取决于待执行的媒体或计算操作。在媒体解码过程中,具体的媒体解码操作可以卸载至所述媒体流水线。所述媒体流水线还可以被旁路掉,并且可以使用由一个或多个通用处理核提供的资源来整体地或部分地执行媒体解码。在一个实施例中,所述媒体流水线还包括用于通用图形处理器单元(GPGPU)操作的元件,其中,所述图形处理器用于使用计算着色器程序来执行SIMD向量运算,所述计算着色器程序与渲染图形图元不是明确相关的。
以与所述3D流水线922相似的方式对媒体流水线924进行配置。媒体流水线状态命令940的集合在所述媒体对象命令942之前被分派或放置于命令队列中。媒体流水线状态命令940包括用于配置所述媒体流水线元件的数据,所述媒体流水线元件将用于处理媒体对象。这包括用于在所述媒体流水线内配置视频解码和视频编码逻辑的数据,诸如编码或解码格式。媒体流水线状态命令940还支持将一个或多个指针用于包含一批状态设置的“间接”状态元件。
媒体对象命令942将指针供应至媒体对象以用于由所述媒体流水线进行处理。所述媒体对象包括存储器缓冲器,所述存储器缓冲器包含待处理的视频数据。在一个实施例中,在下发媒体对象命令942之前,所有的媒体流水线状态必须是有效的。一旦流水线状态被配置并且媒体对象命令942进入排队,则经由执行944命令或等效的执行事件(例如,寄存器写入)来触发所述媒体流水线924。然后可以通过由所述3D流水线922或所述媒体流水线924提供的操作对来自所述媒体流水线924的输出进行后处理。在一个实施例中,以与媒体操作类似的方式来配置和执行GPGPU操作。
图形软件架构——图15
图15根据实施例展示了用于数据处理***的示例性图形软件架构。所述软件架构包括3D图形应用1010、操作***1020、以及至少一个处理器1030。所述处理器1030包括图形处理器1032以及一个或多个通用处理器核1034。所述图形应用1010和操作***1020各自在所述数据处理***的***存储器1050中执行。
在一个实施例中,所述3D图形应用1010包含一个或多个着色器程序,所述一个或多个着色器程序包括着色器指令1012。着色器语言指令可以采用高级着色器语言,诸如高级着色器语言(HLSL)或OpenGL着色器语言(GLSL)。所述应用还包括可执行指令1014,所述可执行指令采用适合用于由所述通用处理器核1034执行的机器语言。所述应用还包括由顶点数据限定的图形对象1016。
所述操作***1020可以是来自微软公司的操作***、专用UNIX式操作***、或使用Linux内核变体的开源UNIX式操作***。当在使用Direct3D API时,所述操作***1020使用前端着色器编译器1024以便将采用HLSL的任何着色器指令1012编译成低级着色器语言。所述编译可以是即时编译,或者所述应用可执行共享预编译。在一个实施例中,在对所述3D图形应用1010进行编译的过程中,高级着色器被编译成低级着色器。
用户模式图形驱动器1026可以包含用于将所述着色器指令1012变换成硬件专用的表示的后端着色器编译器1027。当在使用OpenGL API时,将采用GLSL高级语言的着色器指令1012传递至用户模式图形驱动器1026以用于编译。所述用户模式图形驱动器使用操作***内核模式函数1028来与内核模式图形驱动器1029进行通信。所述内核模式图形驱动器1029与所述图形处理器1032进行通信以便分派命令和指令。
在本文所描述的各操作或功能程度上,它们可以被描述或所定义的为硬件电路、软件代码、指令、配置和/或数据。所述内容可以在硬件逻辑中被具体化、或者具体化为直接可执行软件(“对象”或“可执行”形式)、源代码、被设计成用于在图形引擎上执行的高级着色器代码、或者针对具体处理器或图形核的指令集中的低级组件语言代码。本文中所描述的实施例的软件内容可以经由一种其上存储有内容的制品或经由一种操作通信接口经由通信接口发送数据的方法被提供。
一种非瞬态机器可读存储介质可以使机器执行所描述的功能或操作,并且包括存储具有机器(例如,计算设备、电子***等)可存取形式的信息的任何机制,如可记录/不可记录介质(例如,只读存储器(ROM)、随机存取存储器(RAM)、磁盘存储介质、光存储介质、闪存设备等)。一种通信接口包括与硬连线、无线、光等介质中的任一者接口连接以彼此通信的任何机制,如,存储器总线接口、处理器总线接口、互联网连接、磁盘控制器等。通过提供配置参数或发送信号来对通信接口进行配置以使通信接口准备用于提供描述软件内容的数据信号。可以经由发送到通信接口的一个或多个命令或信号来访问通信接口。
所描述的各部件可以是用于执行所描述的操作或功能的装置。本文所描述的每个部件包括软件、硬件或它们的组合。部件可以被实现为软件模块、硬件模块、专用硬件(例如,专用硬件、专用集成电路(ASIC)、数字信号处理器(DSP)等)、嵌入式控制器、硬连线电路等。除了本文所描述的内容之外,在不脱离其范围的情况下,可以对公开的实施例和本发明的实现方式进行各种修改。因此,本文的说明和示例应在说明性的而非限制性意义上被解释。本发明的范围应当仅参照以下权利要求书来衡量。
附加说明和示例:
示例1可以包括一种用于执行抢占请求的计算***,所述计算***包括:数据接口,所述数据接口用于接受抢占请求;以及编译器,所述编译器具有抢占指令创建器和***器,用于在计算机程序中、在所定义的抢占窗口内具有减少数量的活跃寄存器的多个位置处创建并***多条抢占指令。所述计算***可以进一步包括:执行单元,所述执行单元耦合至所述编译器和所述数据接口,用于执行具有所述多条抢占指令的经编译的计算机程序,所述执行单元包括通用寄存器或架构寄存器中的多个寄存器;以及存储器,所述存储器与所述执行单元通信,用于在执行所述抢占请求时存储活跃寄存器的内容。
示例2可以包括如示例1所述的计算机***,其中,所述执行单元进一步包括控制流栈。
示例3可以包括如示例1或2所述的计算机***,进一步包括与所述执行单元相关联的应用指令指针。
示例4可以包括根据示例1、2或3所述的计算机***,进一步包括与所述执行单元通信的计时器。
示例5可以包括一种处理抢占请求的方法,所述方法包括:在编译计算机程序时***一条或多条抢占指令,所述一条或多条抢占指令被***在所述计算机程序中的抢占窗口内,所述计算机程序中的所述抢占窗口减少每个抢占指令位置处的活跃寄存器数量,并且其中,所述抢占指令指示哪些寄存器要被保存在特定的程序位置处。所述方法包括:在执行单元中运行所述经编译的程序;向所述执行单元做出抢占请求;以及在正在所述执行单元中运行的所述程序中的下一可用的抢占指令处执行所述抢占请求。
示例6可以包括如示例5所述的方法,进一步包括:将所述寄存器的有待保存在存储器中的寄存器内容保存在所述抢占指令的所述程序位置处。
示例7可以包括如示例6所述的方法,其中,所述寄存器是通用寄存器组或架构寄存器组中所包含的寄存器。
示例8可以包括如示例5、6或7所述的方法,进一步包括:将控制流栈的内容保存在所述抢占指令的位置处。
示例9可以包括如示例5、6、7或8所述的方法,进一步包括:将应用指令指针的位置保存在执行所述抢占请求的位置处。
示例10可以包括如示例5、6、7、8或9所述的方法,进一步包括:在相邻的抢占指令之间创建抢占窗口,所述抢占窗口限定所述相邻抢占指令之间的估计的执行时间长度。
示例11可以包括如示例5、6、7、8、9或10所述的方法,进一步包括:分析所述计算机程序以确定***所述一条或多条抢占指令的位置。
示例12可以包括根据示例11所述的处理抢占请求的方法,其中,所述分析基于所述计算机程序内各位置处的活跃寄存器数量来确定寄存器压力。
示例13可以包括至少一种计算机可读存储介质,所述至少一种计算机可读存储介质包括一组指令,所述一组指令当被计算***执行时使所述计算***:在编译计算机程序时***抢占指令,所述抢占指令被***所述计算机程序中使每个计算机程序位置处的活跃寄存器的数量最小化的位置处,并且其中,所述抢占指令指示哪些寄存器被要求保存在那个程序位置处;在执行单元中运行经编译的程序;以及在正在所述执行单元中运行的所述程序中的下一可用的抢占指令处执行抢占请求。
示例14可以包括如示例13所述的至少一种计算机可读存储介质,其中,所述指令当被执行时使计算***:将所述寄存器的有待保存在存储器中的寄存器内容保存在所述抢占指令的所述程序位置处。
示例15可以包括如示例13或14所述的至少一种计算机可读存储介质,其中,所述指令当被执行时使计算***:将控制流栈的内容保存在所述抢占指令的位置处。
示例16可以包括如示例13、14或15所述的至少一种计算机可读存储介质,其中,所述指令当被执行时使计算***:将应用指令指针的位置保存在执行所述抢占请求的位置处。
示例17可以包括如示例13、14、15或16所述的至少一种计算机可读存储介质,其中,所述指令当被执行时使计算***:在相邻的抢占指令之间创建抢占窗口,所述抢占窗口限定了所述相邻抢占指令之间的估计的执行时间长度。
示例18可以包括如示例13、14、15、16或17所述的至少一种计算机可读存储介质,其中,所述指令当被执行时使计算***:分析所述计算机程序以确定***所述一条或多条抢占指令的位置。
示例19可以包括如示例13、14、15、16、17或18所述的至少一种计算机可读存储介质,其中,所述指令当被执行时使计算***:基于所述计算机程序内各位置处的活跃寄存器数量来确定寄存器压力。
示例20可以包括一种装置,所述装置包括:编译器,所述编译器具有抢占指令创建器和***器,用于在计算机程序中、在所定义的抢占窗口内具有减少数量的活跃寄存器的多个位置处创建并***多条抢占指令。所述装置进一步包括:执行单元,所述执行单元耦合至所述编译器和所述数据接口,用于执行具有所述多条抢占指令的经编译的计算机程序,所述执行单元包括通用寄存器或架构寄存器中的多个寄存器;以及存储器,所述存储器与所述执行单元通信,用于在执行所述抢占请求时存储活跃寄存器的内容。
示例21可以包括如示例20所述装置,所述执行单元进一步包括控制流栈。
示例22可以包括如示例20或示例21所述的装置,所述装置进一步包括:与所述执行单元相关联的应用指令指针。
示例23可以包括如示例20或示例21所述的装置,所述装置进一步包括:用于与所述执行单元通信的计时器。
示例24可以包括一种用于执行抢占请求的计算***,所述计算***包括:用于执行如示例5至12中任一项所述的方法(以其任意组合和/或子组合)的装置。例如,示例24可以包括:用于在编译计算机程序时***一条或多条抢占指令的装置,所述一条或多条抢占指令被***在所述计算机程序中的抢占窗口内,所述计算机程序中的所述抢占窗口减少每个抢占指令位置处的活跃寄存器数量,并且其中,所述抢占指令指示哪些寄存器要被保存在特定的程序位置处;用于在执行单元中运行经编译的程序的装置;用于向所述执行单元做出抢占请求的装置;以及用于在正在所述执行单元中运行的下一可用的抢占指令处执行所述抢占请求的装置。
示例25可以包括如示例24所述的计算***,进一步包括:用于将所述寄存器的有待保存在存储器中的寄存器内容保存在所述抢占指令的所述程序位置处的装置。
示例26可以包括如示例25所述的计算***,其中,所述寄存器是通用寄存器组或架构寄存器组中所包含的寄存器。
示例27可以包括如示例24、25或26所述的计算***,进一步包括:用于将控制流栈的内容保存在所述抢占指令的位置处的装置。
示例28可以包括如示例24、25或26所述的计算***,进一步包括:用于将应用指令指针的位置保存在执行所述抢占请求的位置处的装置。
示例29可以包括如示例24、25或26所述的计算***,所述计算***进一步包括:用于在相邻的抢占指令之间创建抢占窗口的装置,所述抢占窗口限定所述相邻抢占指令之间的估计的执行时间长度。
示例30可以包括如示例24、25或26所述的计算***,所述计算***进一步包括:用于分析所述计算机程序以确定***所述一条或多条抢占指令的位置的装置。
示例31可以包括如示例30所述的计算***,所述计算***进一步包括:用于基于所述计算机程序内各位置处的活跃寄存器数量来确定寄存器压力的装置。
在此所公开的技术可以降低涉及执行抢占请求的性能和存储开销。通过编译时间分析,可以确定减少保存/恢复开销和响应时间两者的有利程序抢占位置。通常,这种方法涉及减少需要保存/恢复的寄存器的数量。可以由编译器将新的抢占指令***程序,所述程序在运行时间分辨硬件在哪里执行抢占并且哪些寄存器是活的并将被保存。在典型的图形着色器程序中,例如,编译器可以仅在用于对抢占成本分期的几百条程序指令之后***抢占指令,并且要保存的实际寄存器占用面积可以显著地比通用寄存器和架构寄存器的总可用数量少。
此处使用的术语“耦合”是指讨论部件之间的任何类型的关系,直接的或间接的,并且可以应用于电的、机械的、流体的、光学的、电磁的、电动机械的或其他连接。另外,此处使用的术语“第一”,“第二”等只帮助讨论,除非另外指明,其不带有特殊的时间或时间顺序意义。另外,要理解的是,不定冠词“a”或“an”带有“一个或多个”或“至少一个”的含义。
本领域技术人员将从前面的描述中认识到,可以用各种形式来实现实施例的广泛技术。因此,虽然已经结合其特定示例描述了这些实施例,但是实施例的实际范围不应由此受限,因为其他的修改在本领域技术人员学习了附图、说明书和所附权利要求之后就将变得显而易见。
Claims (25)
1.一种用于执行抢占请求的计算***,包括:
数据接口,所述数据接口用于接受抢占请求;
编译器,所述编译器具有抢占指令创建器和***器,用于在计算机程序中、在所定义的抢占窗口内具有减少数量的活跃寄存器的多个位置处创建并***多条抢占指令;
执行单元,所述执行单元耦合至所述编译器和所述数据接口,用于执行具有所述多条抢占指令的经编译的计算机程序,所述执行单元包括通用寄存器或架构寄存器中的多个寄存器;
存储器,所述存储器与所述执行单元通信,用于在执行所述抢占请求时存储活跃寄存器的内容。
2.如权利要求1所述的计算机***,所述执行单元进一步包括控制流栈。
3.如权利要求1或2所述的计算机***,进一步包括与所述执行单元相关联的应用指令指针。
4.如权利要求1或2所述的计算机***,进一步包括与所述执行单元通信的计时器。
5.一种处理抢占请求的方法,包括:
在编译计算机程序时***一条或多条抢占指令,所述一条或多条抢占指令被***在所述计算机程序中的抢占窗口内,所述计算机程序中的所述抢占窗口减少每个抢占指令位置处的活跃寄存器数量,并且其中,所述抢占指令指示哪些寄存器要被保存在特定的程序位置处;
在执行单元中运行经编译的程序;
向所述执行单元做出抢占请求;以及
在正在所述执行单元中运行的所述程序中的下一可用的抢占指令处执行所述抢占请求。
6.根据权利要求5所述的处理抢占请求的方法,进一步包括:
将所述寄存器的有待保存在存储器中的寄存器内容保存在所述抢占指令的所述程序位置处。
7.根据权利要求6所述的处理抢占请求的方法,其中,所述寄存器是通用寄存器组或架构寄存器组中所包含的寄存器。
8.根据权利要求5、6或7所述的处理抢占请求的方法,进一步包括:将控制流栈的内容保存在所述抢占指令的位置处。
9.根据权利要求5、6或7所述的处理抢占请求的方法,进一步包括:将应用指令指针的位置保存在执行所述抢占请求的位置处。
10.根据权利要求5、6或7所述的处理抢占请求的方法,进一步包括:在相邻的抢占指令之间创建抢占窗口,所述抢占窗口限定所述相邻抢占指令之间的估计的执行时间长度。
11.根据权利要求5、6或7所述的处理抢占请求的方法,进一步包括:分析所述计算机程序从而确定***所述一条或多条抢占指令的位置。
12.根据权利要求11所述的处理抢占请求的方法,其中,所述分析基于所述计算机程序内各位置处的活跃寄存器数量来确定寄存器压力。
13.至少一种计算机可读存储介质,所述至少一种计算机可读存储介质包括一组指令,所述一组指令当被计算***执行时使所述计算***:
在编译计算机程序时***抢占指令,所述抢占指令被***在所述计算机程序中使每个计算机程序位置处的活跃的寄存器的数量最小化的位置处,并且其中,所述抢占指令指示哪些寄存器被要求保存在那个程序位置处;
在执行单元中运行经编译的程序;
在正在所述执行单元中运行的所述程序中的下一可用的抢占指令处执行抢占请求。
14.如权利要求13所述的至少一种计算机可读存储介质,其中,所述指令当被执行时使计算***:
将所述寄存器的有待保存在存储器中的寄存器内容保存在所述抢占指令的所述程序位置处。
15.如权利要求13或14所述的至少一种计算机可读存储介质,其中,所述指令当被执行时使计算***:
将控制流栈的内容保存在所述抢占指令的位置处。
16.如权利要求13或14所述的至少一种计算机可读存储介质,其中,所述指令当被执行时使计算***:
将应用指令指针的位置保存在执行所述抢占请求的位置处。
17.如权利要求13或14所述的至少一种计算机可读存储介质,其中,所述指令当被执行时使计算***:
在相邻的抢占指令之间创建抢占窗口,所述抢占窗口限定所述相邻抢占指令之间的估计的执行时间长度。
18.如权利要求13或14所述的至少一种计算机可读存储介质,其中,所述指令当被执行时使计算***:
分析所述计算机程序以确定***所述一条或多条抢占指令的位置。
19.如权利要求18所述的至少一种计算机可读存储介质,其中,所述指令当被执行时使计算***:
基于所述计算机程序内各位置处的活跃寄存器数量来确定寄存器压力。
20.一种装置,包括:
编译器,所述编译器具有抢占指令创建器和***器,用于在计算机程序中、在所定义的抢占窗口内具有减少数量的活跃寄存器的多个位置处创建并***多条抢占指令;
执行单元,所述执行单元耦合至所述编译器和所述数据接口,用于执行具有所述多条抢占指令的经编译的计算机程序,所述执行单元包括通用寄存器或架构寄存器中的多个寄存器;以及
存储器,所述存储器与所述执行单元通信,用于在执行所述抢占请求时存储活跃寄存器的内容。
21.如权利要求20所述的装置,所述执行单元进一步包括控制流栈。
22.如权利要求20所述的装置,进一步包括与所述执行单元相关联的应用指令指针。
23.如权利要求20所述的装置,进一步包括用于与所述执行单元通信的计时器。
24.一种用于执行抢占请求的计算***,包括:
用于在编译计算机程序时***一条或多条抢占指令的装置,所述一条或多条抢占指令被***在所述计算机程序中的抢占窗口内,所述计算机程序中的所述抢占窗口减少每个抢占指令位置处的活跃寄存器数量,并且其中,所述抢占指令指示哪些寄存器要被保存在特定的程序位置处;
用于在执行单元中运行经编译的程序的装置;
用于向所述执行单元做出抢占请求的装置;以及
用于在正在所述执行单元中运行的所述程序中的下一可用的抢占指令处执行所述抢占请求的装置。
25.如权利要求24所述的计算***,进一步包括:
用于将所述寄存器的有待保存在存储器中的寄存器内容保存在所述抢占指令的所述程序位置处的装置。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/543,982 US10282227B2 (en) | 2014-11-18 | 2014-11-18 | Efficient preemption for graphics processors |
US14/543,982 | 2014-11-18 | ||
PCT/US2015/059405 WO2016081206A1 (en) | 2014-11-18 | 2015-11-06 | Efficient preemption for graphics processors |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107430523A true CN107430523A (zh) | 2017-12-01 |
CN107430523B CN107430523B (zh) | 2021-06-22 |
Family
ID=55962130
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201580058893.8A Active CN107430523B (zh) | 2014-11-18 | 2015-11-06 | 图形处理器的高效抢占 |
Country Status (4)
Country | Link |
---|---|
US (1) | US10282227B2 (zh) |
EP (1) | EP3221840A4 (zh) |
CN (1) | CN107430523B (zh) |
WO (1) | WO2016081206A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115168060A (zh) * | 2022-09-08 | 2022-10-11 | 深圳比特微电子科技有限公司 | 神经网络处理器npu调度方法和计算机存储介质 |
Families Citing this family (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106325995B (zh) * | 2015-06-19 | 2019-10-22 | 华为技术有限公司 | 一种gpu资源的分配方法及*** |
US11126433B2 (en) | 2015-09-19 | 2021-09-21 | Microsoft Technology Licensing, Llc | Block-based processor core composition register |
US11016770B2 (en) | 2015-09-19 | 2021-05-25 | Microsoft Technology Licensing, Llc | Distinct system registers for logical processors |
US10768936B2 (en) | 2015-09-19 | 2020-09-08 | Microsoft Technology Licensing, Llc | Block-based processor including topology and control registers to indicate resource sharing and size of logical processor |
US10134103B2 (en) * | 2015-10-23 | 2018-11-20 | Qualcomm Incorporated | GPU operation algorithm selection based on command stream marker |
US10210593B2 (en) * | 2016-01-28 | 2019-02-19 | Qualcomm Incorporated | Adaptive context switching |
EP3437300A4 (en) | 2016-03-29 | 2020-03-04 | Resolution Products, Inc. | UNIVERSAL PROTOCOL TRANSLATOR |
US10235811B2 (en) | 2016-12-29 | 2019-03-19 | Intel Corporation | Replicating primitives across multiple viewports |
US11531552B2 (en) | 2017-02-06 | 2022-12-20 | Microsoft Technology Licensing, Llc | Executing multiple programs simultaneously on a processor core |
US10409614B2 (en) * | 2017-04-24 | 2019-09-10 | Intel Corporation | Instructions having support for floating point and integer data types in the same register |
US10474458B2 (en) | 2017-04-28 | 2019-11-12 | Intel Corporation | Instructions and logic to perform floating-point and integer operations for machine learning |
US20180349137A1 (en) * | 2017-06-05 | 2018-12-06 | Intel Corporation | Reconfiguring a processor without a system reset |
US10459751B2 (en) * | 2017-06-30 | 2019-10-29 | ATI Technologies ULC. | Varying firmware for virtualized device |
CN109213594B (zh) * | 2017-07-06 | 2022-05-17 | 阿里巴巴集团控股有限公司 | 资源抢占的方法、装置、设备和计算机存储介质 |
US11232531B2 (en) * | 2017-08-29 | 2022-01-25 | Intel Corporation | Method and apparatus for efficient loop processing in a graphics hardware front end |
US11609791B2 (en) * | 2017-11-30 | 2023-03-21 | Advanced Micro Devices, Inc. | Precise suspend and resume of workloads in a processing unit |
JP6988467B2 (ja) * | 2017-12-27 | 2022-01-05 | 株式会社デンソー | 車両用前方照明装置、断線検出方法 |
US10628910B2 (en) | 2018-09-24 | 2020-04-21 | Intel Corporation | Vertex shader with primitive replication |
US11556374B2 (en) * | 2019-02-15 | 2023-01-17 | International Business Machines Corporation | Compiler-optimized context switching with compiler-inserted data table for in-use register identification at a preferred preemption point |
BR112021016111A2 (pt) | 2019-03-15 | 2021-11-09 | Intel Corp | Dispositivo de computação, unidade de processamento paralelo, núcleo de unidade de processamento gráfico de propósito geral e multiprocessador gráfico |
KR20210136994A (ko) | 2019-03-15 | 2021-11-17 | 인텔 코포레이션 | 매트릭스 가속기 아키텍처 내에서의 시스톨릭 분리 |
US11934342B2 (en) | 2019-03-15 | 2024-03-19 | Intel Corporation | Assistance for hardware prefetch in cache access |
US11204767B2 (en) * | 2020-01-06 | 2021-12-21 | International Business Machines Corporation | Context switching locations for compiler-assisted context switching |
US11360780B2 (en) * | 2020-01-22 | 2022-06-14 | Apple Inc. | Instruction-level context switch in SIMD processor |
US11567855B1 (en) * | 2020-09-09 | 2023-01-31 | Two Six Labs, LLC | Automated fault injection testing |
US20230418677A1 (en) * | 2020-12-21 | 2023-12-28 | Google Llc | Preemption in a machine learning hardware accelerator |
EP4050481A1 (en) * | 2021-02-25 | 2022-08-31 | Imagination Technologies Limited | Allocation of resources to tasks |
JP2024075106A (ja) * | 2022-11-22 | 2024-06-03 | LeapMind株式会社 | ニューラルネットワーク回路およびニューラルネットワーク演算方法 |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6061711A (en) * | 1996-08-19 | 2000-05-09 | Samsung Electronics, Inc. | Efficient context saving and restoring in a multi-tasking computing system environment |
CN1570855A (zh) * | 2004-04-30 | 2005-01-26 | 浙江大学 | Arm处理器架构的微内核设计方法 |
US20060117325A1 (en) * | 2004-11-10 | 2006-06-01 | Microsoft Corporation | System and method for interrupt handling |
US20070118726A1 (en) * | 2005-11-22 | 2007-05-24 | International Business Machines Corporation | System and method for dynamically selecting storage instruction performance scheme |
US20070136733A1 (en) * | 2005-12-12 | 2007-06-14 | Samsung Electronics Co., Ltd. | Method, medium and apparatus storing and restoring register context for fast context switching between tasks |
CN101159986A (zh) * | 2007-11-12 | 2008-04-09 | 普天信息技术研究院有限公司 | 一种确定呼叫优先级的方法 |
US7831961B1 (en) * | 1999-02-22 | 2010-11-09 | Oracle America, Inc. | Cooperative preemption mechanism for garbage-collected multi-threaded computation |
US8135894B1 (en) * | 2009-07-31 | 2012-03-13 | Altera Corporation | Methods and systems for reducing interrupt latency by using a dedicated bit |
US20130132711A1 (en) * | 2011-11-22 | 2013-05-23 | Lacky V. Shah | Compute thread array granularity execution preemption |
US20130283243A1 (en) * | 2012-04-18 | 2013-10-24 | International Business Machines Corporation | Compiling Source Code For Debugging With Variable Value Restoration Based On Debugging User Activity |
US20140184617A1 (en) * | 2012-12-27 | 2014-07-03 | Nvidia Corporation | Mid-primitive graphics execution preemption |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3789365A (en) * | 1971-06-03 | 1974-01-29 | Bunker Ramo | Processor interrupt system |
US6128728A (en) * | 1997-08-01 | 2000-10-03 | Micron Technology, Inc. | Virtual shadow registers and virtual register windows |
US20050039189A1 (en) | 2003-08-14 | 2005-02-17 | Todd Anderson | Methods and apparatus to preemptively compile an application |
US20050066302A1 (en) | 2003-09-22 | 2005-03-24 | Codito Technologies Private Limited | Method and system for minimizing thread switching overheads and memory usage in multithreaded processing using floating threads |
US8677375B2 (en) | 2009-01-29 | 2014-03-18 | Hewlett-Packard Development Company, L.P. | Selecting executing requests to preempt |
US8458386B2 (en) * | 2010-12-07 | 2013-06-04 | Apple Inc. | Atomic interrupt masking in an interrupt controller to prevent delivery of same interrupt vector for consecutive interrupt acknowledgements |
US8963933B2 (en) | 2012-07-23 | 2015-02-24 | Advanced Micro Devices, Inc. | Method for urgency-based preemption of a process |
-
2014
- 2014-11-18 US US14/543,982 patent/US10282227B2/en active Active
-
2015
- 2015-11-06 EP EP15861336.4A patent/EP3221840A4/en not_active Withdrawn
- 2015-11-06 CN CN201580058893.8A patent/CN107430523B/zh active Active
- 2015-11-06 WO PCT/US2015/059405 patent/WO2016081206A1/en active Application Filing
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6061711A (en) * | 1996-08-19 | 2000-05-09 | Samsung Electronics, Inc. | Efficient context saving and restoring in a multi-tasking computing system environment |
US7831961B1 (en) * | 1999-02-22 | 2010-11-09 | Oracle America, Inc. | Cooperative preemption mechanism for garbage-collected multi-threaded computation |
CN1570855A (zh) * | 2004-04-30 | 2005-01-26 | 浙江大学 | Arm处理器架构的微内核设计方法 |
US20060117325A1 (en) * | 2004-11-10 | 2006-06-01 | Microsoft Corporation | System and method for interrupt handling |
US20070118726A1 (en) * | 2005-11-22 | 2007-05-24 | International Business Machines Corporation | System and method for dynamically selecting storage instruction performance scheme |
US20070136733A1 (en) * | 2005-12-12 | 2007-06-14 | Samsung Electronics Co., Ltd. | Method, medium and apparatus storing and restoring register context for fast context switching between tasks |
CN101159986A (zh) * | 2007-11-12 | 2008-04-09 | 普天信息技术研究院有限公司 | 一种确定呼叫优先级的方法 |
US8135894B1 (en) * | 2009-07-31 | 2012-03-13 | Altera Corporation | Methods and systems for reducing interrupt latency by using a dedicated bit |
US20130132711A1 (en) * | 2011-11-22 | 2013-05-23 | Lacky V. Shah | Compute thread array granularity execution preemption |
US20130283243A1 (en) * | 2012-04-18 | 2013-10-24 | International Business Machines Corporation | Compiling Source Code For Debugging With Variable Value Restoration Based On Debugging User Activity |
US20140184617A1 (en) * | 2012-12-27 | 2014-07-03 | Nvidia Corporation | Mid-primitive graphics execution preemption |
Non-Patent Citations (3)
Title |
---|
JEFFREY S.SNYDER等: "Fast context switches: compiler and architectural support for preemptive scheduling", 《MICROPROCESSORS AND MICROSYSTEMS》 * |
XIANGRONG ZHOU 等: "Cross-layer customization for rapid and low-cost task preemption in multitasked embedded systems", 《ACM TRANSACTIONS ON EMBEDDED COMPUTING SYSTEMS》 * |
邹有阳: "MPSOC多线程处理器关键技术研究", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115168060A (zh) * | 2022-09-08 | 2022-10-11 | 深圳比特微电子科技有限公司 | 神经网络处理器npu调度方法和计算机存储介质 |
CN115168060B (zh) * | 2022-09-08 | 2023-05-16 | 深圳比特微电子科技有限公司 | 神经网络处理器npu调度方法和计算机存储介质 |
Also Published As
Publication number | Publication date |
---|---|
US20160140686A1 (en) | 2016-05-19 |
EP3221840A4 (en) | 2018-07-11 |
CN107430523B (zh) | 2021-06-22 |
EP3221840A1 (en) | 2017-09-27 |
US10282227B2 (en) | 2019-05-07 |
WO2016081206A1 (en) | 2016-05-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107430523A (zh) | 图形处理器的高效抢占 | |
US20220180468A1 (en) | Disaggregation of system-on-chip (soc) architecture | |
US10521874B2 (en) | Method and apparatus for a highly efficient graphics processing unit (GPU) execution model | |
CN110543332A (zh) | 使用低精度和高精度的混合推理 | |
US11194722B2 (en) | Apparatus and method for improved cache utilization and efficiency on a many core processor | |
US9892544B2 (en) | Method and apparatus for load balancing in a ray tracing architecture | |
US10191724B2 (en) | Compiler-based instruction scoreboarding | |
US20170300361A1 (en) | Employing out of order queues for better gpu utilization | |
US10002455B2 (en) | Optimized depth buffer cache apparatus and method | |
US20200371804A1 (en) | Boosting local memory performance in processor graphics | |
US11907756B2 (en) | Concurrent workload scheduling with multiple level of dependencies | |
US10789071B2 (en) | Dynamic thread splitting having multiple instruction pointers for the same thread | |
CN108701053A (zh) | 促进针对计算环境中的任务执行的执行感知混合抢占 | |
US10410081B2 (en) | Method and apparatus for a high throughput rasterizer | |
CN107004293A (zh) | 仅位置流水线中的宽松拣分 | |
US10409571B1 (en) | Apparatus and method for efficiently accessing memory when performing a horizontal data reduction | |
CN113052746A (zh) | 用于多适配器编码的装置和方法 | |
CN116091680A (zh) | 用于超采样的输入滤波和采样器加速 | |
CN116302107A (zh) | 自调谐线程调遣策略 | |
US9830676B2 (en) | Packet processing on graphics processing units using continuous threads | |
US9601092B2 (en) | Dynamically managing memory footprint for tile based rendering | |
WO2017112146A1 (en) | Apparatus and method for triangle-pair merging | |
US9952901B2 (en) | Power efficient hybrid scoreboard method |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |