CN103218208B - 用于实施成形的存储器访问操作的系统和方法 - Google Patents

用于实施成形的存储器访问操作的系统和方法 Download PDF

Info

Publication number
CN103218208B
CN103218208B CN201210520963.5A CN201210520963A CN103218208B CN 103218208 B CN103218208 B CN 103218208B CN 201210520963 A CN201210520963 A CN 201210520963A CN 103218208 B CN103218208 B CN 103218208B
Authority
CN
China
Prior art keywords
register
instruction
access
operand
memory access
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201210520963.5A
Other languages
English (en)
Other versions
CN103218208A (zh
Inventor
仇小钢
杰克·希莱尔·肖凯特
曼纽尔·奥利维尔·高瑟
潇耀明
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 CN103218208A publication Critical patent/CN103218208A/zh
Application granted granted Critical
Publication of CN103218208B publication Critical patent/CN103218208B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/167Interprocessor communication using a common memory, e.g. mailbox
    • 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
    • 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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/345Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
    • G06F9/3455Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results using stride
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Multimedia (AREA)
  • Advance Control (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明的一个实施例阐述了提供有效方式来从寄存器堆检索操作数的技术。具体地,指令分派单元接收一个或多个指令,每个指令均包括一个或多个操作数。将操作数共同组织为一个或多个操作数组,从中可形成成形的访问。从寄存器堆检索操作数并存储在收集器中。一旦全部操作数均被读取并收集到收集器中,则指令分派单元传输指令和相应的操作数到流多处理器内的功能单元用于执行。本发明的一个优点在于,在单个寄存器访问操作中从寄存器堆检索多个操作数,而不存在资源冲突。通过形成显示所确认的存储器访问模式的有效地检索操作数的成形的访问,改善了从寄存器堆检索操作数的性能。

Description

用于实施成形的存储器访问操作的系统和方法
技术领域
本发明总体上涉及计算机架构,并且更具体地,涉及用于寄存器堆中的操作数收集的系统和方法。
背景技术
并行处理系统中的普遍做法是,设计同时执行多个线程的处理器。当这样的线程都执行相同指令序列时(通常对于每个线程有不同的数据),具有在线程中间共享某些资源的实际益处。例如,每个线程均可以执行访问一个或多个操作数的指令,所述一个或多个操作数将检索自共享的寄存器堆的库(bank)中,其中每个线程均访问寄存器堆的库内的不同的寄存器地址。可以在单指令多线程(SIMT)和单指令多数据(SIMD)处理器上发现该类型的操作。
在操作期间,处理器可以跨多个线程来执行指令,其中指令从寄存器堆的库来访问一个或多个操作数,并且操作数位于寄存器堆的库内的不同的寄存器地址处。随后,处理器实施寄存器访问操作以检索操作数。例如,如果四个线程同时执行每线程要求三个操作数的指令,那么为了执行该指令,处理器检索多达十二个单独的操作数。当可以在同一个寄存器访问操作中检索全部十二个操作数的时候,性能得到极大的改善。
由于诸如物理存储器配置等各种限制,因此可能不可同时访问寄存器的某些库合。当两个或更多个操作数位于不可同时被访问的寄存器堆位置中时,处理器遇到寄存器库冲突。在这样的情况下,处理器不能在单个寄存器访问操作中检索全部操作数。
避免寄存器堆冲突的方法之一是,对由当前指令所访问的每个操作数均串行地实施单独的寄存器访问操作。因为对每个操作数均是每次访问一个,所以该方法避免了寄存器库冲突。然而,该方法的一个缺点在于,处理器不能使用同一个寄存器访问操作来检索多个操作数,以访问不会造成寄存器库冲突的操作数。例如,如果四个线程正执行要求三个操作数的指令,那么为了避免寄存器库冲突,处理器将实施十二个单独的寄存器访问操作。然而,操作数的分布遍及寄存器堆的库,有可能使得处理器可以在少于十二个寄存器访问操作中检索全部操作数。在这样的情形下,没有实现与存储器访问操作相关联的潜在的效率。
如前述所例示的,本领域中所需要的是从寄存器堆中收集操作数的更有效的方式。
发明内容
本发明的一个实施例阐述了用于实施寄存器的存储器操作的计算机实现的方法。指令分派单元接收将跨多个操作数执行的指令。所述指令分派单元确认其中存储所述多个操作数的多个寄存器堆经由特定存储器访问模式可访问。接着,所述指令分派单元形成与所述特定存储器访问模式相对应的成形的存储器访问操作。随后,所述指令分派单元实施所述成形的存储器访问操作以从所述多个寄存器堆来访问所述多个操作数。
本公开技术的一个优点在于,在单个寄存器访问操作中从寄存器堆检索多个操作数,而不存在资源冲突。
附图说明
为了详细地理解本发明的上述特征,对于以上简要说明的发明,可以参照实施例进行更为具体的描述,其中一些实施例示出于附图中。然而,应注意的是,附图中示出的只是本发明的代表性实施例,因此不应被认为是对本发明的范围的限制,本发明可以适用于其他同等有效的实施例。
图1是示出了配置为实施本发明的一个或多个方面的计算机系统的框图;
图2是根据本发明一个实施例的、用于图1的计算机系统的并行处理子系统的框图;
图3A是根据本发明的一个实施例的、图2的前端的框图;
图3B是根据本发明一个实施例的、图2的一个并行处理单元内的一般处理集群的框图;
图3C是根据本发明的一个实施例的、图3B的流多处理器的部分的框图;
图4A示出了根据本发明的一个实施例的、配置用于操作数收集的寄存器堆的库;
图4B示出了根据本发明的替代实施例的、配置用于操作数收集的寄存器堆的库;
图4C示出了根据本发明的另一个替代实施例的、配置用于操作数收集的寄存器堆的库;
图4D示出了根据本发明的又一个替代实施例的、配置用于操作数收集的寄存器堆的库;
图5示出了根据本发明的一个实施例的、图3C的warp调度器程序和指令单元以及本地寄存器堆的框图;以及
图6是根据本发明的一个实施例的、用于收集寄存器堆操作数的方法步骤的流程图。
具体实施方式
在下面的描述中,阐释了大量具体细节以提供对本发明更为彻底的理解。然而,对于本领域技术人员来讲将显而易见的是,在缺少这些具体细节中的一个或多个的情况下也可以实施本发明。
系统概述
图1是示出了配置为实施本发明的一个或多个方面的计算机系统100的框图。计算机系统100包括中央处理单元(CPU)102和系统存储器104,两者经由可包括存储器桥105的互连路径通信。存储器桥105例如可以是北桥芯片,经由总线或其他通信路径106(例如,超传输链接)连接到I/O(输入/输出)桥107。I/O桥107例如可以是南桥芯片,从一个或多个用户输入设备108(例如,键盘、鼠标)接收用户输入,并将该输入经由通信路径106和存储器桥105转发至CPU102。并行处理子系统112经由总线或第二通信路径113(例如,外围部件互连(PCI)Express、加速图形端口或超传输链接)耦合至存储器桥105;在一个实施例中,并行处理子系统112是将像素传送到显示设备110(例如,常规的基于阴极射线管或液晶显示器的监视器)的图形子系统。系统盘114还连接到I/O桥107。开关116为I/O桥107和诸如网络适配器118以及各种外插卡(add-incard)120和121的其他部件之间提供了连接。其他部件(未明确示出)也可以连接到I/O桥107,包括通用串行总线(USB)或其他端口连接、压缩光盘(CD)驱动器、数字视频光盘(DVD)驱动器、胶片记录设备等。图1所示的各种通信路径,包括特别命名的通信路径106和113,可以使用任何适合的协议来实现,诸如PCIExpress、AGP(加速图形端口)、超传输或任何其他总线或点对点通信协议,并且不同设备之间的连接可以使用本领域已知的不同协议。
在一个实施例中,并行处理子系统112包含被优化用于图形和视频处理的电路,例如包括视频输出电路,并且构成图形处理单元(GPU)。在另一个实施例中,并行处理子系统112包含被优化用于通用处理的电路,同时保留底层的(underlying)计算架构,本文将进行更为详细的描述。在又一些实施例中,并行处理子系统112可与单个子系统中的一个或多个其他系统元件集成,诸如连接存储器桥105、CPU102和I/O桥107以形成片上系统(SoC)。
应予以理解的是,本文所示系统是示例性的,可以对其进行变形和修改。可根据需要修改连接拓扑结构,包括桥的数量和布置、CPU102的数量以及并行处理子系统112的数量。例如,在一些实施例中,系统存储器104直接连接到CPU102而非通过桥连接,并且其他器件经由存储器桥105和CPU102与系统存储器104通信。在其他替代拓扑结构中,并行处理子系统112连接到I/O桥107或者直接连接到CPU102,而非连接到存储器桥105。还有在其他的实施例中,I/O桥107和存储器桥105可能被集成到单个芯片中,而不是作为一个或多个分立的器件存在。大型实施例可包括两个或更多CPU102以及包括两个或更多并行处理子系统112。本文所示特定部件是可选的;例如,任何数量的外插卡或外围设备都可能得到支持。在一些实施例中,开关116被省去,并且网络适配器118和外插卡120、121直接连接到I/O桥107。
图2示出了根据本发明一个实施例的并行处理子系统112。如图所示,并行处理子系统112包括一个或多个并行处理单元(PPU)202,其每一个均耦合至本地并行处理(PP)存储器204。一般来讲,并行处理子系统包括U个PPU,其中U≥1。(本文中,在需要的情况下同样对象的多个实体用标识该对象的参考数字以及标识该实体的带括号的数字加以表示)。PPU202和并行处理存储器204可用一个或多个诸如可编程处理器、专用集成电路(ASIC)或存储器器件这类集成电路器件来实现,或者以任何其他在技术上可行的方式来实现。
再次参照图1以及图2,在一些实施例中,并行处理子系统112中的一些或所有PPU202是具有渲染管线的图形处理器,其可以配置为实施与下述各项相关的各种任务:由图形数据生成像素数据,所述图形数据是由CPU102和/或系统存储器104经由存储器桥105和第二通信路径113而供给的;与本地并行处理存储器204(可以作为图形存储器加以使用,包括例如常规的帧缓冲区)交互,以存储和更新像素数据;将像素数据传送到显示设备110;等等。在一些实施例中,并行处理子系统112可包括作为图形处理器而操作的一个或多个PPU202以及用于通用计算的一个或多个其他PPU202。这些PPU可相同或不同,并且每个PPU均可具有专用并行处理存储器器件或非专用并行处理存储器器件。并行处理系统112中的一个或多个PPU202可向显示设备110输出数据,或者并行处理系统112中的每个PPU202均可向一个或多个显示设备110输出数据。
在操作中,CPU102是计算机系统100的主处理器,控制并协调其他系统部件的操作。具体来讲,CPU102发出控制PPU202的操作的命令。在一些实施例中,CPU102将针对每个PPU202的命令流写入到可位于系统存储器104、并行处理存储器204或者CPU102和PPU202均可访问的另外的存储位置中的数据结构(图1和图2中均未明确示出)。将指向每个数据结构的指针写入到入栈缓冲区(pushbuffer)以开始处理数据结构中的命令流。PPU202从一个或多个入栈缓冲区读取命令流,然后相对于CPU102的操作异步地执行命令。可由应用程序经由设备驱动程序103来为每个入栈缓冲区指定执行优先级,以控制不同入栈缓冲区的调度。
现在返回参照图2以及图1,每个PPU202均包括I/O(输入/输出)单元205,所述I/O单元205经由通信路径113与计算机系统100其余部分通信,其连接到存储器桥105(或者,在一个替代实施例中,直接连接到CPU102)。PPU202到计算机系统100其余部分的连接也可以变化。在一些实施例中,并行处理子系统112实现为外插卡,其可以被插入计算机系统100的扩展槽中。在另一些实施例中,PPU202可以集成在具有诸如存储器桥105或I/O桥107这类总线桥的单个芯片上。还有在一些其他实施例中,PPU202中的一些或全部元件可被集成在具有CPU102的单个芯片上。
在一个实施例中,通信路径113是PCIEXPRESS链接,其中给每个PPU202分配有专用通道(lane),如本技术领域已知的。也可使用其他通信路径。I/O单元205生成数据包(或其他信号)用于在通信路径113上传输,并且也从通信路径113接收所有传入的数据包(或其他信号),将传入的数据包引向PPU202的适当部件。例如,可将与处理任务相关的命令引向主机接口206,而可将与存储器操作相关的命令(例如,对并行处理存储器204的读取或写入)引向存储器交叉开关(crossbar)单元210。主机接口206对每个入栈缓冲区进行读取并将存储在该入栈缓冲区中的命令流输出到前端212。
每个PPU202有利地实现高度并行的处理架构。如图中详细所示,PPU202(0)包括处理集群阵列230,该阵列包括C个一般处理集群(GPC)208,其中C≥1。每个GPC208均能够并发执行大量(例如,数百个或数千个)线程,其中每个线程均为程序的实例(instance)。在各种应用中,可分配不同的GPC208,用于处理不同类型的程序或用于实施不同类型的计算。GPC208的分配可依据每个类型的程序或计算产生的工作量而变化。
GPC208从任务/工作单元207内的工作分布单元接收将要执行的处理任务。工作分布单元接收指向处理任务的指针,所述处理任务编码为任务元数据(TMD)并存储在存储器中。指向TMD的指针包括在作为入栈缓冲区而存储的命令流中,并且由前端单元212从主机接口206处接收。可以编码为TMD的处理任务包括将要处理的数据的索引,以及定义如何处理数据(例如,将执行什么程序)的命令和状态参数。任务/工作单元207从前端212处接收任务,并且确保在由每一个TMD所指定的处理开始之前GPC208被配置为有效状态。可为每个用于调度处理任务的执行的TMD指定优先级。也可从处理集群阵列230处接收处理任务。可选地,TMD可包括对是否将TMD加入到处理任务列表(或指向处理任务的指针列表)的头部或尾部进行控制的参数,从而提供对于优先级的另一个控制级别。
存储器接口214包括D个分区单元215,这些分区单元每一个均直接耦合至并行处理存储器204的一部分,其中D≥1。如图所示,分区单元215的数量通常等于动态随机存取存储器(DRAM)220的数量。在另一些实施例中,分区单元215的数量可以不等于存储器器件的数量。本领域普通技术人员将认识到,DRAM220可用其他适合的存储设备代替,并且可以采用一般常规设计。因此省略详细描述。可跨DRAM220存储诸如帧缓冲区或纹理映射这样的渲染对象,允许分区单元215并行地写入每个渲染对象的各部分,以高效地使用并行处理存储器204的可用带宽。
任何一个GPC208都可处理将被写入到并行处理存储器204内任何DRAM220的数据。交叉开关单元210配置为将每个GPC208的输出路由(route)至任何分区单元215的输入或路由至另一GPC208,用于进一步处理。GPC208通过交叉开关单元210与存储器接口214通信,以对各种外部存储器器件进行读写。在一个实施例中,交叉开关单元210具有连至存储器接口214的连接,来与I/O单元205进行通信,以及具有连至本地并行处理存储器204的连接,从而使不同GPC208内的处理内核能够与系统存储器104或相对于PPU202来讲非本地的其他存储器通信。在图2所示实施例中,交叉开关单元210与I/O单元205直接连接。交叉开关单元210可使用虚拟信道在GPC208和分区单元215之间分割业务流。
再者,GPC208可以编程为执行与种类繁多的应用相关的处理任务,包括但不限于线性和非线性数据变换、视频和/或音频数据的过滤、建模运算(例如,运用物理定律确定对象的位置、速率和其他属性)、图像渲染操作(例如,镶嵌着色器、顶点着色器、几何着色器和/或像素着色器程序)等等。PPU202可将数据从系统存储器104和/或本地并行处理存储器204转移到内部(片上)存储器中,对数据进行处理,并将结果数据写回到系统存储器104和/或本地并行处理存储器204,在这里这类数据可以由其他系统部件访问,包括CPU102或另一并行处理子系统112。
PPU202可设置有任何容量的本地并行处理存储器204,包括不设置本地存储器,并且可以任何组合方式来使用本地存储器和系统存储器。例如,在统一存储器架构(UMA)实施例中,PPU202可以是图形处理器。在这样的实施例中,将会提供极少的甚至不提供专用图形(并行处理)存储器,并且PPU202将以排他的方式或者几乎以排他的方式使用系统存储器。在UMA实施例中,PPU202可集成到桥式芯片或处理器芯片中,或者可被提供为具有高速链接(例如,PCIEXPRESS)的分立芯片,所述高速链接经由桥式芯片或其他通信手段将PPU202连接到系统存储器。
如上所述,并行处理子系统112中可以包括有任何数量的PPU202。例如,可以在单个外插卡上提供多个PPU202,或者多个外插卡可以连接到通信路径113,或者PPU202中的一个或多个可以集成到桥式芯片中。多PPU系统中的PPU202可彼此相同或不同。例如,不同的PPU202可能具有不同数量的处理内核、不同容量的本地并行处理存储器等。在存在有多个PPU202的情况下,可以并行地操作这些PPU从而以高于单个PPU202可能达到的吞吐量来处理数据。包含一个或多个PPU202的系统可以以各种配置和形式因素来加以实现,包括桌上型电脑、膝上型电脑或者手持式个人计算机、服务器、工作站、游戏控制台、嵌入式系统等。
多个并发任务调度
可在GPC208上并发执行多个处理任务,并且在执行期间处理任务可以生成一个或多个“子”处理任务。任务/工作单元207接收任务并动态地调度处理任务和子处理任务用于由GPC208所执行。
图3A是根据本发明一个实施例的、图2的任务/工作单元207的框图。任务/工作单元207包括任务管理单元300和工作分布单元340。任务管理单元300基于执行优先级级别来组织将要调度的任务。任务管理单元300为每个优先级级别存储指针的列表,所述指针指向与调度器表321中的任务相对应的TMD322,其中该列表可实现为链接列表。TMD322可存储在PP存储器204或系统存储器104中。任务管理单元300接受任务和将该任务存储在调度器表321中的速率与任务管理单元300调度任务用于执行的速率解耦。因此,任务管理单元300可以基于优先级信息或使用诸如循环调度的其他技术来收集数个任务。
工作分布单元340包括具有槽的任务表345,所述槽可以分别由TMD322所占用,用于正在执行的任务。当任务表345中存在空闲槽时,任务管理单元300可以调度任务用于执行。当没有空闲槽时,未占用槽的较高优先级的任务可以驱逐占用槽的较低优先级的任务。当任务被驱逐时,该任务停止,并且如果该任务的执行没有完成,那么将指向该任务的指针添加到将要调度的任务指针列表中,使得稍后将重新开始该任务的执行。当在任务的执行期间生成子处理任务时,将指向子任务的指针添加到将要调度的任务指针列表。子任务可以由执行在处理集群阵列230中的TMD322生成。
与由任务/工作单元207从前端212处所接收的任务不同,子任务是从处理集群阵列230处接收的。子任务不插入入栈缓冲区中或者传输到前端。当生成子任务或者将用于子任务的数据存储在存储器中时,不通知CPU102。通过入栈缓冲区所提供的任务和子任务之间的另一个不同之处在于,通过入栈缓冲区所提供的任务由应用程序定义而子任务在任务执行期间动态生成。
任务处理概述
图3B是根据本发明一个实施例的、图2的一个PPU202内的GPC208的框图。每个GPC208均可配置为以并行方式执行大量的线程,其中术语“线程”是指针对一组特定输入数据执行的特定程序的实例(instance)。在一些实施例中,使用单指令多数据(SIMD)指令发送技术来支持大量线程的并行处理,而无需提供多个独立的指令单元。在其他实施例中,使用单指令多线程(SIMT)技术,采用配置为向每一个GPU208内的一组处理引擎发送指令的共同指令单元,来支持大量通常同步化的线程的并行执行。与所有执行引擎一般执行相同指令的SIMD执行机制不同,SIMT执行通过给定的线程程序,允许不同线程更容易地跟随(follow)分散的执行路径。本领域的普通技术人员应该理解,SIMD处理机制代表SIMT处理机制的一个功能子集。
经由管线管理器305可以有利地控制GPC208的操作,所述管线管理器305分布处理任务给流多处理器(SM)310。管线管理器305也可以配置为通过为由SM310输出的经处理的数据指定目的地来控制工作分布交叉开关330。
在一个实施例中,每个GPC208均包括M个SM310,其中M≥1,每个SM310配置为处理一个或多个线程组。另外,每个SM310均有利地包括可被管线化的相同的一组功能执行单元(例如,执行单元和加载-存储单元,如图3C中的Exec单元302和LSU303所示),允许在前一个指令完成之前发送新的指令,如本领域所已知的。可以提供功能执行单元的任意组合。在一个实施例中,功能单元支持各种操作,包括整数和浮点运算(例如,加法和乘法)、比较操作、布尔操作(AND、OR、XOR)、位移(bit-shifting)以及各种代数函数计算(例如,平面插值、三角、指数、对数函数等);并且同一个功能单元硬件可均衡地用于(beleveragedto)实施不同的操作。
传输到特定GPC208的一系列指令构成了线程,如本文前面所定义,并且跨SM310内并行处理引擎(未示出)的一定数量的并发执行的线程的集合在本文中被称作“卷绕包(warp)”或“线程组”。如本文所使用的,“线程组”是指针对不同输入数据并发执行相同程序的一组线程,其中所述组的一个线程被指派给SM310内不同的处理引擎。线程组可以包括少于SM310内处理引擎的数量的线程,在这种情况下,在线程组正在被处理的周期期间,一些处理引擎将闲置。线程组也可以包括多于SM310内处理引擎的数量的线程,在这种情况下,处理将在连续的时钟周期上进行。因为每个SM310都可并发地支持高达G个线程组,由此在任意给定的时间,GPC208中都可以执行高达G×M个线程组。
此外,在SM310内,多个相关的线程组可同时处于激活状态(在不同的执行阶段)。这一线程组的集合在本文中被称作“协作线程阵列”(“CTA”)或“线程阵列”。特定CTA的大小等于m×k,其中k是线程组中并发执行的线程的数量,并且一般是SM310内并行处理引擎数量的整数倍,m是在SM310内同时处于激活状态的线程组的数量。通常由编程人员以及CTA可用的诸如存储器或寄存器的硬件资源的容量,来确定CTA的大小。
每个SM310都包括一级(L1)高速缓存(图3C中未示出)或者使用该SM310之外的用于执行加载和存储操作的相应L1高速缓存中的空间。每个SM310也都有权访问二级(L2)高速缓存,所述L2高速缓存在所有GPC208中间共享并且可以被用于在线程之间转移数据。最后,SM310也有权访问片外“全局”存储器,其可包括例如并行处理存储器204和/或系统存储器104。应该理解,在PPU202外的任意存储器都可用作全局存储器。此外,一点五级(L1.5)高速缓存335可包括在GPC208内,配置为接收和保持由SM310所请求的、经由存储器接口214从存储器获取的数据,包括指令、一致性(uniform)数据以及常数数据,并将所请求的数据提供给SM310。在GPC208中具有多个SM310的实施例有益地共享被高速缓存在L1.5高速缓存335中的共同指令和数据。
每个GPC208均可包括配置为将虚拟地址映射到物理地址的存储器管理单元(MMU)328。在其他实施例中,MMU328可驻留在存储器接口214内。MMU328包括用于将虚拟地址映射到像素块(tile)的物理地址的一组页表条目(PTE),以及可选地包括高速缓存线索引(cachelineindex)。MMU328可包括地址转译后备缓冲区(TLB)或可驻留在多处理器SM310或L1高速缓存或GPC208内的高速缓存。处理所述物理地址以分布表面数据访问位置,从而允许在分区单元215之中的有效的请求交错(interleave)。高速缓存线索引可用于确定对高速缓存线的请求是否命中或未命中。
在图形和计算应用中,GPC208可配置为使得每个SM310均耦合到纹理单元315,用于实施纹理映射操作,例如确定纹理采样位置、读取纹理数据以及过滤纹理数据。从内部纹理L1高速缓存(未示出)或者在一些实施例中从SM310内的L1高速缓存读取纹理数据,以及当需要的时候从L2高速缓存、并行处理存储器204或系统存储器104获取纹理数据。每个SM310都将处理后的任务输出给工作分布交叉开关330,以便将处理后的任务提供给另一个GPC208用于进一步的处理,或者来将处理后的数据经由交叉开关单元210存储在共享于所有GPC208之间的L2高速缓存、并行处理存储器204或系统存储器104中。preROP(预光栅操作)325配置为从SM310接收数据,将数据引导至分区单元215内的ROP单元,并实施用于色彩混合的优化、组织像素色彩数据以及实施地址转译。
应该理解,本文所描述的内核架构是示例性的,可对其进行变形和修改。GPC208内可以包括任意数量的处理单元,例如SM310或纹理单元315、preROP325。进一步,如图2所示,PPU202可以包括任意数量的GPC208,所述GPC208最好在功能上彼此相似,以使执行行为不依赖于接收到具体处理任务的GPC208。进一步地,每个GPC208最好使用单独的、各异的处理单元、L1高速缓存,独立于其他GPC208操作,以执行用于一个或多个应用程序的任务。
本领域的普通技术人员应该理解,图1、2、3A和3B中描述的架构不以任何方式来限制本发明的范围,并且本文教导的技术可以在任意经适当配置的处理单元上实现,包括但不限于一个或多个CPU、一个或多个多内核CPU、一个或多个PPU202、一个或多个GPC208、一个或多个图形或专用处理单元等等,而不脱离本发明的范围。
在本发明的实施例中,所期望的是,使用PPU202或计算系统的其他处理器采用线程阵列来执行通用计算。给线程阵列中的每个线程都指派唯一的线程标识符(“threadID”),所述线程标识符在该线程执行期间可由该线程访问。线程ID可被定义为一维或多维数值,其控制线程处理行为的各个方面。例如,线程ID可用于确定线程将处理哪部分输入数据集和/或确定线程将产生或写入哪部分输出数据集。
每线程的指令序列可包括至少一个指令,所述指令定义了代表线程与线程阵列中一个或多个其他线程之间的协作行为。例如,每线程的指令序列均可包括以下指令:在序列中的特定点将对于代表线程的操作执行挂起直到一个或多个其他线程到达该特定点时的指令;指示代表线程在一个或多个其他线程有权访问的共享存储器中存储数据的指令;指示代表线程自动地读取和更新存储在一个或多个其他线程基于其线程ID有权访问的共享存储器中的数据的指令等等。CTA程序也可包括计算从其中读取数据的共享存储器中的地址的指令,该地址为线程ID的函数。通过定义适合的函数并提供同步技术,数据可以以可预测的方式由CTA的一个线程写入共享存储器中给定的位置,并且由同一个CTA的不同线程从该位置读取。因此,可以支持以任意所希望的方式将数据在线程中共享,并且CTA中的任意线程都可以和同一个CTA中的任意其他线程共享数据。如果在CTA的线程中间共享有数据,则数据共享的程度由CTA程序确定;因此,应该理解在使用CTA的特定应用中,CTA的线程实际上可能相互共享数据或者可能不相互共享数据,这取决于该CTA程序,并且术语“CTA”和“线程阵列”在本文中同义使用。
图3C为根据本发明一个实施例的、图3B中SM310的框图。SM310包括指令L1高速缓存370,其配置为经由L1.5高速缓存335从存储器接收指令和常数。warp调度器和指令单元312从指令L1高速缓存370接收指令和常数,并根据该指令和常数控制本地寄存器堆304和SM310功能单元。SM310功能单元包括N个exec(执行或处理)单元302和P个加载-存储单元(LSU)303。
SM310提供具有不同可访问性级别的片上(内部)数据存储。专用寄存器(未示出)对于LSU303可读但不可写,并用于存储定义每个线程“位置”的参数。在一个实施例中,专用寄存器包括存储线程ID的每CTA线程(或SM310内的每exec单元302)一个的寄存器;每线程ID寄存器仅可以由各自的一个exec单元302访问。专用寄存器也可包括可由执行由TMD322所代表的同一个处理任务的所有线程(或所有LSU303)读取的附加寄存器,其存储CTA标识符、CTA维度、CTA所属栅格(grid)的维度、(或者队列位置,如果TMD322编码为队列任务而不是栅格任务),以及指派有CTA的TMD322的标识符。
如果TMD322是栅格TMD,那么TMD322的执行将会启动和执行固定数量的CTA,以处理存储在队列525中的固定容量的数据。CTA数被指定为栅格宽度、高度和深度的乘积。可以在TMD322中存储固定容量的数据,或者TMD322可以存储指向将由CTA处理的数据的指针。TMD322还存储由CTA所执行的程序的开始地址。
如果TMD322是队列TMD,则使用TMD322的队列特征,这意味着将要处理的数据的容量不必是固定的。队列条目存储指派给TMD322的用于由CTA分配的数据。队列条目还可代表在线程的执行期间由另一个TMD322所生成的子任务,从而提供嵌套的并行性。一般来说,线程或包括线程的CTA的执行被挂起,直到完成子任务的执行。队列可存储在TMD322中,或者与TMD322分开存储,在该情况下TMD322存储指向队列的队列指针。有利地,执行代表子任务的TMD322的同时将由子任务所生成的数据写入到队列中。可将队列实现为循环队列,以使得数据的总容量不限于队列的大小。
属于栅格的CTA具有隐含的栅格宽度、高度和深度参数,指示在栅格内的各个CTA的位置。在初始化期间,响应于经由前端212从设备驱动程序103处所接收的命令来对专用寄存器进行写入,并且在处理任务的执行期间不改变。前端212调度每个处理任务用于执行。每个CTA都与特定TMD322相关联,用于一个或多个任务的并发执行。此外,单个GPC208可以并发地执行多个任务。
参数存储器(未示出)存储运行时间参数(常数),所述参数对于同一CTA内的任意线程(或任意LSU303)可读但不可写。在一个实施例中,设备驱动程序103在引导SM310开始执行使用参数的任务之前提供这些参数给所述参数存储器。任意CTA中的任意线程(或SM310内的任意执行单元302)均可通过存储器接口214访问全局存储器。全局存储器的一部分可存储在L1高速缓存320中。
每个线程均可使用本地寄存器堆304作为临时空间(scratchspace);每一个寄存器均被分配用于一个线程的排他性使用,并且在任意本地寄存器堆304中的数据仅可由寄存器被分配到的线程所访问。本地寄存器堆304可实现为物理地或逻辑地分为P个通道的寄存器堆,每个通道均具有一定数目的条目(其中每个条目可能存储例如32比特字)。为N个exec单元302以及P个加载-存储单元LSU303的每一个都指派一个通道,并且不同通道中的相应条目可以以用于执行同一个程序的不同线程的数据填充,以有助于SIMD执行。通道的不同部分可被分配给G个并发线程组中的不同线程组,从而使本地寄存器堆304中给定的条目仅可由特定线程访问。在一个实施例中,本地将寄存器堆304中的某些条目被保留用于存储线程标识符,实现一个专用寄存器。另外,一致性L1高速缓存375为N个exec单元302以及P个加载-存储单元LSU303的每个通道存储一致性或常数值。
共享存储器306对于单个CTA内的线程是可访问的;也就是说,共享存储器306的任意位置都可由同一CTA内的任何线程(或SM310内的任意处理引擎)访问。共享存储器306可实现为共享寄存器堆或共享片上高速缓存存储器,具有允许任意处理引擎对共享存储器中任意位置进行读或写的互连。在其他实施例中,共享状态空间可映射到片外存储器的每CTA区域上,并且被高速缓存在L1高速缓存320中。参数存储器可作为同一个共享寄存器堆或实现共享存储器306的共享高速缓存存储器内的指定部分实现,或作为单独的共享寄存器堆或LSU303对其具有只读访问权限的片上高速缓存存储器实现。在一个实施例中,实现参数存储器的区域也被用于存储CTAID和任务ID以及存储CTA和栅格的尺寸或队列位置,实现专用寄存器的一部分。SM310中的每个LSU303均可耦合到统一地址映射单元352,其将为在统一存储器空间中所指定的加载和存储指令所提供的地址转换为在每个各异的存储器空间中的地址。因此,通过在统一存储器空间中指定地址,指令可用于访问任意本地、共享或全局存储器空间。
每个SM310中的L1高速缓存320可用于高速缓存私有的每线程本地数据和每应用程序的全局数据。在一些实施例中,可以在L1高速缓存320中高速缓存每CTA的共享数据。经由存储器和高速缓存互连380,LSU303耦合到共享存储器306和L1高速缓存320。
寄存器堆中的操作数收集
如图4A-4D所示,寄存器堆402包括存储诸如指令操作数的数据的寄存器,当执行指令时由处理器所访问。由线程地址和寄存器地址来标识每个单独的寄存器单元。例如,在寄存器堆0402(0)的左上角的寄存器是线程4的寄存器10,因此通过命名T4:10来标识。类似地,在寄存器堆0402(0)的右下角的寄存器是线程3的寄存器0,因此通过T3:0来标识。对每个寄存器堆加以组织,使得在给定的寄存器访问操作期间可以同时访问每个寄存器堆中的一行寄存器。例如,在单个寄存器访问操作中可以同时访问寄存器T0:0、T1:0、T2:0和T3:0。根据在特定寄存器访问操作期间所访问的操作数的类型将寄存器堆402组织为逻辑库。当从寄存器堆读取操作数时,寄存器访问操作形成跨寄存器堆的模式,本文标识为“成形的(shaped)访问”。寄存器堆内的寄存器布置和在寄存器访问操作期间所形成的成形的访问模式利用了共同操作数配置。因此,与针对每个操作数的单独的串行寄存器访问操作相反,使用成形的访问减小了从寄存器堆收集指令操作数的延迟,从而改善了性能。图4A-4D中的每一个都示出了不同的示例性的成形的访问模式。
图4A示出了根据本发明一个实施例的、配置用于操作数收集的寄存器堆的库。如图所示,该寄存器堆的库包括寄存器堆402和逻辑库420。这样的情况下,可形成逻辑库420,使得逻辑库0420(0)包括寄存器堆0402(0)和寄存器堆2402(1),逻辑库1420(1)包括寄存器堆1402(2)和寄存器堆3402(3)等等。采用该排列,寄存器堆402优化为检索单倍宽度的(single-width)操作数。例如,如果线程0至7均访问存储在寄存器0中的单倍宽度的操作数,那么处理器可形成在逻辑库0420(0)内的成形的访问,来检索寄存器的底部行,包括T0:0至T7:0。处理器可形成在逻辑库1420(1)内的成形的访问,来为同一组线程检索不同的单倍宽度的操作数,诸如T0:1至T7:1。类似地,处理器可形成在逻辑库2420(2)和逻辑库3420(3)内的成形的访问,来为同一组八个线程在寄存器4和5处检索单倍宽度的操作数。在单个寄存器访问操作期间,示出的成形的访问为八个线程的每一个均检索四个单倍宽度的操作数,如图4A中阴影区域所示。
图4B示出了根据本发明替代实施例的、配置用于操作数收集的寄存器堆的库。如图所示,该寄存器堆的库包括寄存器堆402和逻辑库440。在这种情况下,可形成逻辑库440,使得逻辑库0440(0)包括寄存器堆0402(0)和寄存器堆2402(2),逻辑库1440(1)包括寄存器堆1402(1)和寄存器堆3402(3)等等。采用这样的排列,寄存器堆402优化为检索两倍宽度(double-width)的操作数。例如,如果线程0至3均访问存储在寄存器对0-1中的两倍宽度的操作数,那么处理器可形成在逻辑库0440(0)内的成形的访问,来检索寄存器的最后一行,包括T0:0-1至T3:0-1。处理器可形成在逻辑库1440(1)内成形的访问,来为不同的线程组检索两倍宽度的操作数,诸如T4:0-1至T7:0-1。类似地,处理器可形成在逻辑库2440(2)和逻辑库3440(3)内的成形的访问,来从每个逻辑库中为四个线程检索两倍宽度的操作数。例如,在单个寄存器访问操作期间,示出的成形的访问为八个线程的每一个均检索两个两倍宽度的操作数,如图4B中的阴影区域所示。
图4C示出了根据本发明另一个替代实施例的、配置用于操作数收集的寄存器堆的库。如图所示,该寄存器堆的库包括寄存器堆402和逻辑库460。在这种情况下,可形成逻辑库460,使得两个逻辑库460(2)、460(3)优化为检索单倍宽度操作数,并且两个逻辑库460(0)、460(1)优化为检索两倍宽度操作数。例如,在单个寄存器访问操作期间,示出的成形的访问从逻辑库0460(0)和逻辑库1460(1)即寄存器T0:0-1至T7:0-1,为八个线程的每一个均检索一个两倍宽度操作数。在同一个寄存器访问操作期间,示出的成形的访问从逻辑库2460(2)和逻辑库3460(3)即针对线程0-7的寄存器4和5,为八个线程的每一个均检索两个单倍宽度的操作数。该示例性的成形的访问由图4C中的阴影区域示出。
图4D示出了根据本发明又一个替代实施例的、配置用于操作数收集的寄存器堆的库。如图所示,该寄存器堆的库包括寄存器堆402和逻辑库480。在这样的情况下,可形成逻辑库480,使得逻辑库480优化为检索四倍宽度(quadruple-width)的操作数。例如,在单个寄存器访问操作期间,示出的成形的访问从逻辑库0/1480(0),即寄存器T0:0-3至T3:0-3,为四个线程的每一个均检索一个四倍宽度的操作数。在同一个寄存器访问操作期间,示出的成形的访问从逻辑库2/3480(1),即寄存器T0:4-7至T3:4-7,为同样的四个线程检索第二四倍宽度的操作数。该示例性的成形的访问由图4D中的阴影区域示出。
图5示出了根据本发明的一个实施例的、图3C的warp调度器和指令单元312以及本地寄存器堆304的框图。如图所示,warp调度器和指令单元312包括warp调度器502和指令分派单元504。warp调度器502从指令L1高速缓存370接收指令和常数,并且调度指令以作为线程组内的又一个线程来执行。指令分派单元504根据从指令L1高速缓存370所检索的指令和常数来控制本地寄存器堆304和SM310功能单元。指令分派单元504对指令操作数进行评估以确定该操作数是否适合于所确认的成形的访问模式。随后,指令分派单元504选择成形的访问来从寄存器堆506读取操作数集。然后,指令分派单元504生成地址和读使能来从寄存器堆506读取操作数。
本地寄存器堆304包括寄存器堆506和收集器508。寄存器堆506根据成形的访问的模式来在寄存器访问操作期间检索操作数,并且发送操作数给收集器508。收集器508根据操作数在原始指令中的位置来定位(align)操作数,并相应地存储这些操作数。如果在第一寄存器访问操作期间检索到所有操作数,那么指令和操作数被传递给SM310功能单元,包括exec单元302和加载-存储单元303。如果在第一寄存器访问操作期间未检索到一些操作数,那么收集器508存储每个成形的访问的结果,直到所有操作数均被收集。一旦全部操作数都存储在收集器508内,则传递指令和操作数给SM310功能单元,包括exec单元302和加载-存储单元303。
为了形成成形的访问,指令分派单元504从warp调度器502接收一个或多个指令。每个指令均与一个或多个操作数相关联。操作数被共同组织为一个或多个操作数组,从中可形成成形的访问。指令分派单元504配置为确认通常由一个或多个操作数组所利用的不同的存储器访问模式。指令分派单元504形成成形的访问以有效地检索操作数组,其呈现这些存储器访问模式的一个或多个。在一个实施例中,指令分派单元504将寄存器堆的库分为两个段,寄存器堆0-3402(0)-402(3)以及寄存器堆4-7402(4)-402(7)。指令分派单元504为这两段寄存器堆的每段创建一个或多个成形的访问。指令分派单元504在寄存器堆的库内标识每个操作数的位置。指令分派单元504记录要求操作数的特定线程、为这些线程的每一个保持操作数的寄存器堆、以及操作数位于其中的寄存器堆内的行。接着,指令分派单元504选择操作数之一并且确定该操作数是否为单倍宽度、两倍宽度或四倍宽度操作数。指令分派单元504根据操作数的宽度在寄存器堆的段内形成逻辑库。随后,指令分派单元504形成跨所选择的操作数存储于其中的逻辑库的成形的访问,一般配置为跨逻辑库来读取相同行的地址。类似地,为该寄存器堆的段内的其他逻辑库选择操作数,并且也为该逻辑库形成成形的访问。然后,对于寄存器堆的其他段,重复该过程。因为分别处理寄存器堆的两个段,所以在寄存器堆的两个段的每一个中,逻辑库的排列和成形的访问类型可以不同。
如上所述,一旦成形的访问被正确地标识和配置,则指令分派单元504使能寄存器堆506以读取与成形的访问相关联的寄存器,如上所述。指令分派单元504采用相应的指令对器所检索的操作数,并将经定位的操作数传输至操作数存储于其中的收集器508。接着,指令分派单元504确定是否已经从寄存器堆506读取和收集与当前指令集相关联的所有操作数并且存储在收集器508中。如果将要读取额外的操作数,那么指令分派单元504暂停(stall)SM310内的管线并重复上述过程来针对剩余的操作数形成额外的成形的访问。继续该过程直到与当前指令集相关联的所有操作数均被读取和收集,这时指令分派单元504取消暂停SM310内的管线,从而使能将被执行的指令。
上述过程的示例如下。假设指令分派单元504可以针对线程0选择位于寄存器堆的第一段内的寄存器0-1处的两倍宽度的操作数。如图4C所示,操作数可位于寄存器堆0402(0)和寄存器堆2402(2)的左下单元中。结果是,指令分派单元504将形成配置为包括寄存器堆0402(0)和寄存器堆2402(2)的逻辑库0460(0)。类似地,指令分派单元504将形成配置为包括寄存器堆1402(1)和寄存器堆3402(3)的逻辑库1460(1)。由此产生的成形的访问将针对四个线程的每一个访问两组两倍宽度的操作数。同样滴,指令分派单元504可以针对线程0选择位于寄存器堆的第二段内的寄存器4处的单倍宽度操作数。如图4C所示,操作数可位于寄存器堆4402(4)的左下单元中。结果是,指令分派单元504将形成配置为包括寄存器堆4402(4)和寄存器堆5402(5)的逻辑库2460(2)。类似地,指令分派单元504将形成配置为包括寄存器堆6402(6)和寄存器堆7402(7)的逻辑库3460(3)。由此产生的成形的访问将针对八个线程的每一个访问两组单倍宽度操作数。一旦完成成形的访问,指令分派单元504将确定是否仍然存在额外的操作数。如果将收集更多的操作数,那么指令分派单元504将暂停SM310管线,形成额外的成形的访问以收集任何剩余的操作数,并且随后取消暂停SM310管线。
图6是根据本发明一个实施例的、用于收集寄存器堆操作数的方法步骤的流程图。虽然结合图1-5的系统来描述本方法步骤,但本领域普通技术人员将理解,配置用于按任意顺序实施该方法步骤的任意系统均在本发明范围内。
如图所示,方法600开始于步骤602,其中指令分派单元504从warp调度器502接收一个或多个指令的集。每个指令均可包括一个或多个操作数并且经调度以在一个或多个线程上执行。在步骤604,为了确定操作数是否适合于数个所确认的成形的访问模式之一,指令分派单元504对由一个或多个指令所访问的操作数集进行评估。达到确认成形的访问模式的程度,则在步骤606,指令分派单元504形成成形的寄存器堆访问来检索指令操作数。在步骤608,指令分派单元504通过发送相应的寄存器地址和读使能至寄存器堆506来执行成形的寄存器堆访问。在步骤610,指令分派单元504以相应的指令来定位所检索的操作数。在步骤612,指令分派单元504将所检索的操作数写到收集器508中。
在步骤614,指令分派单元504确定是否已经检索到全部操作数。如果尚未检索到全部操作数,那么方法600继续至步骤616,其中指令分派单元504暂停管线以阻止更多的指令进入warp调度器和指令单元312。然后,方法600返回步骤606,其中指令分派单元504形成另一个成形的寄存器访问。方法600继续,直到在步骤614,指令分派单元504确定已经检索到所有操作数。然后,方法600进行到步骤618,其中指令分派单元504取消暂停管线,方法600终止于该处。
总而言之,所公开的技术提供了从寄存器堆检索操作数的有效方式。具体地,指令分派单元504从warp调度器502接收将跨一个或多个线程所执行的一个或多个指令,其中每个指令均包括一个或多个操作数。操作数被共同组织为一个或多个操作数组,从其中形成“成形的访问”。指令分派单元504配置为确认由操作数组所利用的不同的存储器访问模式。指令分派单元504形成与存储器访问模式相对应的成形的访问。从寄存器堆506检索与由成形的访问所覆盖的寄存器相对应的操作数,并且存储在收集器508中。如果在成形的访问之后并非全部指令操作数均被读取并收集到收集器508中,那么指令分派单元504暂停SM310内的管线,并且形成另一个成形的访问来从寄存器堆506检索额外的操作数并将操作数存储在收集器508中。一旦全部操作数均被读取并收集到收集器508中,则指令分派单元504取消暂停管线,并且传输指令和相应的操作数至SM310中的功能单元用于执行。
有利地,在单个寄存器访问操作中从寄存器堆506检索多个操作数,而不存在资源冲突。在指令操作数利用所确认的存储器访问模式的情况下,通过形成显示这些访问模式的有效地检索操作数的成形的访问,来改善从寄存器堆506检索操作数的性能。进一步地,寄存器堆的库内的寄存器堆402可灵活地排列为逻辑库,以检索指令集内的多个操作数。因此,每个寄存器访问操作均可以具有不同的利用不同的逻辑库排列的成形的访问,如根据操作数集而显得适当(warrant)的。指令分派单元504使用成形的访问来实施一个或多个寄存器访问操作,直到读取和收集到全部操作数。
虽然上述内容针对本发明的实施例,但在不脱离其基本范围和由所附权利要求所确定的本发明的范围的情况下可对本发明的其他和进一步的实施例进行设计。

Claims (10)

1.一种用于实施寄存器的存储器操作的计算机实现的方法,所述方法包括:
接收将跨多个操作数执行的指令;
确认存储所述多个操作数的多个寄存器堆经由特定的存储器访问模式可访问;
形成与所述特定的存储器访问模式相对应的成形的存储器访问操作;以及
实施所述成形的存储器访问操作来从所述多个寄存器堆访问所述多个操作数,其中不同线程访问寄存器堆的给定行中的每个不同的寄存器。
2.一种用于实施寄存器的存储器操作的子系统,包括:
指令分派单元,配置为:
接收将跨多个操作数执行的指令;
确认存储所述多个操作数的多个寄存器堆经由特定的存储器访问模式可访问;
形成与所述特定的存储器访问模式相对应的成形的存储器访问操作;以及
实施所述成形的存储器访问操作来从所述多个寄存器堆访问所述多个操作数,其中不同线程访问寄存器堆的给定行中的每个不同的寄存器。
3.如权利要求2所述的子系统,其中所述指令分派单元进一步配置为根据所述指令来定位所述多个操作数;并且将所述多个操作数存储在操作数收集器中。
4.如权利要求2所述的子系统,其中形成成形的存储器访问操作包括形成所述多个寄存器堆的至少一部分所属于的一个或多个逻辑库。
5.如权利要求2所述的子系统,其中所述成形的存储器访问操作配置为访问单倍宽度的操作数。
6.如权利要求2所述的子系统,其中所述成形的存储器访问操作配置为访问两倍宽度的操作数。
7.如权利要求2所述的子系统,其中所述成形的存储器访问操作配置为访问四倍宽度的操作数。
8.如权利要求2所述的子系统,其中所述成形的存储器访问操作配置为访问具有不同操作数宽度的操作数。
9.如权利要求2所述的子系统,其中所述指令分派单元进一步配置为传输所述指令和至少所述多个操作数到功能单元用于执行。
10.一种计算设备,包括:
包括指令分派单元的子系统,所述指令分派单元配置为:
接收将跨多个操作数执行的指令;
确认存储所述多个操作数的多个寄存器堆经由特定的存储器访问模式可访问;
形成与所述特定的存储器访问模式相对应的成形的存储器访问操作;以及
实施所述成形的存储器访问操作来从所述多个寄存器堆访问所述多个操作数,其中不同线程访问寄存器堆的给定行中的每个不同的寄存器。
CN201210520963.5A 2011-12-06 2012-12-06 用于实施成形的存储器访问操作的系统和方法 Active CN103218208B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/312,954 2011-12-06
US13/312,954 US10255228B2 (en) 2011-12-06 2011-12-06 System and method for performing shaped memory access operations

Publications (2)

Publication Number Publication Date
CN103218208A CN103218208A (zh) 2013-07-24
CN103218208B true CN103218208B (zh) 2016-05-04

Family

ID=48431581

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210520963.5A Active CN103218208B (zh) 2011-12-06 2012-12-06 用于实施成形的存储器访问操作的系统和方法

Country Status (4)

Country Link
US (1) US10255228B2 (zh)
CN (1) CN103218208B (zh)
DE (1) DE102012221502A1 (zh)
TW (1) TWI498819B (zh)

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11847427B2 (en) 2015-04-04 2023-12-19 Texas Instruments Incorporated Load store circuit with dedicated single or dual bit shift circuit and opcodes for low power accelerator processor
US9952865B2 (en) 2015-04-04 2018-04-24 Texas Instruments Incorporated Low energy accelerator processor architecture with short parallel instruction word and non-orthogonal register data file
US9817791B2 (en) * 2015-04-04 2017-11-14 Texas Instruments Incorporated Low energy accelerator processor architecture with short parallel instruction word
GB2540971B (en) * 2015-07-31 2018-03-14 Advanced Risc Mach Ltd Graphics processing systems
WO2017074377A1 (en) * 2015-10-29 2017-05-04 Intel Corporation Boosting local memory performance in processor graphics
US10503474B2 (en) 2015-12-31 2019-12-10 Texas Instruments Incorporated Methods and instructions for 32-bit arithmetic support using 16-bit multiply and 32-bit addition
US10401412B2 (en) 2016-12-16 2019-09-03 Texas Instruments Incorporated Line fault signature analysis
US10877757B2 (en) * 2017-11-14 2020-12-29 Nvidia Corporation Binding constants at runtime for improved resource utilization
EP4009186A1 (en) 2018-10-18 2022-06-08 Shanghai Cambricon Information Technology Co., Ltd Network-on-chip data processing method and device
CN111079908B (zh) * 2018-10-18 2024-02-13 上海寒武纪信息科技有限公司 片上网络数据处理方法、存储介质、计算机设备和装置
CN111459543B (zh) * 2019-01-21 2022-09-13 上海登临科技有限公司 一种管理寄存器文件单元的方法
US11436166B2 (en) * 2019-02-05 2022-09-06 Arm Limited Data processing systems
US11281496B2 (en) 2019-03-15 2022-03-22 Intel Corporation Thread group scheduling for graphics processing
KR102201352B1 (ko) * 2019-04-03 2021-01-08 연세대학교 산학협력단 스핀 전달 토크 랜덤 액세스 메모리 기반의 계층적 레지스터 파일 장치
US10839478B2 (en) * 2019-04-08 2020-11-17 Intel Corporation Accumulator pooling mechanism
CN112817639B (zh) * 2021-01-13 2022-04-08 中国民航大学 Gpu读写单元通过操作数收集器访问寄存器文件的方法
CN114489792B (zh) * 2021-03-25 2022-10-11 沐曦集成电路(上海)有限公司 处理器装置及其指令执行方法
CN114281414B (zh) * 2021-12-29 2022-12-27 海飞科(南京)信息技术有限公司 Aigpu架构中urf寄存器的数据写入方法
CN114546329B (zh) * 2022-03-01 2023-07-18 上海壁仞智能科技有限公司 用于实现数据奇偶重排的方法、设备和介质
CN115904510B (zh) * 2023-02-15 2023-05-09 南京砺算科技有限公司 多操作数指令的处理方法、图形处理器及存储介质
CN117742794A (zh) * 2023-12-05 2024-03-22 摩尔线程智能科技(北京)有限责任公司 数据处理系统、方法、装置及存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5513366A (en) * 1994-09-28 1996-04-30 International Business Machines Corporation Method and system for dynamically reconfiguring a register file in a vector processor
TW200634622A (en) * 2004-12-28 2006-10-01 Intel Corp Register file regions for a processing system
CN101231585A (zh) * 2007-01-26 2008-07-30 辉达公司 用于并行线程计算的虚拟结构和指令集

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS55164961A (en) * 1979-06-11 1980-12-23 Canon Inc Calculator
US7219213B2 (en) * 2004-12-17 2007-05-15 Intel Corporation Flag bits evaluation for multiple vector SIMD channels execution
US8966223B2 (en) * 2005-05-05 2015-02-24 Icera, Inc. Apparatus and method for configurable processing
US10360039B2 (en) 2009-09-28 2019-07-23 Nvidia Corporation Predicted instruction execution in parallel processors with reduced per-thread state information including choosing a minimum or maximum of two operands based on a predicate value

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5513366A (en) * 1994-09-28 1996-04-30 International Business Machines Corporation Method and system for dynamically reconfiguring a register file in a vector processor
TW200634622A (en) * 2004-12-28 2006-10-01 Intel Corp Register file regions for a processing system
CN101231585A (zh) * 2007-01-26 2008-07-30 辉达公司 用于并行线程计算的虚拟结构和指令集

Also Published As

Publication number Publication date
DE102012221502A1 (de) 2013-06-06
US10255228B2 (en) 2019-04-09
CN103218208A (zh) 2013-07-24
TW201337751A (zh) 2013-09-16
US20130145124A1 (en) 2013-06-06
TWI498819B (zh) 2015-09-01

Similar Documents

Publication Publication Date Title
CN103218208B (zh) 用于实施成形的存储器访问操作的系统和方法
CN103365631B (zh) 用于存储器访问的动态库模式寻址
CN103207774B (zh) 用于解决线程发散的方法和系统
CN103777926A (zh) 多线程处理单元中的高效存储器虚拟化
CN103778072A (zh) 多线程处理单元中的高效存储器虚拟化
US8751771B2 (en) Efficient implementation of arrays of structures on SIMT and SIMD architectures
CN103218309B (zh) 多级指令高速缓存预取的方法、系统与设备
CN103777925A (zh) 多线程处理单元中的高效存储器虚拟化
EP2480975B1 (en) Configurable cache for multiple clients
CN103197916A (zh) 用于源操作数收集器高速缓存的方法和装置
CN103425533A (zh) 用于管理嵌套执行流的方法和系统
CN103294536B (zh) 控制用于处理任务的工作分布
CN103294753A (zh) 无锁先入先出
CN103309702A (zh) 用于并行线程子集的一致加载处理
CN104050033A (zh) 用于有索引的屏障的硬件调度的系统和方法
CN103226481A (zh) 自动从属任务启动
CN103197953A (zh) 推测执行和回滚
CN103885893A (zh) 用于访问内容寻址存储器的技术
CN104050032A (zh) 用于有条件的屏障和急迫的屏障的硬件调度的系统和方法
CN103885902A (zh) 用于经由纹理硬件实施存储器访问操作的技术
CN103870309A (zh) 用于集群多级寄存器堆的寄存器分配
CN103425534A (zh) 在许多应用之间共享的图形处理单元
CN103257931A (zh) 成形的寄存器堆读取
CN103885903A (zh) 用于经由纹理硬件实施存储器访问操作的技术
CN103197918B (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
C14 Grant of patent or utility model
GR01 Patent grant