CN101014933A - 使用具有较低端口数的存储器的模拟多端口存储器 - Google Patents

使用具有较低端口数的存储器的模拟多端口存储器 Download PDF

Info

Publication number
CN101014933A
CN101014933A CNA2005800298490A CN200580029849A CN101014933A CN 101014933 A CN101014933 A CN 101014933A CN A2005800298490 A CNA2005800298490 A CN A2005800298490A CN 200580029849 A CN200580029849 A CN 200580029849A CN 101014933 A CN101014933 A CN 101014933A
Authority
CN
China
Prior art keywords
operand
thread
register
thesaurus
programmed instruction
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CNA2005800298490A
Other languages
English (en)
Other versions
CN101014933B (zh
Inventor
约翰·埃里克·林霍尔姆
明·Y·西乌
西蒙·S·莫伊
塞缪尔·刘
约翰·R·尼克奥尔斯
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nvidia Corp
Original Assignee
Nvidia Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nvidia Corp filed Critical Nvidia Corp
Publication of CN101014933A publication Critical patent/CN101014933A/zh
Application granted granted Critical
Publication of CN101014933B publication Critical patent/CN101014933B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30123Organisation of register space, e.g. banked or distributed register file according to context, e.g. thread buffers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • G06F9/30167Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3824Operand accessing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units

Abstract

本发明揭示一种使用较低端口数存储器作为库来模拟一多端口存储器的设备及方法。分配存储器的一部分来存储与一线程相关联的数据。可将分配给一线程的所述存储器部分存储于单个库中或多个库中。当源操作数自一个或多个库输出时,一耦接至每一库的收集器单元搜集为处理一程序指令所需的源操作数。当已搜集到为处理所述程序指令所需的所有源操作数时,所述收集器单元将所述源操作数输出至一执行单元。

Description

使用具有较低端口数的存储器的模拟多端口存储器
技术领域
本发明的一个或多个方面大体而言涉及数据处理,且更具体而言涉及在一可编程图形处理器或通用处理器中使用单端口存储器来模拟一多端口存储器。
背景技术
当前的数据处理包括开发用于执行程序指令(包括具有两个或更多个操作数的指令)的系统及方法。所述操作数存储于处理器内的寄存器中,以供在执行一程序期间有效地存取。某些程序指令(例如乘法及乘法-累加)规定两个或更多个操作数。在传统上,一寄存器文件包括一多端口存储器,以便可在单个时钟循环中读取两个或更多个位置,其中每一位置存储一个操作数。因此,可在单个时钟循环中采集至少一个程序指令所需的所有操作数并将其输出至一执行单元。
与单端口存储器相比,一多端口存储器需要更大的电路小片面积并使用更大的功率。然而,不同于多端口存储器,在每一时钟循环中仅可读取单个位置。因此,与多端口存储器相比,为采集执行一个程序指令所需的操作数,需要两个或更多个时钟循环,从而使性能降低。
因此,将希望在一使用较小电路小片面积及功率的处理器内提供一多端口寄存器文件的性能优点。
发明内容
本发明涉及用于使用较低端口数存储器作为库来模拟一多端口存储器的新型系统及方法。分配存储器的一部分来存储与一线程相关联的数据。分配给一线程的所述存储器部分可存储于单个库中或多个库中。在源操作数自一个或多个库输出时,一耦接至每一库的收集器单元搜集为处理一指令所需的源操作数。当已搜集到为处理指令所需的所有源操作数时,所述收集器单元将所述源操作数输出至一执行单元。使用较低端口数存储器模拟一多端口存储器所需要的电路小片面积小于一具有相当容量的多端口存储器。与具有相当容量的多端口存储器相比,经配置以模拟一多端口存储器的较低端口数存储器还具有变低的功率需求。
本发明的各实施例包括一寄存器文件单元,其用于存储用于处理器程序指令的操作数。所述寄存器文件单元包括:一经配置以为一第一线程存储操作数的第一存储库,一经配置以为一第二线程存储操作数的第二存储库,一第一收集器单元,及一第二收集器单元。所述第一收集器单元经配置以自所述第一存储库接收用于所述第一线程的操作数并输出所述第一线程的一程序指令及由所述第一线程的程序指令所规定的任何操作数。所述第二收集器单元经配置以自所述第二存储库接收用于所述第二线程的操作数并输出所述第二线程的一程序指令及由所述第二线程的程序指令所规定的任何操作数。
本发明的一种方法的各实施例包括:确定为一线程分配的寄存器数量,并将用于所述线程的所述数量的寄存器分配至一组经配置以模拟一多端口存储器的存储库中至少一个存储库中的位置。
本发明的各实施例包括一种用于为程序指令存储操作数的系统。所述系统包括:分配构件,其用于根据一分配类型来分配用于存储由一线程所使用的操作数的寄存器;存储构件,其用于将所述操作数存储于所述寄存器中;及收集构件,其用于搜集由所述线程内的-程序指令所规定的任何操作数。
附图说明
附图显示根据本发明一个或多个方面的实例性实施例;然而,所述附图不应视为将本发明限定至所示实施例,而是仅用于便于解释及理解的目的。
图1是一根据本发明一个或多个方面的相应计算机系统的一实例性实施例的方块图,其包括一主计算机及一图形子系统;
图2是根据本发明一个或多个方面的图1中可编程图形处理管线的一实例性实施例的方块图;
图3是根据本发明一个或多个方面的图2中寄存器文件单元的一实例性实施例的方块图;
图4A是根据本发明一个或多个方面对用于处理线程的寄存器进行分配的一实例性实施例;
图4B、4C及4D是根据本发明一个或多个方面对用于处理线程的寄存器进行分配的其他实例性实施例;
图4E是根据本发明一个或多个方面对用于线程的寄存器进行分派的一实例性实施例;
图4F是根据本发明一个或多个方面对用于线程的寄存器进行分派的另一实例性实施例;
图5是根据本发明一个或多个方面图2中的寄存器文件单元的另一实例性实施例的方块图;
图6A图解说明根据本发明一个或多个方面的一种分配用于处理一线程的寄存器的方法的一实施例;
图6B图解说明根据本发明一个或多个方面的另一种分配用于处理一线程的寄存器的方法的一实施例;
图6C图解说明根据本发明一个或多个方面的另一种分配用于处理一线程的寄存器的方法的一实施例。
具体实施方式
在下文说明中列举了大量具体细节以使人们能够更透彻地了解本发明。当然,所属领域的技术人员应明了:无需某些或全部这些具体细节也可实施本发明。在其他示例中,未对众所周知的特征加以赘述,以免淡化本发明。
图1是一计算系统的图解说明,所述计算系统总体上标记为100且包括一主计算机110及一图形子系统170。计算系统100可为台式计算机、服务器、膝上型计算机、掌上型计算机、图形输入板计算机、游戏控制台、例如个人数字助理(PDA)或蜂窝式电话等便携式无线终端机、基于计算机的模拟器、或类似装置。主计算机110包括主处理器114,主处理器114可包括一直接介接至主存储器112的系统存储器控制器或者可通过一系统接口115与主存储器112进行通信。系统接口115可为一I/O(输入/输出)接口,或者一包括用于直接介接主存储器112的系统存储器控制器的桥接装置。所属领域中所知的系统接口115的一实例包括IntelNorthbridge。
主计算机110通过系统接口115及一图形处理器105内的图形接口117与图形子系统170进行通信。在图形接口117处接收到的数据可传递至一前端130或者通过存储器控制器120写入至一本地存储器140。图形处理器105使用图形存储器来存储图形数据及程序指令,其中图形数据是输入至图形处理器内各组件或自这些组件输出的任何数据。图形存储器可包括主存储器112、本地存储器140、耦接至图形处理器105内各组件的寄存器文件、及类似装置的某些部分。
除其他组件外,图形处理器105还包括前端130,前端130经由图形接口117自主计算机110接收命令。前端130对这些命令进行解译及格式化,并将经格式化的命令及数据输出至一IDX(索引处理器)135。可编程图形处理管线150使用某些所述经格式化命令通过提供存储于存储器中的程序指令或图形数据的位置来启动数据处理。IDX135、可编程图形处理管线150及一光栅操作单元160分别包括一通往存储器控制器120的接口,通过所述接口可自存储器(例如本地存储器140与主存储器120的任一组合)读取程序指令及数据。当使用主存储器112的一部分来存储程序指令及数据时,可将主存储器112的所述部分解除高速缓存,以便提高由图形处理器105进行存取的性能。
IDX135视需要自存储器读取经处理的数据(例如由光栅操作单元160写入的数据),并将资料、经处理的资料及经格式化的命令输出至可编程图形处理管线150。可编程图形处理管线150及光栅操作单元160分别包含一个或多个可编程处理单元,以执行各种专门功能。这些功能中的某些功能为表查找、标量及向量加法、乘法、除法、座标系映射、向量范数的计算、嵌图、导数的计算、内插、及类似功能。可编程图形处理管线150及光栅操作单元160分别视需要配置成通过这些单元多遍地执行数据处理作业或者在可编程图形处理管线150内多遍地执行数据处理作业。光栅操作单元160包括一通往存储器控制器120的写入接口,数据可通过所述写入接口写入至存储器。
在一典型实施方案中,可编程图形处理管线150执行几何形状计算、光栅化、及片段计算。因此,对可编程图形处理管线150进行编程以处理表面、基元、顶点、片断、像素、样本或任何其他数据。为简明起见,在本说明的其余部分中将使用“样本”这一用语来指代例如表面、基元、顶点、像素、片断或类似数据等图形数据。
可编程图形处理管线150所输出的样本传递至一光栅操作单元160,光栅操作单元160视需要执行近平面及远平面剪辑以及光栅操作(例如模版印刷、z测试及类似操作),并将结果或由可编程图形处理管线150所输出的样本保存于本地存储器140中。当图形子系统170所接收的数据已由图形处理器105完全处理时,使用一输出控制器180提供图形子系统170的一输出185。输出控制器180视需要经配置以将数据递送至一显示装置、网络、电子控制系统、例如计算系统100等其他计算系统、其他图形子系统100、或类似装置。另一选择为,将数据输出至一薄膜记录装置或写入至一外围装置,例如磁盘驱动器、磁带、光盘或类似装置。
图2是图1中可编程图形处理管线150的图解说明。至少一组样本由IDX 135输出并由可编程图形处理管线150接收到,且根据至少一个程序来处理所述至少一组样本,所述至少一个程序包括图形程序指令。一程序可处理一组或多组样本。反过来,一组样本可由一个或多个程序构成的序列来处理。可编程图形处理管线150的某些实施例包括其他单元,所述其他单元经配置以执行特定功能,例如对基元数据进行光栅化以产生片断数据。
可编程图形处理管线150自IDX135接收样本,例如表面、基元、经处理数据、或类似数据。表面可经流式多处理器200处理以产生基元,所述基元可经流式多处理器200处理以产生顶点,且所述顶点可经流式多处理器200处理以产生片断。在本发明的替代实施例中,一个或多个流式多处理器200包含于一通用处理器(例如主处理器114)中。如在图2中所示,可编程图形处理管线150包括一个或多个流式多处理器200。每一流式多处理器200均包括至少一个或多个将在本文中进一步说明的执行单元270。所述样本可由这些流式多处理器200中的任一个加以处理。在流式多处理器200的某些实施例中,使用一读取接口(在图2中未显示)通过存储器控制器120自本地存储器140或主存储器112读取图形数据(例如纹理映像)。如在下文中所进一步说明,当流式多处理器200内的一处理线程可用时,流式多处理器200便接受一样本。
一流式多处理器200内的线程控制单元220接收样本及一指向要被执行以处理所述样本的程序指令序列的指针。线程控制单元320为每一要被处理的样本分派一线程。一线程包括一指向一程序指令(例如程序内的第一个指令)的指针(程序计数器)、线程状态信息、及用于存储在处理所述样本期间所使用及产生的操作数的存储资源。当为处理一线程所需的资源(例如用于存储操作数或线程状态信息的存储资源)不可用时,流式多处理器200将不接受额外的样本来进行处理。当与一线程相关联的程序指令已执行完毕时,被分配用于存储在执行所述线程期间所接收及所产生的操作数的存储资源(例如寄存器)便可供分配给另一线程,即将所述存储资源解除分配并在线程控制单元220中将所述线程标记为可用。
线程控制单元220将分配信息-其规定为存储操作数所需的存储资源的数量-输出至一寄存器地址单元240。线程控制单元220将所述指针及样本输出至一指令单元230。在每一时钟循环中可自线程控制单元220输出至指令单元230的指针及样本的数量在本发明的不同实施例之间可有所不同。
指令单元230使用一专用读取接口通过存储器控制器120自本地存储器140或主存储器112读取程序指令。在本发明的一替代实施例中,在各流式多处理器200之间共享单个指令单元230。在本发明的某些实施例中,指令单元230包括一指令高速缓冲存储器。
指令单元230执行不处理数据的指令,例如转移指令、调用/返回指令、或分支指令。指令单元230对各程序指令的执行进行调度、使各程序指令交错以处理任何现用(即分配给一样本)的线程。在本发明的某些实施例中,指令单元230在无额外信息规定一寄存器文件单元250内分配给各线程的寄存器特定位置(例如寄存器所位于的库)的情况下对各程序指令的执行进行调度。
指令单元230可经配置以在对用于线程的程序指令进行调度时使用固定或可编程的优先权。例如,被分配用于处理顶点程序指令的线程可始终比被分配用于处理片断程序指令的线程具有更高的优先权。在另一实例中,需要使用较大数量寄存器来存储操作数的线程可具有比需要使用较少寄存器来存储操作数的线程具有更高的优先权。在本发明的某些实施例中,指令单元230自一寄存器文件单元250接收指示具体线程的寄存器利用率的信息,且指令单元230相应地调整特定线程的优先权,以减少对寄存器文件单元250中寄存器的使用。
在本发明的其他实施例中,指令单元230使用规定一寄存器文件单元250内寄存器特定位置的额外信息来对程序指令的执行进行调度。例如,根据寄存器文件单元250内存储有用于指令的一个或多个操作数的库,将各程序指令预先分类成若干个群组。指令单元230以循环方式自每一群组中选择一个程序指令,每一时钟循环将一个或多个程序指令输出至寄存器地址单元240。
指令单元230将所述程序指令及样本输出至寄存器地址单元240。如结合图3及图5所述,寄存器地址单元240存取寄存器文件单元250内存储由每一线程所规定的操作数的寄存器。寄存器地址单元240输出对每一程序指令的请求。请求的实例包括对一特定操作数的读取请求或者对一特定操作数的写入请求。在本发明的一实施例中,寄存器地址单元240在每一时钟循环中输出对单个指令的请求。例如,对于一载入指令(LD),输出一(1)个写入请求以将一操作数写入至一寄存器。类似地,对于一乘法-累加(MAD)指令,输出3个读取请求(每一源操作数一个)及1个写入请求(对目的地操作数的写入请求)。
寄存器地址单元240将所述请求及一对应的程序指令(例如MAD)输出至一寄存器文件单元250。寄存器文件单元250处理所述请求,从而将操作数读取至寄存器文件单元250内的寄存器及自寄存器文件单元250内的寄存器写入操作数。寄存器文件单元250调度对各请求的处理,以免出现回写冲突及基于循环的冲突。在本发明的某些实施例中,寄存器文件单元250使用一记分板来跟踪操作数写入至寄存器的状态,以确定何时可自寄存器读取一操作数。
当对读取请求进行处理以获得为处理一程序指令所需的操作数时,寄存器文件单元250确定何时已获得所有操作数并随后将程序指令及操作数输出至执行单元270以供处理。执行单元270将经处理的操作数返送至寄存器文件单元250,以写入至由程序指令所规定的目的地操作数。执行管线240经程序指令配置以执行例如以下等作业:嵌图,透视修正,内插,明暗处理,混合及类似作业。经处理的样本自每一执行管线240输出至光栅操作单元160。在本发明的某些实施例中,将额外的执行管线240耦接至寄存器文件单元250及光栅操作单元160。
图3是根据本发明一个或多个方面的图2中所示寄存器文件单元250的一实例性实施例的方块图。在本发明的替代实施例中,在一通用处理器(例如主处理器114)内使用寄存器文件单元250。寄存器文件单元250包括两个或更多个存储库-库320,其经配置以模拟单个多端口存储器。每一库320均包括数个用作经配置以存储操作数的寄存器的位置。每一收集器单元330均自寄存器地址单元240接收请求及对应的程序指令,并判定所述程序指令是否是一要由耦接至收集器单元330的特定执行单元365执行的指令。如果所述程序指令是一要由耦接至收集器单元330的特定执行单元365执行的指令,则收集器单元330接受所述程序指令并请求进行处理。在本发明的某些实施例中,每一执行单元365均相同,并使用一优先权方案来确定哪一执行单元365将执行所述程序指令。本发明的替代实施例将所述指令分派给负载最小的执行单元365。在本发明的某些实施例中,两个或更多个收集器单元330耦接至单个执行单元365,且使用一优先权方案来选取所述两个或更多个收集器单元中哪一收集器单元将操作数输出至所述单个执行单元365以供处理。
每一收集器单元330均将对所接受程序指令的请求输出至任一库请求仲裁单元310。每一库请求仲裁单元310均判定所述请求是否需要读取耦接至库请求仲裁单元310的特定库320中的一寄存器。将结合图4A、4B、4C、4D、4E及4F来说明某些可能的寄存器分配。每一请求均由一个库请求仲裁单元310输出至其中定位有被分派给所述请求中所规定操作数的寄存器的库320。被接受的程序指令保持于指定用于搜集操作数的收集器单元330中。每一库请求仲裁单元310还在不同的收集单元330之间进行仲裁并每一时钟循环向耦接至库请求仲裁单元310的库320输出一个请求。
每一库320均包括一读取请求端口以用于自一库请求仲裁单元310接收请求。每一库320还包括一写入请求端口,以用于自执行单元270接收要将经处理数据写入至一分派给由程序指令所规定操作数的目的地寄存器的写入请求。因此,使用2个较低端口数存储器(1个写入端口及1个读取端口)库来模拟一具有2个写入端口及2个读取端口的多端口存储器。在本发明的某些实施例中,使用额外的请求端口。在本发明的其他实施例中,将读取请求端口与写入请求端口相组合,从而存取一单端口存储器。在一时钟循环期间,每一库320均可通过一选择器325将由读取请求所规定的一操作数输出至一对应的收集器单元330。因此,当一程序指令为源数据规定3个操作数时,当所述操作数驻存于同一库320中时,搜集所述操作数需要至少3个时钟循环。每一收集器单元330也可收集源数据,例如存储于库320以外的寄存器(未显示)中的常数及直接数据。选择器325自输入端(未显示)接收未存储于库320中的源数据。当一收集器单元330搜集到所有操作数时,程序指令便准备好发送。在本发明的某些实施例中,包含额外的库请求仲裁单元310、库320、选择器325及收集器单元330,以增大在一时钟循环期间读取的操作数的数量。在本发明的一实施例中,省掉了选择器325且每一库320直接耦接至一收集器单元330。
当一收集器单元330已搜集到用于一程序指令的所有操作数时,收集器单元330便将程序指令及操作数输出至耦接至收集器单元330的执行单元365以供处理。当所述程序指令执行完毕时,如果所述程序指令规定了一目的地操作数,则执行单元365将一写入请求输出至其中一个库320。执行单元270亦可将经处理的操作数输出至光栅操作单元160。在本发明的某些实施例中,每一执行单元365均处理多于一个指令,从而在每一时钟循环中得到多于一个指令的通过量。执行不同的指令可在执行单元365对其进行处理时引起不同的延迟。
在本发明的一实施例中,将在单个库(例如库320)中分配寄存器来存储用于处理一线程的操作数。此种分配称作一“瘦”分配类型。图4A是根据本发明一个或多个方面在4个库中对用于处理各线程的寄存器进行瘦分配的实例性实施例。在图4A中,在库0中分配寄存器来存储用于处理线程A的操作数,在库1中分配寄存器来存储用于处理线程B的操作数,在库2中分配寄存器来存储用于处理线程C的操作数,并在库3中分配寄存器来存储用于处理线程D的操作数。可在库0、库1、库2及/或库3中分配寄存器来存储用于处理其他线程的操作数。在本发明的替代实施例中,则使用更少或更多个库。
在本发明的另一实施例中,可在这4个库中的每一个内分配寄存器来存储用于处理一线程的操作数,其中每一库均可为一库320。此种分配称作“胖”分配类型。图4B是一根据本发明一个或多个方面在4个库中对用于处理各线程的寄存器进行胖分配的实例性实施例。在图4B中,在库0、库1、库2及库3中分配寄存器来存储用于处理线程A的操作数。还在库0、库1、库2及库3中分配寄存器来存储用于处理线程B、C及D的操作数。在本发明的替代实施例中,则使用更少或更多个库。
在本发明的某些实施例中,以“库计数值”为单位分配用于处理各线程的寄存器,所述“库计数值”单位代表胖或瘦分配类型中寄存器的具体数量。可在库0中跟踪一指示下一可供分配的寄存器的寄存器基地址,并可使用所述库计数值、分配类型及寄存器基地址来确定其他库中的下一可用寄存器。
可使用胖或瘦分配在库0、库1、库2及/或库3中分配寄存器来存储用于处理额外线程的操作数。然而,如在图4C中所示,将胖与瘦分配类型相混合可导致可供用于分配的寄存器的利用率较差。例如,当一第一线程(例如线程A)使用在库0中进行的瘦分配且一第二线程(例如线程B使用在这四个库中的每一库中进行的胖分配时,一使用瘦分配的第三线程可能会被延迟到所述第一线程执行完毕为止。另一选择为,在本发明的某些实施例中,如在图4D中所示,胖分配类型可自每一库的顶部进行,而瘦分配类型可自每一库的底部进行。线程A及B使用一胖分配,而线程C及D则使用一瘦分配。如此对分配进行“划分”能够填充相同的分配类型以更有效地利用可供分配的寄存器。
当对线程使用胖分配时,分派给每一操作数的位置可简单地循序进行。图4E是一根据本发明的一个或多个方面循序地为线程分派寄存器的实例性实施例。例如,一分配给线程A的被分派用于存储操作数400A的寄存器位于库0中,一分配给线程B的被分派用于存储操作数400B的寄存器也位于库0中。如果线程A及线程B正执行相同的程序指令,则当线程A与线程B处理一读取线程A的操作数400A及线程B的操作数400B的程序指令时,有可能将出现库冲突。如果操作数400B与操作数400A不存储于同一库中,则可避免出现库冲突。
在寄存器分派过程期间可使用一相位值,以使处理同一程序指令的各线程将不将由所述程序指令规定的其对应操作数分派给处于同一库中的各寄存器。图4F是根据本发明一个或多个方面使用一相位值来为各线程分派寄存器的实例性实施例。例如,一分配给线程A的被分派用于存储操作数410A的寄存器位于库0中,且一分配给线程B的被分派用于存储操作数410B的寄存器位于库1中。如果线程A与线程B正在执行相同的程序指令,则当线程A及线程B处理一读取线程A的操作数410A及线程B的操作数410B的程序指令时不会出现库冲突。在本发明的一替代实施例中,对各寄存器进行重新映射,以使处理同一程序指令的各线程将不将由所述程序指令规定的其对应操作数分派给处于同一库中的各寄存器。例如,对于4个库而言,可将一所分派寄存器编号中的较低的两个位与一对应于所述寄存器所分配给的线程的唯一相位值进行互斥OR(XOR)运算。本发明的一种替代方法是将以库数量为模的相位值添加至所分派的寄存器编号。
当对寄存器使用胖分配时,为处理一程序指令所需的两个或更多个操作数有可能将被分派至位于两个或更多个不同库中的寄存器。例如,如果一用于线程A的程序指令规定操作数414A及415A,则各读取请求将被排队于两个不同的请求队列310中一其中一个耦合至库0,而另一个耦合至库1。同样地,操作数414A将输出至耦合至库0的收集器单元330,而操作数415A将输出至耦合至库1的收集器单元330。由于单个收集器单元330搜集用于每一程序指令的操作数,因此使用一种机制来允许在不同的库与收集器单元330之间传送操作数。
图5是根据本发明一个或多个方面的图2中所示寄存器文件单元的另一实例性实施例的方块图,所述寄存器文件单元包括一交错单元525及复数个库320,其中每一库320均耦接至一库请求仲裁单元310。交错单元525配置成可将来自任一库320的操作数输出路由至任一收集器单元330的输入。因此,单个收集器单元330便可收集由一程序指令所规定的所有操作数。如结合图3所述,每一收集器单元330均自任一库320搜集由一程序指令规定的操作数。当使用交错单元525时,可比当库320的数量等于收集器单元330的总数量时更有效地进行线程调度及寄存器分配(胖或瘦分配)。
一调度器单元540耦接于一组收集器单元330与一执行单元B575之间。调度器单元540可自该组内的每一收集器单元330接收程序指令及对应的操作数(例如输入),因此调度器单元540在该组内的各收集器单元330之间进行仲裁。在本发明的某些实施例中,调度器单元540以循环方式进行仲裁。在本发明的其他实施例中,该组内的每一收集器单元330均具有一对应的优先权且调度器单元540根据所述优先权自每一收集器单元330接受输入。例如,一个收集器单元300可具有高于其他收集器单元330的优先权,且如果一程序指令及操作数可用,则调度器单元540将始终自所述一个收集器单元330接受输入。
单个收集器单元330直接耦接至一执行单元A565。执行单元A 565可经配置以执行所述执行单元B575未被配置成执行的特定指令。因此,单个收集器单元330接受用于供执行单元A565执行的程序指令(及请求),且一组收集器单元330接受用于供执行单元B575执行的程序指令(及请求)。
图6A图解说明根据本发明的一个或多个方面的一种分配用于处理线程的寄存器的方法的一实施例。在步骤600中,寄存器地址单元240自线程控制单元220接收一为一线程进行寄存器分配的请求。在步骤605中,寄存器地址单元240判定为处理所述线程所需的寄存器规模(即寄存器数量)是否小于或等于一固定的或可编程的值X。如果寄存器地址单元240判定出所述大小大于X,则在步骤610中,寄存器地址单元240在多个库320中分配用于存储操作数的寄存器(即进行胖分配)。在步骤615中,寄存器地址单元240更新一基指针。所述基指针指示库320内可供用于分配的第一位置。
在步骤620中,寄存器地址单元240更新一相位值,以使为下一线程分配的分派给操作数的各寄存器将相对于在步骤610中所分配的寄存器偏斜。在步骤625中,寄存器地址单元240判定所述相位值是否等于N,其中N是库320的数量。如果在步骤625中,寄存器地址单元240判定出所述相位值等于N,则在步骤630中,寄存器地址单元240将所述相位值设定为0并进行至步骤670。如果在步骤625中,寄存器地址单元240判定出所述相位值不等于N,则寄存器地址单元240进行至步骤670并将分配信息输出至寄存器文件单元250内的请求分发单元300。
如果在步骤605中,寄存器地址单元240判定出所述规模小于或等于X,则在步骤635中,寄存器地址单元240判定可供用于一瘦分配的库320是否为N-1。如果在步骤635中,寄存器地址单元240判定出可供用于分配的库320是库N-1(此由一库指示符规定),则在步骤650中,寄存器地址单元240更新所述基以指示可供用于分配的第一位置并进行至步骤645。如果在步骤635中,寄存器地址单元240判定出可供用于分配的库320不是库N-1,则在步骤640中,寄存器地址单元240通过将库指示符递增1来更新所述库指示符。在步骤645中,寄存器地址单元240在由所述库指示符所规定的单个库320中分配用于存储操作数的寄存器(即为一瘦分配),并进行至步骤670。如前面所述,在步骤670中,寄存器地址单元240将分配信息输出至寄存器文件单元250内的请求分发单元300。
图6B图解说明根据本发明一个或多个方面的另一种分配用于处理线程的寄存器的方法的一实施例。在步骤600中,寄存器地址单元240接收一寄存器分配请求,包括一为胖分配或瘦分配的分配类型。在本发明的某些实施例中,所述分配类型是在编译程序指令时确定并由一驱动器提供至寄存器地址单元240。在步骤603中,寄存器地址单元240判定所规定分配类型是否为瘦分配,且如果是,则如前面结合图6A所述,进行至步骤610、615、620、625、630及670。而如果在步骤603中寄存器地址单元240判定出所规定分配类型不是瘦分配,则如前面结合图6A所述,寄存器地址单元240进行至步骤635、640、645、650及670。
图6C图解说明根据本发明一个或多个方面另一种分配用于处理线程的寄存器的方法的一实施例。在步骤600中,寄存器地址单元240接收一寄存器分配请求,包括一为胖分配或瘦分配的分配类型。在步骤603中,寄存器地址单元240判定所规定分配类型是否为瘦分配,且如果是,则在步骤607中,寄存器地址单元240判定所述瘦分配是否将处于由库指示符所规定的库320的范围内(即是否有所需数量的寄存器可供使用)。如果在步骤607中,寄存器地址单元240判定出所述瘦分配将处于库320的范围内,则寄存器地址单元240如前面结合图6A所述进行至步骤635、640、645、650及670。
而如果在步骤603中寄存器地址单元240判定出所规定分配类型不是瘦分配,则如前面结合图6A所述,寄存器地址单元240进行至步骤610、615、620、625、630及670。如果在步骤607中,寄存器地址单元240判定出所述瘦分配将不处于库230的范围内,则寄存器地址单元240也如前面结合图6A所述进行至步骤610、615、620、625、630及670。
因此,所属领域中的技术人员将了解,任何经配置以执行图6A、6B、6C所示方法步骤或其等价步骤的系统均将属于本发明的范畴内。此外,所属领域中的技术人员将了解,图6A、6B、6C所示方法步骤可扩展至支持一包括任意数量个库的用于模拟一多端口存储器的寄存器文件单元。
上文已参照具体实施例对本发明进行了说明。然而,显而易见,可在不背离随附权利要求书中所陈述本发明更宽广精神及范围的前提下对这些具体实施例作各种修改和改变。因此,应将上文说明及附图视为仅具有例示性而非限定性意义。在方法权利要求项中所列的步骤并不隐含着以任一特定次序实施这些步骤,除非在该权利要求项中明确指明。
所有商标均为其拥有者分别所有。

Claims (23)

1、一种将寄存器分配至存储库内的方法,其包括:
确定分配用于一线程的寄存器数量;及
将用于所述线程的所述数量的寄存器分配至一组存储库中至少一个存储库中的若干位置,所述一组存储库经配置以模拟一多端口存储器。
2、如权利要求1所述的方法,其中将分配用于所述线程的所述数量的寄存器划分成若干部分且在所述一组存储库内的每一存储库中分配所述若干部分。
3、如权利要求1所述的方法,其中将分配用于所述线程的所述数量的寄存器定位于所述一组存储库内的一单个存储库中。
4、如权利要求1所述的方法,其中所述数量的寄存器的所述分配是基于一分配类型。
5、如权利要求4所述的方法,其进一步包括如下步骤:根据分配用于所述线程的所述寄存器数量来确定所述分配类型。
6、如权利要求4所述的方法,其进一步包括如下步骤:自一驱动器接收所述分配类型。
7、如权利要求1所述的方法,其进一步包括如下步骤:自所述一组存储库内的一第一存储库内的一寄存器读取由所述线程内的一程序指令规定的一第一操作数。
8、如权利要求7所述的方法,其进一步包括如下步骤:自所述一组存储库内的一第二存储库内的一寄存器读取由所述线程内的所述程序指令规定的一第二操作数。
9、如权利要求8所述的方法,其进一步包括如下步骤:收集所述第一操作数及所述第二操作数并调度所述程序指令、所述第一操作数、及所述第二操作数以供执行。
10、如权利要求7所述的方法,其进一步包括如下步骤:自所述一组存储库内的所述第一存储库内的另一寄存器读取由所述线程内的所述程序指令规定的一第二操作数。
11、如权利要求10所述的方法,其进一步包括如下步骤:收集所述第一操作数及所述第二操作数并调度所述程序指令、所述第一操作数、及所述第二操作数以供执行。
12、如权利要求1所述的方法,其进一步包括通过使用与所述线程相关联的一相位值分派每一寄存器,将分配用于所述线程的所述一组寄存器内的寄存器分派至所述至少一个存储库。
13、一种用于存储用于图形程序指令的操作数的寄存器文件单元,其包括:
一第一存储库,其经配置以存储用于一第一线程的操作数;
一第二存储库,其经配置以存储用于一第二线程的操作数;
一第一收集器单元,其经配置以自所述第一存储库接收用于所述第一线程的所述操作数并输出所述第一线程的一程序指令及由所述第一线程的所述程序指令所规定的任何操作数;及
一第二收集器单元,其经配置以自所述第二存储库接收用于所述第二线程的所述操作数并输出所述第二线程的一程序指令及由所述第二线程的所述程序指令所规定的任何操作数。
14、如权利要求13所述的寄存器文件,其进一步包括一将所述第一存储库耦接至所述第二收集器单元的交错单元,以便使所述第二收集器自所述第一存储库接收用于所述第一线程的操作数。
15、如权利要求13所述的寄存器文件,其进一步包括:
一第一库请求仲裁单元,其经配置以将操作数读取请求输出至所述第一存储库;及
一第二库请求仲裁单元,其经配置以将操作数读取请求输出至所述第二存储库。
16、如权利要求13所述的寄存器文件,其进一步包括一调度器单元,所述调度器单元耦接至所述第二收集器单元并经配置以输出所述第一线程的所述程序指令及由所述第一线程的所述程序指令所规定的任何操作数或者所述第二线程的所述程序指令及由所述第二线程的所述程序指令所规定的任何操作数。
17、如权利要求16所述的寄存器文件,其进一步包括一执行单元,所述执行单元经配置以执行由所述调度器单元所输出的任何程序指令。
18、如权利要求16所述的寄存器文件,其进一步包括一执行单元,所述执行单元经配置以执行由所述第一收集器单元所输出的任何程序指令。
19、一种用于存储用于图形程序指令的操作数的系统,其包括:
分配构件,其用于根据一分配类型来分配用于存储由一线程所使用的操作数的寄存器;
存储构件,其用于将所述操作数存储于所述寄存器中;及
搜集构件,其用于搜集由所述线程内的一图形程序指令所规定的任何操作数。
20、如权利要求19所述的系统,其进一步包括用于分派寄存器以使库冲突最小化的构件。
21、如权利要求19所述的系统,其进一步包括用于根据所述分配类型来分发操作数读取请求的构件。
22、如权利要求19所述的系统,其进一步包括用于执行所述程序指令以处理由所述程序指令所规定的所述操作数的构件。
23、如权利要求19所述的系统,其中根据一第一分配类型所分配的寄存器是自一库的顶部分配且根据一第二分配类型所分配的寄存器是自所述库的底部分配。
CN2005800298490A 2004-07-13 2005-07-07 使用具有较低端口数的存储器的模拟多端口存储器 Active CN101014933B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US10/889,730 2004-07-13
US10/889,730 US7339592B2 (en) 2004-07-13 2004-07-13 Simulating multiported memories using lower port count memories
PCT/US2005/024164 WO2006017135A2 (en) 2004-07-13 2005-07-07 Simulating multiported memories using memories with lower port count

Publications (2)

Publication Number Publication Date
CN101014933A true CN101014933A (zh) 2007-08-08
CN101014933B CN101014933B (zh) 2011-07-27

Family

ID=34973122

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2005800298490A Active CN101014933B (zh) 2004-07-13 2005-07-07 使用具有较低端口数的存储器的模拟多端口存储器

Country Status (6)

Country Link
US (2) US7339592B2 (zh)
JP (2) JP2008507034A (zh)
KR (1) KR100862124B1 (zh)
CN (1) CN101014933B (zh)
TW (1) TWI441021B (zh)
WO (1) WO2006017135A2 (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103197916A (zh) * 2011-12-14 2013-07-10 辉达公司 用于源操作数收集器高速缓存的方法和装置
CN111459543A (zh) * 2019-01-21 2020-07-28 上海登临科技有限公司 一种管理寄存器文件单元的方法
CN115934102A (zh) * 2022-12-29 2023-04-07 格兰菲智能科技有限公司 通用寄存器动态分配方法、装置、计算机设备和存储介质

Families Citing this family (72)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7634621B1 (en) * 2004-07-13 2009-12-15 Nvidia Corporation Register file allocation
US7339592B2 (en) 2004-07-13 2008-03-04 Nvidia Corporation Simulating multiported memories using lower port count memories
US7360035B2 (en) 2004-09-01 2008-04-15 International Business Machines Corporation Atomic read/write support in a multi-module memory configuration
US8560795B2 (en) * 2005-06-30 2013-10-15 Imec Memory arrangement for multi-processor systems including a memory queue
EP2477109B1 (en) 2006-04-12 2016-07-13 Soft Machines, Inc. Apparatus and method for processing an instruction matrix specifying parallel and dependent operations
US8766995B2 (en) * 2006-04-26 2014-07-01 Qualcomm Incorporated Graphics system with configurable caches
US20070268289A1 (en) * 2006-05-16 2007-11-22 Chun Yu Graphics system with dynamic reposition of depth engine
US8884972B2 (en) * 2006-05-25 2014-11-11 Qualcomm Incorporated Graphics processor with arithmetic and elementary function units
US8869147B2 (en) * 2006-05-31 2014-10-21 Qualcomm Incorporated Multi-threaded processor with deferred thread output control
US8644643B2 (en) 2006-06-14 2014-02-04 Qualcomm Incorporated Convolution filtering in a graphics processor
US8766996B2 (en) * 2006-06-21 2014-07-01 Qualcomm Incorporated Unified virtual addressed register file
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
US8725991B2 (en) * 2007-09-12 2014-05-13 Qualcomm Incorporated Register file system and method for pipelined processing
US7945764B2 (en) * 2008-01-11 2011-05-17 International Business Machines Corporation Processing unit incorporating multirate execution unit
US20090189896A1 (en) * 2008-01-25 2009-07-30 Via Technologies, Inc. Graphics Processor having Unified Shader Unit
US8689217B2 (en) 2008-10-31 2014-04-01 Electronics And Telecommunications Research Institute System and method for thread processing robot software components responsive to periodic, dedicated, and passive modes
KR101102930B1 (ko) * 2008-10-31 2012-01-10 한국전자통신연구원 로봇용 소프트웨어 컴포넌트 장치 및 이를 이용한 쓰레드 처리 방법
US8370557B2 (en) * 2008-12-19 2013-02-05 Intel Corporation Pseudo dual-port SRAM and a shared memory switch using multiple memory banks and a sideband memory
US8386808B2 (en) * 2008-12-22 2013-02-26 Intel Corporation Adaptive power budget allocation between multiple components in a computing system
US8458446B2 (en) * 2009-09-30 2013-06-04 Oracle America, Inc. Accessing a multibank register file using a thread identifier
KR20110103256A (ko) * 2010-03-12 2011-09-20 삼성전자주식회사 다중 입출력 오퍼레이션 지원 프로세서 및 그 방법
US8832671B1 (en) * 2010-07-07 2014-09-09 Nvidia Corporation Conflict-free register allocation
US8555035B1 (en) 2010-07-07 2013-10-08 Nvidia Corporation Conflict-free register allocation using a multi-bank register file with input operand alignment
US20120066471A1 (en) * 2010-09-14 2012-03-15 Advanced Micro Devices, Inc. Allocation of memory buffers based on preferred memory performance
US20120066444A1 (en) * 2010-09-14 2012-03-15 Advanced Micro Devices, Inc. Resolution Enhancement of Video Stream Based on Spatial and Temporal Correlation
EP2616928B1 (en) 2010-09-17 2016-11-02 Soft Machines, Inc. Single cycle multi-branch prediction including shadow cache for early far branch prediction
US8787368B2 (en) * 2010-12-07 2014-07-22 Advanced Micro Devices, Inc. Crossbar switch with primary and secondary pickers
EP2689326B1 (en) 2011-03-25 2022-11-16 Intel Corporation Memory fragments for supporting code block execution by using virtual cores instantiated by partitionable engines
WO2012135041A2 (en) 2011-03-25 2012-10-04 Soft Machines, Inc. Register file segments for supporting code block execution by using virtual cores instantiated by partitionable engines
WO2012135031A2 (en) 2011-03-25 2012-10-04 Soft Machines, Inc. Executing instruction sequence code blocks by using virtual cores instantiated by partitionable engines
US20120254589A1 (en) * 2011-04-01 2012-10-04 Jesus Corbal San Adrian System, apparatus, and method for aligning registers
CN103649932B (zh) 2011-05-20 2017-09-26 英特尔公司 资源的分散分配以及用于支持由多个引擎执行指令序列的互连结构
WO2012162189A1 (en) 2011-05-20 2012-11-29 Soft Machines, Inc. An interconnect structure to support the execution of instruction sequences by a plurality of engines
US8819379B2 (en) 2011-11-15 2014-08-26 Memory Technologies Llc Allocating memory based on performance ranking
KR101703401B1 (ko) 2011-11-22 2017-02-06 소프트 머신즈, 인크. 다중 엔진 마이크로프로세서용 가속 코드 최적화기
US20150039859A1 (en) 2011-11-22 2015-02-05 Soft Machines, Inc. Microprocessor accelerated code optimizer
US9626191B2 (en) * 2011-12-22 2017-04-18 Nvidia Corporation Shaped register file reads
US9606808B2 (en) * 2012-01-11 2017-03-28 Nvidia Corporation Method and system for resolving thread divergences
US9158683B2 (en) 2012-08-09 2015-10-13 Texas Instruments Incorporated Multiport memory emulation using single-port memory devices
US10140138B2 (en) 2013-03-15 2018-11-27 Intel Corporation Methods, systems and apparatus for supporting wide and efficient front-end operation with guest-architecture emulation
WO2014150806A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for populating register view data structure by using register template snapshots
KR102083390B1 (ko) 2013-03-15 2020-03-02 인텔 코포레이션 네이티브 분산된 플래그 아키텍처를 이용하여 게스트 중앙 플래그 아키텍처를 에뮬레이션하는 방법
US9489316B2 (en) * 2013-03-15 2016-11-08 Freescale Semiconductor, Inc. Method and device implementing execute-only memory protection
WO2014150971A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for dependency broadcasting through a block organized source view data structure
US10275255B2 (en) 2013-03-15 2019-04-30 Intel Corporation Method for dependency broadcasting through a source organized source view data structure
US9811342B2 (en) 2013-03-15 2017-11-07 Intel Corporation Method for performing dual dispatch of blocks and half blocks
US9886279B2 (en) 2013-03-15 2018-02-06 Intel Corporation Method for populating and instruction view data structure by using register template snapshots
WO2014150991A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for implementing a reduced size register view data structure in a microprocessor
US9891924B2 (en) 2013-03-15 2018-02-13 Intel Corporation Method for implementing a reduced size register view data structure in a microprocessor
KR102063656B1 (ko) 2013-03-15 2020-01-09 소프트 머신즈, 인크. 블록들로 그룹화된 멀티스레드 명령어들을 실행하기 위한 방법
US9904625B2 (en) 2013-03-15 2018-02-27 Intel Corporation Methods, systems and apparatus for predicting the way of a set associative cache
US9569216B2 (en) 2013-03-15 2017-02-14 Soft Machines, Inc. Method for populating a source view data structure by using register template snapshots
US9508112B2 (en) * 2013-07-31 2016-11-29 Apple Inc. Multi-threaded GPU pipeline
US9430411B2 (en) 2013-11-13 2016-08-30 Sandisk Technologies Llc Method and system for communicating with non-volatile memory
US9377968B2 (en) 2013-11-13 2016-06-28 Sandisk Technologies Llc Method and system for using templates to communicate with non-volatile memory
US9390033B2 (en) 2013-11-13 2016-07-12 Sandisk Technologies Llc Method and system for communicating with non-volatile memory via multiple data paths
KR20150056373A (ko) * 2013-11-15 2015-05-26 삼성전자주식회사 순차적 수행 방식의 멀티스레드 프로세싱 장치 및 방법
US9201636B2 (en) * 2013-11-21 2015-12-01 National Tsing Hua University Method for divergence analysis of pointer-based program
US9141291B2 (en) 2013-11-26 2015-09-22 Sandisk Technologies Inc. Adaptive context disbursement for improved performance in non-volatile memory systems
US9437172B2 (en) * 2014-08-19 2016-09-06 Apple Inc. High-speed low-power access to register files
KR102357863B1 (ko) * 2014-12-15 2022-02-04 삼성전자주식회사 메모리 접근 방법 및 장치
GB2540971B (en) * 2015-07-31 2018-03-14 Advanced Risc Mach Ltd Graphics processing systems
US10089115B2 (en) * 2016-07-07 2018-10-02 Intel Corporation Apparatus to optimize GPU thread shared local memory access
US9747106B1 (en) 2016-09-30 2017-08-29 International Business Machines Corporation Allocating multiple operand data areas of a computer instruction within a program buffer
EP3607526A4 (en) * 2017-04-01 2020-11-04 INTEL Corporation HYBRID TECHNOLOGY SHARED BY EXECUTION UNITS FOR ACCELERATED COMPUTING ON GRAPHIC PROCESSORS
US10521880B2 (en) * 2017-04-17 2019-12-31 Intel Corporation Adaptive compute size per workload
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
US10467724B1 (en) * 2018-02-14 2019-11-05 Apple Inc. Fast determination of workgroup batches from multi-dimensional kernels
KR102201352B1 (ko) * 2019-04-03 2021-01-08 연세대학교 산학협력단 스핀 전달 토크 랜덤 액세스 메모리 기반의 계층적 레지스터 파일 장치
US20220121486A1 (en) * 2020-10-20 2022-04-21 Micron Technology, Inc. Rescheduling a failed memory request in a processor
US20220197649A1 (en) * 2020-12-22 2022-06-23 Advanced Micro Devices, Inc. General purpose register hierarchy system and method

Family Cites Families (38)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US12603A (en) * 1855-03-27 Improvement in seed-planters
US41228A (en) * 1864-01-12 Improved refrigerating dish-cover
US103990A (en) * 1870-06-07 Improvement in liquid-meters
US80512A (en) * 1868-07-28 John shellabergeb
US163699A (en) * 1875-05-25 Improvement in ruffling attachments for sewing-machines
US4532589A (en) * 1981-12-02 1985-07-30 Hitachi, Ltd. Digital data processor with two operation units
JPS61269773A (ja) * 1985-05-24 1986-11-29 Fujitsu Ltd ベクトル命令実行制御方式
JP2545789B2 (ja) * 1986-04-14 1996-10-23 株式会社日立製作所 情報処理装置
US4964042A (en) * 1988-08-12 1990-10-16 Harris Corporation Static dataflow computer with a plurality of control structures simultaneously and continuously monitoring first and second communication channels
JPH0331937A (ja) * 1989-06-29 1991-02-12 Mitsubishi Electric Corp マイクロプロセッサ
US6091430A (en) * 1993-03-31 2000-07-18 International Business Machines Corporation Simultaneous high resolution display within multiple virtual DOS applications in a data processing system
JPH06332721A (ja) * 1993-05-24 1994-12-02 Hitachi Ltd レジスタの使用方法
SG75756A1 (en) * 1994-02-28 2000-10-24 Intel Corp Method and apparatus for avoiding writeback conflicts between execution units sharing a common writeback path
US6154826A (en) * 1994-11-16 2000-11-28 University Of Virginia Patent Foundation Method and device for maximizing memory system bandwidth by accessing data in a dynamically determined order
US5701426A (en) * 1995-03-31 1997-12-23 Bull Information Systems Inc. Data processing system and method using cache miss address prediction and forced LRU status in a cache memory to improve cache hit ratio
US5644780A (en) * 1995-06-02 1997-07-01 International Business Machines Corporation Multiple port high speed register file with interleaved write ports for use with very long instruction word (vlin) and n-way superscaler processors
US6167486A (en) * 1996-11-18 2000-12-26 Nec Electronics, Inc. Parallel access virtual channel memory system with cacheable channels
JP3087696B2 (ja) * 1997-07-25 2000-09-11 日本電気株式会社 分散メモリ型マルチプロセッサ・システム制御方法およびコンピュータ読み取り可能な記録媒体
US5913049A (en) * 1997-07-31 1999-06-15 Texas Instruments Incorporated Multi-stream complex instruction set microprocessor
JPH11184674A (ja) * 1997-12-24 1999-07-09 Fujitsu Ltd レジスタファイル
US6092175A (en) * 1998-04-02 2000-07-18 University Of Washington Shared register storage mechanisms for multithreaded computer systems with out-of-order execution
US6317820B1 (en) 1998-06-05 2001-11-13 Texas Instruments Incorporated Dual-mode VLIW architecture providing a software-controlled varying mix of instruction-level and task-level parallelism
JP3880739B2 (ja) * 1999-02-25 2007-02-14 三菱電機株式会社 オペレーティングシステムの処理方式及びオペレーティングシステムの処理方法
US6438557B1 (en) * 1999-06-23 2002-08-20 Ericsson Inc. System and method for performing context switching and rescheduling of a processor
JP2001167084A (ja) * 1999-12-08 2001-06-22 Nec Kofu Ltd ベクトル演算処理装置及びベクトルデータ移送方法
US7120783B2 (en) * 1999-12-22 2006-10-10 Ubicom, Inc. System and method for reading and writing a thread state in a multithreaded central processing unit
US6615340B1 (en) * 2000-03-22 2003-09-02 Wilmot, Ii Richard Byron Extended operand management indicator structure and method
US20020103990A1 (en) * 2001-02-01 2002-08-01 Hanan Potash Programmed load precession machine
US7487505B2 (en) * 2001-08-27 2009-02-03 Intel Corporation Multithreaded microprocessor with register allocation based on number of active threads
US6795889B2 (en) * 2002-01-09 2004-09-21 International Business Machines Corporation Method and apparatus for multi-path data storage and retrieval
JP3727887B2 (ja) * 2002-02-19 2005-12-21 富士通株式会社 マルチスレッドプロセッサにおける共有レジスタファイル制御方式
US6833831B2 (en) * 2002-02-26 2004-12-21 Sun Microsystems, Inc. Synchronizing data streams in a graphics processor
US7398374B2 (en) * 2002-02-27 2008-07-08 Hewlett-Packard Development Company, L.P. Multi-cluster processor for processing instructions of one or more instruction threads
CN1647030A (zh) * 2002-04-10 2005-07-27 皇家飞利浦电子股份有限公司 数据处理系统
US7336283B2 (en) * 2002-10-24 2008-02-26 Hewlett-Packard Development Company, L.P. Efficient hardware A-buffer using three-dimensional allocation of fragment memory
JP2004178427A (ja) * 2002-11-28 2004-06-24 Toshiba Microelectronics Corp 中央処理装置
US7376954B2 (en) * 2003-08-28 2008-05-20 Mips Technologies, Inc. Mechanisms for assuring quality of service for programs executing on a multithreaded processor
US7339592B2 (en) 2004-07-13 2008-03-04 Nvidia Corporation Simulating multiported memories using lower port count memories

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103197916A (zh) * 2011-12-14 2013-07-10 辉达公司 用于源操作数收集器高速缓存的方法和装置
CN111459543A (zh) * 2019-01-21 2020-07-28 上海登临科技有限公司 一种管理寄存器文件单元的方法
CN115934102A (zh) * 2022-12-29 2023-04-07 格兰菲智能科技有限公司 通用寄存器动态分配方法、装置、计算机设备和存储介质
CN115934102B (zh) * 2022-12-29 2023-12-12 格兰菲智能科技有限公司 通用寄存器动态分配方法、装置、计算机设备和存储介质

Also Published As

Publication number Publication date
JP5422614B2 (ja) 2014-02-19
TWI441021B (zh) 2014-06-11
JP2008507034A (ja) 2008-03-06
CN101014933B (zh) 2011-07-27
WO2006017135A2 (en) 2006-02-16
WO2006017135A3 (en) 2006-10-05
US20080109611A1 (en) 2008-05-08
US7339592B2 (en) 2008-03-04
US7834881B2 (en) 2010-11-16
US20060012603A1 (en) 2006-01-19
KR20070030327A (ko) 2007-03-15
TW200613980A (en) 2006-05-01
JP2011238271A (ja) 2011-11-24
KR100862124B1 (ko) 2008-10-09

Similar Documents

Publication Publication Date Title
CN101014933B (zh) 使用具有较低端口数的存储器的模拟多端口存储器
US7634621B1 (en) Register file allocation
US10346945B2 (en) Multi-thread graphics processing system
CN101859257B (zh) 用于无死锁管线操作的系统及方法
CN102306093B (zh) 实现现代处理器间接转移预测的装置及方法
US7038685B1 (en) Programmable graphics processor for multithreaded execution of programs
CA1171544A (en) Multiprocessor computer system with dynamical allocation of multiprocessing tasks and processor for use in such multiprocessor computer system
CN1036877C (zh) 一条多处理器流水线的动态工作量平衡
US5339429A (en) Parallel processing system and compiling method used therefor
CN103218208A (zh) 用于实施成形的存储器访问操作的系统和方法
CN103279379A (zh) 用于在没有指令解码的情况下调度指令的方法和装置
US9659339B2 (en) Programmable graphics processor for multithreaded execution of programs
CN104050033A (zh) 用于有索引的屏障的硬件调度的系统和方法
CN103226463A (zh) 用于使用预解码数据调度指令的方法和装置
CN103197916A (zh) 用于源操作数收集器高速缓存的方法和装置
CN101165655A (zh) 多处理器计算系统及其任务分配方法
CN103309702A (zh) 用于并行线程子集的一致加载处理
CN103870309A (zh) 用于集群多级寄存器堆的寄存器分配
CN103870213A (zh) 经由管线化的状态包触发性能事件捕获
US8405665B2 (en) Programmable graphics processor for multithreaded execution of programs
CN102109978A (zh) 一种数据的重排方法及重排装置
CN103294449A (zh) 发散操作的预调度重演
CN103218259A (zh) 计算任务的调度和执行
CN103197918A (zh) 多通道时间片组
US20080024506A1 (en) A Programmable Graphics Processor For Multithreaded Execution of Programs

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