一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

用于启用本地检查点和恢复的错误遏制的制作方法

2023-01-14 15:23:43 来源:中国专利 TAG:


1.各个实施例总体上涉及并行处理计算架构,并且更具体地涉及用于启用本地检查点和恢复的错误遏制。


背景技术:

2.高性能计算(hpc)系统是大型计算机系统,这些系统包括数百或数千个联网计算节点,在此被称为操作系统(os)节点。每个os节点通常包括一个或更多个处理单元(诸如中央处理单元(cpu)和/或图形处理单元(gpu))以及一个或更多个存储器系统等。这样的hpc系统(具有大量联网os节点)可以被部署以处理大量数据并且以单个os节点无法实现的速度执行复杂的计算。
3.大型hpc系统的一个限制是这种系统易受某些瞬态硬件错误影响,这些硬件错误导致存储在一个或更多个os节点的存储器系统中的数据的损坏。这些瞬态硬件错误在本文中被称为存储器错误。当粒子撞击存储单元时,发生一种此类型的存储器错误,从而将存储单元的值从0变成1或从1变成0。这可以起因于由于宇宙辐射、热中子、α粒子撞击等引起的高能质子和/或中子撞击。这种类型的软错误持续,直到在存储器单元中存储不同的值。从存储器位置加载损坏数据的os节点可以使用损坏数据执行计算,或者可以执行损坏数据作为指令,其可以静默地损坏其他存储器位置,即,这样的损坏可能不是可检测的。此外,如果os节点与hpc系统中的其他os节点交换数据,则其他os节点同样可能被损坏。
4.用于从存储器错误恢复的一种方法是应用软件或系统软件跨hpc系统中的所有os节点周期性地拍摄系统状态、os节点状态和/或应用状态的快照并且将该快照存储在文件系统中。该快照在本文中被称为全局检查点。当os节点之一检测到存储器错误时,停止所有os节点,将最近的全局检查点加载到os节点,并且os节点从最后的全局检查点恢复执行。用于全局检查点存储和恢复的这种方法的一个缺点是,随着os节点的数量和大小增加,故障之间的平均时间减少,而存储全局检查点所需的时间量增加。因此,随着hpc系统大小增加,存储全局检查点消耗更多的时间和处理能力,并且在存储器错误发生之前执行应用软件几乎没有前进进程,从而导致恢复最近的全局检查点。
5.对全局检查点和恢复的改进是用本地检查点和恢复来增强全局检查点和恢复。通过本地检查点和恢复,hpc系统中的每个os节点或其部分的状态的单独的本地快照和快照被存储在文件系统中。该快照在本文中被称为本地检查点。当os节点之一检测到存储器错误时,仅挂起受影响的 os节点,将最近的本地检查点加载到os节点,并且os节点从最后的本地检查点恢复执行。相对于全局检查点和恢复方法,存储和加载本地检查点通常改善系统吞吐量并有助于应用软件的前进进程。不能经由本地检查点和恢复来解决的软件错误仍然可以经由全局检查点和恢复来解决。
6.在一个示例中,错误的性能成本可以是hpc系统中每个节点一个小时的吞吐量损失,该hpc系统包括1000个节点并且具有每个节点1000 小时的平均故障间隔时间(mtbf)。在这样的hpc系统中,预期每个节点平均每1000小时经历一次错误。hpc系统被分派应用软
件程序的任务,其中整个作业执行10,000小时。在全局检查点和恢复的情况下,任何节点中的故障导致恢复全局检查点。给定mtbf为每节点1000小时和包括1000 个节点的hpc系统,hpc经历每小时一个错误的平均值。因此,随着每小时的经过,节点恢复到全局检查点并失去一个小时的工作。即使只有一个节点经历错误,所有的节点也会受到惩罚。在最坏情况下,hpc系统没有取得前进进程,因为应用软件程序执行一小时,一个或更多个节点经历错误,并且所有节点返回到表示应用软件程序的开始的最后一个全局检查点。相比之下,通过本地检查点设置,给定10,000小时的执行时间和1000 小时的mtbf,每个节点在作业的执行时间上平均经历10个错误。结果,每个节点独立地经历10小时的吞吐量损失,每个节点的总执行时间为 10,010小时。
7.用于本地检查点存储和恢复的这种方法的缺点是用于gpu的本地检查点和恢复技术通常使用在cpu上执行的代码来存储和恢复检查点。结果,在gpu内核启动之间捕获和存储检查点,其中内核可执行许多小时。cpu 上的本地检查点恢复限制cpu在内核完成gpu上的执行之后检查错误。本地检查点和恢复可以每n个内核执行,其中n可以是大于或等于1的任何数。如果检测到任何错误,则在本地恢复受影响的内核。系统中的其他 cpu和gpu不受影响。然而,在受影响内核的执行期间,gpu可能从发生错误的时间到本地检查点恢复的时间已经损坏状态。进一步,在一个 gpu上执行的内核的损坏可负面地影响其他gpu,例如当执行损坏的内核的gpu与其他gpu通信时。
8.避免gpu间损坏的一种方式是建立gpu经由cpu进行通信而不是彼此直接对话的系统。然而,这种方法限制了hpc系统的关键优点,因为 gpu到gpu通信相对于gpu到cpu通信通常具有更高的带宽。进一步,如果gpu不具有错误遏制能力,则gpu可能在没有检测到的情况下破坏 cpu状态,诸如使用损坏的数据来更新cpu所使用的存储器的gpu。在 gpu上没有错误遏制的情况下,不能保证本地检查点和恢复产生正确的结果。鉴于本地检查点和恢复的这些限制,维持cpu-gpu共享或gpu间共享的完整性通常需要采用全局检查点和恢复,从而导致较小的吞吐量或没有前进进程,或者构建具有较长mtbf的较小、性能较低的hpc系统。
9.如前所述,在本领域中所需要的是用于从大型计算系统中的存储器故障中恢复的更有效的技术。


技术实现要素:

10.本公开的各个实施例阐述了一种用于处理存储器错误的计算机实现的方法。所述方法包括使得包括第一存储器加载操作的第一指令由多个存储器客户端中包括的第一存储器客户端执行。该方法还包括接收与存储器加载操作相关联的数据被损坏的指示。该方法还包括响应于接收到该指示: (1)禁用第一存储器客户端执行存储器存储操作,以及(2)发起针对第一存储器客户端的一个或更多个暂缓操作。进一步,多个存储器客户端中包括的第二存储器客户端在第一存储器客户端被禁用时继续执行指令。
11.其他实施例包括但不限于实现所公开的技术的一个或更多个方面的系统、以及包括用于执行所公开的技术的一个或更多个方面的指令的一个或更多个计算机可读介质、以及用于执行所公开的技术的一个或更多个方面的方法。
12.所公开的技术相对于现有技术的至少一个技术优点是,利用所公开的技术,本地检查点和恢复是以相对于现有方法更精细的粒度来执行的。当 gpu内的存储器客户端检测
到存储器错误时,仅中止受影响的存储器客户端,将最近的本地检查点加载到存储器客户端,并且存储器客户端从最后本地检查点恢复执行。进一步,由gpu并且针对每个存储器客户端执行本地检查点和恢复,导致更快地检测到在gpu程序的执行期间发生的存储器错误。所公开的技术的另一技术优点是,当gpu内的存储器客户端检测到存储器错误时,防止存储器客户端将数据存储或以其他方式向外传输到其他存储器位置、gpu中的其他存储器客户端、其他gpu或cpu。因此,在一个gpu中发生的存储器传播到os节点的其他部分或传播到其他os 节点的机会相对于现有方法减少。这些优点代表优于现有技术方法的一个或更多个技术改进。
附图说明
13.为了更详细地理解上述各种实施例的相关特征,可以通过参考各种实施例(其中一些已在附图中说明)对上述简要概括的本发明概念进行更具体的描述。但是,需要注意的是,所附的附图只说明发明概念的典型实施例,因此并不是以任何方式限制范围,还存在其他同样有效的实施例。
14.图1是被配置成用于实施各个实施例的一个或更多个方面的计算机系统的框图;
15.图2是根据各个实施例的包括在图1的并行处理子系统中的并行处理单元(ppu)的框图;
16.图3是根据各个实施例的包括在图2的并行处理单元(ppu)中的通用处理集群(gpc)的框图;
17.图4是根据各个实施例的图2的ppu和gpc中所包括的存储器访问系统的框图;
18.图5是根据各个实施例的用于经由图2的ppu存储本地检查点的方法步骤的流程图;
19.图6是根据各个实施例的用于经由图2的ppu来处理存储器错误的方法步骤的流程图;以及
20.图7是根据各个实施例的用于驱逐包括存储器错误的高速缓存行的方法步骤的流程图。
具体实施方式
21.在以下描述中,阐述了许多具体细节以便提供对不同实施例的更彻底的理解。然而,对于本领域技术人员将显而易见的是,可以在没有这些具体细节中的一个或更多个的情况下实践本发明构思。
22.如在此所描述的,gpu在gpu内的存储器客户端的指令边界处执行细粒度本地检查点和恢复。因此,相对于在内核或功能边界处执行应用状态的检查点和恢复的先前技术,所描述的技术在更精细的边界处存储微架构状态。如本文所定义的,存储器客户端包括执行指令和/或执行从存储器加载数据和/或将数据存储到存储器的其他操作的任何组件。软件恢复驱动器周期性地将微架构状态存储为gpu中的存储器客户端的本地检查点。更具体地,软件恢复驱动器利用gpu的计算指令级抢先(cilp)特征来暂缓gpu程序指令边界处的执行。当gpu内的存储器客户端已经暂缓时,软件恢复驱动器存储包括存储器客户端的微架构状态的检查点。如本文进一步描述的,存储器客户端包括对任何存储器执行存储器加载操作
和/或存储器存储操作的任何系统组件。存储器客户端包括但不限于流式多处理器 (sm)、全局常量高速缓存(gcc)、复制引擎434、上下文切换器等。当存储器客户端检测到存储器错误时,存储器客户端防止进一步数据被存储器客户端存储或传输到存储器系统,从而防止存储器错误传播到其他存储器客户端、到其他gpu或到cpu。存储器客户端还阻止上下文切换和存储器屏障以遏制存储器错误。存储器客户端发起一个或更多个暂缓操作以从存储器客户端中的任何指令队列排出指令,以便刷新任何待决存储器操作。因此,存储器客户端保持先前本地检查点的完整性,从而使得软件恢复驱动器能够可靠地从先前本地检查点重启。存储器客户端存储包括与存储器错误相关联的数据的错误日志数据,通知软件恢复驱动器和暂缓。软件恢复驱动器随后访问错误日志数据以确定存储器错误的性质,恢复先前的本地检查点,并且重新启动暂缓的存储器客户端。
23.系统概述
24.图1为示出被配置为实现各个实施例的一个或更多个方面的计算机系统100的框图。如图所示,计算机系统100包括但不限于中央处理单元(cpu) 102、系统存储器104,其经由存储器桥105和通信路径113耦连至并行处理子系统112。存储器桥105进一步地经由通信路径106耦连至i/o(输入 /输出)桥107,i/o桥107又耦连至交换机116。
25.在操作中,i/o桥107被配置为从输入设备108(诸如键盘或鼠标) 接收用户输入信息,并经由通信路径106和存储器桥105将输入信息转发给cpu 102进行处理。交换机116被配置为在i/o桥107和计算机系统100 的其他组件(如网络适配器118和各种附加卡120和121)之间提供连接。
26.还如图所示,i/o桥107耦合至系统盘114,系统盘114可以被配置为存储内容、应用程序和数据,以供cpu 102和并行处理子系统112使用。一般来说,系统盘114为应用程序和数据提供非暂时性存储器,可包括固定的或可移除的硬盘驱动器、闪存设备和cd-rom(光盘只读存储器)、 dvd-rom(数字多功能盘-rom)、蓝光、hd-dvd(高清dvd)或其他磁、光或固态存储设备。最后,虽然未明确示出,其他组件(诸如通用串行总线或其他端口连接、光盘驱动器、数字多功能盘驱动器、胶片录制设备等)也可以连接到i/o桥107。
27.在各个实施例中,存储器桥105可以是北桥芯片,i/o桥107可以是南桥芯片。此外,可以用任何技术上合适的协议(包括但不限于agp(加速图形端口)、超文本传输(hypertransport)或本领域公知的任何其他总线或点对点通信协议)在计算机系统100内实现通信路径106和113以及其他通信路径。
28.在一些实施例中,并行处理子系统112包括图形子系统,该图形子系统向显示装置110输送像素,该显示装置可以是任何常规的阴极射线管、液晶显示器、发光二极管显示器等。在这种实施例中,并行处理子系统112 合并了针对图形和视频处理优化的电路,包括例如视频输出电路。如下图 2中更详细地描述的,此类电路可以跨并行处理子系统112中包括的一个或更多个并行处理单元(ppu)合并。在其他实施例中,并行处理子系统112合并了针对通用和/或计算处理而优化的电路。同样,此类电路可以跨并行处理子系统112中包括的一个或更多个ppu合并,这些ppu被配置为执行此类通用和/或计算操作。在其他实施例中,并行处理子系统112中包括的一个或更多个ppp可配置为执行图形处理、通用处理和计算处理操作。系统存储器104包括至少一个设备驱动器103,该驱动程序配置为管理并行处理子系统112中的一个或更多个ppu的处理操作。
29.在各种实施例中,并行处理子系统112可与图1的一个或更多个其他元素集成,以形成单个系统。例如,并行处理子系统112可以与cpu 102 和其他连接电路集成在单个芯片上,以形成片上系统(“soc”)。
30.应理解,本文所示的系统是说明性的,并且变化和修改是可能的。连接拓扑(包括网桥的数量和布置、cpu 102的数量和并行处理子系统112 的数量)可以根据需要进行修改。例如,在一些实施例中,系统存储器104 可以直接连接到cpu 102,而不是通过存储器桥105连接到cpu 102,并且其他设备将经由存储器桥105和cpu 102与系统存储器104进行通信。在其他替代拓扑中,并行处理子系统112可以连接到i/o桥107或直接连接到cpu 102,而不是连接到存储器桥105。在其他实施例中,i/o桥107 和存储器桥105可以集成到单个芯片中,而不是作为一个或更多个分立器件存在。最后,在某些实施例中,图1所示的一个或更多个组件可以不存在。例如,可以消除交换机116,网络适配器118和附加卡120、121会直接连接到i/o桥107。
31.图2是根据各个实施例的图1的并行处理子系统112中包括的并行处理单元(ppu)202的框图。尽管图2描述了一个ppu 202,如上文所述,但并行处理子系统112可以包括任意数量的ppu 202。如图所示,ppu 202 耦合到本地并行处理(pp)存储器204。ppu 202和pp存储器204可采用一个或更多个集成电路器件实现,例如可编程处理器、应用专用集成电路(asic)或存储器设备,或者任何其他技术上可行的方式。
32.一些实施例中,ppu 202包括图形处理单元(“gpu”),该gpu可配置为实现图形渲染管线,以基于cpu 102和/或系统存储器104提供的图形数据执行与生成像素数据相关的各种操作。在处理图形数据时,pp存储器 204可用作存储一个或更多个常规帧缓冲区(如果需要,还可以存储一个或更多个其他渲染目标)的图形存储器。除其他事项外,pp存储器204可用于存储和更新像素数据,并将最终像素数据或显示帧传输至显示设备110以进行显示。在一些实施例中,ppu 202也可以配置为通用处理和计算操作。
33.在操作中,cpu 102是计算机系统100的主处理器,控制和协调其他系统组件的操作。特别是,cpu 102发出控制ppu 202操作的命令。在一些实施例中,cpu 102将用于ppu 202的命令流写入数据结构(图1或图 2未明确示出)中,该数据结构可以位于系统存储器104、pp存储器204 或cpu 102和ppu 202两者可访问的另一个存储位置。指向数据结构的指针被写入推送缓冲区以发起对数据结构中命令流的处理。ppu 202从推送缓冲区读取命令流,然后相对于cpu 102的操作异步地执行命令。在生成多个推送缓冲区的实施例中,应用程序可以经由设备驱动器103为每个推送缓冲区指定执行优先级,以控制不同推送缓冲区的调度。
34.还如图所示,ppu 202包括i/o(输入/输出)单元205,其经由通信路径113和存储器桥105与计算机系统100的其余部分进行通信。i/o单元 205生成数据包(或其他信号)以在通信路径113上传输,并且还从通信路径113接收所有传入数据包(或其他信号),将传入数据包定向到ppu 202 的相应组件。例如,与处理任务相关的命令可定向到主机接口206,而与存储器操作相关的命令(例如,从pp存储器204读取或写入pp存储器204) 可以定向到交叉开关单元210。主机接口206读取每个推送缓冲区,并将存储在推送缓冲区中的命令流发送到前端212。
35.如上结合图1所述,ppu 202与计算机系统100的其余部分的连接可以变化。在一些
实施例中,并行处理子系统112(其包括至少一个ppu 202) 作为附加卡实现,其可插入计算机系统100的扩展槽中。在其他实施例中, ppu 202可采用总线桥集成在单个芯片上,诸如存储器桥105或i/o桥107。同样,在其他实施例中,ppu 202的一些或全部元件可与cpu 102一起被包括在单个集成电路或片上系统(soc)中。
36.在操作中,前端212将从主机接口206接收的处理任务发送到任务/ 工作单元207内的工作分配单元(未示出)。工作分配单元接收指向处理任务的指针,这些任务被编码为任务元数据(tmd)并存储在存储器中。指向tmd的指针包括在命令流中,该命令流存储为推送缓冲区,并由前端单元212从主机接口206接收。可以编码为tmd的处理任务包括与要处理的数据相关联的索引,以及定义如何处理数据的状态参数和命令。例如,状态参数和命令可以定义要对数据执行的程序。任务/工作单元207从前端212接收任务,并确保在发起每个tmd指定的处理任务之前将gpc 208 配置为有效状态。可以为每个tmd指定优先级,该优先级用于调度处理任务的执行。处理任务也可以从处理集群阵列230接收。可选地,tmd可以包括控制是否将tmd添加到处理任务列表(或指向处理任务的指针列表)的头部或尾部,从而提供对执行优先级的另一级控制的参数。
37.ppu 202基于处理集群阵列230有利地实现了高度并行处理体系架构,处理集群阵列230包括一组c个通用处理集群(gpc)208,其中c≥1。每个gpc 208能够同时执行大量(例如数百或数千个)线程,其中每个线程都是程序的实例。在各种应用中,可以分配不同的gpc 208来处理不同类型的程序或执行不同类型的计算。gpc 208的分配可根据每种类型的程序或计算产生的工作负载而不同。
38.存储器接口214包括一组d个分区单元215,其中d≥1。每个分区单元215耦合到驻留在pp存储器204内的一个或更多个动态随机存取存储器(dram)220。在一个实施例中,分区单元215的数量等于dram 220 的数量,每个分区单元215耦合到不同的dram 220。在其他实施例中,分区单元215的数量可以与dram 220的数量不同。本领域普通技术人员可以认识到,dram 220可更换为任何其他技术上合适的存储设备。在操作中,各种渲染目标(诸如纹理映射和帧缓冲区)可以跨dram 220存储,允许分区单元215并行写入每个渲染目标的部分,从而有效地使用pp存储器204的可用带宽。
39.给定的gpc 208可以处理要写入pp存储器204中的任何dram 220 的数据。交叉开关单元210被配置为将每个gpc 208的输出路由到任何分区单元215的输入或任何其他gpc 208以进行进一步处理。gpc 208经由交叉开关单元210与存储器接口214通信,以从各个dram 220读取或写入各个dram 220。在一个实施例中,交叉开关单元210除了经由存储器接口214连接到pp存储器204之外,还连接到i/o单元205,从而使不同 gpc 208中的处理核能够与系统存储器104或非ppu 202本地的其他存储器进行通信。在图2的实施例中,交叉开关单元210与i/o单元205直接连接。在各种实施例中,交叉开关单元210可以使用虚拟通道分隔gpc 208 和分区单元215之间的业务流。在各个实施例中,交叉开关单元210可以由包括但不限于片上网络的任何网络拓扑结构来替换或增强。
40.同样,gpc 208可以被编程为执行与各种应用相关的处理任务,包括但不限于线性和非线性数据变换、视频和/或音频数据的过滤、建模操作(例如,应用物理定律以确定对象的位置、速度和其他属性)、图像渲染操作(例如,曲面细分着色程序、顶点着色程序、几何着色程序和/或像素/片段着色程序)、通用计算操作等。在操作中,ppu 202被配置为将数据从
系统存储器104和/或pp存储器204传输到一个或更多个片上存储器单元,处理该数据,并将结果数据写回系统存储器104和/或pp存储器204。然后,其他系统组件(包括cpu 102、并行处理子系统112中的另一ppu 202或计算机系统100中的另一并行处理子系统112)可以访问该结果数据。
41.如上所述,并行处理子系统112中可包括任意数量的ppu 202。例如,单个附加卡上可提供多个ppu 202,或者多个附加卡可以连接到通信路径 113,或者一个或更多个ppu 202可以集成到桥芯片中。多ppu系统中的 ppu 202可彼此相同或不同。例如,不同的ppu 202可能具有不同数量的处理核和/或不同数量的pp存储器204。在存在多个ppu 202的实现方式中,这些ppu可以并行操作,以比采用单个ppu 202所可能的吞吐量更高的吞吐量处理数据。包括一个或更多个ppu 202的系统可以以各种配置和形式因素实现,包括但不限于台式机、笔记本电脑、手持式个人计算机或其他手持设备、服务器、工作站、游戏机、嵌入式系统等。
42.图3是根据各个实施例的图2的并行处理单元(ppu)202中包括的通用处理集群(gpc)208的框图。在操作中,gpc 208可以被配置为并行执行大量线程以执行图形、通用处理和/或计算操作。如本文所用,“线程”是指在特定输入数据集上执行的特定程序的实例。在一些实施例中,单指令多数据(simd)指令发出技术用于支持大量线程的并行执行,而无需提供多个独立的指令单元。在其他实施例中,单指令多线程(simt)技术用于使用被配置为向gpc 208中的一组处理引擎发出指令的通用指令单元来支持大量通常同步的线程的并行执行。与simd执行体系(其中所有处理引擎通常执行相同的指令)不同,simt执行允许不同的线程更容易通过给定程序遵循不同的执行路径。本领域普通技术人员应当认识到,simd 处理体系表示simt处理体系的功能子集。
43.gpc 208的操作经由管线管理器305控制,该管线管理器将从任务/ 工作单元207内的工作分配单元(未示出)接收的处理任务分配到一个或更多个流式多处理器(sm)310。管线管理器305还可以配置为通过指定 sm 310输出的经处理的数据的目的地来控制工作分配交叉开关330。
44.在一个实施例中,gpc 208包括一组m个sm 310,其中m≥1。此外,每个sm 310包括一组功能执行单元(未示出),诸如执行单元和加载存储单元。特定于任何功能执行单元的处理操作都可以是管线化的,这样就使得能够在前面的指令完成执行之前发出新的指令以执行。可以提供给定sm 310中功能执行单元的任何组合。在各种实施例中,功能执行单元可被配置为支持各种不同的操作,包括整数和浮点算术(例如,加法和乘法)、比较运算、布尔运算(and、or、xor)、位移位,以及计算各种代数函数(例如,平面插值和三角函数、指数函数和对数函数等)。有利的是,相同的功能执行单元可以被配置为执行不同的操作。
45.在操作中,每个sm 310被配置为处理一个或更多个线程组。如本文所用,“线程组(thread group)”或“线程束(warp)”是指对不同的输入数据同时执行同一程序的一组线程,其中组中的一个线程被指派给sm 310 中的不同执行单元。线程组可以包括比sm 310中的执行单元的数量更少的线程,在这种情况下,当正在处理该线程组时,某些执行单元在周期期间可处于空闲。线程组还可包括比sm 310中的执行单元的数量更多的线程,在这种情况下,处理可发生在连续的时钟周期中。由于每个sm 310 可以同时支持多达g个线程组,因此,在任何给定时间都可以在gpc 208 中执行多达g*m个线程组。
46.此外,多个相关线程组在sm 310中可以同时是活动的(处于不同的执行阶段)。该线程组的集合在本文中被称为“协作线程阵列”(“cta”) 或“线程阵列”。特定cta的大小等于m*k,其中k是线程组中同时执行的线程的数量,这通常是sm 310中执行单元数量的整数倍,m是sm 310 内同时活动的线程组的数量。在各个实施例中,以计算统一设备架构 (cuda)编程语言编写的软件应用描述在gpc 208上执行的线程的行为和操作,包括任何上述行为和操作。可在cuda程序中指定给定处理任务,使得sm 310可被配置为执行和/或管理通用计算操作。
47.尽管图3未示出,但每个sm 310包括一级(l1)高速缓存,或使用 sm 310外部的相应l1高速缓存中的空间来支持执行单元执行的加载和存储操作等。每个sm 310还可以访问在ppu 202中的所有gpc 208之间共享的二级(l2)高速缓存(未示出)。l2高速缓存可用于在线程之间传输数据。最后,sm 310还可以访问片外“全局”存储器,其可包括pp存储器204和/或系统存储器104。需要理解的是,ppu 202外部的任何存储器都可以用作全局存储器。此外,如图3所示,gpc 208中可包括1.5级(l1.5) 高速缓存335,并且其被配置为接收和保存sm 310经由存储器接口214 从存储器请求的数据。这种数据可以包括但不限于指令、统一数据和常量数据。在gpc 208内具有多个sm 310的实施例中,sm 310可以有益地共享高速缓存在l1.5高速缓存335中的公共指令和数据。
48.每个gpc 208可具有关联的存储器管理单元(mmu)320,其被配置为将虚拟地址映射到物理地址。在各个实施例中,mmu 320可以驻留在 gpc 208或存储器接口214内。mmu 320包括一组页表条目(pte),用于将虚拟地址映射到图块(tile)或存储器页的物理地址,可选地映射到高速缓存行索引。mmu 320可包括地址转换后备缓冲区(tlb)或驻留在 sm 310、一个或更多个l1高速缓存或gpc 208内的高速缓存。
49.在图形和计算应用程序中,可以配置gpc 208,使每个sm 310耦合到纹理单元315,以执行纹理映射操作,例如确定纹理采样位置、读取纹理数据和过滤纹理数据。
50.在操作中,每个sm 310将经处理的任务发送到工作分配交叉开关330,以便将经处理的任务提供给另一gpc 208以进行进一步处理,或将经处理的任务存储在l2高速缓存(未示出)、并行处理存储器204中或经由交叉开关单元210存储在系统存储器104中。此外,预光栅操作(“pre-rop”) 单元325被配置为接收来自sm 310的数据,将数据定向到分区单元215 中的一个或更多个光栅操作(rop)单元,执行颜色混合的优化,组织像素颜色数据,并执行地址转换。
51.应理解,本文描述的核心架构是说明性的,并且可以进行变型和修改。除其他事项外,gpc 208中可包括任意数量的处理单元,诸如sm 310、纹理单元315或pre-rop单元325。此外,如上结合图2所述,ppu 202可以包括任意数量的gpc 208,这些gpc 208被配置为在功能上彼此相似,使得执行行为不依赖于哪个gpc 208接收特定的处理任务。此外,每个 gpc 208独立于ppu 202中的其他gpc 208操作,以执行一个或更多个应用程序的任务。鉴于上述情况,本领域普通技术人员应理解,图1-图3中描述的架构绝不限制本公开的各个实施例的范围。
52.请注意,如在此使用的,对共享存储器的引用可以包括任何一个或更多个技术上可行的存储器,包括但不限于由一个或更多个sm 310共享的本地存储器或经由存储器接口214可访问的存储器,如高速缓存存储器、并行处理存储器204或系统存储器104。还请注意,
如本文所使用的,对高速缓存存储器的引用可以包括任何一个或更多个技术上可行的存储器,包括但不限于l1高速缓存、l1.5高速缓存和l2高速缓存。
53.细粒度的本地检查点和恢复
54.如在此所描述的,ppu 202在ppu 202内的存储器客户端的指令级边界处执行细粒度本地检查点和恢复。如本文进一步描述的,存储器客户端是对任何存储器执行存储器加载操作和/或存储操作的任何系统组件。存储器客户端包括但不限于流式多处理器(sm)、全局常量高速缓存(gcc)、复制引擎434、上下文切换器等。软件恢复驱动器周期性地存储用于ppu 202中的存储器客户端的本地检查点。软件恢复驱动器可以包括在设备驱动器103中、单独的cuda驱动器等中。软件恢复驱动器利用ppu 202的计算指令级抢先(cilp)特征来暂缓在ppu 202程序指令边界处的执行。当ppu 202内的存储器客户端已经暂缓时,软件恢复驱动器存储包括存储器客户端的微架构状态的检查点。当存储器客户端检测到存储器错误时,该存储器客户端阻止进一步的数据被该存储器客户端存储或传输至该存储器系统,由此阻止该存储器错误传播至其他存储器客户端、至其他ppu 202 或至该cpu 102。存储器客户端还阻止上下文切换和存储器屏障以遏制存储器错误。存储器客户端发起一个或更多个暂缓操作以从存储器客户端中的任何指令队列排出指令,以便刷新任何待决存储器操作。因此,存储器客户端保持先前本地检查点的完整性,从而使得软件恢复驱动器能够可靠地从先前本地检查点重启。存储器客户端存储包括与存储器错误相关联的数据的错误日志数据,通知软件恢复驱动器和暂缓。软件恢复驱动器随后访问错误日志数据以确定存储器错误的性质,恢复先前的本地检查点,并且重新启动暂缓的存储器客户端。
55.图4是根据各个实施例的包括在图2的ppu 202和gpc 208中的存储器访问系统400的框图。如图所示,存储器访问系统400包括但不限于 mmu 320、存储器控制器逻辑405、存储器420和存储器客户端430。存储器控制器逻辑405包括但不限于ecc电路410。ecc电路410表示嵌入或支持mmu 320和/或任何存储器420(包含dram 220、l2高速缓存、其他存储器424等)的任何一或多个ecc电路和/或ecc保护逻辑。存储器420包括但不限于dram 220、2级(l2)高速缓存422和其他存储器 424。存储器客户端430包括但不限于sm 310、全局常量高速缓存(gcc) 432、复制引擎434和上下文切换器436。
56.在一些实施例中,存储器访问系统400可以包括存储器控制器逻辑 405的多个实例,其中存储器控制器逻辑405的每个实例可以包括单独的 ecc电路410。在这样的实施例中,存储器控制器逻辑405的一个实例可控制dram 220。存储器控制器逻辑405的多个实例可控制高速缓存层次结构中的不同高速缓存存储器,其中第一实例可控制l2高速缓存422,第二实例可控制l1.5高速缓存,第三实例可控制l1高速缓存,等等。类似地,存储器控制器逻辑405的多个实例可控制其他存储器424,其中每个第一实例可控制包括在其他存储器424中的不同存储器。
57.如本文所述,dram 220驻留在pp存储器204内。除了数据位之外, dram 220还包括纠错码(ecc)位。当存储器客户机430从dram 220 加载数据时,与dram 220相关联的ecc电路410处理数据位和ecc位,以便检测和/或校正存储器错误。在典型的ecc实现方式中,ecc电路410 能够校正一位错误并且检测两位错误。更复杂的ecc电路410能够校正两个或更多个位错误和/或检测三个或更多个位错误。通常,当ecc电路410 检测到可校正的ecc错误时,ecc电路410可以校正该ecc错误并且不向其他系统组件通知该ecc错误。因此,如果存储
器客户端430从dram220加载数据,ecc电路410确定该数据没有错误或具有可纠正的错误,则dram 220将该数据连同将该数据标识为未损坏的指示符信号一起返回到请求存储器客户端430。在一些实施例中,信号可以是线连接的形式,如果数据未损坏,则该线连接具有第一电压电平(指示有效数据),或者如果数据损坏,则该线连接具有第二电压电平(指示中毒数据)。然而,如果 ecc电路410确定该数据具有不可校正的ecc错误,则dram 220将该数据连同通过返回“中毒模式”将该数据标识为损坏的指示符信号一起返回到请求存储器客户端430,从而发信号通知停止条件。此外,进入的存储器存储操作导致在dram 220中存储中毒模式。在本文中将表示数据和 /或中毒模式的数据位称为“存储器字”。例如,具有ecc错误和/或中毒模式的高速缓存行的l2高速缓存422驱逐导致将中毒模式存储到dram 220 以指示驱逐的高速缓存行被损坏。如果另一存储器客户端430随后从存储器加载相同的数据,则ecc 410电路检测数据与中毒模式一起存储。结果, dram 220将数据连同标识数据为损坏的指示符信号一起返回到请求存储器客户端430,从而发信号通知停止条件。进一步,当从dram 220访问数据时,数据也存储在l2高速缓存422中,包括数据中毒位。以此方式,访问相同数据的存储器客户端430接收指示符信号,该指示符信号将该数据标识为损坏,无论该数据是从dram 220还是从l2高速缓存422接收的。
58.存储器客户端430还可以访问l2高速缓存422,其中l2高速缓存422 可以用于在线程之间传输数据。除了数据位之外,l2高速缓存422还包括 ecc位和数据中毒位。在一些实施例中,数据中毒位可以是高速缓存标记位的扩展。当存储器客户端430从l2高速缓存422加载数据时,与l2高速缓存422相关联的ecc电路410处理数据位和ecc位以便检测和/或校正存储器错误。在典型的ecc实现方式中,ecc电路410能够校正一位错误并且检测两位错误。更复杂的ecc电路410能够校正两个或更多个位错误和/或检测三个或更多个位错误。如果当存储器客户端430从l2高速缓存422加载数据时,ecc电路410确定该数据没有错误或具有可纠正的 ecc错误,则l2高速缓存422将数据连同将该数据标识为未损坏的指示符信号一起返回到请求存储器客户端430。然而,如果ecc电路410确定该数据具有不可校正的ecc错误,则l2高速缓存422将数据连同通过返回“中毒模式”将该数据标识为损坏的指示符信号一起返回到请求存储器客户端430,从而发信号通知暂停条件。此外,进入的存储器存储操作导致在dram 220中存储中毒模式。例如,具有ecc错误和/或中毒模式的高速缓存行的l2高速缓存422驱逐导致将中毒模式存储到dram以指示驱逐的高速缓存行被损坏。如果另一存储器客户端430随后从存储器加载相同的数据,则ecc电路410检测数据与中毒模式一起存储。结果,dram220将数据连同标识数据为损坏的指示符信号一起返回到请求存储器客户端430,从而发信号通知停止条件。进一步,当数据从l2高速缓存422中逐出并且被传送到dram 220时,数据与数据中毒位一起被存储在dram220中。以此方式,访问相同数据的存储器客户端430接收指示符信号,该指示符信号将该数据标识为损坏,无论该数据是从dram 220还是从 l2高速缓存422接收的。
59.进一步地,当来自l2高速缓存422中的高速缓存行的数据被存储到 dram 220时,如果高速缓存行具有设定的中毒位和/或如果高速缓存行具有ecc错误,则设置数据中毒位。在任一情况下,dram 220不采用单独的数据中毒位。相反,dram 220使用中毒模式来存储数据,指示存储的数据被损坏。存储在dram 220中的中毒模式保留ecc属性而没有用于支持中毒指示的附加存储开销。因此,dram 220中存储高速缓存行的区域发生的任何后续存
储器操作导致检测到的错误。该条件源自使用中毒模式在dram 220中存储数据的存储器控制器逻辑405。例如,来自l2高速缓存422的数据可以在被存储在dram 220中时被标记为损坏,并且相同的数据在dram 220中导致另一ecc错误。利用所公开的技术,dram220中的数据仍然保留数据中毒位。因此,无论来自存储在dram 220中的l2高速缓存422的数据是否被损坏,检测到dram 220中的后续错误。结果,在l2高速缓存422中发生的存储器错误被保存在dram 220中,以及在dram 220中发生的后续错误。通常,中毒模式是将相应的数据识别为中毒的1和0的唯一组合。中毒模式中的ecc错误被视为不可校正的错误。与常规数据的错误校正相比,中毒模式中的单个位错误未被校正。因此,中毒模式具有与相应数据相同的损坏保护。有利地,所述中毒模式表现出与常规数据相同的双位错误可检测性属性。
60.其他存储器424包括任何其他技术上可行的存储器,如可以包括任何一个或更多个技术上可行的存储器,包括但不限于静态随机存取存储器 (sram)、l1高速缓存、l1.5高速缓存和/或类似物。这些其他存储器424 的功能与dram 220和l2高速缓存422基本相同,如本文所描述的。因此,本文公开的技术可应用于包括在其他存储器424中的存储器中的任何一个或更多个存储器。
61.在一些实施例中,mmu 320不返回中毒模式,因为mmu 320中的存储器数据是只读数据。相反,当mmu 320检测到错误时,mmu 320使 mmu 320内的受影响数据无效且从dram 220提取新数据。然而,如果 dram 220将具有中毒模式的数据返回到mmu 320,那么mmu 320将 mmu否定确认(mmu_nack)发送到请求存储器客户端430,以向请求存储器客户端430识别mmu 320内的数据被损坏。
62.当发生存储器错误时,请求存储器客户端430暂缓,但mmu 320、存储器420和其他共享资源不暂缓。相反,因为mmu 320和存储器420 是共享资源,所以mmu 320和存储器420继续服务于来自其他存储器客户端430的存储器加载和存储操作。以此方式,尚未暂缓的存储器客户端 430继续执行并继续执行对存储器420的加载和存储操作,只要存储器客户端430不尝试导致存储器错误的加载操作。因此,暂缓的唯一存储器客户端430是遇到存储器错误的那些存储器客户端430。以此方式,由一个存储器客户端430检测到的错误不影响其他存储器客户端430的执行。
63.如在此描述的,sm 310包括一组功能执行单元,如执行单元和加载
‑ꢀ
存储单元。在操作中,sm 310从dram 220、l2高速缓存422和其他存储器424中的一个或更多个加载数据。在从dram 220、l2高速缓存422 或其他存储器424的存储器加载操作期间,sm 310接收数据以及标识数据是否被损坏的指示符信号。如果指示符信号将数据标识为未损坏,则sm310完成存储器加载操作并继续执行。然而,如果指示符信号将数据标识为损坏,则sm 310禁用对存储器的存储、对文件系统的存储、以及来自 sm 310的其他数据传输,以防止已损坏的数据影响其他存储器420位置、存储器客户端430和/或ppu 202的其他组件。
64.sm 310发起一个或更多个暂缓操作以禁用进一步的存储器加载操作和/或存储器存储操作,包括存储器屏障和上下文切换。在sm 310发起暂缓序列时,多个存储器加载和/或存储操作可以在sm 310的管线中挂起。如果存储器加载和/或存储操作保持在流水线中,则存储器加载和/或存储操作在sm 310恢复先前检查点处的执行之前不恰当地执行。为了防止执行存储器加载和/或存储操作,sm 310排出并丢弃管线中的任何待决存储器加载和/或存储操作。
65.作为暂缓序列的一部分,sm 310生成并存储错误日志数据,该错误日志数据指示由于存储器错误而暂缓的sm 310、存储器错误的位置、在存储器错误时执行的指令、在存储器错误时在sm 310上执行的上下文和/或过程、检测到存储器错误的sm 310等。在一些实施例中,存储器错误可以是上下文可归因的。例如,某些存储器错误(诸如sm 310内部的错误) 可归因于指令边界。其他存储器错误,例如从l2高速缓存422和/或dram220返回到sm 310的中毒指示,可能不可归因于指令边界。软件恢复驱动器重置引擎并分析错误日志数据。软件恢复驱动器将最近的本地检查点恢复到sm 310。根据在存储器错误时执行的过程和/或上下文,软件恢复驱动器还可将一个或更多个其他存储器客户端430恢复到最近的本地检查点。软件恢复驱动器使得sm 310和其他受影响的存储器客户端430恢复在恢复的检查点处开始的操作。
66.在一些实施例中,sm 310可以包括内部存储器,如寄存器文件、l1 高速缓存等。该内部存储器还可以包括ecc位和数据中毒位。结果,当 sm 310访问内部存储器时,sm 310可确定内部存储器中的数据被损坏。如果sm 310确定内部存储器中的数据被损坏,则sm 310可以结合dram220、l2高速缓存422、和其他存储器424来执行在此描述的相同的技术。
67.在操作中,全局常量高速缓存(gcc)432(在此也称为常量高速缓存存储器)从dram 220、l2高速缓存422、和其他存储器424中的一个或更多个中检索数据加载数据并且将该数据存储在gcc 432中。gcc 432 存储数据,例如常量值、可执行指令、以及可由sm 310和任选地其他存储器客户端430读取但不可写入的任何其他数据。以此方式,gcc 432作为只读存储器呈现给其他存储器客户端430。在操作中,gcc 432从dram220、l2高速缓存422、以及其他存储器424中的一个或更多个加载数据。在从dram 220、l2高速缓存422、或其他存储器424的存储器加载操作期间,gcc 432接收数据连同标识数据是否被损坏的指示符信号。如果指示信号将数据标识为未损坏,则gcc 432完成存储器加载操作并且继续执行。然而,如果指示符信号将数据标识为损坏,则gcc 432禁用对存储器的存储、对文件系统的存储、以及来自gcc 432的其他数据传输以防止已损坏的数据影响其他存储器420位置、存储器客户端430、和/或ppu 202 的其他组件。
68.gcc 432发起一个或更多个暂缓操作以便禁用进一步的存储器加载操作和/或存储器存储操作,包括存储器屏障和上下文切换。作为暂缓序列的一部分,gcc 432生成并且存储错误日志数据,该错误日志数据指示 gcc 432由于存储器错误、存储器错误的位置、在存储器错误时执行的指令、在存储器错误时在sm 310上执行的上下文和/或过程、检测到存储器错误的gcc 432等等而暂缓。软件恢复驱动器重置引擎并分析错误日志数据。软件恢复驱动器将最近的本地检查点恢复到gcc 432。根据在存储器错误时执行的过程和/或上下文,软件恢复驱动器还可将一个或更多个其他存储器客户端430恢复到最近的本地检查点。软件恢复驱动器使得gcc432和其他受影响的存储器客户端430恢复在恢复的检查点处开始的操作。
69.在一些实施例中,gcc 432可以包括内部存储器,例如寄存器文件、l1高速缓存和/或类似物。该内部存储器还可以包括ecc位和数据中毒位。结果,当gcc 432访问内部存储器时,gcc 432可以确定内部存储器中的数据被损坏。如果gcc 432确定内部存储器中的数据被损坏,则gcc 432 可以执行与在此结合dram 220、l2高速缓存422、以及其他存储器424 所描述的相同的技术。
70.在操作中,复制引擎434以直接存储器访问(dma)操作的形式执行数据的块复制操作。复制引擎434从存储器420中的源位置加载数据并且将该数据存储在存储器420中的对应目的地位置处。在从存储器420的存储器加载操作期间,复制引擎434连同标识数据是否被损坏的指示符信号一起接收数据。如果指示符信号将数据标识为未损坏,则复制引擎434 完成存储器加载操作并继续块复制操作。然而,如果指示符信号将数据标识为已损坏,则复制引擎434禁用对存储器的存储、对文件系统的存储和来自复制引擎434的其他数据传输,以防止已损坏的数据影响其他存储器 420位置、存储器客户端430和/或ppu 202的其他组件。
71.复制引擎434发起一个或更多个暂缓操作以停止块复制操作并且禁用进一步的存储器加载操作和/或存储器存储操作。作为暂缓序列的一部分,复制引擎434生成并存储错误日志数据,其指示复制引擎434由于存储器错误、存储器错误的位置、在存储器错误时执行的指令、在存储器错误时在复制引擎434上执行的上下文和/或过程、检测到存储器错误的复制引擎 434等而暂缓。软件恢复驱动器重置引擎并分析错误日志数据。软件恢复驱动器将最近的本地检查点恢复到复制引擎434。根据在存储器错误时执行的进程和/或上下文,软件恢复驱动器还可将一个或更多个其他存储器客户端430恢复到最近的本地检查点。软件恢复驱动器使得复制引擎434和其他受影响的存储器客户端430恢复在恢复的检查点处开始的操作。
72.在操作中,上下文切换器436支持各个上下文的时间分片,其中,每个上下文是过程或子过程。在时间分片系统中,sm 310在指定的持续时间内执行一个上下文。在该持续时间到期时,上下文切换器436暂缓sm 310 并将sm 310的当前上下文保存到存储器420。上下文切换器436从存储器 420向sm 310恢复新上下文并开始执行新上下文。以此方式,sm 310顺序地执行多个上下文的时间片。当上下文切换器436恢复新的上下文时,从存储器420加载的数据可能被损坏。
73.在恢复期间,上下文切换器436执行从存储器420的存储器加载操作。上下文切换器436连同标识数据是否被损坏的指示符信号一起接收数据。如果指示符信号将数据标识为未被损坏,则上下文切换器436完成存储器加载操作并继续恢复。然而,如果指示符信号将数据标识为已损坏,则上下文切换器436停止恢复并禁用对存储器的存储、对文件系统的存储、以及来自上下文切换器436的其他数据传输,以防止已损坏的数据影响相应的sm 310、其他存储器420位置、存储器客户端430、和/或ppu 202的其他组件。上下文切换器436将对应sm 310维持在暂缓状态。以这种方式,上下文切换器436防止sm 310执行损坏的上下文。
74.上下文切换器436发起一个或更多个暂缓操作以停止恢复并且禁用进一步的存储器加载操作和/或存储器存储操作。作为暂缓序列的一部分,上下文切换器436生成并存储错误日志数据,该错误日志数据指示上下文切换器436由于存储器错误、存储器错误的位置、在存储器错误时执行的指令、在存储器错误时在上下文切换器436上执行的上下文和/或过程、检测到存储器错误的上下文切换器436等而暂缓。软件恢复驱动器重置引擎并分析错误日志数据。软件恢复驱动器将最近的本地检查点恢复到上下文切换器436。根据在存储器错误时执行的过程和/或上下文,软件恢复驱动器还可将一个或更多个其他存储器客户端430恢复到最近的本地检查点。软件恢复驱动器使得上下文切换器436和其他受影响的存
储器客户端430恢复在恢复的检查点处开始的操作。
75.用于跟踪存储器错误的过程基于存储器错误是否起源于dram 220 或l2高速缓存422而变化。在第一示例中,存储器错误源自dram 220。当存储器客户端430访问dram 220中具有存储器错误的数据时,ecc电路410经由ecc位检测存储器错误。诸如存储器控制器逻辑405的存储器控制器将来自dram 220的数据和数据中毒位存储到l2高速缓存422中的可用高速缓存行。如果第二存储器客户端430随后访问相同数据,则第二存储器客户端430从l2高速缓存422中的高速缓存行加载数据。因为高速缓存行包括中毒模式,所以第二存储器客户端430接收存储器错误的指示,即使存储器错误源自dram 220。
76.在第二示例中,存储器错误源自l2高速缓存422。当存储器客户端 430访问l2高速缓存422的高速缓存行中具有存储器错误的数据时,ecc 电路410经由ecc位检测存储器错误并且存储具有中毒模式的数据中毒位。随后,当从l2高速缓存422驱逐具有存储器错误的高速缓存行时,诸如存储器控制器逻辑405的存储器控制器将来自l2高速缓存422中的高速缓存行的数据和数据中毒位存储到dram 220中的适当位置。如果存储器客户端430稍后访问来自dram 220的数据,则存储器客户端430从 dram 220加载数据。因为dram中的存储器包括中毒模式,所以即使在 l2高速缓存422中发起存储器错误,存储器客户端430也接收存储器错误的指示。
77.在存储器访问(如存储器加载和存储操作)期间,mmu 320的作用是验证存储器客户端430的存储器访问并将存储器客户端发送的虚拟地址转换成用于访问l2高速缓存422或dram 220内的存储器位置的物理地址。mmu 320主要检查以确定存储器访问是否合法。如果存储器访问是非法的,则mmu 320向发出请求的存储器客户端430返回mmu否定确认 (mmu_nack),以将存储器访问识别为非法访问。在一些实施例中, mmu 320本身可视为存储器客户端430,因为存储在mmu 320内的页表和/或类似物具有存储在l2高速缓存422和/或dram 220中的后备存储副本。mmu 320包含存储这些页表和/或类似物的一个或更多个sram结构。如果mmu 320中的tlb不具有针对请求存储器访问的转换,则mmu 320
ꢀ“
行走”通过l2高速缓存422和/或dram 220的存储器以提取页表,以便将由存储器客户端发送的虚拟地址转换为物理地址。
78.一般来说,mmu 320可遭遇两种类型的错误。在第一类型的错误中, mmu 320中的tlb条目具有奇偶校验错误或ecc错误。在此第一类型错误的情况下,mmu 320丢弃tlb条目且执行页面行走,以从l2高速缓存 422和/或dram 220重新加载相关页表。mmu 320从这种类型的错误中恢复,而不必通知存储器客户端430,因为tlb被视为包含只读数据。在第二类型的错误中,当作为页面行走的一部分而执行的页面转换由l2高速缓存422和/或dram 220返回时,与页面转换相关联的数据可能被中毒。通过该第二类型的错误,mmu 320将mmu否定确认(mmu_nack)返回到请求的存储器客户端430,因为只读数据源本身是正确的。因为在此第二类型错误的情况下,mmu 320中的tlb条目不具有中毒模式,所以中毒的转换不存储在tlb中。
79.将理解的是,在此所示的系统是说明性的,并且变化和修改是可能的。 mmu 320展示为具有单一ecc电路410的单一存储器管理单元。然而,所公开的技术可以经由任何数量和/或实例的mmu 320、存储器控制器逻辑405和ecc电路410以任何技术上可行的组合来部署。存储器420被示出为具有单个dram 220和单个l2高速缓存422。然而,所公开的技术可通
过任何数量的dram 220、l2高速缓存422和其他存储器424以任何技术上可行的组合来部署。同样地,存储器客户端430被示出为单个sm310、单个gcc 432、单个复制引擎434和单个上下文切换器436。然而,所公开的技术可通过任何数量的sm 310、gcc 432、复制引擎和上下文切换器436以任何技术上可行的组合来部署。
80.在一些实施例中,可以在具有多个ppu 202的系统中采用所公开的技术,其中,第一ppu 202上的损坏数据由第二ppu 202加载。此外,所公开的技术可以用于具有通过网络彼此通信的多个ppu 202的系统中,只要网络被配置为通过网络传输数据中毒位和/或损坏数据指示符。进一步,所公开的技术可在具有分区的ppu 202的系统中采用,其中单个ppu 202在两个或更多个承租者之间共享,同时在承租者之间提供正确的上下文归因和错误隔离。
81.在一个示例中,在第一ppu 202上执行的sm 310访问来自第二ppu202上的存储器420的数据。在对第二ppu 202执行存储器加载期间,第二ppu 202检测存储器错误。第二ppu 202向第一ppu 202上的sm 310 传送数据,该数据带有将该数据标识为损坏的指示符。如本文所描述的,sm 310发起暂缓序列,并且将第一ppu 202中的sm 310上的上下文执行标识为遇到存储器错误的上下文。第一ppu 202中的sm 310将第二ppu202标识为存储器错误的源。第二ppu 202上没有上下文被暂缓或重启。
82.因为检查点被存储在存储器420(如dram 220或l2高速缓存422) 中,所以存储和加载检查点相对于在文件系统中存储检查点的先前本地检查点和恢复途径更快。通过采用本文描述的cilp机制对微架构状态进行快照来促进在存储器420(诸如dram 220或l2高速缓存422)中存储检查点。此外,在检查点恢复期间测试本地检查点以确定包括在检查点中的数据是否具有不可校正的ecc存储器错误。如果本地检查点具有存储器错误,则检查点恢复暂缓,并且恢复先前的本地检查点,或者可替代地,恢复全局检查点。以此方式,所公开的技术还检测检查点中的存储器错误。
83.图5是根据各个实施例的用于经由图2的ppu 202存储本地检查点的方法步骤的流程图。虽然结合图1-4的系统来描述方法步骤,但所属领域的技术人员将理解,经配置以按任何次序执行所述方法步骤的任何系统都在本公开的范围内。
84.如所示,方法500在步骤502开始,其中,存储器客户端430执行一个或更多个指令。存储器客户端430可以是sm 310、全局常量高速缓存(gcc)432、复制引擎434或上下文切换器436。在步骤504,存储器客户端430确定保存本地检查点的时间到期。在存储器客户端430上执行的软件基于关于存储器客户端430的故障频率的先验数据、基于存储器错误的自适应监视、基于流逝的时间段、基于接收到中断和/或任何其他技术上可行的标准来确定保存本地检查点的时间到期。在一些实施例中,存储本地检查点的频率可随时间而改变。
85.在步骤506,存储器客户端430执行计算指令级抢占(cilp)操作。 cilp操作在指令边界处暂缓存储器客户端430的执行以便对微架构上下文状态拍快照或捕获微架构上下文状态。cilp操作抢先于在任何给定sm310上执行的应用程序、存储器复制操作和/或其他操作(在此被称为“工作”)。在步骤508,sm 310以指令级粒度将微架构上下文状态存储到本地存储器,诸如l2高速缓存422。sm 310将微架构上下文状态存储在本地检查点中。因此,所存储的微架构上下文状态变为该特定上下文的本地检查点。经由cilp操作,sm 310在由软件恢复驱动器选择的任何任意间隔触发细粒度检查点。因此,可以执行cilp操作,并且可以在
sm 310或其他存储器客户端上执行的应用程序或其他工作的任何指令边界上保存本地检查点。方法500然后进行到步骤502,如上所述。
86.随后,存储器客户端可以接收与包括由存储器客户端执行的存储器加载操作的指令相关联的数据被损坏的指示。响应于接收到该指示,存储器客户端发起针对存储器客户端的一个或更多个暂缓操作。存储器客户端从本地检查点检索微架构上下文状态。存储器客户端将存储器客户端的当前状态设置为微架构上下文状态。
87.图6是根据各个实施例的用于通过图2的ppu 202处理存储器错误的方法步骤的流程图。虽然结合图1-4的系统来描述方法步骤,但所属领域的技术人员将理解,经配置以按任何次序执行所述方法步骤的任何系统都在本公开的范围内。
88.如所示,方法600在步骤602开始,其中,存储器客户端430执行包括存储器加载操作的指令。存储器客户端430可以是sm 310、全局常量高速缓存(gcc)432、复制引擎434、上下文切换器436等。存储器加载操作可以指向驻留在dram 220、l2高速缓存422、其他存储器424等中的数据。
89.在步骤604,服务于存储器客户端430的存储器加载操作的存储器控制器逻辑405或其他存储器控制器确定来自存储器加载操作的数据是否被损坏。存储器控制器逻辑405基于ecc错误或与数据相关联的先前存储的中毒模式中的一个或两个来确定数据被损坏。中毒模式是存储器控制器逻辑405存储到与数据相关联的数据中毒位的特定位模式。如果来自存储器加载操作的数据未被损坏,则方法前进到步骤606,其中存储器客户端430 继续执行指令。方法600随后终止。
90.返回至步骤604,如果来自存储器加载操作的数据被损坏,则方法600 进行至步骤608,在步骤608,存储器控制器逻辑405将中毒模式返回至存储器客户端430。在步骤610,存储器客户端430禁用来自存储器客户端 430的存储器存储操作,并针对存储器客户端430发起一个或更多个暂缓操作。具体地,存储器客户端430禁用对存储器的存储、对文件系统的存储、以及来自存储器客户端430的其他数据传输,以防止损坏数据影响其他存储器420位置、存储器客户端430、和/或ppu 202的其他组件。存储器客户端430发起一个或更多个暂缓操作以禁用进一步的存储器加载操作和/或存储器存储操作,包括存储器屏障和上下文切换。作为暂缓序列的一部分,存储器客户端430生成并存储错误日志数据,该错误日志数据指示存储器客户端430由于存储器错误、存储器错误的位置、在存储器错误时执行的指令、在存储器错误时在存储器客户端430上执行的上下文和/或过程、检测到存储器错误的存储器客户端430等而暂缓。软件恢复驱动器重置引擎并分析错误日志数据。
91.在步骤612,软件恢复驱动器将最近的本地检查点恢复到存储器客户端430。根据在存储器错误时执行的过程和/或上下文,软件恢复驱动器还可将一个或更多个其他存储器客户端430恢复到最近的本地检查点。在步骤614,软件恢复驱动器使得存储器客户端430和其他受影响的存储器客户端430恢复在恢复的检查点处开始的操作。方法600随后终止。
92.图7是根据各个实施例的用于驱逐包括存储器错误的高速缓存行的方法步骤的流程图。虽然结合图1-4的系统来描述方法步骤,但所属领域的技术人员将理解,经配置以按任何次序执行所述方法步骤的任何系统都在本公开的范围内。
93.如所示,方法700开始于步骤702,其中,与高速缓存存储器相关联的存储器控制器逻辑405确定将从高速缓存存储器中逐出高速缓存行。高速缓存存储器可以是l2高速缓存
422、l1.5高速缓存、l1高速缓存等。在步骤704,存储器控制器逻辑405确定要驱逐的高速缓存行中包括的数据被损坏。存储器控制器逻辑405基于ecc错误或与数据相关联的先前存储的中毒模式中的一个或两个来确定数据被损坏。在步骤706,存储器控制器逻辑405将数据连同指示高速缓存行中的数据被损坏的中毒模式从高速缓存行写到dram 220或其他合适的存储器。因此,当存储在dram 220 中的高速缓存行随后被加载回高速缓存存储器中时,中毒模式基于与数据相关联的一个先前存储的中毒模式将高速缓存行中的数据标识为损坏。方法700随后终止。
94.总之,各个实施例包括在gpu内的存储器客户端的指令级边界处执行细粒度本地检查点和恢复的gpu。软件驱动器周期性地存储用于gpu 中的存储器客户端的本地检查点。更具体地,软件恢复驱动器利用gpu的计算指令级抢先(cilp)特征来暂缓gpu程序指令边界处的执行。当gpu 内的存储器客户端已经暂缓时,软件恢复驱动器存储包括存储器客户端的微架构状态的检查点。当存储器客户端检测到存储器错误时,存储器客户端防止进一步数据被存储器客户端存储或传输到存储器系统,从而防止存储器错误传播到其他存储器客户端、到其他gpu或cpu。存储器客户端还阻止上下文切换和存储器屏障以遏制存储器错误。存储器客户端发起一个或更多个暂缓操作以从存储器客户端中的任何指令队列排出指令,以便刷新任何待决存储器操作。因此,存储器客户端保持先前本地检查点的完整性,从而使得软件恢复驱动器能够可靠地从先前本地检查点重启。存储器客户端存储包括与存储器错误相关联的数据的错误日志数据,通知软件恢复驱动器并暂缓。然后,软件恢复驱动器访问错误日志数据以确定存储器错误的性质,恢复先前的本地检查点,并且重新启动暂缓的存储器客户端。
95.所公开的技术相对于现有技术的至少一个技术优点是,利用所公开的技术,本地检查点和恢复是以相对于现有方法更精细的粒度来执行的。当 gpu内的存储器客户端检测到存储器错误时,仅中止受影响的存储器客户端,将最近的本地检查点加载到存储器客户端,并且存储器客户端从最后本地检查点恢复执行。进一步,由gpu并且针对每个存储器客户端执行本地检查点和恢复,导致更快地检测到在gpu程序的执行期间发生的存储器错误。所公开的技术的另一技术优点是,当gpu内的存储器客户端检测到存储器错误时,防止存储器客户端将数据存储或以其他方式向外传输到其他存储器位置、gpu中的其他存储器客户端、其他gpu或cpu。因此,出现在一个gpu中的存储器传播到os节点的其他部分或传播到其他os 节点的机会相对于现有方法减少。这些优点代表优于现有技术方法的一个或更多个技术改进。
96.以任何方式记载在任何权利要求中的任何权利要求元素和/或本技术中描述的任何元素的任何和所有组合均落入本公开和保护的范围内。
97.出于说明目的已经呈现了各个实施例的描述,但并不意图穷尽为或限制为所公开的实施例。在不偏离所述实施例的范围和精神的情况下,对于本领技术人员来讲,许多修改和变化将是显而易见的。
98.本实施例的方面可体现为系统、方法或计算机程序产品。因此,本公开的方面可采取完全硬件实施例、完全软件实施例(包括固件、常驻软件、微代码等)或组合软件和硬件方面的实施例的形式,本文中全部统称为“模块”或“系统”。此外,本公开的方面可采用一种或多种计算机可读介质中体现的计算机程序产品的形式,该计算机可读介质上包含计算机可
读程序代码。
99.可以使用一种或更多种计算机可读介质的任意组合。计算机可读介质可以是计算机可读信号介质或计算机可读存储介质。例如,计算机可读存储介质包括但不限于电子、磁、光、电磁、红外或半导体系统、装置或设备,或上述任何适当的组合。计算机可读存储介质的更具体的示例(非穷尽列举)可包括:具有一根或更多根电线的电气连接、便携式计算机磁盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或闪存)、光纤、便携式光盘只读存储器(cd-rom)、光存储设备、磁存储设备或上述任何合适的组合。在本文档的上下文中,计算机可读存储介质可以是任何有形介质,其可以包括或存储程序,以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合使用。
100.本公开的方面参照根据本公开的实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图进行了描述。应理解,流程图和/或框图中的每个框,以及流程图和/或框图中的框的组合,都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器,以产生机器,使得经由计算机或其他可编程数据处理装置的处理器执行的指令使得能够实现流程图和/或框图的一个或更多个框中指定的功能/动作。此类处理器可以是但不限于通用处理器、专用处理器、特定于应用程序的处理器或现场可编程门阵列。
101.图中的流程图和框图示出了根据本公开的各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这方面,流程图或框图中的每个框可以表示代码的模块、段或部分,代码包括用于实现一个或更多个指定逻辑功能的一个或更多个可执行指令。还应指出,在一些替代实施例中,框中指出的功能可不按图中指出的顺序发生。例如,连续显示的两个框实际上可以大致同时执行,或者这些框有时可以相反的顺序执行,这取决于所涉及的功能。还应注意,框图和/或流程图中的每个框,以及框图和/或流程图中框的组合,可以由基于专用硬件的系统实现,该基于专用硬件的系统执行指定功能或动作或专用硬件和计算机指令的组合。
102.虽然前述内容是针对本公开的实施例,本公开的其他和进一步实施例可以在不偏离其基本范围的情况下设计,其范围由所附权利要求确定。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献