CN115439303A - 图形处理 - Google Patents
图形处理 Download PDFInfo
- Publication number
- CN115439303A CN115439303A CN202210623611.6A CN202210623611A CN115439303A CN 115439303 A CN115439303 A CN 115439303A CN 202210623611 A CN202210623611 A CN 202210623611A CN 115439303 A CN115439303 A CN 115439303A
- Authority
- CN
- China
- Prior art keywords
- execution
- thread
- processing operations
- program
- threads
- 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.)
- Pending
Links
- 238000012545 processing Methods 0.000 title claims abstract description 330
- 238000000034 method Methods 0.000 claims description 130
- 230000004044 response Effects 0.000 claims description 44
- 230000004913 activation Effects 0.000 claims description 39
- 230000009849 deactivation Effects 0.000 claims description 14
- 238000004590 computer program Methods 0.000 claims description 6
- 108091006146 Channels Proteins 0.000 description 122
- 230000015654 memory Effects 0.000 description 21
- 238000005516 engineering process Methods 0.000 description 17
- 239000012634 fragment Substances 0.000 description 10
- 230000008569 process Effects 0.000 description 9
- 230000006870 function Effects 0.000 description 5
- 238000004891 communication Methods 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 4
- 238000009877 rendering Methods 0.000 description 4
- 230000003213 activating effect Effects 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 230000000717 retained effect Effects 0.000 description 3
- 230000001960 triggered effect Effects 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 239000000203 mixture Substances 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000005070 sampling Methods 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
Images
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/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
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- 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
-
- 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/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
-
- 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/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
- G06F9/3869—Implementation aspects, e.g. pipeline latches; pipeline synchronisation and clocking
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3888—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple threads [SIMT] in parallel
- G06F9/38885—Divergence aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/005—General purpose rendering architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2210/00—Indexing scheme for image generation or computer graphics
- G06T2210/52—Parallel processing
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)
- Executing Machine-Instructions (AREA)
Abstract
本说明书公开了一种能够被包括在待由一组执行线程执行的图形处理器着色器程序中的指令,该指令在被执行时将使一组执行通道处于“活动”(例如,SIMD)执行状态,在该状态下,能够使用该组多个执行通道来一起执行活动状态处理操作。然后可以使用处于该活动状态的这些执行通道来一起执行这些处理操作。然后,一旦这些处理操作已完成,这些执行通道就会被允许或使得返回到它们的先前执行状态。
Description
背景技术
本文所述的技术涉及图形处理系统,并且具体地涉及包括一个或多个可编程处理级(“着色器”)的图形处理器。
许多图形处理流水线现在包括一个或多个可编程处理级,通常称为“着色器”。例如,图形处理流水线可包括以下各项中的一者或多者并且通常包括其全部:几何着色器、顶点着色器和片段(像素)着色器。这些着色器为可编程处理级,这些可编程处理级对输入数据值执行着色器程序以生成期望的输出数据集(例如,就片段着色器而言,适当地着色并渲染的片段数据),以用于由其余图形流水线处理并且/或者用于输出。
图形处理流水线的“着色器”可共享可编程处理电路,或者它们可各自被不同的可编程处理单元执行。
因此,图形处理单元(GPU)着色器核心是通过为图形输出中的每个图形“工作”项运行小程序来执行图形处理的处理单元,诸如要生成的渲染目标,例如帧(在这方面,“项”通常是顶点或采样位置(例如,在片段着色器的情况下))。其通常使得能够实现高并行度,其中典型渲染输出(例如,帧)特征在于相当大数量的顶点和片段,其中每个顶点和片段能够被独立地处理。
在图形着色器操作中,每个工作“项”通常将通过执行线程进行处理,该执行线程将执行针对所考虑的图形工作“项”的所考虑的着色器程序的指令。
可以通过将执行线程分组为线程的“组”或“束”来提高着色器程序执行效率(其中每个线程对应于例如顶点着色器的情况下的一个顶点,但也可对应于例如用于光线追踪操作中的光线、正被渲染的取样位置等,这取决于着色器程序的性质),其中一个组的线程以锁步方式运行(例如,一次一个指令(单指令、多线程(SIMT)执行))。通过这种方式,可以在组中的所有线程之间共享指令获取和调度资源。用于此类线程组的其他术语包括“线程束(warp)”和“线程组(wave front)”。为方便起见,本文将使用术语“线程组(threadgroup)”,但除非另外指明,否则这旨在涵盖所有等同的术语和布置。
在其中执行线程可被分组为线程组的系统中,用于响应于着色器程序中的指令执行处理操作的功能单元通常对应地能够操作,以便促进此类线程组布置。通常,功能单元各自布置有多个相应执行通道,使得功能单元能够针对线程组的多个线程并行执行相同的指令。
还可以使用多个处理元件(例如,跨多个执行通道执行的一组多个执行线程)同时对多个数据点执行相同操作(单指令、多数据(SIMD)执行)。在这种情况下,一个指令可以根据其执行定义为单个线程,使得在SIMD状态下执行的该组执行线程可以被认为是单个可编程元件(而不是以锁步方式执行的多个单独的线程)。在SIMD状态下,所有执行通道因此可以是活动的,并且执行相同的指令。
同样,这可以在多个处理元件之间(例如,在多个执行通道之间)共享处理负载方面提供各种效率,特别是当需要针对不同数据点多次执行相同的操作时。
申请人认为,包括这种可编程执行单元的图形处理器仍有改进的余地。
附图说明
图1示出了示例性图形处理系统;
图2示意性地示出了用于由图形处理流水线执行的着色器程序的编译;
图3示意性地示出了根据本文所述技术的实施方案的执行通道的布置;
图4示意性地示出了根据本文所述技术的实施方案的执行通道流水线的布置;
图5示意性地示出了本文所述技术的实施方案中执行通道流水线的布置;
图6示出了根据本文所述技术的实施方案对不同执行通道的处理状态的控制;
图7为示出根据本文所述技术的实施方案的高级操作的流程图;
图8更详细地示出了根据本文所述技术的实施方案的操作;并且
图9为示出根据本文所述技术的实施方案的编译操作的流程图。
具体实施方式
本文所述技术的第一实施方案包括一种操作包括图形处理器的图形处理系统的方法,
该图形处理器包括可编程执行单元,该可编程执行单元能够操作以执行程序来执行图形处理操作,其中该执行单元被配置为多个执行通道,其中一组多个执行线程中的各个执行线程能够通过相应执行通道来执行,
该方法包括:
在待由一组多个执行线程执行的程序中包括激活指令,该激活指令在由该组执行线程中的执行线程执行时将使该组多个执行通道处于活动状态,在该活动状态下,能够使用该多个执行通道一起执行处理操作;以及
在将使该组多个执行通道处于“活动”状态的激活指令之后,在程序中包括一个或多个指令的集合,以使一个或多个处理操作使用该组多个执行通道来一起执行;
该方法还包括:
当该程序正由执行线程执行时,响应于该执行线程执行激活指令:
使一组多个执行通道处于活动状态,在该活动状态下,能够使用该组多个执行通道来一起执行活动状态处理操作;然后
使用该组多个执行通道一起执行一个或多个处理操作。
本文所述技术的第二实施方案包括一种图形处理系统,该图形处理系统包括:
图形处理器,该图形处理器包括可编程执行单元,该可编程执行单元能够操作以执行程序来执行图形处理操作,其中该执行单元被配置为多个执行通道,其中一组多个执行线程中的各个执行线程能够通过相应执行通道来执行,和
处理电路,该处理电路被配置为:
在待由一组多个执行线程执行的程序中包括激活指令,该激活指令在由该组执行线程中的执行线程执行时将使一组多个执行通道处于活动状态,在该活动状态下,能够使用该多个执行通道一起执行处理操作;以及
在将使该组多个执行通道处于“活动”状态的激活指令之后,在程序中包括一个或多个指令的集合,以使一个或多个处理操作使用该组多个执行通道来一起执行;
其中该图形处理器被配置为使得当该程序正由执行线程执行时,响应于该执行线程执行激活指令:
使一组多个执行通道处于“活动”状态,在该活动状态下,能够使用该组多个执行通道来一起执行后续一个或多个处理操作的集合。
本文所述的技术广泛地涉及图形处理系统,该图形处理系统包括图形处理器,该图形处理器包括可编程执行单元,该可编程执行单元能够操作以执行程序来执行图形处理操作,并且其中程序可以由多个执行线程的组一起执行。为了促进这一点,本文所述的技术中的执行单元被配置为多个执行通道,其中被执行以执行程序指令的线程组中的各个执行线程可以被发布到相应执行通道以供执行。因此,执行单元可以并行执行一组线程,该组中的各个线程由相应执行通道来执行。
更具体地,本文所述的技术涉及控制执行单元的不同执行通道的处理状态。
特别地,本文所述的技术提供了一种指令,该指令在被执行时将使多个执行通道的整个组处于“活动”状态,例如,使得多个执行通道的组可以一起执行对应组执行线程(例如,整个“线程束”)。
当一组多个执行通道处于“活动”状态时,该组多个执行通道因此能够被作为整体来处理和使用,例如作为单个处理元件,例如在一个实施方案中,在单指令、多数据(SIMD)执行状态下,其中所有执行通道同时执行执行线程,这些执行线程执行相同的处理操作集合,但是对于不同的数据点,例如,利用执行与相应数据点相关联的执行线程的各个执行通道。在“激活”状态下,在一个实施方案中,执行通道的组中的执行通道将因此全部执行线程以执行相同的处理操作集合。
因此,在本文描述的一些实施方案中,“激活”指令将易于解释,也称为“enter_SIMD_state”指令。
在实施方案中,激活(enter_SIMD_state)指令在被执行时将使执行单元的所有执行通道一起处于“活动”状态,例如,使得可以使用所有执行通道一起执行后续的处理操作序列。
因此,本文将描述各种实施方案,其中激活(enter_SIMD_state)指令在被执行时,使执行单元的所有执行通道处于活动状态,例如,并且在一个实施方案中,使得执行通道可以共同执行整个执行线程的组(例如,整个“线程束”),例如以执行相同的处理操作。然而,激活(enter_SIMD_state)指令也可能使少于所有执行通道处于“活动”状态。例如,当执行通道的数量大于将用于一起执行处理操作的单个执行线程组(线程束)中的执行线程的数量时,这可能是适当的。
因此,一般而言,激活指令在被执行时可以使执行单元的执行通道(包括执行线程的执行通道,该线程执行激活指令)的至少一个子集处于活动状态。
因此,对处于“活动”状态的一组执行通道的任何引用都应相应地理解为意味着所有执行通道或执行通道的适当子集处于活动状态。
激活(enter_SIMD_state)指令因此可以被包括在待在处理操作的集合之前的适当位置处执行的着色器程序中,该处理操作的集合待使用作为整体的一组执行通道来执行(例如,并且在一个实施方案中,在SIMD执行状态下)。以此方式,一旦执行程序的线程组中的一个或多个执行线程执行激活(enter_SIMD_state)指令,使得执行单元的一组多个(例如所有)执行通道处于“活动”状态,然后可以使用处于活动状态的该组多个执行通道一起执行后续一个或多个处理操作的集合。
在已执行激活(enter_SIMD_state)指令之后,由处于活动状态的多个执行通道的组执行的执行线程组因此可以根据需要开始执行待使用多个执行线程一起执行的一个或多个处理操作的任意集合,因为此时可以(并且是)确保多个执行通道的组中的所有执行通道将处于活动状态。
一旦待使用多个执行通道的组(例如,在SIMD执行状态下)一起执行的处理操作的集合已完成,则在一个实施方案中,正由执行通道执行的执行线程允许(或使)根据需要返回到它们的前一执行状态,例如,如下文将进一步解释的。
因此,在实施方案中,该方法还包括允许(或使)执行通道返回到它们的先前执行状态,即它们在执行激活(enter_SIMD_state)指令之前所处的状态。
因此,在本文所述的技术中使用激活(enter_SIMD_state)指令来提供有效的方式以确保一组执行通道全部处于相同的“活动”状态,使得随后可以使用整组执行通道一起执行(例如,在SIMD执行状态下)后续处理操作的集合。
在这方面,本发明人已认识到,可能存在各种情况,其中,可能期望(或需要)整组多个执行通道一起处于活动状态,使得相同的单个处理操作的集合可以跨整组执行通道(例如,在SIMD执行状态下)执行,但是其中,在需要执行处理操作的集合的点处,可能不是所有执行通道都处于活动状态。
例如,在某些情况下,当已知所有执行通道都将处于活动状态并且能够操作以执行处理操作的集合(例如,在SIMD执行状态下)时,可以更有效地对同一处理操作的集合进行编码。其中这可能是有益的另一示例为当执行其中将跨图形处理器的可编程执行单元的多个执行通道加载数据的处理操作的集合时,例如加载到经分配用于跨这些执行通道执行的一组执行线程的共享寄存器堆的集合中。各种其他示例也是可能的。
本发明人还认识到,在任何特定时刻,由一组多个执行通道执行的给定线程组的不同执行线程可能具有各种不同的执行状态。
例如,至少一些执行通道可能已经在执行给定线程组中的线程以在处理操作的集合将被执行时执行该处理操作的集合,使得那些通道已经主动地执行程序的需要执行处理操作的部分。对于将使用该组多个执行通道一起执行的处理操作的集合,这些线程可以并且因此应保持在它们的当前“活动”状态下(例如,在SIMD执行状态下)。同样,应保留与这些线程相关联的任何数据,因为这对于处理操作的集合是有效的。
然而,在将执行处理操作的集合时,可能存在处于非活动状态的其他执行通道来执行该处理操作的集合。
因此,本文所述的技术认识到需要并提供一种机制以允许对于需要使用一组多个执行通道一起执行一个或多个处理操作的程序当前处于非活动状态的任何执行通道(例如,在SIMD执行状态下)被置入期望的公共、活动状态以执行处理操作。
此外,本文所述的技术认识到,应当(并且在一个实施方案中确实)采取不同的动作,这取决于执行通道在该操作发生的点处的状态,例如取决于执行通道是否正在执行执行线程。
例如,执行通道在特定处理实例中可能不处于活动状态的原因有多种。
例如,给定组执行线程中的一些执行线程可能已在此时终止/退出的情况(例如,并且尤其是在片段着色器中)。
又如,也可能是没有为特定执行通道生成执行线程的情况,例如因为没有足够的处理工作(例如,来自前一处理级)来生成执行线程,或者因为与执行线程相关的数据点由于某些前向剔除操作(例如片段着色器中的早期深度测试)而被剔除。
在此类情况下,执行通道因此可以处于非活动状态,因为该执行通道当前不执行任何执行线程来执行任何处理工作。
为了使执行通道进入期望的活动状态,因此应当生成新执行线程,以用于执行将使用该组通道(例如,在SIMD状态下)一起执行的处理操作的集合,并将其发布到执行通道以供执行。
因此,在实施方案中,响应于执行激活指令:该方法包括:对于在执行该激活指令的点处为非活动状态的任何执行通道:生成用于执行一个或多个处理操作的集合的新执行线程。
然后可以将新生成的执行线程包括到执行线程组中,该执行线程组将使用该组多个执行通道来适当地执行,使得可以使用活动组多个执行通道中的执行线程一起执行后续处理操作的集合。
在这种情况下,例如,根据需要,可以针对将使用作为整体的该组多个执行通道针对执行线程组执行的后续处理操作的集合,适当地初始化新生成的执行线程,并且在一个实施方案中,通过将默认(例如,零)值的适当集合加载到用于执行线程的相关联寄存器堆中,使得执行线程然后是活动的并且可用于作为整个执行线程组的一部分的处理操作的集合。
也可能是这样的情况,一些执行通道正在执行当前正在执行处理工作但针对程序的不同部分的线程,例如,作为已导致执行线程的程序执行发散的条件操作(例如,发散)的结果。同样,在这种情况下,执行通道与执行激活指令(并因此触发本文所述的技术的操作)的执行线程不处于期望的(相同)活动状态,因为它们正忙于其他处理工作,例如针对程序的另一部分。
在这种情况下,为了使(发散)执行线程进入期望的活动状态,因此应当将执行线程移动到当前程序(即触发激活指令并且需要执行处理操作的程序)。
因此,在实施方案中,响应于执行激活指令:该方法包括:对于执行从需要执行该一个或多个处理操作的程序发散的执行线程的任何执行通道:使发散执行线程跳转到需要执行该一个或多个处理操作的程序的部分。
由于任何此类发散线程都在执行程序的不同部分,因此与这些线程相关联的任何数据可能(并且通常将)对于程序的需要处理操作的集合的部分无效。
因此,不应使用针对那些通道存储的任何相关联数据,例如,因为这可能导致错误(或至少不必要的)处理。因此需要适当地处理。同样,因此在一个实施方案中,加载适当的默认(例如,零)值,例如以适当地初始化线程以用于在活动(例如,SIMD)状态下执行的处理操作。
因此,对于尚未在执行激活(enter_SIMD_state)指令的点处执行程序并且因此需要置入活动状态的任何执行通道,在一个实施方案中,为这些线程加载一组默认(例如,零)值(例如,并且在一个实施方案中,加载到相关联寄存器堆中)。
例如,为了给出具体示例,在将由一组多个执行线程执行的光线跟踪遍历操作的上下文中(因为这可以例如允许更有效地管理光线跟踪操作),并且其中每个执行线程可以表示将对其执行相同遍历操作的特定光线,对于活动的(即包含活动/有效光线的)任何执行线程,可以使光线根据需要执行遍历操作。然而,先前处于非活动状态的任何线程都可能不包含任何真实或有效的光线。
因此,为了避免与可能以其他方式触发将执行的不期望的遍历操作的那些线程相关联的任何数据,可以为这些线程加载长度为零的光线,以便这些线程的光线跟踪遍历立即完成(因为长度为零的光线无法与正在渲染的场景中的任何几何体相交)。
对于任何新生成的线程,这些线程将不会与任何处理操作的任何有效数据相关联(因为它们响应于激活(enter_SIMD_state)指令而生成)。
然而,正在执行程序不同部分的线程将与其相应程序部分的有效数据相关联。因此,对于任何发散线程(例如,正在执行程序的不同部分),例如在寄存器堆中的任何相关联数据都应当(并且在一个实施方案中确实)被适当地维护和存储,例如使得数据可以被恢复。以此方式,一旦一起执行(例如,在SIMD状态下)的处理操作的集合已完成,就可以将执行线程恢复到其前一处理状态,例如以继续执行针对其相应程序部分的指令。
另一方面,已经主动执行程序的执行线程(例如包括触发本文所述技术的操作的执行线程)可以根据需要继续执行程序。例如,这些线程可能已经与用于处理操作的有效数据相关联,并且因此数据应当例如在那些执行线程的相关联寄存器堆中适当地保留,例如,使得可以使用该数据相应地执行使用该组通道(例如,在SIMD状态下)执行的后续处理操作的集合。
因此,已经执行程序的任何线程可以(并且在一个实施方案中确实)保留,并且用于开始执行指令以执行后续处理操作的集合。
因此,在实施方案中,该方法包括:对于已经执行程序的需要执行一个或多个处理操作的集合的部分的任何执行通道:保留与执行线程相关联的任何数据并使执行线程开始执行该一个或多个处理操作。
在所有此类情况下,无论执行通道中的执行线程在执行激活(enter_SIMD_state)指令的点处的精确状态如何,本文所述的技术都允许将一组多个执行通道一起置入相同的“活动”状态,使得后续处理操作的集合然后可使用作为整体的该组多个执行通道来一起执行。
也就是说,无论执行通道的前一状态如何,根据本文所述的技术,一组执行通道都被置入相同的“活动”状态,使得它们准备好且可用,以用于处理后续处理操作的集合的数据,这些处理操作将使用该组中的所有执行通道被同时执行(例如,在SIMD状态下)。
这样做的效果是,所有执行通道都可用于一起处理数据并处于活动状态,而它们的前一状态不会干扰期望的处理操作。通过跨该组多个执行通道将作为整体的执行线程组保持处于活动状态,这然后可以允许,例如,根据需要,将作为整体的该组执行通道的共享资源(例如,共享寄存器堆的集合)用于处理操作。
如上所述,这在本文所述的技术中通过提供激活(enter_SIMD_state)指令来完成,该激活指令可以被包括到待由执行单元执行的着色器程序中,并且当由执行线程执行时使整组多个执行通道变为活动状态。以此方式,可以使该组执行通道中的执行通道作为一组从线程执行的任意状态转变为“活动”状态,使得然后能够使用该组执行通道作为整体来执行期望的处理操作。
在一个实施方案中,此激活操作以这样的方式执行:一旦待使用该组执行通道一起执行的处理操作的集合已完成,这些执行通道就能够返回到它们的前一执行状态。因此,在实施方案中,在已使用该组多个执行通道一起执行该一个或多个处理操作之后,就允许执行通道(并且在实施方案中使得)返回到它们的前一执行状态。
在这方面,本发明人还认识到,当执行此激活(enter_SIMD_state)指令时,由被使得变为活动状态的该组多个执行通道执行的执行线程可能需要根据它们在执行指令之前处于什么状态而被不同地处理,例如,并且特别地,根据执行通道在执行激活(enter_SIMD_state)指令的点处是活动的/非活动的而被不同地处理。
例如,如上所述,响应于被执行的激活(enter_SIMD_state)指令,在一个实施方案中,已经针对程序处于活动状态的任何执行通道保持处于活动状态,而非活动的任何执行通道被使得变为活动状态。
在激活(enter_SIMD_state)指令将已经与有用的处理工作相关联的点处已经存在的任何执行线程,并且因此在一个实施方案中被恢复,例如以继续它们的前一程序执行。即,在一个实施方案中,不是例如丢弃任何现有线程并生成用于执行处理操作的新线程组,而是适当地挂起任何现有线程,例如使得它们的程序执行随后可以被恢复,例如通过将线程返回到它们的前一执行状态。
可以根据需要使用任何适当的暂停/恢复机制。在实施方案中,为了便于使线程返回到它们的前一执行状态,因此在一个实施方案中确定执行激活(enter_SIMD_state)指令的点处的执行通道的状态,并且在一个实施方案中,在处理操作中存储并携带该状态的指示,以允许一旦已经完成待使用该组多个执行通道一起执行的一个或多个处理操作,就使执行通道返回到它们的前一执行状态。
因此,在实施方案中,响应于执行激活指令:该方法包括(并且执行单元被配置用于):对于该组多个执行线程中被使得处于活动状态的每个执行通道:确定在执行该激活指令之前的点处该执行通道的执行状态;以及存储先前执行状态的指示,使得一旦使用该组多个执行线程一起执行的该一个或多个处理操作的集合已完成,执行通道就能够返回到它们的先前执行。
对应地,当使用该组多个执行通道的一个或多个处理操作的集合已完成时,然后可以读取前一执行状态的指示并将其用于将执行通道返回到它们的前一执行状态。
因此,在一个实施方案中,作为根据本文所述技术的操作的一部分,跟踪执行通道的先前状态(在使它们处于活动状态之前),例如,使得一旦待使用处于活动状态的该组执行通道一起执行的处理操作已完成,执行线程然后就可以(并且在一个实施方案中确实)适当地返回到它们的先前执行状态,例如,如下文将进一步解释的。特别地,在一个实施方案中,在执行激活(enter_SIMD_state)指令之前跟踪通道是活动的/非活动的。在一个实施方案中,为每个执行线程提供对此的指示。
此指示可以根据需要采用任何适当的形式,但是在一些实施方案中以“活动标志”的形式提供,该“活动标记”可以例如(并且在一个实施方案中确实)作为适当的一个或多个位值被存储在执行线程的寄存器中。例如,一个或多个(并且在一个实施方案中单个)位值可用于指示执行线程在进入活动(SIMD)状态时是否处于活动状态。另一个或多个位值可用于指示例如线程是否处于非活动状态但尚未终止。然而,可以根据需要使用任何适当的指示方案来指示关于执行线程的前一状态的任何相关和适当的信息,该信息可用于将这些执行线程返回到它们的前一状态。
因此,在实施方案中,响应于执行激活(enter_SIMD_state)指令的执行线程,因此使图形处理器存储被使得处于活动状态的该组多个执行通道的每个执行线程的先前活动/非活动状态的指示。在一个实施方案中,此指示被写入每个执行线程的相应寄存器,以便可以一直携带活动/非活动状态信息,直到该处理操作的集合已完成。然后可以使用此信息来允许执行线程随后返回到它们的前一执行状态。因此,一旦使用作为整体的执行线程组(在SIMD状态下)执行的处理操作的集合已完成,在一个实施方案中这些线程就允许(或使得)返回到它们的前一状态。因此,可以相应地检查活动标志以确定执行线程的前一状态,并且由此确定应如何处理执行线程。
例如,响应于激活(enter_SIMD_state)指令而新生成的任何线程,即因为执行通道在执行激活(enter_SIMD_state)指令的点处不处于活动状态,所以一旦待使用该组多个执行通道执行的一个或多个处理操作的集合已完成,就可以相应地终止。
因此,对于针对在执行激活(enter_SIMD_state)指令的点处为非活动状态的通道生成的任何线程,在一个实施方案中,在处理操作中携带通道先前处于非活动状态的指示(例如,通过设置适当的标志来指示这一点),使得当处理操作的集合已完成时,可以适当地退出执行线程,即,执行通道返回到它们的前一非活动状态。
另一方面,任何主动执行程序的一部分的线程(无论是需要执行一个或多个处理操作的集合的程序,还是该程序的不同部分)都应当(并且在一个实施方案中确实)返回到它们的先前执行状态,例如,以继续它们的程序执行。
因此,对于先前活动的任何线程,无论是对于由作为整体的线程组正在执行的程序,还是对于该程序的不同部分,都会携带关于这一点的指示(例如,通过设置适当的标志来指示这一点),以允许一旦由作为整体的组(例如在SIMD执行状态下)执行的处理操作的集合已完成,这些执行线程就返回到它们的前一活动执行状态。
为了促进此操作,在一个实施方案中,还为被使得处于活动状态的每个执行线程存储在激活(enter_SIMD_state)指令被执行时执行线程在其相应程序中的当前位置的指示,例如以程序的程序计数器的形式。
以此方式,对于在执行激活(enter_SIMD_state)指令的点正在执行程序的一部分的任何线程,可以存储这些线程的程序的当前状态(例如,程序计数器),然后在待由作为整体的执行线程组执行的处理操作的集合已完成之后适当地恢复,然后(一旦SIMD状态已完成,就从其前一位置)相应地继续程序的执行。
例如,响应于激活指令被执行,对于将被置入活动状态的任何发散线程,在一个实施方案中,存储由该发散线程执行的程序的相应部分中的当前位置(程序计数器),使得当线程要返回到其先前执行状态时,程序的执行可以相应地从前一位置继续(例如,而不是必须重新开始程序执行)。
因此,在实施方案中,响应于执行激活指令:该方法包括:对于执行从需要执行该一个或多个处理操作的程序发散的执行线程的任何执行通道:存储由发散线程执行的程序的部分的当前位置的指示,使得一旦已执行该一个或多个处理操作,就能够继续该程序执行;然后使发散执行线程跳转到需要执行该一个或多个处理操作的程序的部分。
如上所述,在一个实施方案中,还适当地维护和存储线程的、它们正在执行的程序部分的任何相关联数据,例如,使得它不干扰在活动状态下执行的处理操作。在一个实施方案中,将任何此类数据写入到用于执行线程的相关联寄存器堆集合中(例如,并且在一个实施方案中,在寄存器堆的与用于激活(enter_SIMD_state)指令的寄存器堆的部分不重叠的部分中),但是如果需要,这也可以被写出到例如存储器。
一旦处于活动状态,在一个实施方案中,就使发散并且被置入活动状态的线程跳转到用于执行将使用作为整体的该组多个执行通道来执行的一个或多个处理操作的指令集合。
例如,在一个实施方案中,用于执行该一个或多个处理操作的指令集合被包括在子例程中,使得使执行线程开始执行该一个或多个处理操作包括使执行线程跳转到子例程的开始。因此,当执行激活指令时,在一个实施方案中,在已经使执行线程处于活动状态(根据需要为线程写入/读出任何数据)之后,使所有线程跳转到用于该处理操作的集合的新程序位置,并且开始执行该处理操作的集合。
因此,在实施方案中,响应于执行激活指令:该方法包括:使该组执行通道中被使得处于活动状态的所有执行通道跳转到包括一个或多个指令的集合的子例程,以执行待使用该组多个执行线程一起执行的该一个或多个处理操作。
在一个实施方案中,子例程的位置的指示被包括在激活指令本身中,例如作为与程序计数器的偏移,其指示一旦执行线程是活动的,它们就应当跳转到的程序中的位置。因此,当执行激活指令时,执行通道可以解析指令以读取该指示来识别子例程的位置并且相应地跳转到该位置。因此,可以使活动状态中的所有执行通道跳转到子例程的开始并且执行其中的指令来执行处理操作的集合。
在这种情况下,当前位置(程序计数器)在一个实施方案中也针对触发本文所述技术的操作的程序已经处于活动状态的任何线程被写出。同样,这意味着当待使用作为整体的该组多个执行通道执行的处理操作已完成时,程序执行就可以适当地继续,例如在已经执行一个或多个处理操作(子例程)之后。(对于已经执行程序的线程,在实施方案中可以保留数据,因为它对于处理操作可能是有效的,但是如果需要,例如根据所考虑的程序,也可以存储该数据。)
因此,当执行激活(enter_SIMD_state)指令时,在一个实施方案中,存储执行线程的当前状态,例如,在一个实施方案中,允许执行线程恢复它们的当前操作,例如程序执行。在一个实施方案中,这是针对在执行激活(enter_SIMD_state)指令时存在的所有执行线程来完成的,即包括对于需要执行该处理操作的集合的程序而言处于活动状态的那些执行线程,以及可能正在执行程序的不同部分(例如,当它们已经发散时)的那些执行线程。
然而,其他布置也是可能的。例如,用于执行该一个或多个处理操作的指令集合可以例如在激活(enter_SIMD_state)指令之后被直接包括在程序中,例如作为程序中的下一指令。在这种情况下,已经主动执行程序的任何线程(即,至少执行激活指令的线程)都可以简单地继续按顺序执行程序(无需跳转或分支),在这种情况下,不需要对已经处于活动状态的线程执行任何操作(除了存储它们已经处于活动状态的指示)。
因此,激活(enter_SIMD_state)指令使该组多个执行通道中的任何非活动通道都变为活动通道,使得可以使用作为整体的该组多个执行通道来执行对应组执行线程。然后,在知道所有通道在执行激活(enter_SIMD_state)指令时都处于活动状态的情况下,可以安全地执行一个或多个处理操作的集合。
一旦该组执行通道处于活动状态,就可以相应地使用在执行通道中执行的相应组执行线程来执行处理操作的集合。如上所述,在一个实施方案中,处理操作的集合由处于SIMD执行状态的该组执行线程执行。也就是说,在一个实施方案中,所有执行线程都被使得执行相同的处理操作,但针对不同的输入数据点。
使用作为整体的执行线程组来执行的处理操作的集合可根据需要包括任何适当的处理操作。例如,虽然所有执行线程在处理操作的集合开始时处于活动状态可能是有益的(本文所述的技术实现了这一点),但在处理操作的集合正被执行时,组中的所有执行线程可能不必都保持活动状态。因此,由作为整体的执行线程组执行的处理操作的集合可以包括例如一个或多个条件操作,使得线程可以发散/分支,并且然后例如根据需要重新聚合。
如上所述,在活动状态下执行的一个或多个处理操作的集合已完成之后,执行线程则被允许返回到它们的前一状态。
这些执行线程能够以任何合适且期望的方式返回到它们的前一状态,例如取决于正被执行的程序。
在实施方案中,提供了另外的“去激活”(或“exit_SIMD_state”)指令,该指令使该组执行线程中的所有执行线程同时返回到它们的前一状态。
在这种情况下,执行线程组作为整体退出“活动”状态。这意味着如果执行线程在它们的活动(SIMD)状态操作期间已经发散,则在一个实施方案中,它们应该在执行另外的去激活(exit_SIMD_state)指令的点处重新聚合。
因此,在实施方案中,该方法还包括(并且处理电路被进一步布置成包括)在程序中包括另外的去激活指令,该去激活指令在被执行时将使活动状态下的所有执行通道返回到它们在激活指令被执行之前所处的处理状态。也就是说,在实施方案中,所有执行线程都被使得同时返回到它们的前一执行状态。因此,在一个实施方案中,去激活指令在激活指令之后被包括在程序中。响应于处于活动状态的执行通道执行去激活指令,该组多个执行通道中所有执行通道因此被使得返回到它们的先前处理状态。
使用此指令使正在使用一组多个执行通道一起执行的整组执行线程(例如在SIMD执行状态下)退出此类活动(SIMD)执行状态,例如在一个实施方案中允许(或使得)执行通道返回到前一执行状态,这本身可能是新颖和有利的。
因此,本文所述的技术的另一实施方案包括一种操作图形处理器的方法,该图形处理器包括可编程执行单元,该可编程执行单元能够操作以执行程序来执行图形处理操作,其中该执行单元被配置为多个执行通道,其中一组多个执行线程中的各个执行线程能够通过相应执行通道来执行,
该方法包括:
当由一组多个执行通道执行的一组执行线程正在执行其中该组多个执行通道处于活动状态的程序时,在该活动状态下,正在使用该组多个执行通道一起执行一个或多个处理操作:
响应于处于该活动状态的执行线程执行去激活指令:
使该执行线程退出活动状态,在该活动状态下,能够使用该多个执行通道一起执行处理操作。
本文所述的技术的另外实施方案包括一种图形处理器,该图形处理器包括可编程执行单元,该可编程执行单元能够操作以执行程序来执行图形处理操作,其中该执行单元被配置为多个执行通道,其中一组多个执行线程中的各个执行线程能够通过相应执行通道来执行,
其中该执行单元被配置为使得:
当由一组多个执行通道执行的一组执行线程正在执行其中所述组多个执行通道处于活动状态的程序时,在所述活动状态下,正在使用所述组多个执行通道一起执行一个或多个处理操作:
响应于处于该活动状态的执行线程执行该程序中的去激活指令:
使在执行通道中执行的执行线程退出活动状态,在该活动状态下,能够使用该多个执行通道一起执行处理操作。
这些实施方案还扩展到一种操作图形处理系统(以及对应于图形处理系统的操作)的方法,该图形处理系统包括图形处理器,其中该图形处理器包括可编程执行单元,该可编程执行单元能够操作以执行程序来执行图形处理操作,其中该执行单元被配置为多个执行通道,其中一组多个执行线程中的各个执行线程能够通过相应执行通道来执行;
该方法包括:
在待由一组多个执行线程执行的程序中,其中该程序包括一个或多个指令的集合,以使一个或多个处理操作使用一组多个执行通道来一起执行,在使该一个或多个处理操作使用一组多个执行通道一起执行的一个或多个指令集合之后,还包括一种去激活指令,该指令当由该组多个执行通道中的执行线程执行时,将使这些执行线程退出活动状态,在该活动状态下,可以使用该多个执行通道一起执行这些处理操作;
该方法还包括:
当由一组多个执行通道执行的一组执行线程正在执行其中该组多个执行通道处于活动状态的程序时,在该活动状态下,正在使用该组多个执行通道一起执行一个或多个处理操作:响应于处于活动状态的执行线程执行去激活指令:
使该执行线程退出活动状态,在该活动状态下,能够使用该多个执行通道一起执行处理操作。
如本领域的技术人员将理解的,本文所述技术的与去激活(exit_SIMD_state)指令相关的这些附加实施方案可视情况包括本文所述技术的任何一个或多个或所有特征,并且在一个实施方案中,确实包括本文所述技术的任何一个或多个或所有特征。
例如,并且在一个实施方案中,当执行去激活(exit_SIMD_state)指令时,该组多个执行通道组中的被使得退出活动(例如,SIMD)状态的执行线程然后返回到它们的前一执行状态,如上所述。
因此,当执行去激活(exit_SIMD_state)指令时,可以适当地重新存储在执行激活(enter_SIMD_state)指令时为执行线程存储的任何处理状态(信息)或其他数据,例如以允许执行线程返回到它们的前一执行状态。例如,可以恢复执行线程在其相应程序(程序计数器)中达到的位置,以允许执行线程从此点继续其程序执行。或者,如果执行通道先前处于非活动状态,使得没有前一执行线程,就可以相应地终止执行线程。
在实施方案中,去激活(exit_SIMD_state)指令始终与激活(enter_SIMD_state)指令成对地被包括在着色器程序中。也就是说,在一些实施方案中,激活(enter_SIMD_state)指令最终总是后跟对应的去激活(exit_SIMD_state)指令,例如在处理操作的集合已完成之后。
然而,情况并非如此,还可以设想,例如,可以重复地执行激活(enter_SIMD_state)指令。
同样,也可以使用其他布置来使执行线程从活动状态退出,而不包括显式指令以使所有执行线程一起返回到它们的前一状态。例如,在实施方案中,执行线程可以单独地退出。
各种其他布置也是可能的。
因此,所有这一切的作用是提供了一种使用单个指令激活一组执行线程的有效方法,该指令在被执行时将整组执行线程置入相同的活动状态。
因此,与其他方法相比,本文所述技术可提供各种改进。
如上文所述,通过将适当的指令包括到着色器程序中来触发本文所述技术的操作。此类指令可包括在着色器程序中,以便由可编程执行单元以任何合适且期望的方式以及由总体数据(图形)处理系统的任何合适且期望的元件执行,例如根据着色器程序的生成方式。
在一个实施方案中,该射线追踪渲染着色器程序由所考虑的图形处理系统的图形处理器的编译器(着色器编译器)生成(并且因此在一个实施方案中,生成着色程序的处理电路包括适当的编译器电路)。在一个实施方案中,该编译器在图形处理系统的适当可编程处理电路上执行。
编译过程(编译器)可以任何合适且期望的方式生成着色器程序,例如,并且在一个实施方案中,使用用于该目的的任何合适且期望的编译器技术。
因此,在实施方案中,激活(enter_SIMD_state)指令被包括在待由图形处理器通过编译器响应于待使用一组多个执行通道(例如在SIMD执行状态下)一起执行处理操作的集合的适当指示而执行的着色器程序中。
因此,例如,并且在一个实施方案中,应用程序将能够包括对待在SIMD执行状态下被执行的一个或多个处理操作的集合的需要的明确指示,其中编译器然后在本文所述的技术中响应于此而在编译着色器程序中包括适当激活(enter_SIMD_state)指令(并且在一个实施方案中,还包括对应的去激活(exit_SIMD_state)指令)。编译器还可以包括其自身的适当激活(enter_SIMD_state)指令,例如,在编译器能够评估正被编译的着色器程序以识别何时以及何处包括此类指令的情况下,即使在不存在对其的明确指示的情况下也是如此。
在一个实施方案中,该编译器分析例如由主机处理器上需要图形处理的应用提供的着色器程序代码,并且在着色器程序中的适当点处(例如,通过将指令插入(编译)着色器程序中)包括适当激活(enter_SIMD_state)指令。
本文所述的技术还扩展到并且包括编译器的此类操作。
因此,本文所述的技术的另外实施方案包括一种编译待由图形处理器的可编程执行单元执行的着色器程序的方法,该图形处理器包括可编程执行单元,该可编程执行单元能够操作以执行程序来执行图形处理操作,其中该执行单元被配置为多个执行通道,其中一组多个执行线程中的各个执行线程能够通过相应执行通道来执行;
该方法包括:
在待由一组多个执行线程执行的程序中包括激活指令,该激活指令在由该组执行线程中的执行线程执行时将使该组多个执行通道处于活动状态,在该活动状态下,能够使用该多个执行通道一起执行处理操作;以及
在将使该组多个执行线程处于“活动”状态的激活指令之后,在该程序中包括一个或多个指令的集合,以使一个或多个处理操作使用该组多个执行线程来一起执行。
本文所述的技术的另外实施方案包括用于编译待由图形处理器的可编程执行单元执行的着色器程序的编译器,该图形处理器包括可编程执行单元,该可编程执行单元能够操作以执行程序来执行图形处理操作,其中该执行单元被配置为多个执行通道,其中一组多个执行线程中的各个执行线程能够通过相应执行通道来执行;
该编译器包括处理电路,该处理电路被配置为:
在待由一组多个执行线程执行的程序中包括激活指令,该激活指令在由该组执行线程中的执行线程执行时将使一组多个执行通道处于活动状态,在该活动状态下,能够使用该多个执行通道一起执行处理操作;以及
在将使该组多个执行通道处于“活动”状态的激活指令之后,在程序中包括一个或多个指令的集合,以使一个或多个处理操作使用该组多个执行通道来一起执行。
该编译器在一个实施方案中还能够操作以包括去激活(exit_SIMD_state)指令,其中使用这些指令。
因此,还提供了一种编译着色器程序的方法(和用于编译着色器程序的对应编译器),该着色器程序待由图形处理器的可编程执行单元执行,该图形处理器包括可编程执行单元,该可编程执行单元能够操作以执行程序来执行图形处理操作,其中该执行单元被配置为多个执行通道,其中一组多个执行线程中的各个执行线程能够通过相应执行通道来执行;
该方法包括:
在待由一组多个执行线程执行的程序中,其中该程序包括一个或多个指令的集合,以使一个或多个处理操作使用一组多个执行通道来一起执行,在使该一个或多个处理操作使用一组多个执行通道一起执行的一个或多个指令集合之后,还包括一种去激活指令,该指令当由该组多个执行通道中的执行线程执行时,将使这些执行线程退出活动状态,在该活动状态下,可以使用该多个执行通道一起执行这些处理操作。
此步骤可以作为编译上述着色器程序的方法的一部分来执行,例如与包括激活指令的步骤一起执行。然而,这本身可能是新颖和有利的,并且本文所述的技术因此也扩展到这种方法本身。
编译器(编译器处理电路)在一个实施方案中是图形处理系统的中央处理单元(CPU)(诸如主机处理器)的一部分,并且在一个实施方案中在该CPU上执行,并且在一个实施方案中是在该CPU上执行的图形处理器的驱动器(例如主机处理器)的一部分。
在这种情况下,编译器和编译代码将在整个图形处理系统内的单独处理器上运行。然而,如果需要,其他布置将是可能的,诸如编译器在与编译代码相同的处理器上运行。
编译过程(编译器)可以任何合适且期望的方式生成着色器程序,例如,并且在一个实施方案中,使用用于该目的的任何合适且期望的编译器技术。
因此,在一个实施方案中,由编译器生成着色器程序,并且该编译器被布置成在该着色器程序内包括在本文所述的技术中使用的指令。当然,其他布置将是可能的。
然后可以将所生成的着色器程序发布到图形处理器的可编程执行单元以供执行。
本文所述的技术还扩展到图形处理器本身在执行着色器程序时的操作。
根据本文所述的技术的另一实施方案,提供了一种操作图形处理器的方法,该图形处理器包括可编程执行单元,该可编程执行单元能够操作以执行图形处理操作,其中该执行单元被配置为多个执行通道,其中一组多个执行线程中的各个执行线程能够通过相应执行通道来执行;
该方法包括:
当执行一个或多个处理操作的集合的程序正由执行线程执行时,响应于该执行线程执行程序中的激活指令:
使一组多个执行通道处于活动状态,在该活动状态下,能够使用该组多个执行通道来一起执行活动状态处理操作;然后
使用该组多个执行通道一起执行一个或多个处理操作的集合。
本文所述的技术的另外实施方案包括一种图形处理器,该图形处理器包括可编程执行单元,该可编程执行单元能够操作以执行程序来执行图形处理操作,其中该执行单元被配置为多个执行通道,其中一组多个执行线程中的各个执行线程能够通过相应执行通道来执行,
其中该执行单元被配置为使得:
当执行一个或多个处理操作的集合的程序正由执行线程执行时,响应于该执行线程执行程序中的激活指令:
使一组多个执行通道处于“活动”状态,使得该执行单元然后能够使用该组多个执行通道一起执行该一个或多个处理操作的集合。
因此,如上所述,当程序正由执行线程(或一组执行线程)执行,并且(该组执行线程中的)执行线程执行激活指令时,一组多个通道随后被使得一起处于“活动”状态,使得这些通道作为整体可用以执行后续一个或多个处理操作的集合。
如本领域的技术人员将理解的,本文所述技术的与编译器和/或图形处理器的操作相关的这些附加实施方案可视情况包括本文所述技术的任何一个或多个或所有特征,并且在一个实施方案中,确实包括本文所述技术的任何一个或多个或所有特征。
例如,在实施方案中,该方法还包括:在使用该组多个执行通道一起执行一个或多个处理操作的集合之后,响应于执行线程执行去激活(exit_simd_state)指令:使这些执行线程退出活动状态,在该活动状态下,可以使用该多个执行通道一起执行这些处理操作,例如,并且在一个实施方案中使得这些执行线程返回到它们的前一执行状态。
图形处理器可以是包括能够执行程序指令的可编程执行单元的任何合适且期望的图形处理器。
图形处理器的可编程执行单元可以是能够操作以执行着色器程序的任何合适且期望的可编程执行单元。
图形处理器可以包括单个可编程执行单元,或者可以具有多个执行单元。在存在多个执行单元的情况下,每个执行单元能够(并且在一个实施方案中确实)以本文所述的技术的方式操作。
在存在多个执行单元的情况下,每个执行单元可以作为单独的电路提供给数据处理器的其他执行单元,或者执行单元可以共享其电路(电路元件)中的一些或全部。
该(以及每个)执行单元应当(并且在一个实施方案中确实)包括用于执行执行单元所需要的操作的适当电路(处理电路/逻辑)。
因此,该(每个)执行单元将例如(并且在一个实施方案中确实)包括能够操作以针对由执行线程执行的指令执行数据处理操作的至少一个功能单元(电路)的集合。执行单元可以仅包括单个功能单元,或者可以包括多个功能单元,这取决于执行单元将执行的操作。
该一个或多个功能单元可包括任何期望且合适的一个或多个功能单元,该一个或多个功能单元可操作为响应于程序指令并且根据这些程序指令而执行数据处理操作。因此,在一个实施方案中,该一个或多个功能单元包括以下项中的一项或多项或全部:算术单元(算术逻辑单元)(加法、减法、乘法、除法等)、位操作单元(倒置、交换、移位等)、逻辑操作单元(AND、OR、NAND、NOR、NOT、XOR等)、加载型单元(诸如就图形处理器而言的变化、纹理化或加载单元)、存储型单元(诸如混合或存储单元)等。
在一个实施方案中,图形处理器和可编程执行单元能够操作以为多个执行线程的组(“线程束”)一起执行着色器程序,例如,在一个实施方案中,在单指令、多数据(SIMD)执行状态下,并且一起被置入活动状态的该组一个或多个执行线程包括此类线程组(线程束)。然而,原则上其他布置也是可能的。例如,该多个执行通道可以在例如单指令、多线程(SIMT)状态下执行线程,其中执行线程以锁步方式执行程序,例如一次执行一个指令,但执行线程仍然可以执行不同的处理操作。
在执行线程能够以上文讨论的方式分组为线程组(线程束)的情况下,可编程执行单元的功能单元等在本文所述的技术中被配置并且能够操作以便促进此类线程组布置。因此,例如,功能单元被布置为相应执行通道,例如,线程组(线程束)可能包含的每个线程都有一个功能单元(这样,例如,对于其中执行线程被分组为八个线程的组(线程束)的系统,功能单元可以作为八个相应(和相同)的执行通道来操作),使得可编程执行单元能够针对线程组(线程束)的每个线程执行相同的指令。
这是使用本文所述技术的指令管理这些执行通道的状态。
可以根据本文所述的技术处于活动(或非活动)状态的该组多个执行通道可以是任何合适且期望组的多个执行通道。例如,该组执行通道可以包括两个或更多个执行通道,诸如四个、八个或十六个(或更多个,诸如32个、64个或128个)执行通道。
在实施方案中,可以根据本文所述的技术处于活动(或非活动)状态的该组多个执行通道对应于该组所有执行通道。例如,在执行单元被配置为使得对于期望大小的线程组(线程束)中的每个线程存在相应执行通道的情况下,在一个实施方案中,所有执行通道被使得一起处于活动状态,以便然后使用一起执行(例如,并且在一个实施方案中在SIMD执行状态下)处理操作的集合的整个线程组来执行该处理操作的集合。
然而,原则上,可以使任何合适组的多个执行通道处于活动状态并且以本文所述的方式相应地使用。例如,可能的情况是处理单元被配置为具有比给定执行线程组(线程束)大小中的线程数量更多的执行通道。在这种情况下,可能期望仅使用可用执行通道的子集,例如一半执行通道。各种其他布置也是可能的。
在一个实施方案中的图形处理器还包括可编程执行单元的操作所需的任何其他适当且期望的单元和电路,诸如用于控制执行单元引起并执行期望且适当的处理操作的适当控制电路(控制逻辑)。
因此,在一个实施方案中的图形处理器还包括适当线程组执行控制器(调度器)电路,该电路能够操作以将线程组发布到可编程执行单元以供其执行,并且控制线程组在可编程执行单元上/到可编程执行单元的调度以供执行。
在一个实施方案中,图形处理器包括以下中的一者或多者并且在一个实施方案中包括以下全部:一个或多个指令解码电路,该一个或多个指令解码电路能够操作以解码待执行的指令;一个或多个指令发布电路,该一个或多个指令发布电路能够操作以向可编程执行单元发布待执行的指令,以便使执行单元执行线程组所需的指令;一个或多个指令提取电路(其在解码电路之前),该一个或多个指令提取电路能够操作以提取要执行的指令;指令高速缓存,该指令高速缓存用于将指令本地存储到可编程执行单元以供由可编程执行单元执行的执行线程来执行;执行线程发生器(派生器)电路,该执行线程发生器电路生成(派生)(多组)线程以供执行;和执行线程调度器电路,该执行线程调度器电路调度(多组)线程以供执行(这可以是线程发生器的一部分)。
与可编程执行单元一样,图形处理器包括一组多个寄存器(寄存器堆),该组多个寄存器能够操作并且用于存储用于正在执行的执行线程的数据。正在执行着色器程序的一组一个或多个执行线程中的每个线程将具有相关联的寄存器集合,以用于存储从可用于可编程执行单元(以及可编程执行单元正在执行的执行线程)的整体寄存器组(寄存器堆)中分配给它的执行线程的数据(或者待为执行线程处理的输入数据或由执行线程生成的输出数据)。
在存在多个执行单元的情况下,每个执行单元可以具有其自己不同组的寄存器(寄存器堆),或者单独的执行单元中的多个(例如,一些或全部)执行单元之间可以存在共享的单组寄存器。
这些寄存器组(寄存器堆)可以采用任何合适且期望的形式,并且以任何合适且期望的方式布置,例如包括单个或多个组等。
图形处理器将对应地包括适当的加载/存储单元和通信路径,以用于在寄存器/寄存器堆和图形处理器的或图形处理器可访问的存储器系统之间传输数据(例如,并且在一个实施方案中,经由适当高速缓存分级结构)。
因此,在一个实施方案中的图形处理器具有到图形处理器的(或图形处理器可访问的)存储器(存储器系统)的适当接口,并且与其通信。
存储器和存储器系统在一个实施方案中为图形处理器的主存储器,或可用于图形处理器,诸如专用于图形处理器的存储器或图形处理器所属的数据处理系统的主存储器。在一个实施方案中,存储器系统包括在存储器系统的主存储器与图形处理器的可编程执行单元之间的适当高速缓存分级结构。
上文已参考图形处理器的一般操作描述了本文所述的技术。在图形处理器包括多个处理核心的情况下,每个处理核心可以并且在一个实施方案中确实以本文所述的技术的方式操作(即,使得每个处理核心具有其相应的执行处理电路、线程发布电路等,所有这些都能够以本文所述的技术的方式操作)。
在一些实施方案中,图形处理器包括存储本文所述的数据和/或存储用于执行本文所述的过程的软件的一个或多个存储器和/或存储器设备,并且/或者与该一个或多个存储器和/或存储器设备通信。图形处理器还可与主机微处理器通信,并且/或者与用于基于由图形处理器生成的数据来显示图像的显示器通信。
在一个实施方案中,图形处理器是整体数据处理系统的一部分,该整体数据处理系统包括一个或多个存储器和/或存储器设备和主机处理器(以及任选地,显示器)。在一个实施方案中,主机微处理器能够操作以执行需要由图形处理器进行数据处理的应用,其中当在主机处理器上执行的应用程序需要其处理数据时,图形处理器以本文所述的技术的方式进行操作。
当然,其他布置将是可能的。
本文所述的技术的图形处理器可用于能够使用图形处理器(和处理流水线)生成的所有形式的输出。例如,就图形处理操作而言,图形处理器可以生成用于显示、渲染到纹理输出等的帧。在一个实施方案中,来自处理流水线的输出数据值被导出到外部(例如,主存储器)以用于存储和使用,诸如导出到用于显示的帧缓冲区。在一个实施方案中,图形处理器用于执行光线跟踪操作。然而,图形处理器可以用于任何合适的渲染方案。此外,图形处理器不需要执行图形处理操作,但也可以被配置为执行一般图形处理操作。
本文所述的技术因此适用于图形处理器和数据处理系统的任何合适的形式或配置。
在一个实施方案中,本文所述技术的各种功能在单个数据处理平台上执行,该单个数据处理平台生成和输出数据(诸如写入帧缓冲区的渲染片段数据),例如用于显示设备。
本文所述的技术可在任何合适的系统(诸如适当配置的基于微处理器的系统)中实现。在一个实施方案中,本文所述的技术在基于计算机和/或微处理器的系统中实现。
本文所述技术的各种功能可以任何期望且合适的方式执行。例如,本文所述技术的功能可根据需要以硬件或软件实现。因此,例如,除非另外指明,否则本文所述的技术的各种功能元件和“级”可包括适当的一个或多个处理器、一个或多个控制器、功能单元、一个或多个电路、处理逻辑部件、微处理器布置等,这些部件能够操作以执行各种功能等,诸如适当专用硬件元件(处理电路)和/或可编程硬件元件(处理电路),这些部件可被编程用于以期望的方式操作。
此处还应当指出的是,如本领域的技术人员将理解的,本文所述技术的各种功能等可在给定处理器上复制和/或并行执行。同样,如果需要,各种处理级可共享处理电路等。
在执行上文所讨论的特定功能所需的任何硬件的条件下,数据处理系统和流水线可以另外包括数据处理系统和流水线所包括的任何一个或多个或所有通常的功能单元等。
本领域的技术人员还应当理解,本文所述的技术的全部所述实施方案可视情况在一个实施方案中包括本文所述特征中的任何一者或多者或全部。
根据本文所述技术的方法可至少部分地使用软件例如计算机程序来实现。因此,可以看出,当从另外的实施方案来看时,本文所述的技术提供了:计算机软件,该计算机软件特别适于在安装在数据处理器上时执行本文所述的方法;计算机程序元件,该计算机程序元件包括用于当该程序元件在数据处理器上运行时执行本文所述方法的计算机软件代码部分;和计算机程序,该计算机程序包括适于当该程序在数据处理系统上运行时执行本文所述的一个或多个方法的所有步骤的代码。该数据处理器可以是微处理器系统、可编程FPGA(现场可编程门阵列)等。
本文所述技术还扩展到包括此类软件的计算机软件载体,该软件在用于操作处理器、渲染器或包括数据处理器的微处理器系统时,使所述处理器、渲染器或微处理器系统结合所述数据处理器执行本文所述技术的方法的步骤。此类计算机软件载体可以是物理存储介质,诸如ROM芯片、CD ROM、RAM、闪存存储器或磁盘,或者可以是信号,诸如通过导线的电子信号、光信号或无线电信号,诸如到卫星的信号等。
还应当理解,并非本文所述技术的方法的所有步骤都需要由计算机软件执行,因此相对于另一个广泛的实施方案,本文所述的技术提供了计算机软件和安装在计算机软件载体上的用于执行本文所述方法的步骤中的至少一个步骤的此类软件。
因此,本文所述的技术可适当地体现为与计算机系统一起使用的计算机程序产品。此类具体实施可包括固定在有形非暂时性介质上的一系列计算机可读指令,诸如计算机可读介质,例如磁盘、CD-ROM、ROM、RAM、闪存存储器或硬盘。其还可包括一系列计算机可读指令,这些计算机可读指令能够经由调制解调器或其他接口设备通过有形介质(包括但不限于光通信线路或模拟通信线路)或者无源地使用无线技术(包括但不限于微波、红外或其他传输技术)传输到计算机系统。该系列计算机可读指令体现了本文先前所述的功能的全部或部分。
本领域的技术人员将会理解,此类计算机可读指令可以多种编程语言编写,以与许多计算机架构或操作系统一起使用。此外,此类指令可使用目前或将来的任何存储器技术(包括但不限于半导体、磁性或光学技术)来存储,或者使用目前或将来的任何通信技术(包括但不限于光学、红外或微波技术)来传输。可以设想的是,此类计算机程序产品可作为带有附随的印刷或电子文档(例如,收缩包装软件)的可移动介质进行分发,可与计算机系统一起预加载在例如系统ROM或固定磁盘上,或者可经由网络(例如,互联网或万维网)从服务器或电子公告板进行分发。
现在将在处理计算机图形以供图形处理器显示的上下文中描述本文所述的技术的多个实施方案。然而,应当理解,用于处理本文所述的多组执行线程的技术可以用于其中使用线程组的其他非图形上下文。
图1示出了典型的图形处理系统。在主机处理器1上执行的应用程序2诸如游戏将需要由相关联的图形处理单元(GPU)(图形处理器)3执行图形处理操作。为此,应用程序将生成API(应用编程接口)调用,其由用于在主机处理器1上运行的图形处理器3的驱动器4解译,为图形处理器3生成适当的命令,以生成应用程序2所需的图形输出。为了有利于这一点,将响应于来自在主机系统1上运行的应用程序2的命令而向图形处理器3提供“命令”的集合,以用于图形输出(例如,以生成要显示的帧)。
为此,应用程序2提供使用高级着色器编程语言(诸如GLSL、HLSL、OpenCL等)执行的着色器程序。然后,这些着色器程序被着色器语言编译器转换成用于目标图形处理流水线33的二进制代码。这可以包括在编译器内创建程序的一种或多种中间表示。该编译器可以为例如驱动器4的一部分,其中存在特殊API调用以使编译器运行。因此,该编译器执行可被视为由驱动器响应于由应用程序生成的API调用而完成的绘制调用准备的一部分。(当然,其他编译器布置将是可能的。)
图2示出了这一点,并且示出了由应用程序2以高级着色器编程语言301提供给驱动器4的着色器程序,然后该驱动器将着色器程序编译302为用于图形处理流水线33的二进制代码303。
如上所述,该图形处理流水线中的每个着色器为通过在待生成的图形输出中运行每个“工作”项的小程序来执行图形处理的处理级(在这方面,“项目”通常为顶点或采样位置)。对于待处理的每个工作项,将执行对应着色器程序的执行线程被发布到适当的可编程处理电路,该可编程处理电路然后执行用于所考虑的执行线程的着色器程序。
在此类布置中,为了执行线程组的执行线程,例如以便执行片段着色操作,将适当地将线程组的执行线程发布到适当的功能单元,诸如算术处理单元以执行所考虑的着色器程序所需的处理操作。在线程可以被组织成以及被执行为多个线程的相应线程组的情况下,通常将功能单元布置为多个执行通道,其中每个执行通道都能够执行针对线程组的执行线程的处理操作。
因此,每个功能单元(或相关联功能单元的集合)都将被布置并且能够作为多个执行通道操作,线程组的线程可以被发布到该多个执行通道以供执行。当线程组待执行时,适当的控制逻辑将向功能单元或功能单元的集合的适当执行通道发布待执行的相关数据和指令,以便功能单元可以对线程组的线程执行所考虑的指令。
图3示出了这一点,并且示出了根据本实施方案布置为四个执行通道41的执行处理电路42,以及以“备用站”40形式的适当控制逻辑(电路),该控制逻辑用于向执行通道的集合中的执行通道41发布线程组的每个线程的适当数据和指令。(备用站(控制逻辑)40将接收用于执行的线程,例如,从线程派生器或图形处理器的线程派生进程。)应当理解,在其他实施方案中,执行处理电路42可以被布置为少于或多于四个执行通道,例如两个或八个执行通道。
例如,功能单元可以包括以下中的一者或多者或全部:算术单元(算术逻辑单元)(加法、减法、乘法、除法等)、位操作单元(倒置、交换、移位等)、逻辑操作单元(AND、OR、NAND、NOR、NOT、XOR等)、加载型单元(诸如就图形处理器而言的变化、纹理化或加载单元)、存储型单元(诸如混合或存储单元)等。
执行处理电路42的每个执行通道41还可以访问(并对其可用)多个寄存器43的集合,以用于存储与执行通道相关联的数据值以及执行通道的数据值(即,以用于存储执行通道当前正在执行的执行线程所处理的数据值)。然后,这促进了在执行通道中处理执行线程和它们的数据值,而无需(始终)访问存储器(图形处理系统的存储器系统)。执行通道的寄存器可以根据需要并以适当的方式布置成寄存器堆组。
图4更详细地示出了根据本实施方案的以图形处理器3的算术单元流水线形式的执行通道41,该执行通道可以对已经由控制逻辑40发布以供执行的执行线程执行算术处理操作。
图4的流水线41能够操作以对输入数据值执行图形处理操作,然后提供处理操作的结果作为输出数据值。输入数据值作为二进制数据值存储在输入寄存器501中,输出数据值作为二进制数据值存储在输出寄存器502中。
流水线能够操作以执行的处理操作可以是任何合适的处理操作,并且在本实施方案中,作为一系列四个处理操作来执行。因此,如图4所示,在本实施方案中,流水线41被布置为四个算术处理级P0-P3的流水线(系列),其中每个算术处理级P0-P3能够操作以在时钟505的周期内执行一个指令。应当理解,在其他实施方案中,流水线的“深度”可以少于或多于四个处理级,诸如两个或八个处理级。
如图4所示,在每个处理级P0-P3,将存储在触发器(锁存器)510-513中的二进制数据值作为输入提供给组合逻辑电路520-523(功能单元),然后组合逻辑电路520-523(功能单元)对输入执行例如算术操作以产生二进制输出。组合逻辑电路520-523的输出随后可以存储在触发器(锁存器)中,并且可以作为输入提供给下一级(功能单元),以此类推。流水线的最终输出数据值是流水线41的最终级P3的组合逻辑电路523(功能单元)的输出。
如图4所示,流水线(执行通道)41在流水线控制单元503的控制下操作,该流水线控制单元在每个级P0-P3向组合逻辑电路520-523(功能单元)指示待在时钟周期内执行的操作,例如通过向组合逻辑电路520-523发布适当的操作码。流水线控制单元503继而由指令解码电路504控制,该指令解码电路进行操作以解码正被执行的着色器程序中的指令,并且使流水线控制单元503控制流水线(执行通道)41执行所需的图形处理操作以执行所考虑的着色器指令。
流水线41还可以包括时钟门530-533,以用于在时钟门控制电路506的控制下执行时钟选通,如下文将进一步讨论的。
为了清楚起见,图4仅详细示出了单个执行通道41。然而,在本实施方案中,执行处理电路42被布置为四个执行通道41,其中指令解码电路504和流水线控制电路503随后跨四个执行通道41共同共享,使得着色器程序中的单个指令被解码,然后在给定周期内由所有四个执行通道来执行。因此,着色器程序中的指令通过物理SIMD(单指令、多数据)算术数据路径来执行。
这在图5中示出。如图5中所示,在本实施方案中,执行处理电路42被布置为四个执行通道:通道0-通道3,这四个执行通道由四个算术单元流水线41提供,每个算术单元流水线包括四个级P0-P3,它们在(共享)流水线控制电路503的控制下进行操作,如上文参考图4所述。
如上所述,通常可能是将线程布置成与所提供的执行通道数量相匹配的组(“线程束”),在这种情况下(在不构成本文所述技术一部分的布置中),可以将线程组中的每个线程发布到执行通道中的相应一个执行通道以供执行,即,使得执行通道仅具有来自发布到其的线程组(“线程束”)中的一个执行线程。此类布置可以允许在单个周期内对线程组中的所有线程执行每个着色器程序指令,例如,使得可以提高单线程执行性能。
本实施方案涉及其中用于执行着色器程序的线程可以被组织成线程的组(“线程束”)的系统,该线程组可以用于在单指令、多数据(SIMD)执行状态下一起执行处理操作。
在这方面,本发明人已经认识到在给定处理时刻,当待在SIMD执行状态下执行的指令下达时,执行通道当前可能不处于活动状态。
例如,参考图6,可能的情况是,在需要SIMD执行的点,执行通道可能处于许多不同的状态。例如,对于需要执行SIMD执行处理的程序,第一执行通道61可以是活动的,以便第一执行通道61中的执行线程正在执行需要执行SIMD操作的程序部分(程序A)。然而,另一执行通道62可能正在执行线程,该线程正在执行程序的不同部分(程序B),例如响应于程序的早期发散。其他执行通道可能处于非活动状态,例如,因为从未生成执行线程(执行通道63),或者因为执行通道正在执行的执行线程已经终止(执行通道64)。因此,在时间上的第一实例t0,执行通道可以处于不同的执行状态。
因此,本实施方案提供了指令,在本文中被称为“enter_SIMD_state”指令,该指令在被执行时将使所有执行通道处于执行SIMD执行处理所需的活动状态。图7示出了根据本实施方案的高级操作。因此,当执行“enter_SIMD_state”指令时(步骤71),所有执行通道随后都被置入活动状态。此时,所有执行通道都处于活动状态,并且在实例t1执行相同的操作(对于程序的相同部分),如图6所示。
然后,可以使用作为整体的该组执行通道来执行所需的SIMD处理操作(步骤72)。一旦SIMD处理操作已完成,就可以执行适当的“exit_SIMD_state”指令(步骤73),该指令使执行通道返回到它们的前一执行状态。因此,如图6所示,在实例t2,SIMD处理完成后,执行通道返回到它们的初始执行状态。
图8更详细地示出了响应于正在执行“enter_SIMD_state”指令而根据本实施方案的操作(步骤71)。根据执行“enter_SIMD_state”指令时执行通道的执行状态,可能需要执行不同的操作,例如,以便允许执行线程在SIMD处理操作完成后返回到它们的前一执行状态。
因此,对于每个执行通道,记录执行状态,即执行中的执行线程处于活动或非活动状态,是否存在发散等(步骤81)。
然后确定是否存在任何执行通道为非活动执行线程(步骤82)。如果是,则为了使执行通道进入SIMD处理操作所需的活动状态,在该执行通道中生成新的执行线程(步骤83)。然后可以为SIMD处理操作适当初始化执行线程,例如使用一组零值。执行通道处于非活动状态的指示也会在SIMD处理操作中存储和携带。
对于任何活动线程,存储当前程序计数器(步骤84),以便允许执行线程在SIMD处理操作完成后返回到它们的当前位置。
同样,对于任何发散线程(步骤85),存储当前程序计数器,然后将发散线程移动到程序的需要SIMD处理操作的当前程序计数器(步骤86)。
此时,所有执行通道都处于执行SIMD处理操作所需的活动状态,并且可以使用SIMD状态下的整个线程束相应地执行SIMD处理操作(步骤87)。
在SIMD处理操作已完成之后,然后可以将线程返回到它们的前一执行状态。如上所述,在一个实施方案中,这是通过执行适当的“exit_SIMD_state”指令(图7中的步骤73)来完成的,该指令使所有执行线程一起退出活动SIMD状态。响应于执行“exit_SIMD_state”指令,执行线程然后可以返回到它们的前一执行状态。
因此,对于发散的任何线程(步骤88),恢复它们的程序计数器(步骤89),并且可以继续它们的前一程序执行。同样,任何已经处于活动状态的线程都可以继续它们的程序执行。另一方面,对于在执行“enter_SIMD_state”指令时处于非活动状态的任何线程(步骤90),可以销毁该线程(步骤91)。
然后,SIMD处理完成,可以根据需要继续程序执行(步骤92)。
如上所述,本实施方案的操作涉及执行适当的着色器程序以执行期望的处理操作。在本实施方案中,这些着色器程序由用于图形处理器3的编译器生成,该编译器例如在图形处理系统的中央处理单元(CPU)诸如主机处理器1上执行(并且在一个实施方案中,作为用于图形处理器的驱动器4操作的一部分,如图1所示)。
编译器(驱动器)将从需要执行处理的应用程序2接收待执行的一个或多个高级着色器程序,然后将该一个或多个程序编译为适当的着色器程序以供图形处理器执行,并且作为此处理的一部分,将如上所述,在待由图形处理器执行的一个或多个编译的着色器程序中包括适当的“enter_SIMD_state”和“exit_SIMD_state”指令,以使执行通道根据需要进入或退出SIMD活动执行状态。
编译过程(编译器)可使用任何合适的和期望的编译器技术来实现这一点。
图9示出了编译过程的实施方案。
如图9所示,用于图形处理器的编译器将接收一个或多个程序以用于编译(步骤100)。
然后,编译器将分析所提供的着色器程序代码,以识别该着色器程序代码中所需SIMD处理的实例(步骤101),并在编译的着色器程序中的适当点插入对应的“enter_SIMD_state”和“exit_SIMD_state”指令(步骤102)。
然后,这些编译着色器程序将被发布到图形处理器以供执行(例如,存储在图形处理器的和/或图形处理器能够访问的适当存储器中,使得图形处理器可根据需要获取所需着色器程序以供执行)(步骤103)。
从以上可以看出,本文所述的技术至少在其实施方案中可以提供更有效的过程,以用于控制整个线程束的执行通道的价值,以从任意处理状态过渡到所需的SIMD执行状态,其中可以使用整个线程束一起执行SIMD处理操作的集合,然后执行通道可以适当地返回到它们的前一状态。
上述具体实施方式是为了举例说明和描述的目的而呈现的。其并非旨在穷举或将技术限制为所公开的精确形式。按照上述教导内容,许多修改形式和变型形式是可能的。选择所述实施方案是为了最佳地解释本技术的原理及其实际应用,从而使得本领域的其他技术人员能够最佳地利用各种实施方案中的技术并且具有适合于所设想的特定用途的各种修改。本发明的范围旨在由所附权利要求限定。
Claims (23)
1.一种操作图形处理器的方法,所述图形处理器包括可编程执行单元,所述可编程执行单元能够操作以执行程序来执行图形处理操作,其中所述执行单元被配置为多个执行通道,其中一组多个执行线程中的各个执行线程能够通过相应执行通道来执行,
所述方法包括:
当执行一个或多个处理操作的集合的程序正由执行线程执行时,响应于所述执行线程执行激活指令:
使一组多个执行通道处于活动状态,在所述活动状态下,能够使用所述组多个执行通道来一起执行活动状态处理操作;然后
使用所述组多个执行通道来一起执行所述一个或多个处理操作的集合。
2.根据权利要求1所述的方法,包括:一旦使用所述组多个执行通道一起执行的所述一个或多个处理操作已完成,就允许所述执行通道返回到它们的前一执行状态。
3.根据权利要求1或2所述的方法,其中响应于执行所述激活指令:所述方法包括:对于所述组多个执行通道中被使得处于所述活动状态的每个执行通道:确定在执行所述激活指令之前的点处所述执行通道的执行状态;以及存储所述先前执行状态的指示,使得一旦使用所述组多个执行通道一起执行的所述一个或多个处理操作的集合已完成,所述执行通道就能够返回到它们的先前执行。
4.根据前述权利要求中任一项所述的方法,其中响应于执行所述激活指令:所述方法包括:对于在执行所述激活指令的所述点处为非活动状态的任何执行通道:生成用于执行所述一个或多个处理操作的集合的新执行线程。
5.根据前述权利要求中任一项所述的方法,其中响应于执行所述激活指令:所述方法包括:对于执行从需要执行所述一个或多个处理操作的所述程序发散的执行线程的任何执行通道:存储由所述发散线程执行的所述程序的部分的当前位置的指示,使得一旦已执行所述一个或多个处理操作,就能够继续所述程序执行;然后使所述发散执行线程跳转到需要执行所述一个或多个处理操作的所述程序的所述部分。
6.根据前述权利要求中任一项所述的方法,其中响应于执行所述激活指令:所述方法包括:使所述组执行通道中被使得处于所述活动状态的所有所述执行通道跳转到包括所述一个或多个指令的集合的子例程,以执行待使用所述组多个执行通道一起执行的所述一个或多个处理操作,其中所述子例程的位置的指示被包括在所述激活指令中。
7.根据前述权利要求中任一项所述的方法,其中在所述活动状态下,所述组多个执行通道在单指令、多数据执行状态下执行处理操作。
8.根据前述权利要求中任一项所述的方法,还包括:响应于处于所述活动状态的所述执行通道执行所述程序中另外的去激活指令:使所述组多个执行通道中所有执行通道返回到它们的先前处理状态。
9.一种操作图形处理器的方法,所述图形处理器包括可编程执行单元,所述可编程执行单元能够操作以执行程序来执行图形处理操作,其中所述执行单元被配置为多个执行通道,其中一组多个执行线程中的各个执行线程能够通过相应执行通道来执行,
所述方法包括:
当由一组多个执行通道执行的一组执行线程正在执行其中所述组多个执行通道处于活动状态的程序时,在所述活动状态下,正在使用所述组多个执行通道一起执行一个或多个处理操作:
响应于处于所述活动状态的所述执行线程执行去激活指令:
使所述执行线程退出所述活动状态,在所述活动状态下,能够使用所述多个执行通道一起执行所述处理操作。
10.一种编译待由图形处理器的可编程执行单元执行的着色器程序的方法,所述图形处理器包括可编程执行单元,所述可编程执行单元能够操作以执行程序来执行图形处理操作,其中所述执行单元被配置为多个执行通道,其中一组多个执行线程中的各个执行线程能够通过相应执行通道来执行;
所述方法包括:
在待由一组多个执行通道执行的程序中包括激活指令,所述激活指令在由所述组执行线程中的执行线程执行时将使一组多个执行通道处于活动状态,在所述活动状态下,能够使用所述多个执行通道一起执行处理操作;以及
在将使所述组多个执行通道处于所述活动状态的所述激活指令之后,在所述程序中包括一个或多个指令的集合,以使一个或多个处理操作使用所述组多个执行通道来一起执行。
11.一种操作包括图形处理器的图形处理系统的方法,
所述图形处理器包括可编程执行单元,所述可编程执行单元能够操作以执行程序来执行图形处理操作,其中所述执行单元被配置为多个执行通道,其中一组多个执行线程中的各个执行线程能够通过相应执行通道来执行,
所述方法包括:
在待由一组多个执行通道执行的程序中包括激活指令,所述激活指令在由所述组执行线程中的执行线程执行时将使一组多个执行通道处于活动状态,在所述活动状态下,能够使用所述多个执行通道一起执行处理操作;以及
在将使所述组多个执行通道处于所述“活动”状态的所述激活指令之后,在所述程序中包括一个或多个指令的集合,以使一个或多个处理操作使用所述组多个执行通道来一起执行;
所述方法还包括:
当所述程序正由一组多个执行线程中的执行线程执行时,响应于所述执行线程执行所述激活指令:
使一组多个执行通道处于活动状态,在所述活动状态下,能够使用所述组多个执行通道来一起执行活动状态处理操作;然后
使用所述组多个执行通道一起执行一个或多个处理操作。
12.一种图形处理器,所述图形处理器包括可编程执行单元,所述可编程执行单元能够操作以执行程序来执行图形处理操作,其中所述执行单元被配置为多个执行通道,其中一组多个执行线程中的各个执行线程能够通过相应执行通道来执行,
其中所述执行单元被配置为使得:
当执行一个或多个处理操作的集合的程序正由执行线程执行时,响应于所述执行线程执行激活指令:
使一组多个执行通道处于“活动”状态,使得所述执行单元然后能够使用所述组多个执行通道一起执行所述一个或多个处理操作的集合。
13.根据权利要求12所述的图形处理器,其中所述图形处理器被配置为使得:在使用所述组多个执行通道一起执行的所述一个或多个处理操作已完成之后,所述执行单元允许所述执行通道返回到它们的前一执行状态。
14.根据权利要求12或13所述的图形处理器,其中所述图形处理器被配置为使得:响应于执行所述激活指令:对于所述组多个执行通道中被使得处于所述活动状态的每个执行通道:所述执行单元确定在执行所述激活指令之前的点处所述执行通道的执行状态;并且存储所述先前执行状态的指示,使得一旦使用所述组多个执行通道一起执行的所述一个或多个处理操作的集合已完成,所述执行通道就能够返回到它们的先前执行。
15.根据权利要求12至14中任一项所述的图形处理器,其中所述图形处理器被配置为使得:响应于执行所述激活指令:对于在执行所述激活指令的所述点处为非活动状态的任何执行通道:所述图形处理器被配置为生成用于执行所述一个或多个处理操作的集合的新执行线程,并且相应地将所生成的线程发布到所述执行单元。
16.根据权利要求12至15中任一项所述的图形处理器,其中响应于执行所述激活指令:所述图形处理器被配置为:对于执行从需要执行所述一个或多个处理操作的所述程序发散的执行线程的任何执行通道:存储由所述发散线程执行的所述程序的部分的当前位置的指示,使得一旦已执行所述一个或多个处理操作,就能够继续所述程序执行;然后使所述发散执行线程跳转到需要执行所述一个或多个处理操作的所述程序的所述部分。
17.根据权利要求12至16中任一项所述的图形处理器,其中响应于执行所述激活指令:所述图形处理器被配置为:使所述组执行通道中被使得处于所述活动状态的所有所述执行通道跳转到包括所述一个或多个指令的集合的子例程,以执行待使用所述组多个执行通道一起执行的所述一个或多个处理操作,其中所述子例程的位置的指示被包括在所述激活指令中。
18.根据权利要求12至17中任一项所述的图形处理器,其中在所述活动状态下,所述组多个执行通道在单指令、多数据执行状态下执行处理操作。
19.根据权利要求12至18中任一项所述的图形处理器,其中当用于执行一个或多个处理操作的集合的程序正由执行线程执行时,响应于所述执行线程执行去激活指令,所述去激活指令被包括在所述程序中在所述激活指令之后,所述图形处理器被配置为使处于所述活动状态的所有所述执行通道返回到它们在所述激活指令被执行之前所处的处理状态。
20.一种包括可编程执行单元的图形处理器,所述可编程执行单元能够操作以执行程序来执行图形处理操作,其中所述执行单元被配置为多个执行通道,其中一组多个执行线程中的各个执行线程能够通过相应执行通道来执行,
其中所述执行单元被配置为使得:
当由一组多个执行通道执行的一组执行线程正在执行其中所述组多个执行通道处于活动状态的程序时,在所述活动状态下,正在使用所述组多个执行通道一起执行一个或多个处理操作:
响应于处于所述活动状态的所述执行线程执行所述程序中的去激活指令:
使在所述执行通道中执行的所述执行线程退出所述活动状态,在所述活动状态下,能够使用所述多个执行通道一起执行所述处理操作。
21.一种用于编译待由图形处理器的可编程执行单元执行的着色器程序的编译器,所述图形处理器包括可编程执行单元,所述可编程执行单元能够操作以执行程序来执行图形处理操作,其中所述执行单元被配置为多个执行通道,其中一组多个执行线程中的各个执行线程能够通过相应执行通道来执行;
所述编译器包括处理电路,所述处理电路被配置为:
在待由一组多个执行线程执行的程序中包括激活指令,所述激活指令在由所述组执行线程中的执行线程执行时将使一组多个执行通道处于活动状态,在所述活动状态下,能够使用所述多个执行通道一起执行处理操作;以及
在将使所述组多个执行通道处于所述活动状态的所述激活指令之后,在所述程序中包括一个或多个指令的集合,以使一个或多个处理操作使用所述组多个执行通道来一起执行。
22.一种图形处理系统,包括:
图形处理器,所述图形处理器包括可编程执行单元,所述可编程执行单元能够操作以执行程序来执行图形处理操作,其中所述执行单元被配置为多个执行通道,其中一组多个执行线程中的各个执行线程能够通过相应执行通道来执行,和
处理电路,所述处理电路被配置为:
在待由一组多个执行线程执行的程序中包括激活指令,所述激活指令在由所述组执行线程中的执行线程执行时将使一组多个执行通道处于活动状态,在所述活动状态下,能够使用所述多个执行通道一起执行处理操作;以及
在将使所述组多个执行通道处于所述活动状态的所述激活指令之后,在所述程序中包括一个或多个指令的集合,以使一个或多个处理操作使用所述组多个执行通道来一起执行;
其中所述图形处理器被配置为使得当所述程序正由一组多个执行线程中的执行线程执行时,响应于所述执行线程执行所述激活指令:
使一组多个执行通道处于活动状态,在所述活动状态下,能够使用所述组多个执行通道来一起执行后续一个或多个处理操作的集合。
23.一种包括计算机软件代码的计算机程序,所述计算机软件代码用于当所述程序在数据处理装置上运行时执行根据权利要求1至11中任一项所述的方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB2108052.8 | 2021-06-04 | ||
GB2108052.8A GB2607349B (en) | 2021-06-04 | 2021-06-04 | Graphics processing |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115439303A true CN115439303A (zh) | 2022-12-06 |
Family
ID=76838784
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210623611.6A Pending CN115439303A (zh) | 2021-06-04 | 2022-06-02 | 图形处理 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20220391216A1 (zh) |
CN (1) | CN115439303A (zh) |
GB (1) | GB2607349B (zh) |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5197140A (en) * | 1989-11-17 | 1993-03-23 | Texas Instruments Incorporated | Sliced addressing multi-processor and method of operation |
US5588152A (en) * | 1990-11-13 | 1996-12-24 | International Business Machines Corporation | Advanced parallel processor including advanced support hardware |
CA2073516A1 (en) * | 1991-11-27 | 1993-05-28 | Peter Michael Kogge | Dynamic multi-mode parallel processor array architecture computer system |
US6272616B1 (en) * | 1998-06-17 | 2001-08-07 | Agere Systems Guardian Corp. | Method and apparatus for executing multiple instruction streams in a digital processor with multiple data paths |
US7353369B1 (en) * | 2005-07-13 | 2008-04-01 | Nvidia Corporation | System and method for managing divergent threads in a SIMD architecture |
US7730280B2 (en) * | 2006-06-15 | 2010-06-01 | Vicore Technologies, Inc. | Methods and apparatus for independent processor node operations in a SIMD array processor |
US8850436B2 (en) * | 2009-09-28 | 2014-09-30 | Nvidia Corporation | Opcode-specified predicatable warp post-synchronization |
US9311102B2 (en) * | 2010-07-13 | 2016-04-12 | Advanced Micro Devices, Inc. | Dynamic control of SIMDs |
US10067768B2 (en) * | 2014-07-18 | 2018-09-04 | Nvidia Corporation | Execution of divergent threads using a convergence barrier |
GB2610242A (en) * | 2021-08-27 | 2023-03-01 | Advanced Risc Mach Ltd | Graphics processing |
-
2021
- 2021-06-04 GB GB2108052.8A patent/GB2607349B/en active Active
-
2022
- 2022-05-27 US US17/804,453 patent/US20220391216A1/en active Pending
- 2022-06-02 CN CN202210623611.6A patent/CN115439303A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
GB202108052D0 (en) | 2021-07-21 |
US20220391216A1 (en) | 2022-12-08 |
GB2607349A (en) | 2022-12-07 |
GB2607349B (en) | 2023-06-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8615646B2 (en) | Unanimous branch instructions in a parallel thread processor | |
US8782611B1 (en) | Visual inspection and debugging of threads in parallel computing systems | |
US10176546B2 (en) | Data processing systems | |
US10853905B2 (en) | Instruction execution in graphics processor shader programs | |
CN109144515B (zh) | Dcs图形化算法组态的离线仿真方法和装置 | |
US7697007B1 (en) | Predicated launching of compute thread arrays | |
CN106373083B (zh) | 图形处理 | |
CN106327420B (zh) | 数据处理系统 | |
GB2517047A (en) | Data processing systems | |
US20190278605A1 (en) | Software-controlled variable wavefront size execution at gpu | |
CN114610394B (zh) | 指令调度的方法、处理电路和电子设备 | |
US10593093B2 (en) | Data processing systems | |
US10606595B2 (en) | Data processing systems | |
US11900522B2 (en) | Graphics processing | |
CN112862660A (zh) | 数据处理系统 | |
CN115439303A (zh) | 图形处理 | |
US10310856B2 (en) | Disabling thread execution when executing instructions in a data processing system | |
US10891708B1 (en) | Shader program execution in graphics processing | |
CN113874837A (zh) | 在gpu处的软件控制的可变波前大小执行 | |
Canestrari et al. | SHADOW3-API: the application programming interface for the ray tracing code SHADOW | |
US10115222B2 (en) | Data processing systems | |
US20220276872A1 (en) | Data Processing Systems | |
US11372691B2 (en) | Data processing systems comprising grouped execution threads with common data values | |
US20240036874A1 (en) | Apparatus and method of optimising divergent processing in thread groups | |
US11397624B2 (en) | Execution of cross-lane operations in data processing systems |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination |