CN107851027B - 图形处理单元的可编程执行单元、数据处理系统、操作方法 - Google Patents

图形处理单元的可编程执行单元、数据处理系统、操作方法 Download PDF

Info

Publication number
CN107851027B
CN107851027B CN201680044798.7A CN201680044798A CN107851027B CN 107851027 B CN107851027 B CN 107851027B CN 201680044798 A CN201680044798 A CN 201680044798A CN 107851027 B CN107851027 B CN 107851027B
Authority
CN
China
Prior art keywords
instructions
instruction
executed
execution unit
program
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.)
Active
Application number
CN201680044798.7A
Other languages
English (en)
Other versions
CN107851027A (zh
CN107851027A8 (zh
Inventor
J·尼斯塔德
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
ARM Ltd
Original Assignee
ARM Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by ARM Ltd filed Critical ARM Ltd
Publication of CN107851027A publication Critical patent/CN107851027A/zh
Publication of CN107851027A8 publication Critical patent/CN107851027A8/zh
Application granted granted Critical
Publication of CN107851027B publication Critical patent/CN107851027B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3826Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3853Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • G06F9/38585Result writeback, i.e. updating the architectural state or memory with result invalidation, e.g. nullification
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/80Shading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2200/00Indexing scheme for image data processing or generation, in general
    • G06T2200/28Indexing scheme for image data processing or generation, in general involving image processing hardware

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Graphics (AREA)
  • Multimedia (AREA)
  • Advance Control (AREA)
  • Programmable Controllers (AREA)

Abstract

本公开提供图形处理单元的可编程执行单元、数据处理系统、操作方法。图形处理器的可编程执行单元(42)包括可操作为执行指令(51)的功能单元(50)。功能单元(50)的输出可以被写到寄存器文件(46)以及借助于反馈电路(52)直接返馈作为对该功能单元的输入这两者。对应地,要由功能单元(50)执行的指令可以选择来自之前指令的执行的所反馈的输出(52)或来自寄存器(46)的输入。一组指令(53)中的各指令之间的寄存器访问描述符(54)指定值将在功能单元将在执行指令时读取的寄存器端口上可用的寄存器、以及指令执行的结果将被写到的寄存器地址。可编程执行单元(42)执行要原子地执行的指令组(53)。

Description

图形处理单元的可编程执行单元、数据处理系统、操作方法
技术领域
这里所描述的技术涉及数据处理器,诸如图形处理器,其包括一个或更多个可编程执行单元。
背景技术
图形处理通常以流水线方式进行,一个或更多个流水线级对数据进行操作以生成最终渲染输出,例如,所显示的帧。许多图形处理流水线现在包括一个或更多个所谓的“着色”级,通常称为“着色器”。例如,图形处理流水线可以包括几何着色器、顶点着色器和片段(像素)着色器中的一种或更多种,并且通常是全部。这些着色器是对输入数据值执行着色器程序以生成期望的输出数据的集合(例如,在片段着色器的情况下,适当着色并渲染的片段数据)以由图形流水线的剩余部分进行处理和/或用于输出的处理级。
图形“着色器”由此通过针对要生成的输出中的各工作项,诸如渲染目标,例如帧(关于这一点“工作项”通常是顶点或采样位置(例如,在片段着色器的情况下),但工作项还可以为计算机着色器工作项,其中,使用图形处理流水线来执行计算着色操作(例如,根据OpenCL或DirectCompute))运行小程序来进行图形处理。
在图形着色器操作中,各工作项将借助执行线程来处理,执行线程将针对所考虑的工作项执行所考虑的着色器程序。现代图形处理单元(图形处理器)因此通常包括一个或更多个可编程执行单元,其可以执行着色器程序以执行图形处理操作。要由可编程执行单元执行的给定着色器程序将包括指令序列,并且可编程执行单元将针对执行着色器程序所针对的各执行线程(和工作项)适当地执行序列中的指令。
申请人相信在数据处理系统的可编程执行单元中(诸如图形处理系统的图形处理单元的可编程执行单元中)还存在针对程序(诸如着色器程序)的执行的改进排布的范围。
发明内容
本公开提供一种用于数据处理单元的可编程执行单元,所述可编程执行单元包括:处理电路,该处理电路能够操作为当所述可编程执行单元执行包括要由所述可编程执行单元执行的指令序列的程序时:原子地执行所述程序的所述指令序列的一组指令中的指令;并且所述可编程执行单元还包括:电路,该电路被配置为直接传递通过执行被原子地执行的一组指令中的指令而生成的结果,以在执行被原子地执行的所述一组指令中的另一指令时使用。
附图说明
现在将仅以示例的方式并参照附图来描述这里所描述技术的若干实施方式,附图中:
图1示出了示例性计算机图形处理系统;
图2示意性示出了可以以这里所描述的技术的方式操作的图形处理流水线;
图3示意性示出了图形处理单元;
图4示意性示出了图3的图形处理单元的可编程执行单元的第一实施方式;
图5示意性示出了图3的图形处理单元的可编程执行单元的第二实施方式;以及
图6示意性示出了用于着色器程序的定时图。
类似的附图标记在附图中适当的情况下用于类似的部件。
具体实施方式
这里所描述技术的第一实施方式包括用于数据处理单元的可编程执行单元,可编程执行单元包括:
处理电路,该处理电路可操作为,当可编程执行单元执行包括要由可编程执行单元执行的指令序列的程序时:
原子地执行程序的指令序列的一组指令中的指令;和
该可编程执行单元还包括:
电路,该电路被配置为直接传递通过执行被原子地执行的一组指令中的指令生成的结果,以在执行被原子地执行的一组指令中的另一指令时使用。
这里所描述技术的第二实施方式包括一种操作数据处理单元的可编程执行单元的方法,该可编程执行单元执行程序指令,这些程序指令执行数据处理操作,方法包括以下步骤:
可编程执行单元当针对执行线程执行程序时候进行以下处理,其中所述程序包括当执行程序时要由可编程执行单元执行的指令序列:
原子地执行程序的指令序列的至少一组指令;以及
直接传递通过执行被原子地执行的一组指令中的指令而生成的结果,以由被原子地执行的一组指令中的另一指令使用。
这里所描述技术涉及在诸如图形处理单元(图形处理器,GPU)的数据处理单元的可编程执行单元中的程序的执行。
在这里所描述技术中,可以由可编程执行单元(和由可编程执行单元)原子地执行程序的多组指令(即,使得一组指令的执行一旦开始,则该执行以严格的定时延续到完成,并不且无法在中间中断)。(如果原子地进行操作序列,则该操作序列被进行为使得对每个观察者,看起来似乎该系列或者根本未被执行或者整个被执行,即,该序列被作为一个不可分割单元执行,因此名称是“原子的”。)
原子地执行一组指令具有以下效果:在该组指令的执行区间不需要做指令调度决策。这帮助减少可能花费在指令调度上的功率和资源。由此,要执行的程序内的各组指令可以且在实施方式中是被当作用于指令调度目的的一个单元,从而降低指令调度开销。
此外,在这里所描述的技术中,可以直接传递通过被原子地执行的一组指令中的一个指令生成的结果,以由被原子地执行的一组指令中的另一指令使用。这是可以的,因为该组指令被原子地执行,因此可以有效地保证使用这样提供的结果的指令将准备执行并在结果被时使用该结果(这样然后不需要能够以结果将在将来的不能确定的时间内和时可用的这种方式存储结果)。这然后避免对例如将这些结果写到数据处理单元的(主)寄存器文件的需要,从而进一步减少在执行程序时资源使用并节省功率。
这里所描述的技术可以在具有一个或更多个可编程执行单元的任意合适且期望的数据处理系统中实施。由此,该技术例如可以用于CPU(中央处理单元)的执行单元中(如果期望)。
如以上所讨论的,相信这里所描述的技术将在图形处理系统中具有具体应用。由此,实施方式中的数据处理系统包括图形处理系统,并且实施方式中的数据处理单元包括图形处理单元(GPU)。对应地,实施方式中的可编程执行单元作为执行图形着色器程序以执行图形处理操作的可编程图形着色级(着色器)操作。
程序应(并且在实施方式中确实)产生一些有用的输出数据,例如,用于(随后) 图形处理操作中的图形处理输出数据,诸如顶点数据(的阵列)、片段数据(的阵列) 等。由此,在实施方式中,可编程执行单元执行程序,以生成图形处理输出数据(的阵列)。
所生成的输出数据例如可以由图形处理流水线进一步处理(在实施方式中为用于显示)和/或提供给显示器以显示。由此,在实施方式中,进一步处理所生成的输出数据,例如以显示。在实施方式中,所生成的输出数据用于提供图像以显示,例如该输出数据被提供给显示器以显示。
在数据处理单元中可以存在一个或多个可编程执行单元。在存在多个可编程执行单元的情况下,那么各可编程执行单元在实施方式中可以这里所描述技术的方式来操作,并且被配置为以这里所描述的技术的方式来操作。
该(并且各)可编程执行单元可以包括诸如可编程处理电路的任意合适且期望的可编程硬件元件。在存在多个可编程执行单元的情况下,各可编程执行单元可以作为单独的电路元件提供给数据处理单元的其他可编程执行单元,或者可编程执行单元可以共享它们的可编程处理电路中的一些或全部。
在实施方式中,可编程执行单元(和各可编程执行单元)包括执行程序指令的一个或更多个功能单元。在一个实施方式中,所述执行单元(且在实施方式中为各执行单元)具有单个功能单元(由此将在任意给定的时钟周期中执行一个指令)。在其他实施方式中,可编程执行单元包括多个功能单元,诸如且在实施方式中包括两个功能单元。在这种情况下,执行单元可以在给定时钟周期中执行多个指令(其中一个指令由执行单元的各功能单元来执行)。
执行单元可以执行要由数据处理单元执行的任意期望和合适的程序。由此,在图形处理单元的情况下,执行单元可以执行诸如顶点着色器、片段着色器或计算着色器 (例如,根据OpenCL)的任意合适且期望的着色器程序。对应地,可编程执行单元在实施方式中可作为图形处理流水线的任意期望着色器级操作,并且图形处理流水线可以作为诸如顶点着色器、片段着色器或计算着色器(通过将其适当编程为充当期望的可编程执行级)操作。
可编程执行单元将接收要执行的执行线程,并且执行针对这些线程的适当程序,以生成期望的输出。
这里所描述的技术可以用于要由可编程执行单元执行的任何程序。在图形处理系统和单元的情况下,被执行的程序在实施方式中是诸如顶点着色器、片段着色器或计算着色器的适当着色器程序。
要执行的程序将且在实施方式中确实包括要由可编程执行单元执行的指令序列。
用于要由可编程执行单元执行的程序的指令序列可以被分成要以任意合适且期望的方式原子地执行的各组指令。程序根据期望可以被分成一组或多组指令。例如,程序可以被执行为包括用于被原子地执行的程序的所有指令的单组指令。这在将可以原子地执行整个程序的情况下可以是适当的。
然而,在实施方式中,程序(用于程序的指令序列)被分成用于执行目的的多个(较小)组的指令(即,程序将作为多个(不同)组的指令执行)。
程序为了这里所描述的技术的目的而被分成的各组指令应且在实施方式中确实包括要对于程序执行的指令的连续序列。
各组指令可以包含任意合适且期望数量的指令(例如且在实施方式中,这些指令能够被原子地执行)。在实施方式中,各组指令包括2至8个指令。
虽然将可以仅以这里所描述的技术的方式原子地执行程序被分成的多组指令中的一些(但不是所有),但在要执行的程序为了执行目的而被分成多组指令的实施方式中,然后在实施方式中分别原子地执行多组指令中的多个指令,并且在实施方式中分别原子地执行多组指令中的所有(每一个)。
在执行单元能够在给定执行周期中执行超过一个指令的情况下(例如因为执行单元包含多个功能单元,各功能单元可操作为在给定执行周期中执行各指令),那么要执行的各组指令可以包含且在实施方式中确实包含要依次执行的指令的各集合,指令的各这种集合为可以且将在同一执行周期中一起运行且(确切)花费一个执行周期来执行的指令的集合。由此,例如,在可编程执行单元包括两个功能单元(各功能单元可操作为执行相应功能)的情况下,那么在该实施方式中,各组指令包括多个指令元组,各指令元组包括在同一执行周期中将一起执行(一个指令由一个功能单元执行) 且将确切地花费一个执行周期来执行的一对指令,一个指令针对一个功能单元。
由此,在实施方式中,要原子地执行的各组指令包括指令的一个或更多个集合,指令的各这种集合是将由可编程执行单元在同一执行周期中一起执行(且将花费一个执行周期来执行)的多个指令的集合。
在要执行的程序包括具有非确定时延的指令(诸如存储器负载)的情况下(即,不能预先确定或保证这些指令的完成定时),那么在实施方式中,在要原子地执行的给定组的指令中仅包括至多一个这种指令。在实施方式中,指令组还被设置为使得在指令组包括这种指令的情况下,所考虑中的组中的其他指令不依赖要由该“非确定”指令产生的结果。
对应地,在实施方式中,与这种“非确定”指令有关的任意依赖仅在要原子地执行的多个指令组(的执行)之间检查,而不在指令组的(原子)执行期间检查。
指令的组的原子执行可以以任意合适且期望的方式来实现。例如且在实施方式中,提供子系统来取得并发布各指令组的指令。此外,在实施方式中,整个指令组可从例如可以贯穿指令组的执行以固定定时传送指令的储存器获得。这例如可以通过指令缓存来实现,该指令缓存将各指令组完全包含在缓存线内。缓存线然后可以在指令组的执行期间锁定。
在实施方式中,在执行线程到达要原子地执行的一组指令的起点时,该该线程的执行中止直到满足对该组指令的任意依赖(来自在执行该组指令时可能需要的其他指令的这种数据值)为止。对应地,在实施方式中还中止线程的执行直到执行该组指令将需要的所有数据值可用为止。然后,一旦满足该组指令的任意依赖关系和/或任意相关数据值可用,则释放该线程以执行该组指令,并且该执行以原子方式来执行(即,线程没有中断地(没有停止或暂停地)且以严格(固定的)执行定时依次执行该组指令中的所有指令)。
在实施方式中,针对要原子地执行的一组指令的任何依赖等对于该组指令指示,例如且在实施方式中在用于该组指令组(与该组指令组关联)的报头中。
如以上所讨论的,被原子地执行的一组指令中的一个指令的执行结果可以直接提供到被原子地执行的一组指令中的另一指令。该排布应且在实施方式中使得结果可以在第一指令的结果不必须(且被)写到用于可编程执行单元的寄存器文件的任意寄存器的情况下从一个指令提供到被原子地执行的一组指令内的另一指令。
申请人已经认识到,在这一点上,在许多程序中,由程序中的指令进行的操作往往为依次的,使得在许多情况下,需要给定指令的结果的指令是要执行的下一指令。这然后意味着将结果直接从一个指令传递到另一(例如,下一指令)的机会将往往较频繁地出现在要执行的程序中。
此外,因为多个指令被原子地执行,所以可以保证靠后的指令在提供之前指令的结果时将准备好使用该结果。
在要将一个指令的结果直接传递给被原子地执行的一组指令内的另一指令的情况下,那么结果可以直接传递到一指令中的任意其他(稍后)指令,但在实施方式中结果被传递到该组指令中的下一指令(以使用)。在实施方式中,直接传递来自各指令的结果,以可用于该组中的下一指令。
指令的结果可以以任意合适且期望的方式直接传递到另一指令以使用。在实施方式中,可编程执行单元包括“旁路”网络(旁路电路),该旁路网络可操作为提供来自一个指令的执行的结果(输出),以用作由执行单元执行另一指令时的输入(不需要将来自指令的结果添加到用于执行单元的寄存器文件的情况下)。
在实施方式中,可编程执行单元包括反馈电路,该反馈电路可操作为反馈来自一个指令的执行的输出(结果),以用作在执行另一指令(例如且在实施方式中为下一指令)时到执行单元的输入。
在实施方式中,反馈电路可操作为向功能单元的输入反馈来自执行单元的功能单元的输出,使得在功能单元执行一个指令时的输出然后被提供作为在功能单元执行稍后(且在实施方式中为下一)指令时对功能单元的可用输入被。
由此,实施方式中的可编程执行单元包括反馈电路,该反馈电路可操作为(配置为)反馈来自一个指令的执行的输出,以可选择为执行另一指令(例如且在实施方式中为下一指令)时的输入。
在实施方式中,可编程执行单元被配置为使得来自执行指令的结果总是直接传递(反馈)到(例如,功能单元的)执行单元的输入,以可在执行(该组指令中的)另一指令时使用,然后被执行的指令可以选择来自之前指令的执行的该所反馈的输出,作为用于它们的执行的输入(作为操作数)。对应地,实施方式中的可编程执行单元包括电路,该电路可操作为允许指令选择从执行(例如,功能)单元的输出反馈的之前指令的输出作为执行指令时的输入(作为操作数)。
这然后允许直接传递来自一个指令的执行的结果,以在执行指令序列中的另一指令时使用(例如不需要将来自指令的输出(结果)添加到用于执行单元的寄存器文件)。
在可编程执行单元包括多个功能单元的情况下,那么在实施方式中,来自一个(且在实施方式中为来自多个,且在实施方式中来自各个)功能单元的输出被反馈到多个 (且在实施方式中为各个)功能单元的输入,使得输出可用作在多个(且在实施方式中为各个)功能单元执行稍后(且在实施方式中为它们的下一)指令时的对功能单元的输入。
在实施方式中,除了能够将执行指令的结果从一个指令直接传递到被原子地执行的一组指令内的另一指令,例如在需要将结果存储较长时间段的情况下(例如,需要由不是程序序列中的下一指令和/或在程序序列中的不同组指令中的另一指令使用该结果)还可以将指令的结果写到各寄存器。
这则相比于将指令结果简单地直接传递到另一指令以使用将允许将这些指令结果保持较长的时间段。
实际上,可能不是以下这种情况:对于被原子地执行的每一组指令,在执行另一指令时直接使用来自一个指令的结果,因为这将依赖被执行的指令的性质。由此,可以存在以下情况:对于被原子地执行的给定的一组指令,实际上在执行该组指令中的另一指令时不使用这些指令的处理的结果,而是将所有结果存储在寄存器中。
由此,在实施方式中,可编程执行单元被配置为使得执行指令的结果可以(在实施方式中为选择性地)写到寄存器以存储。
在实施方式中,可编程执行单元可操作为能够直接执行指令的结果,以用作执行该组指令中的另一指令时的输入,并且能够将指令的结果写到寄存器,例如以便由稍后的指令使用。
在实施方式中,可编程执行单元被配置为使得执行指令的结果总是直接传递(反馈)到执行单元的输入,以可用于用作执行该组指令中的另一指令时的输入,并且指令的结果还可以被选择性地写到寄存器以存储。
在实施方式中,除了被执行的指令能够使用(选择)被反馈(被直接传递以便由指令使用)的之前所执行指令的结果作为输入,要执行的指令也可以使用(且在实施方式中为选择)在寄存器文件(在寄存器中)存储或可编程执行单元可访问的至少一个(且在实施方式中为多个)值作为输入。
这些寄存器可以(且在实施方式中为是)用于存储被执行的指令或指令组可能需要的数据(诸如来自之前执行周期或指令组的常数、一致性以及结果)。
由此,在实施方式中,可编程执行单元包括电路,该电路可操作为允许指令被执行以选择在可编程执行单元的或可编程执行单元可访问的寄存器文件中的寄存器中存储的数据作为执行指令时的输入(作为操作数)。在实施方式中,可编程执行单元包括电路,该电路可操作为允许指令选择从执行(例如,功能)单元的输出反馈的之前指令的输出和在寄存器文件的寄存器中存储的至少一个数据值作为执行指令时的输入(作为操作数)。
对应地,在实施方式中存在与可编程执行单元关联的寄存器文件,可编程执行单元可以访问该寄存器文件。在实施方式中,寄存器文件包括一个或更多个寄存器端口,并且可编程执行单元(例如,功能单元)可以使用在寄存器端口上提供的值作为执行指令时的输入。
由此,在实施方式中,可编程执行单元(且在实施方式中为要执行指令的执行单元的相关功能单元)连接到寄存器文件的适当寄存器端口,以允许其接收在寄存器中存储的数据以输入。然后在实施方式中存在诸如复用器这样的适当选择电路,该选择电路可操作为选择例如寄存器端口中的哪一个读取作为执行指令时的输入(和/或是否读取被反馈的来自之前指令的输出结果,以直接可用作执行指令时的输入)。
在实施方式中,来自多个寄存器的数据值可以被提供并选择为执行指令时的输入。
然而,申请人已经认识到,通过允许直接传递(反馈)来自一个指令的执行的结果,作为用于另一指令的输入,这可以减少允许指令能够从寄存器读取可能必须的输入数据值的量,从而减少指令在它们的执行期间可能需要访问的寄存器的数量。
由此,在实施方式中,指令仅能够访问较有限数量的寄存器(从其取得输入)(即,指令在实施方式中仅可以在较有限数量的寄存器端口之间选择)。由此,在实施方式中,指令可以访问一个或至多两个寄存器端口(且执行单元仅具有到该端口的连接) (即,对于输入仅可以从多达两个寄存器值选择)。
由此,这里所描述技术的另外优点是它可以减少可能需要设置在用于由可编程执行单元使用的寄存器文件中的寄存器端口的数量。
此外,通过具有执行仅访问寄存器的更有限集合时的指令,这允许简化执行指令时的寄存器访问系统。例如,可以减少指令可能需要的地址编码。
由此,在实施方式中,被执行的指令能够(且仅能够)访问(且寻址到)寄存器的较小集合(而不是直接寻址到整个主寄存器文件中)。
换言之,不是被执行的指令能够访问完整寄存器文件地址空间,而是它们在实施方式中访问较小的局部地址空间。
由此,在实施方式中,要执行的指令使用地址编码来指示指令的输入(操作数),该输入仅可以指示输入源的较有限集合(较有限的局部地址空间),诸如例如2位地址编码(然后例如将允许指示四个不同输入源)。
在实施方式中,用于指令的地址编码可以指示指令是使用寄存器值还是使用直接从另一指令反馈的结果作为其输入(操作数)。例如,在指令使用2位地址编码的情况下,2位地址编码可以指示的四个值中的两个可以指示相应寄存器值(例如且在实施方式中为要读取的两个寄存器端口的值),并且另两个值可以指示从之前指令的执行直接反馈的相应结果。
在实施方式中,存在指令可以寻址(可以使用)的局部存储“池”,以指示它们的输入(操作数)应从哪里加载。该可寻址的局部存储池在实施方式中包括寄存器读取结果的有限集合和从之前执行的指令直接反馈的任意结果。
在要执行的指令实际上简单地寻址寄存器文件的寄存器端口的情况下,那么在开始执行指令时将需要在考虑中的端口处提供相关数据值。这可以以任意合适且期望的方式来实现,但在实施方式中,要执行的程序包括寄存器访问描述符,这些描述符指示应在可以被访问的寄存器端口上提供以作为执行指令时的输入的相关寄存器值。在实施方式中,这些寄存器访问描述符指示在考虑中的端口上提供哪些寄存器的值。在实施方式中,寄存器访问描述符指示其值被提供的寄存器的地址。(由此,在存在两个寄存器端口的情况下,在实施方式中,寄存器访问描述符指示两个寄存器地址,地址指示应从哪些所述寄存器提供针对各相应寄存器端口的各值。)
在实施方式中,寄存器访问描述符可以(且在实施方式中确实)还指示来自执行指令的输出值应写到哪个寄存器。再次,这在实施方式中被给出为指示考虑中的寄存器的地址的写地址。这然后将允许(例如,各功能单元的)可编程执行单元的输出简单地直接提供到寄存器文件的写端口,寄存器访问描述符中的地址然后用于将被提供到写端口的该值映射到适当的寄存器以存储。
由此,在实施方式中,执行指令所需的主寄存器文件访问不在指令本身中编码,相反向指令单独指示(并且编码),在实施方式中在指令包括的寄存器访问描述符中。
寄存器访问和寄存器访问描述符可以关于指令执行以任意适当和期望的方式来调度。例如,寄存器访问可以在要原子地执行的各相应一组指令之间执行,或者寄存器访问可以在要执行的指令序列中的各相应指令之间执行。这例如可以依赖于要执行的各指令是否需要输入值的不同组合和/或是否将其输出值写到不同寄存器、和/或是否需要执行单元访问的若干不同寄存器端口。
在实施方式中,提供作为输入的数据的寄存器文件访问在它们相关的指令的执行之前(在实施方式中为紧接之前)来调度并执行,并且对应地,将来自指令的执行的结果写到寄存器文件的任意寄存器文件访问被调度为在已经完成的相关指令的执行之后(且在实施方式中为紧接之后)执行。
在实施方式中,给定寄存器访问描述符可操作为设置寄存器读取,使得将在寄存器端口上针对要在寄存器访问之后执行的下一指令或多个指令提供适当的寄存器值,并且对应地设置该指令的输出(结果)将写到的寄存器。由此,用于指令组中的一个指令的寄存器写通常可以与用于组中的下一指令的寄存器读同时发生。由此可见,它们可以一起编码。另选地,可以一起编码用于一个指令的寄存器读和寄存器写。由此,在任一情况下且在实施方式中,在指令序列中的适当点处在针对该程序的指令序列中插入适当的寄存器访问描述符,以适当地设置用于指令的寄存器访问。
由此,例如,在仅需要在要原子地执行的各组指令之间设置寄存器访问计划表的情况下,那么可以在指令组之前包括将寄存器设置为对于要执行的下一组指令读和写的适当寄存器访问描述符。
在实施方式中,在各指令之前(即,在各连续的指令对之间)包括寄存器访问描述符,以对于该下一指令设置寄存器读和任何必要的寄存器写。
由此,在实施方式中,在各指令的执行之间调度并执行寄存器文件访问。对应地,寄存器访问描述符在实施方式中被包括在要执行的各指令之前。
这样配置寄存器访问避免了例如针对硬件对为了确定指令需要多少寄存器和它们的寄存器读结果应如何映射到基础文件结构而检查指令本身以及为了不得不进行关于指令执行的寄存器文件访问的任何调度决策而的任意需要。
将要执行的给定程序组织成在这里所描述的技术中原子地执行的指令组可以由整个数据处理系统的任何合适且期望的元件或部件来执行。例如,执行硬件本身可以操作为取得向其提供的程序指令,并且原子地执行这些指令的适当组。
在一个实施方式中,用于(针对可编程执行单元的)程序的编译器可操作为将要执行的程序设置为要原子地执行的各指令组(并且向执行单元适当地指示这些指令组)。由此,在图形处理系统的情况下,用于图形处理单元的着色器编译器在实施方式中执行该操作。
由此,在实施方式中,用于可编程执行单元的编译器在实施方式中分析它接收的程序以编译,并且将针对程序的指令组织成可以原子地执行的各组,这例如且在实施方式中包括识别具有非确定时延的任何指令(然后确保在要原子地执行的任何给定的一组指令中包括仅一个这种指令)。
编译器在实施方式中还将提供任何适当的描述符(报头),该描述符指示在可以执行要执行的给定的一组指令之前必须满足的任意依赖。
在实施方式中,编译器还在所编译的指令序列中(例如,在要原子地执行的各指令组之间或之前和/或经编译程序中的各指令之间或之前)包括适当的寄存器访问描述符。
然后将向可编程执行单元适当地提供经编译的程序(程序二进制)(以及任意描述符、报头等)以执行。
编译器例如可以通过将指令组封装为数据结构来指示指令组,该数据结构除了包含实际指令本身外还包含报头。报头然后可以包含与例如指令组多长且它具有哪些数据依赖有关的信息。
报头另外可以包含诸如以下内容中的任一个或所有的额外信息:
指令组中是否存在非确定时延指令的指示,并且如果存在非确定时延指令,则还有控制其执行的参数;
对于许多连续指令可能相同的浮点操作标记,诸如舍入模式、异常模式、与零齐平模式等;
指令流控制指示符(例如,分支发散/重聚、程序结束、背靠背执行使能等);
指令类型指示符(例如,区分32位操作与64位操作的指示符,各指令组限于进行一个或另一个);
这种附加信息的细节可以为实施方案特定的,并且可以根据实施方式的不同而不同。
在实施方式中,对于固定时延指令,由编译器执行寄存器访问调度。这帮助支持严格的定时流,因为寄存器文件访问调度会创建比指令调度大的负担。
对于非确定时延指令(例如,存储器负载),在实施方式中,采用某种调度硬件。然而,这仅可以组成总寄存器文件活动的一小部分,由此可见,可以在没有过度性能损失的情况下简化了调度硬件。
编译器例如可以(且在实施方式中确实)在包括数据处理单元的数据处理系统的主处理器上运行,数据处理单元包括可编程执行单元(可编程执行单元然后在另一个处理器上,诸如与主处理器关联的图形处理器(使得编译器和经编译代码全部在例如图形处理系统的整个数据处理系统内的单独处理器上运行))。然而,其他结构将是可以的,诸如在与经编译代码相同的处理器上运行的编译器、或在单独处理器上运行的编译器,诸如在单独系统上预编译且以编译形式分布的程序。
因此,这里所描述的技术扩展到数据处理系统和数据处理单元的整体操作,包括向执行单元提供要执行的程序,然后以这里所描述的技术的方式执行程序。
由此,这里所描述技术的另一个实施方式包括一种操作数据处理系统的执行流水线的方法,该执行流水线包括可编程执行单元,该可编程执行单元执行程序指令,这些程序指令执行数据处理操作,方法包括以下步骤:
向可编程执行单元发布要由可编程执行单元执行的程序,程序包括当执行程序时要由可编程执行单元执行的指令序列;
向可编程执行单元发布要执行程序的一个或更多个执行线程,以便执行;以及
针对执行线程执行程序;
其中,
针对执行线程执行程序包括:
原子地执行程序的指令序列的至少一组指令;以及
直接传递通过被原子地执行的一组指令中的指令生成的结果,以由被原子地执行的一组指令中的另一指令使用。
这里所描述技术的另一个实施方式包括一种数据处理系统,该数据处理系统包括:
执行流水线,执行流水线包括可编程执行单元,所述可编程执行单元执行程序指令以进行数据处理操作;
其中,
数据处理系统被配置为:
向执行流水线的可编程执行单元发布要由可编程执行单元执行的程序,该程序包括当执行程序时要由可编程执行单元执行的指令序列;并且
执行流水线被配置为:
向可编程执行单元发布要执行程序的一个或更多个执行线程,以便执行;并且
执行流水线的可编程执行单元包括:
处理电路,该处理电路可操作为在可编程执行单元执行包括要由可编程执行单元执行的指令序列的程序时:
原子地执行程序的指令序列的一组指令中的指令;和
电路,该电路被配置为直接传递通过执行被原子地执行的一组指令中的指令而生成的结果,以在执行被原子地执行的一组指令中的另一指令时使用。
如本领域技术人员将理解的,这里所描述技术的这些实施方式可以(且在实施方式中确实)适当包括这里描述的特征中的任一个或更多个或所有。
在实施方式中,诸如驱动器处理电路(驱动器)的数据处理系统的处理电路向可编程执行单元发布程序。在实施方式中,执行流水线的处理电路(在实施方式中为执行线程发布电路,诸如线程派生电路和/或调度电路(线程派生器和/或调度器))向可编程执行单元发布执行线程。
以这里所描述的技术的方式进行的操作例如可以对于要由可编程执行单元执行的所选程序中的一些(但不是全部)来进行,但在实施方式中对于要由可编程执行单元执行的各和每一个程序来进行。
如本领域技术人将理解的,这里所描述技术的数据处理(例如,图形处理)单元可以为整个数据处理系统的一部分,该数据处理系统例如且在实施方式中将包括主处理器,该主处理器例如执行需要由数据处理单元进行的处理的应用。主处理器将向数据处理单元发送适当的命令和数据,以控制数据处理单元执行数据处理操作并产生在主处理器上执行的应用所需的数据处理输出。为了促进这一点,主处理器应(且在实施方式中确实)还执行用于数据(例如,图形)处理单元的驱动器和用于编译要由数据处理单元的可编程执行单元执行的程序的编译器。
数据(例如,图形)处理单元还可以包括一个或更多个存储器和/或存储装置、和/或与其通信,这些存储器和/或存储装置存储这里所描述的数据、和/或由数据处理单元生成的输出数据,和/或存储用于执行这里所描述的处理的软件。数据处理单元还可以与主微处理器、和/或与用于基于由数据处理单元生成的数据显示图像的显示器通信。
在数据处理单元是图形处理单元的情况下,那么除了诸如顶点着色器和片段着色器的任意可编程处理(着色器)级之外,图形处理单元和流水线还可以包含图形处理流水线可以包含的任意其他合适且期望的处理级,诸如栅格化器、早期深度(或早期深度和模板)测试器、后期深度(或深度和模板)测试器、混合器、块缓冲器、写出单元等。
这里所描述的技术可以用于数据处理单元可以输出的所有形式的输出。由此,在图形处理流水线的情况下,在生成用于显示的帧、渲染到纹理输出等时可以使用该图形处理流水线。来自数据处理的输出数据值在实施方式中可以输出到外部(例如,主) 存储器,以存储和使用。
在数据处理单元是图形处理单元的情况下,这里所描述的技术适用于任意合适形式或配置的图形处理单元。它特别适用于基于块的图形处理器和图形处理系统。由此,在实施方式中,图形处理系统和图形处理单元分别是基于块的系统和流水线。
在实施方式中,这里所描述技术的各种功能在单个图形处理平台上执行,图形处理平台生成并输出例如写到用于显示装置的帧缓冲器的、渲染后的片段数据。
这里所描述的技术可以在任意合适的系统中实现,诸如基于合适构造的微处理器的系统。在实施方式中,这里所描述的技术实现在计算机和/或基于微处理器的系统中。
这里所描述的技术的各种功能可以以任意期望且合适的方式执行。例如,这里所描述的技术的功能可以实现在硬件或软件中(根据期望)。由此,例如,除非以其他方式指示,否则这里所描述的技术的各种功能元件、级以及“装置”可以包括合适的处理器、控制器、功能单元、电路、处理逻辑、微处理器结构等,它们可操作以进行各种功能等,诸如适当专用硬件元件和/或可以被编程以以期望方式操作的可编程硬件元件。
这里还应当注意的是,如本领域技术人员将理解的,这里所描述的技术的各种功能等可以在给定处理器上重复和/或并行执行。等同地,各种处理级可以共享处理电路等(如果期望)。
此外,这里所描述的技术的处理级中的任一个或更多个或所有可以被具体实施为处理级电路,该处理级电路例如为一个或更多个固定功能单元(硬件)的形式(处理电路)、和/或可以被编程为执行期望操作的可编程处理电路的形式。相等地,这里所描述的技术的处理级和处理级电路中的任一个或更多个可以作为单独的电路元件提供给其他处理级或处理级电路中的任一个或更多个,和/或处理级和处理级电路中的任一个或更多个或全部可以至少部分由共享处理电路来形成。
受制于必须执行上面讨论的特定功能的任意硬件,数据处理系统和流水线可以以其他方式包括数据处理流水线包括的通常功能单元等中的任一个或更多个或所有。
如本领域技术人员还将理解的,这里所描述技术的所有描述的实施方式可以(且在实施方式中确实)酌情包括这里描述的特征中的任一个或更多个或所有。
根据这里所描述的技术的方法至少部分地可以使用软件(例如,计算机程序)实现。由此将看到当从另外的实施方式看时,这里所描述的技术提供计算机软件,该计算机软件当安装在数据处理器上时专门适用于执行这里描述的方法;计算机程序元件,该计算机程序元件包括计算机软件代码部,用于在程序元件在数据处理器上运行时执行这里描述的方法;和计算机程序,该计算机程序包括代码,该代码当程序在数据处理系统上运行时适用于执行这里描述的方法的所有步骤。数据处理器可以是微处理器系统、可编程FPGA(场可编程门阵列)等。
这里所描述的技术还扩展到计算机软件载体,该计算机软件载体包括这种软件,这种软件当用于操作显示控制器或包括数据处理器的微处理器系统时与所述数据处理器结合使所述处理器或系统执行这里所描述的技术的方法的步骤。这种计算机软件载体可以是物理存储介质,诸如ROM芯片、CD ROM、RAM、闪存或盘,或可以是信号,诸如电线上的电信号、光信号或无线电信号,诸如卫星等。
还将进一步理解的是,不是这里所描述的技术的方法的所有步骤都需要由计算机软件执行,并且由此根据更宽实施方式,这里所描述的技术提供了计算机软件并且这种软件安装在计算机软件载体上,用于执行这里阐述的方法的步骤中的至少一个。
这里所描述的技术可以因此适当地具体实施为用于与计算机系统一起使用的计算机程序产品。这种实现可以包括一系列计算机可读指令,该一系列计算机可读指令固定在有形、永久介质上,诸如计算机可读介质,例如,磁盘、CD-ROM、ROM、 RAM、闪存或硬盘。还应当包括一系列计算机可读指令,在有形介质(包括但不限于,光学或模拟通信线)上,或无形地使用无线技术(包括但不限于,微波、红外或其他传输技术),这些指令经由调制解调器或其他界面装置可发送到计算机系统。该系列计算机可读指令具体实施这里之前描述的功能的所有或一部分。
本领域技术人员将理解这种计算机可读指令可以以多种编程语言来写,用于与许多计算机架构或操作系统一起使用。进一步地,这种指令可以使用任意存储技术来存储(存储技术现在或将来包括但不限于半导体、磁或光),或使用任意通信技术来发送(通信技术现在或将来包括但不限于光学、红外或微波)。预期的是,这种计算机程序产品可以作为可去除介质来分发,附有已打印的文档或电子文档,例如,现成软件;例如在系统ROM或固定盘上预加载有计算机系统;或在网络(例如,因特网或万维网)上从服务器或电子公告栏分发。
现在将在用于显示的计算机图形的处理的背景下描述这里所描述的技术的若干实施方式。
图1示出了典型的计算机图形处理系统。
在主处理器1上执行的应用2(诸如游戏)将需要图形处理操作由关联的图形处理单元(图形处理流水线)3执行。为了这样做,该应用将生成API(应用编程接口) 调用,该API调用由在主处理器1上运行的用于图形处理流水线3的驱动器4解释以生成对图形处理器3的适当命令以生成应用2所需的图形输出。为了促进这一点,将响应于来自用于图形输出(例如,以生成要显示的帧)的在主系统1上运行的应用2 的命令,一组“命令”将被提供给图形处理器3。
图2更详细地示出了本实施方式的图形处理流水线3。
图2中所示的图形处理流水线3是基于块的渲染器,并且将由此生成渲染输出数据阵列的块,诸如要生成的输出帧。
(在基于块的渲染时,不是按照中间模式渲染那样整个渲染输出(例如,帧)被一下子有效处理,而是渲染输出(例如,要显示的帧)被划分为多个较小的子区域(通常称为“块”)。各个块(子区域)被单独(通常一个接一个地)渲染,然后渲染后的块(子区域)被重组以提供完整的渲染输出(例如,用于显示的帧)。在这种排布中,渲染输出通常被划分为规则大小且成形的子区域(块)(它们通常是例如正方形或矩形) ,但不是必须的。)
渲染输出数据阵列可以通常是旨在显示在诸如画面或打印机上这样的显示装置上的输出帧,但还可以例如包括旨在用于后期的渲染流程(还称为“渲染到纹理”输出)等的中间数据。
(当计算机图形图像要被显示时,其通常首先被限定为一系列图元(多边形),这些图元然后被划分(栅格化)为用于依次进行图形渲染的图形片段。在正常图形渲染操作期间,渲染器将修改与各片段关联的(例如)颜色(红色、绿色和蓝色,RGB) 和透明度(阿尔法、α)数据,使得可以正确地显示片段。一旦片段已经完全穿过渲染器,则它们的关联数据值存储在存储器中,以输出,例如,用于显示。)
图2示出了图形处理流水线3的与本实施方式的操作有关的主要素和流水线级。如本领域技术人员将理解的,可以有图2未例示的图形处理流水线的其他要素。这里还应当注意的是,图2仅是示意性的,并且例如,实际上,所示出的功能单元和流水线级可以共享大量的硬件电路,尽管它们在图2中被示意性地示出为单独的级。还将理解的是,如图2所示的图形处理流水线的各个级、要素和单元等可以根据期望来实现,并且因此将包括用于执行需要的操作和功能的例如适当的电路和/或处理逻辑等。
如图2所示,图形处理流水线3包括多个级,包括顶点着色器20、外壳着色器 21、镶嵌器(tesselator)22、域着色器23、几何着色器24、栅格化级25、早期Z(深度)和模板测试级26、片段着色级的形式的渲染器27、后期Z(深度)和模板测试级28、混合级29、块缓冲器30以及下采样和写出(多采样分辨率)级31。
顶点着色器20采用例如针对要生成的输出而限定的与顶点关联的输入数据值等,并且处理那些数据值以生成一组对应的“经顶点着色的”输出数据值,以由图形处理流水线3的后续级使用。顶点着色例如,修改输入数据,以考虑要被渲染的图像中的照明效果。
外壳着色器21对色标(patch)控制点组进行操作,并且生成已知为色标恒量的附加数据,镶嵌级22子划分几何结构,以创建外壳的较高阶表示,域着色器23对镶嵌级输出的顶点进行操作(类似于顶点着色器),并且几何着色器24处理全部图元,诸如三角形、点或线。这些级与顶点着色器21一起有效地进行所有需要的片段前端操作,诸如转换和照明操作,和图元建立,以响应于提供给图形处理流水线3的命令和顶点数据来建立要被渲染的图元。
图形处理流水线3的栅格化级25操作以将组成渲染输出(例如,要显示的图像) 的图元栅格化为各个图形片段以处理。为了这样做,栅格化器25接收用于渲染的图形图元,将图元栅格化为采样点并且生成具有用于渲染图元的适当位置(表示合适的采样位置)的图形片段。
由栅格化器生成的片段然后向前发送到流水线的剩余部分以处理。
早期Z/模板级26对其从栅格化器25接收的片段进行Z(深度)测试,以查看是否可以在该级丢弃(剔除)任何片段。为了这样做,早期Z/模板级26将从栅格化器 25发布的片段的深度值(与片段关联的深度值)与已经渲染的片段的深度值进行比较(这些深度值存储在作为块缓存器30的一部分的深度(Z)缓冲器中),以确定新片段是否将被已经被渲染的片段遮蔽。同时,执行早期模板测试。
通过片段早期Z和模板测试级26的片段然后发送到片段着色级27。片段着色级 27对通过早期Z和模板测试的片段进行适当的片段处理操作,以处理片段以生成适当的经渲染的片段数据。
该片段处理可以包括任何合适且期望的片段着色处理,诸如对片段执行片段着色器程序、向片段应用纹理、向片段应用雾化或其他操作等,以生成适当的片段数据。在本实施方式中,片段着色级27为着色器流水线(可编程片段着色器)的形式。
然后,存在“后期”片段Z和模板测试级28,其尤其对着色后的片段执行流水线深度测试的结尾部分,以确定经渲染的片段是否将实际在最后图像中看到。该深度测试使用块缓冲器30中的Z缓冲器中存储的针对片段位置的Z缓冲器值,以通过将从片段着色级27发布的片段的(与片段关联的)深度值与已经渲染的片段的深度值 (如存储在深度缓冲器中)进行比较,来确定用于新片段的片段数据是否应当代替已经渲染的片段的片段数据。该后期片段深度和模板测试级28还对片段执行任何需要的“后期”阿尔法和/或模板测试。
通过后期片段测试级28的片段然后经历(如果需要)任何必须的与已经存储在混合器29中的块缓冲器30中的片段的混合操作。对片段需要进行的任何其他剩余操作(诸如,抖动(dither)等(未示出))也在该级执行。
最后,(混合后的)输出片段数据(值)被写到块缓冲器30,它们可以从其例如被输出到帧缓冲器以显示。针对输出片段的深度值还适当写到块缓冲器30内的Z缓冲器。(块缓冲器存储颜色并且深度缓冲器分别存储合适颜色等或Z值,针对缓存器表示的各个采样点(实质上用于正被处理的块的各个采样点)。)这些缓冲器存储表示整个渲染输出(即,要被显示的图像)的一部分(块)的片段数据阵列,其中缓冲器中的各组采样值对应于整个渲染输出的各自像素(例如,各2x2组采样值可以对应于输出像素,其中,使用4x多采样)。
块缓冲器被提供作为位于图形处理流水线(芯片)(本地)上的RAM的一部分。
来自块缓冲器30的数据被输入到下采样(多采样分辨率)写出单元31,因此输出(写回)到外部存储输出缓冲器,诸如显示装置(未示出)的帧缓冲器。显示装置可以包括例如,包括像素阵列的显示器,诸如计算机监测器或打印机)。
下采样和写出单元31将块缓冲器30中存储的片段数据下采样到用于输出缓冲器(装置)的适当分辨率(即,使得生成对应于输出装置的像素的像素数据的阵列),以生成用于输出到输出缓冲器的输出值(像素)。
一旦渲染输出的块已经被处理并且其数据被输出到主存储器(例如,到主存储器(未示出)中的帧缓冲器)以存储,则接着处理下一块,等,直到足以生成整个渲染输出(例如,要显示的帧(图像))的块已经被处理为止。然后,该处理针对下一渲染输出(例如,帧)重复等。
用于图形处理流水线3的其他排布当然是可能的。
以上描述了图1所示的图形处理系统的操作的特定特征。现在将描述根据这里所描述的技术的实施方式的、图1所示的图形处理系统的操作的另外特征。
如可以从图2看到的,图形处理流水线3包括多个可编程处理或“着色器”级,即,顶点着色器20、外壳着色器21、域着色器23、几何着色器24和片段着色器27。这些可编程着色器级执行具有一个或更多个输入变量的各着色器程序,着色器程序生成输出变量组并且由应用提供。
为了这样做,应用2提供使用高级别着色器编程语言(诸如GLSL、HLSL、OpenCL 等)实现的着色器程序。这些着色器程序然后由着色器语言编译器来翻译成用于目标图形处理流水线3的二进制代码。这可以包括创建编译器内的程序的一个或更多个中间表现。(编译器可以例如是驱动器4的一部分,特殊API调用使编译器运行。编译器执行可以由此被看做绘制调用准备的一部分,绘制调用准备响应于由应用生成的 API调用由驱动器进行。驱动器然后将向图形处理流水线3发布经编译程序,以由图形处理流水线的可编程处理级执行。)
图2示意性示出了图形处理单元3的操作级。
图3示出了图形处理单元3的对应功能单元,对应功能单元用于进行(由此充当)图2示出的图形处理流水线的各种处理操作和级。(图形处理单元3中可能有其他功能单元。仅为了简化,图3示出了仅与以这里所描述技术的方式的操作有关的那些功能单元。)
如图3所示,图形处理单元3包括栅格化器40、线程派生器41、可编程执行单元42、变化插值器43、纹理映射器44、混合器45以及一组寄存器46。
线程派生器41可操作以派生由可编程执行单元42执行的执行线程,例如针对从栅格化器40接收的片段。线程派生器可以包括诸如调度器(调度电路)的执行线程发布电路,该电路用于发布由可编程执行单元执行的线程并控制该发布。
可编程执行单元42操作以执行着色器程序来进行图形处理流水线的着色器操作,诸如外壳着色器、顶点着色器以及片段着色器。为了这样做,可编程执行单元从线程派生器41接收执行线程,并且执行针对那些执行线程的相关着色器程序。作为该操作的一部分且如图3所示,执行线程将从图形处理单元的寄存器文件的各寄存器 46读取数据和向其写数据。
作为该处理的一部分且如图3所示,可编程执行单元42可以调用变化插值器43、纹理映射器44以及混合器45来进行特定图形处理操作。为了这样做,可编程执行单元将向相关加速器发送适当消息(并从其接收适当响应),例如响应于其执行的着色器程序中的特定指令。
变化插值器43操作为在图形图元上插值,并且作为该操作的一部分,经常创建要用于对图形纹理采样的纹理坐标。
纹理映射器44操作以使用纹理坐标(例如由变化插值器43生成纹理坐标来对图形纹理进行采样,并且从其生成经滤波的纹理采样结果(该结果然后可以返回到可编程执行单元42以被使用,例如在着色采样点时使用)。
混合器45操作为将例如由可编程执行单元42生成的片段着色结果和之前生成的片段着色器结果进行混合,该片段着色器结果诸如已经存储在块缓冲器和/或帧缓冲器中的结果。
在本实施方式中且根据这里所描述的技术,图形处理单元3的可编程执行单元 42可操作为能够执行被原子地执行的着色器程序的多组指令,并且还能够直接传递执行一个指令的结果作为用于当执行另一指令时使用的输入。
图4示意性示出了可这样操作的可编程执行单元的第一实施方式。(再次地,为了清楚起见,图4仅示出了与以这里所描述技术的方式进行的可编程执行单元42的操作相关的可编程执行单元42的那些元件。可编程执行单元42可以具有图4未示出的其他元件。
在图4中,可编程执行单元42包括可操作为执行指令51的单个功能单元50。如图4所示,功能单元50的输出可以被写到寄存器46且借助于反馈电路52直接反馈,作为对功能单元的输入(在不启动寄存器文件46的情况下)。
对应地,要由功能单元50执行的指令可以选择来自之前指令的执行的所反馈的输出52或来自寄存器46的输入作为其输入。在该实施方式中,如图4所示的各指令具有两个操作数,这两个操作数中的每个可以在两个寄存器输入中的一个与来自之前指令的执行的所反馈的结果52之间被选择。
图4还示出了要由可编程执行单元42原子地执行的对应的指令组53。
如图4所示,在一组指令53的各指令之间,存在对应的寄存器访问描述符54。各这种描述符54如图4所示的通过指定寄存器地址(由对应寄存器端口提供的相关数据值应从该寄存器地址取得),来指定功能单元对于其执行随后指令时的输入值而将(如果其执行的指令这样指示)读取的寄存器端口上将可用的数据值。
对应地,寄存器访问描述符54还指定执行跟随该描述符的指令的结果应写到的寄存器地址(该结果被提供到寄存器文件的写端口且写到由寄存器访问描述符54指示的写地址)。
在执行指令组53时,可编程执行单元42将首先等待以确定已经满足用于要原子地执行的指令组的任何依赖。针对该组指令53的任何依赖在实施方式中在报头中指示给该组指令,使得可编程执行单元被通知其在执行指令组53之前需要满足的依赖。
一旦已经满足针对指令组53的所有相关依赖,可编程执行单元42将原子地执行指令组,即,不中断且遵循严格的定时。
在执行指令组53时,可编程执行单元42首先将根据针对该组指令的第一寄存器访问描述符54配置寄存器文件,然后使用在该指令中指示的输入值来执行第一指令 51,且将其输出写到由寄存器访问描述符指示的相关写地址。
一旦完成了该指令执行,则序列中根据下一寄存器访问描述符的相关数据值将被取得并在寄存器读取端口上提供,然后将执行指令组中的下一指令,其结果被再次写到由寄存器访问描述符指示的对应寄存器,以此类推。
在各情况下,如图4所示,要由功能单元执行的指令可以(通过访问相关寄存器端口)选择来自寄存器文件的数据和/或借助于反馈(旁路)电路52反馈的之前指令的结果作为其输入。
一旦已经执行该组指令的所有指令,则程序执行将移至针对该程序的下一组指令(若有的话),并且以对应的方式原子地执行该组指令,以此类推,直到完成程序执行为止。
图5示出了可编程执行单元42的第二实施方式。(再次,为了清楚起见,图5 仅示出了与以这里所描述技术的方式进行的可编程执行单元42的操作相关的可编程执行单元42的那些元件。可编程执行单元42可以具有图5未示出的其他元件。)
在该实施方式中,可编程执行单元42包括两个功能单元60、61,各功能单元在给定执行周期中执行相应指令51。由此,要原子地执行的一组指令53包括指令元组的序列62,其包括要分别由功能单元60、61中的每个在同一指令周期中执行的针对各个功能单元的指令。
再次,如图5所示,各功能单元的输出由各反馈电路63、64反馈,以可用作由功能单元60、61中的每个执行的下一指令的输入。因此,要由功能单元执行的指令可以选择从在功能单元中的任一个中执行之前指令生成并反馈的结果、以及另外来自寄存器文件46的数据作为它们的输入。
在图5所示的实施方式中,假定在任意给定执行周期中仅可以将一个结果写回到寄存器,因此如图5所示,可编程执行单元42还可操作为选择功能单元的输出结果中的哪个应被写到寄存器文件46。如图5所示,这在寄存器访问描述符54中指定。其他排布将是可以的(如果期望),诸如提供两个写端口,使得可以将两个功能单元在执行周期内的输出写到寄存器文件或允许结果的一些组合被写到寄存器文件46。
类似地,将可以提供更多寄存器读取端口,以允许功能单元在更多输入值之间选择,并且可以存在不超过两个功能单元等(根据期望)。
图6示意性示出了用于着色器程序的示例定时图70。特别地,该定时图70示出了具有用0至4编号的五个子句71、72、73、74、75的着色器程序的执行。在该示例中,子句0、1以及2(71、72、73)各发布一个存储器负载(76、77、78),并且它们在它们本身之间没有依赖,因此它们在算术逻辑单元(ALU)79中背靠背地执行,并且允许存储器负载(76、77、78)交叠。另一方面,子句3(74)具有依赖80:它依赖于第一存储器负载76,因此被阻止,直到完成第一存储器负载76为止。子句 4(75)具有两个依赖81、82:它依赖第二存储器负载77和第三存储器负载78。由此可见,子句4(75)被阻止,直到完成这两个存储器负载(即,第二存储器负载77、和第三存储器负载78)为止。
存储器负载可以具有不可预测的时延。在图6中的示例中,这由第一负载76和第二负载77具有比第三负载78高的时延来表示。
虽然以上具体参照图形处理单元中的着色器程序的执行描述了本实施方式,但以这里所描述的技术和这里所描述技术的技巧的方式进行的操作相等地适于且可以用于其他处理单元,诸如更一般的处理器,诸如CPU(中央处理单元)(如果期望)。
从上述可以看到,至少在本发明的实施方式中,这里所描述的技术提供可以在数据处理系统的可编程执行单元中执行程序的方法,这些方法可以提供这些程序的较高效的执行。至少在这里所描述的技术的实施方式中,这通过以下方式来执行:执行要原子地执行的程序中的一组指令,并且通过直接提供执行该组指令中的一个指令的结果作为执行该组指令中的另一指令时的输入。
前述具体实施方式已经为了例示和描述的目的而提出。并非旨在对本技术进行穷尽,或者将本技术限于所公开的精确形式。许多修改例和变型例鉴于上述示教而是可以的。选择了所描述实施方式以最好地说明本技术的原理及其实际应用,从而使本领域其它技术人员能够在各种实施方式中最好使用本技术,以及适合于所设想的具体用途的各种变型。

Claims (25)

1.一种用于数据处理单元的可编程执行单元,所述可编程执行单元包括:
处理电路,该处理电路能够操作为当所述可编程执行单元执行包括要由所述可编程执行单元执行的指令序列的程序时原子地执行所述程序的所述指令序列的一组指令中的指令,其中,所述处理电路包括一个或更多个功能单元,各个功能单元能够操作以在执行周期中执行一个指令;以及
反馈电路,该反馈电路被配置为直接反馈来自执行被原子地执行的一组指令中的指令的所述一个或更多个功能单元的功能单元的输出,以在执行被原子地执行的所述一组指令中的另一指令时作为对所述一个或更多个功能单元的功能单元的输入来使用。
2.根据权利要求1所述的可编程执行单元,其中,所述可编程执行单元作为可编程图形着色级操作,该可编程图形着色级执行图形着色器程序以进行图形处理操作。
3.根据权利要求1或2所述的可编程执行单元,其中,所述处理电路包括多个功能单元,各功能单元在执行周期中执行一个指令。
4.根据前述权利要求3所述的可编程执行单元,其中,所述一组指令包括多个指令元组,各指令元组包括一对指令,并且所述处理电路包括两个功能单元,各个功能单元在执行周期中执行指令元组中的相应指令。
5.根据前述权利要求1或2所述的可编程执行单元,所述可编程执行单元还包括电路,该电路能够操作为允许指令选择从所述执行单元的输出反馈的之前指令的输出作为执行该指令时的输入。
6.根据前述权利要求1或2所述的可编程执行单元,其中,所述可编程执行单元被配置为使得执行指令的结果能够被写到寄存器中以存储。
7.根据前述权利要求1或2所述的可编程执行单元,所述可编程执行单元还包括电路,该电路能够操作为允许指令被执行以选择在所述可编程执行单元的寄存器文件中的寄存器中或所述可编程执行单元能够访问的寄存器文件中的寄存器中存储的数据,作为执行该指令时的输入。
8.根据前述权利要求1或2所述的可编程执行单元,其中:
所述可编程执行单元连接到寄存器文件的寄存器端口,以允许所述可编程执行单元接收在寄存器中存储的数据作为输入;并且
该可编程执行单元还包括:
选择电路,该选择电路能够操作为选择寄存器端口以用作执行指令时的输入源。
9.根据前述权利要求1或2所述的可编程执行单元,其中,要执行的指令使用地址编码来指示这些指令的仅能够对局部地址空间寻址的输入,所述局部地址空间对输入源的有限集合寻址。
10.一种数据处理系统,该数据处理系统包括:
执行流水线,所述执行流水线包括可编程执行单元,所述可编程执行单元执行程序指令以进行数据处理操作;
处理电路,该处理电路被配置为:
向所述执行流水线的所述可编程执行单元发布要由所述可编程执行单元执行的程序,该程序包括当执行所述程序时要由所述可编程执行单元执行的指令序列;
并且其中,
所述执行流水线包括处理电路,该处理电路被配置为:
向所述可编程执行单元发布一个或更多个执行线程以执行,所述程序要针对所述执行线程来执行;并且
所述执行流水线的所述可编程执行单元包括:
处理电路,该处理电路能够操作为当所述可编程执行单元执行包括要由所述可编程执行单元执行的指令序列的程序时,原子地执行所述程序的所述指令序列的一组指令中的指令,其中,所述可编程执行单元的所述处理电路包括一个或更多个功能单元,各个功能单元能够操作以在执行周期中执行一个指令;和
反馈电路,该反馈电路被配置为直接反馈来自执行被原子地执行的一组指令中的指令的所述一个或更多个功能单元的功能单元的输出,以在执行被原子地执行的所述一组指令中的另一指令时作为对所述一个或更多个功能单元的功能单元的输入来使用。
11.根据权利要求10所述的系统,其中:
所述数据处理系统的处理电路还被配置为:
还向所述执行流水线的所述可编程执行单元发布寄存器访问描述符,所述寄存器访问描述符指示要提供哪些寄存器的值作为执行指令时的输入。
12.根据权利要求11所述的系统,其中,所述寄存器访问描述符还指示来自执行指令的输出值应写到哪个寄存器。
13.根据权利要求11或12所述的系统,其中:
所述数据处理系统的处理电路被配置为:
发布用于要执行的所述程序中的各指令的寄存器访问描述符。
14.一种操作数据处理单元的可编程执行单元的方法,该可编程执行单元执行程序指令以进行数据处理操作,其中,所述可编程执行单元包括一个或更多个功能单元,各个功能单元能够操作以在执行周期中执行一个指令,所述方法包括以下步骤:
所述可编程执行单元在针对执行线程执行程序时进行以下处理,其中该程序包括当执行所述程序时要由所述可编程执行单元执行的指令序列:
原子地执行所述程序的所述指令序列的至少一组指令;以及
直接反馈来自执行被原子地执行的所述一组指令中的指令的所述一个或更多个功能单元的功能单元的输出,以在执行被原子地执行的所述一组指令中的另一指令时作为对所述一个或更多个功能单元的功能单元的输入来使用。
15.根据权利要求14所述的方法,其中:
针对要由所述可编程执行单元执行的所述程序的所述指令序列被分成多组指令;并且
所述可编程执行单元原子地执行各组指令。
16.根据权利要求14或权利要求15所述的方法,其中,所述可编程执行单元作为可编程图形着色级操作,并且该可编程图形着色级执行图形着色器程序以进行图形处理操作。
17.根据权利要求14或15所述的方法,所述方法包括以下步骤:
选择从所述执行单元的输出反馈的之前指令的输出作为执行指令时的输入。
18.根据权利要求14或15所述的方法,所述方法包括以下步骤:
将执行指令的结果写到寄存器以存储。
19.根据权利要求14或15所述的方法,所述方法包括以下步骤:
使用在所述可编程执行单元的寄存器文件中的寄存器中或所述可编程执行单元能够访问的寄存器文件中的寄存器中存储的数据作为执行指令时的输入。
20.根据权利要求14或15所述的方法,其中,要执行的指令使用地址编码来指示这些指令的仅能够对局部地址空间寻址的输入,该局部地址空间对输入源的有限集合寻址。
21.一种操作数据处理系统的执行流水线的方法,该执行流水线包括可编程执行单元,该可编程执行单元执行程序指令以执行数据处理操作,其中,所述可编程执行单元包括一个或更多个功能单元,各个功能单元能够操作以在执行周期中执行一个指令,所述方法包括以下步骤:
向所述可编程执行单元发布要由所述可编程执行单元执行的程序,所述程序包括当执行所述程序时要由所述可编程执行单元执行的指令序列;
向所述可编程执行单元发布一个或更多个执行线程以执行,所述程序要针对所述执行线程来执行;以及
针对所述执行线程执行所述程序;
其中,
针对所述执行线程执行所述程序的步骤包括:
原子地执行所述程序的所述指令序列的至少一组指令;以及
直接反馈来自执行被原子地执行的所述一组指令中的指令的所述一个或更多个功能单元的功能单元的输出,以在执行被原子地执行的所述一组指令中的另一指令时作为对所述一个或更多个功能单元的功能单元的输入来使用。
22.根据权利要求21所述的方法,所述方法还包括以下步骤:
向所述执行流水线的所述可编程执行单元发布寄存器访问描述符,所述寄存器访问描述符指示要提供哪些寄存器的值作为执行指令时的输入。
23.根据权利要求22所述的方法,其中,所述寄存器访问描述符还指示来自执行指令的输出值应写到哪个寄存器。
24.根据权利要求22或23所述的方法,所述方法包括以下步骤:
发布针对要执行的所述程序中的各指令的寄存器访问描述符。
25.一种计算机可读存储介质,该计算机可读存储介质存储计算机程序,所述计算机程序在数据处理系统上执行时执行如权利要求14至24中任一项所述的方法。
CN201680044798.7A 2015-07-31 2016-07-22 图形处理单元的可编程执行单元、数据处理系统、操作方法 Active CN107851027B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1513609.6 2015-07-31
GB1513609.6A GB2540970B (en) 2015-07-31 2015-07-31 Executing Groups of Instructions Atomically
PCT/GB2016/052226 WO2017021689A1 (en) 2015-07-31 2016-07-22 Data processing systems

Publications (3)

Publication Number Publication Date
CN107851027A CN107851027A (zh) 2018-03-27
CN107851027A8 CN107851027A8 (zh) 2018-05-22
CN107851027B true CN107851027B (zh) 2022-02-11

Family

ID=54063033

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201680044798.7A Active CN107851027B (zh) 2015-07-31 2016-07-22 图形处理单元的可编程执行单元、数据处理系统、操作方法

Country Status (5)

Country Link
US (1) US10593093B2 (zh)
CN (1) CN107851027B (zh)
GB (1) GB2540970B (zh)
TW (1) TWI706372B (zh)
WO (1) WO2017021689A1 (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10768935B2 (en) * 2015-10-29 2020-09-08 Intel Corporation Boosting local memory performance in processor graphics
GB2574817B (en) * 2018-06-18 2021-01-06 Advanced Risc Mach Ltd Data processing systems
CN108845829B (zh) * 2018-07-03 2021-06-25 中国人民解放军国防科技大学 一种系统寄存器访问指令的执行方法
US11830101B2 (en) * 2020-07-17 2023-11-28 Arm Limited Graphics processors

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101430652A (zh) * 2007-11-08 2009-05-13 国际商业机器公司 片内网络以及片内网络软件流水线操作方法
US7623132B1 (en) * 2004-12-20 2009-11-24 Nvidia Corporation Programmable shader having register forwarding for reduced register-file bandwidth consumption
CN101706779A (zh) * 2009-10-12 2010-05-12 南京联创科技集团股份有限公司 基于oracle的伞状数据导入导出方法
US8108610B1 (en) * 2008-10-21 2012-01-31 Nvidia Corporation Cache-based control of atomic operations in conjunction with an external ALU block

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6615338B1 (en) * 1998-12-03 2003-09-02 Sun Microsystems, Inc. Clustered architecture in a VLIW processor
US20030093509A1 (en) * 2001-10-05 2003-05-15 Li Raymond M. Storage area network methods and apparatus with coordinated updating of topology representation
US7439979B1 (en) * 2004-11-10 2008-10-21 Nvidia Corporation Shader with cache memory
US7496735B2 (en) * 2004-11-22 2009-02-24 Strandera Corporation Method and apparatus for incremental commitment to architectural state in a microprocessor
US7809927B2 (en) * 2007-09-11 2010-10-05 Texas Instruments Incorporated Computation parallelization in software reconfigurable all digital phase lock loop
US8200914B2 (en) * 2008-01-03 2012-06-12 International Business Machines Corporation Apparatus, system, and method for a read-before-write storage controller instruction
US9798548B2 (en) * 2011-12-21 2017-10-24 Nvidia Corporation Methods and apparatus for scheduling instructions using pre-decode data
US20130166882A1 (en) * 2011-12-22 2013-06-27 Jack Hilaire Choquette Methods and apparatus for scheduling instructions without instruction decode
US20130198760A1 (en) * 2012-01-27 2013-08-01 Philip Alexander Cuadra Automatic dependent task launch
US9183609B2 (en) * 2012-12-20 2015-11-10 Nvidia Corporation Programmable blending in multi-threaded processing units
US9256466B2 (en) * 2013-06-07 2016-02-09 Arm Limited Data processing systems
CN104516831B (zh) * 2013-09-26 2019-02-22 想象技术有限公司 原子存储器更新单元和方法
US9471323B2 (en) * 2013-10-03 2016-10-18 Intel Corporation System and method of using an atomic data buffer to bypass a memory location

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7623132B1 (en) * 2004-12-20 2009-11-24 Nvidia Corporation Programmable shader having register forwarding for reduced register-file bandwidth consumption
CN101430652A (zh) * 2007-11-08 2009-05-13 国际商业机器公司 片内网络以及片内网络软件流水线操作方法
US8108610B1 (en) * 2008-10-21 2012-01-31 Nvidia Corporation Cache-based control of atomic operations in conjunction with an external ALU block
CN101706779A (zh) * 2009-10-12 2010-05-12 南京联创科技集团股份有限公司 基于oracle的伞状数据导入导出方法

Also Published As

Publication number Publication date
GB2540970A (en) 2017-02-08
CN107851027A (zh) 2018-03-27
US10593093B2 (en) 2020-03-17
US20180211436A1 (en) 2018-07-26
TWI706372B (zh) 2020-10-01
WO2017021689A1 (en) 2017-02-09
TW201712631A (zh) 2017-04-01
CN107851027A8 (zh) 2018-05-22
GB2540970B (en) 2018-08-15
GB201513609D0 (en) 2015-09-16

Similar Documents

Publication Publication Date Title
US10176546B2 (en) Data processing systems
CN106373083B (zh) 图形处理
US10853905B2 (en) Instruction execution in graphics processor shader programs
KR102617106B1 (ko) 데이터 처리 시스템
CN106327420B (zh) 数据处理系统
CN107851027B (zh) 图形处理单元的可编程执行单元、数据处理系统、操作方法
GB2517047A (en) Data processing systems
US10922086B2 (en) Reduction operations in data processors that include a plurality of execution lanes operable to execute programs for threads of a thread group in parallel
US10559055B2 (en) Graphics processing systems
CN110738593B (zh) 图形处理器及其操作方法、图形处理系统、编译器
US10606595B2 (en) Data processing systems
US20210157600A1 (en) Issuing execution threads in a data processor
US10310856B2 (en) Disabling thread execution when executing instructions in a data processing system
US10891708B1 (en) Shader program execution in graphics processing
US10115222B2 (en) Data processing systems
US20240036874A1 (en) Apparatus and method of optimising divergent processing in thread groups
US11442731B2 (en) Data processing systems including an intermediate buffer with controlled data value eviction
KR102676410B1 (ko) 그래픽 처리 시스템

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
CI02 Correction of invention patent application

Correction item: Applicant

False: Advanced Risc Machines Ltd.

Number: 13-01

Volume: 34

Correction item: Applicant

Correct: Arm Co., Ltd.

False: Advanced Risc Machines Ltd.

Number: 13-01

Page: The title page

Volume: 34

CI02 Correction of invention patent application
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant