CN101859257B - 用于无死锁管线操作的系统及方法 - Google Patents
用于无死锁管线操作的系统及方法 Download PDFInfo
- Publication number
- CN101859257B CN101859257B CN2010101420064A CN201010142006A CN101859257B CN 101859257 B CN101859257 B CN 101859257B CN 2010101420064 A CN2010101420064 A CN 2010101420064A CN 201010142006 A CN201010142006 A CN 201010142006A CN 101859257 B CN101859257 B CN 101859257B
- Authority
- CN
- China
- Prior art keywords
- texture
- thread
- request
- pipeline
- requests
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 54
- 238000012545 processing Methods 0.000 claims abstract description 30
- 239000000872 buffer Substances 0.000 claims description 71
- 230000008569 process Effects 0.000 claims description 22
- 230000006870 function Effects 0.000 claims description 13
- 230000005540 biological transmission Effects 0.000 claims description 8
- 230000004044 response Effects 0.000 claims description 4
- 238000010586 diagram Methods 0.000 description 14
- 238000012544 monitoring process Methods 0.000 description 6
- 239000006260 foam Substances 0.000 description 4
- 238000012795 verification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000003068 static effect Effects 0.000 description 3
- 230000005059 dormancy Effects 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000004040 coloring Methods 0.000 description 1
- 230000002950 deficient Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000002349 favourable effect Effects 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 238000012163 sequencing technique Methods 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/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/524—Deadlock detection or avoidance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/04—Texture mapping
-
- 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/50—Lighting effects
-
- G—PHYSICS
- G09—EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
- G09G—ARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
- G09G5/00—Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
- G09G5/36—Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators characterised by the display of a graphic pattern, e.g. using an all-points-addressable [APA] memory
- G09G5/39—Control of the bit-mapped memory
- G09G5/393—Arrangements for updating the contents of the bit-mapped memory
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computer Graphics (AREA)
- General Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Image Processing (AREA)
- Image Generation (AREA)
- Advance Control (AREA)
Abstract
本发明提供了一种用于无死锁管线操作的系统及方法。一种利于改善无死锁图形处理的系统和方法。本发明的实施例为执行单元管线结果(如,纹理管线结果)提供存储空间。由于纹理单元可用于储存信息而同时寄存器堆中的相应位置可用于重新分配给其他线程,所以存储空间允许增加的多线程处理。实施例通过限制请求数并确保除非有资源可用于完成一组请求中的每个请求否则不发出该组请求,从而进一步防止死锁。因而,本发明的实施例提供了无死锁的改进性能。
Description
技术领域
本发明的实施例总体上涉及图形处理单元(GPU)上的指令处理。
背景技术
随着计算机系统的发展,图形处理单元(GPU)已日益改进。例如,GPU包括多个执行单元,并且维持这些执行单元繁忙对于确保高GPU总体性能变成越来越重要的任务。
GPU常包括用于执行纹理化操作的纹理单元。这些纹理单元需要访问储存在存储器中的纹理数据,以执行纹理操作。相对于GPU的执行单元的速度,存储器访问通常花费相对较长的时间。相应地,在给定时间发送若干纹理请求。在一些传统GPU中,每个纹理请求都指定寄存器以获取参数并且该寄存器就纹理操作的结果而言一般都相同。
令人遗憾的是,用于可以处于执行状态的纹理管线的全部纹理操作的寄存器堆存储空间的量等同于大量存储器存储空间。因此,对存储空间的限制造成对能够发送的请求数的限制,且因而产生对一次能够处理的像素数的限制。一种方案是将纹理操作的结果写回到含有纹理请求的存储位置。然而,此方案仍然要给纹理请求分配存储结果空间,这意味着在任何给定时间能够在管线中处理的像素数受到限制并且执行单元不会保持繁忙,从而影响GPU的总体性能。
另一方案是使每个线程具有多个未决纹理请求,因为这意味着需要少数线程覆盖纹理等待时间(latency)。令人遗憾的是,每个线程也会需要更多寄存器容纳中间结果进行同时存储。这增加了所需的寄存器堆尺寸。将会有利的是,每线程能够发送多个纹理指令,而同时不需要相应大的寄存器堆。照这样,利用节省下来的,如未分配给纹理操作的可用寄存器堆尺寸可以发送更多线程。
发明内容
据此,所需要的是一种能够降低存储空间要求并防止图形线程处理死锁的系统。本发明的实施例提供用于执行单元管线结果的存储空间(如,用于纹理管线结果的缓冲器)。实施例通过限制每个线程的请求数并确保除非有资源可用以完成一组请求中的全部请求否则不发送或开始该组请求,来进一步提供对死锁的防止。因而,本发明的实施例提供了没有死锁的改进性能。
更具体而言,本发明的实施例允许增加使用具有多个未决纹理请求的每个线程而无需大寄存器堆存储空间,这是因为这些纹理操作的结果被储存在管线缓冲器中。纹理指令被分成两部分,一部分是对纹理单元的发送纹理请求且第二部分是从纹理单元读回结果的操作。该结果被放置到管线缓冲器单元而非寄存器堆中。为了避免死锁,除非缓冲器能够适应全部请求,否则线程可以不发送其请求。这将避免由于缓冲器中不存在请求的数据而不能满足该请求的情形。因为结果槽全部被占用,所以需要读取缓冲的结果以避免停滞管线。通过需要较少寄存器堆存储空间,能够同时处理更多线程,从而提高GPU的并行性并因而提高其性能。
在一个实施例中,本发明是一种用于防止图形处理单元(GPU)死锁的由计算机实施的方法。所述方法包括:确定可用管线缓冲器资源的数目,所述可用管线缓冲器资源可以是管线的一部分(如,纹理管线的一部分或纹理单元的缓冲器);以及基于第一线程的一个或多个纹理请求来确定正被请求的资源数。如果所请求的资源数少于缓冲器中的可用资源数,则在缓冲器中分配对应于所述一个或多个请求的资源,否则,则不分配。所述方法进一步包括:调整(如,减少)所述可用资源数并发送所述一个或多个请求。然后,在通过其他操作读出缓冲器的内容时,可调整(如,增加)所述资源数。
在另一实施例中,本发明被实施为用于图形处理的系统,其中,纹理操作被分成纹理请求操作和纹理读回操作,并且进一步其中,纹理操作的结果被储存在与纹理管线相关联的缓冲器中,而非寄存器堆中。所述系统包括:调度模块,用于选择用于执行的线程;和请求跟踪模块,用于确定线程的纹理请求数。每个纹理请求都可对应于执行管线的资源(如,纹理管线的槽或纹理单元的缓冲器槽)。所述系统进一步包括:资源监视模块,用于确定所述执行管线的可用缓冲器资源数;和执行模块,用于基于所述可用资源(如,纹理单元中的槽)数来确定是否执行请求以防止死锁,并用于分配执行管线的资源。
照这样,本发明的实施例总体上有助于提高对图形处理单元(GPU)的利用并且因而有助于改善其性能。实施例为纹理管线提供存储空间(如,缓冲器),以储存结果,从而释放寄存器堆中的存储空间。增大寄存器中可用的空间有利于允许执行单元并发处理更多线程。本发明的实施例通过基于可用缓冲器资源控制可发送的多纹理请求的数目而使线程中读取结果的点总是可达到,来进一步防止死锁。因此,本发明的实施例提供了没有死锁的改进性能。
在另一实施例中,本发明被实施为用于防止下述系统中的计算性死锁的方法,所述系统将纹理结果储存在管线缓冲器中,而非寄存器堆中,并且所述系统将纹理指令分为两个操作,包括纹理请求操作和纹理读回操作。所述方法包括:访问执行单元简档(profile)(如,用于纹理单元)。所述执行单元简档可包括每时钟周期处理的单元数和管线资源数。所述管线资源数可包括管线深度和缓冲器尺寸。所述方法进一步包括:确定能够在无死锁的情况下执行的线程和每线程请求数并且只并发操作这么多个线程。
附图说明
本发明通过示例的方式而非限制的方式在附图的各图中图示出,并且在附图中,用相同附图标记表示类似元件。
图1示出了根据本发明一个实施例的示例性计算机系统。
图2示出了根据本发明一个实施例的示例性执行单元的方块图。
图3示出了根据本发明一个实施例的示例性线程的图示。
图4示出了根据本发明一个实施例的示例性系统的方块图。
图5示出了用于防止图形处理单元(GPU)的死锁的示例性计算机控制过程的流程图。
图6示出了根据本发明一个实施例的用于防止死锁的示例性计算机控制过程的流程图。
具体实施方式
现在,将对根据本发明的优选实施例进行详细描述,其示例示出于附图中。虽然将结合优选实施例对本发明进行描述,但是将要理解的是它们并非意图将本发明限制于这些实施例。相反,本发明旨在涵盖可包括在由所附权利要求书限定的本发明的精神和范围内的替换、修改及等同内容。此外,在本发明实施例的下列详细描述中,阐述了大量具体细节,以便提供对本发明的透彻理解。然而,对于本领域中的一个普通技术人员而言将认识到,可以在没有这些具体细节的情况下施行本发明。在其他例子中,为了不会不必要地混淆本发明实施例的各个方面,不对公知的方法、程序、部件和电路进行详细描述。
符号和术语
以计算机存储器中对数据位的操作的程序、步骤、逻辑块、处理及其他符号表示,介绍以下详细描述的某些部分。这些描述和表示是由数据处理领域中的普通技术人员使用的手段,以最有效地将他们工作的实质传达给本领域的其他技术人员。这里的程序、计算机执行步骤、逻辑块、处理等通常被认为是导致期望结果的一系列前后一致的步骤或指令。这些步骤是需要物理量的物理操控的步骤。通常,尽管不是必须地,但这些物理量采用能够在计算机系统中储存、传送、组合、比较以及以其他方式操控的电或磁信号的形式。主要由于常用的原因,已经多次证明将这些信号称为位、数值、元件、符号、字符、术语、数字等是方便的。
然而,应当记住的是,所有这些以及相似的术语都是与适当的物理量相关联的,并且仅是适用于这些量的方便的标号。除非下面的讨论中清楚且具体地做出其他声明,否则可以理解为,贯穿本发明使用诸如“处理”、“访问”、“执行”、“储存”或“渲染”等的术语的讨论,指的是集成电路(如,图1的计算系统100)或类似的电子计算设备的动作和处理,它们对在计算机系统的寄存器和存储器中表示为物理(电子)量的数据进行操控并将其转换成类似地表示为计算系统存储器或寄存器或者其他这样的信息存储、传输或显示设备内的物理量的其他数据。
计算机系统平台
图1示出了根据本发明一个实施例的计算机系统100。计算机系统100描绘了根据本发明实施例的基本计算机系统中的部件,其为某些基于硬件和基于软件的功能提供了执行平台。通常,计算机系统100包括至少一个CPU 101、系统存储器115和至少一个图形处理单元(GPU)110。CPU 101可以经由桥部件/存储器控制器(未示出)耦接至系统存储器115,或者可以经由CPU 101内部的存储器控制器(未示出)直接耦接至系统存储器115。GPU 110耦接至显示器112。一个或多个附加GPU可以可选地耦接至系统100,以进一步提高其计算能力。GPU 110耦接至CPU 101和系统存储器115。GPU 110可以实施为分立的部件、被设计成经由连接器(如,AGP槽、PCI-Express槽等)耦接至计算机系统100的分立的图形卡、分立的集成电路管芯(如,直接安装在母板上),或者实施为包括在计算机系统芯片组部件(未示出)的集成电路管芯内的集成GPU。另外,对于GPU 110,可以包括本地图形存储器114,用于高带宽图形数据存储。
CPU 101和GPU 110也可以集成到单个集成电路管芯中且CPU和GPU可共享诸如指令逻辑、缓冲器、功能单元等各种资源,或者可为图形和通用操作提供单独的资源。GPU可进一步集成到核心逻辑部件中。据此,这里所描述的与GPU 110相关联的任何或全部电路和/或功能也可以实施于适当配备的CPU 101中或由其来执行。另外,虽然这里的实施例可指GPU,但应当注意,所描述的电路和/或功能也可实施为其他类型的处理器(如,通用或其他专用协处理器)或者实施于CPU内。
系统100例如可以实施为具有功能强大的通用CPU 101的服务器计算机系统或台式计算机系统,所述CPU 101耦接至专用图形渲染GPU 110。在这类实施例中,可包括增加外围总线、专用音频/视频部件、IO设备等的部件。同样,系统100可以实施为手持式设备(如,蜂窝电话等)、直播卫星(DBS)/地面机顶盒或机顶视频游戏控制台设备,例如,可从华盛顿雷蒙德的微软公司获得的Xbox或可从日本东京的索尼计算机娱乐公司获得的PlayStation3。系统100还可以实施为“片上系统”,其中,计算设备的电子装置(如,部件101、115、110、114等)整体包含在单个集成电路管芯内。示例包括带有显示器的手持式仪器、汽车导航系统、便携式娱乐系统等。
本发明的实施例一般都有利于提高GPU的图形处理使用,且因而有利于提高图形处理单元(GPU)的性能。实施例提供了纹理管线缓冲器,以储存纹理结果,从而释放传统上使用的寄存器堆(register file)中的存储空间。增大在寄存器堆中可用的空间允许执行单元同时操纵更多管线。本发明的实施例通过控制可发送给管线的多纹理请求的数目使得每个线程中读回结果的点将总是可达到且可执行来进一步防止管线死锁。因而,本发明的实施例提供了无死锁的改善了的处理器性能。
图2示出了根据本发明一个实施例的GPU的示例性执行单元的方块图。执行单元200包括纹理单元202、数学单元220、调度器230和寄存器堆240。要理解的是,GPU(如,GPU 110)可具有多个与执行单元200大致相类似的执行单元,用于并行执行多个线程。例如,GPU可具有8个处理器组,每一个处理器组均具有两个执行单元。因而,实施例可支持单指令多数据(SIMD)执行(如,一个指令用于并行的16个像素)。在一个实施例中,这里所描述的线程如本领域所公知的是图像或视频帧的单独的像素。
纹理单元202包括纹理管线204和管线缓冲器210。纹理管线204具有N个槽或管线位置206-208。纹理管线204将结果写入到管线缓冲器210。纹理操作通常要求转到存储器,这会花费相对较长时间(如,300个时钟周期)。因而,纹理管线204可为300个槽或元件长以适应于该停滞。例如,纹理管线204可使每个槽都可操作以每时钟周期接收四个像素,用于通过在纹理中分析相邻像素并确定每个像素相距多远来计算细节层次(LOD)计算。为了以充足的工作负荷保持纹理管线204繁忙,对于具有300个槽的纹理单元,所述300个槽具有每槽4个像素的深度,需要工作的1200个像素或线程。其他线程可在纹理操作由纹理管线204执行时工作。对于紧接着发送多个纹理操作的线程,需要较少线程以保持管线满载。例如,对于紧接着发送两个纹理操作的线程,仅需要线程的一半以保持管线满载。
数学单元220包括具有槽224-226的数学管线222。在线程等待纹理请求完成时,可发送数学请求到数学单元220。在一个实施例中,数学单元220从寄存器堆240获得源数据并将结果目标数据(destination data)返回到寄存器堆240。例如,如果数学单元220每时钟可处理16个像素并花费5个时钟返回结果,则只要指令是独立的且每个线程每次有一个指令未决(outstanding),80个线程就将保持数学单元繁忙。作为另一示例,在每个线程每个周期能够发送一数学指令的情况下,将需要16个线程以保持管线繁忙。参照上述示例,1280个线程将保持纹理单元202和数学单元220均繁忙。如果没有1280个线程是可用的,则执行单元将留下不工作,从而导致无处理活动的泡沫(bubble)或时段。要理解的是,除了在管线正被加载时以外,执行单元中的泡沫都是不期望的。
期望经由管线处理更多线程以提高性能。因此,使用具有多个纹理操作的线程允许同时处理多个增加的纹理线程。本发明的实施例提供管线缓冲器210作为有利装置,以提供纹理存储空间而无需相应大的寄存器堆,在传统技术中一般需要大的寄存器堆以适应同时处理增加数目的线程。
寄存器堆240储存线程信息。每个工作单元具有与用于线程处理的工作单元相关联的状态信息。例如,对于像素,状态信息可包括X、Y和纹理坐标。寄存器堆240的尺寸可以基于纹理和数学单元的宽度(如,每时钟像素)和深度(如,时钟周期)。即是说,寄存器数控制可以在未完成状态下驻留(reside)在执行单元200中的像素或线程数。在一个实施例中,用纹理管线204和管线缓冲器210作为用于纹理数据的存储空间,减小了用于处理相同数目的线程所需的寄存器堆240的资源,或者替代地,相同尺寸的寄存器堆可以同时处理增加了数目的线程,从而相对于传统单元提高了性能。
在一个实施例中,调度器230将纹理操作的坐标写入到纹理管线202中。在寄存器堆240中无需与写入到纹理单元202中的坐标相对应的存储位置。在一个实施例中,纹理单元202可具有用于下述纹理操作请求的缓冲器(未示出),所述纹理操作请求要在进入纹理管线204之前储存。因而,用于要在进入纹理管线204之前储存的纹理操作的缓冲器可以允许纹理坐标在纹理管线204之前产生于缓冲器中,从而释放否则可能用于缓冲纹理坐标的寄存器。
管线缓冲器210可操作以储存从纹理管线204输出的结果。在管线从正由未读取的结果所占用的每个槽停滞(stall)之前,线程从纹理管线读出纹理操作结果。管线缓冲器210包括N个槽或存储位置212-214。管线缓冲器210允许在需要从管线缓冲器210读出结果之前有一定量时间,以避免停滞管线。要理解的是,管线缓冲器210允许对纹理管线204发送纹理请求,而无需在对纹理管线204发送请求的时刻以及在由纹理管线204处理该纹理请求时,在寄存器堆240中为该结果分配空间。因而,一旦该结果在管线缓冲器210中是可用的,就可动态地分配用于从管线缓冲器210读取结果的存储空间。因为纹理操作未使用寄存器堆,所以根据本发明的实施例,每个纹理操作都可分成两个操作,对纹理单元的请求(纹理请求)和从该纹理单元读回结果的操作。
在一个实施例中,当纹理请求被发送到纹理管线204的槽中时,分配管线缓冲器210中的槽,用于储存该纹理请求的结果。管线缓冲器210可为各种存储类型,包括但不限于先入先出(FIFO)缓冲器。要理解的是,可以无序的方式从管线缓冲器210中读取结果。例如,对于具有16个槽的缓冲器而言,发送的每第16个请求都将指定到同一个槽中。此外,对于具有16个槽的缓冲器而言,来自纹理管线的每个结果都将在16个时钟周期内读取,以避免由于所有缓冲器槽都不可用(如,具有未读取的结果)而停滞该管线。缓冲器槽可基于指令进入纹理管线的周期。
一些纹理化操作与其他纹理化操作相比大致需要更多存储空间。例如,纹理化操作会需要以16个样本来采样纹理并对结果进行平均。就传统的纹理管线而言,对于每个位置都将会需要16个样本,然后可以对其进行平均。由此,在传统纹理管线的寄存器堆中增加存储空间限制了可以在给定时间处理的线程数。本发明的实施例可以给纹理管线发送16个请求,然后每次一个读取结果并将这些结果加入到当前的结果中,从而减轻或消除对寄存器堆240中用于16个样本的空间的需求。还要理解的是,由于这些结果容纳在纹理管线缓冲器210中,所以在确定何时需要将数据储存在寄存器堆中或者可以对这些数据进行计算时,可包含编译器。
因为可以在这些结果需要存储位置之前发送请求,所以使用管线缓冲器210允许使用较小的寄存器堆。例如,可以发送16个请求并且现在可以将寄存器堆中与坐标相对应的空间重新分配给附加的线程。参照上述对纹理结果进行平均的示例,由于可以在单个寄存器中对其结果进行组合,所以这些结果不需要分配空间。因而,管线缓冲器210有助于在给定时间处理更多线程,从而保持执行单元繁忙。更具体而言,因为寄存器堆240中的储存写入到纹理管线204中的坐标或其他数据的部分现在可用于储存用于其他线程的数据,所以管线缓冲器210允许纹理管线204被有效地用作存储空间。要理解的是,管线缓冲器210通过在给定时间允许更多线程的处理进一步防止了泡沫。
使用管线缓冲器210允许源和目标指令的仿真。在一个实施例中,调度器230的状态机将纹理请求写入到纹理管线204中,并代替使用寄存器堆240作为用于结果的存储空间,而从管线缓冲器210中读出结果。例如,可以执行用于具有储存在寄存器R0-R3中的坐标(如,“文本R0-R3”)的纹理操作的指令,其中,将寄存器R0-R3的数据写入到纹理管线204中并且从管线缓冲器210中读出结果并将其储存在寄存器R0-R3中。要理解的是,源和目标指令可为两种指令:1)将纹理指令写入到纹理管线中;和2)从纹理单元将结果读出到缓冲器。
图3示出了允许多个纹理操作的根据本发明一个实施例的示例性线程的图示。示例性线程300包括请求A 304、请求B 306、请求C 308、请求D 310、MADD 312、读取结果A 314、读取结果B 316、读取结果C 318和读取结果D 320。要理解的是,MADD指令(如,MADD 312)可不依赖于纹理结果且因此不需要等待纹理结果。在一个实施例中,线程300由GPU执行单元(如,执行单元200)执行。要理解的是,线程300可包括更多的请求、MADD和读取结果。请求304-310、MADD 312和读取结果314-320可由编译器排列好。
程序计数器302在请求A 304处开始执行线程300。在一个实施例中,确定请求数,在此例中,有四个纹理请求304-310。关于是否有四个纹理单元资源可用,校验可用资源(如,包括管线槽和缓冲器存储位置的的纹理单元槽)数。如果有四个纹理资源可用,则可使资源分配计数器对应于发送给管线204的请求304-310而增四。将这四个纹理资源分配给线程300,确保了当纹理操作完成时将保证结果314-320为可读取的(如,可从管线缓冲器210读取)以防止死锁。在一个实施例中,校验资源和分配资源是原子操作。
如果没有四个纹理资源可用,则可使线程300休眠,直到有四个纹理资源可用为止。如果对于该线程的执行有充足的资源,则可执行另一线程。当纹理操作使纹理管线进行下去并从管线缓冲器中读取纹理处理结果时,纹理资源成为可用的。根据实施例,仅允许线程将所有纹理请求放到管线上或什么都不放。因为线程无论何时都不能发送任何它的纹理拾取(texturefetch),直到该线程到达该线程可以从管线缓冲器读出纹理处理结果时的点为止,所以这防止了死锁。当结果缓冲器装满时,则管线一直停止直到读取了某些东西为止。如果预期要读取纹理结果的线程在等待发送进一步纹理请求,则导致死锁。另外,如果这些线程采用通过不读取纹理结果的着色程序(shader program)的路径,则导致死锁。
在一个实施例中,当程序计数器302移动到请求306-308时,可不就请求306-308的发送而改变资源分配计数器。读取请求314-320中的每一个请求一发送,资源分配计数器就对应于管线缓冲器(如,管线缓冲器210)中的槽在执行读取请求314-320中的每一个请求时变成空闲而减一。
要理解的是,可以各种方式来进行资源跟踪。例如,可以使资源分配计数器初始化为纹理单元中空闲或可用的资源数,且每当发送一组请求,就使计数器减少请求的数目。当从纹理单元中读出每个结果时,使计数器增加(如,当读取结果314-320中的每一个时都使计数器增加)。这表示了动态分配结构。
要理解的是,也可以用静态分配来防止死锁。在该实施例中,已知系统能保持多少场所。例如,如果在纹理管线中有400个资源可用且每个线程要求四个纹理操作,则调度器230在任何时候都只允许100个并发线程,以防止死锁。在此例中,不需要计数器。
还要理解的是,线程的指令可以由编译器来排列或定序以优化执行。例如,在纹理请求独立于数学请求的情况下,可将纹理请求移到数学请求(如,MADD 312)之前,使得可在正在处理纹理请求时完成数学请求。因为并发执行指令并将纹理请求信息储存在纹理单元(如,纹理单元202)中,所以该指令重排允许线程占用较少空间。编译器可进一步排列指令,以维持预期的工作负荷率(workload ratio)(如,每一个纹理请求四个数学请求)。要理解的是,工作负荷率可以是硬件单元围绕其设计的因素,并且围绕该工作率使工作平衡确保使工作负荷中的泡沫最小化。
图4示出了本发明各种实施例所使用的示例性部件。虽然系统400中披露了特定部件,但应当理解为这样的部件是示例。即是说,本发明实施例非常适于具有各种其他部件或系统400中所记载的部件的变形。要理解的是,系统400中的部件可与不同于所呈现的部件的其他部件一起操作,并且并非需要系统400中的所有部件以达成系统400的目的。
图4示出了根据本发明一个实施例的示例性系统的方块图。系统400可以以硬件或软件实施。在一个实施例中,系统400有助于处理用于在显示器上渲染图像或视频的图形指令。系统400与执行单元410通信和/或对其进行控制,所述执行单元410可以是GPU的一部分。系统400包括调度模块402、请求跟踪模块404、资源监视模块406和执行模块408。
调度模块402选择用于执行的线程。调度模块402可选择用于执行的线程并对该线程中的一部分(如,一个或多个纹理请求和一个或多个数学请求)的执行进行调度。调度模块402可选择用于执行的下一线程或其一部分。
请求跟踪模块404确定纹理请求的数目。在一个实施例中,可以给纹理单元412或数学单元414中的执行管线发送请求。更具体而言,请求数可以是在读取纹理结果之前给纹理管线的纹理请求的数目。在一个实施例中,纹理单元412的纹理管线包括缓冲器,所述缓冲器用于储存来自纹理单元412的纹理管线的结果。如这里所描述的,这些请求可由编译器来排列。
资源监视模块406确定执行管线的可用资源(如,纹理管线和管线缓冲器)数。在一个实施例中,资源监视模块406确定纹理单元412的执行管线的可用资源数。在另一实施例中,资源监视模块406基于与可用(如,未被分配)资源的数目相对应的计数器来确定可用资源数,如,动态架构。在又一实施例中,资源监视模块406通过校验与可以在给定时间执行的最大线程数相对应的数目来确定可用资源数,如,静态架构。
执行模块408基于可用资源数来确定是否执行请求并分配执行管线的资源。如果没有足够的资源可用以储存请求的数据,则不发送该请求或该组请求。在一个实施例中,执行模块408确定是否执行请求并分配管线的资源是原子操作,从而避免了其中相同资源被指定给两个或更多个线程的并行线程执行问题。
执行模块408对是否执行请求并分配资源的确定防止了死锁。执行模块408确保部分线程(带有请求)能够一直进行到读出结果的部分。换言之,管线内容只在其被读出时变空。如果由于管线满载而使得线程从未能够到达能够读出其内容的点,则发生死锁。本发明的实施例允许在发送一组请求之前完全分配资源或者无请求发送。因为直到校验出程序将能够进行到从纹理单元读出结果的部分为止所有纹理请求都不发送,所以这防止了死锁。一般而言,对于带有X个纹理请求的线程,在发送这X个纹理请求之前保留或分配纹理单元中的X个槽。
例如,在纹理管线有300个槽且缓冲器有16个槽或存储位置的情况下,可做出316个纹理请求而无需中断(halt)管线。这些槽对于每个请求以组保留,直到读出结果为止。例如,如果线程包括四个纹理请求,则将与对应于这些请求分配纹理单元的四个槽一起发送四个纹理请求(只在有四个槽可用的情况下)。因而,只有在有足够的资源以确保这些线程将到达将从纹理单元412中读出结果的点的情况下,每个线程才将能够发送请求。
要理解的是,一旦给该线程分配了纹理单元资源,则可在调度模块402方便的时候发送纹理请求,这是因为将资源分配给该线程确保了这些请求能够被执行。由于纹理请求完成所花费的时间,所以调度模块402可使线程休眠,直到准备好结果用于从纹理单元中读取为止或者直到能够完成其他非纹理操作为止。例如,正等待纹理结果的线程也可给数学单元(如,数学单元414)发送数学请求。
参照图5-6,流程图500和600示出了本发明各种实施例所使用的示例性功能。虽然流程图500和600中披露了特定的功能块(“块”),但这样的步骤是示例。即是说,这些实施例非常适于执行各种其他块或流程图500和600中所记载的块的变形。要理解的是,可按照不同于所呈现的次序来执行流程图500和600中的块,且并非流程图500和600中所有的块都需要执行。
图5示出了示例性计算机控制过程的流程图,其用于防止图形处理单元(GPU)的功能管线的死锁,所述GPU用管线缓冲器储存各种线程的执行结果。流程图500的方法通过不需要寄存器堆存储空间以处理线程的纹理操作从而可进一步有助于GPU的处理资源的有效使用。要理解的是,流程图500的过程可以是用于防止死锁的动态过程。
在块502中,确定管线缓冲器和/或管线的可用资源数。如这里所描述的,可用资源可包括功能管线(如,纹理管线)的管线缓冲器的一部分或纹理管线的缓冲器部分。如这里所描述的,可基于跟踪可用资源数的计数器来确定可用资源数。
在块504中,基于第一线程的一个或多个纹理请求来确定正被请求的资源数。对于成组做出的纹理请求,正被请求的数目为该组中所有请求。
在块506中,响应于所请求的资源数少于可用资源数,给管线分配对应于所述一个或多个请求的资源。如这里所描述的,确定可用资源数和对应于所请求的资源数来分配资源可以是原子操作。
在块508中,调整可用资源数,以适应所发送的请求。如这里所描述的,该调整可包括增加跟踪可用资源的数目。要理解的是,可基于将跟踪资源的数目与执行单元的资源相比较的方式来增加或减少资源数。
在块510中,发送一个或多个请求。如这里所描述的,这些请求可以是纹理请求。照这样,发送该组纹理请求,使得当执行同一线程的相应读取时,保证数据在缓冲器中。
在块512中,调整可用资源数。如这里所描述的,该调整可包括减少可用资源数。如果存在附加的带有请求的线程,则可执行块516并访问第二线程。在执行了块516之后,可对于所述第二线程执行块502。如果请求结果中的一个或多个是可用的,则可执行块514。
在块514,读取响应于一个或多个请求的一个或多个结果。如这里所描述的,从纹理单元的管线缓冲器中读取结果。然后,可执行块516并选择第二线程。
图6示出了在下述系统中的根据本发明一个实施例的用于防止死锁的示例性计算机控制过程的流程图,所述系统将功能管线的结果数据写入到管线缓冲器而非寄存器堆。在一个实施例中,流程图600的方法可由编译器执行。要理解的是,流程图600的过程可以是用于防止死锁的静态过程。
在块602中,对于GPU访问执行单元简档。该执行单元可包括纹理单元和数学单元。在一个实施例中,执行单元简档包括每时钟周期所处理的单元(如,像素)数和管线资源数。管线资源数可包括管线深度和缓冲器尺寸。在一个实施例中,缓冲器尺寸对应于纹理管线结果缓冲器的尺寸。
在块604中,确定能够在无死锁的情况下执行的线程和每线程纹理请求数。如这里所描述的,线程和每线程请求数可基于需要在将读取纹理请求的结果之前发送的纹理请求数。例如,如果纹理管线和管线缓冲器有400个槽且在需要读取之前每线程有四个纹理请求,则在该系统中可将并发线程的数目限制到100,以防止死锁。在一个实施例中,线程数基于图像的图块(tile),从而将在处理下一图块之前完成空间图块的所有线程。例如,图块的线程可调度在一起,以利用驻留在处理器中的多个图块。要理解的是,这可利用任何高速缓存区。因而,可处理图块以使得能够在不存在纹理管线由于缺乏资源而停滞的可能性的情况下完成纹理请求和纹理返回序列。
在块606中,基于能够在无死锁的情况下执行的每线程请求数来重排线程的指令。如这里所描述的,编译器可重排指令,以确保可在线程读取结果之前发送有限的请求数。
为了图示和描述的目的,在前面已做出了对本发明特定实施例的描述。它们并非意图穷尽本发明的形式或将本发明限于所披露的精确形式,并且按照上述教导,许多修改和变形都是可以的。选择并描述这些实施例是为了以最佳方式解释本发明的原理及其实际应用,从而使得本领域其他技术人员能够最好地利用本发明以及具有适于预期的具体使用的各种修改的各种实施例。本发明的范围意图由所附权利要求书及其等同物来限定。
Claims (17)
1.一种在图形处理单元中处理数据的方法,所述方法包括:
维持管线缓冲器的闲置存储器资源的计数,所述管线缓冲器被耦接以从所述图形处理单元的执行单元接收结果;
确定线程的对所述执行单元的请求的数目,其中,所述请求的数目为在所述线程内存在读回操作之前存在于所述线程内的多请求操作的数目;
如果所述管线缓冲器有足够的闲置存储器资源以适应全部所述数目的请求,则将所述数目的请求发送给所述执行单元,否则,不发送任何所述数目的请求给所述执行单元;以及
所述执行单元在执行了所述发送的请求之后将其结果写入到所述管线缓冲器。
2.如权利要求1所述的方法,其中,所述维持所述管线缓冲器的闲置存储器资源的所述计数包括:响应于所述将所述数目的请求发送给所述执行单元,减小所述管线缓冲器的所述闲置存储器资源的所述计数。
3.如权利要求2所述的方法,进一步包括:所述线程对应于发送给所述执行单元的请求执行从所述管线缓冲器的读回操作,并且其中,所述维持所述管线缓冲器的闲置存储器资源的所述计数进一步包括:响应于所述线程执行所述读回操作,增加所述管线缓冲器的所述闲置存储器资源的所述计数。
4.如权利要求1所述的方法,其中,所述执行单元是所述图形处理单元内的纹理单元,并且其中进一步的,所述纹理单元的每个纹理操作包括对所述纹理单元的纹理请求操作和从所述管线缓冲器的纹理读回操作。
5.如权利要求4所述的方法,其中,所述发送和所述不发送通过只发送已在所述管线缓冲器内分配了结果空间的那些成组的纹理请求操作来防止所述纹理单元的死锁,其中,所述成组的纹理请求操作是在线程的第一未发送的纹理读回操作之前的所述线程内全部未发送的顺序纹理请求操作。
6.如权利要求1所述的方法,进一步包括:
所述线程将数学操作发送给所述图形处理单元的数学功能单元;和
所述数学功能单元从寄存器堆的源寄存器获得用于所述数学操作的源操作数,并将执行所述数学操作的结果返回给所述寄存器堆的目标寄存器。
7.如权利要求6所述的方法,其中,所述功能单元是纹理单元,并且其中,所述寄存器堆不接收所述纹理单元的执行的结果。
8.一种在图形处理单元中处理数据的方法,所述方法包括:
确定管线缓冲器的尺寸,所述管线缓冲器被耦接以从所述图形处理单元的执行单元接收结果;
基于每个线程内的请求操作的数目并进一步基于所述管线缓冲器的所述尺寸,来确定可允许由所述执行单元并发操作的线程的数目;其中,所述确定线程的数目包括:将所述管线缓冲器的所述尺寸除以每个线程内的所述请求操作的数目;
只允许所述数目的线程或更少数目的线程由所述执行单元并发操作,以防止其死锁;
所述数目的线程发送请求操作给所述执行单元;以及
所述执行单元在执行了所述请求操作之后将其结果写入到所述管线缓冲器。
9.如权利要求8所述的方法,进一步包括:所述数目的线程对应于发送给所述执行单元的所述请求操作执行从所述管线缓冲器的读回操作。
10.如权利要求8所述的方法,其中,所述执行单元是所述图形处理单元内的纹理单元,并且其中进一步的,所述纹理单元的每个纹理操作包括纹理请求操作和从所述管线缓冲器的纹理读回操作。
11.如权利要求10所述的方法,其中,所述只允许所述数目的线程或更少数目的线程由所述执行单元并发操作,通过保证所述数目的线程内的全部纹理读回操作都有机会执行来防止死锁。
12.如权利要求8所述的方法,进一步包括:
线程发送数学操作给所述图形处理器的数学功能单元;和
所述数学功能单元从寄存器堆的源寄存器获得用于所述数学操作的源操作数,并将执行所述数学操作的结果返回给所述寄存器堆的目标寄存器。
13.如权利要求12所述的方法,其中,所述功能单元是纹理单元,并且其中,所述寄存器堆不接收所述纹理单元的执行的结果。
14.一种图形处理单元的处理器组,所述处理器组包括:
寄存器堆,用于储存与可在所述处理器组内并发操作的多个线程相关的数据;
纹理单元,用于处理所述多个线程的纹理操作,其中,每个纹理操作包括纹理请求操作和对应的纹理读回操作;
管线缓冲器,其耦接至所述纹理单元,用于接收并储存来自所述纹理单元的结果;和
用于通过只允许预定数目的线程或更少数目的线程由所述纹理单元并发操作来防止所述纹理单元内的死锁的电路,其中所述线程的预定数目基于每个线程内的纹理请求操作的数目并进一步基于所述纹理单元和所述管线缓冲器的尺寸;其中所述线程的预定数目是通过将所述管线缓冲器的所述尺寸和所述纹理单元的所述尺寸除以每个线程内的所述纹理请求操作的数目而计算的。
15.如权利要求14所述的处理器组,进一步包括:数学功能单元,用于处理所述多个线程的数学操作,其中,所述数学功能单元耦接以从所述寄存器堆接收源操作数,并且还耦接以将结果储存到所述寄存器堆中。
16.如权利要求14所述的处理器组,进一步包括:计数器,用于维持所述管线缓冲器和所述纹理单元的闲置存储器资源的计数。
17.如权利要求16所述的处理器组,进一步包括用于防止所述纹理单元内的死锁的电路,所述用于防止死锁的电路包括:
用于确定线程的对所述纹理单元的纹理请求操作的数目的电路,其中,所述纹理请求操作的数目包括在所述线程内存在纹理读回操作之前存在于所述线程内的多纹理请求操作的数目;和
用于如果所述管线缓冲器和所述纹理单元有足够的闲置存储器资源以适应全部所述数目的纹理请求操作则将所述数目的请求发送给所述纹理单元,否则,不发送任何所述数目的纹理请求操作给所述纹理单元的电路。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/420,751 | 2009-04-08 | ||
US12/420,751 US8698823B2 (en) | 2009-04-08 | 2009-04-08 | System and method for deadlock-free pipelining |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101859257A CN101859257A (zh) | 2010-10-13 |
CN101859257B true CN101859257B (zh) | 2013-09-18 |
Family
ID=42934008
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2010101420064A Active CN101859257B (zh) | 2009-04-08 | 2010-04-08 | 用于无死锁管线操作的系统及方法 |
Country Status (5)
Country | Link |
---|---|
US (2) | US8698823B2 (zh) |
JP (1) | JP5240588B2 (zh) |
KR (1) | KR101226817B1 (zh) |
CN (1) | CN101859257B (zh) |
TW (1) | TWI423162B (zh) |
Families Citing this family (35)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9849372B2 (en) | 2012-09-28 | 2017-12-26 | Sony Interactive Entertainment Inc. | Method and apparatus for improving efficiency without increasing latency in emulation of a legacy application title |
US9626191B2 (en) | 2011-12-22 | 2017-04-18 | Nvidia Corporation | Shaped register file reads |
US20130191572A1 (en) * | 2012-01-23 | 2013-07-25 | Qualcomm Incorporated | Transaction ordering to avoid bus deadlocks |
US9925468B2 (en) | 2012-06-29 | 2018-03-27 | Sony Interactive Entertainment Inc. | Suspending state of cloud-based legacy applications |
US9656163B2 (en) | 2012-06-29 | 2017-05-23 | Sony Interactive Entertainment Inc. | Haptic enhancements for emulated video game not originally designed with haptic capabilities |
US9717989B2 (en) | 2012-06-29 | 2017-08-01 | Sony Interactive Entertainment Inc. | Adding triggers to cloud-based emulated games |
US9694276B2 (en) | 2012-06-29 | 2017-07-04 | Sony Interactive Entertainment Inc. | Pre-loading translated code in cloud based emulated applications |
US11013993B2 (en) | 2012-09-28 | 2021-05-25 | Sony Interactive Entertainment Inc. | Pre-loading translated code in cloud based emulated applications |
US9707476B2 (en) | 2012-09-28 | 2017-07-18 | Sony Interactive Entertainment Inc. | Method for creating a mini-game |
US20140092087A1 (en) | 2012-09-28 | 2014-04-03 | Takayuki Kazama | Adaptive load balancing in software emulation of gpu hardware |
US9697006B2 (en) * | 2012-12-19 | 2017-07-04 | Nvidia Corporation | Technique for performing memory access operations via texture hardware |
US9405605B1 (en) | 2013-01-21 | 2016-08-02 | Amazon Technologies, Inc. | Correction of dependency issues in network-based service remedial workflows |
US9183092B1 (en) * | 2013-01-21 | 2015-11-10 | Amazon Technologies, Inc. | Avoidance of dependency issues in network-based service startup workflows |
US9165396B2 (en) * | 2013-02-26 | 2015-10-20 | Nvidia Corporation | Graphics processing unit with a texture return buffer and a texture queue |
US9171525B2 (en) * | 2013-02-26 | 2015-10-27 | Nvidia Corporation | Graphics processing unit with a texture return buffer and a texture queue |
US9258012B2 (en) | 2013-03-15 | 2016-02-09 | Sony Computer Entertainment Inc. | Compression of state information for data transfer over cloud-based networks |
JP5466786B1 (ja) * | 2013-08-28 | 2014-04-09 | 株式会社 ディー・エヌ・エー | 画像処理装置及び画像処理プログラム |
KR102161742B1 (ko) | 2013-10-11 | 2020-10-05 | 삼성전자주식회사 | 피드백 경로를 포함하는 파이프 라인 시스템 및 그 동작방법 |
US9760967B2 (en) * | 2013-11-13 | 2017-09-12 | Qualcomm Incorporated | System and method of dynamically throttling CPU frequency for gaming workloads |
CN103713884B (zh) * | 2013-12-18 | 2016-06-29 | 珠海金山网络游戏科技有限公司 | 多线程通过数组处理数据的方法、系统及多线程处理器 |
US9825884B2 (en) | 2013-12-30 | 2017-11-21 | Cavium, Inc. | Protocol independent programmable switch (PIPS) software defined data center networks |
GB2524063B (en) | 2014-03-13 | 2020-07-01 | Advanced Risc Mach Ltd | Data processing apparatus for executing an access instruction for N threads |
CN103955407B (zh) * | 2014-04-24 | 2018-09-25 | 深圳中微电科技有限公司 | 在处理器中减小纹理延迟的方法及装置 |
US9633153B1 (en) * | 2014-12-31 | 2017-04-25 | Cadence Design Systems, Inc. | Method, system, and computer program product for verifying an electronic design using stall prevention requirements of electronic circuit design models of the electronic design |
US10616144B2 (en) | 2015-03-30 | 2020-04-07 | Cavium, Llc | Packet processing system, method and device having reduced static power consumption |
US9747226B2 (en) * | 2015-03-30 | 2017-08-29 | Cavium, Inc. | Packet processing system, method and device to optimize packet buffer space |
US10242494B2 (en) * | 2017-04-01 | 2019-03-26 | Intel Corporation | Conditional shader for graphics |
US10417731B2 (en) | 2017-04-24 | 2019-09-17 | Intel Corporation | Compute optimization mechanism for deep neural networks |
US10417734B2 (en) | 2017-04-24 | 2019-09-17 | Intel Corporation | Compute optimization mechanism for deep neural networks |
CN107770090B (zh) * | 2017-10-20 | 2020-05-01 | 深圳市楠菲微电子有限公司 | 用于控制流水线中寄存器的方法和装置 |
CN108509241B (zh) * | 2018-03-15 | 2021-06-04 | Oppo广东移动通信有限公司 | 一种图像的全屏显示方法、全屏显示装置及移动终端 |
US10990443B2 (en) | 2018-12-04 | 2021-04-27 | International Business Machines Corporation | Utilization profiling and scheduling operations using thread specific execution units usage of a multi-core multi-threaded processor |
US10657699B1 (en) * | 2018-12-08 | 2020-05-19 | Arm Limited | Performing texturing operations for sets of plural execution threads in graphics processing systems |
KR102687597B1 (ko) * | 2018-12-28 | 2024-07-22 | 엘지디스플레이 주식회사 | 발광 표시장치 |
KR102531567B1 (ko) * | 2020-04-03 | 2023-05-15 | 서울대학교산학협력단 | 데드락 회피 방법 및 시스템 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6427195B1 (en) * | 2000-06-13 | 2002-07-30 | Hewlett-Packard Company | Thread local cache memory allocator in a multitasking operating system |
CN1538296A (zh) * | 2003-02-18 | 2004-10-20 | 图形处理单元的多线程内核 | |
CN1938730A (zh) * | 2004-02-27 | 2007-03-28 | 辉达公司 | 基于寄存器的对纹理请求的排队 |
CN1981273A (zh) * | 2004-04-01 | 2007-06-13 | 辉达公司 | 总线结构中的死锁避免 |
Family Cites Families (123)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS6414648A (en) | 1987-07-08 | 1989-01-18 | Mitsubishi Electric Corp | Arithmetic processor |
US5455913A (en) | 1990-05-14 | 1995-10-03 | At&T Global Information Solutions Company | System and method for transferring data between independent busses |
US5301295A (en) | 1991-05-22 | 1994-04-05 | Analog Devices, Inc. | Data processor apparatus and method with selective caching of instructions |
US5444853A (en) | 1992-03-31 | 1995-08-22 | Seiko Epson Corporation | System and method for transferring data between a plurality of virtual FIFO's and a peripheral via a hardware FIFO and selectively updating control information associated with the virtual FIFO's |
US5768548A (en) | 1992-04-15 | 1998-06-16 | Intel Corporation | Bus bridge for responding to received first write command by storing data and for responding to received second write command by transferring the stored data |
US5546548A (en) | 1993-03-31 | 1996-08-13 | Intel Corporation | Arbiter and arbitration process for a dynamic and flexible prioritization |
US5555424A (en) | 1994-10-06 | 1996-09-10 | The Dow Chemical Company | Extended Harvard architecture computer memory system with programmable variable address increment |
US5706466A (en) | 1995-01-13 | 1998-01-06 | Vlsi Technology, Inc. | Von Neumann system with harvard processor and instruction buffer |
US5923859A (en) | 1995-04-13 | 1999-07-13 | Compaq Computer Corporation | Dual arbiters for arbitrating access to a first and second bus in a computer system having bus masters on each bus |
US5877741A (en) * | 1995-06-07 | 1999-03-02 | Seiko Epson Corporation | System and method for implementing an overlay pathway |
US6175634B1 (en) | 1995-08-28 | 2001-01-16 | Intel Corporation | Adaptive noise reduction technique for multi-point communication system |
US6226695B1 (en) | 1995-09-29 | 2001-05-01 | International Business Machines Corporation | Information handling system including non-disruptive command and data movement between storage and one or more auxiliary processors |
US5717954A (en) | 1995-10-13 | 1998-02-10 | Compaq Computer Corporation | Locked exchange FIFO |
US5968143A (en) | 1995-12-13 | 1999-10-19 | International Business Machines Corporation | Information handling system for transfer of command blocks to a local processing side without local processor intervention |
US5940866A (en) | 1995-12-13 | 1999-08-17 | International Business Machines Corporation | Information handling system having a local address queue for local storage of command blocks transferred from a host processing side |
US5761468A (en) | 1996-05-15 | 1998-06-02 | Sun Microsystems Inc | Hardware mechanism for optimizing instruction and data prefetching by forming augmented prefetch instructions |
US5822568A (en) | 1996-05-20 | 1998-10-13 | Advanced Micro Devices, Inc. | System for improving the real-time functionality of a personal computer which employs an interrupt servicing DMA controller |
US5745772A (en) | 1996-08-02 | 1998-04-28 | Micron Electronics, Inc. | Advanced programmable interrupt controller |
US5790817A (en) | 1996-09-25 | 1998-08-04 | Advanced Micro Devices, Inc. | Configurable digital wireless and wired communications system architecture for implementing baseband functionality |
US6185634B1 (en) | 1996-09-27 | 2001-02-06 | Emc Corporation | Address triggered DMA controller with an indicative signal including circuitry for calculating a new trigger address value based on the sum of the current trigger address and the descriptor register data with a trigger address register |
US6018803A (en) | 1996-12-17 | 2000-01-25 | Intel Corporation | Method and apparatus for detecting bus utilization in a computer system based on a number of bus events per sample period |
US6029228A (en) | 1996-12-31 | 2000-02-22 | Texas Instruments Incorporated | Data prefetching of a load target buffer for post-branch instructions based on past prediction accuracy's of branch predictions |
US5864876A (en) | 1997-01-06 | 1999-01-26 | Creative Technology Ltd. | DMA device with local page table |
US5881248A (en) | 1997-03-06 | 1999-03-09 | Advanced Micro Devices, Inc. | System and method for optimizing system bus bandwidth in an embedded communication system |
US6526518B1 (en) | 1997-05-22 | 2003-02-25 | Creative Technology, Ltd. | Programmable bus |
US6085276A (en) | 1997-10-24 | 2000-07-04 | Compaq Computers Corporation | Multi-processor computer system having a data switch with simultaneous insertion buffers for eliminating arbitration interdependencies |
US6266742B1 (en) | 1997-10-27 | 2001-07-24 | International Business Machines Corporation | Algorithm for cache replacement |
US6016528A (en) | 1997-10-29 | 2000-01-18 | Vlsi Technology, Inc. | Priority arbitration system providing low latency and guaranteed access for devices |
US6098114A (en) | 1997-11-14 | 2000-08-01 | 3Ware | Disk array system for processing and tracking the completion of I/O requests |
US6418496B2 (en) | 1997-12-10 | 2002-07-09 | Intel Corporation | System and apparatus including lowest priority logic to select a processor to receive an interrupt message |
US6233656B1 (en) | 1997-12-22 | 2001-05-15 | Lsi Logic Corporation | Bandwidth optimization cache |
US6298407B1 (en) | 1998-03-04 | 2001-10-02 | Intel Corporation | Trigger points for performance optimization in bus-to-bus bridges |
US6157980A (en) | 1998-03-23 | 2000-12-05 | International Business Machines Corporation | Cache directory addressing scheme for variable cache sizes |
US6085278A (en) | 1998-06-02 | 2000-07-04 | Adaptec, Inc. | Communications interface adapter for a computer system including posting of system interrupt status |
US6182112B1 (en) | 1998-06-12 | 2001-01-30 | Unisys Corporation | Method of and apparatus for bandwidth control of transfers via a bi-directional interface |
US6490654B2 (en) | 1998-07-31 | 2002-12-03 | Hewlett-Packard Company | Method and apparatus for replacing cache lines in a cache memory |
US6101568A (en) | 1998-08-25 | 2000-08-08 | Stmicroelectronics, Inc. | Bus interface unit having dual purpose transaction buffer |
US6065088A (en) | 1998-08-31 | 2000-05-16 | International Business Machines Corporation | System and method for interrupt command queuing and ordering |
US6205524B1 (en) | 1998-09-16 | 2001-03-20 | Neomagic Corp. | Multimedia arbiter and method using fixed round-robin slots for real-time agents and a timed priority slot for non-real-time agents |
US20020056027A1 (en) | 1998-10-29 | 2002-05-09 | Hiroki Kanai | Information processing system |
US6233645B1 (en) | 1998-11-02 | 2001-05-15 | Compaq Computer Corporation | Dynamically disabling speculative prefetch when high priority demand fetch opportunity use is high |
US6314472B1 (en) | 1998-12-01 | 2001-11-06 | Intel Corporation | Abort of DRAM read ahead when PCI read multiple has ended |
US6397296B1 (en) | 1999-02-19 | 2002-05-28 | Hitachi Ltd. | Two-level instruction cache for embedded processors |
US6345341B1 (en) | 1999-06-24 | 2002-02-05 | International Business Machines Corporation | Method of cache management for dynamically disabling O state memory-consistent data |
US6681285B1 (en) | 1999-07-22 | 2004-01-20 | Index Systems, Inc. | Memory controller and interface |
US7389466B1 (en) | 1999-08-12 | 2008-06-17 | Texas Instruments Incorporated | ECC in computer system with associated mass storage device, and method for operating same |
US6751038B1 (en) | 1999-10-29 | 2004-06-15 | Kabushiki Kaisha Toshiba | Data write control system and method therefor |
US6574712B1 (en) | 1999-11-08 | 2003-06-03 | International Business Machines Corporation | Software prefetch system and method for predetermining amount of streamed data |
US6631434B1 (en) | 1999-11-15 | 2003-10-07 | Hewlett-Packard Development Company, L.P. | Dynamic early indication system for a computer |
US6560657B1 (en) | 1999-12-23 | 2003-05-06 | Intel Corporation | System and method for controlling peripheral devices |
US6499090B1 (en) | 1999-12-28 | 2002-12-24 | Intel Corporation | Prioritized bus request scheduling mechanism for processing devices |
JP3450248B2 (ja) | 2000-01-19 | 2003-09-22 | エヌイーシー東芝スペースシステム株式会社 | 人工衛星搭載用データバス制御方法、そのシステム |
US6578102B1 (en) | 2000-04-18 | 2003-06-10 | International Business Machines Corporation | Tracking and control of prefetch data in a PCI bus system |
JP3796390B2 (ja) | 2000-04-27 | 2006-07-12 | シャープ株式会社 | データ駆動型情報処理装置 |
JP4489245B2 (ja) * | 2000-05-02 | 2010-06-23 | オリンパス株式会社 | 画像処理装置とその制御方法 |
DE10121792C2 (de) | 2000-05-26 | 2003-09-25 | Ibm | Universelle Ladeadresse/Wertevorhersageschema |
US6754755B1 (en) | 2000-08-10 | 2004-06-22 | Hewlett-Packard Development Company, L.P. | Service request system using an activity indicator to reduce processing overhead |
US6745258B1 (en) | 2000-08-22 | 2004-06-01 | Hewlett-Packard Development Company, L.P. | Raid system having multiple reply queues for use with multiprocessor host |
US6957290B1 (en) | 2000-10-06 | 2005-10-18 | Broadcom Corporation | Fast arbitration scheme for a bus |
US6696954B2 (en) | 2000-10-16 | 2004-02-24 | Amerasia International Technology, Inc. | Antenna array for smart RFID tags |
US6681281B1 (en) | 2000-11-17 | 2004-01-20 | Advanced Micro Devices, Inc. | System and method for implementing a multi-level interrupt scheme in a computer system |
GB0031763D0 (en) | 2000-12-29 | 2001-02-07 | Mitel Semiconductor Ltd | Arbiter for a queue management system |
US6480939B2 (en) | 2000-12-29 | 2002-11-12 | Intel Corporation | Method and apparatus for filtering prefetches to provide high prefetch accuracy using less hardware |
US6901467B2 (en) | 2001-02-23 | 2005-05-31 | Hewlett-Packard Development Company, L.P. | Enhancing a PCI-X split completion transaction by aligning cachelines with an allowable disconnect boundary's ending address |
US6571318B1 (en) | 2001-03-02 | 2003-05-27 | Advanced Micro Devices, Inc. | Stride based prefetcher with confidence counter and dynamic prefetch-ahead mechanism |
US20020144054A1 (en) | 2001-03-30 | 2002-10-03 | Fanning Blaise B. | Prefetch canceling based on most recent accesses |
US6728856B2 (en) | 2001-06-01 | 2004-04-27 | Microchip Technology Incorporated | Modified Harvard architecture processor having program memory space mapped to data memory space |
US6842803B2 (en) | 2001-07-09 | 2005-01-11 | Advanced Micro Devices, Inc. | Computer system with privileged-mode modem driver |
US6907480B2 (en) | 2001-07-11 | 2005-06-14 | Seiko Epson Corporation | Data processing apparatus and data input/output apparatus and data input/output method |
US6696854B2 (en) | 2001-09-17 | 2004-02-24 | Broadcom Corporation | Methods and circuitry for implementing first-in first-out structure |
US7376846B2 (en) | 2001-10-14 | 2008-05-20 | Palm, Inc. | Charging and communication cable system for a mobile computer apparatus |
WO2003052758A1 (en) | 2001-12-13 | 2003-06-26 | Seagate Technology Llc | Raid data storage array spin-up control |
US6925534B2 (en) | 2001-12-31 | 2005-08-02 | Intel Corporation | Distributed memory module cache prefetch |
US6877048B2 (en) | 2002-03-12 | 2005-04-05 | International Business Machines Corporation | Dynamic memory allocation between inbound and outbound buffers in a protocol handler |
US20030187911A1 (en) | 2002-04-01 | 2003-10-02 | Michael Abd-El-Malek | Method and apparatus to facilitate recovering a thread from a checkpoint |
TWI258081B (en) | 2002-04-04 | 2006-07-11 | Via Tech Inc | Arbitrating method and arbiter for bus grant |
US6904473B1 (en) | 2002-05-24 | 2005-06-07 | Xyratex Technology Limited | Direct memory access controller and method of filtering data during data transfer from a source memory to a destination memory |
US20030229743A1 (en) | 2002-06-05 | 2003-12-11 | Brown Andrew C. | Methods and structure for improved fairness bus arbitration |
US6898674B2 (en) | 2002-06-11 | 2005-05-24 | Intel Corporation | Apparatus, method, and system for synchronizing information prefetch between processors and memory controllers |
US6801963B2 (en) | 2002-07-24 | 2004-10-05 | Intel Corporation | Method, system, and program for configuring components on a bus for input/output operations |
DE10234934A1 (de) | 2002-07-31 | 2004-03-18 | Advanced Micro Devices, Inc., Sunnyvale | Antwortreihenwiederherstellungsmechanismus |
DE10234933A1 (de) | 2002-07-31 | 2004-03-18 | Advanced Micro Devices, Inc., Sunnyvale | Pufferung von Non-Posted-Lesebefehlen und Antworten |
US7167954B2 (en) | 2002-09-09 | 2007-01-23 | Broadcom Corporation | System and method for caching |
US6895475B2 (en) | 2002-09-30 | 2005-05-17 | Analog Devices, Inc. | Prefetch buffer method and apparatus |
DE60314347T2 (de) | 2002-09-30 | 2007-09-27 | Matsushita Electric Industrial Co., Ltd., Kadoma | Betriebsmittelverwaltungsgerät |
TW569236B (en) | 2002-10-03 | 2004-01-01 | Via Tech Inc | Multiple-grant controller with parallel arbitration mechanism and related method |
US6910106B2 (en) | 2002-10-04 | 2005-06-21 | Microsoft Corporation | Methods and mechanisms for proactive memory management |
US6901483B2 (en) | 2002-10-24 | 2005-05-31 | International Business Machines Corporation | Prioritizing and locking removed and subsequently reloaded cache lines |
US6976106B2 (en) | 2002-11-01 | 2005-12-13 | Sonics, Inc. | Method and apparatus for speculative response arbitration to improve system latency |
CA2508141C (en) | 2002-12-02 | 2009-11-03 | Silverbrook Research Pty Ltd | Dead nozzle compensation |
US20040117606A1 (en) | 2002-12-17 | 2004-06-17 | Hong Wang | Method and apparatus for dynamically conditioning statically produced load speculation and prefetches using runtime information |
US6983356B2 (en) | 2002-12-19 | 2006-01-03 | Intel Corporation | High performance memory device-state aware chipset prefetcher |
US7143219B1 (en) | 2002-12-31 | 2006-11-28 | Intel Corporation | Multilevel fair priority round robin arbiter |
US6950892B2 (en) | 2003-04-10 | 2005-09-27 | International Business Machines Corporation | Method and system for managing distributed arbitration for multicycle data transfer requests |
JP3632695B2 (ja) | 2003-05-06 | 2005-03-23 | セイコーエプソン株式会社 | データ転送制御装置、電子機器及びデータ転送制御方法 |
JP4313607B2 (ja) | 2003-05-08 | 2009-08-12 | 富士通株式会社 | バス接続回路及びバス接続システム |
US7177985B1 (en) | 2003-05-30 | 2007-02-13 | Mips Technologies, Inc. | Microprocessor with improved data stream prefetching |
US7139878B2 (en) | 2003-06-20 | 2006-11-21 | Freescale Semiconductor, Inc. | Method and apparatus for dynamic prefetch buffer configuration and replacement |
US7600058B1 (en) | 2003-06-26 | 2009-10-06 | Nvidia Corporation | Bypass method for efficient DMA disk I/O |
US7225318B2 (en) | 2003-10-08 | 2007-05-29 | Intel Corporation | Dynamic prefetch in continuous burst read operation |
US6996647B2 (en) | 2003-12-17 | 2006-02-07 | International Business Machines Corporation | Token swapping for hot spot management |
US7281148B2 (en) | 2004-03-26 | 2007-10-09 | Intel Corporation | Power managed busses and arbitration |
JP4377279B2 (ja) | 2004-05-06 | 2009-12-02 | 株式会社日立製作所 | ストレージシステム、コンピュータシステム、およびストレージシステムの設定方法 |
ATE534114T1 (de) * | 2004-05-14 | 2011-12-15 | Nvidia Corp | Programmierbarer prozessor mit geringem stromverbrauch |
US7206902B2 (en) | 2004-08-17 | 2007-04-17 | Nvidia Corporation | System, apparatus and method for predicting accesses to a memory |
US7461211B2 (en) | 2004-08-17 | 2008-12-02 | Nvidia Corporation | System, apparatus and method for generating nonsequential predictions to access a memory |
US7441087B2 (en) | 2004-08-17 | 2008-10-21 | Nvidia Corporation | System, apparatus and method for issuing predictions from an inventory to access a memory |
US7260686B2 (en) | 2004-08-17 | 2007-08-21 | Nvidia Corporation | System, apparatus and method for performing look-ahead lookup on predictive information in a cache memory |
US7218291B2 (en) | 2004-09-13 | 2007-05-15 | Nvidia Corporation | Increased scalability in the fragment shading pipeline |
US7525986B2 (en) | 2004-10-28 | 2009-04-28 | Intel Corporation | Starvation prevention scheme for a fixed priority PCI-Express arbiter with grant counters using arbitration pools |
US7263566B2 (en) | 2004-12-30 | 2007-08-28 | Qualcomm Incorporated | Method and apparatus of reducing transfer latency in an SOC interconnect |
US20060206902A1 (en) * | 2005-03-14 | 2006-09-14 | Sujat Jamil | Variable interleaved multithreaded processor method and system |
US20070165042A1 (en) * | 2005-12-26 | 2007-07-19 | Seitaro Yagi | Rendering apparatus which parallel-processes a plurality of pixels, and data transfer method |
JP4621604B2 (ja) | 2006-02-20 | 2011-01-26 | 株式会社東芝 | バス装置、バスシステムおよび情報転送方法 |
JP4892253B2 (ja) | 2006-02-28 | 2012-03-07 | ルネサスエレクトロニクス株式会社 | 電子装置 |
US8766996B2 (en) * | 2006-06-21 | 2014-07-01 | Qualcomm Incorporated | Unified virtual addressed register file |
US8345053B2 (en) * | 2006-09-21 | 2013-01-01 | Qualcomm Incorporated | Graphics processors with parallel scheduling and execution of threads |
US7631126B2 (en) | 2007-05-24 | 2009-12-08 | Research In Motion Limited | System and method for interfacing an electronic device with a host system |
US7734856B2 (en) | 2007-08-22 | 2010-06-08 | Lantiq Deutschland Gmbh | Method for operating a plurality of arbiters and arbiter system |
US7876329B2 (en) * | 2007-09-10 | 2011-01-25 | Via Technologies, Inc. | Systems and methods for managing texture data in a computer |
US8099539B2 (en) | 2008-03-10 | 2012-01-17 | Lsi Corporation | Method and system of a shared bus architecture |
US8370552B2 (en) | 2008-10-14 | 2013-02-05 | Nvidia Corporation | Priority based bus arbiters avoiding deadlock and starvation on buses that support retrying of transactions |
US7895385B2 (en) | 2008-12-09 | 2011-02-22 | Nvidia Corporation | Establishing communication over serial buses in a slave device |
-
2009
- 2009-04-08 US US12/420,751 patent/US8698823B2/en active Active
-
2010
- 2010-03-23 JP JP2010066407A patent/JP5240588B2/ja active Active
- 2010-04-07 TW TW099110703A patent/TWI423162B/zh active
- 2010-04-08 KR KR1020100032219A patent/KR101226817B1/ko active IP Right Grant
- 2010-04-08 CN CN2010101420064A patent/CN101859257B/zh active Active
-
2013
- 2013-11-27 US US14/092,816 patent/US9928639B2/en active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6427195B1 (en) * | 2000-06-13 | 2002-07-30 | Hewlett-Packard Company | Thread local cache memory allocator in a multitasking operating system |
CN1538296A (zh) * | 2003-02-18 | 2004-10-20 | 图形处理单元的多线程内核 | |
CN1938730A (zh) * | 2004-02-27 | 2007-03-28 | 辉达公司 | 基于寄存器的对纹理请求的排队 |
CN1981273A (zh) * | 2004-04-01 | 2007-06-13 | 辉达公司 | 总线结构中的死锁避免 |
Also Published As
Publication number | Publication date |
---|---|
US8698823B2 (en) | 2014-04-15 |
CN101859257A (zh) | 2010-10-13 |
JP2010244529A (ja) | 2010-10-28 |
US20140092114A1 (en) | 2014-04-03 |
KR20100112099A (ko) | 2010-10-18 |
TWI423162B (zh) | 2014-01-11 |
JP5240588B2 (ja) | 2013-07-17 |
US9928639B2 (en) | 2018-03-27 |
US20100259536A1 (en) | 2010-10-14 |
KR101226817B1 (ko) | 2013-01-28 |
TW201044311A (en) | 2010-12-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101859257B (zh) | 用于无死锁管线操作的系统及方法 | |
US7676657B2 (en) | Across-thread out-of-order instruction dispatch in a multithreaded microprocessor | |
US8732713B2 (en) | Thread group scheduler for computing on a parallel thread processor | |
JP4292198B2 (ja) | 実行スレッドをグループ化するための方法 | |
US6693719B1 (en) | Path to trapezoid decomposition of polygons for printing files in a page description language | |
US10255228B2 (en) | System and method for performing shaped memory access operations | |
US8533435B2 (en) | Reordering operands assigned to each one of read request ports concurrently accessing multibank register file to avoid bank conflict | |
US9069609B2 (en) | Scheduling and execution of compute tasks | |
CN1036877C (zh) | 一条多处理器流水线的动态工作量平衡 | |
US8429656B1 (en) | Thread count throttling for efficient resource utilization | |
CN104050033A (zh) | 用于有索引的屏障的硬件调度的系统和方法 | |
CN101627367A (zh) | 按需多线程多媒体处理器 | |
US7747842B1 (en) | Configurable output buffer ganging for a parallel processor | |
US9304775B1 (en) | Dispatching of instructions for execution by heterogeneous processing engines | |
CN103176848A (zh) | 计算工作分布参考计数器 | |
CN103207774A (zh) | 用于解决线程发散的方法和系统 | |
CN103294536A (zh) | 控制用于处理任务的工作分布 | |
CN103885902A (zh) | 用于经由纹理硬件实施存储器访问操作的技术 | |
US9715413B2 (en) | Execution state analysis for assigning tasks to streaming multiprocessors | |
CN103870213A (zh) | 经由管线化的状态包触发性能事件捕获 | |
CN118069379B (zh) | 一种基于gpu资源的调度实现方法 | |
US8321618B1 (en) | Managing conflicts on shared L2 bus | |
US9171525B2 (en) | Graphics processing unit with a texture return buffer and a texture queue | |
US9165396B2 (en) | Graphics processing unit with a texture return buffer and a texture queue | |
US9262348B2 (en) | Memory bandwidth reallocation for isochronous traffic |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |