CN103309786B - 用于在非可抢占式图形处理单元上交互调试的方法和装置 - Google Patents
用于在非可抢占式图形处理单元上交互调试的方法和装置 Download PDFInfo
- Publication number
- CN103309786B CN103309786B CN201310075815.1A CN201310075815A CN103309786B CN 103309786 B CN103309786 B CN 103309786B CN 201310075815 A CN201310075815 A CN 201310075815A CN 103309786 B CN103309786 B CN 103309786B
- Authority
- CN
- China
- Prior art keywords
- thread
- parallel processing
- processing element
- treatment cycle
- operating load
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3632—Software debugging of specific synchronisation aspects
Abstract
公开了用于使用非可抢占式图形处理单元(GPU)实施着色器程序的交互调试的系统和方法。采用了迭代过程来反复重新启动工作负载用于由GPU上的着色器程序处理。当GPU遭遇硬件停止事件诸如通过到达着色器程序的任意线程中的断点、遭遇硬件异常或着色器程序中的软件断言失败时,保存任意正执行的线程的状态、拷贝图形存储器到系统存储器以及杀死任意当前正执行的线程,以使GPU能够处理图形数据用于更新显示设备。工作负载的每个周期可导致递增更多的数据得到处理。实际上,由工作负载的每个周期所导致的改变的状态和变量数据具有调试器正在递增地单步调试着色器程序的效果。
Description
技术领域
本公开总地涉及调试,并且更具体地,涉及用于在非可抢占式(non-preemptible)图形处理单元(GPU)上交互调试的方法和装置。
背景技术
常规调试工具提供使用某种类型的用户界面在程序中的给定点暂停(halt)程序的执行以及在程序中的该点评估处理器上下文(即存储器、寄存器等)的能力,所述某种类型的用户界面一般是在耦连到调试平台的显示器上所显示的图形用户界面。一般地,调试工具分类为软件实现方案或硬件实现方案。
软件调试包括许多用于检测程序中的错误的技术。一种用于调试程序的技术是对程序进行修改使得在程序的执行期间将各个变量值写入到候补位置或代替正常程序输出。随后重新执行程序以收集期望输出。虽然这种技术可能有益于检测一些类型的错误,但是这些技术有许多缺点。要求用户执行经修改的程序可能不允许用户实时分析程序。如果程序不是确定性的,那么重新执行程序可能对于变量显示不一致的值。另外,只有对程序资源代码具有访问权限的受信任方才可以实施调试操作。进一步地,为了重置状态变量,重新执行程序可能要求大量存储器转移,这可能引入附加的延迟或不一致。对程序进行修改还可能隐藏一些由系统所执行的指令的具体时序所造成的错误或改变由编译器所生成的指令流的顺序,由此导致完全不同的结果。进一步地,用户可能不能分析未经修改程序的效率以确定何处正在发生一些类型的处理瓶颈。另一种基于软件调试实现方案的技术可利用软件仿真器来仿真在目标平台上的程序的执行。软件仿真器允许用户单步调试指令以及理解在目标平台的处理器上下文上的那些指令的效果。然而,因为软件仿真器仅仅仿真目标平台,所以可能难以使用软件仿真器来调试某些由指令的异步执行所造成的瞬时错误。此外,由于软件仿真器中的固有漏洞或由于仿真性能和精确度之间的权衡,软件仿真器可能表现不同于目标硬件平台,从而使调试问题混淆。
除软件调试工具之外,许多硬件平台实现各种可用来代替或补充软件调试技术的硬件调试工具。例如,一些处理器使能硬件断点以由当执行具体指令时暂停处理器上的程序的执行以及等待恢复命令的发出的调试器来实现。其他处理器实现某一类型的调试端口,诸如使能对目标平台的集成电路上所实现的内部调试模块的访问权限的JTAG(联合测试行动组)端口。
常规地,可经由软件仿真器或经由要求连接到正在执行调试器的计算机的目标平台的远程调试来实现调试。在与开发平台分开的目标平台上实现调试的一个原因是,暂停正执行在调试器的同一平台上的源程序的执行也可能暂停运行调试器所需的关键硬件。例如,利用在正执行源程序的CPU上的断点可防止CPU运行操作系统,从而防止程序员使用软件调试工具查看CPU状态或对存储器做出改变。
因此,本领域所需要的是考虑到目标GPU的交互调试,同时还允许目标GPU继续进行从操作系统所接收的正常的屏幕绘制操作的系统和方法。
发明内容
本公开的一个示范性实施例阐述了用于在非可抢占式图形处理单元上实施交互调试的方法。方法包括以下步骤:使着色器程序载入到并行处理单元上,其中并行处理单元配置为渲染用于交互调试环境的图形用户界面以在耦连到并行处理单元的显示设备上显示,以及发出工作负载到并行处理单元用于在第一周期(pass)期间处理,其中工作负载由对包括在工作负载中的分开的输入数据加以并行执行的多个线程所处理,以及其中并行处理单元配置为当由多个线程中的任意线程触发硬件陷阱时暂停工作负载的处理。方法进一步包括以下步骤:检测在工作负载的处理中的第一点期间已发生硬件陷阱,以及进入重新启动(re-launch)循环,所述重新启动循环包括禁用工作负载的处理以允许由并行处理单元更新图形用户界面以及重新发出工作负载到并行处理单元用于在一个或多个随后的周期期间处理。
本公开的另一个示范性实施例阐述了包括配置为实施上文所阐述的方法步骤的调试器的计算机可读存储介质。本公开的又一个示范性实施例阐述了配置为在非可抢占式图形处理单元上实施交互调试的系统。
所公开的方法的一个优点是用于调试目的的计算机可使用单个GPU既用于硬件调试又用于屏幕更新。其他优点包括调试非确定性应用的能力以及调试没有源代码可用的程序的能力。
附图说明
因此,可以详细地理解本公开的上述特征,并且可以参考示范性实施例得到对如上面所简要概括的本公开更具体的描述,其中一些实施例在附图中示出。然而,应当注意的是,附图仅示出了本公开的典型实施例,因此不应被认为是对其范围的限制,本公开可以具有其他等效的实施例。
图1是示出了配置为实现本公开的一个或多个方面的计算机系统的框图;
图2是根据本公开的一个示范性实施例的、用于图1的计算机系统的并行处理子系统的框图;
图3A是根据本公开的一个示范性实施例的、图2的前端的框图;
图3B是根据本公开的一个示范性实施例的、图2的并行处理单元之一内的通用处理集群的框图;
图3C是根据本公开的一个示范性实施例的、图3B的流多处理器的一部分的框图;以及
图4是根据本公开的一个示范性实施例的、配置为在图形处理单元上调试图形着色器的系统的示意图;
图5示出了根据本公开的一个示范性实施例的、由调试器所维护以在图形处理单元上实现交互调试的数据结构;以及
图6示出了根据本公开的一个示范性实施例的、用于在非可抢占式图形处理单元上实施交互调试的方法。
具体实施方式
在下面的描述中,将阐述大量的具体细节以提供对本公开更透彻的理解。然而,本领域的技术人员应该清楚,本发明可以在没有一个或多个这些具体细节的情况下得以实施。
系统概述
图1为示出了配置为实现本公开的一个或多个方面的计算机系统100的框图。计算机系统100包括经由可以包括存储器桥105的互连路径通信的中央处理单元(CPU)102和系统存储器104。存储器桥105可以是例如北桥芯片,经由总线或其他通信路径106(例如超传输(HyperTransport)链路)连接到I/O(输入/输出)桥107。I/O桥107,其可以是例如南桥芯片,从一个或多个用户输入设备108(例如键盘、鼠标)接收用户输入并且经由通信路径106和存储器桥105将该输入转发到CPU102。并行处理子系统112经由总线或第二通信路径113(例如外围部件互连Express(PCIe)、加速图形端口或超传输链路)耦连到存储器桥105;在一个实施例中,并行处理子系统112是将像素递送到显示设备110(例如传统的基于阴极射线管或液晶显示器的监视器)的图形子系统。系统盘114也连接到I/O桥107。交换器116提供I/O桥107与诸如网络适配器118以及各种插卡120和121的其他部件之间的连接。其他部件(未明确示出),包括通用串行总线(USB)或其他端口连接、压缩磁盘(CD)驱动器、数字视频光盘(DVD)驱动器、胶片录制设备及类似部件,也可以连接到I/O桥107。图1所示的各种通信路径包括具体命名的通信路径106和113可以使用任意适合的协议实现,诸如PCI-Express、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,每个并行处理单元202都耦连到本地并行处理(PP)存储器204。通常,并行处理子系统包括U个PPU,其中U≥1。(本文中,类似对象的多个实例需要时以标识对象的参考数字和标识实例的括号中的数字来表示。)PPU202和并行处理存储器204可使用一个或多个集成电路设备来实现,诸如可编程处理器、专用集成电路(ASIC)或存储器设备,或者以任意其他技术可行的方式来实现。
再参考图1以及图2,在一些实施例中,并行处理子系统112中的一些或所有PPU202是具有渲染管线的图形处理器,其可以配置为实施与下述相关的各种操作:经由存储器桥105和第二通信路径113从CPU102和/或系统存储器104所供应的图形数据生成像素数据,与本地并行处理存储器204(可被用作图形存储器,包括例如常规帧缓冲区(buffer))交互以存储和更新像素数据,递送像素数据到显示设备110等等。在一些实施例中,并行处理子系统112可包括一个或多个作为图形处理器而操作的PPU202以及一个或多个用于通用计算的其他PPU202。这些PPU可以是同样的或不同的,并且每个PPU可具有专用并行处理存储器设备或不具有专用并行处理存储器设备。并行处理子系统112中的一个或多个PPU202可输出数据到显示设备110,或者并行处理子系统112中的每个PPU202可输出数据到一个或多个显示设备110。
在操作中,CPU102是计算机系统100的主处理器,控制和协调其他系统部件的操作。具体地,CPU102发出控制PPU202的操作的命令。在一些实施例中,CPU102写入用于每个PPU202的命令流到数据结构中(在图1或图2中未明确示出),该数据结构可位于系统存储器104、并行处理存储器204、或CPU102和PPU202都可访问的其他存储位置中。将指向每个数据结构的指针写到入栈缓冲区(pushbuffer)以发起对数据结构中的命令流的处理。PPU202从一个或多个入栈缓冲区读取命令流,然后相对于CPU102的操作异步地执行命令。可以经由设备驱动程序103由应用程序为每个入栈缓冲区指定执行优先级以控制对不同入栈缓冲区的调度。
现在返回参考图2和图1,每个PPU202包括经由连接到存储器桥105(或者,在一个替代性实施例中,直接连接到CPU102)的通信路径113与计算机系统100的其余部分通信的I/O(输入/输出)单元205。PPU202到计算机系统100的其余部分的连接也可以变化。在一些实施例中,并行处理子系统112可实现为可插入到计算机系统100的扩展槽中的插卡。在其他实施例中,PPU202可以和诸如存储器桥105或I/O桥107的总线桥集成在单个芯片上。而在其他实施例中,PPU202的一些或所有元件可以和CPU102集成在单个芯片上。
在一个实施例中,通信路径113是PCIExpress链路,如本领域所知的,其中专用通道被分配到每个PPU202。也可以使用其他通信路径。I/O单元205生成用于在通信路径113上传送的包(或其他信号),并且还从通信路径113接收所有传入的包(或其他信号),将传入的包引导到PPU202的适当部件。例如,可将与处理任务相关的命令引导到主机接口206,而将与存储器操作相关的命令(例如,对并行处理存储器204的读取或写入)引导到存储器交叉开关单元210。主机接口206读取每个入栈缓冲区,并且将存储在入栈缓冲区中的命令流输出到前端212。
有利地,每个PPU202都实现高度并行处理架构。如详细示出的,PPU202(0)包括处理集群阵列230,该阵列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,每个分区单元215直接耦连到并行处理存储器204的一部分,其中D≥1。如所示的,分区单元215的数目一般等于动态随机存取存储器(DRAM)220的数目。在其他实施例中,分区单元215的数目也可以不等于存储器设备的数目。本领域的技术人员应该理解DRAM220可以用其他合适的存储设备来替代并且可以是一般常规的设计。因此省略了详细描述。诸如帧缓冲区或纹理映射图的渲染目标可以跨DRAM220加以存储,这允许分区单元215并行写入每个渲染目标的各部分以有效地使用并行处理存储器204的可用带宽。
任意一个GPC208都可以处理要被写到并行处理存储器204内的任意DRAM220的数据。交叉开关单元210配置为路由每个GPC208的输出到任意分区单元215的输入或到另一个GPC208用于进一步处理。GPC208通过交叉开关单元210与存储器接口214通信,以对各种外部存储器设备进行读取或写入。在一个实施例中,交叉开关单元210具有到存储器接口214的连接以和I/O单元205通信,以及到本地并行处理存储器204的连接,从而使在不同GPC208内的处理内核能够与系统存储器104或对于PPU202而言非本地的其他存储器通信。在图2所示的实施例中,交叉开关单元210直接与I/O单元205连接。交叉开关单元210可使用虚拟信道来分开GPC208与分区单元215之间的业务流。
另外,GPC208可被编程以执行与种类繁多的应用相关的处理任务,包括但不限于,线性和非线性数据变换、视频和/或音频数据过滤、建模操作(例如,应用物理定律以确定对象的位置、速率和其他属性)、图像渲染操作(例如,曲面细分(tessellation)着色器、顶点着色器、几何着色器、和/或像素着色器程序)等等。PPU202可将数据从系统存储器104和/或本地并行处理存储器204转移到内部(片上)存储器中,处理该数据,并且将结果数据写回到系统存储器104和/或本地并行处理存储器204,其中这样的数据可以由其他系统部件访问,所述其他系统部件包括CPU102或另一个并行处理子系统112。
PPU202可配备有任意容量(amount)的本地并行处理存储器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将指向与任务相对应的TMD322的指针的列表存储在调度器表321中,其中所述列表可以实现为链表。可以将TMD322存储在PP存储器204或系统存储器104中。任务管理单元300接受任务并将任务存储在调度器表321中的速度与任务管理单元300调度任务用于执行的速度是解耦的。因此,任务管理单元300可以在调度任务之前收集数个任务。之后可以基于优先级信息或使用其他技术诸如轮叫调度来调度所收集的任务。
工作分布单元340包括具有槽的任务表345,每个槽可以被用于正在执行的任务的TMD322所占用。当任务表345中有空闲槽时,任务管理单元300可以调度任务用于执行。当没有空闲槽时,未占用槽的较高优先级任务可以驱逐占用槽的较低优先级任务。当任务被驱逐时,该任务被停止,并且如果该任务的执行没有完成,则将指向该任务的指针添加到所要调度的任务指针的列表使得任务的执行稍后将恢复。当生成子处理任务时,在任务的执行期间,将指向该子任务的指针添加到所要调度的任务指针的列表。可以由在处理集群阵列230中执行的TMD322生成子任务。
不同于由任务/工作单元207从前端212接收的任务,子任务从处理集群阵列230接收。子任务不被插入入栈缓冲区或传送到前端。当生成子任务或将用于子任务的数据存储在存储器中时不通知CPU102。通过入栈缓冲区提供的任务与子任务之间的另一个区别是通过入栈缓冲区提供的任务由应用程序来定义而子任务是在任务执行期间动态生成的。
任务处理概述
图3B为根据本公开一个示范性实施例的在图2的PPU202之一内的GPC208的框图。每个GPC208可配置为并行执行大量线程,其中术语“线程”是指在特定输入数据集上执行的特定程序的实例。在一些实施例中,单指令、多数据(SIMD)指令发出技术用于在不提供多个独立指令单元的情况下支持大量线程的并行执行。在其他实施例中,单指令、多线程(SIMT)技术用于使用配置为向GPC208中的每一个内的处理引擎集发出指令的公共指令单元来支持大量一般来说同步的线程的并行执行。不同于所有处理引擎通常都执行同样指令的SIMD执行机制,SIMT执行通过给定线程程序允许不同线程更容易跟随分散执行路径。本领域普通技术人员应该理解SIMD处理机制代表SIMT处理机制的功能子集。
经由将处理任务分布到流多处理器(SM)310的管线管理器305来有利地控制GPC208的操作。管线管理器305还可配置为通过为由SM310所输出的处理数据指定目的地来控制工作分布交叉开关330。
在一个实施例中,每个GPC208包括M个SM310,其中M≥1,每个SM310配置为处理一个或多个线程组。另外,如本领域已知的,每个SM310有利地包括可以管线化的同样功能执行单元集(例如执行单元和加载-存储单元—在图3C中示出为Exec单元302和LSU303),其允许在前一个指令完成之前发出新指令。可提供功能执行单元的任意组合。在一个实施例中,功能单元支持各种各样的操作,包括整数和浮点运算(例如加法和乘法)、比较操作、布尔操作(AND、OR、XOR)、移位和各种代数函数的计算(例如平面插值、三角函数、指数函数和对数函数等等);以及相同功能单元硬件可均衡地用来实施不同的操作。
如本文之前所定义的,传送到特定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都还有权访问在所有GPC208之间共享并且可用于在线程之间转移数据的二级(L2)高速缓存。最后,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)集和可选地包括高速缓存行索引。MMU328可以包括地址转换后备缓冲区(TLB)或可以驻留在多处理器SM310或L1高速缓存或GPC208内的高速缓存。物理地址经处理以分布表面数据访问位置来允许高效请求在分区单元215之间交错。高速缓存行索引可用于确定用于高速缓存行的请求是命中还是未命中。
在图形和计算应用中,GPC208可配置为使得每个SM310耦连到用于实施纹理映射操作例如确定纹理样本位置、读出纹理数据以及过滤该纹理数据的纹理单元315。从内部纹理L1高速缓存(未示出)或者在一些实施例中从SM310内的L1高速缓存读出纹理数据并根据需要从在所有GPC208之间共享的L2高速缓存、并行处理存储器204或系统存储器104中获取纹理数据。为了将所处理的任务提供给另一个GPC208用于进一步处理或为了经由交叉开关单元210将所处理的任务存储在L2高速缓存、并行处理存储器204或系统存储器104中,每个SM310将所处理的任务输出到工作分布交叉开关330。preROP(预光栅操作)325配置为从SM310接收数据、将数据引导到分区单元215内的ROP单元以及针对颜色混合实施优化、组织像素颜色数据和实施地址转译。
应该理解本文所述的内核架构是示例性的并且变化和修改都是可能的。任意数目的处理单元例如SM310或纹理单元315、preROP325可以包括在GPC208内。进一步地,如图2所示,PPU202可以包括任意数目的GPC208,所述GPC208有利地在功能上彼此相似使得执行行为不取决于哪个GPC208接收特定处理任务。进一步地,每个GPC208有利地使用分开且各异的处理单元、L1高速缓存来独立于其他GPC208操作以为一个或多个应用程序执行任务。
本领域普通技术人员应该理解图1、2、3A和3B所描述的架构决不限制本发明的范围并且在不脱离本发明范围的情况下本文所教导的技术可以在任意经适当配置的处理单元上实现,所述处理单元包括但不限于一个或多个CPU、一个或多个多核CPU、一个或多个PPU202、一个或多个GPC208、一个或多个图形或专用处理单元等等。
在本发明的实施例中,使用计算系统的PPU202或其他处理器来使用线程阵列执行通用计算是可取的。为线程阵列中的每个线程指派在线程的执行期间对于线程可访问的唯一的线程标识符(“线程ID”)。可被定义为一维或多维数值的线程ID控制线程处理行为的各方面。例如,线程ID可用于确定线程将要处理输入数据集的哪部分和/或确定线程将要产生或写输出数据集的哪部分。
每线程指令序列可包括定义线程阵列的代表性线程和一个或多个其他线程之间的协作行为的至少一个指令。例如,每线程指令序列可能包括在序列中的特定点处挂起用于代表性线程的操作执行直到诸如其他线程的一个或多个到达该特定点的时间为止的指令、用于代表性线程将数据存储在其他线程的一个或多个有权访问的共享存储器中的指令、用于代表性线程原子地读出和更新存储在其他线程的一个或多个基于它们的线程ID有权访问的共享存储器中的数据的指令等等。CTA程序还可以包括计算数据将从其读出的共享存储器中的地址的指令,该地址是线程ID的函数。通过定义合适的函数并提供同步技术,可以以可预测的方式由CTA的一个线程将数据写入共享存储器中的给定位置并由同一个CTA的不同线程从该位置读出数据。因此,数据在线程之间共享的任意期望模式可以得到支持,以及CTA中的任意线程可以与同一个CTA中的任意其他线程共享数据。如果存在数据在CTA的线程之间的共享,则其范围由CTA程序确定;因此,应该理解的是,在使用CTA的特定应用中,CTA的线程可能会或可能不会真正互相共享数据,这取决于CTA程序,术语“CTA”和“线程阵列”在本文作为同义词使用。
图3C为根据本公开一个示范性实施例的图3B的SM310的框图。SM310包括配置为经由L1.5高速缓存335从存储器接收指令和常数的指令L1高速缓存370。线程束调度器和指令单元312从指令L1高速缓存370接收指令和常数并根据该指令和常数控制本地寄存器堆304和SM310功能单元。SM310功能单元包括N个exec(执行或处理)单元302和P个加载-存储单元(LSU)303。
SM310提供具有不同级别的可访问性的片上(内部)数据存储。特殊寄存器(未示出)对于LSU303可读但不可写并且用于存储定义每个线程的“位置”的参数。在一个实施例中,特殊寄存器包括每线程(或SM310内的每exec单元302)一个的存储线程ID的寄存器;每个线程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内的任意exec单元302)可以通过存储器接口214访问全局存储器。可以将全局存储器的各部分存储在L1高速缓存320中。
每个线程将本地寄存器堆304用作暂存空间;每个寄存器被分配以专用于一个线程,并且在本地寄存器堆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,统一地址映射单元352将为在统一存储器空间中所指定的加载和存储指令所提供的地址转换为每个各异存储器空间中的地址。因此,指令可以用于通过指定统一存储器空间中的地址来访问本地、共享或全局存储器空间中的任意一个。
每个SM310中的L1高速缓存320可以用于高速缓存私有的每线程本地数据还有每应用全局数据。在一些实施例中,可以将每CTA共享数据高速缓存在L1高速缓存320中。LSU303经由存储器和高速缓存互连380耦连到共享存储器306和L1高速缓存320。
任务管理单元300管理计算任务以作为存储在调度器表321中的TMD组的阵列被调度。TMD组是具有相同调度优先级的计算任务集合。TMD组的数目或优先级级别可以是一个或多个。在每个TMD组内,处于各自优先级级别的计算任务存储在列表中,所述列表可实现为链表,并且在下文中假定为链表。链表中的每个条目将指向TMD322的指针存储在存储器中以及将指向下一个条目的指针存储在各自的链表中。为每个TMD组存储用于链表的头指针和尾指针。没有任务的TMD组具有等于尾指针的头指针以及空位设置为真。
当从主机接口206接收计算任务时,任务管理单元300将计算任务插入TMD组。更具体地,指向与计算任务相对应的TMD322的任务指针被添加到用于该组的链表尾部,除非设置了使任务添加到链表头部的特殊TMD位。即使TMD组内的所有任务具有相同的调度优先级级别,TMD组链表的头部是由任务管理单元300所选择以及经调度用于执行的第一计算任务。因此,在链表头部的计算任务与处于相同优先级级别的其他计算任务相比具有相对较高的优先级。类似地,链表中处于相同优先级级别的每个相继的计算任务相对链表中的在先的计算任务具有较低的优先级。因此,任务管理单元300能够以输入顺序相对于彼此来调度TMD组内的计算任务(假定没有任务被特别标记以添加到TMD组的头部)。由于TMD组被指定为TMD结构的一部分,因此当正在执行计算任务时,不能改变计算任务的TMD组。也可从处理集群阵列230接收计算任务。
在调度计算任务之前基于优先级级别对计算任务到组中的收集要考虑到由任务管理单元300接收计算任务的速率与计算任务输出到工作分布单元340用于执行的速率的解耦。任务管理单元300通常能够以比计算任务可由工作分布单元340输出用于执行更快的速率来从一个或多个入栈缓冲区接受由主机接口206输出的计算任务。来自不同入栈缓冲区的输入是独立的流,典型地是为了具有多个从属任务的集合而由相同应用程序所生成的,但在一些实施例中,多个应用程序可写入到入栈缓冲区。任务管理单元300可配置为在调度器表321中缓冲计算任务以及稍后从调度器表321选择一个或多个计算任务用于输出到工作分布单元340。通过在计算任务被缓冲后对其进行选择,与随着计算任务被接收而加以选择相比,任务管理单元可基于更多信息做出选择。例如,任务管理单元300可缓冲数个在高优先级任务之前所接收的低优先级任务。缓冲使任务管理单元300能够选择高优先级任务用于在低优先级任务之前输出。
任务管理单元300可使用数种不同的技术来实施选择以调度计算任务:循环制(round-robin)、优先级或分区优先级调度。对于每种不同的调度技术,当选择计算任务以进行调度时,从其中存储所选择的计算任务的TMD组中移除该所选择的计算任务。无论哪种调度技术,任务管理单元300都能够通过选择适当组的链表中的第一条目来快速选择计算任务。任务管理单元300很容易地进行组织,并且如果需要的话,可通过简单地改变TMD组的链表中的任务指针的顺序来重新排序计算任务。因此,可按与由任务管理单元300从主机接口206接收任务指针不同的顺序来调度和/或执行计算任务。
最简单的调度方案是任务管理单元300在每组的头部(如果组中存在计算任务的话)调度计算任务并且以循环制的顺序遍历(rotatethrough)组。另一种调度技术是以严格的优先级顺序选择计算任务的优先级调度。任务管理单元300从具有至少一个计算任务的最高优先级TMD组中选择计算任务,在组的头部开始。
与非可抢占式GPU的交互调试
图4是根据本公开的一个示范性实施例的、配置为在图形处理单元上调试图形着色器的系统的示意图。如图4所示,在系统100上实现软件客户端(即调试器450),所述系统100在诸如PPU202的非可抢占式GPU上使能交互硬件调试。调试器450可以是配置为经由通过设备驱动程序103所实现的应用编程接口与PPU202通信的独立应用。可对调试器450加以存储并从系统存储器104加以执行。在一个实施例中,PPU202包括一些硬件调试能力,诸如向设备驱动程序103发送在运行时间期间发生硬件陷阱(例如断点、异常、断言等)的通知、使调试器450能够实施一些与调试相关的任务,诸如将部分PP存储器204转储(flush)到系统存储器104或允许设备驱动程序103写入到PPU202中的寄存器。典型地,PPU202是允许在两个或更多个应用之间进行上下文切换的多线程处理单元。在一些实施例中,调试器450可直接在设备驱动程序103内实现以及耦连到由设备驱动程序103外部的相关联的软件客户端所实现的图形用户界面以允许程序员查看处理器状态、存储在存储器中的值以及选择应用程序410和/或着色器代码412用于调试。
在一个实施例中,调试器450基于用户输入选择程序员想要调试的应用程序410和/或着色器代码412。典型地,在目标平台(即PPU202)上实施硬件调试会要求与调试系统分开的且相异的远程硬件平台。例如,PPU202(0)典型地配置为实施由操作系统422和/或正运行于在计算机系统100中的CPU102上的一个或多个其他应用424所传送的图形操作以及在显示设备110上渲染和显示屏幕图像。硬件调试典型地利用停止事件,其允许程序员执行代码直到特定指令,使得程序员可检查存储在存储器中的中间值以确保程序的适当操作,所述停止事件诸如在用于应用程序410和/或着色器程序412的源代码中所设置的断点。其他停止事件可由失败的软件断言或造成异常的非法指令所造成。使用PPU202(0)来尝试调试着色器程序412可能造成PPU202(0)暂停所有来自应用程序410的传入操作以及由例如操作系统422或一个或多个其他应用424所传送的任意其他操作的执行。暂停所有图形操作可防止任意对存储在PP存储器204中并用来对在显示设备110的屏幕上所示的图像加以更新的帧缓冲区的附加的更新,从而杀死屏幕刷新。PPU202(0)杀死屏幕刷新能力阻止程序员在显示设备110上检查任意中间数据,或者甚至于如果恢复命令被绑定到调试器450的图形用户界面的话,会发送恢复命令以继续执行程序。
该问题的常规解决方案是连接调试器450到用作目标平台用于硬件调试的第二PPU202(1),而继续经由第一PPU202(0)更新显示设备110。第二PPU202(1)可通过通信路径113(在共享总线配置中)或第二类似的通信路径直接连接到计算机系统100。可替代地,第二PPU202(1)可经由网络适配器118间接连接到计算机系统100以及通过网络被访问。
这样的常规调试系统的限制是明显的。由于每个调试平台要求最少两个GPU,因此所要求的附加的硬件增加了调试平台成本。另外,管理两个不同图形平台之间的多个用于图形命令的通道增加了系统的复杂性。因此,更好的解决方案将是利用单个PPU202既用于屏幕刷新又用于调试,这使几乎任意具有图形卡的计算机都能够实施硬件调试操作。
对比于常规调试系统,图4示出了其中PPU202是既可用于屏幕更新又可用于硬件调试的单个非可抢占式GPU的调试系统。在一个实施例中,PPU202可在应用之间进行上下文切换。典型地,一旦在PPU202(0)上启动工作负载,那么工作负载可能需要在PPU202可能切换到不同上下文之前被完成或转储。在正常操作中,操作系统422或其他应用424可发送图形命令到设备驱动程序103,该设备驱动程序103将那些指令编译为机器指令以及传送机器指令到PPU202用于执行。然而,在调试期间,经由程序应用410传送到PPU202的机器指令可能导致PPU202由于诸如断点或异常的硬件陷阱的发生而被暂停,其可阻止任意进一步的图形命令由PPU202加以执行。因此,PPU202必须告知调试器450硬件陷阱已发生(通过设备驱动程序103),以及随后调试器450可通过实施任意对于保存线程状态和当前执行线程的存储器值而言必要的操作来处理硬件陷阱、杀死(即终止)任意当前停滞的(stalled)线程(以及任意从属子线程)的执行、以及使由操作系统422和其他应用424所传送的附加的图形命令能够由PPU202所执行。因此,调试器450使PPU202能够继续更新显示设备110上所显示的屏幕图像。
典型地,由PPU202以相对短的时期来执行工作负载。例如,工作负载可包括渲染将要在屏幕上显示的帧的图形绘制调用。因为应用的帧率典型地将在每秒30帧的范围内,所以图形绘制调用典型地将以小于30毫秒执行。类似地,计算工作负载(诸如物理计算)也将以类似的时间框架执行。因此,即使提交用于调试目的的工作负载可能短时间阻止屏幕更新,但PPU202一般将在足够快的时间内结束对工作负载的执行(或调试器将中断工作负载,保存线程状态以及杀死与工作负载相关联的线程),使得PPU202可用于处理对于实施屏幕更新所必要的图形工作负载。
在一个实施例中,程序员可选择包含着色器程序412的应用程序410以使用PPU202进行调试。可以用C++或C#或某一其他高级编程语言来编写用于应用程序410的源代码,当所述源代码编译为诸如应用程序410的二进制可执行文件时可由CPU102所执行。源代码可包括构建为对图形API的API调用的图形命令,所述图形API诸如由设备驱动程序103所实现的OpenGL或DirectX。源代码还可包含用于在PPU202上加载某些着色器程序412(即具体配置为由GPU所执行的图形程序)的API调用,用于处理由应用程序410所创建的工作负载。可用诸如Cg或OpenGL着色语言(GLSL)的高级着色器语言来编写用于着色器程序412的源代码。着色器程序412是配置为在PPU202的每个SM310上运行的二进制可执行文件。调试器450配置为使程序员能够在PPU202的硬件平台上调试一个或多个着色器程序412。
在另一个实施例中,调试器450可配置为使程序员能够直接在PPU202上调试着色器程序412而不用在CPU102上执行应用程序410。例如,调试器450可配置为向设备驱动程序103发出将着色器程序412直接加载到PPU202上的API调用。一旦着色器程序412加载到PPU202上,调试器450可配置为创建测试工作负载用于由所选择的要被调试的着色器程序412进行处理。应予以理解的是,为了评估着色器程序412是否产生正确的输出,可能需要由程序员预定义工作负载来向着色器程序412提供已知的输入。典型地,调试的初期可包括每个着色器程序412的低级别评估,而调试的后期可包含由CPU102所执行的主应用程序410与PPU202上所执行的着色器程序412的交互。
图5示出了根据本公开的一个示范性实施例的、由调试器450所维护以在PPU202上实现交互调试的数据结构。如图5所示,调试器450维护与在调试期间发出到PPU202的工作负载相关联的列表。“工作负载”是要由GPU所处理的数据的集合。对于图形应用而言,由绘制调用(即开始对一个或多个诸如三角形的基元的处理的API方法调用)来创建工作负载。对于计算应用而言,由内核启动(即开始TMD322的处理的API方法调用)来创建工作负载。
一旦使用调试器450来执行应用程序410,调试器450就可拦截由应用程序410所生成的以及传送到PPU202用于执行的工作负载。在一个实施例中,应用程序410在CPU102上执行并且可配置为创建工作负载用于PPU202,举例来说,诸如通过在PP存储器204中生成TMD322以及发出内核启动命令到指定一个或多个TMD322的设备驱动程序103。在一个实施例中,调试器450配置为拦截由CPU创建的工作负载、生成列表以跟踪经启动以处理工作负载的线程、发出由调试器450所生成的新工作负载、以及转储传送到PPU202的工作负载以确保由其他应用所提交的附加的工作负载将被处理。
在一个实施例中,当调试器450拦截传送到PPU202(经由设备驱动程序103)的工作负载时,调试器450生成以及维护与工作负载相关联的线程的列表。第一列表512跟踪“逻辑上完成”的线程,该列表存储用于与已完成执行的工作负载相关联的每个线程的线程标识符(线程ID_x)。第二列表514跟踪“进行中”的线程,该列表存储用于与当前正在执行的工作负载相关联的每个线程的线程标识符。第三列表516跟踪“尚未启动”的线程,该列表存储用于与有待开始执行的工作负载相关联的每个线程的线程标识符。最初,可利用用于经调度以启动来处理所拦截的工作负载的每个线程的线程标识符填充第三列表516,而第一列表512和第二列表514为空。一旦调试器450已生成列表,调试器450发出工作负载到设备驱动程序103以由PPU202执行并且进入重新启动循环。
重新启动循环是用于仿真硬件调试的迭代循环,使其表现为PPU202正每次单步调试着色器程序412的一小部分指令,而实际上,程序的每一步通过在PPU202上重新发出原始工作负载以及基于遭遇断点的位置在处理中的不同点暂停执行来完成。通过恢复所有在先前的周期期间所保存的进行中的线程的状态来实施对工作负载的处理,使得已完成的线程和部分进行中的线程不被重新执行。替代地,当PPU202尝试重新启动线程时将终止任意已完成的线程,以及任意在先前周期期间正在执行的线程将还原到线程中的执行被暂停的点。
在一个实施例中,工作负载可与在PP存储器204中所创建的指定多个线程执行用于工作负载的TMD322相关联。例如,TMD322可包括指向多达3维的栅格(即CTA的合集)的指针。栅格可包括大小为10个CTA的x维、大小为10个CTA的y维和大小为5个CTA的z维,总共500个CTA包括在工作负载中。随着工作负载被执行,可将来自栅格的CTA发出到PPU202的一个或多个SM310。CTA中的每个线程是由应用程序410所指定的特定着色器程序412的实例。在一些实施例中,PPU202可实现允许调试器450为CTA栅格的每个维指定开始索引的特征。因此,如果调试器450已确定x维中的前4个槽中的CTA在先前的执行循环(即周期)期间已经完成执行,那么调试器450可指定PPU202应在x维中的第5个CTA处开始执行。
如图5所示,随着PPU202执行工作负载,线程在SM310上经调度用于执行。随着线程由特定SM310运行,一些线程可完成执行。调试器450配置为跟踪哪些线程(由线程ID所指定)已被调度用于在PPU202上执行并且将这些线程ID从第三列表516(即“尚未启动”)移动到第二列表514(即“进行中”)。随着线程完成执行,调试器450将线程ID从第二列表514移动到第一列表512(即“逻辑上完成”)。应予以理解的是,在替代实施例中,调试器450可以以其他技术上可行的方式跟踪线程,诸如利用单个列表跟踪线程以及将单个列表中的线程ID与指示该特定线程的状态的标记(例如“尚未启动”、“进行中”或“逻辑上完成”)相关联。例如,调试器450可假定,默认情况下,所有线程具有“尚未启动”的固有状态。随着PPU202在工作负载的处理期间在SM310上启动线程,调试器450可添加相应的用于所启动线程的线程ID到阵列(即列表)。随着线程完成执行,线程ID可与指示与该线程ID相关联的线程是“逻辑上完成”的标记相关联。因此,包括在阵列中的所有线程都是“进行中”的,除非与指示其是“逻辑上完成”的标记相关联。如果阵列中不包括用于特定线程的线程ID,那么调试器450假定与该线程ID相对应的线程是“尚未启动”的。而在其他实施例中,调试器450可利用2个分开的阵列(即列表),一个列表指示线程是“进行中”的以及另一个列表指示线程是“逻辑上完成”的。当线程结束执行时,调试器450可从第一阵列移除线程ID并添加线程ID到第二阵列。因此,如果线程ID包括在第一阵列中则线程将被认为是“进行中”的,如果线程ID包括在第二阵列中则线程将被认为是“逻辑上完成”的,以及如果线程ID不包括在第一或第二阵列中则线程将被认为是“尚未启动”的。
在某一点处,PPU202可能遭遇暂停所有正在SM310上运行的线程的执行的硬件陷阱。在该点,PPU202向设备驱动程序103通知PPU202已暂停执行以及由于硬件陷阱的发生而停滞。在一个实施例中,设备驱动程序103转而向调试器450通知该硬件停止事件。在另一个实施例中,调试器450可轮询设备驱动程序103或PPU202以确定是否已发生硬件陷阱。当将硬件停止事件通知给调试器450时,调试器450为第二列表514中所包括的每个线程保存线程状态。换句话说,对于任意当前“进行中”的线程,调试器保存将这些线程还原到执行的当前点所必要的任意线程状态信息。例如,调试器450可将存储在专用寄存器、每线程本地存储器以及共享全局存储器中的值保存到系统存储器104。随后,调试器450可改变PPU202的全局状态以杀死(即终止)任意新创建的线程以及任意当前正在执行的线程。例如,调试器450可设置当执行恢复时使PPU202杀死任意活动线程的专用寄存器。调试器450随后恢复PPU202的执行,其消灭所有与当前工作负载相关联的线程使得PPU202可开始处理新工作负载。新工作负载可包括由操作系统422或其他应用424传送到PPU202的使显示设备110上的图像得到更新的图形命令。
一旦已由调试器450将PPU202返回正常操作,可更新用于调试器450的GUI使得程序员可检查任意与“停滞的”着色器程序412相关联的所保存的处理状态或变量数据。调试器450随后等待由程序员所发出的恢复命令。例如,程序员可设置新断点以及选择按键以恢复着色器程序412的执行。当调试器450接收到恢复命令时,调试器450重新发出先前的工作负载到PPU202。工作负载将还原到发生先前的硬件陷阱的执行点并且被允许执行直到由硬件陷阱所造成的下一个停止事件为止,诸如到达由程序员所设置的新断点或着色器程序412中的软件断言失败。再一次地,调试器450将保存处理器状态、从PP存储器204转储存储器、杀死任意与工作负载相关联的活动线程、以及将PPU202返回到正常操作。通过依次通过该重新启动过程,调试器450可迭代地使程序员能够单步调试着色器程序412用于调试目的,同时防止硬件停止事件造成显示设备110停止更新。
在一个实施例中,调试器450使PPU202在运行任意用于特定线程的指令之前执行线程条目例程。线程条目例程是确定是否应基于由调试器450所维护的列表(例如512、514、516)来执行线程的指令的集合。例如,当线程启动时,线程条目例程检查该线程是否随着已经被完全执行而包括在第一列表512(即“逻辑上完成”)中。如果线程ID包括在第一列表512中,那么线程条目例程杀死线程使得SM310可替代执行另一个线程。换句话说,由工作负载所指定的该特定线程已经在先前的重新启动循环期间得以执行并且该线程的输出已被并入所存储的帧缓冲区或处理器状态。因此,在当前的重新启动周期期间不需要执行该线程。然而,如果线程ID未包括在第一列表512中,那么线程条目例程确定线程ID是否包括在第二列表514(即“进行中”)中,从而要求在先前的重新启动周期期间所存储的一定量的状态或存储器以在PPU202上或PP存储器204中还原。如果线程ID包括在第二列表514中,那么线程条目例程还原用于该线程的线程状态并且允许线程从线程在上一个重新启动周期期间被杀死的点处继续执行。如果线程ID既未包括在第一列表512也不在第二列表514中,那么线程应包括在第三列表516(即“尚未启动”)中,并且线程条目例程将在PPU202的一个SM310上启动该线程的执行。
在其他实施例中,PPU202的一些资源可能不是可还原的。例如,一些硬件寄存器可以是只读的(例如硬件线程ID或其他状态可存储在专用寄存器中),并且因此,调试器450可能不能在PPU202上的工作负载的随后周期期间还原这些状态变量。例如,PPU202可能无法使调试器能够指定特定线程在PPU202的哪个特定SM310上启动。因为一些着色器程序412可包括使用这些专用寄存器作为输入以计算某一中间地址或数据的指令,所以如果在随后的周期上与一个SM310相对应的线程状态还原到现在正执行在不同的SM310上的线程,那么这些着色器程序412可能不正确地发挥作用。对该问题的一个解决方案是使用PP存储器204中的线程本地存储器将这些资源虚拟化以及随后改变线程中的指令以使用这些虚拟位置用于任意计算而非专用只读寄存器或其他非可还原的资源。对该问题的另一个可能的解决方案可以是限制PPU202的并行性使得线程可以仅执行在PPU202的单个SM310上,从而因为将总是在相同硬件位置启动线程而确保由这些寄存器所存储的索引总是相同的。然而该解决方案有缺点,即CTA执行被序列化,从而隐藏由着色器执行的并行性质所造成的任意错误,诸如竞态条件以及其他同步问题。
在一些实施例中,PPU202可包括允许程序员设置超时(timeout)限制的特征,如果超时限制期满而工作负载尚未被完全处理,则其自动中断正由PPU202所执行的任意程序(即工作负载)。该中断构成重新启动周期的完成。换句话说,超时限制在造成PPU202挂起的着色器程序412中的软件错误的情况下避免PPU202崩溃(crash)。当前所公开的技术相对于常规调试技术的一个优点是常规技术一般要求禁用PPU202的超时保护,因为当硬件被暂停时,操作系统认为工作负载是活动的。用户在断点花费的检查状态的时间不利于超时限制。然而在所公开的技术中,在工作负载的每个周期期间超时保护不需要禁用而是可保持使能(尽管可能需要增加超时限制以包括由硬件陷阱以及在恢复之前由CPU所实施的状态保存功能所造成的延迟),同时允许用户在无限持续的时间内检查调试器中的状态。
在一些实施例中,调试器450可配置为在随后的重新启动周期期间仅允许还原“进行中”的线程。换句话说,调试器450可配置为发出工作负载到PPU202并且等待停滞工作负载的处理的硬件陷阱发生。在线程处理中的该点处,调试器450已生成“进行中”的线程列表以及“逻辑上完成”的线程列表。在这些实施例中,在随后的周期期间,调试器450可配置为杀死PPU202尝试启动的、与“逻辑上完成”状态或“尚未启动”状态中的线程ID相关联的任意线程。该配置可防止“尚未启动”的线程在先前“进行中”的线程之前启动,如果不防止则可能造成随后的硬件陷阱发生在完全无关的代码段,将程序员的注意力从造成先前硬件陷阱的代码中的位置转移。因此,在每个随后周期期间,“进行中”的列表的大小不能无限增长。然而该技术的缺点是当相关线程“尚未启动”时,在“进行中”的线程停滞等待相关线程以执行的情况下,可能发生死锁。
图6示出了根据本公开的一个示范性实施例的、用于在非可抢占式GPU上实施交互调试的方法600。虽然结合图1-5的系统描述了方法步骤,但本领域的普通技术人员应理解的是,配置为以任意顺序实施该方法步骤的任意系统均在本公开的范围内。
方法600开始于步骤610,其中调试器450接收应用程序410和着色器程序412以使用诸如PPU202的非可抢占式GPU进行调试。PPU202可以是包括在调试平台中的仅有的图形处理器,并且既可用于调试目的又可用于屏幕更新。在一个实施例中,以诸如C++的高级编程语言来编写应用程序410而以诸如Cg的高级着色语言来编写着色器程序。在步骤612,调试器450拦截由应用程序410所生成以传送工作负载到PPU202的命令。调试器450生成列表以跟踪与工作负载相关联的线程。在步骤614,调试器450发出工作负载到PPU202,其使至少一个着色器程序412加载到PPU202上以处理工作负载。在一个实施例中,调试器450可能能够将着色器程序412直接加载到PPU202上以及直接向着色器程序412发出预定义的工作负载而不用在CPU102上执行源程序410。
在步骤616,调试器450确定是否已发生硬件陷阱。在一个实施例中,无论何时硬件陷阱已发生,均由PPU202告知设备驱动程序103,以及设备驱动程序103配置为当硬件陷阱已发生时通知调试器450。在另一个实施例中,调试器450轮询设备驱动程序103以确定PPU202的状态。如果调试器450确定硬件陷阱尚未发生,那么方法600前进到步骤626,在该处调试器450确定工作负载是否已结束处理。在步骤626,如果工作负载已结束处理那么方法600终止。然而,如果工作负载仍在处理中,那么方法600返回步骤616,在该处调试器450等待直到硬件陷阱发生为止,并且随后方法600前进到步骤618。在步骤618,调试器450保存与处理工作负载的任意活动线程相关联的线程状态和变量数据。在一个实施例中,调试器450从PPU202拷贝寄存器值以及将每线程本地存储器从PP存储器204拷贝到系统存储器104。调试器450还可将共享存储器从PP存储器204拷贝到系统存储器104。在步骤620,调试器450更新PPU202的处理器状态使得当PPU202恢复操作时,与当前工作负载相关联的所有当前活动线程和新创建的线程将被杀死。然后调试器450使PPU202恢复操作,最终导致由工作负载所生成的所有线程被杀死并释放PPU202以处理附加的工作负载。
在步骤622,调试器450确定程序员是否希望使用当前工作负载来恢复调试着色器程序412。例如,用于调试器450的GUI可包括指示着色器程序412应执行下一个指令的步骤命令,或者用于调试器450的GUI可包括指示着色器程序412应继续执行直到下一个硬件停止事件(即断点、异常、或失败的断言等等)为止的恢复命令。如果调试器450确定程序员尚未发出恢复执行的命令,那么调试器450等待,同时允许PPU202继续处理来自导致所更新的图像在显示设备110上显示的其他应用的图形工作负载。然而如果调试器450确定程序员已发出恢复命令,那么方法600前进到步骤624,在该处调试器450重新发出工作负载到PPU202。在一个实施例中,调试器450跟踪所生成以处理工作负载的线程的状态。如果先前发出工作负载期间线程已完成执行,那么线程可被杀死和跳过,或如果线程尚未发出,那么可从线程的开始来执行线程。然而,如果先前线程被部分执行(即“进行中”),那么调试器450可还原线程状态以及从与线程的先前中断点相对应的点来执行线程。方法600返回步骤616并且等待工作负载结束处理或等待下一个硬件陷阱。
总而言之,并行处理单元配置为实施着色器程序的硬件调试,且大致同时地生成和更新在显示设备上所显示的图像,这使用于开发环境的GUI能够由程序员所查看。经由并行处理单元对工作负载的迭代、部分处理允许调试器表现为在断点之间停滞了并行处理单元,而实际上中断了工作负载的处理以使图形更新能够由并行处理单元所处理。换句话说,调试器保存处理器状态和存储器,以当工作负载的执行由于硬件陷阱而停滞时,使并行处理单元即使在硬件不支持上下文切换的情况下也能够切换上下文。
虽然上述内容针对本发明的实施例,但可对本发明的其他和进一步的实施例进行设计而不脱离其基本范围。例如,可以以硬件或软件或硬件和软件的组合来实现本发明的各方面。本发明的一个实施例可实现为与计算机系统一起使用的程序产品。该程序产品的程序定义实施例的功能(包括本文所述的方法)并且可被包含在各种计算机可读存储介质上。示例性计算机可读存储介质包括但不限于:(i)非可写存储介质(例如,计算机内的只读存储器设备,诸如由CD-ROM驱动器可读的CD-ROM盘、闪存、ROM芯片或任意类型的固态非易失性半导体存储器),在其上永久地存储信息;以及(ii)可写存储介质(例如,软盘驱动器内的软盘或者硬盘驱动器,或者任意类型的固态随机存取半导体存储器),在其上存储可改变的信息。当承载针对本发明的功能的计算机可读指令时,这样的计算机可读存储介质是本发明的实施例。
上文已参考特定实施例对本公开进行描述。然而,本领域的普通技术人员应理解的是,可对其进行各种修改和改变,而不脱离如所附权利要求中所阐述的本公开的更宽的精神和范围。因此,上述描述和附图被认为是例示性的而非限制性意义。
Claims (10)
1.一种用于在非可抢占式图形处理单元上实施交互调试的方法,所述方法包括:
允许由应用程序将着色器程序加载到并行处理单元上,其中所述并行处理单元配置为渲染用于交互调试环境的图形用户界面以在耦连到所述并行处理单元的显示设备上显示;
拦截传送工作负载到所述并行处理单元的命令;
发出所述工作负载到所述并行处理单元用于在第一处理周期期间进行处理,其中所述工作负载由对包括在所述工作负载中的分开的输入数据加以并行执行的多个线程所处理,以及其中所述并行处理单元配置为当硬件陷阱由所述多个线程中的任意线程所触发时暂停所述第一处理周期;
检测在所述第一处理周期中的第一点期间已发生硬件陷阱;以及
进入重新启动循环,所述重新启动循环包括禁用所述第一处理周期以允许所述图形用户界面由所述并行处理单元加以更新,以及重新发出所述工作负载到所述并行处理单元用于在一个或多个随后的处理周期期间进行处理。
2.根据权利要求1所述的方法,其中硬件陷阱由断点、硬件异常、或失败的软件断言中的至少一个所触发。
3.根据权利要求1所述的方法,其中所述重新启动循环包括:
将与在所述第一点处正由所述并行处理单元所执行的每个线程相关联的状态存储在系统存储器中;
终止正由所述并行处理单元所执行的所有线程,使得所述并行处理单元能够处理传送到所述并行处理单元的任意附加的工作负载用于更新所述显示设备;以及
重新发出所述工作负载以由所述并行处理单元在随后的处理周期期间所处理,其中将与在所述随后的处理周期期间所启动的、在所述第一处理周期期间在所述第一点处正由所述并行处理单元所执行的任意线程相关联的状态还原到所述并行处理单元,以及从在所述第一处理周期期间暂停执行处的所述线程中的指令恢复所述线程的执行。
4.根据权利要求3所述的方法,其中所述重新启动循环进一步包括:
将与在所述第一点处正由所述并行处理单元所执行的每个线程相关联的每线程本地存储器存储在系统存储器中,其中与在所述随后的处理周期期间所启动的、在所述第一处理周期期间在所述第一点处正由所述并行处理单元所执行的任意线程相关联的每线程本地存储器还原到耦连到所述并行处理单元的并行处理存储器;
存储与正由所述并行处理单元所执行的每个线程相关联的每线程寄存器;以及
将与所述多个线程相关联的共享存储器存储在所述系统存储器中,其中共享存储器在所述随后的处理周期期间还原到所述并行处理存储器。
5.根据权利要求3所述的方法,进一步包括跟踪由所述并行处理单元所启动的所述多个线程中的每一个线程的所述状态,以在所述第一处理周期或任意随后的处理周期期间处理所述工作负载。
6.根据权利要求5所述的方法,其中特定线程的所述状态包括关于当在所述第一处理周期或任意随后的处理周期期间处理所述工作负载时所述特定线程是否尚未启动、正在执行或已逻辑上完成执行的指示。
7.根据权利要求6所述的方法,进一步包括当由所述并行处理单元启动新线程时使线程条目例程被执行,其中所述线程条目例程配置为:
如果所述新线程与指示所述新线程在先前的处理周期期间已逻辑上完成执行的线程状态相关联,那么终止所述新线程;
如果所述新线程与指示所述新线程在所述先前的处理周期期间正被执行的线程状态相关联,那么还原与所述新线程相关联的所述状态和每线程本地存储器,以及从所述着色器程序的中间指令恢复所述新线程的执行;以及
如果所述新线程与指示所述新线程在所述先前的处理周期期间尚未启动的线程状态相关联,那么从所述着色器程序的第一指令执行所述新线程。
8.根据权利要求6所述的方法,其中重新发出所述工作负载以由所述并行处理单元在随后的处理周期期间所处理包括,防止具有指示所述特定线程尚未启动的状态的任意线程在所述随后的处理周期期间启动,使得仅允许具有指示所述特定线程在所述第一处理周期期间在所述第一点处正被执行的状态的线程在所述随后的处理周期期间继续执行。
9.一种用于在非可抢占式图形处理单元上实施交互调试的系统,所述系统包括:
系统存储器,包括调试器和应用程序,所述应用程序包括一个或多个以调试为目标的着色器程序;
耦连到所述系统存储器的中央处理单元(CPU);
并行处理单元,配置为渲染用于交互调试环境的图形用户界面以在耦连到所述并行处理单元的显示设备上显示;以及
耦连到所述并行处理单元的图形存储器,
其中所述调试器当由所述CPU执行时,配置为:
允许由所述应用程序将所述着色器程序加载到所述并行处理单元上,
拦截传送工作负载到所述并行处理单元的命令;
发出所述工作负载到所述并行处理单元用于在第一处理周期期间进行处理,其中所述工作负载由对包括在所述工作负载中的分开的输入数据加以并行执行的多个线程所处理,以及其中所述并行处理单元配置为当硬件陷阱由所述多个线程中的任意线程所触发时暂停所述第一处理周期;
检测在所述第一处理周期中的第一点期间已发生硬件陷阱;以及
进入重新启动循环,所述重新启动循环包括禁用所述第一处理周期以允许所述图形用户界面由所述并行处理单元加以更新,以及重新发出所述工作负载到所述并行处理单元用于在一个或多个随后的处理周期期间进行处理。
10.根据权利要求9所述的系统,其中所述重新启动循环包括:
将与在所述第一点处正由所述并行处理单元所执行的每个线程相关联的状态存储在系统存储器中;
终止正由所述并行处理单元所执行的所有线程,使得所述并行处理单元能够处理传送到所述并行处理单元的任意附加的工作负载用于更新所述显示设备;以及
重新发出所述工作负载以由所述并行处理单元在随后的处理周期期间所处理,其中将与在所述随后的处理周期期间所启动的、在所述第一处理周期期间在所述第一点处正由所述并行处理单元所执行的任意线程相关联的状态还原到所述并行处理单元,以及从在所述第一处理周期期间暂停执行处的所述线程中的指令恢复所述线程的执行。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/417,019 | 2012-03-09 | ||
US13/417,019 US8572573B2 (en) | 2012-03-09 | 2012-03-09 | Methods and apparatus for interactive debugging on a non-preemptible graphics processing unit |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103309786A CN103309786A (zh) | 2013-09-18 |
CN103309786B true CN103309786B (zh) | 2016-01-27 |
Family
ID=49029715
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310075815.1A Active CN103309786B (zh) | 2012-03-09 | 2013-03-11 | 用于在非可抢占式图形处理单元上交互调试的方法和装置 |
Country Status (4)
Country | Link |
---|---|
US (1) | US8572573B2 (zh) |
CN (1) | CN103309786B (zh) |
DE (1) | DE102013202495A1 (zh) |
TW (1) | TWI498728B (zh) |
Families Citing this family (37)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8776025B2 (en) * | 2011-11-04 | 2014-07-08 | International Business Machines Corporation | Integrated debugger and code coverage tool |
US9087153B2 (en) | 2011-11-04 | 2015-07-21 | International Business Machines Corporation | Code coverage framework |
US9292414B2 (en) | 2012-11-26 | 2016-03-22 | Nvidia Corporation | System, method, and computer program product for debugging graphics programs locally utilizing a system with a single GPU |
US8943477B2 (en) | 2012-12-18 | 2015-01-27 | International Business Machines Corporation | Debugging a graphical user interface code script with non-intrusive overlays |
US8938718B2 (en) * | 2012-12-18 | 2015-01-20 | International Business Machines Corporation | Managing window focus while debugging a graphical user interface program |
US9619364B2 (en) * | 2013-03-14 | 2017-04-11 | Nvidia Corporation | Grouping and analysis of data access hazard reports |
US20140281730A1 (en) * | 2013-03-14 | 2014-09-18 | Cadence Design Systems, Inc. | Debugging session handover |
US9087202B2 (en) * | 2013-05-10 | 2015-07-21 | Intel Corporation | Entry/exit architecture for protected device modules |
US9799087B2 (en) * | 2013-09-09 | 2017-10-24 | Apple Inc. | Shader program profiler |
US9405575B2 (en) | 2013-09-09 | 2016-08-02 | Apple Inc. | Use of multi-thread hardware for efficient sampling |
CN103678135A (zh) * | 2013-12-25 | 2014-03-26 | 普元信息技术股份有限公司 | 大数据环境下实现跨进程与跨线程调试的系统与方法 |
US9535815B2 (en) * | 2014-06-04 | 2017-01-03 | Nvidia Corporation | System, method, and computer program product for collecting execution statistics for graphics processing unit workloads |
US9996386B2 (en) * | 2014-07-23 | 2018-06-12 | Intel Corporation | Mid-thread pre-emption with software assisted context switch |
US9996354B2 (en) * | 2015-01-09 | 2018-06-12 | International Business Machines Corporation | Instruction stream tracing of multi-threaded processors |
US9881351B2 (en) | 2015-06-15 | 2018-01-30 | Microsoft Technology Licensing, Llc | Remote translation, aggregation and distribution of computer program resources in graphics processing unit emulation |
US9786026B2 (en) | 2015-06-15 | 2017-10-10 | Microsoft Technology Licensing, Llc | Asynchronous translation of computer program resources in graphics processing unit emulation |
US9842376B2 (en) * | 2015-09-29 | 2017-12-12 | Qualcomm Incorporated | Graphics processing unit preemption with pixel tile level granularity |
US10134103B2 (en) | 2015-10-23 | 2018-11-20 | Qualcomm Incorporated | GPU operation algorithm selection based on command stream marker |
US9940218B2 (en) * | 2016-02-15 | 2018-04-10 | International Business Machines Corporation | Debugging optimized code using fat binary |
CN107038060B (zh) * | 2016-09-29 | 2021-02-23 | 创新先进技术有限公司 | 一种页面着色器代码调试方法、装置 |
US10073759B2 (en) * | 2016-09-29 | 2018-09-11 | International Business Machines Corporation | Identification and handling of nested breakpoints during debug session |
US10885676B2 (en) * | 2016-12-27 | 2021-01-05 | Samsung Electronics Co., Ltd. | Method and apparatus for modifying display settings in virtual/augmented reality |
US20180329742A1 (en) * | 2017-05-10 | 2018-11-15 | Mediatek Inc. | Timer-assisted frame running time estimation |
US10310830B2 (en) * | 2017-06-02 | 2019-06-04 | Apple Inc. | Shader profiler |
US9934287B1 (en) * | 2017-07-25 | 2018-04-03 | Capital One Services, Llc | Systems and methods for expedited large file processing |
WO2019071626A1 (zh) * | 2017-10-09 | 2019-04-18 | 华为技术有限公司 | 一种刷新显示异常处理的方法及终端 |
TWI659361B (zh) * | 2018-01-09 | 2019-05-11 | 國立中央大學 | 支援多執行緒/並行程式除錯之方法、電腦可讀取之記錄媒體及電腦程式產品 |
US10671495B2 (en) * | 2018-01-29 | 2020-06-02 | Hewlett Packard Enterprise Development Lp | Disaster recovery rehearsal of a workload |
DE102019101853A1 (de) * | 2018-01-31 | 2019-08-01 | Nvidia Corporation | Dynamische Partitionierung von Ausführungsressourcen |
CN108804315B (zh) * | 2018-05-23 | 2022-03-11 | 北京五八信息技术有限公司 | 应用于动态开发的测试方法、装置、电子设备及存储介质 |
US10628909B2 (en) | 2018-06-01 | 2020-04-21 | Apple Inc. | Graphics processing unit resource dependency viewer |
US10846088B2 (en) * | 2018-08-21 | 2020-11-24 | Arm Limited | Control of instruction execution in a data processor |
US10997771B2 (en) | 2018-08-29 | 2021-05-04 | Intel Corporation | Position-based rendering apparatus and method for multi-die/GPU graphics processing |
US10922203B1 (en) * | 2018-09-21 | 2021-02-16 | Nvidia Corporation | Fault injection architecture for resilient GPU computing |
US10866883B2 (en) * | 2018-11-29 | 2020-12-15 | Micro Focus Llc | Detection of graphical user interface element of application undergoing functional testing |
CN112256435B (zh) * | 2020-11-03 | 2023-05-05 | 成都海光微电子技术有限公司 | 用于图形处理器的工作组的分配方法以及图形处理器 |
US20220413849A1 (en) * | 2021-06-28 | 2022-12-29 | Advanced Micro Devices, Inc. | Providing atomicity for complex operations using near-memory computing |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6014514A (en) * | 1995-05-15 | 2000-01-11 | Sun Microsystems, Inc. | System for generating and graphically displaying call stack information for processing elements in a parallel processing system |
US6223338B1 (en) * | 1998-09-30 | 2001-04-24 | International Business Machines Corporation | Method and system for software instruction level tracing in a data processing system |
CN1332409A (zh) * | 2000-07-05 | 2002-01-23 | 先进数字芯片股份有限公司 | 易于测试和调试程序的中央处理单元 |
CN1959653A (zh) * | 2005-11-03 | 2007-05-09 | 国际商业机器公司 | 调试计算机程序的装置与方法 |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5361352A (en) * | 1989-11-27 | 1994-11-01 | Hitachi, Ltd. | Method for debugging in a parallel computer system and system for the same |
US5255385A (en) * | 1990-02-26 | 1993-10-19 | Hitachi, Ltd. | Method of testing program, and compiler and program testing tool for the method |
JPH07113912B2 (ja) * | 1991-05-31 | 1995-12-06 | 富士ゼロックス株式会社 | 分散型情報処理システムのデバッグ方式 |
US5799142A (en) * | 1994-09-12 | 1998-08-25 | Nec Corporation | Debugging method and debugging system for multi-task programs |
US5805890A (en) * | 1995-05-15 | 1998-09-08 | Sun Microsystems, Inc. | Parallel processing system including arrangement for establishing and using sets of processing nodes in debugging environment |
JP3290567B2 (ja) * | 1995-08-24 | 2002-06-10 | 富士通株式会社 | プロファイル計装方法 |
US5862381A (en) * | 1996-11-26 | 1999-01-19 | International Business Machines Corporation | Visualization tool for graphically displaying trace data |
US20020087949A1 (en) * | 2000-03-03 | 2002-07-04 | Valery Golender | System and method for software diagnostics using a combination of visual and dynamic tracing |
US8312435B2 (en) * | 2000-12-26 | 2012-11-13 | Identify Software Ltd. (IL) | System and method for conditional tracing of computer programs |
US20020199173A1 (en) * | 2001-01-29 | 2002-12-26 | Matt Bowen | System, method and article of manufacture for a debugger capable of operating across multiple threads and lock domains |
US8079037B2 (en) * | 2005-10-11 | 2011-12-13 | Knoa Software, Inc. | Generic, multi-instance method and GUI detection system for tracking and monitoring computer applications |
US8706937B2 (en) * | 2011-03-02 | 2014-04-22 | Texas Instruments Incorporated | Method and system of debugging multicore bus transaction problems |
-
2012
- 2012-03-09 US US13/417,019 patent/US8572573B2/en active Active
-
2013
- 2013-02-15 DE DE102013202495A patent/DE102013202495A1/de not_active Withdrawn
- 2013-03-08 TW TW102108211A patent/TWI498728B/zh active
- 2013-03-11 CN CN201310075815.1A patent/CN103309786B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6014514A (en) * | 1995-05-15 | 2000-01-11 | Sun Microsystems, Inc. | System for generating and graphically displaying call stack information for processing elements in a parallel processing system |
US6223338B1 (en) * | 1998-09-30 | 2001-04-24 | International Business Machines Corporation | Method and system for software instruction level tracing in a data processing system |
CN1332409A (zh) * | 2000-07-05 | 2002-01-23 | 先进数字芯片股份有限公司 | 易于测试和调试程序的中央处理单元 |
CN1959653A (zh) * | 2005-11-03 | 2007-05-09 | 国际商业机器公司 | 调试计算机程序的装置与方法 |
Non-Patent Citations (1)
Title |
---|
VIDA: Visual Interactive Debugging;Dan Hao等;《IEEE》;20090524;第583-586页 * |
Also Published As
Publication number | Publication date |
---|---|
CN103309786A (zh) | 2013-09-18 |
US8572573B2 (en) | 2013-10-29 |
DE102013202495A1 (de) | 2013-09-12 |
US20130238938A1 (en) | 2013-09-12 |
TWI498728B (zh) | 2015-09-01 |
TW201351136A (zh) | 2013-12-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103309786B (zh) | 用于在非可抢占式图形处理单元上交互调试的方法和装置 | |
CN102648449B (zh) | 一种用于处理干扰事件的方法和图形处理单元 | |
CN103207774B (zh) | 用于解决线程发散的方法和系统 | |
TWI490782B (zh) | 來源運算元收集器快取的方法和裝置 | |
TWI529626B (zh) | 在複數執行緒處理單元中的效率式記憶體虛擬化 | |
CN103365631B (zh) | 用于存储器访问的动态库模式寻址 | |
TWI512466B (zh) | 在複數執行緒處理單元中的效率式記憶體虛擬化 | |
KR101477882B1 (ko) | 서브버퍼 오브젝트 | |
TWI496076B (zh) | 上下文狀態管理技術 | |
US8782611B1 (en) | Visual inspection and debugging of threads in parallel computing systems | |
TWI498819B (zh) | 執行成型記憶體存取作業的系統和方法 | |
CN103197953A (zh) | 推测执行和回滚 | |
CN103729167A (zh) | 用于改进多线程处理单元中的性能的技术 | |
CN103777925A (zh) | 多线程处理单元中的高效存储器虚拟化 | |
CN104050033A (zh) | 用于有索引的屏障的硬件调度的系统和方法 | |
CN103425533A (zh) | 用于管理嵌套执行流的方法和系统 | |
CN103226481A (zh) | 自动从属任务启动 | |
CN105302524A (zh) | 通过标记cpu流量为特殊来避免死锁 | |
CN104050032A (zh) | 用于有条件的屏障和急迫的屏障的硬件调度的系统和方法 | |
CN103870213A (zh) | 经由管线化的状态包触发性能事件捕获 | |
TW201337829A (zh) | 暫存器檔案型讀取 | |
CN103885903A (zh) | 用于经由纹理硬件实施存储器访问操作的技术 | |
CN103197918B (zh) | 多通道时间片组 | |
CN103294449B (zh) | 发散操作的预调度重演 | |
CN103218259A (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 |