CN104217393A - 数据处理系统 - Google Patents
数据处理系统 Download PDFInfo
- Publication number
- CN104217393A CN104217393A CN201410239143.8A CN201410239143A CN104217393A CN 104217393 A CN104217393 A CN 104217393A CN 201410239143 A CN201410239143 A CN 201410239143A CN 104217393 A CN104217393 A CN 104217393A
- Authority
- CN
- China
- Prior art keywords
- instruction
- execution
- stream
- tracker
- completes
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000012545 processing Methods 0.000 title claims abstract description 74
- 230000001419 dependent effect Effects 0.000 claims abstract description 17
- 238000000034 method Methods 0.000 claims description 76
- 230000004888 barrier function Effects 0.000 claims description 23
- 238000003860 storage Methods 0.000 claims description 16
- 238000011068 loading method Methods 0.000 claims description 12
- 230000004044 response Effects 0.000 claims description 10
- 238000004590 computer program Methods 0.000 claims description 7
- 238000007689 inspection Methods 0.000 claims description 4
- 239000012634 fragment Substances 0.000 description 65
- 230000008569 process Effects 0.000 description 46
- 230000006870 function Effects 0.000 description 11
- 238000005070 sampling Methods 0.000 description 8
- 238000005516 engineering process Methods 0.000 description 5
- 230000007246 mechanism Effects 0.000 description 4
- 238000004040 coloring Methods 0.000 description 3
- 230000007423 decrease Effects 0.000 description 3
- 238000004891 communication Methods 0.000 description 2
- 238000009826 distribution Methods 0.000 description 2
- 230000005055 memory storage Effects 0.000 description 2
- 230000008707 rearrangement Effects 0.000 description 2
- 238000009877 rendering Methods 0.000 description 2
- 238000000889 atomisation Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000000903 blocking effect Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005286 illumination Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000002156 mixing Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000012805 post-processing Methods 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 238000007639 printing Methods 0.000 description 1
- 238000011112 process operation Methods 0.000 description 1
- 230000001737 promoting effect Effects 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000011664 signaling Effects 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Classifications
-
- 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
- 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/3838—Dependency mechanisms, e.g. register scoreboarding
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3851—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/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/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
-
- 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)
- Multimedia (AREA)
- Computer Graphics (AREA)
- Image Processing (AREA)
- Image Generation (AREA)
- Advance Control (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
数据处理系统。一种数据处理系统针对要执行的指令的流来确定指令流中是否存在能够被重新排序的任何指令,并且将每条这样的指令分配给指令完成跟踪器,并且在对所述指令的编码中包括该指令被分配到的所述指令完成跟踪器的指示。针对所述指令流中的每条指令,还提供了所述指令依赖于哪些指令完成跟踪器(若有的话)的指示。当被指示为依赖于指令完成跟踪器的指令将被执行时,在执行所述指令之前检查有关指令完成跟踪器的状态。
Description
技术领域
本发明涉及数据处理系统,具体地,涉及包括一个或更多个可编程处理级(“着色器(shader)”)的图形处理系统的操作。
背景技术
如本领域中已知的那样,图形处理通常以流水线方式执行,其中一个或更多个流水线级对数据进行操作以生成最后的渲染输出,例如被显示的帧。许多图形处理流水线现包括一个或更多个可编程处理级,通常被称为“着色器”。例如,图形处理流水线可以包括几何形状着色器、顶点着色器以及片段(像素)着色器中的一个或更多个,并且通常包括全部这些着色器。这些着色器是可编程处理级,其对输入的数据值执行着色器程序以生成期望的一组输出数据(例如,在顶点着色器的情况下为适当地变换且照亮的顶点数据)以供由图形流水线的其余部分处理和/或以供输出。图形处理流水线的着色器可以共享可编程处理电路,或者它们每个都可以是不同的可编程处理单元。
图形处理单元(GPU)着色器核心因此是通过为诸如渲染目标(例如帧)的要生成的图形输出中的每个图形项目运行小程序来执行图形处理的处理单元(“项目”在这点上通常是顶点或片段(像素))。这一般地使得能实现高度的并行性,因为典型的渲染输出(例如帧)的特征在于相当大量的顶点和片段,其中的每一个都能够被独立地处理。
如本领域中已知的那样,要被图形处理流水线的给定“着色器”执行的着色器程序将由要求使用高级着色器编程语言(诸如GLSL、HLSL、OpenCL等)的图形处理的应用来提供。这种着色器程序将包括指示用有关语言标准(规范)所定义的期望的编程步骤的“表达”。高级着色器程序然后被着色器语言编译器转化为用于目标图形处理流水线的二进制代码。这种二进制代码将包括“指令”,所述“指令”在用于给定目标图形处理流水线的指令集规范中被指定。如本领域中已知的那样,用于将着色器语言表达转换成二进制代码指令的编译过程可以经由程序在编译器内的许多中间表示而发生。因此用高级着色器语言编写的程序可以被译成编译器特定的中间表示(以及在编译器内可以存在若干连续的中间表示),同时最后的中间表示被译成目标图形处理流水线的二进制代码指令。
用来改进着色器执行效率的已知方式是将执行线程(其中每个线程都对应于一个顶点或一个片段(像素))组合成线程“组”或“束”,其中一个组的线程被一次一条指令地锁步(lockstep)运行。这样,有可能在该组中的所有线程之间共享取指令和资源调度。(用于这样的线程组的其它术语包括“扭曲(warp)”和“波前(wavefront)”。除非另外指示,否则出于方便将在本文中使用术语线程组,但这不旨在包含所有等效术语和布置)。
线程组架构中的执行单元是典型地强流水线的。它们通过在每时钟周期基础上在多个线程组之间交替执行而被通常保持高利用率。
在现有的线程组架构中,组中指令的执行以严格有序的方式完成:一旦线程组已开始执行指令,它就不能够继续执行下一条指令直至当前指令已完成为止。
这对于算术指令来说通常不是问题,因为这些典型地具有非常短的等待时间。GPU通常具有足够多处于飞行状态(in flight)的线程组以相当好地保持仅算术代码的利用。
然而,它对于具有不确定的等待时间的指令来说可能是一个相当大的问题。这样的指令的示例包括:存储器存取(加载、存储以及原子学)和纹理查找。存储器存取在高速缓存命中情况下可以具有低的等待时间,但在高速缓存未命中情况下往往展示相当高的等待时间。对于加载和原子学来说情况尤其如此(对于存储,常常有可能通过执行写采集(write gathering)来掩盖等待时间)。纹理查找往往使存储器存取具有相对高的高速缓存未命中率、以及在存储器存取之前和之后两者具有大量固定功能的处理级的特征。
在基于有序线程组的架构中,几个高速缓存未命中能够容易使大多数或甚至所有的线程组在等待高速缓存未命中得以解决时被阻塞。这有时还因多个线程组对于相同的存储器区产生高速缓存未命中而加剧。
并且,由于线程的锁步执行,单个线程组指令有可能得到多个高速缓存未命中。这在组中的各个线程在不同的高速缓存线中得到高速缓存未命中时发生。在这种情况下,组不能够继续直到所有高速缓存未命中都已被解决为止,这可能花费很长时间。
有时还出现“聚束”现象,其中大批的线程组形成“束”。这种“束”然后往往总体上在不同类型的执行单元之间移动,其结果是由“束”当前所占有的执行单元正以全速率执行然而其它执行单元闲置着。闲置着的实际执行单元然后在“束”执行时来回转换。这给出相当差的执行单元利用率。
本申请人因此相信,例如在包括一个或更多个着色器级的图形处理流水线中,对于线程组的处理而言仍有改进的余地。
发明内容
根据本发明的第一方面,提供了一种操作包括执行流水线的数据处理系统的方法,所述执行流水线包括执行指令以执行数据处理操作的一个或更多个可编程执行级,所述方法包括以下步骤:
针对要由执行级执行的指令的流,确定该指令流中是否存在能够被重新排序的任何指令;
将指令流中已被确定为能够被重新排序的每条指令分配给指令完成跟踪器,并且在对指令的编码中包括所述指令已被分配到的指令完成跟踪器的指示;
针对指令流中依赖于已被分配到指令完成跟踪器的指令的每条指令,在指令流中提供指示,该指示指出依赖于已被分配到指令完成跟踪器的指令依赖于哪一个或哪些指令完成跟踪器;
将指令流中的指令发送到执行级以供执行;并且
在执行指令流中的指令时:
使用所分配的指令完成跟踪器来跟踪指令的完成;以及
针对被指示为依赖于指令完成跟踪器的任何指令,在执行该指令之前检查该指令完成跟踪器的状态。
根据本发明的第二方面,提供了一种数据处理系统,该数据处理系统包括:
执行流水线,其包括执行指令以执行数据处理操作的一个或更多个可编程执行级;以及
编译器,其对用于执行流水线的程序进行编译以生成针对执行流水线的执行级的指令;
其中:
所述编译器被配置成:
针对要由执行流水线的执行级执行的指令的流,确定指令流中是否存在能够被重新排序的任何指令;
将指令流中已被确定为能够被重新排序的每条指令分配给指令完成跟踪器,并且在对指令的编码中包括所述指令已被分配到的指令完成跟踪器的指示;以及
针对指令流中依赖于已被分配到指令完成跟踪器的指令的每条指令,在指令流中提供指示,所述指示指出依赖于已被分配到指令完成跟踪器的指令依赖于哪一个或哪些指令完成跟踪器;
并且其中:
执行流水线的至少一个执行级被配置成在执行来自编译器的指令流中的指令时:
使用所分配的指令完成跟踪器来跟踪指令的完成;以及
针对被指示为依赖于指令完成跟踪器的任何指令,在执行指令之前检查该指令完成跟踪器的状态。
本发明涉及在数据处理流水线中执行指令流(序列)。然而,在本发明中,能够在指令流中被重新排序的用于执行级的指令流中的指令(即,将被允许乱序执行的指令)被标识并且它们的完成被跟踪,并且指令流中的指令(若有的话)对所标识的指令的依赖性被编码在指令流中。如将在下面进一步讨论的那样,这有助于给定指令序列(流)中的指令被乱序执行(在可能的情况下),同时仍然确保能够实施任何要求的指令依赖性。这能够避免或者至少减少上面所标识的问题,例如涉及以严格有序的方式执行线程组中的指令。
如上面所讨论的那样,我们相信本发明将在图形处理系统中具有特定应用。因此,数据处理系统优选地包括图形处理系统,执行流水线优选地包括图形处理流水线,并且执行级优选地包括执行图形着色器程序以执行图形处理操作的一个或更多个可编程图形着色级(着色器)。然而,本发明同样地适用于其中可能出现类似问题的其它形式的数据处理系统,诸如在CPU中,诸如在标量或超标量CPU流水线中。
类似地,如上面所讨论的那样,我们相信本发明将在其中执行线程可以被一起分组成线程组的数据处理系统中具有特定应用,在所述线程组中该组的线程被一次一条指令地锁步执行。因此,数据处理系统(例如图形处理系统)优选地是其中执行线程可以被一起组合成线程组的系统,其中在所述线程组中该组的线程被一次一条指令地锁步执行,并且要被执行级执行的指令的流优选地是要被线程组执行的指令的流(序列)。
指令流中能够被重新排序的指令可以是任何适合且期望的指令。在优选实施方式中,存在能够被重新排序的一组特定选择的指令类型(并且所以确定了一个或更多个特定类型的任何指令是否存在于指令流中)。在优选实施方式中,“可重新排序的”指令(即被允许乱序执行的指令)包括以下项中的一个或更多个,并且优选地包括以下项的全部:存储器加载、存储器存储、存储器原子、属性插值以及纹理查找。
能够以任何期望且适合的方式来实现指令完成跟踪器。在优选实施方式中,每个跟踪器都包括被用来跟踪指令的完成的计数器。优选地,计数器在正被该计数器跟踪的指令被发送到适当的执行单元时递增,并且在该指令实际完成时递减。在这种情况下,计数“0”将指示当前正被所述的计数器跟踪的所有指令已完成(并且大于零的计数将指示对于该跟踪器而言未完成操作的数目)。
指令跟踪器可以具有它能够在任何时候跟踪到的设定数目的指令(例如最大计数值)。这能够小至一条指令,并且对于不同的跟踪器可以是不同的。如果已达到跟踪器的指令的最大数目,则将使用该跟踪器的任何新的指令优选地使线程组停止(直到跟踪器能够跟踪新的指令为止)。
能够按照需要来选择指令完成跟踪器的数目。例如,对于执行单元和/或线程组可存在仅一个指令完成跟踪器,但在优选实施方式中,对于执行级和/或线程组存在多个指令完成跟踪器,例如2、4或8个指令完成跟踪器。例如,可以存在用于加载操作的一个跟踪器和用于存储操作的一个跟踪器,或用于加载和存储操作中的每一个的多个跟踪器等。
因此,例如对于一个(并且对于每个)线程组,优选地存在一组指令完成跟踪器,包括用于例如该线程组的一组计数器。因此,这有效地提供了能够用来实施和跟踪指令流中的指令的依赖性的“记分板”,其中每个跟踪器(计数器)都是记分板中的一个“位置(slot)”或“条目(entry)”。
有关数据(记分板的数据结构)(计数值)能够按照需要存储例如在流水线存储器的适当区中。
当能够重新排序的指令被标识出时,所述指令被分配给指令完成跟踪器。这种分配优选地以与寄存器分配类似的方式来完成。例如,在存在彼此独立的两个或更多个加载的情况下,可能期望将每个加载分配给不同的完成跟踪器,以便无需在能够执行依赖于两个加载中的仅一个的指令之前等待两个加载完成。一般而言,系统能够按照需要将指令分配给完成跟踪器以促进更高效的操作。
被分配了指令的指令完成跟踪器被在指令编码自身中指出(包括在其中)。优选地,在指令编码中存在指定指令已被分配给哪一个指令跟踪器的字段。这个指示然后被用来在指令被发送和执行时更新指令完成跟踪器(例如计数器)。
除了标识指令流中的可重新排序的指令,还针对指令流中的每条指令提供了该指令依赖于(即实际上指令对指令流中的其它指令的依赖性)哪些指令完成跟踪器(若有的话)的指示。这个指示与指令流包括在一起,优选地作为指令编码的一部分(例如在指令的字段中)。这个指示能够用它所涉及(即依赖于所述的指令(操作))的指令来编码,但在优选实施方式中它在指令流中的前一条指令中被指示。这可以允许基于指令完成跟踪信息来阻止相关指令的取指令(instruction fetch)。这能够有助于减少功率消耗。
当指令将被执行时,首先检查所指示的对该指令的指令完成跟踪器依赖性。优选地,如果所有有关指令完成跟踪器都指示它们正在跟踪的所有指令已完成(例如具有计数值“0”),则指令被执行,但是如果有关指令完成跟踪器中的任一个指示存在未完成的指令(例如,具有大于零的计数值),则该指令的操作被阻止,直到所有有关指令完成跟踪器指示它们正在跟踪的所有指令已完成为止。能够视需要而定停止指令,使得流水线例如替代地执行不相干的线程组。
这种安排允许其中它们真正地存在于指令流中的数据依赖性被实施,同时在可能的情况下仍然促进指令的乱序执行。
将从上文了解的是,本发明有效地提供了用于跟踪和实施指令流中的依赖性的“记分板”方法。然而,不像常规的记分板系统,本发明中的记分板是“显式的(explicit)”,因为记分板的存在和功能被暴露在指令编码中(依赖性等用实际的可执行代码来标记)。这例如去除了执行级(单元)自身执行任何依赖性确定的任何需要,从而例如减少功率消耗,并且允许例如编译器设置具有依赖性的指令。
在优选实施方式中,“屏障(fence)”指令能够被包括在(添加到)指令流中,所述“屏障”指令迫使指令流中位于该“屏障”指令前的具有给定类型或更多个给定类型的所有指令在位于“屏障”指令之后的任何指令被执行之前完成。这能够被用来确保在该指令流内的指令组被有序地执行。在这种情况下,“屏障”指令例如能够仅涉及一种类型的指令,例如涉及加载指令或涉及存储指令,或者涉及超过一个类型的指令,例如涉及加载指令和存储指令两者。这样的“屏障”指令能够借助于被指示为依赖于所有指令完成跟踪器(用于加载和存储“屏障”)的加载指令和存储指令、被指示为依赖于正被用来跟踪先前的加载指令的所有指令完成跟踪器的加载指令(针对加载“屏障”)等来实现。
在优选实施方式中,例如对于从相同的线程组所发出的每个加载/存储,执行流水线同样或替代地有可能隐式地插入这样的“屏障”指令。
在优选实施方式中,“分支(branch)”指令能够被包括在(添加到)具有相关联的两个(或更多个)不同的指令跟踪器依赖性集合的指令流中,其中当满足指令跟踪器依赖性的集合中的一个时选择适当的分支。这能够提供在指令流中的依赖性的多个不同集合中的第一个被满足时触发的条件分支机制。这在例如可能存在两条或更多条指令等待不同的未完成指令完成的情况下可能是所希望的,但等候的指令能够以相对于彼此的任何次序来执行。在这种情况下,分支指令能够被用来确定等待指令中的哪一个被首先满足(并且然后分支到该指令,同时其它指令随后被执行)。在优选实施方式中,如果在检查分支指令时分支条件中的任一个都不被满足,则分支指令被停止直到分支条件中的一个被满足为止。
我们相信,这样的分支指令本身可能是新的和创造性的。
因此,根据本发明的另一方面,提供了一种操作包括执行流水线的数据处理系统的方法,所述执行流水线包括执行程序指令以执行数据处理操作的一个或更多个可编程执行级,并且其中所述指令的执行可依赖于其它指令的完成,指令的完成被跟踪,并且自身的执行依赖于其它指令的完成的指令的依赖性能够与相关指令相关联;
所述方法包括以下步骤:
在要执行的指令的流中包括条件分支指令,该条件分支指令具有与它关联的两个或更多个不同的指令依赖性集合,其中指令依赖性的每个不同集合关联有指令流中要遵循的给定路径;
将指令流中的指令发送到执行级以供执行;并且
在执行指令流中的条件分支指令时,检查与指令相关联的指令依赖性组的状态,并且在检查的基础上遵循指令流中的路径。
根据本发明的另一方面,提供了一种数据处理系统,该数据处理系统包括:
执行流水线,其包括执行程序指令以执行数据处理操作的一个或更多个可编程执行级,并且其中,指令的执行可以依赖于其它指令的完成,指令的完成被跟踪,并且自身的执行依赖于其它指令的完成的指令的依赖性能够与相关指令相关联;
以及
处理电路,其被配置成:
在要执行的指令的流中包括条件分支指令,条件分支指令两个或更多个不同的指令依赖性集合,其中指令依赖性的每个不同集合关联有指令流中要遵循的给定路径;以及
将指令流中的指令发送到执行流水线以供执行,并且
其中,所述执行流水线被配置成,在执行指令流中的条件分支指令时,检查与该指令相关联的指令依赖性集合的状态,并且在该检查的基础上遵循指令流中的路径。
如本领域的技术人员将了解的那样,本发明的这些方面和实施方式能够酌情包括本文中所描述的本发明的优选和可选特征中的任何一个或更多个或全部。
由用于执行流水线的编译器来执行对能够在指令流中被重新排序的指令进行标识、对指令完成跟踪器进行分配(并且将分配结果包括在指令的编码中)以及在指令流中提供每条指令依赖于哪指令完成跟踪器(若有的话)的指示。因此,在图形处理系统的情况下,用于图形处理流水线的着色器编译器优选地执行这种操作。编译器例如并且在优选实施方式中确实可以在包括执行流水线的数据处理系统的主机处理器上运行(其中执行流水线在与主机处理器相关联的另一处理器(诸如图形处理器)上(使得该编译器和经编译的代码将在整个数据处理系统例如图形处理系统内的单独的处理器上运行))。然而,其它布置将是可能的,诸如编译器与经编译的代码在相同的处理器上运行,或者编译器在单独的处理器上运行,诸如程序在单独的系统上被预编译并且被以编译的形式发布。
本发明同样扩展到编译器本身。因此,根据本发明的另一方面,提供了一种编译器,该编译器对程序进行编译以生成用于执行流水线的执行级的指令,所述执行流水线包括执行指令以执行数据处理操作的一个或更多个可编程执行级,其中所述编译器被配置成:
针对要由执行流水线的执行级执行的指令的流,确定指令流中是否存在能够重新排序的任何指令;
将指令流中被确定为能够重新排序的每条指令分配给指令完成跟踪器,并且在对指令的编码中包括对该指令被分配到的指令完成跟踪器的指示;以及
针对指令流中依赖于已被分配到指令完成跟踪器的指令的每条指令,在指令流中提供依赖于已被分配到指令完成跟踪器的指令的指令依赖于哪一个或哪些指令完成跟踪器的指示。
因此,根据本发明的另一方面,提供了一种对程序进行编译以生成用于执行流水线的执行级的指令的方法,所述执行流水线包括执行指令以执行数据处理操作的一个或更多个可编程执行级,所述方法包括以下步骤:
针对要由执行流水线的执行级执行的指令的流,确定指令流中是否存在能够被重新排序的任何指令;
将指令流中被确定为能够被重新排序的每条指令分配给指令完成跟踪器,并且在对指令的编码中包括该指令被分配到的指令完成跟踪器的指示;以及
针对指令流中依赖于已被分配到指令完成跟踪器的指令的每条指令,在指令流中提供依赖于已被分配到指令完成跟踪器的指令的指令依赖于哪一个或哪些指令完成跟踪器的指示。
本发明同样扩展到具有能够响应于(并且使用)本发明的指令执行乱序处理的执行级的执行流水线(即在无需或没有电路来检测能够被重新排序的指令的情况下)。
因此,根据本发明的另一方面,提供了一种用于数据处理系统的执行流水线,所述执行流水线包括执行指令以执行数据处理操作的一个或更多个可编程执行级,其中:
执行流水线的至少一个执行级被配置成,在执行指令流中的指令时:
响应于指令的编码中由用于该执行级的编译器提供的指令已被分配给指令完成跟踪器的指示,使用所指示分配的指令完成跟踪器来跟踪指令的完成;并且
响应于指令的编码中由用于该执行级的编译器提供的指令流中的指令依赖于指令完成跟踪器的指示,在执行被指示为依赖于指令完成跟踪器的指令之前检查所指示的指令完成跟踪器的状态。
根据本发明的另一方面,提供了一种操作用于数据处理系统的执行流水线的方法,所述执行流水线包括执行指令以执行数据处理操作的一个或更多个可编程执行级,所述方法包括以下步骤:
执行流水线的至少一个执行级在执行指令流中的指令时:
响应于指令的编码中由用于该执行级的编译器提供的指令已被分配给指令完成跟踪器的指示,使用所指示分配的指令完成跟踪器来跟踪指令的完成;并且
响应于指令的编码中由用于该执行级的编译器提供的指令流中的指令依赖于指令完成跟踪器的指示,在执行被指示为依赖于指令完成跟踪器的指令之前检查所指示的指令完成跟踪器的状态。
如由本领域的技术人员将了解的那样,本发明的这些方面能够并且优选地酌情包括本文中所描述的本发明的优选和可选特征中的任何一个或更多个或全部。
在图形处理流水线的情况下,执行单元(级)优选地包括图形处理流水线的可编程着色级,诸如顶点着色器、片段着色器等。这些级能够被按照期望且适合的方式实现,并且能够分别酌情执行任何期望的且适合的着色(例如顶点着色、片段着色等)功能。在片段着色器的情况下,例如,该片段着色器可以渲染一个或更多个图元(primitive)以生成一组渲染输出值,例如表示用于显示的帧。这些输出值可以被导出到外部存储器以供存储和使用,诸如导出到帧缓冲器以供显示。
优选地,执行流水线的所有执行级(每个执行级)都能够以本发明的方式操作。
每个可编程处理级(执行单元)都可以包括诸如可编程处理电路的任何适合的可编程硬件元件。每个可编程处理级都可以被提供为对于处理流水线的其它可编程级而言单独的电路元件,或者可编程处理级可以共享它们的可编程处理电路(其被不同地编程以用作所期望的可编程处理级)中的一些或全部。
除了可编程处理(着色器)级,图形处理流水线还可以包含图形处理流水线可以包含的任何其它适合的且期望的处理级,诸如光栅化器、早期深度(或早期深度和模板)测试器、后期深度(或深度和模板)测试器、混合器、拼贴(tile)缓冲器、写出单元等。
本发明能够被用于所有形式的输出,图形处理流水线可以被用来生成诸如用于显示的帧、渲染为纹理输出等。所输出的(例如片段着色的)来自图形处理的数据值被优选地导出到外部例如主存储器以供存储和使用,诸如导出到帧缓冲器以供显示。
本发明适用于图形处理器的任何适合的形式或配置。它特别适用于基于拼贴(tile)的图形处理器和图形处理系统。因此在优选实施方式中,图形处理系统和图形处理流水线分别是基于拼贴的系统和流水线。
在特别优选的实施方式中,本发明的各种功能在生成和输出例如被写入显示设备的帧缓冲器的渲染片段数据的单个图形处理平台上被执行。
能够在任何适合的系统(诸如基于适当地配置的微处理器的系统)中实现本发明。在优选实施方式中,本发明被实现在基于计算机和/或微处理器的系统中。
能够以任何期望的且适合的方式来执行本发明的各种功能。例如,视需要而定,本发明的功能能够用硬件或软件加以实现。因此,例如,除非另外指示,否则本发明的各种功能元件和“装置”可以包括可操作来执行各种功能等的一个或更多个适合的处理器、控制器、功能单元、电路、处理逻辑、微处理器布置等,诸如能够被编程为以所期望的方式操作的适当地专用的硬件元件和/或可编程硬件元件。
在这里还应注意到,如由本领域的技术人员将了解的那样,可以在给定处理器上复制和/或并行地执行本发明的各种功能等。同样地,视需要,各种处理级可以共享处理电路等。
受执行上面所讨论的特定功能所必需的任何硬件的影响,数据处理系统和流水线能够另外包括数据处理流水线所包括的常见功能单元等中的任何一个或更多个或全部。
本领域的技术人员还将了解的是,所描述的本发明的方面和实施方式中的全部能够并且优选地确实视情况而定包括本文中所描述的优选和可选特征中的任何一个或更多个或全部。
依照本发明的方法可以至少部分地使用软件(例如计算机程序)来实现。因此将看到当从另外的方面查看时,本发明提供了被具体地适配成在被安装在数据处理装置上时执行本文中所描述的方法的计算机软件、包括用于在程序元件在数据处理装置上被运行时执行本文中所描述的方法的计算机软件代码部分的计算机程序元件、以及包括被适配成在程序在数据处理系统上被运行时执行本文中所描述的一个或更多个方法的所有步骤的代码装置的计算机程序。数据处理器可以是微处理器系统、可编程FPGA(现场可编程门阵列)等。
本发明同样扩展到包括这样的软件的计算机软件载体,所述软件在被用于操作图形处理器、渲染器或包括数据处理装置的微处理器系统时,与所述数据处理装置相结合地使所述处理器、渲染器或系统执行本发明的方法的步骤。这样的计算机软件载体能够是诸如ROM芯片、CD ROM、RAM、闪速存储器或磁盘的物理存储媒体,或者能够是诸如在电线之上的电子信号、诸如到卫星的光学信号或无线电信号或类似物的信号。
将进一步了解的是,并非本发明的方法的所有步骤都需要被计算机软件执行,并且因此从更广泛的方面本发明提供了计算机软件,并且这样的软件被安装在计算机软件载体上以用于执行本文中所阐述的方法的步骤中的至少一个。
本发明可以相应适当地被体现为用于与计算机系统一起使用的计算机程序产品。这样的实施方式可以包括被固定在有形的非暂时性介质上的一系列计算机可读指令,所述有形的非暂时性介质诸如计算机可读介质,例如,磁盘、CD-ROM、ROM、RAM、闪速存储器或硬盘。它还能够包括通过有形介质(包括但不限于光学或模拟通信线路)或者无形地使用无线技术(包括但不限于微波、红外线或其它传输技术)经由调制解调器或其它接口设备可传输到计算机系统的一系列计算机可读指令。该系列计算机可读指令体现了本文中先前描述的功能性中的全部或一部分。
本领域的技术人员将了解,能够用用于与许多计算机架构或操作系统一起使用的许多编程语言来编写这样的计算机可读指令。进一步地,这样的指令可以使用目前的或将来的、包括但不限于半导体、磁、或光学的任何存储器技术来存储,或者使用目前的或将来的、包括但不限于光学、红外线或微波的任何通信技术来传送。设想了这样的计算机程序产品可以被作为可移动介质与附带的印刷或电子文档(例如,紧缩套装软件)一起分发,被与计算机系统一起例如预加载在系统ROM或固定盘上,或者通过网络(例如,因特网或万维网)从服务器或电子公告板被分发。
附图说明
现将仅通过示例的方式并且参考附图来描述本发明的许多优选实施例,在附图中:
图1示出了示例性计算机图形处理系统;
图2示意性地示出了能够被以本发明的方式操作的图形处理流水线;
图3A和图3B示意性地示出了图1的图形处理系统的操作的优选实施方式;以及
图4至图7进一步图示了本发明的优选实施方式的操作。
在图中在适当的情况下同样的附图标记被用于同样的组件。
具体实施方式
现将在用于显示的计算机图形的处理的上下文中描述本发明的优选实施方式。
图1示出了典型的计算机图形处理系统。
在主机处理器1上执行的应用2(诸如游戏)将要求图形处理操作由关联的图形处理单元(图形处理流水线)3执行。为此,该应用将生成API(应用编程接口)调用,正在主机处理器1上运行的图形处理流水线3的驱动程序4将解释该API调用以向图形处理器3生成适当的命令,以生成应用2所要求的图形输出。为此,响应于来自在主机系统1上运行的应用2的命令,一组“命令”将被提供给图形处理器3以进行图形输出(例如,生成要被显示的帧)。
图2更详细地示出了本实施例的图形处理流水线3。
图2中所示出的图形处理流水线3是基于拼贴的渲染器,并且因此将如本领域中已知的那样产生渲染输出数据数组的拼贴,诸如要被生成的输出帧。
(如本领域中已知的那样,在基于拼贴的渲染中,不是像在立即模式下那样一次性地有效地处理整个渲染输出(例如,帧),而是将渲染输出(例如,要被显示的帧)划分成多个较小的子区,通常称为“拼贴”。分别渲染每个拼贴(子区)(通常是一个接一个地渲染),然后将渲染的拼贴(子区)重新组合以提供完整的渲染输出,例如用于显示的帧。在这样的方案中,渲染输出通常划分成尺寸和形状规则的子区(拼贴)(通常是例如正方形或矩形),但这不是必要的。)
如本领域中已知的那样,渲染输出数据数组通常可以是用于在显示设备(诸如屏幕或打印机)上显示的输出帧,但还可以例如包括意在供在以后的渲染通道中使用的中间数据(还被称为“渲染到纹理”输出)等。
(如本领域中已知的那样,在计算机图形图像要被显示时,它通常首先被定义为一系列图元(多边形),所述图元然后被划分(光栅化)成图形片段以进行图形渲染。在正常的图形渲染操作期间,渲染器将修改与每个片段相关联的(例如)色彩(红、绿以及蓝,RGB)和透明度(阿尔法,a)数据以使得所述片段能够被正确地显示。一旦片段已完全地遍历了渲染器,那么它们关联的数据值就被存储在存储器中,准备好输出,例如以供显示。)
图2示出了与本实施方式的操作有关的图形处理流水线3的主要元件和流水线级。如本领域的技术人员将了解的那样,可以存在图2中未被图示的图形处理流水线的其它元件。在这里还应注意到,图2仅是示意的,并且例如,在实践中所示出的功能单元和流水线级可以共享有效的硬件电路,即使它们在图2中被示意性地示出为单独的级。还将了解的是,如图2中所示出的图形处理流水线的级、元件以及单元等的每一个都可以视需要而定被实现,并且将相应地包括例如适当的电路和/或处理逻辑等,以用于执行所必要的操作和功能。
如图2中所示,图形处理流水线3包括多个级,所述级包括顶点着色器20、外壳着色器(hull shader)21、细分器(tesselator)22、域着色器23、几何形状着色器24、光栅化级25、早期Z(深度)和模板测试级26、形式为片段着色级的渲染器27、后期Z(深度)和模板测试级28、混合级29、拼贴缓冲器30以及下采样和写出(多重采样解析)级31。
如本领域中已知的那样,顶点渲染器20取得与顶点等相关联的输入数据值(针对要被生成的输出所定义的),并且处理这些数据值以生成一组对应的“顶点着色的”输出数据值以供由图形处理流水线3的后续级使用。顶点着色例如修改输入数据以考虑要被渲染的图像中的照明的效果。
如本领域中已知的那样,外壳着色器21对补片控制点的组执行操作并且生成被称为补片常数的附加数据,细分级22对几何形状进行细分以创建外壳的高阶表示,域着色器23对由细分级(与顶点着色器类似)输出的顶点执行操作,并且几何形状着色器24处理诸如三角形、点或线的整个图元。这些级连同顶点着色器21一起响应于提供给图形处理流水线3的命令和顶点数据而有效地执行所有必要的片段前端操作,诸如变换和照明操作,并且执行图元设置以便设置要被渲染的图元。
图形处理流水线3的光栅化级25像本领域中已知的那样操作,以便使组成渲染输出(例如要显示的图像)的图元光栅化成单个图形片段以供处理。为了做到这一点,光栅化器25接收用于渲染的图形图元,使图元光栅化成采样点并且生成具有适当的位置(表示适当的采样位置)的图形片段以对图元进行渲染。
由光栅化器所生成的片段被继续发送到流水线的其余部分以供处理。
早期Z/模板级26对从光栅化器25接收到的片段执行Z(深度)测试(在本领域内是已知的),以便查看是否能够在这个级丢弃(剔除)任何片段。为了做到这一点,它将从光栅化器25发出的片段(相关联)的深度值与已渲染的片段的深度值(这些深度值被存储在作为拼贴缓冲器30的一部分的深度(Z)缓冲器中)相比较以确定新的片段将被已经被渲染的片段封闭(与否)。同时,执行早期模板测试。
如本领域中已知的那样,通过片段早期Z和模板测试级26的片段然后被发送到片段着色级27。片段着色级27对通过早期Z和模板测试的片段执行适当的片段处理操作,以便处理片段来生成被适当渲染的片段数据。
如本领域中已知的那样,这种片段处理可以包括任何适合的且期望的片段着色处理,诸如对片段执行片段着色器程序、对片段应用纹理、对片段应用雾化或其它操作,以便生成适当的片段数据。在本实施方式中,片段着色级27具有着色器流水线(可编程片段着色器)的形式。
然后,存在“后期”片段Z和模板测试级28,其尤其对经过着色的片段执行流水线深度测试的末期以确定渲染的片段是否将实际上在最后的图像中被看到。这种深度测试对于存储在拼贴缓冲器30中的Z-缓冲器中的片段的位置使用Z-缓冲器值以通过如本领域中已知的那样将从片段着色级27发出的(相关联的)片段的深度值与已经被渲染的(如存储在深度缓冲器中的)片段的深度值相比较来确定新的片段的片段数据是否应该替换已经被渲染的片段的片段值。这种后期片段深度和模板测试级28同样对片段执行任何必要的“后期”阿尔法和/或模板测试。
如果需要,通过后期片段测试级28的片段在混合器29中经历与已存储在拼贴缓冲器30中的片段的任何必要的混合操作。在这个级还执行对片段所必需的任何其它剩余的操作,诸如抖动等(未示出)。
最后,(混合的)输出片段数据(值)被写入拼贴缓冲器30,片段数据值可以从拼贴缓冲器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调用而完成的绘图调用准备的一部分)。
如上面所讨论的那样,图形处理流水线中的每个着色器都是通过针对要生成的图形输出中的每个图形项目运行小程序来执行图形处理的处理单元(“项目”在这点上通常是顶点、片段或像素)。本实施方式涉及其中要被着色器执行的执行线程(其中每个线程都对应于一个图形项目)已被组织成将被一次一条指令地锁步执行的线程“组”或“束”的情形。
在本实施方式中,“记分板”方案被用来跟踪线程组的指令的依赖性,并且用来允许线程组中的指令的乱序执行。这被如下实现。
本实施方式使用支持八个指令完成跟踪器(对于每个相应的线程组具有八个“记分板”位置(slot)或条目(entry))的记分板。视需要其它数目的记分板条目(位置(指令完成跟踪器))将是可能的。
记分板条目(指令完成跟踪器)中的每一个都具有与它相关联的计数器。计数器具有有限的宽度,并且如果计数器已达到其最大值,则使用该记分板位置(计数器)来执行可重新排序的指令的尝试使所关联的线程组停止(直到计数器已减少为止)。计数器宽度可以小至一比特。对于不同的位置还将有可能具有不同的宽度。
记分板的数据(位置计数器值)能够以任何适合的方式实现,例如被存储在适合的流水线存储器中。
当在主机处理器1上执行的图形处理流水线着色器编译器处理着色器程序的指令流时,它标识指令流中被允许乱序执行的指令(“可重新排序的”指令)。在本实施方式中,被标识的“可重新排序的”指令(如果存在的话)是:存储器加载和存储、属性插值以及纹理查找。其它方案当然将是可能的。
如果编译器标识了指令流中的可重新排序的指令,则它将所述指令分配给记分板位置(条目)(指令完成跟踪器)中的一个,并且在指令的字段中编码指定所述指令被分配到记分板位置中的哪一个的数据。能够视需要而定(例如,依赖于指令的性质和记分板位置的当前使用)来完成这种分配。
当可重新排序的指令被发送到适当的着色器以供执行时,所指示的记分板位置(条目)使其计数器递增(以指示现存在与该位置相关联的未完成操作(指令))。当指令实际地完成时,该位置的计数器相应地递减。
除了标识指令流中的可重新排序的指令,编译器还为指令流中的每条指令(无论可重新排序与否)提供指示该指令依赖于哪些记分板位置(指令完成跟踪器)(若有的话)的注解。这种注解被用来在它们真正地存在于着色器程序中时实施数据依赖性。
在本实施方式中,这种注解未被实际地放置在需要相关指令完成的指令上,相反地,它被放置(编码)在前一条指令上。这有利于阻止依赖性尚未被满足的相关指令的取指令。
指令然后被发送到着色器以供执行。在着色器中,在取出每条指令之前,检查所指示的关联的(一个或更多个)依赖性位置(指令完成跟踪器)的计数器值。如果所有关联的位置都全部都具有计数器值0(从而指示当前指令所依赖的所有指令已完成),则指令被取出并且执行。如果所有关联的位置不具有计数器值0(从而指示当前指令所依赖的指令中的至少一些仍然尚未完成),则指令的取出(以及因此执行)被阻止(使用任何适合的机制)直到所有关联的位置的计数器都达到0为止。
图3A和图3B例示了这个过程。在到达指令流中的一指令时(步骤40),编译器确定该指令是否是可重新排序的指令(步骤41)。如果是,则编译器将记分板位置分配给该指令并且将所述分配编码在指令中(步骤42)。如果不是,则不分配记分板位置。
然后,编译器确定该指令是否依赖于任何较早的指令(步骤43),并且用所确定的当前指令的依赖性(若有的话)的有关记分板位置给前一条指令作注解(步骤44)。
然后,指令被发送到着色器(步骤45)。当可重新排序的指令被发送时,用于它关联的插槽的计数器递增(步骤46、47)。相应地,当该指令完成时,计数器被递减(步骤51)。
当指令将被执行时,检查被指示为与该指令相关联的(一个或更多个)依赖性位置的计数器值(步骤48)。如果所有关联的位置全部都具有计数器值0,则执行指令(步骤49)。如果所有关联的位置不具有计数器值0,则阻止指令的执行直到所有关联的位置的计数器到达0为止(步骤50)。
图4例示了在本发明的实施方式中使用的针对包括三条指令的短指令序列的记分板方案,第一指令将值从存储器加载到寄存器R0中,第二指令将常数值移入寄存器R1,并且第三指令将寄存器R0和R1的内容相加从而将结果放在寄存器R2中。
在这种情况下,如图4所示,编译器将把第一指令标识为可重新排序的指令,并且因此在这个示例中将第一指令分配到记分板位置(条目)0。编译器还将第三指令标识为依赖于第一指令(加载指令)的完成,并且所以将第三指令注解为依赖于记分板条目(位置)0。
然后,指令被发送到流水线。如图4中所示,当第一指令被发送时,记分板位置0的计数器递增以表明加载指令是未决的。在这种情况下,假定加载指令由于高速缓存未命中而花费很长时间完成。
然后,处理移至第二指令,因为第二指令不依赖于任何记分板位置,所述第二指令能够执行。然后,执行单元试图执行第三指令,但根据记分板条目0而确定第三指令所依赖的加载操作仍然未完成。因此,这个阶段不能够执行第三ADD指令。最后,当记分板条目0的计数是0时,第三ADD指令能够执行,加载完成并且能够发出ADD。
图5示出了对应的操作,但第三ADD指令的依赖性在对第二移动指令的编码中指示(如图5中所示)。在这种情况下,标识了在执行移动指令时下一条指令依赖于记分板条目0,所以第三ADD指令的取出被推迟直至第一加载指令已完成为止。
图6示出了用来实施相关的存储操作的本发明的示例性操作。在这种情况下,存在四个存储指令的序列,其中假定第四存储指令依赖于第二和第三存储指令的完成。为此,如图6中所示,第二和第三存储指令被分配给相同的记分板位置(条目)(在这种情况下是记分板条目1),并且第四相关存储指令被指示为依赖于该记分板条目,使得仅在第二和第三存储指令已完成时执行该第四存储指令。(然而,如图6中所示,第四存储指令不依赖于第一存储指令,因此即使第一存储指令仍然尚未完成也能够执行第四存储指令)。
视需要,上述实施方式的各种另选和添加将是可能的。
例如,在上述实施方式中,未执行除显式记分板所提供的依赖性跟踪以外的其它依赖性跟踪。这意味着在存在显式记分板的情况下,来自线程的测试、读、写以及原子以相对于彼此的任意次序执行。情况是这样的,如果编译器不能够证明存储器写不与前一个读或写重叠,则编译器将写标记为依赖于所述前一个读或写。类似地,如果编译器不能够证明存储器读不与前一个写重叠,则编译器将读标记为依赖于所有受影响先前的写。
作为对此的替代方案,在另一个实施方式中,编译器能够在指令流中插入“存储器屏障(memory fence)”指令。该指令是告诉执行单元(例如,加载/存储单元)对例如来自线程组的指令实施排序的指令。例如,在屏障指令之前发出的所有加载/存储指令都被要求在屏障之后的加载/存储指令中的任一个之前完成。这能够例如通过使用被指示为依赖于所有记分板“位置”的指令来实现。还将有可能具有仅阻塞加载的重新排序的“加载屏障(load fence)”指令,以及仅阻塞存储的重新排序的“存储屏障(store fence)”指令。
另一可能性将是具有针对从相同的线程组发出的每个加载/存储隐式地插入这样的存储器屏障的加载/存储流水线。
本申请人已经认识到,在一些情况下,执行单元可能正等待两个或更多个未完成的项目,但它们能够被以任意次序处理。对于这种情况,为了使执行效率最大化,能够使用记分板“branch”指令(在编译器识别到这种情况时被编译器插入指令流中)。这种指令是测试记分板位置(条目)的子集的条件分支:如果要被测试的一个子集的所有记分板位置都具有等于零的计数器值,则分支被采取,如果要被测试的另一个子集的所有记分板位置都具有等于零的计数器值,则另一分支(路径)被采取,否则分支指令被停止。要测试的记分板位置的集合被编码在该分支指令中。应该用两个不同的依赖性集合给这样的记分板分支指令作注解,使得只要两个集合中的至少一个满足,指令就被执行。分支对于线程组中的所有线程总是取相同的方向,使得它不能够引起线程组发散。
图7示意性地示出了记分板分支指令的操作。在这个示例中,分支指令是序列中的第三指令,并且依赖于正被完成的记分板条目0(在这种情况下,它分支到序列中的指令7),并且具有依赖于记分板条目0或1的第二依赖性子集(在这种情况下,执行继续序列中的下一条指令(在这种情况下是指令4))。如果分支条件都不满足,则分支指令的执行被停止。
从上文可以看到,本发明至少在其优选实施方式中提供了用于在例如基于线程组的GPU着色器核心中促进线程组的指令的乱序执行的机制。这有助于增加能够被用给定数量的硬件资源利用的并行性的数量,并且因此有助于改进执行单元利用率。
这至少在本发明的优选实施例中通过使用“显式”记分板机制来实现,其中指令依赖性被编码在指令本身中。
Claims (25)
1.一种操作数据处理系统的方法,所述数据处理系统包括执行流水线,所述执行流水线包括执行指令以执行数据处理操作的一个或更多个可编程执行级,所述方法包括以下步骤:
针对要由执行级执行的指令的流,确定所述指令流中是否存在能够被重新排序的任何指令;
将所述指令流中被确定为能够被重新排序的每条指令分配给指令完成跟踪器,并且在对所述指令的编码中包括所述指令被分配到的所述指令完成跟踪器的指示;
针对所述指令流中依赖于已被分配给指令完成跟踪器的指令的每条指令,在所述指令流中提供依赖于已被分配给指令完成跟踪器的指令的所述指令依赖于哪一个或哪些指令跟踪器的指示;
将所述指令流中的指令发送到所述执行级以供执行;以及
当执行所述指令流中的所述指令时:
使用所分配的指令完成跟踪器来跟踪所述指令的完成;以及
针对被指示为依赖于指令完成跟踪器的任何指令,在执行所述指令之前检查
所述指令完成跟踪器的状态。
2.根据权利要求1所述的方法,其中,所述指令流中能够被重新排序的所述指令包括:存储器加载、存储器存储、存储器原子、属性插值以及纹理查找。
3.根据权利要求1或2所述的方法,其中,每个指令完成跟踪器都包括用于跟踪所述指令的完成的计数器。
4.根据前述权利要求中任一项所述的方法,其中,指令已被分配到的所述指令完成跟踪器在指定所述指令已被分配给哪一个指令跟踪器的指令编码中的字段中被指示。
5.根据前述权利要求中任一项所述的方法,其中,如果所述指令流中的指令依赖于指令完成跟踪器,则针对所述指令流中的所述指令而提供的所述指令依赖于哪些指令完成跟踪器的指示在所述指令流中的前一条指令中被指出。
6.根据前述权利要求中任一项所述的方法,所述方法还包括以下步骤:在所述指令流中包括屏障指令,所述屏障指令迫使所述指令流中位于所述屏障指令之前的具有一个或更多个给定类型的所有指令在位于所述屏障指令之后的指令被执行之前完成。
7.根据前述权利要求中任一项所述的方法,该方法还包括以下步骤:在所述指令流中包括分支指令,所述分支指令具有与它相关联的两个或更多个不同的指令跟踪器依赖性集合,当满足指令跟踪器依赖性的所述集合中的一个集合时选择分支。
8.根据前述权利要求中任一项所述的方法,其中,所述数据处理系统包括图形处理系统,所述图形处理系统包括图形处理流水线,所述图形处理流水线包括执行图形着色器程序以执行图形处理操作的一个或更多个可编程着色器级。
9.一种操作数据处理系统的方法,所述数据处理系统包括执行流水线,所述执行流水线包括执行指令以执行数据处理操作的一个或更多个可编程执行级,并且其中,指令的执行可能依赖于其它指令的完成,指令的完成被跟踪,并且自身的执行依赖于其它指令的完成的指令的依赖性能够与相关指令相关联;
所述方法包括以下步骤:
在要执行的指令的流中包括条件分支指令,所述条件分支指令具有与它相关
联的两个或更多个不同的指令依赖性集合,其中,指令依赖性的每个不同集合关
联有所述指令流中要遵循的给定路径;
将所述指令流中的指令发送到执行级以供执行;以及
当执行所述指令流中的所述条件分支指令时,检查与所述指令相关联的指令
依赖性的所述集合的状态,并且在所述检查的基础上遵循所述指令流中的路径。
10.一种数据处理系统,该数据处理系统包括:
执行流水线,其包括执行指令以执行数据处理操作的一个或更多个可编程执行级;以及
编译器,其对用于所述执行流水线的程序进行编译以生成针对所述执行流水线的执行级的指令的流;
其中:
所述编译器被配置成:
针对要被执行级执行的指令的流,确定所述指令流中是否存在能够被重新排序的任何指令;
将所述指令流中被确定为能够被重新排序的每条指令分配给指令完成跟踪器,并且在对所述指令的编码中包括所述指令被分配到的所述指令完成跟踪器的指示;以及
针对所述指令流中依赖于已被分配给指令完成跟踪器的指令的每条指令,在所述指令流中提供依赖于已被分配给指令完成跟踪器的指令的所述指令依赖于哪一个或哪些指令跟踪器的指示;
并且其中:
所述执行流水线的至少一个执行级被配置成在执行所述指令流中的指令时:
使用所分配的指令完成跟踪器来跟踪所述指令的完成;以及
针对被指示为依赖于指令完成跟踪器的任何指令,在执行所述指令之前检查所述指令完成跟踪器的状态。
11.根据权利要求10所述的数据处理系统,其中,所述指令流中能够被重新排序的所述指令包括:存储器加载、存储器存储、存储器原子、属性插值以及纹理查找。
12.根据权利要求10或11所述的数据处理系统,其中,每个指令完成跟踪器都包括用于跟踪所述指令的完成的计数器。
13.根据权利要求10至12中任一项所述的数据处理系统,其中,指令已被分配到的所述指令完成跟踪器在指定所述指令已被分配给哪一个指令跟踪器的指令编码中的字段中被指示。
14.根据权利要求10至13中任一项所述的数据处理系统,其中,如果所述指令流中的指令依赖于指令完成跟踪器,则针对所述指令流中的所述指令而提供的所述指令依赖于哪些指令完成跟踪器的指示在所述指令流中的前一条指令中被指出。
15.根据权利要求10至14中任一项所述的数据处理系统,其中,所述编译器被进一步配置成在所述指令流中包括屏障指令,所述屏障指令迫使所述指令流中位于所述屏障指令之前的具有一个或更多个给定类型的所有指令在位于所述屏障指令之后的指令被执行之前完成。
16.根据权利要求10至15中任一项所述的数据处理系统,其中,所述编译器被进一步配置成在所述指令流中包括分支指令,所述分支指令具有与它相关联的两个或更多个不同的指令跟踪器依赖性集合,当满足指令跟踪器依赖性的所述集合中的一个集合时选择分支。
17.根据权利要求10至16中任一项所述的数据处理系统,其中,所述数据处理系统包括图形处理系统,所述图形处理系统包括图形处理流水线,所述图形处理流水线包括执行图形着色器程序以执行图形处理操作的一个或更多个可编程着色器级。
18.一种编译器,所述编译器对程序进行编译以生成针对执行流水线的执行级的指令,所述执行流水线包括执行指令以执行数据处理操作的一个或更多个可编程执行级,其中,所述编译器被配置成:
针对要由所述执行流水线的执行级执行的指令的流,确定所述指令流中是否存在能够被重新排序的任何指令;
将所述指令流中被确定为能够被重新排序的每条指令分配给指令完成跟踪器,并且在对所述指令的编码中包括所述指令被分配到的所述指令完成跟踪器的指示;以及
针对所述指令流中依赖于已被分配给指令完成跟踪器的指令的每条指令,在所述指令流中提供依赖于已被分配给指令完成跟踪器的指令的所述指令依赖于哪一个或哪些指令跟踪器的指示。
19.一种用于数据处理系统的执行流水线,所述执行流水线包括:
执行指令以执行数据处理操作的一个或更多个可编程执行级,并且其中:
所述执行流水线的至少一个执行级被配置成在执行指令流中的指令时:
响应于编译器针对所述执行级在指令的编码中提供的所述指令已被分配给指令完成跟踪器的指示,使用所指示分配的指令完成跟踪器来跟踪所述指令的完成;并且
响应于编译器针对所述执行级在指令的编码中提供的所述指令流中的指令依赖于指令完成跟踪器的指示,在执行被指示为依赖于所述指令完成跟踪器的所述指令之前检查所指示的指令完成跟踪器的状态。
20.一种数据处理系统,所述数据处理系统包括:
执行流水线,其包括执行指令以执行数据处理操作的一个或更多个可编程执行级,并且其中,指令的执行可能依赖于其它指令的完成,指令的完成被跟踪,并且自身的执行依赖于其它指令的完成的指令的依赖性能够与相关指令相关联;以及
处理电路,其被配置成:
在要执行的指令的流中包括条件分支指令,所述条件分支指令具有与它相关联的两个或更多个不同的指令依赖性集合,其中,指令依赖性的每个不同集合关联有所述指令流中要遵循的给定路径;以及
将所述指令流中的指令发送到所述执行流水线以供执行,并且
其中,所述执行流水线被配置成,当执行所述指令流中的所述条件分支指令时,检查与所述指令相关联的指令依赖性的所述集合的状态,并且在所述检查的基础上遵循所述指令流中的路径。
21.一种计算机程序,所述计算机程序包括适于在所述程序在数据处理系统上被运行时执行根据权利要求1至9中任一项所述的方法的所有步骤。
22.一种操作大体上如本文中参考附图中的任一个所描述的数据处理系统的方法。
23.一种大体上如本文中参考附图中的任一个在描述的数据处理系统。
24.一种大体上如本文中参考附图中的任一个所描述的用于数据处理系统的编译器。
25.一种大体上如本文中参考附图中的任一个所描述的用于数据处理系统的执行流水线。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB1309765.4A GB2514618B (en) | 2013-05-31 | 2013-05-31 | Data processing systems |
GB1309765.4 | 2013-05-31 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104217393A true CN104217393A (zh) | 2014-12-17 |
CN104217393B CN104217393B (zh) | 2019-07-16 |
Family
ID=48805563
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410239143.8A Active CN104217393B (zh) | 2013-05-31 | 2014-05-30 | 数据处理系统及其操作方法、编译器、计算机可读介质 |
Country Status (4)
Country | Link |
---|---|
US (1) | US10176546B2 (zh) |
JP (1) | JP6403436B2 (zh) |
CN (1) | CN104217393B (zh) |
GB (1) | GB2514618B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106327420A (zh) * | 2015-07-03 | 2017-01-11 | Arm有限公司 | 数据处理系统 |
CN106355544A (zh) * | 2015-07-15 | 2017-01-25 | Arm有限公司 | 数据处理系统 |
CN108027762A (zh) * | 2016-06-24 | 2018-05-11 | Arm 有限公司 | 生成和处理指示处理电路的指令执行的跟踪流的装置和方法 |
US10740074B2 (en) * | 2018-11-30 | 2020-08-11 | Advanced Micro Devices, Inc. | Conditional construct splitting for latency hiding |
CN115510342A (zh) * | 2022-11-23 | 2022-12-23 | 沐曦集成电路(上海)有限公司 | 利用多级指针维护乱序数据的方法、装置、介质及设备 |
Families Citing this family (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8203984B2 (en) | 2008-12-19 | 2012-06-19 | Intel Corporation | Power management for wireless networks |
US9928564B2 (en) * | 2014-06-26 | 2018-03-27 | Intel Corporation | Efficient hardware mechanism to ensure shared resource data coherency across draw calls |
US9799088B2 (en) * | 2014-08-21 | 2017-10-24 | Qualcomm Incorporated | Render target command reordering in graphics processing |
US9824413B2 (en) * | 2014-11-15 | 2017-11-21 | Intel Corporation | Sort-free threading model for a multi-threaded graphics pipeline |
US9824414B2 (en) | 2014-12-09 | 2017-11-21 | Intel Corporation | Thread dispatching for graphics processors |
GB2537137B (en) | 2015-04-08 | 2021-02-17 | Advanced Risc Mach Ltd | Graphics processing systems |
US10796397B2 (en) * | 2015-06-12 | 2020-10-06 | Intel Corporation | Facilitating dynamic runtime transformation of graphics processing commands for improved graphics performance at computing devices |
CN106708723B (zh) * | 2015-11-13 | 2019-11-08 | 阿里巴巴集团控股有限公司 | 一种测试、校验方法及装置 |
US10460513B2 (en) * | 2016-09-22 | 2019-10-29 | Advanced Micro Devices, Inc. | Combined world-space pipeline shader stages |
US10310856B2 (en) | 2016-11-09 | 2019-06-04 | Arm Limited | Disabling thread execution when executing instructions in a data processing system |
US10649521B2 (en) | 2017-04-24 | 2020-05-12 | Intel Corporation | Compensating for high head movement in head-mounted displays |
GB2563582B (en) | 2017-06-16 | 2020-01-01 | Imagination Tech Ltd | Methods and systems for inter-pipeline data hazard avoidance |
JP6944107B2 (ja) * | 2017-07-11 | 2021-10-06 | 富士通株式会社 | 情報処理装置、情報処理システム及びプログラム |
US10127626B1 (en) * | 2017-07-21 | 2018-11-13 | Arm Limited | Method and apparatus improving the execution of instructions by execution threads in data processing systems |
US10643369B2 (en) * | 2018-05-30 | 2020-05-05 | Advanced Micro Devices, Inc. | Compiler-assisted techniques for memory use reduction in graphics pipeline |
US10884720B2 (en) * | 2018-10-04 | 2021-01-05 | Microsoft Technology Licensing, Llc | Memory ordering annotations for binary emulation |
US10943323B2 (en) * | 2018-12-28 | 2021-03-09 | Arm Limited | Data processing systems |
US11687347B2 (en) * | 2021-05-25 | 2023-06-27 | Andes Technology Corporation | Microprocessor and method for speculatively issuing load/store instruction with non-deterministic access time using scoreboard |
US11892972B2 (en) * | 2021-09-08 | 2024-02-06 | Arm Limited | Synchronization mechanisms for a multi-core processor using wait commands having either a blocking or a non-blocking state |
US20230244475A1 (en) * | 2022-01-28 | 2023-08-03 | International Business Machines Corporation | Automatic extract, transform and load accelerator for data platform in distributed computing environment |
CN118245187A (zh) * | 2024-03-29 | 2024-06-25 | 海光信息技术股份有限公司 | 线程调度方法及装置、电子设备及存储介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1945536A (zh) * | 2005-09-30 | 2007-04-11 | 英特尔公司 | 利用指针来再排序指令的存储器布局 |
CN101620527A (zh) * | 2008-06-30 | 2010-01-06 | 英特尔公司 | 图形处理中管理活动线程依赖关系 |
CN101647000A (zh) * | 2007-03-28 | 2010-02-10 | 高通股份有限公司 | 用于在处理器中的执行级之前执行指令的系统及方法 |
US20120278595A1 (en) * | 2011-04-29 | 2012-11-01 | International Business Machines Corporation | Determining each stall reason for each stalled instruction within a group of instructions during a pipeline stall |
US20130038620A1 (en) * | 2009-10-05 | 2013-02-14 | Ziyad S. Hakura | Time slice processing of tessellation and geometry shaders |
US20130089109A1 (en) * | 2010-05-18 | 2013-04-11 | Lsi Corporation | Thread Synchronization in a Multi-Thread, Multi-Flow Network Communications Processor Architecture |
WO2013048367A9 (en) * | 2011-09-26 | 2013-11-14 | Intel Corporation | Instruction and logic to provide vector loads and stores with strides and masking functionality |
Family Cites Families (261)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5021945A (en) * | 1985-10-31 | 1991-06-04 | Mcc Development, Ltd. | Parallel processor system for processing natural concurrencies and method therefor |
US5202975A (en) * | 1990-06-11 | 1993-04-13 | Supercomputer Systems Limited Partnership | Method for optimizing instruction scheduling for a processor having multiple functional resources |
US5488729A (en) * | 1991-05-15 | 1996-01-30 | Ross Technology, Inc. | Central processing unit architecture with symmetric instruction scheduling to achieve multiple instruction launch and execution |
EP0636256B1 (en) * | 1992-03-31 | 1997-06-04 | Seiko Epson Corporation | Superscalar risc processor instruction scheduling |
JP2786574B2 (ja) * | 1992-05-06 | 1998-08-13 | インターナショナル・ビジネス・マシーンズ・コーポレイション | コンピュータ・システムにおける順不同ロード動作の性能を改善する方法と装置 |
US5450560A (en) * | 1992-12-21 | 1995-09-12 | Motorola, Inc. | Pointer for use with a buffer and method of operation |
US5542059A (en) * | 1994-01-11 | 1996-07-30 | Exponential Technology, Inc. | Dual instruction set processor having a pipeline with a pipestage functional unit that is relocatable in time and sequence order |
US5584037A (en) * | 1994-03-01 | 1996-12-10 | Intel Corporation | Entry allocation in a circular buffer |
US5559976A (en) * | 1994-03-31 | 1996-09-24 | International Business Machines Corporation | System for instruction completion independent of result write-back responsive to both exception free completion of execution and completion of all logically prior instructions |
TW260765B (zh) * | 1994-03-31 | 1995-10-21 | Ibm | |
US5649225A (en) * | 1994-06-01 | 1997-07-15 | Advanced Micro Devices, Inc. | Resynchronization of a superscalar processor |
US5627981A (en) * | 1994-07-01 | 1997-05-06 | Digital Equipment Corporation | Software mechanism for accurately handling exceptions generated by instructions scheduled speculatively due to branch elimination |
TW295646B (zh) * | 1995-01-25 | 1997-01-11 | Ibm | |
US5699536A (en) * | 1995-04-13 | 1997-12-16 | International Business Machines Corporation | Computer processing system employing dynamic instruction formatting |
DE69623461T2 (de) * | 1995-06-01 | 2003-07-24 | Fujitsu Ltd., Kawasaki | Koordination von befehlsausgabe in einem parallelen befehlsverarbeitungssystem |
US6112019A (en) * | 1995-06-12 | 2000-08-29 | Georgia Tech Research Corp. | Distributed instruction queue |
US5911057A (en) * | 1995-12-19 | 1999-06-08 | Texas Instruments Incorporated | Superscalar microprocessor having combined register and memory renaming circuits, systems, and methods |
US5761515A (en) * | 1996-03-14 | 1998-06-02 | International Business Machines Corporation | Branch on cache hit/miss for compiler-assisted miss delay tolerance |
JPH09265397A (ja) * | 1996-03-29 | 1997-10-07 | Hitachi Ltd | Vliw命令用プロセッサ |
US5870616A (en) * | 1996-10-04 | 1999-02-09 | International Business Machines Corporation | System and method for reducing power consumption in an electronic circuit |
US6189072B1 (en) * | 1996-12-17 | 2001-02-13 | International Business Machines Corporation | Performance monitoring of cache misses and instructions completed for instruction parallelism analysis |
US5938760A (en) * | 1996-12-17 | 1999-08-17 | International Business Machines Corporation | System and method for performance monitoring of instructions in a re-order buffer |
US5961654A (en) * | 1996-12-17 | 1999-10-05 | International Business Machines Corporation | Operand fetch bandwidth analysis |
US5918005A (en) * | 1997-03-25 | 1999-06-29 | International Business Machines Corporation | Apparatus region-based detection of interference among reordered memory operations in a processor |
US5928334A (en) * | 1997-03-28 | 1999-07-27 | International Business Machines Corporation | Hardware verification tool for multiprocessors |
US6260191B1 (en) * | 1997-04-07 | 2001-07-10 | Hewlett-Packard Company | User controlled relaxation of optimization constraints related to volatile memory references |
US5937191A (en) * | 1997-06-03 | 1999-08-10 | Ncr Corporation | Determining and reporting data accessing activity of a program |
US6139199A (en) * | 1997-06-11 | 2000-10-31 | Sun Microsystems, Inc. | Fast just-in-time (JIT) scheduler |
US6044222A (en) * | 1997-06-23 | 2000-03-28 | International Business Machines Corporation | System, method, and program product for loop instruction scheduling hardware lookahead |
US6748587B1 (en) * | 1998-01-02 | 2004-06-08 | Hewlett-Packard Development Company, L.P. | Programmatic access to the widest mode floating-point arithmetic supported by a processor |
US6988183B1 (en) * | 1998-06-26 | 2006-01-17 | Derek Chi-Lan Wong | Methods for increasing instruction-level parallelism in microprocessors and digital system |
US6163839A (en) * | 1998-09-30 | 2000-12-19 | Intel Corporation | Non-stalling circular counterflow pipeline processor with reorder buffer |
US6636950B1 (en) * | 1998-12-17 | 2003-10-21 | Massachusetts Institute Of Technology | Computer architecture for shared memory access |
US6189088B1 (en) * | 1999-02-03 | 2001-02-13 | International Business Machines Corporation | Forwarding stored dara fetched for out-of-order load/read operation to over-taken operation read-accessing same memory location |
US6463579B1 (en) * | 1999-02-17 | 2002-10-08 | Intel Corporation | System and method for generating recovery code |
US6247114B1 (en) * | 1999-02-19 | 2001-06-12 | Advanced Micro Devices, Inc. | Rapid selection of oldest eligible entry in a queue |
US6499116B1 (en) * | 1999-03-31 | 2002-12-24 | International Business Machines Corp. | Performance of data stream touch events |
US6487715B1 (en) * | 1999-04-16 | 2002-11-26 | Sun Microsystems, Inc. | Dynamic code motion optimization and path tracing |
US7430670B1 (en) * | 1999-07-29 | 2008-09-30 | Intertrust Technologies Corp. | Software self-defense systems and methods |
US6425072B1 (en) * | 1999-08-31 | 2002-07-23 | Advanced Micro Devices, Inc. | System for implementing a register free-list by using swap bit to select first or second register tag in retire queue |
US6487716B1 (en) * | 1999-10-08 | 2002-11-26 | International Business Machines Corporation | Methods and apparatus for optimizing programs in the presence of exceptions |
US6654869B1 (en) * | 1999-10-28 | 2003-11-25 | International Business Machines Corporation | Assigning a group tag to an instruction group wherein the group tag is recorded in the completion table along with a single instruction address for the group to facilitate in exception handling |
US6574727B1 (en) * | 1999-11-04 | 2003-06-03 | International Business Machines Corporation | Method and apparatus for instruction sampling for performance monitoring and debug |
US6550002B1 (en) * | 1999-11-04 | 2003-04-15 | International Business Machines Corporation | Method and system for detecting a flush of an instruction without a flush indicator |
US6530042B1 (en) * | 1999-11-08 | 2003-03-04 | International Business Machines Corporation | Method and apparatus for monitoring the performance of internal queues in a microprocessor |
US6539502B1 (en) * | 1999-11-08 | 2003-03-25 | International Business Machines Corporation | Method and apparatus for identifying instructions for performance monitoring in a microprocessor |
US6591342B1 (en) * | 1999-12-14 | 2003-07-08 | Intel Corporation | Memory disambiguation for large instruction windows |
US6697932B1 (en) * | 1999-12-30 | 2004-02-24 | Intel Corporation | System and method for early resolution of low confidence branches and safe data cache accesses |
US6651163B1 (en) * | 2000-03-08 | 2003-11-18 | Advanced Micro Devices, Inc. | Exception handling with reduced overhead in a multithreaded multiprocessing system |
GB2367653B (en) * | 2000-10-05 | 2004-10-20 | Advanced Risc Mach Ltd | Restarting translated instructions |
GB2367654B (en) * | 2000-10-05 | 2004-10-27 | Advanced Risc Mach Ltd | Storing stack operands in registers |
GB2367651B (en) * | 2000-10-05 | 2004-12-29 | Advanced Risc Mach Ltd | Hardware instruction translation within a processor pipeline |
US6675376B2 (en) * | 2000-12-29 | 2004-01-06 | Intel Corporation | System and method for fusing instructions |
GB2376097B (en) * | 2001-05-31 | 2005-04-06 | Advanced Risc Mach Ltd | Configuration control within data processing systems |
US20030005422A1 (en) * | 2001-07-02 | 2003-01-02 | Nicolai Kosche | Technique for improving the prediction rate of dynamically unpredictable branches |
US7434030B2 (en) * | 2001-09-12 | 2008-10-07 | Renesas Technology Corp. | Processor system having accelerator of Java-type of programming language |
US20030074655A1 (en) * | 2001-09-27 | 2003-04-17 | Robison Arch D. | Method and apparatus for alias analysis for restricted pointers |
US7055021B2 (en) * | 2002-02-05 | 2006-05-30 | Sun Microsystems, Inc. | Out-of-order processor that reduces mis-speculation using a replay scoreboard |
US7260102B2 (en) * | 2002-02-22 | 2007-08-21 | Nortel Networks Limited | Traffic switching using multi-dimensional packet classification |
JP3870112B2 (ja) * | 2002-03-13 | 2007-01-17 | インターナショナル・ビジネス・マシーンズ・コーポレーション | コンパイル方法、コンパイル装置、及びコンパイル用プログラム |
US7082602B2 (en) * | 2002-04-12 | 2006-07-25 | Intel Corporation | Function unit based finite state automata data structure, transitions and methods for making the same |
US7058937B2 (en) * | 2002-04-12 | 2006-06-06 | Intel Corporation | Methods and systems for integrated scheduling and resource management for a compiler |
US7007271B2 (en) * | 2002-04-18 | 2006-02-28 | Sun Microsystems, Inc. | Method and apparatus for integrated instruction scheduling and register allocation in a postoptimizer |
US8141068B1 (en) * | 2002-06-18 | 2012-03-20 | Hewlett-Packard Development Company, L.P. | Compiler with flexible scheduling |
AU2002368121A1 (en) * | 2002-07-30 | 2004-02-16 | The Circle For The Promotion Of Science And Engineering | Command control device, function unit, program converter, and language processor |
US20040025151A1 (en) * | 2002-07-31 | 2004-02-05 | Shan-Chyun Ku | Method for improving instruction selection efficiency in a DSP/RISC compiler |
US8108843B2 (en) * | 2002-09-17 | 2012-01-31 | International Business Machines Corporation | Hybrid mechanism for more efficient emulation and method therefor |
US7062636B2 (en) * | 2002-09-19 | 2006-06-13 | Intel Corporation | Ordering scheme with architectural operation decomposed into result producing speculative micro-operation and exception producing architectural micro-operation |
US7349399B1 (en) * | 2002-09-20 | 2008-03-25 | Redback Networks, Inc. | Method and apparatus for out-of-order processing of packets using linked lists |
EP1447742A1 (en) * | 2003-02-11 | 2004-08-18 | STMicroelectronics S.r.l. | Method and apparatus for translating instructions of an ARM-type processor into instructions for a LX-type processor |
US7290254B2 (en) * | 2003-03-25 | 2007-10-30 | Intel Corporation | Combining compilation and instruction set translation |
US7093106B2 (en) * | 2003-04-23 | 2006-08-15 | International Business Machines Corporation | Register rename array with individual thread bits set upon allocation and cleared upon instruction completion |
US7530062B2 (en) * | 2003-05-23 | 2009-05-05 | Microsoft Corporation | Optimizing compiler transforms for a high level shader language |
US7159101B1 (en) * | 2003-05-28 | 2007-01-02 | Mips Technologies, Inc. | System and method to trace high performance multi-issue processors |
US7313790B2 (en) * | 2003-06-23 | 2007-12-25 | Intel Corporation | Methods and apparatus for preserving precise exceptions in code reordering by using control speculation |
US20040268098A1 (en) * | 2003-06-30 | 2004-12-30 | Yoav Almog | Exploiting parallelism across VLIW traces |
CA2439137A1 (en) * | 2003-08-08 | 2005-02-08 | Ibm Canada Limited - Ibm Canada Limitee | Improved scheduling technique for software pipelining |
US8595688B1 (en) * | 2003-09-08 | 2013-11-26 | Synopsys, Inc. | Generation of instruction set from architecture description |
US7114060B2 (en) * | 2003-10-14 | 2006-09-26 | Sun Microsystems, Inc. | Selectively deferring instructions issued in program order utilizing a checkpoint and multiple deferral scheme |
US9659339B2 (en) * | 2003-10-29 | 2017-05-23 | Nvidia Corporation | Programmable graphics processor for multithreaded execution of programs |
US7711932B2 (en) * | 2003-12-02 | 2010-05-04 | Intel Corporation | Scalable rename map table recovery |
US20050125786A1 (en) * | 2003-12-09 | 2005-06-09 | Jinquan Dai | Compiler with two phase bi-directional scheduling framework for pipelined processors |
GB2411975B (en) * | 2003-12-09 | 2006-10-04 | Advanced Risc Mach Ltd | Data processing apparatus and method for performing arithmetic operations in SIMD data processing |
US7373484B1 (en) * | 2004-01-12 | 2008-05-13 | Advanced Micro Devices, Inc. | Controlling writes to non-renamed register space in an out-of-order execution microprocessor |
US7293159B2 (en) * | 2004-01-15 | 2007-11-06 | International Business Machines Corporation | Coupling GP processor with reserved instruction interface via coprocessor port with operation data flow to application specific ISA processor with translation pre-decoder |
JP4502650B2 (ja) * | 2004-02-03 | 2010-07-14 | 日本電気株式会社 | アレイ型プロセッサ |
US7325124B2 (en) * | 2004-04-21 | 2008-01-29 | International Business Machines Corporation | System and method of execution of register pointer instructions ahead of instruction issue |
JP4376692B2 (ja) * | 2004-04-30 | 2009-12-02 | 富士通株式会社 | 情報処理装置、プロセッサ、プロセッサの制御方法、情報処理装置の制御方法、キャッシュメモリ |
JP4178278B2 (ja) * | 2004-05-25 | 2008-11-12 | インターナショナル・ビジネス・マシーンズ・コーポレーション | コンパイラ装置、最適化方法、コンパイラプログラム、及び記録媒体 |
US7941799B2 (en) * | 2004-05-27 | 2011-05-10 | International Business Machines Corporation | Interpreting I/O operation requests from pageable guests without host intervention |
US7257700B2 (en) * | 2004-06-03 | 2007-08-14 | Sun Microsystems, Inc. | Avoiding register RAW hazards when returning from speculative execution |
US7200723B1 (en) * | 2004-08-06 | 2007-04-03 | Xilinx, Inc. | Access to a bank of registers of a device control register interface using a single address |
US7506331B2 (en) * | 2004-08-30 | 2009-03-17 | International Business Machines Corporation | Method and apparatus for determining the profitability of expanding unpipelined instructions |
US7624255B1 (en) * | 2005-03-09 | 2009-11-24 | Nvidia Corporation | Scheduling program instruction execution by using fence instructions |
JP3863544B1 (ja) * | 2005-07-07 | 2006-12-27 | 富士通株式会社 | 演算処理装置及び演算処理方法 |
JP4778286B2 (ja) * | 2005-09-28 | 2011-09-21 | パナソニック株式会社 | コンパイラ装置 |
US7849292B1 (en) * | 2005-09-28 | 2010-12-07 | Oracle America, Inc. | Flag optimization of a trace |
US7508396B2 (en) * | 2005-09-28 | 2009-03-24 | Silicon Integrated Systems Corp. | Register-collecting mechanism, method for performing the same and pixel processing system employing the same |
US7937564B1 (en) * | 2005-09-28 | 2011-05-03 | Oracle America, Inc. | Emit vector optimization of a trace |
GB2430773A (en) * | 2005-10-03 | 2007-04-04 | Advanced Risc Mach Ltd | Alignment of variable length program instructions |
US20070094639A1 (en) * | 2005-10-26 | 2007-04-26 | Arm Limited | Preparing assembly languague source code |
US7330962B2 (en) * | 2005-11-14 | 2008-02-12 | Nvidia Corporation | Dynamic instruction sequence selection during scheduling |
US7840397B2 (en) * | 2005-12-02 | 2010-11-23 | Derek Chiou | Simulation method |
US7650487B2 (en) * | 2006-03-08 | 2010-01-19 | Sun Microsystems, Inc. | Method and structure for coordinating instruction execution in out-of-order processor execution using an instruction including an artificial register dependency |
US8266413B2 (en) * | 2006-03-14 | 2012-09-11 | The Board Of Trustees Of The University Of Illinois | Processor architecture for multipass processing of instructions downstream of a stalled instruction |
US20070220235A1 (en) * | 2006-03-15 | 2007-09-20 | Arm Limited | Instruction subgraph identification for a configurable accelerator |
JP4884297B2 (ja) * | 2006-05-26 | 2012-02-29 | パナソニック株式会社 | コンパイラ装置、コンパイル方法およびコンパイラプログラム |
US20080040590A1 (en) * | 2006-08-11 | 2008-02-14 | Lea Hwang Lee | Selective branch target buffer (btb) allocaiton |
US8291431B2 (en) * | 2006-08-29 | 2012-10-16 | Qualcomm Incorporated | Dependent instruction thread scheduling |
US20080077778A1 (en) * | 2006-09-25 | 2008-03-27 | Davis Gordon T | Method and Apparatus for Register Renaming in a Microprocessor |
US20080084424A1 (en) * | 2006-10-09 | 2008-04-10 | Silicon Integrated Systems Corp. | Early retiring instruction mechanism, method for performing the same and pixel processing system thereof |
GB2443277B (en) * | 2006-10-24 | 2011-05-18 | Advanced Risc Mach Ltd | Performing diagnostics operations upon an asymmetric multiprocessor apparatus |
EP2523101B1 (en) * | 2006-11-14 | 2014-06-04 | Soft Machines, Inc. | Apparatus and method for processing complex instruction formats in a multi- threaded architecture supporting various context switch modes and virtualization schemes |
JP4230504B2 (ja) * | 2006-11-30 | 2009-02-25 | 株式会社日立製作所 | データプロセッサ |
US7721076B2 (en) * | 2006-12-18 | 2010-05-18 | Intel Corporation | Tracking an oldest processor event using information stored in a register and queue entry |
US7454597B2 (en) * | 2007-01-02 | 2008-11-18 | International Business Machines Corporation | Computer processing system employing an instruction schedule cache |
US7769986B2 (en) * | 2007-05-01 | 2010-08-03 | International Business Machines Corporation | Method and apparatus for register renaming |
US8832416B2 (en) * | 2007-05-24 | 2014-09-09 | International Business Machines Corporation | Method and apparatus for instruction completion stall identification in an information handling system |
US9648325B2 (en) * | 2007-06-30 | 2017-05-09 | Microsoft Technology Licensing, Llc | Video decoding implementations for a graphics processing unit |
JP2009048252A (ja) * | 2007-08-14 | 2009-03-05 | Oki Electric Ind Co Ltd | プログラム変換装置及びコンパイラプログラム |
US9024957B1 (en) * | 2007-08-15 | 2015-05-05 | Nvidia Corporation | Address independent shader program loading |
US8468504B2 (en) * | 2007-12-28 | 2013-06-18 | Streaming Networks (Pvt.) Ltd. | Method and apparatus for interactive scheduling of VLIW assembly code |
US8082405B2 (en) * | 2008-01-11 | 2011-12-20 | International Business Machines Corporation | Dynamic address translation with fetch protection |
US8335906B2 (en) * | 2008-01-11 | 2012-12-18 | International Business Machines Corporation | Perform frame management function instruction for clearing blocks of main storage |
US8117417B2 (en) * | 2008-01-11 | 2012-02-14 | International Business Machines Corporation | Dynamic address translation with change record override |
US8103851B2 (en) * | 2008-01-11 | 2012-01-24 | International Business Machines Corporation | Dynamic address translation with translation table entry format control for indentifying format of the translation table entry |
US8041922B2 (en) * | 2008-01-11 | 2011-10-18 | International Business Machines Corporation | Enhanced dynamic address translation with load real address function |
US8019964B2 (en) * | 2008-01-11 | 2011-09-13 | International Buisness Machines Corporation | Dynamic address translation with DAT protection |
US8417916B2 (en) * | 2008-01-11 | 2013-04-09 | International Business Machines Corporation | Perform frame management function instruction for setting storage keys and clearing blocks of main storage |
US8041923B2 (en) * | 2008-01-11 | 2011-10-18 | International Business Machines Corporation | Load page table entry address instruction execution based on an address translation format control field |
US8151083B2 (en) * | 2008-01-11 | 2012-04-03 | International Business Machines Corporation | Dynamic address translation with frame management |
US8037278B2 (en) * | 2008-01-11 | 2011-10-11 | International Business Machines Corporation | Dynamic address translation with format control |
US8677098B2 (en) * | 2008-01-11 | 2014-03-18 | International Business Machines Corporation | Dynamic address translation with fetch protection |
US7925866B2 (en) * | 2008-01-23 | 2011-04-12 | Arm Limited | Data processing apparatus and method for handling instructions to be executed by processing circuitry |
US8719553B2 (en) * | 2008-01-31 | 2014-05-06 | Arm Norway As | Method for re-circulating a fragment through a rendering pipeline |
US7958316B2 (en) * | 2008-02-01 | 2011-06-07 | International Business Machines Corporation | Dynamic adjustment of prefetch stream priority |
US8108654B2 (en) * | 2008-02-19 | 2012-01-31 | International Business Machines Corporation | System and method for a group priority issue schema for a cascaded pipeline |
US8098251B2 (en) * | 2008-02-22 | 2012-01-17 | Qualcomm Incorporated | System and method for instruction latency reduction in graphics processing |
US8176280B2 (en) * | 2008-02-25 | 2012-05-08 | International Business Machines Corporation | Use of test protection instruction in computing environments that support pageable guests |
US8866827B2 (en) * | 2008-06-26 | 2014-10-21 | Microsoft Corporation | Bulk-synchronous graphics processing unit programming |
US8176299B2 (en) * | 2008-09-24 | 2012-05-08 | Apple Inc. | Generating stop indicators based on conditional data dependency in vector processors |
US10621092B2 (en) * | 2008-11-24 | 2020-04-14 | Intel Corporation | Merging level cache and data cache units having indicator bits related to speculative execution |
BRPI0920541A2 (pt) * | 2008-11-24 | 2018-11-06 | Intel Corp | sistemas, métodos e aparelho para decompor um programa sequencial em multicadeias, executar as ditas cadeias, e reconstruir a execução sequencial |
US20100274972A1 (en) * | 2008-11-24 | 2010-10-28 | Boris Babayan | Systems, methods, and apparatuses for parallel computing |
US8078854B2 (en) * | 2008-12-12 | 2011-12-13 | Oracle America, Inc. | Using register rename maps to facilitate precise exception semantics |
US20100153776A1 (en) * | 2008-12-12 | 2010-06-17 | Sun Microsystems, Inc. | Using safepoints to provide precise exception semantics for a virtual machine |
GB2466078B (en) * | 2008-12-15 | 2013-11-13 | Advanced Risc Mach Ltd | Apparatus and method for tracing activities of a shader program executed on shader circuitry of a data processing apparatus |
US7924860B1 (en) * | 2008-12-23 | 2011-04-12 | Juniper Networks, Inc. | Maintaining data unit order in a network switching device |
US8131976B2 (en) * | 2009-04-13 | 2012-03-06 | International Business Machines Corporation | Tracking effective addresses in an out-of-order processor |
US8335912B2 (en) * | 2009-04-22 | 2012-12-18 | Oracle America, Inc. | Logical map table for detecting dependency conditions between instructions having varying width operand values |
US8910171B2 (en) * | 2009-04-27 | 2014-12-09 | Lsi Corporation | Thread synchronization in a multi-thread network communications processor architecture |
US8561046B2 (en) * | 2009-09-14 | 2013-10-15 | Oracle America, Inc. | Pipelined parallelization with localized self-helper threading |
US8359588B2 (en) * | 2009-11-25 | 2013-01-22 | Arm Limited | Reducing inter-task latency in a multiprocessor system |
US20110131396A1 (en) * | 2009-12-01 | 2011-06-02 | Xmos Limited | Timing analysis |
US8863088B2 (en) * | 2010-02-08 | 2014-10-14 | Red Hat, Inc. | Simulating a line of source code in a debugging tool |
US8650554B2 (en) * | 2010-04-27 | 2014-02-11 | International Business Machines Corporation | Single thread performance in an in-order multi-threaded processor |
US8972961B2 (en) * | 2010-05-19 | 2015-03-03 | International Business Machines Corporation | Instruction scheduling approach to improve processor performance |
US8918664B2 (en) * | 2010-06-25 | 2014-12-23 | Panasonic Corporation | Integrated circuit, computer system, and control method, including power saving control to reduce power consumed by execution of a loop |
WO2012003997A1 (en) * | 2010-07-09 | 2012-01-12 | Martin Vorbach | Data processing device and method |
US8977815B2 (en) * | 2010-11-29 | 2015-03-10 | Arm Limited | Control of entry of program instructions to a fetch stage within a processing pipepline |
US9026769B1 (en) * | 2011-01-31 | 2015-05-05 | Marvell International Ltd. | Detecting and reissuing of loop instructions in reorder structure |
US9176737B2 (en) * | 2011-02-07 | 2015-11-03 | Arm Limited | Controlling the execution of adjacent instructions that are dependent upon a same data condition |
GB201103699D0 (en) * | 2011-03-03 | 2011-04-20 | Advanced Risc Mach Ltd | Graphic processing |
JP2012216009A (ja) | 2011-03-31 | 2012-11-08 | Nec Corp | メモリアクセス命令の追い越し制御によるプログラムの高速化方法 |
US9274795B2 (en) * | 2011-04-07 | 2016-03-01 | Via Technologies, Inc. | Conditional non-branch instruction prediction |
US9317288B2 (en) * | 2011-04-07 | 2016-04-19 | Via Technologies, Inc. | Multi-core microprocessor that performs x86 ISA and ARM ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline |
US8661230B2 (en) * | 2011-04-15 | 2014-02-25 | International Business Machines Corporation | Allocation of counters from a pool of counters to track mappings of logical registers to physical registers for mapper based instruction executions |
CN102789377B (zh) * | 2011-05-18 | 2015-09-30 | 国际商业机器公司 | 处理指令分组信息的方法和装置 |
US9703538B2 (en) * | 2011-06-08 | 2017-07-11 | Hyperion Core, Inc. | Tool-level and hardware-level code optimization and respective hardware modification |
US11249799B2 (en) * | 2011-09-26 | 2022-02-15 | Labrador Diagnostics Llc | Methods, systems, and devices for real time execution and optimization of concurrent test protocols on a single device |
CN103827813B (zh) * | 2011-09-26 | 2016-09-21 | 英特尔公司 | 用于提供向量分散操作和聚集操作功能的指令和逻辑 |
US9021233B2 (en) * | 2011-09-28 | 2015-04-28 | Arm Limited | Interleaving data accesses issued in response to vector access instructions |
US8966457B2 (en) * | 2011-11-15 | 2015-02-24 | Global Supercomputing Corporation | Method and system for converting a single-threaded software program into an application-specific supercomputer |
WO2013077876A1 (en) * | 2011-11-22 | 2013-05-30 | Soft Machines, Inc. | A microprocessor accelerated code optimizer |
WO2013081556A1 (en) * | 2011-12-01 | 2013-06-06 | National University Of Singapore | Polymorphic heterogeneous multi-core architecture |
US9323678B2 (en) * | 2011-12-30 | 2016-04-26 | Intel Corporation | Identifying and prioritizing critical instructions within processor circuitry |
GB2503612B (en) * | 2012-01-06 | 2014-08-06 | Imagination Tech Ltd | Restoring a register renaming map |
US9135014B2 (en) * | 2012-02-15 | 2015-09-15 | Freescale Semiconductor, Inc | Data processing system with latency tolerance execution |
WO2013147852A1 (en) * | 2012-03-30 | 2013-10-03 | Intel Corporation | Instruction scheduling for a multi-strand out-of-order processor |
WO2013156825A1 (en) * | 2012-04-20 | 2013-10-24 | Freescale Semiconductor, Inc. | A computer system and a method for generating an optimized program code |
KR102162119B1 (ko) * | 2012-06-29 | 2020-10-06 | 지이 비디오 컴프레션, 엘엘씨 | 비디오 데이터 스트림 개념 |
CN106170761B (zh) * | 2012-09-27 | 2019-05-10 | 英特尔公司 | 用于在二进制转换中横跨多个原子区调度存储指令的方法和装置 |
JP6179093B2 (ja) * | 2012-12-03 | 2017-08-16 | 富士通株式会社 | 演算処理装置、演算処理方法 |
US9798544B2 (en) * | 2012-12-10 | 2017-10-24 | Nvidia Corporation | Reordering buffer for memory access locality |
CN104885422B (zh) * | 2012-12-17 | 2019-03-22 | 马维尔以色列(M.I.S.L.)有限公司 | 在并行处理网络设备中维持分组顺序的方法和设备 |
US9553820B2 (en) * | 2012-12-17 | 2017-01-24 | Marvell Israel (M.L.S.L) Ltd. | Maintaining packet order in a parallel processing network device |
KR101730282B1 (ko) * | 2012-12-26 | 2017-04-25 | 인텔 코포레이션 | 지연된 재구성된 프로그램 순서를 이용한 선택 로직 |
US9880852B2 (en) * | 2012-12-27 | 2018-01-30 | Intel Corporation | Programmable hardware accelerators in CPU |
US9195465B2 (en) * | 2012-12-28 | 2015-11-24 | Intel Corporation | Cache coherency and processor consistency |
US9384522B2 (en) * | 2012-12-28 | 2016-07-05 | Qualcomm Incorporated | Reordering of command streams for graphical processing units (GPUs) |
US8966068B2 (en) * | 2013-01-15 | 2015-02-24 | International Business Machines Corporation | Selective logging of network requests based on subsets of the program that were executed |
US9214008B2 (en) * | 2013-01-18 | 2015-12-15 | Nvidia Corporation | Shader program attribute storage |
US9054998B2 (en) * | 2013-02-06 | 2015-06-09 | Freescale Semiconductor, Inc. | System and method for maintaining packet order in an ordered data stream |
US9286119B2 (en) * | 2013-02-13 | 2016-03-15 | Nvidia Corporation | System, method, and computer program product for management of dependency between tasks |
US9354884B2 (en) * | 2013-03-13 | 2016-05-31 | International Business Machines Corporation | Processor with hybrid pipeline capable of operating in out-of-order and in-order modes |
US8832324B1 (en) * | 2013-03-15 | 2014-09-09 | International Business Machines Corporation | First-in-first-out queue-based command spreading |
US9086873B2 (en) * | 2013-03-15 | 2015-07-21 | Intel Corporation | Methods and apparatus to compile instructions for a vector of instruction pointers processor architecture |
JP6064765B2 (ja) * | 2013-04-18 | 2017-01-25 | 富士通株式会社 | シミュレーション装置、シミュレーション方法、およびシミュレーションプログラム |
US9772827B2 (en) * | 2013-04-22 | 2017-09-26 | Nvidia Corporation | Techniques for determining instruction dependencies |
US9354891B2 (en) * | 2013-05-29 | 2016-05-31 | Apple Inc. | Increasing macroscalar instruction level parallelism |
WO2015050594A2 (en) * | 2013-06-16 | 2015-04-09 | President And Fellows Of Harvard College | Methods and apparatus for parallel processing |
US9535744B2 (en) * | 2013-06-29 | 2017-01-03 | Intel Corporation | Method and apparatus for continued retirement during commit of a speculative region of code |
US20160154631A1 (en) * | 2013-07-12 | 2016-06-02 | Bryant G. CRUSE | Method and system for machine comprehension |
US10255075B2 (en) * | 2013-07-18 | 2019-04-09 | Nvidia Corporation | System, method, and computer program product for managing out-of-order execution of program instructions |
US9244746B2 (en) * | 2013-08-01 | 2016-01-26 | Intel Corporation | Automatic transaction coarsening |
US9304749B2 (en) * | 2013-09-12 | 2016-04-05 | Marvell World Trade Ltd. | Method and system for instruction scheduling |
US9342284B2 (en) * | 2013-09-27 | 2016-05-17 | Intel Corporation | Optimization of instructions to reduce memory access violations |
US9571541B1 (en) * | 2013-10-03 | 2017-02-14 | Marvell Israel (M.I.S.L.) Ltd. | Network device architecture using cache for multicast packets |
WO2015056095A1 (en) * | 2013-10-17 | 2015-04-23 | Marvell World Trade Ltd. | Packet parsing and key generation in a network device |
US9223965B2 (en) * | 2013-12-10 | 2015-12-29 | International Business Machines Corporation | Secure generation and management of a virtual card on a mobile device |
US9235692B2 (en) * | 2013-12-13 | 2016-01-12 | International Business Machines Corporation | Secure application debugging |
US9928069B2 (en) * | 2013-12-20 | 2018-03-27 | Apple Inc. | Predicated vector hazard check instruction |
US9336100B2 (en) * | 2013-12-27 | 2016-05-10 | International Business Machines Corporation | Efficient debugging of memory miscompare failures in post-silicon validation |
US9766894B2 (en) * | 2014-02-06 | 2017-09-19 | Optimum Semiconductor Technologies, Inc. | Method and apparatus for enabling a processor to generate pipeline control signals |
US9558000B2 (en) * | 2014-02-06 | 2017-01-31 | Optimum Semiconductor Technologies, Inc. | Multithreading using an ordered list of hardware contexts |
US9766895B2 (en) * | 2014-02-06 | 2017-09-19 | Optimum Semiconductor Technologies, Inc. | Opportunity multithreading in a multithreaded processor with instruction chaining capability |
US9442734B2 (en) * | 2014-02-11 | 2016-09-13 | Apple Inc. | Completion time determination for vector instructions |
US9632775B2 (en) * | 2014-02-11 | 2017-04-25 | Apple Inc. | Completion time prediction for vector instructions |
US9361041B2 (en) * | 2014-02-27 | 2016-06-07 | International Business Machines Corporation | Hint instruction for managing transactional aborts in transactional memory computing environments |
US20150277925A1 (en) * | 2014-04-01 | 2015-10-01 | The Regents Of The University Of Michigan | Data processing apparatus and method for executing a stream of instructions out of order with respect to original program order |
US9710245B2 (en) * | 2014-04-04 | 2017-07-18 | Qualcomm Incorporated | Memory reference metadata for compiler optimization |
US9251330B2 (en) * | 2014-04-09 | 2016-02-02 | International Business Machines Corporation | Secure management of a smart card |
US10162530B2 (en) * | 2014-09-18 | 2018-12-25 | Hitachi, Ltd. | Computer and computer system for collision determination of a command identifier |
JP2016066218A (ja) * | 2014-09-24 | 2016-04-28 | 株式会社ソシオネクスト | プロセッサ、半導体集積回路、及びベクトル命令の処理方法 |
US20160092219A1 (en) * | 2014-09-29 | 2016-03-31 | Qualcomm Incorporated | Accelerating constant value generation using a computed constants table, and related circuits, methods, and computer-readable media |
US9501284B2 (en) * | 2014-09-30 | 2016-11-22 | Apple Inc. | Mechanism for allowing speculative execution of loads beyond a wait for event instruction |
US9690590B2 (en) * | 2014-10-15 | 2017-06-27 | Cavium, Inc. | Flexible instruction execution in a processor pipeline |
US9747109B2 (en) * | 2014-10-15 | 2017-08-29 | Cavium, Inc. | Flexible instruction execution in a processor pipeline |
US10423414B2 (en) * | 2014-11-12 | 2019-09-24 | Texas Instruments Incorporated | Parallel processing in hardware accelerators communicably coupled with a processor |
US9733940B2 (en) * | 2014-11-17 | 2017-08-15 | International Business Machines Corporation | Techniques for instruction group formation for decode-time instruction optimization based on feedback |
US9940242B2 (en) * | 2014-11-17 | 2018-04-10 | International Business Machines Corporation | Techniques for identifying instructions for decode-time instruction optimization grouping in view of cache boundaries |
WO2016097802A1 (en) * | 2014-12-14 | 2016-06-23 | Via Alliance Semiconductor Co., Ltd. | Mechanism to preclude load replays dependent on long load cycles in an out-order processor |
US9529643B2 (en) * | 2015-01-26 | 2016-12-27 | Qualcomm Incorporated | Method and system for accelerating task control flow |
US10318297B2 (en) * | 2015-01-30 | 2019-06-11 | Huawei Technologies Co., Ltd. | Method and apparatus for operating a self-timed parallelized multi-core processor |
US9785423B2 (en) * | 2015-04-23 | 2017-10-10 | Google Inc. | Compiler for translating between a virtual image processor instruction set architecture (ISA) and target hardware having a two-dimensional shift array structure |
WO2016193774A1 (en) * | 2015-06-01 | 2016-12-08 | Intel Corporation | Multi-core processor for execution of strands of instructions grouped according to criticality |
US9952871B2 (en) * | 2015-06-05 | 2018-04-24 | Arm Limited | Controlling execution of instructions for a processing pipeline having first out-of order execution circuitry and second execution circuitry |
US9727944B2 (en) * | 2015-06-22 | 2017-08-08 | Apple Inc. | GPU instruction storage |
US20160378491A1 (en) * | 2015-06-26 | 2016-12-29 | Microsoft Technology Licensing, Llc | Determination of target location for transfer of processor control |
US9910669B2 (en) * | 2015-06-26 | 2018-03-06 | Intel Corporation | Instruction and logic for characterization of data access |
GB2540543B (en) * | 2015-07-20 | 2020-03-11 | Advanced Risc Mach Ltd | Graphics processing |
US20170046160A1 (en) * | 2015-08-14 | 2017-02-16 | Qualcomm Incorporated | Efficient handling of register files |
US11275590B2 (en) * | 2015-08-26 | 2022-03-15 | Huawei Technologies Co., Ltd. | Device and processing architecture for resolving execution pipeline dependencies without requiring no operation instructions in the instruction memory |
US20170083341A1 (en) * | 2015-09-19 | 2017-03-23 | Microsoft Technology Licensing, Llc | Segmented instruction block |
US10198263B2 (en) * | 2015-09-19 | 2019-02-05 | Microsoft Technology Licensing, Llc | Write nullification |
US10776115B2 (en) * | 2015-09-19 | 2020-09-15 | Microsoft Technology Licensing, Llc | Debug support for block-based processor |
US10061584B2 (en) * | 2015-09-19 | 2018-08-28 | Microsoft Technology Licensing, Llc | Store nullification in the target field |
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 |
US20170153892A1 (en) * | 2015-11-30 | 2017-06-01 | Intel Corporation | Instruction And Logic For Programmable Fabric Hierarchy And Cache |
US10191748B2 (en) * | 2015-11-30 | 2019-01-29 | Intel IP Corporation | Instruction and logic for in-order handling in an out-of-order processor |
EP3398052A1 (en) * | 2015-12-29 | 2018-11-07 | Intel Corporation | Hardware apparatus and methods for converting encoding formats |
US10599428B2 (en) * | 2016-03-23 | 2020-03-24 | Arm Limited | Relaxed execution of overlapping mixed-scalar-vector instructions |
US10175985B2 (en) * | 2016-03-28 | 2019-01-08 | International Business Machines Corporation | Mechanism for using a reservation station as a scratch register |
US9928128B2 (en) * | 2016-04-01 | 2018-03-27 | International Business Machines Corporation | In-pipe error scrubbing within a processor core |
US9922396B2 (en) * | 2016-04-04 | 2018-03-20 | Intel Corporation | Reduction of BVH-node bandwidth with incremental traversal |
US11687345B2 (en) * | 2016-04-28 | 2023-06-27 | Microsoft Technology Licensing, Llc | Out-of-order block-based processors and instruction schedulers using ready state data indexed by instruction position identifiers |
US10552152B2 (en) * | 2016-05-27 | 2020-02-04 | Arm Limited | Method and apparatus for scheduling in a non-uniform compute device |
US10795815B2 (en) * | 2016-05-27 | 2020-10-06 | Arm Limited | Method and apparatus for maintaining data coherence in a non-uniform compute device |
US10445094B2 (en) * | 2016-05-27 | 2019-10-15 | Arm Limited | Method and apparatus for reordering in a non-uniform compute device |
US20170371660A1 (en) * | 2016-06-23 | 2017-12-28 | Microsoft Technology Licensing, Llc | Load-store queue for multiple processor cores |
GB2556886B (en) * | 2016-11-23 | 2019-05-15 | Imagination Tech Ltd | Encoding and decoding variable length instructions |
-
2013
- 2013-05-31 GB GB1309765.4A patent/GB2514618B/en active Active
- 2013-07-02 US US13/933,612 patent/US10176546B2/en active Active
-
2014
- 2014-05-29 JP JP2014111029A patent/JP6403436B2/ja active Active
- 2014-05-30 CN CN201410239143.8A patent/CN104217393B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1945536A (zh) * | 2005-09-30 | 2007-04-11 | 英特尔公司 | 利用指针来再排序指令的存储器布局 |
CN101647000A (zh) * | 2007-03-28 | 2010-02-10 | 高通股份有限公司 | 用于在处理器中的执行级之前执行指令的系统及方法 |
CN101620527A (zh) * | 2008-06-30 | 2010-01-06 | 英特尔公司 | 图形处理中管理活动线程依赖关系 |
US20130038620A1 (en) * | 2009-10-05 | 2013-02-14 | Ziyad S. Hakura | Time slice processing of tessellation and geometry shaders |
US20130089109A1 (en) * | 2010-05-18 | 2013-04-11 | Lsi Corporation | Thread Synchronization in a Multi-Thread, Multi-Flow Network Communications Processor Architecture |
US20120278595A1 (en) * | 2011-04-29 | 2012-11-01 | International Business Machines Corporation | Determining each stall reason for each stalled instruction within a group of instructions during a pipeline stall |
WO2013048367A9 (en) * | 2011-09-26 | 2013-11-14 | Intel Corporation | Instruction and logic to provide vector loads and stores with strides and masking functionality |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106327420A (zh) * | 2015-07-03 | 2017-01-11 | Arm有限公司 | 数据处理系统 |
CN106327420B (zh) * | 2015-07-03 | 2021-12-21 | Arm有限公司 | 数据处理系统 |
CN106355544A (zh) * | 2015-07-15 | 2017-01-25 | Arm有限公司 | 数据处理系统 |
CN106355544B (zh) * | 2015-07-15 | 2021-08-17 | Arm有限公司 | 处理单元、在处理单元中进行处理操作的方法 |
CN108027762A (zh) * | 2016-06-24 | 2018-05-11 | Arm 有限公司 | 生成和处理指示处理电路的指令执行的跟踪流的装置和方法 |
US10740074B2 (en) * | 2018-11-30 | 2020-08-11 | Advanced Micro Devices, Inc. | Conditional construct splitting for latency hiding |
CN115510342A (zh) * | 2022-11-23 | 2022-12-23 | 沐曦集成电路(上海)有限公司 | 利用多级指针维护乱序数据的方法、装置、介质及设备 |
CN115510342B (zh) * | 2022-11-23 | 2023-03-28 | 沐曦集成电路(上海)有限公司 | 利用多级指针维护乱序数据的方法、装置、介质及设备 |
Also Published As
Publication number | Publication date |
---|---|
JP6403436B2 (ja) | 2018-10-10 |
GB2514618B (en) | 2020-11-11 |
JP2014235747A (ja) | 2014-12-15 |
US20140354644A1 (en) | 2014-12-04 |
GB2514618A (en) | 2014-12-03 |
CN104217393B (zh) | 2019-07-16 |
GB201309765D0 (en) | 2013-07-17 |
US10176546B2 (en) | 2019-01-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104217393A (zh) | 数据处理系统 | |
US11907691B2 (en) | Method and system of command buffer between a CPU and GPU | |
US20240104837A1 (en) | Patched shading in graphics processing | |
US10152763B2 (en) | Graphics processing systems | |
US9256466B2 (en) | Data processing systems | |
KR102631479B1 (ko) | 그래픽스 처리 | |
US9535700B2 (en) | Data processing systems | |
CN103886634A (zh) | 利用每像素着色器线程的高效超级采样 | |
CN105659285A (zh) | 数据处理系统 | |
KR20190142732A (ko) | 데이터 처리 시스템 | |
US10606595B2 (en) | Data processing systems | |
WO2017021689A1 (en) | Data processing systems | |
CN106408504A (zh) | 图形处理系统 | |
US11107264B2 (en) | Graphics processing systems for determining blending operations | |
US10310856B2 (en) | Disabling thread execution when executing instructions in a data processing system | |
US10115222B2 (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 | |
CN118689488A (zh) | 一种gpu编译器前置属性配置方法 | |
US20210117192A1 (en) | Data processing systems | |
CN118052692A (zh) | 图形处理器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |