CN102648449B - 一种用于处理干扰事件的方法和图形处理单元 - Google Patents

一种用于处理干扰事件的方法和图形处理单元 Download PDF

Info

Publication number
CN102648449B
CN102648449B CN201080054127.1A CN201080054127A CN102648449B CN 102648449 B CN102648449 B CN 102648449B CN 201080054127 A CN201080054127 A CN 201080054127A CN 102648449 B CN102648449 B CN 102648449B
Authority
CN
China
Prior art keywords
threads
sets
code segment
dispose device
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.)
Active
Application number
CN201080054127.1A
Other languages
English (en)
Other versions
CN102648449A (zh
Inventor
米歇尔·C·施巴诺
杰克·夏高特
布雷特·W·库恩
史蒂文·J·海因里希
阿拉宾得·卡拉恩
约翰·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 CN102648449A publication Critical patent/CN102648449A/zh
Application granted granted Critical
Publication of CN102648449B publication Critical patent/CN102648449B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/327Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for interrupts
    • 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/3861Recovery, e.g. branch miss-prediction, exception handling
    • 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/3888Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple threads [SIMT] in parallel

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Advance Control (AREA)
  • Image Processing (AREA)
  • Multi Processors (AREA)

Abstract

将陷阱处理器架构结合到诸如GPU的并行处理子系统中。该陷阱处理器架构通过强制实行以下特性来为并发执行线程最小化设计复杂度和验证工作:与流多处理器相关联的所有线程组或者全部执行在它们各自的代码段内,或者全部执行在陷阱处理器代码段内。

Description

一种用于处理干扰事件的方法和图形处理单元
相关申请的交叉引用
本申请要求于2009年9月29日提交的序列号为12/569,831的美国专利申请的优先权。
技术领域
本发明总体涉及陷阱处理器(trap handler)架构,并且,更具体地涉及高度并行线程处理器和图形处理单元中的陷阱处理器架构。
背景技术
陷阱处理器是计算机系统中的软件例程,例如当计算机程序执行期间计算机系统中发生异常(exception)或中断时,执行所述陷阱处理器。由于执行计算机程序中的特定指令导致需要以特定方式对其进行处理的意外结果,因此发生异常。例如,除以零的指令或包括错误存储器地址的指令将产生异常,其使得计算机程序流跳转到陷阱处理器例程。相反,中断的发生是由于不依靠计算机程序流自身的外部事件。例如,诸如按下鼠标上的按键或者完成到NIC卡的数据传输这类设备I/O事件,将会使该设备传送中断到计算机系统,同样使得计算机程序流跳转到陷阱器例程。不论是处理异常还是中断(本文中都称为“异常”),陷阱处理器一般都从保存当前计算机程序流的状态开始(例如,保存于程序堆栈),然后跳转到该陷阱处理器的特定子例程以寻址特定的异常或中断。
虽然陷阱处理器架构通常实现于计算机系统的操作系统和设备驱动器中,但至今为止,在此类计算机系统中的诸如图形处理器子系统或GPU(图形处理单元)等高度并行线程处理器,则由于实现和效率方面的困难,仍然未能包含陷阱处理器架构。由于其高度并行化的特征,在发生中断或异常的情况下,对应于可在GPU中运行的多个不同线程组,用于现代GPU的陷阱处理器架构需要正确地处理数以万计的并发执行的线程。此外,考虑到对于GPU的尺寸和成本限制,此类陷阱处理器架构的集成电路组件需要有效地利用半导体晶圆面积(wafer die area)。由于难以将可有效处理并发执行线程的陷阱处理器架构包含进来,因此当前的GPU不能提供依赖于 陷阱处理器的增强特征集,该增强特征集诸如处理主机CPU中断、不需要与CPU交互即可在GPU中直接进行异常处理以及GPU系统调用支持。
因此,本技术领域需要的是用于在GPU中有效提供陷阱处理器架构的系统和方法,所述陷阱处理器架构能够恰当地处理在GPU中当前运行线程的高度并行化的特性。
发明内容
本发明的一个或多个实施例提供用于GPU的陷阱处理器架构,其处理GPU中的异常和中断。为了针对GPU的线程组中每一个,解决线程组同步问题以及最小化设计复杂度和验证工作,所述陷阱处理器架构强制执行以下特性:所有线程组或者全部执行在它们各自的代码段内,或者全部执行在所述陷阱处理器代码段的代码段内。
根据一个实施例,GPU经配置以处理在所述GPU的多处理器内的第一线程组执行期间发生的干扰事件,例如异常或中断。所述GPU包括陷阱处理器控制器,所述陷阱处理器控制器经配置以执行以下步骤:接收所述干扰事件的通知;停止执行在所述多处理器内的所有线程组的执行;设置错误状态寄存器以指示所述干扰事件的类型;以及,为每个线程组设置程序计数器,以指出陷阱器代码段的存储器地址,所述陷阱器代码段包括配置所述多处理器来处理所述干扰事件的软件例程;以及,包括所述陷阱处理器代码段的存储器单元,所述陷阱处理器代码段包含当由所述多处理器执行时,执行以下步骤的指令:请求所述错误状态寄存器的值;分支转移到所述陷阱处理器代码段中的子段,所述子段包括用于寻址所述干扰事件的类型的指令;以及,执行所述陷阱处理器代码段的所述子段中的指令以处理该干扰事件。
包括这中陷阱处理器架构的GPU的一个优点在于,在处理大量可由陷阱处理器自身内部处理的很多情况时,GPU较少地依赖于主机CPU。
附图说明
因此,可以详细地理解上述本发明的特征,并且可以参考实施例得到对如上面所概括的本发明更具体的描述,其中一些实施例在附图中示出。然而,应当注意的是,附图仅用于示意性地表示本发明的典型实施例,因此不应被认为是对本发明范围的限制,本发明可以具有其他等效的实施方式。
图1为示出了被配置为实现本发明一个或多个方面的计算机系统的框图;
图2为根据本发明一个实施例的,用于图1中计算机系统的并行处理子系统的框图;
图3A为根据本发明一个实施例的,图2中一个PPU内的GPC的框图;
图3B为根据本发明一个实施例的,图2中一个PPU内的分区单元的框图;
图3C为根据本发明一个实施例的,图3A中SPM的一部分的框图;以及
图4为根据本发明一个实施例的,可由图2中一个或多个PPU经配置实现的图形处理管线的示意图;
图5为根据本发明一个实施例的,包括陷阱处理器控制器的SPM架构的框图;
图6为根据本发明一个实施例的,用于由陷阱处理器控制器处理异常或中断的方法步骤的流程图;
图7为根据本发明一个实施例的,陷阱处理器代码段的流程图。
具体实施方式
在下面的描述中,将阐述大量的详细内容以提供对本发明更深入的理解。然而,本技术领域的技术人员应该清楚,本发明可以在没有一个或多个这些具体细节的情况下得以实施。在其他例子中,没有描述公知的特征以避免对本发明造成混淆。
系统概述
图1为示出了经配置以实现本发明的一个或多个方面的计算机系统100的框图。计算机系统100包括中央处理单元(CPU)102和通过可包括存储器桥105的互连路径通信的系统存储器104。存储器桥105可以是诸如北桥芯片,通过总线或其他通信路径106(诸如超传输(HyperTransport)链路)连接到I/O(输入/输出)桥107。I/O桥107,其可以是诸如南桥芯片,从一个或多个用户输入设备108(诸如键盘、鼠标)接收用户输入并且通过路径106和存储器桥105将所述输入转发到CPU 102。并行处理子系统112通过总线或其他通信路径113(诸如PCI Express、加速图形端口或超传输链路)耦合到存储器桥105;在一个实施例中,并行处理子系 统112是将像素传递到显示设备110(诸如常见的基于CRT或LCD的监视器)的图形子系统。系统盘114也连接到I/O桥107。开关116提供I/O桥与诸如网络适配器118和各种外插卡(add-in card)120和121的其他组件之间的连接。其他组件(未明确示出),包括USB或其他端口连接、CD驱动器、DVD驱动器、胶片录制设备及类似组件,也可以连接到I/O桥107。使图1中各种组件互连的通信路径可以采用任何适合的协议来实现,诸如PCI(外部组件互连)、PCI-Express、AGP(加速图形端口)、超传输或任何其他总线或者点到点通信协议,以及不同设备间的连接可采用本技术领域已知的不同协议。
在一个实施例中,并行处理子系统112包含被优化用于图形和视频处理的电路,所述电路包括例如视频输出电路,并且构成图形处理单元(GPU)。在另一个实施例中,并行处理子系统112包含被优化用于通用处理的电路,同时保留底层的(underlying)计算架构,本文将详细描述。在另一个实施例中,可以将并行处理子系统112与一个或多个其他系统单元一起集成,例如存储器桥105、CPU 102以及I/O桥107,以形成片上系统(SoC)。
应该理解,本文所示系统是示例性的,变化和修改都是可能的。连接拓扑,包括桥的数量和布置、CPU 102的数量以及并行处理子系统112的数量,都可根据需要修改。例如,在一些实施例中,系统存储器104直接连接到CPU 102而不是通过桥,并且其他设备通过存储器桥105以及CPU102与系统存储器104通信。在其他替代拓扑中,并行处理子系统112连接到I/O桥107或直接连接到CPU 102,而不是连接到存储器桥105。在又一些实施例中,I/O桥107和存储器桥105可能被集成到单个芯片中。大量实施例可以包括两个或多个CPU 102以及两个或多个并行处理系统112。本文所示的特定部件是可选的,例如,可以支持任意数量的外插卡或外设。在一些实施例中,开关116被去掉,网络适配器118和外插卡120、121直接连接到I/O桥107。
图2示出了根据本发明的一个实施例的并行处理子系统112。如图所示,并行处理子系统112包括一个或多个并行处理单元(PPU)202,其每一个都耦合到本地并行处理(PP)存储器204。通常,并行处理子系统包括U个PPU,其中U≥1。(本文中,类似对象的多个实体被表示为标识该对象的参考数字和在需要时标识该实体的括号中的数字。)PPU 202和并行处理存储器204可使用一个或多个集成电路器件来实现,例如可编程处理 器、专用集成电路(ASIC)或存储器设备,或者以任何其他技术可行的方式来实现。
再参考图1,在一些实施例中,并行处理子系统112的一些或所有PPU202是具有渲染管线的图形处理器,它可以被配置为执行与以下各项相关的各种任务:从CPU 102和/或系统存储器104经由存储器桥105和总线113提供的图形数据生成像素数据;与本地并行处理存储器204(可被用作图形存储器,包括例如常用帧缓冲区(buffer))交互以存储和更新像素数据;传递像素数据到显示设备110;等等。在一些实施例中,并行处理子系统112可包括一个或多个作为图形处理器来操作的PPU 202以及一个或多个被用于通用计算的其他PPU 202。这些PPU可以是相同的或不同的,并且每个PPU均可具有其自己的专用并行处理存储设备或不具有专用的并行处理存储设备。一个或多个PPU 202可输出数据到显示设备110或每个PPU 202均可输出数据到一个或多个显示设备110。
在操作中,CPU 102是计算机系统100的主处理器,控制和协调其他系统组件的操作。具体地,CPU 102发出控制PPU 202的操作的命令。在一些实施例中,CPU 102为每个PPU 202写命令流到入栈缓冲区(pushbuffer)中(在图1或图2中未明确示出),所述入栈缓冲区可位于系统存储器104、并行处理存储器204、或CPU 102和PPU 202都可访问的其他存储位置中。PPU 202从入栈缓冲区读取该命令流,然后相对CPU102的操作异步地执行命令。
现在返回参考图2,每个PPU 202均包括I/O(输入/输出)单元205,其通过连接到存储器桥105(或,在一个替代实施例中,直接连接到CPU102)的通信路径113与计算机系统100的其余部分通信。PPU 202与计算机系统100的其余部分的连接也可以改变。在一些实施例中,并行处理子系统112可作为外插卡来实现,可被插入到计算机系统100的扩展插槽中。在其他实施例中,PPU 202可以和诸如存储器桥105或I/O桥107的总线桥一起集成在单个芯片上。在其他实施例中,PPU 202的一些或所有元件可以和CPU 102一起集成在单个芯片上。
在一个实施例中,通信路径113是PCI-Express链路,其中给每个PPU202均分配专用的信道,如本技术领域所已知的。也可使用其他的通信路径。I/O单元205生成用于在通信路径113传送的数据包(或其他信号),并且还从通信路径113接收所有到达的数据包(或其他信号),将到达的数据包引导到PPU 202的适当组件。例如,可将与处理任务有关的命令引导 到主机接口206,而可将与存储器操作有关的命令(例如,对并行处理存储器204进行读取或写入)引导到存储器交叉开关单元210。主机接口206读取每个入栈缓冲区,并且将该入栈缓冲区所指定的工作输出到前端212。
有利地,每个PPU 202都实现高度并行处理架构。如详细所示,PPU 202(0)包括处理集群阵列230,该阵列230包括C个通用处理集群(GPC)208,其中C≥1。每个GPC 208均能够并发执行大量的(例如,几百或几千)线程,其中每个线程都是一个程序的实例(instance)。在各种应用中,可以分配不同的GPC 208用于处理不同类型的程序或用于执行不同类型的计算。例如,在图形应用中,可分配第一组GPC 208来执行曲面细分(tessellation)操作并产生用于曲面片(patch)的基元(primitive)拓扑,并且可分配第二组GPC 208来执行曲面细分着色以评估用于基元拓扑的曲面片参数,并确定顶点位置和每顶点的其他属性。依赖于每种类型的程序或计算所产生的工作量,GPC 208的分配可以改变。
GPC 208通过工作分布单元200接收将被执行的处理任务,所述工作分布单元200从前端单元212接收定义处理任务的命令。处理任务包括将被处理的数据的索引,例如,表面(曲面元)数据、基元数据、顶点数据和/或像素数据,还包括定义如何处理数据的命令和状态参数(例如,什么程序将被执行)。工作分布单元200可以被配置为取得与这些任务相对应的索引,或者工作分布单元200可以从前端212接收这些索引。前端212确保在由入栈缓冲区所指定的处理启动前,将GPC 208配置为有效状态。
例如,当PPU 202被用于图形处理时,用于每个曲面元的处理工作量被分为几乎相同大小的任务,以使得曲面细分处理能够被分布给多个GPC208。工作分布单元200可被配置为以能够为多个GPC 208提供任务的频率产生任务用于处理。相反,在常规系统中,一般是由单个处理引擎来执行处理,而其他处理引擎则保持空闲,等待该单个处理引擎完成其任务之后才开始他们的处理任务。在本发明的一些实施例中,各部分GPC 208经配置以执行不同类型的处理。例如第一部分可被配置为执行顶点着色和拓扑生成,第二部分可被配置为执行曲面细分和几何着色,以及第三部分可被配置为执行屏幕空间中的像素着色以产生经渲染的图像。由GPC 208产生的中间数据可以被存储在缓冲区中,以允许该中间数据在GPC 208之间传送用于进一步处理。
存储器接口214包括D个分区单元215,其每个分区单元215均耦合到并行处理存储器204的一部分,其中D≥1。如图所示,分区215的数量 通常等于DRAM 220的数量。在其他实施例中,分区215的数量可与存储器设备的数量不同。本技术领域的技术人员应该理解,DRAM 220可以由其他合适的存储设备所代替,并且可以是一般常规设计。因此在此省略详细的描述。渲染目标,例如帧缓冲区或纹理映射可以跨DRAM 220得到存储,允许分区单元215并行地写入每个渲染目标的一部分,从而有效地使用并行处理存储器204的可用带宽。
任意一个GPC 208都可以处理将被写入到并行处理存储器204内任意DRAM 220的数据。交叉开关单元210被配置为将每个GPC 208的输出路由到任意分区单元215的输入或路由到另一个GPC 208用于进一步处理。GPC 208通过交叉开关单元210与存储接口214通信,以对各种外部存储器设备进行读取或写入。在一个实施例中,交叉开关单元210具有到存储器接口214的连接以和I/O单元205通信,以及具有到本地并行处理存储器204的连接,从而使得在不同GPC 208中的处理内核能够与系统存储器104或对于PPU 202来讲非本地的其他存储器通信。在图2所示的实施例中,交叉开关单元210可直接与I/O单元205连接。交叉开关单元210可使用虚拟信道来分开GPC 208与分区单元215之间的业务流。
另外,GPC 208可被编程以执行与种类繁多的应用相关的处理任务,包括但不限于线性和非线性数据变换、视频和/或音频数据的过滤、建模操作(例如,应用物理定律以确定对象的位置、速率和其他属性)、图像渲染操作(例如,曲面细分着色、顶点着色、几何着色和/或像素着色程序)等等。PPU 202可将数据从系统存储器104和/或本地并行处理存储器204传输到内部(片上)存储器,处理所述数据,并且将结果数据写回到系统存储器104和/或本地并行存储存储器204,其中这样的数据可以由其他系统组件访问,所述其他系统组件包括CPU 102或另一个并行处理子系统112。
PPU 202可以设置有任意容量(amount)的本地并行处理存储器204,包括没有本地存储器,并且可以以任意组合方式来使用本地存储器和系统存储器。例如,在统一存储器架构(UMA)实施例中,PPU 202可以是图形处理器。在这样的实施例中,将不提供或几乎不提供专用的图形(并行处理)存储器,并且PPU 202会以排他或几乎排他的方式使用系统存储器。在UMA实施例中,PPU 202可被集成到桥式芯片中或处理器芯片中,或作为具有高速链路(例如,PCI-EXPRESS)的分立芯片被提供,所述高速链路通过桥式芯片或其他通信方式将PPU 202连接到系统存储器。
如上所述,并行处理子系统112中可以包括任意数量的PPU 202。例 如,可在单个外插卡上提供多个PPU 202,或可将多个外插卡连接到通信路径113,或可将一个或多个PPU 202集成到桥式芯片中。多PPU系统中的PPU 202可以彼此相同或不同。例如,不同的PPU 202可能具有不同数量的处理内核、不同容量的本地并行处理存储器等等。在出现多个PPU 202的情况下,可并行操作这些PPU以高于单个PPU 202所可能达到的吞吐量来处理数据。包括一个或多个PPU 202的系统可以以各种配置和形式因素来实现,包括台式电脑、笔记本电脑或手持式个人计算机、服务器、工作站、游戏控制台、嵌入式系统等类似设备。
处理集群阵列概述
图3A为根据本发明一个实施例的,图2的一个PPU 202中的GPC208的框图。每个GPC 208可被配置为以并行方式执行大量的线程,其中术语“线程”是指针对一组特定输入数据执行的特定程序的实例(instance)。在一些实施例中,使用单指令多数据(SIMD)指令发送技术来支持大量线程的并行处理,而无需提供多个独立的指令单元。在其他实施例中,使用单指令多线程(SIMT)技术,采用经配置以向每一个GPU 208内的一组处理引擎发送指令的共同指令单元,来支持大量通常同步化的线程的并行执行。与所有执行引擎一般执行相同指令的SIMD执行机制不同,SIMT执行通过给定的线程程序,允许不同线程更容易地跟随(follow)分散的执行路径。本技术领域的技术人员应该理解,SIMD处理机制代表SIMT处理机制的一个功能子集。
通过管线管理器305可以有利地控制GPC 208的操作,所述管线管理器305分布处理任务给流多处理器(SPM)310。管线管理器305也可以被配置为通过为SPM 310输出的经处理数据指定目的地来控制工作分布交叉开关330。
在一个实施例中,每个GPC208包括M个SPM 310,其中M≥1,每个SPM 310经配置以处理一个或多个线程组。另外,每个SPM 310有利地包括可被管线化的相同的一组功能执行单元(例如,算术逻辑单元和加载-存储单元,如图3C中的Exec单元302和LSU 303所示),允许在前一个指令完成之前发送新的指令,如本领域所已知的。可以提供功能单元的任意组合在一个实施例中,功能单元支持各种操作,包括整数和浮点运算(例如,加法和乘法)、比较操作、布尔操作(AND、OR、XOR)、位移(bit-shifting)以及各种代数函数计算(例如,平面插值、三角、指数、对数函数等);并且同一个功能单元硬件可被平衡以执行不同的操作。
被发送到特定GPC 208的一系列指令构成了一个线程,如本文前面所定义,并且跨SPM 310中并行处理引擎(未示出)的一定数量的并发执行的线程的集合在本文中被称作“卷绕包(warp)”或“线程组”。如本文所使用,“线程组”是指针对不同输入数据并发执行相同程序的一组线程,其中所述组的每个线程都被指定给SPM 310中不同的处理引擎。线程组可以包括少于SPM 310中的处理引擎数量的线程,在这种情况下,在线程组正在被执行的周期期间,一些处理引擎将处于空闲。线程组也可以包括多于SPM 310中的处理引擎数量的线程,在这种情况下,处理将在连续的时钟周期上进行。因为每个SPM 310都能并发地支持高达G个线程组,由此在任意给定的时间,GPC 208中都可以执行高达G×M个线程组。
此外,在SPM 310中同一时间可以激活多个相关的线程组(在不同的执行阶段)。这一线程组的集合在本文中被称作“协作线程阵列”(“CTA”)或“线程阵列”。一个特定CTA的大小等于m×k,其中k是线程组中并发执行的线程的数量,并且一般是SPM 310中并行处理引擎数量的整数倍,m是在SPM 310中同时激活的线程组的数量。通常由编程人员以及CTA可用的诸如存储器或寄存器的硬件资源的容量,来确定CTA的大小。
每个SPM 310都包括L1高速缓存(未示出)或者使用SPM 310之外的相应L1高速缓存中的空间,用于执行加载和存储操作。每个SPM 310也都有权访问分区单元215中的L2高速缓存,所述L2高速缓存在所有GPC 208中间共享并且可以被用于在线程之间传输数据。最后,SPM 310也有权访问片外“全局”存储器,其可包括例如并行处理存储器204和/或系统存储器104。应该理解,在PPU 202外的任意存储器都可用作全局存储器。此外,L1.5高速缓存335可被包括在GPC 208中,经配置以接收和保持由SPM 310所请求的数据,该数据经过存储器接口214从存储器取得,包括指令、一致性(uniform)数据以及常数数据,并将所请求的数据提供给SPM 310。在GPC 208中具有多个SPM 310的实施例有益地共享被高速缓存在L1.5高速缓存335中的共同指令和数据。
每个GPC208均可包括经配置以将虚拟地址映射到物理地址的存储器管理单元(MMU)328。在其他实施例中,MMU 328可驻留在存储器接口214中。MMU 328包括用于将虚拟地址映射到像素块(tile)的物理地址的一组页表条目(PTE),以及可选地包括高速缓存线索引(cache line index)。MMU 328可包括地址转译后备缓冲区(TLB)或可驻留在多处理器SPM310或L1高速缓存或GPC 208中的高速缓存。处理所述物理地址以分布接 口数据访问位置,从而允许在分区单元间有效的请求交错(interleave)。高速缓存线索引可用于确定对高速缓存线的请求是否命中或未命中。
在图形和计算应用中,GPC 208可被配置为使得使每个SPM 310均耦合到纹理单元315,用于执行纹理映射操作,例如确定纹理采样位置、读取纹理数据以及过滤纹理数据。从内部纹理L1高速缓存(未示出)或者在一些实施例中从SPM 310中的L1高速缓存读取纹理数据,以及当需要的时候从L2高速缓存、并行处理存储器204或系统存储器104取得纹理数据。为了提供处理后的任务给另一个GPC 208用于进一步的处理,或者为了将处理后的数据通过交叉开关单元210存储在在L2高速缓存、并行处理存储器204或系统存储器104中,每个SPM 310都输出处理后的任务给工作分布交叉开关330。preROP(pre-raster operations,预光栅操作)325被配置为从SPM 310接收数据,将数据引导至分区单元215中的ROP单元,并执行用于色彩混合的优化、组织像素色彩数据以及执行地址转译。
应该理解,本文所描述的内核架构是示例性的,变化和修改都是可能的。GPC 208中可以包括任意数量的处理单元,诸如SPM 310或纹理单元315、preROP 325。进一步,虽然只示出一个GPC 208,但PPU 202可以包括任意数量的GPC 208,所述GPC 208最好在功能上彼此相似,从而执行行为不依赖于哪个GPC 208接收到特定处理任务。进一步地,每个GPC 208最好使用单独的、各异的处理单元、L1高速缓存等,独立于其他GPC 208操作。
图3B为根据本发明一个实施例的,图2的一个PPU 202中的分区单元215的框图;如图所示,分区单元215包括L2高速缓存350、帧缓冲区(FB)DRAM接口355以及光栅操作单元(ROP)360。L2高速缓存350是读/写高速缓存,其被配置为对从交叉开关单元210及ROP 360接收的操作执行加载和存储。由L2高速缓存350输出读取失败和紧急回写请求到FB DRAM接口355用于处理。脏更新也被发送到FB 355用于伺机处理。FB 355直接与DRAM 220接口,输出读和写请求,并接收从DRAM 220读取的数据。
在图形应用中,ROP 360是执行光栅操作的处理单元,例如模板(stencil)、z测试、混合以及类似操作,并输出像素数据作为处理后的图形数据用于在图形存储器中存储。在本发明的一些实施例中,将ROP 360包括在每个GPC 208中而不是分区单元215中,并且通过交叉开关单元210传送像素读写请求而非像素片段数据。
处理后的图形数据可以在显示设备110上显示,或者被路由用于由CPU 102或由并行处理子系统112中的一个处理实体来进一步处理。为了分布光栅操作的处理,每个分区单元215都包括ROP 360。在一些实施例中,ROP 360可被配置为压缩写入存储器的z数据或色彩数据,以及解压缩从存储器中读取的z数据或色彩数据。
本技术领域的技术人员应该理解,图1、2、3A和3B中描述的架构不以任何方式来限制本发明的范围,以及在此教导的技术可以在任意经合适配置的处理单元上实现,包括但不限于一个或多个CPU、一个或多个多内核CPU、一个或多个PPU 202、一个或多个GPC 208、一个或多个图形或专用处理单元或类似设备,均不超出本发明的范围。
在本发明的实施例中,希望使用PPU 202或计算系统的其他处理器,采用线程阵列来执行通用计算。给线程阵列中的每个线程都分配唯一的线程标识符(“thread ID”),所述线程标识符在该线程执行期间可由该线程访问。线程ID可被定义为一维或多维数值,其控制线程处理行为的各个方面。例如,线程ID可用于确定线程处理哪部分输入数据集,和/或确定线程产生或写入哪部分输出数据集。
每线程的指令序列可包括至少一个指令,所述指令定义了代表线程与线程阵列中一个或多个其他线程之间的协作行为。例如,每线程的指令序列可包括以下指令:在序列中的特定点将对于代表线程的操作执行挂起直到一个或多个其他线程到达该特定点时的指令;指示代表线程在一个或多个其他线程有权访问的共享存储器中存储数据的指令;指示代表线程自动地读取和更新存储在一个或多个其他线程基于其线程ID有权访问的共享存储器中的数据的指令;等等。CTA程序也可包括计算从其中读取数据的共享存储器中的地址的指令,该地址为线程ID的函数。通过定义合适的函数并提供同步技术,数据可以以可预测的方式由CTA的一个线程写入共享存储器中给定的位置,并且由同一个CTA的不同线程从该位置读取。因此,可以支持数据以任意希望的方式共享在线程中,并且CTA中的任意线程都可以和同一个CTA中的任意其他线程共享数据。如果在CTA的线程中间共享有数据,则数据共享的程度由CTA程序确定;因此,应该理解在使用CTA的特定应用中,CTA的线程实际上可能相互共享数据或者可能不共享数据,这取决于该CTA程序,并且术语“CTA”和“线程阵列”在本文中同义使用。
图3C为根据本发明一个实施例的,图3A中SPM 310的框图。SPM 310包括指令L1高速缓存370,其经配置以通过L1.5高速缓存335接收指令和常数。warp调度器和指令单元312从指令L1高速缓存370接收指令和常数,并根据该指令和常数控制本地寄存器堆304和SPM 310功能单元。SPM 310的功能单元包括N个exec(执行或处理)单元302和P个加载-存储单元(LSU)303。
SPM 310提供具有不同访问级别的片上(内部)数据存储。专用寄存器(未示出)对于LSU 303读取可读但不可写,并被用于存储定义每个CTA线程“位置”的参数。在一个实施例中,专用寄存器包括存储线程ID的每个CTA线程(或SPM 310中每exec单元302)一个的寄存器;每个线程ID寄存器仅可以由各自的一个exec单元302访问。专用寄存器也可包括可由所有CTA线程(或所有LSU 303)读取的附加寄存器,其存储CTA标识符、CTA维度、CTA所属栅格(grid)的维度以及CTA所属栅格的标识符。在初始化期间响应于通过前端212从设备驱动器103所接收的命令对专用寄存器进行写入,并且在CTA执行期间专用寄存器不改变。
参数存储器(未示出)对于任意CTA线程(或任意LSU 303)可读但不可写,其存储执行时间参数(常数)。在一个实施例中,设备驱动器103在引导SPM 310开始执行采用这些参数的CTA之前,提供参数给所述参数存储器。任意CTA(或SPM 310中的任意exec单元302)中的任意CTA线程可通过存储器接口214访问全局存储器。全局存储器的一部分可存储在L1高速缓存320中。
本地寄存器堆304可由每个CTA用作临时空间(scratch space);每一个寄存器被分配给一个线程专用,并且在任意一个本地寄存器堆304中的数据仅可由其被分配到的CTA线程所访问。本地寄存器堆304可作为被物理地或逻辑地分为P个通道的寄存器堆实现,每个通道具有一定数量的条目(其中每个条目可能存储诸如32位字长)。为N个exec单元302以及P个加载-存储单元LSU 303的每一个都分配一个通道,并且不同通道中的相应条目可填充用于执行同一个程序的不同线程的数据,以有助于SIMD执行。通道的不同部分可被分配给G个并发线程组中的不同线程组,从而使本地寄存器堆304中给定的条目仅可由特定线程访问。在一个实施例中,本地将寄存器堆304中的某些条目被保留用于存储线程标识符,实现一个专用寄存器。
共享存储器306可由(在单个CTA中的)所有CTA线程访问;共享存储器306的任意位置都可由统一CTA(或SPM 310中的任意处理引擎) 中的任意CTA线程访问。共享存储器306可作为共享寄存器堆或共享片上高速缓存存储器实现,该共享片上高速缓存存储器具有允许任意处理引擎对共享存储器中任意位置进行读或写的互连。在其他实施例中,共享状态空间可映射到片外存储器的每CAT上,并且被高速缓存在L1高速缓存320中。参数存储器可作为同一个共享寄存器堆或实现共享存储器306的共享高速缓存存储器中的指定部分实现,或作为单独的共享寄存器堆或LSU303对其具有只读访问权限的片上高速缓存存储器实现。在一个实施例中,实现参数存储器的区域也被用于存储CTA ID和栅格ID以及存储CTA和栅格的尺寸,实现专用寄存器的一部分。SPM 310中的每个LSU 303均可耦合到统一地址映射单元352,其将为在统一存储器空间中指定的加载和存储指令所提供的地址转换为在每个各异的存储器空间中的地址。因此,通过在统一存储器空间中指定地址,指令可用于访问任意本地、共享或全局存储器空间。
每个SPM 310中的L1高速缓存320可被用于高速缓存私有的每线程本地数据和每应用程序的全局数据。在一些实施例中,可以在L1高速缓存320中高速缓存该CTA的共享数据。通过存储器和高速缓存的互连380,LSU 303耦合到一致性L1高速缓存375、共享存储器306和L1高速缓存320。所述一致性L1高速缓存375经配置以通过L1.5高速缓存335从存储器接收只读数据和常数。
图4为根据本发明一个实施例的,由图2中一个或多个PPU 202经配置以实现的图形处理管线400的示意图。例如,一个SPM 310可经配置以执行顶点处理单元415、几何处理单元425以及片段处理单元460中一个或多个的功能。数据汇编器410、基元汇编器420、光栅化器455以及光栅操作单元465的功能也可以由GPC 208和相应的分区单元215中的其他处理引擎执行。作为替代地,图形处理管线400可采用用于一个或多个功能的专用处理单元来实现。
数据汇编器410处理单元为高位表面、基元等采集顶点数据,并输出包括顶点属性的顶点数据到顶点处理单元415。顶点处理单元415是经配置以执行顶点着色程序的可编程执行单元,根据顶点着色程序指定,照亮(lighting)和变换顶点数据。例如,顶点处理单元415可被编程以将顶点数据从基于对象的坐标表示(对象空间)变换到替代的诸如世界空间或标准化设备坐标(NDC)空间的基础坐标系统。顶点处理单元415可读取由数据汇编器410存储在L1高速缓存320、并行处理存储器204或系统存储 器104中的数据,用于在处理顶点数据中使用。
基元汇编器420从顶点处理单元415接收顶点属性,按需读取所存储的顶点属性,并且构件用于由几何处理单元425处理的图形基元。图形基元包括三角形、线段、点等。几何处理单元425是经配置以执行几何着色程序的可编程处理单元,根据几何着色程序的指定变换从基元汇编器420接收的图形基元。例如,几何处理单元425可被编程为将图形基元再分为一个或多个新的图形基元,并计算用于光栅化所述新的图形基元的参数,例如平面方程系数。
在一些实施例中,几何处理单元425也可增加或删除几何流中的元素。几何处理单元425输出指定新的图形基元的参数和顶点到视图缩放、剔除(cull)和裁剪(clip)单元450。几何处理单元425可读取存储在并行处理存储器204或系统存储器104中的数据,用于在处理所述几何数据中使用。视图缩放、剔除(cull)和裁剪单元450执行剪裁、剔除以及视图缩放,并输出处理后的图形基元到光栅化器455。
光栅化器455扫描转换所述新的图形基元,并输出片段和覆盖数据到片段处理单元460。此外,光栅化器455可经配置以执行z剔除和其他基于z的优化。
片段处理单元460是经配置以执行片段着色程序的可编程执行单元,其根据片段着色程序的指定,变换从光栅化器455接收的片段。例如,片段处理单元460可被编程为执行诸如透视校正、纹理映射、着色、混合等操作,以产生输出到光栅操作单元465的着色片段。片段处理单元460可读取存储在并行处理存储器204或系统存储器104中的数据,用于在处理所述片段数据中使用。依赖于所编程的采样率,可以以像素、采样或其他粒度对片段进行着色。
光栅操作单元465是执行诸如模板、z测试、混合等操作的处理单元,并输出像素数据作为处理后的图形数据,用于存储在图形存储器中。处理后的图形数据可被存储在诸如并行处理存储器204和/或系统存储器104的图形存储器中,用于在显示设备110上显示或由CPU 102或并行处理子系统112进一步处理。在本发明的一些实施例中,光栅操作单元465经配置以压缩被写入存储器中的z数据或色彩数据,以及解压缩从存储器中读出的z数据或色彩数据。
陷阱处理器架构
图5为根据本发明一个实施例的,包括陷阱处理器控制器的SPM架 构的框图。本技术领域的技术人员应该理解,图5中仅描述了通常与实现陷阱处理器功能相关的组件,图5是SPM架构的简化框图,并不是SPM架构的所有逻辑组件都必须在此加以描述(例如,预取指令缓冲区、高速缓存、共享存储器等)。例如,应该理解,图5可以被认为是图3C的简化版或替代实施例,与图3C的实施例相比包括较少的细节,以及图5和图3C中的各种组件可以被相容地结合或组合在实际的SPM架构中。
如图5的实施例中所描述,图3A的SPM 310的SPM控制器500包括,当在特定时间点为特定线程组执行计算机程序指令时,用于SPM 310的取得-解码-执行(fetch-decode-execute)周期的集成电路逻辑。SPM控制器500也包括陷阱处理器控制器505,其包括集成电路逻辑以处理在计算机程序流期间发生的中断和异常。SPM控制器500与线程组调度器510通信,以确定在特定时间点分配SPM 310的计算资源给若干线程组中的哪个线程组(例如,根据由线程组调度器510设置的一些优先级,SPM控制器500将SPM 310的计算资源在各种其支持的线程组中进行时间切分)。当线程组调度器510确定特定线程组有权访问SPM 310资源时,将由程序计数器513指出的计算机程序指令512从存储器520(例如,在某些实施例中的并行处理存储器204等)的代码段515(即,用于正在被该线程组执行的特定计算机程序)中取得,并且放入SPM 310的指令缓冲区525中,用于解码和执行(并且随后程序计数器513递增)。如前所述,特定线程组中的每个线程都同时执行指令缓冲区525中的指令,每个线程都利用寄存器堆530中可用的任何所必要的寄存器,以及每个线程都分配有并行执行资源单元535的一个ALU/FPU(算术逻辑单元/浮点单元)计算单元540(x),以执行与该指令相关联的必要的计算。例如,如图5的实施例所述,SPM 310可支持线程组中多达32个不同的同时执行的线程,这是由于并行执行资源单元535包括32个单独的计算单元540(x)。正如本技术领域的技术人员所应当了解的,为了在计算机程序执行期间存储状态信息(例如,本地变量、临时的信息,等等),存储器520的线程组程序堆栈545被分配给正由该线程组执行的计算机程序,并且在该计算机程序执行流程期间按需要相应扩大或缩小。
寄存器堆530进一步包括根据异常或中断的发生,由陷阱处理器控制器505所使用的专用寄存器。寄存器堆530包括错误状态寄存器(ESR)550,该错误状态寄存器550由陷阱处理器控制器505使用以指示所发生的异常或中断的类型。在某些实施例中,ESR 550是SPM 310的唯一的ESR 寄存器,并且在所有线程组(如下面进一步描述)中共享。线程组ID寄存器560由陷阱器处理器505使用,以存储导致该中断或者异常的线程组的识别号或者与该中断或异常相关联的其他方面。以及,陷阱处理器地址寄存器565包括陷阱处理器代码段570在存储器520中的存储器地址。陷阱处理器代码段570进一步被分为代码子段,每个子段均包括指令以处理不同类型的异常或中断。例如,如所述,陷阱处理器代码段包括代码子段572,以支持对GPU中的某些系统调用(例如malloc(),分配附加的GPU存储器用于在SPM 310中运行的计算机程序)进行处理;包括代码子段574以处理主机CPU中断,例如,用于调试目的;以及包括代码子段576以处理计算机程序流程执行期间的处理器异常(例如,错误的存储器地址,等等)。应该理解,根据本文的教导,陷阱处理器代码段570中可以包括任意数量的附加的或可替换的代码子段,以处理各种异常或中断场景。这种附加的异常或中断场景可包括,例如,处理SPM内异常、GPU负载的环境切换、纠错代码(ECC)错误处理以及超时条件。
图6为根据本发明一个实施例的,用于由陷阱处理器控制器处理异常或中断的方法步骤流程图。虽然结合图1到5来描述所述方法步骤,但本技术领域技术人员应该理解,被配置以任意顺序执行所述方法步骤的任意系统都包括在本发明的范围内。
为了最小化每个SPM的线程组的设计复杂度和验证工作,SPM遵循图6的流程来处理异常或中断,其强制执行以下特性:其所有线程组或者都在他们各自的代码段515内执行或者都在陷阱处理器代码段570中执行。在步骤600中,向陷阱处理器控制器505通知当前正在执行的线程组的特定线程遇到异常(或中断发生,根据具体情况),例如,由于在一个ALU/FPU计算单元540(x)中进行计算期间访问错误的存储器地址。在步骤605,根据正被通知的异常,陷阱处理器控制器505停止对SPM 310的所有线程组取得指令,以及在步骤610,等待每个线程组中所有的当前管线化的指令流出或者以其他方式完成。在步骤615,陷阱处理器控制器505将与每个线程组的程序执行状态相关的某些状态信息(例如,当前程序计数器513的值、代码段515的地址或其他状态寄存器等)推入每个线程组各自的程序堆栈545,以保持(preserve)该线程组的执行状态。在步骤620,陷阱处理器控制器505设置或者不然的话确保ESR550被正确更新以反映异常的原因,并且在步骤625,设置或者不然的话确保生成该异常的线程组的标识号在线程组ID寄存器560中被正确地反映。在步骤630,对于每个线 程组,陷阱处理器控制器505使得器计数器513来包括在陷阱处理器地址565中发现的地址,从而使每个线程组随后在步骤635中进入陷阱处理器代码段570。
在步骤650,当每个线程组进入陷阱代码处理器代码段570时,其首先遇到读取ESR寄存器的指令。当处理该ESR读取指令时,在步骤655中,陷阱处理器控制器505确定执行该ESR读取指令的当前线程组的线程组ID是否与在步骤625中被设置在线程组ID寄存器560中的线程ID相同。如果线程组不同,在步骤660,陷阱处理器控制器505返回空(null)或清空ESR值,以指示当前线程组没有遇到异常或者中断,并且因此可以退出或者不然的话从陷阱处理器代码段570(在图7中进一步描述)转回。如果该线程组匹配,那么在步骤665,陷阱处理器控制器返回在步骤620中存储在ESR寄存器550中的ESR值。
如在图6中进一步所描述,在陷阱处理器代码段570的执行期间,取决于发生的异常或中断的类型,每个线程组可能遇到如步骤670和680中分别所示的PAUSE(暂停)指令或RETURN(返回)指令(或者其等价指令)。例如,某些类型的异常或中断可能基本上需要与主机CPU通信来处理。例如,作为用户对程序执行流程进行附加调试(例如,在调试会话中使用“cntrl-c”命令以停止(halt)和检查程序执行状态)的结果,为了处理主机CPU中断,主机CPU可向导致相应的线程组到达陷阱处理器代码段570的子段代码574中发送中断。该子段代码可包括指令来获取和存储与该线程组相关联的某些状态信息(例如,用于调试目的),并且包括PAUSE指令,其通过发回中断给主机CPU来通知该CPU准备使用状态信息,从而产生对主机CPU的返回控制,如步骤675。在步骤675,一旦该中断提交到主机CPU,则在步骤685陷阱处理器控制器停止该线程组的执行。执行PAUSE的线程组保持停止状态,直到该主机CPU明确地命令其重新开始执行。
作为替代地,陷阱处理器代码段570执行的子段代码可包括不需要借助于与主机CPU的通信而使SPM 310能够处理异常或中断的指令。在这种情况下,基本上该子段代码将包括RETURN指令(在用于处理异常或中断的任意其他指令之后),该指令同样导致在步骤685,陷阱处理器控制器505停止线程组的执行。一旦在步骤690中确定SPM 310的所有线程组已经执行RETURN或PAUSE指令,那么在步骤695,陷阱处理器控制器505允许执行RETURN的线程组返回其各自的代码段515。
图7为根据本发明一个实施例的,陷阱处理器代码段的流程图。虽然结合图1至5来描述陷阱处理器代码段的流程,本技术领域的技术人员应该理解,被配置以任何顺序执行这些步骤的任何系统都包括在本发明的范围内。应该理解,图7是对图6中步骤640的更详细的描述。
如之前围绕图6中所讨论的,在步骤700,每个运行陷阱处理器代码段570的线程组都首先读取它的ESR寄存器。在一个实施例中,陷阱处理器控制器505表现为每个线程组都具有它自己的专用ESR寄存器,虽然线程组可能正使用单一的ESR寄存器550,并且使用在图6的步骤655-665中所描述的逻辑来实现这一表象。在步骤705,如果读取指令的返回值为空或清空(指示当前线程组没有经历实际的异常或中断),那么在步骤710,陷阱处理器代码段570可包括将线程组返回其代码段515的RETURN指令。然而,如果ESR读指令返回了值,那么在步骤715,基于该返回的值确定异常或中断的类型,并且在步骤720,指令流分支转移或跳转到陷阱处理器代码段570的适当的子段代码。如步骤725所述,子段代码可包括各种指令以处理异常或中断,例如,将数据保存到CPU可访问的存储器、从存储器恢复数据、执行PAUSE以及向主机CPU提交中断、处理和清空任何错误条件和/或返回到程序代码段(例如,RETURN指令)。
虽然上面的描述针对的是本发明的实施例,但由此可设计不脱离基本范围的本发明的其他实施例。例如,如本文所描述的GPU的某些实施例提供这样一种能力,避免正在执行同一个程序块的SPM并发执行线程组之间的死锁(deadlock)。例如,这种同时执行的线程组可以彼此阻止对共享存储器中的同一个全局变量进行操作,或者反过来由于无序执行导致对这种全局变量造成数据损坏。同样,将指令(称作屏障(barrier)或syncthreads())暴露给开发者,使他们能将代码划分为段,以跨这些同步执行的线程组来对共享存储器操作强制进行顺序约束。这种屏障确保在同步屏障之后的任意共享存储器参量之前,完成所有先于同步屏障指令发生的共享存储器参量。在线程组中遇到同步屏障指令的SPM将停止为该线程组取得指令,并且在继续所有线程组的执行之前,等待所有其他相关的线程组到达它们相应的同步屏障指令。然而,如果SPM的一个(可能不相关的)线程组遇到异常,则正在等待同步屏障指令的线程组们为了继续其执行流程(即,乃至陷阱处理器代码段)可能无法完成同步屏障指令,这是因为由于所遇到的异常,使其他已经在等待的线程组在到达步骤605之前可能无法到达他们相应的同步屏障指令。同样,为了避免上述情况(即,某些线程被无期 限地停止在同步屏障指令,并且不能够进入陷阱处理器代码段),对于图6的流程来说一个替代实施例是在步骤610之后首先识别线程是否正在等待同步屏障指令,并且在步骤615之前展开(unwind)或者反之回滚(roll back)该同步屏障指令,从而,这一线程组将能够在步骤635中自由进入陷阱处理器代码段(即,它将不再等待该同步屏障指令,而是将会完成之前的指令,从而能够移动到陷阱处理器代码段)。
可选实施例可包括附加特征。例如,一个可选的实施例可以使中断的发生能够广播给GPU上的所有其他SM,从而其他SPM如果需要的话能够可选地设置陷阱。跨SM或跨GPU对所有线程组设置陷阱通常是有用的,这是因为在GPU类型的并行计算中线程组一般都紧密耦合。另一个可选实施例除了每个SPM的ESR 550之外,可使用向GPU中所有SM进行中断通知的附加的全局ESR。某些中断,例如外部主机CPU中断,为了触发对GPU中所有SM进行通知,可被分类为全局中断并由此使用全局ESR。在这样的实施例中,在陷阱处理器代码段如图7的步骤710所示使线程组能够返回到该线程组的代码段之前,两类ESR都需要返回空或清空值。如本文所述的陷阱处理器架构的其他实施例可包括附加特征,例如,当在陷阱处理器中执行时使某些异常失效的能力,支持有效的和任意的代码插入的向量表,陷阱处理器和向量表的动态绑定,以及调试器“单步”模式的硬件实现。例如,当使能调试器单步模式时,在对所有符合条件的线程组设置陷阱之前,SPM从每个符合条件的线程组中取得和执行单个指令。由于该调试器软件不需要在每个步骤重复地插入并且随后替换断点(breakpoint)指令,因此这种实现方式产生更有效的单步实现。其他可选的实施例可在执行于陷阱处理器中时,使超范围(out-of-range)寄存器异常无效,因此允许不同的并发运行进程分配不同数量的本地每线程寄存器,但共享相同的陷阱处理器。在陷阱处理器中使超范围寄存器异常无效,允许该陷阱处理器读取所有架构上可访问的寄存器,而无需识别所分配的寄存器的真实数量。另一个可选实施例可包括由特定分支指令所针对的矢量表。通过外部可见的存储器映射寄存器来动态绑定矢量表基址(base address),所述外部可见的存储器映射寄存器允许在进程已经开始执行后构建任意矢量表。矢量表和分支转移指令使得能够有效插入任意指令序列,例如,用于陷阱条件的求值(例如,条件断点)。分支转移指令充当对跟随该分支转移指令的指令的函数调用,随后的函数返回指令返回进程的控制流程。和分支指令矢量表一样,还可以通过存储器映射寄存器来动态绑定 陷阱处理器自身的存储器地址,使调试器能够动态附加到在GPU上运行的进程中。此外,应该理解,在某些实施例中陷阱处理器代码段的内容是可编程的,并且可被动态地更新,例如,通过固件升级和类似方法。
本发明的一个实施例可以实现为与计算机系统一起使用的程序产品。程序产品的程序对实施例的功能(包括在此描述的方法)进行定义,并且能够被包含在各种各样的计算机可读存储介质内。示例性的计算机可读存储介质包括但不限于:(i)信息在其上永久保存的非可写存储介质(例如,计算机内的只读存储装置,如可被CD-ROM驱动器读出的CD-ROM盘、闪存、ROM芯片或者任意类型的固态非易失性半导体存储器);以及(ii)其上存储有可改变的信息的可写存储介质(例如,软盘驱动器内的软盘或硬盘驱动器或任意类型的固态随机存取半导体存储器)。
以上参考具体实施例对本发明进行描述。然而,本技术领域的技术人员应该理解,在不脱离如所附权利要求所述的本发明的较宽范围和精神的情况下可对其进行各种修改和变化。相应地,前面的描述和附图是示例性的,而不具有限制意义。

Claims (9)

1.一种用于处理干扰事件的方法,所述干扰事件在并行处理子系统的多处理器内的第一线程组执行期间发生,所述并行处理子系统驻留在计算机系统内,所述方法包括:
接收所述干扰事件的通知;
识别在同步屏蔽指令处正在等待至少一个其他线程组的第二线程组;
由所述第二线程组展开所述同步屏蔽指令的执行,使得所述第二线程组不再在同步屏蔽指令处等待所述至少一个其他线程组,以使所述第二线程组便于进入陷阱处理器代码段;停止执行在所述多处理器内的所有线程组的执行;
设置错误状态寄存器以指示所述干扰事件的类型;以及,
为每个线程组设置程序计数器,以指出所述陷阱处理器代码段的存储器地址,所述陷阱处理器代码段包括配置所述多处理器来处理所述干扰事件的软件例程。
2.根据权利要求1所述的方法,进一步包括以下步骤:
确定所述第一线程组正执行在所述陷阱处理器代码段中;
响应于所述陷阱处理器代码段中的读取所述错误状态寄存器的指令,提供所述错误状态寄存器中的值;以及
执行所述陷阱处理器代码段的子段中的指令来处理所述干扰事件。
3.一种图形处理单元,经配置以处理干扰事件,所述干扰事件在所述图形处理单元的多处理器内的第一线程组执行期间发生,所述图形处理单元包括:
陷阱处理器控制器,经配置以执行以下步骤:接收所述干扰事件的通知;识别在同步屏蔽指令处正在等待至少一个其他线程组的第二线程组;由所述第二线程组展开所述同步屏蔽指令的执行,使得所述第二线程组不再在同步屏蔽指令处等待所述至少一个其他线程组,以使所述第二线程组便于进入陷阱处理器代码段;停止执行在所述多处理器内的所有线程组的执行;设置错误状态寄存器以指示所述干扰事件的类型;以及,为每个线程组设置程序计数器,以指出所述陷阱处理器代码段的存储器地址,所述陷阱处理器代码段包括配置所述多处理器来处理所述干扰事件的软件例程;以及
包括所述陷阱处理器代码段的存储器单元,所述陷阱处理器代码段包含当由所述多处理器执行时,执行以下步骤的指令:请求所述错误状态寄存器的值;分支转移到所述陷阱处理器代码段中的子段,所述子段包括用于寻址所述干扰事件的类型的指令;以及,执行所述陷阱处理器代码段的所述子段中的指令以处理所述干扰事件。
4.根据权利要求3所述的图形处理单元,其中所述陷阱处理器控制器进一步经配置以执行以下步骤:确定所述第一线程组正执行在所述陷阱处理器代码段中;响应于所述陷阱处理器代码段中的读取所述错误状态寄存器的指令,提供所述错误状态寄存器中的值;以及,执行所述陷阱处理器代码段的子段中的指令来处理所述干扰事件。
5.根据权利要求3所述的图形处理单元,其中所述执行所述陷阱处理器代码段的所述子段中的指令的步骤包括,执行指令以传送中断到驻留在计算机系统中的主机CPU,以通知所述主机CPU所述干扰事件。
6.根据权利要求3所述的图形处理单元,其中所述陷阱处理器控制器进一步经配置以执行以下步骤:等待执行在所述多处理器中的其他线程组中的每一者完成在所述陷阱处理器代码中的执行或者产生到驻留在计算机系统中的主机CPU的执行流程;以及,在遇到所述干扰事件之前返回所述第一线程组的代码段。
7.根据权利要求4所述的图形处理单元,其中从包括由所述线程组的第一线程所生成的异常和由所述第一线程组的执行而外部生成的中断的组中选择所述干扰事件。
8.根据权利要求4所述的图形处理单元,其中与执行在所述多处理器内的每个线程组相关联的线程并发执行,并且在所述多处理器中给所述线程组分配时间片。
9.根据权利要求4所述的图形处理单元,进一步包括寄存器堆,所述寄存器堆包括所述错误状态寄存器、所述程序计数器、用于存储所述陷阱处理器代码段的存储器地址的寄存器以及用于存储所述第一线程组的标识的寄存器。
CN201080054127.1A 2009-09-29 2010-09-28 一种用于处理干扰事件的方法和图形处理单元 Active CN102648449B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/569,831 2009-09-29
US12/569,831 US8522000B2 (en) 2009-09-29 2009-09-29 Trap handler architecture for a parallel processing unit
PCT/US2010/050592 WO2011041330A1 (en) 2009-09-29 2010-09-28 Trap handler architecture for a parallel processing unit

Publications (2)

Publication Number Publication Date
CN102648449A CN102648449A (zh) 2012-08-22
CN102648449B true CN102648449B (zh) 2015-08-26

Family

ID=43781606

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201080054127.1A Active CN102648449B (zh) 2009-09-29 2010-09-28 一种用于处理干扰事件的方法和图形处理单元

Country Status (4)

Country Link
US (1) US8522000B2 (zh)
EP (1) EP2483772B1 (zh)
CN (1) CN102648449B (zh)
WO (1) WO2011041330A1 (zh)

Families Citing this family (46)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110216078A1 (en) * 2010-03-04 2011-09-08 Paul Blinzer Method, System, and Apparatus for Processing Video and/or Graphics Data Using Multiple Processors Without Losing State Information
US8803891B2 (en) * 2010-12-13 2014-08-12 Advanced Micro Devices, Inc. Method for preempting graphics tasks to accommodate compute tasks in an accelerated processing device (APD)
US20120194526A1 (en) * 2010-12-15 2012-08-02 Benjamin Thomas Sander Task Scheduling
US9830158B2 (en) * 2011-11-04 2017-11-28 Nvidia Corporation Speculative execution and rollback
US8887160B2 (en) * 2011-11-21 2014-11-11 Hewlett-Packard Development Company, L.P. Mapping tasks to execution threads
US20130135327A1 (en) * 2011-11-29 2013-05-30 Advanced Micro Devices, Inc. Saving and Restoring Non-Shader State Using a Command Processor
US20130141447A1 (en) * 2011-12-06 2013-06-06 Advanced Micro Devices, Inc. Method and Apparatus for Accommodating Multiple, Concurrent Work Inputs
US8933942B2 (en) 2011-12-08 2015-01-13 Advanced Micro Devices, Inc. Partitioning resources of a processor
US9798548B2 (en) 2011-12-21 2017-10-24 Nvidia Corporation Methods and apparatus for scheduling instructions using pre-decode data
US20130166882A1 (en) * 2011-12-22 2013-06-27 Jack Hilaire Choquette Methods and apparatus for scheduling instructions without instruction decode
US9626191B2 (en) 2011-12-22 2017-04-18 Nvidia Corporation Shaped register file reads
US20130257885A1 (en) * 2012-03-28 2013-10-03 Intel Corporation Low Power Centroid Determination and Texture Footprint Optimization For Decoupled Sampling Based Rendering Pipelines
US9298497B2 (en) * 2012-07-13 2016-03-29 Wisconsin Alumni Research Foundation Computer processor providing exception handling with reduced state storage
US20140156975A1 (en) * 2012-11-30 2014-06-05 Advanced Micro Devices, Inc. Redundant Threading for Improved Reliability
US9448837B2 (en) * 2012-12-27 2016-09-20 Nvidia Corporation Cooperative thread array granularity context switch during trap handling
US10289418B2 (en) * 2012-12-27 2019-05-14 Nvidia Corporation Cooperative thread array granularity context switch during trap handling
US9519568B2 (en) * 2012-12-31 2016-12-13 Nvidia Corporation System and method for debugging an executing general-purpose computing on graphics processing units (GPGPU) application
US9448803B2 (en) * 2013-03-11 2016-09-20 Nvidia Corporation System and method for hardware scheduling of conditional barriers and impatient barriers
US9619364B2 (en) 2013-03-14 2017-04-11 Nvidia Corporation Grouping and analysis of data access hazard reports
CN103226499B (zh) * 2013-04-22 2016-02-24 华为技术有限公司 一种恢复内部存储器中的异常数据的方法及装置
US9153008B2 (en) * 2013-05-15 2015-10-06 Intel Corporation Caching for reduced depth and/or color buffer bandwidth
CN104657202A (zh) * 2013-11-19 2015-05-27 上海联影医疗科技有限公司 一种分布式信息处理结构
US9471307B2 (en) * 2014-01-03 2016-10-18 Nvidia Corporation System and processor that include an implementation of decoupled pipelines
US9886736B2 (en) * 2014-01-20 2018-02-06 Nvidia Corporation Selectively killing trapped multi-process service clients sharing the same hardware context
US10152312B2 (en) 2014-01-21 2018-12-11 Nvidia Corporation Dynamic compiler parallelism techniques
GB2524063B (en) 2014-03-13 2020-07-01 Advanced Risc Mach Ltd Data processing apparatus for executing an access instruction for N threads
GB2524085B (en) * 2014-03-14 2021-01-20 Advanced Risc Mach Ltd Exception handling in microprocessor systems
US9836354B1 (en) 2014-04-28 2017-12-05 Amazon Technologies, Inc. Automated error detection and recovery for GPU computations in a service environment
US9298807B1 (en) * 2014-09-09 2016-03-29 Sas Institute Inc. Techniques for dynamic partitioning in a distributed parallel computational environment
US9910760B2 (en) * 2015-08-07 2018-03-06 Nvidia Corporation Method and apparatus for interception of synchronization objects in graphics application programming interfaces for frame debugging
CN105550443B (zh) * 2015-12-11 2019-05-28 中国航空工业集团公司西安航空计算技术研究所 一种基于SystemC周期精确的统一染色器阵列TLM模型
CN107451046B (zh) * 2016-05-30 2020-11-17 腾讯科技(深圳)有限公司 一种检测线程的方法及终端
US10310861B2 (en) * 2017-04-01 2019-06-04 Intel Corporation Mechanism for scheduling threads on a multiprocessor
US10043232B1 (en) 2017-04-09 2018-08-07 Intel Corporation Compute cluster preemption within a general-purpose graphics processing unit
US11353868B2 (en) * 2017-04-24 2022-06-07 Intel Corporation Barriers and synchronization for machine learning at autonomous machines
US10437593B2 (en) * 2017-04-27 2019-10-08 Nvidia Corporation Techniques for comprehensively synchronizing execution threads
US10726514B2 (en) * 2017-04-28 2020-07-28 Intel Corporation Compute optimizations for low precision machine learning operations
US10528479B2 (en) * 2017-06-02 2020-01-07 Huawei Technologies Co., Ltd. Global variable migration via virtual memory overlay technique for multi-version asynchronous dynamic software update
GB2566339B (en) * 2017-09-06 2019-11-27 Advanced Risc Mach Ltd An apparatus and method of executing thread groups
US10761904B2 (en) * 2018-01-17 2020-09-01 Salesforce.Com, Inc. Method and system for synchronizing and joining multiple calls to the same asynchronous code segment
US11030714B2 (en) * 2018-01-27 2021-06-08 Microsoft Technology Licensing, Llc. Wide key hash table for a graphics processing unit
US20200004533A1 (en) * 2018-06-29 2020-01-02 Microsoft Technology Licensing, Llc High performance expression evaluator unit
US11802957B2 (en) 2021-03-30 2023-10-31 Micron Technology, Inc. Increasing cache hits for synthetic aperture radar
CN116627494B (zh) * 2022-02-10 2024-05-10 格兰菲智能科技有限公司 处理器以及指令并行发射的处理方法
CN115834874B (zh) * 2023-02-06 2023-04-28 武汉凌久微电子有限公司 一种用于gpu的显示带宽错误的实时监测方法及装置
CN117389712B (zh) * 2023-12-12 2024-03-12 沐曦集成电路(南京)有限公司 一种gpu多线程调度管理系统

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6718457B2 (en) 1998-12-03 2004-04-06 Sun Microsystems, Inc. Multiple-thread processor for threaded software applications
WO2000070482A1 (en) * 1999-05-14 2000-11-23 Clearwater Networks, Inc. Interrupt and exception handling for multi-streaming digital processors
US7653912B2 (en) 2003-05-30 2010-01-26 Steven Frank Virtual processor methods and apparatus with unified event notification and consumer-producer memory operations
US7353498B2 (en) * 2004-04-29 2008-04-01 Hewlett-Packard Development Company, L.P. Multi-process debugger
US7779238B2 (en) 2004-06-30 2010-08-17 Oracle America, Inc. Method and apparatus for precisely identifying effective addresses associated with hardware events
US7370243B1 (en) 2004-06-30 2008-05-06 Sun Microsystems, Inc. Precise error handling in a fine grain multithreaded multicore processor
US7765547B2 (en) 2004-11-24 2010-07-27 Maxim Integrated Products, Inc. Hardware multithreading systems with state registers having thread profiling data
US7716521B1 (en) * 2005-05-06 2010-05-11 Oracle America, Inc. Multiple-core, multithreaded processor with flexible error steering mechanism
JP4222370B2 (ja) * 2006-01-11 2009-02-12 セイコーエプソン株式会社 デバッグ支援装置及びデバッグ処理方法をコンピュータに実行させるためのプログラム
US8286196B2 (en) 2007-05-03 2012-10-09 Apple Inc. Parallel runtime execution on multiple processors
EP2135163B1 (en) 2007-04-11 2018-08-08 Apple Inc. Data parallel computing on multiple processors
US8341611B2 (en) 2007-04-11 2012-12-25 Apple Inc. Application interface on multiple processors

Also Published As

Publication number Publication date
US20110078427A1 (en) 2011-03-31
EP2483772A4 (en) 2014-04-02
EP2483772B1 (en) 2015-11-11
US8522000B2 (en) 2013-08-27
WO2011041330A1 (en) 2011-04-07
EP2483772A1 (en) 2012-08-08
CN102648449A (zh) 2012-08-22

Similar Documents

Publication Publication Date Title
CN102648449B (zh) 一种用于处理干扰事件的方法和图形处理单元
CN103309786B (zh) 用于在非可抢占式图形处理单元上交互调试的方法和装置
US10915364B2 (en) Technique for computational nested parallelism
US9830156B2 (en) Temporal SIMT execution optimization through elimination of redundant operations
US9830158B2 (en) Speculative execution and rollback
US9024946B2 (en) Tessellation shader inter-thread coordination
US8639882B2 (en) Methods and apparatus for source operand collector caching
US9466091B2 (en) Atomic memory update unit and methods
US8619087B2 (en) Inter-shader attribute buffer optimization
US8752018B2 (en) Emitting coherent output from multiple threads for printf
US9207919B2 (en) System, method, and computer program product for bulk synchronous binary program translation and optimization
US11669421B2 (en) Fault injection architecture for resilient GPU computing
US9471307B2 (en) System and processor that include an implementation of decoupled pipelines
US11880925B2 (en) Atomic memory update unit and methods
US11934867B2 (en) Techniques for divergent thread group execution scheduling
CN112817738A (zh) 用于修改可执行图以实施与新任务图关联的工作负载的技术
US20230115044A1 (en) Software-directed divergent branch target prioritization
US20230144553A1 (en) Software-directed register file sharing
US9665920B1 (en) Simultaneous execution of compute and graphics applications
US8669991B2 (en) Method macro expander
CN118043786A (zh) 多传递性能剖析

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C53 Correction of patent of invention or patent application
CB03 Change of inventor or designer information

Inventor after: Shebanow Michael C

Inventor after: Wang Ruofan

Inventor after: Choquette Jack

Inventor after: Coon Brett W.

Inventor after: Heinrich Steven J

Inventor after: Kalaiah Aravind

Inventor after: Nickolls John R.

Inventor after: Salinas Daniel

Inventor after: Xiao Yaoming

Inventor after: Thorn Tommy

Inventor before: Shebanow Michael C

Inventor before: Wang Nicholas

Inventor before: Choquette Jack

Inventor before: Coon Brett W.

Inventor before: Heinrich Steven J

Inventor before: Kalaiah Aravind

Inventor before: Nickolls John R.

Inventor before: Salinas Daniel

Inventor before: Ming *xiu

Inventor before: Thorn Tommy

COR Change of bibliographic data

Free format text: CORRECT: INVENTOR; FROM: SHEBANOW MICHAEL C. CHOQUETTE JACK COON BRETT W. HEINRICH STEVEN J. KALAIAH ARAVIND NICKOLLS JOHN R. SALINAS DANIEL MING XIU THORN TOMMY WANG NICHOLAS TO: SHEBANOW MICHAEL C. CHOQUETTE JACK COON BRETT W. HEINRICH STEVEN J. KALAIAH ARAVIND NICKOLLS JOHN R. SALINAS DANIEL XIAO YAOMING THORN TOMMY WANG RUOFAN

C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant