通过标记cpu流量为特殊来避免死锁的制作方法

文档序号:6585755阅读:104来源:国知局
专利名称:通过标记cpu流量为特殊来避免死锁的制作方法
技术领域
本发明一般地涉及计算机硬件,并更特别地涉及通过标记CPU流量为特殊来避免 死锁的方法和系统。
背景技术
常规的计算机系统包括中央处理单元(CPU)且也可以包括已知为并行处理单元 (PPU)的协处理器。CPU将一定的处理操作卸下给PPU以减少CPU的处理工作量。其中,这 些处理操作包括压缩和解压缩操作。当CPU需要这些处理操作时,CPU发出请求给PPU,包 括读请求和/或写请求。例如,CPU可能需要将数据写到可能以压缩的格式存储的系统存 储器中。CPU发送写请求给PPU,然后PPU可以读和解压缩与该写请求相关的数据并将解压 缩的和与新数据合并的原始数据写到系统存储器中。有时,CPU发出的写请求可能引起PPU发出必须在初始写请求能完成之前完成的 一个或多个“派生的”读请求。例如,PPU可以发出以与CPU相关的系统存储器单元为目标 的派生的读请求。当读事务完成时,系统存储器发出读完成给PPU,这通知PPU该事务完成。但是,当CPU和PPU通过具有一个或多个待决写请求的外围部件接口快速(PCIe) 总线连接时,可能产生问题。由于PCIe总线的排序规则,读完成不能超过写请求,因此任何 派生的读请求不能返回读完成给PPU。因此,初始的写请求不能完成。这种情况在本领域中 已知为循环依存或“死锁”。死锁使在CPU和PPU之间的一些或所有的通信停止并不利地影 响计算机系统的处理吞吐量。下面讨论死锁条件的一些例子。在第一个例子中,如果PPU需要从存储在系统存储器中的页表读且写请求在PCIe 总线中待决,则可能发生死锁。当PPU向发出读请求给系统存储器以从页表中获取项目时, 与读请求相关的读完成不能返回给PPU,因此初始的写请求不能完成。当CPU发出以在与PPU相关的高速缓存存储器单元中的高速缓存行为目标的写请 求给PPU时,也可能发生死锁。为了完成写请求,PPU首先通过检查标签存储件确定高速缓 存行是否压缩。标签存储件指示与在高速缓存存储器单元中的最近访问的高速缓存行相关 的压缩状态。当标签存储件不包括由写请求指定的高速缓存行的压缩状态时,PPU发出读 请求给系统存储器以访问包括在高速缓存存储器单元中的每个高速缓存行的压缩状态的 后备存储件。后备存储件返回指定的高速缓存行的压缩状态并发出读完成。但是,当写请 求在PCIe中待决时,由于与读请求相关的读完成不能超过这些待决的写请求,因此可能发 生死锁。当CPU试图写数据到压缩的系统存储器的区域中(本领域中已知为“压缩片”)时, 可能发生第三种死锁,。CPU发出指定压缩片和包括写数据的写请求给PPU。PPU发出读请 求给系统存储器以读压缩片。当写请求在PCIe中待决时,由于与读请求相关的读完成又不 能超过这些待决的写请求,因此可能发生死锁。除了这三个例子外,还有数个其他情况可能导致死锁。因此,本领域中仍然需要避 免死锁的方法和系统。

发明内容
本发明的实施例提供了在计算机系统中避免死锁的方法和系统,该计算机系统具 有第一处理单元、第二处理单元、存储器桥、系统存储器和将第二处理单元连接到第一处理 单元、存储器桥和系统存储器的总线。当读或写请求从第一处理单元发送到第二处理单元 时避免了死锁。根据本发明实施例的避免死锁的方法包括在总线的第一虚拟通道上在第二处理 单元接收读或写请求;在处理读或写请求时在第二处理单元产生派生的读请求;通过总线 的第二虚拟通道将派生的读请求发送给系统存储器;在总线的第二虚拟通道上接收派生的 读请求的完成;和完成接收的读或写请求。根据本发明实施例的避免死锁的系统包括在第二处理单元中的总线接口单元。该 总线接口单元配置为在第一虚拟通道上从第一处理单元接收读或写请求,并将在处理读或 写请求时产生的派生的读请求通过第二虚拟通道发送。


为了详细地理解本发明的上述特征,对于以上简要说明的本发明,将参照实施例 进行更为具体的描述,其中对一些实施例在附图中进行了图示。然而,需要注意的是,附图 只是图示本发明的代表性实施例,因此不能认为附图限制了本发明的范围,本发明可以允 许其他同样有效的实施例。图1是图示配置为实现本发明的一个或多个方面的计算机系统的框图;图2是根据本发明一个实施例的图1中的计算机系统的并行处理子系统的框图;图3A是根据本发明一个实施例的在图2的并行处理单元(PPU)之一中的通用处 理簇(GPC)的框图;图3B是根据本发明一个实施例的在图2中的并行处理单元之一中的分区单元的 框图;图4是根据本发明一个实施例的配置为避免死锁的计算机系统的框图;和图5是根据本发明一个实施例的避免死锁的方法步骤的流程图。
具体实施例方式在下文的描述中,给出了大量具体的细节以便提供对本发明更为彻底的理解。然 而,对于本领域技术人员来说显而易见的是,本发明可以无需一个或多个这些具体细节而 得以实施。在其他的例子中,为了避免与本发明发生混淆,公知的一些特征未进行描述。系统概述图1是图示配置为实现本发明一个或多个方面的计算机系统100的框图。计算机 系统100包括中央处理单元(CPU) 102和系统存储器104,二者通过存储器桥105经由总线 路径进行通信。存储器桥105可以如图1所示集成到CPU 102中。作为替换,存储器桥105 可以是惯常设备例如北桥芯片,其通过总线连接到CPU 102。存储器桥105通过通信路径 106 (例如HyperTransport (超传输)链路)与I/O (输入/输出)桥107相连接。I/O桥 107例如可以是南桥芯片,其从一个或多个用户输入设备108(例如键盘、鼠标)接收用户输
4入,并将该输入通过路径106和存储器桥105转发给CPU 102。并行处理子系统112通过 总线或其他通信路径113 (例如PCIExpress、加速图形端口或超传输链路)与存储器桥105 相耦合;在一个实施例中,并行处理子系统112是将像素提供给显示设备110(例如传统的 CRT或基于IXD的显示器)的图形子系统。系统盘114同样连接于I/O桥107。开关116 提了 I/O桥107和诸如网络适配器118以及各种插卡120和121的其他部件之间的连接。 包括USB或其他端口连接、CD驱动器、DVD驱动器、电影记录设备等的其他部件(图中没有 明确示出),也可以与I/O桥107相连接。将图1中的各种部件相互连接的通信路径可以用 任何适用的协议来实现,比如PCI (外设部件互连)、PCI Express (PCI-E)、AGP (加速图形端 口)、超传输或任何其他总线或点对点通信协议,并且不同设备之间的连接可以使用不同协 议,如本领域已知的。在一个实施例中,并行处理子系统112包括为图形和视频处理优化的电路,包括 例如视频输出电路,并构成了图形处理单元(GPU)。在另一实施例中,并行处理子系统112 包括为通用处理优化,并保留了底层计算架构的电路,本文将更加详细地描述。在另一实施 例中,并行处理子系统112可以集成一个或多个其他系统元件,例如存储器桥105、CPU 102 和I/O桥107,以形成片上系统(SoC)。可以理解的是,这里示出的系统只是示意性的,可以对其进行变化和修改。包括桥 的数量和排列的连接拓扑结构可以根据需要修改。例如,在一些实施例中,系统存储器104 直接与CPU 102相连接而不是通过桥相连接,其他设备通过存储器桥105和CPU 102与系 统存储器104相通信。在其他可选择的拓扑结构中,并行处理系统112与I/O桥107相连 接或直接与CPU 102相连接,而不是和存储器桥105相连接。在其他实施例中,CPU102、I/ 0桥107、并行处理子系统112和存储器桥105的一个或多个被集成到一个或多个芯片上。 这里示出的特定部件是可选的;例如,可以支持任何数量的插卡或外设。在一些实施例中, 省去了开关116,网络适配器118和插卡120、121直接和I/O桥107相连接。图2示出了根据本发明一个实施例的并行处理子系统112。如图所示,并行处理 子系统112包括一个或多个并行处理单元(PPU) 202,每个并行处理单元都和本地并行处理 (PP)存储器204相耦合。通常,并行处理子系统包括U个PPU,其中U彡1。(在这里,相似 对象的多个例子用表明该对象的附图标记和表明该例子的附加说明数字(需要时)来表 示)。PPU 202和并行处理存储器204可以使用例如可编程处理器,专用集成电路(ASIC) 或存储器设备的一个或多个集成电路设备,或以任何其他技术上可行的方式来实现。再次参考图1,在一些实施例中,在并行处理子系统112中的一些或者全部的并行 处理单元202是具有渲染流水线的图形处理器,其能被配置成进行与下列情形有关的各种 任务从通过CPU 102和/或系统存储器104提供的图形数据产生像素数据;与本地并行处 理存储器204 (其能被用作图形存储器,例如包括常规的帧缓冲器)交互以存储并更新像素 数据;提供像素数据给显示设备110等。在一些实施例中,并行处理子系统112可包括作为 图形处理器工作的一个或多个并行处理单元202和用于通用计算的一个或多个其他并行 处理单元202。并行处理单元可以是相同或不同的,且每个并行处理单元202可以有其自己 专用的并行处理存储器设备或没有专用的并行处理存储器设备。一个或多个并行处理单元 202可以将数据输出到显示设备110或者每个并行处理单元202可以将数据输出到一个或 多个显示设备110。
5
参考图2,在一些实施例中,可以没有本地并行处理存储器204,存储器参考由本 地高速缓存(未示出)通过交叉器单元210和I/O单元205反映回到系统存储器104(此 处未示出)。在操作中,CPU 102是计算机系统100的主处理器,其控制和协调其他系统部件 的操作。特别是,CPU 102发出控制并行处理单元202操作的命令。在一些实施例中,CPU 102将对于每个并行处理单元202的命令流写入到命令缓冲器(图1和图2中未明确地示 出),该命令缓冲器可以位于系统存储器104、并行处理存储器204或是CPU 102和并行处 理单元202都可以访问的另一个存储位置中。并行处理单元202从命令缓冲器中读出命令 流,并且随后相对于CPU 102的操作异步地执行命令。CPU 102也可以建立数据缓冲器,并 行处理单元202可以响应命令缓冲器中的命令读取该数据缓冲器。每个命令和数据缓冲器 可以由并行处理单元202的每个读取。现在返回参考图2,每个并行处理单元202包括通过通信路径113和计算机系统 100的剩余部分通信的I/O (输入/输出)单元205,该通信路径113与存储器桥105相连 接(或是在一个可选实施例中直接与CPU 102相连接)。并行处理单元202和计算机系统 100的剩余部分的连接也可以变化。在一些实施例中,并行处理子系统112实现为插卡,其 能插入到计算机系统100的扩展槽中。在其他实施例中,并行处理单元202能和总线桥一 起集成到单一芯片上,总线桥例如可以是存储器桥105或I/O桥107。在另外其他实施例 中,并行处理单元202的一些或全部元件可以连同CPU102 —起集成到单一芯片上。在一个实施例中,通信路径113是PCI-E链路,其中如本领域所已知的,专用通道 分配给每个PPU 202。也可以使用其他通信路径。I/O单元205产生包(或其他信号)以 在通信路径113上传输,并也接收所有来自通信路径113的输入包(或其他信号),并将输 入包引导至PPU 202的适当的部件。例如,和处理任务有关的命令可以被引导至主机接口 206,而和存储器操作有关的命令(例如从并行处理存储器204中读取或向其写入)可以被 引导至存储器交叉器(crossbar)单元210。主机接口 206读取每个命令缓冲器,并将由命 令缓冲器指定的工作输出到前端212。每个PPU 202有利地实现高度并行处理架构。如详细示出的,PPU 202(0)包括处 理簇阵列230,处理簇阵列230包括数量为C的通用处理簇(GPC) 208,其中C彡1。每个GPC 208能同时执行大量(例如数百个或数千个)线程,其中每个线程是程序的实例。在不同应 用中,不同的GPC 208被分配用以处理不同类型的程序或进行不同类型的计算。例如,在图 形应用中,第一组GPC 208可以分配为进行镶嵌操作并产生面片的图元拓扑,而第二组GPC 208可以分配为进行镶嵌着色以评价图元拓扑的面片参数并确定顶点位置和其他每顶点属 性。GPC 208的分配基于每个类型的程序或计算产生的工作量是可以变化的。可选择地, GPC 208可以分配为使用时间片方案进行处理任务以在不同处理任务之间转换。GPC 208通过工作分配单元200接收将要执行的处理任务,该工作分配单元200从 前端单元212接收限定了处理任务的命令。处理任务包括例如表面(面片)数据、图元数 据、顶点数据和/或像素数据的要处理数据的指针,还有状态参数和限定数据如何处理的 命令(例如执行什么程序)。工作分配单元200可以配置成取得对应于处理任务的指针,工 作分配单元200可以从前端212接收指针,或者工作分配单元200可以直接从前端212接 收数据。在一些实施例中,索引指明了阵列中数据的位置。前端212保证在命令缓冲器指
6定的处理启动前,GPC 208配置为有效状态。例如,当并行处理单元202用于图形处理时,每个面片的处理工作量被分成大约 相等大小的任务,以使得能将镶嵌处理分配给多个GPC 208。工作分配单元200可以配置 成以能提供任务到多个GPC 208用于处理的频率输出任务。在本发明的一些实施例中,部 分GPC 208配置成进行不同类型的处理。例如,第一部分可以配置成进行顶点着色和产生 拓扑结构,第二部分可以配置成进行镶嵌和几何着色,以及第三部分可以配置成在屏幕空 间上进行像素着色以产生渲染的图像。分配部分GPC 208以进行不同类的处理任务的能力 有效地适应了由那些不同类型的处理任务产生的数据的任何扩展和缩减。GPC 208产生的 中间数据可以被缓冲,以在下游GPC 208接收数据的速度落后于上游GPC 208产生数据的 速度的情况下,允许中间数据在GPC 208之间以最少的停止发送。存储器接口 214可以被分区成D个存储器分区单元,每个存储器分区单元与并行 处理存储器204的一部分耦合,其中D > 1。并行处理存储器204的每部分通常包括一个或 多个存储器设备(例如DRAM 220)。本领域的普通技术人员可以理解的是,DRAM 220可以 由其他合适的存储设备代替并且通常可以是惯常的设计。因此省略了详细的描述。在一个 实施例中,DRAM220可以全部省略,存储器请求通过交叉器210和I/O单元205反映回到存 储器桥105。例如帧缓冲器或纹理贴图的渲染目标可以跨越DRAM 220存储,允许分区单元 215将每个渲染目标的部分并行写入,以有效地使用并行处理存储器204的可用带宽。GPC 208的任何一个可以处理要写入到并行处理存储器204中的任何分区单元 215中的数据。交叉器(crossbar)单元210配置为将每个GPC 208的输出路由至任何分区 单元215的输入或另一 GPC 208以进一步处理。GPC208通过交叉器单元210与存储器接口 214通信以从各种外部存储器设备中读取或写入各种外部存储器设备。在一个实施例中,交 叉器单元210与存储器接口 214连接以与I/O单元205通信,交叉器单元210也和本地并 行处理存储器204连接,因此使得不同GPC 208内的处理内核能与系统存储器104或对并 行处理单元202为非本地的其他存储器通信。交叉器单元210可以使用虚拟通道以在GPC 208和分区单元215之间分开通信流。此外,GPC 208能被编程以执行与广泛多种应用相关的处理任务,所述应用包括但 不限于线性和非线性数据转换、视频和/或音频数据的过滤、建模操作(例如,应用物理规 律来确定对象的位置、速度和其他属性)、图像渲染操作(例如,镶嵌着色器、顶点着色器、 几何着色器和/或像素着色器程序)等等。并行处理单元202可以将数据从系统存储器 104和/或本地并行处理存储器204传输到内部(片上)存储器,处理数据,并将结果数据 写回到系统存储器104和/或本地并行处理存储器204中,其中这样的数据能够由包括CPU 102或另一并行处理子系统112的其他系统部件来访问。并行处理单元202可以提供有任意数量的本地并行处理存储器204,包括没有 本地存储器,并可以以任意组合使用本地存储器和系统存储器。例如,在统一存储器架构 (UMA)的实施例中,并行处理单元202可以是图形处理器。在这样的实施例中,会提供极少 或者不提供专用图形(并行处理)存储器,并行处理单元202唯一地使用或几乎唯一地使 用系统存储器。在UMA实施例中,并行处理单元202可被集成到桥芯片或处理器芯片中,或 者是提供为具有高速链路(例如PCI-E)的分立的芯片,该高速链路将并行处理单元202通 过桥芯片或其他通信装置与系统存储器相连接。
7
如上所述,并行处理子系统112中可以包括任意数量的并行处理单元202。例如, 多个并行处理单元202可以提供在单个的插卡上,或者多个插卡可以与通信路径113相连, 或者一个或多个并行处理单元202可以集成到桥芯片中。多并行处理单元系统中的并行处 理单元202可以是彼此相同的,或者可以是彼此不同的。例如,不同的并行处理单元202可 以具有不同数量的处理内核、不同数量的本地并行处理存储器等等。当存在有多个并行处 理单元202时,那些并行处理单元可以以高于单个并行处理单元202可能达到的吞吐量来 并行操作以处理数据。包含有一个或多个并行处理单元202的系统可以以各种配置和形式 因素实现,包括台式计算机、笔记本计算机、或是手持个人计算机、服务器、工作站、游戏控 制台、嵌入式系统等等。处理簇阵列概述图3A是根据本发明一个实施例的在图2的并行处理单元202之一中的GPC 208 的框图。每个GPC 208可以配置为并行执行大量的线程,在此术语“线程”是指对一特定组 的输入数据执行的特定程序的实例。在一些实施例中,单指令多数据(SIMD)指令发出技术 被用于支持并行执行大量线程,而不用提供多个独立的指令单元。在其他实施例中,使用配 置为向每个GPC 208中的一组处理引擎发出指令的共同指令单元,单指令多线程(SIMT)技 术被用来支持并行执行大量通常同步的线程。不像SIMD执行方式中所有处理引擎通常执 行相同的指令,SIMT的执行允许不同的线程通过给定的线程程序更加容易地跟随分散的执 行路径。本领域的普通技术人员可以理解的是,SIMD处理方式代表了 SIMT处理方式的功 能性子集。在图形应用中,GPC 208可以被配置为实现图元引擎以进行屏幕空间图形处理功 能,其包括但不限于图元建立、光栅化和Z剔除。图元引擎304从工作分配单元200接收处 理任务,当处理任务不需要由图元引擎实施的操作时,处理任务通过图元引擎传送到流水 线管理器305。GPC 208的操作通过流水线管理器305有利地控制,流水线管理器305将处 理任务分配给流多处理器(SPM) 310。流水线管理器305也可以配置为通过为SPM 310输出 的处理的数据指定目的地来控制工作分配交叉器(crossbar) 330。在一个实施例中,每个GPC 208包括M个SPM 310,其中M彡1,每个SPM 310配置 成处理一个或多个线程组。此外,每个SPM 310有利地包括可以流水线化的相同组的功能 单元(例如算术逻辑单元等),允许新指令在前指令完成之前发出,这已在本领域中公知。 可以提供功能单元的任何组合。在一个实施例中,功能单元支持各种运算,包括整数和浮点 算术(例如加法和乘法)、比较运算、布尔运算(与、或、异或)、移位和各种代数函数(例如 平面插值函数、三角算法函数、指数和对数函数等)计算;并且相同的功能单元硬件可以被 平衡为实施不同的运算。发送到特定GPC 208的系列指令构成了已在本文前面定义的线程,且在SPM 310 内在并行处理引擎(未示出)上一定数量同时执行的线程的集合在本文中称为线程组。如 本文所使用的,线程组指的是对不同输入数据同时执行相同程序的线程的组,组中的每个 线程被分配给SPM 310中的不同处理引擎。线程组可以包括比SPM 310中处理引擎数量少 的线程,在这种情况中,在当处理线程组时的周期期间,一些处理引擎将是空闲的。线程组 也可以包括比SPM 310中处理引擎数量多的线程,在这种情况中,处理将发生在多个时钟 周期上。由于每个SPM 310可以同时支持多达G个线程组,因此多达GxM个线程组可以在任何给定的时间在GPC 208中执行。另外,多个相关的线程组可以同时在SPM310中是活动的(在不同的执行阶段)。 这个线程组的集合在本文中称为“合作线程阵列”(“CTA”)。特定CTA的大小等于m*k,其 中k是在线程组中同时执行的线程的数目且典型地是在SPM310中并行处理引擎的数目的 整数倍,m是在SPM310中同时活动的线程组的数目。CTA的大小通常由程序员和CTA可用 的诸如存储器或寄存器的硬件资源的数量确定。专有本地地址空间对每个线程可用,且共享的每CTA地址空间用于在CTA中的线 程之间传递数据。存储在每线程本地地址空间和每CTA地址空间中的数据存储在Ll高速 缓存320中,且可以使用逐出策略来帮助将数据保持在Ll高速缓存320中。每个SPM 310 使用在用于进行装载和存储操作的相应的Ll高速缓存320中的空间。每个SPM 310也访问 所有GPC 208共享并可以用于在线程之间传输数据的分区单元215中的L2高速缓存。最 后,SPM 310也访问片外“全局”存储器,其可以包括例如并行处理存储器204和/或系统存 储器104。L2高速缓存可以用于存储写入到全局存储器中和从全局存储器中读取的数据。 可以理解的是,并行处理单元202外部的任何存储器都可以用作全局存储器。在图形应用中,GPC 208可以配置为使得每个SPM 310和纹理单元315耦合以进 行纹理贴图操作,例如确定纹理样本的位置、读取纹理数据和过滤纹理数据。纹理数据通过 存储器接口 214读取并按照需要从L2高速缓存、并行处理存储器204或者系统存储器104 中取得。纹理单元315可以配置为在内部高速缓存中存储纹理数据。在一些实施例中,纹 理单元315与Ll高速缓存320耦合且纹理数据存储在Ll高速缓存320中。每个SPM 310 向工作分配交叉器330输出处理的任务,以向另一 GPC 208提供处理的任务以做进一步处 理,或通过交叉器单元210将处理的任务存储在L2高速缓存、并行处理存储器204或者系 统存储器104中。PreROP(预先光栅操作器)325配置成从SPM 310中接收数据,引导数据 至分区单元215内的光栅操作单元,并进行颜色混合的优化,组织像素颜色数据,并进行地 址转换。可以理解的是,本文描述的内核架构是示例性的,可以做变化和改变。任何数量的 处理引擎,例如图元引擎304、SPM 310、纹理单元315或PreROP 325可以包括在GPC 208 中。进一步,虽然只示出了一个GPC 208,并行处理单元202可以包括任何数量的GPC 208, 这些GPC 208功能上有利地彼此相似,使得执行行为不取决于哪个GPC 208接收了特定处 理任务。进一步,每个GPC 208使用单独的和不同的处理引擎、Ll高速缓存320等相对另 外的GPC 208有利地独立地工作。图3B是根据本发明一个实施例的图2中并行处理单元202其中之一中的分区单 元215的框图。如图所示,分区单元215包括L2高速缓存350、帧缓冲器(FB) 355和光栅操 作单元(ROP) 360。L2高速缓存350是配置为进行从交叉器单元210和ROP 360接收的装 载和存储操作的读/写高速缓存。读取缺失和紧急写回请求通过L2高速缓存350输出到 帧缓冲器355处理。脏(dirty)更新也送到帧缓冲器355用于机会处理。帧缓冲器355直 接与并行处理存储器204接口,输出读取和写入请求,并接收从并行处理存储器204读取的 数据。在图形应用中,ROP 360是进行光栅操作的处理单元,例如模板、ζ测试、混合等, 并将像素数据输出为处理的图形数据以存储在图形存储器中。在本发明的一些实施例中,
9ROP 360包括在每个GPC 208中,而不是在分区单元215中,像素的读和写请求通过交叉器 单元210来发送,而不是通过像素段数据。处理的图形数据可以显示在显示设备110上,或路由以通过CPU 102或通过并行 处理子系统112中的处理实体之一来进一步处理。每个分区单元215包括ROP 360以分配 光栅操作的处理。在一些实施例中,ROP 360配置为压缩写到存储器中的ζ或颜色数据,并 将从存储器中读取的ζ或颜色数据解压缩。本领域的技术人员可以理解的是,图1、2、3A和3B中描述的架构决不限制本发明 的范围,本文中教导的技术可以在任何适合地配置的处理单元上实现,该处理单元包括但 不限于一个或多个CPU、一个或多个多内核CPU、一个或多个并行处理单元202、一个或多个 GPC 208、一个或多个图形或专用处理单元等,这些都不离开本发明的范围。死锁避免当通信路径113是PCIe总线时,在PCIe总线中的待决的写请求阻止从系统存储 器104返回的读完成到达并行处理子系统202。当在待决的写请求能处理之前并行处理子 系统202需要读完成时,死锁发生。本发明的实施例提供了将读完成通过与用于发送写请 求的虚拟通道分开的PCIe的虚拟通道(VC)路由的技术。因此,不会阻止读完成到达并行 处理子系统202并避免了死锁。图4是根据本发明一个实施例的配置为避免死锁的计算机系统400的框图。如图 所示,计算机系统400包括与存储器桥105集成的CPU102、系统存储器104、外围部件接口 快速(PCIe)总线401和并行处理子系统202。CPU102通过存储器桥105与系统存储器104 耦合。CPU102也通过存储器桥105和PCIe总线401与并行处理子系统202耦合。CPU102 通过存储器桥105和PCIe总线401可以访问在并行处理子系统202中的存储器单元。同 样,并行处理子系统202也通过PCIe总线401和存储器桥105访问系统存储器104。CPU102是计算机系统400的主处理器并配置为通过存储器桥105发出包括读请求 和写请求的请求给系统存储器104。CPU102也通过存储器桥105和PCIe总线401发出请 求给并行处理子系统202。并行处理子系统202是配置为为CPU102实施不同处理操作的协处理器。这些处理 操作包括数据压缩和解压缩。并行处理子系统202包括配置为通过PCIe总线401从CPU102 接收请求并将请求路由给并行处理子系统202的不同部件以处理的PCIe接口 402。PCIe 接口 402也通过PCIe总线401发送请求给CPU102或者系统存储器104。PCIe接口 402通 过在PCIe总线401上的不同虚拟通道(VC)路由数据。这些虚拟通道包括VCO和VCl (未 示出)。并行处理子系统进一步包括主机404、客户端406A-406N、I/O单元205、交叉器单 元210、L2高速缓存350和并行处理存储器204。I/O单元205允许并行处理子系统实施存 储器访问操作并包括存储器管理单元(MMU)仲裁器408、MMU410、转换后备缓冲器(TLB)412 和一个或多个迭代器414。主机404是允许CPU102访问I/O单元205的引擎。主机404与在I/O单元205 中的MMU仲裁器408耦合。主机404从CPU102接收请求并将这些请求通过MMU仲裁器408 发送给MMU410。客户端406A-406N也与MMU仲裁器408耦合。客户端406A-406N是实施 不同功能的引擎,这些功能包括存储器管理、图形显示、指令提取、加密、纹理处理和视频解码。客户端406A-406N配置为发出请求给I/O单元205。MMU仲裁器408在主机404和客户端406A-406N的每个之间仲裁并允许这些引擎 访问MMU410。MMU仲裁器408检查与接收自主机404和客户端406A-406N的请求相关的引 擎ID,该引擎ID指示是否请求来自CPU102。当引擎ID指示请求来自CPU102时,通过使在 请求中的“特殊”位等于1而将该请求标记为“特殊”。然后请求路由给MMU410。MMU410为主机404和客户端406A-406N提供虚拟到物理地址转换。当主机404和 /或客户端406A-406N通过MMU仲裁器408发送请求给MMU410时,MMU410将请求中指定的 虚拟地址转换成物理地址。虚拟到物理地址转换可以使用TLB412加速。TLB412存储最近 访问的虚拟到物理地址的映射。如果接收的虚拟地址包括在TLB412中,那么与该虚拟地址 相关的物理地址可以快速地从TLB412获取。如果TLB412没有存储需要的虚拟到物理的映 射,那么MMU410发出读请求以检索包括需要的虚拟到物理地址映射的页表。作为另一请求的直接结果发出的这样的读请求在下面称为“派生的读请求”。如 果产生派生的读请求的初始请求标记为特殊,那么MMU410将派生的读请求标记为特殊。 MMU410将派生的读请求发送给PCIe接口 402。当派生的请求没有标记为特殊时,PCIe接 口 402在VCO上路由派生的读请求,当派生的读请求标记为特殊时,PCIe接口 402在VCl上 路由派生的读请求。从没有标记为特殊的请求返回的读完成在VCO上返回,而从标记为特 殊的请求返回的读完成在VCl上返回。当系统存储器104接收与请求的数据相关的读完成 时,初始请求的处理继续。MMU410将请求和物理地址发送给迭代器414之一。迭代器414将物理地址转换为 交叉器原始地址并将请求和交叉器原始地址发送给交叉器单元210。然后交叉器单元210 将请求路由给L2高速缓存350。L2高速缓存350是存储可以由I/O单元205需要的数据的低延迟存储器单元。L2 高速缓存350包括允许并行处理子系统202对接收自系统存储器104的数据或存储在L2高 速缓存350中的数据进行压缩和解压缩的压缩和解压缩单元(未示出)。L2高速缓存350 包括标签存储件(未示出),该标签存储件包括指示L2高速缓存350的最近访问的高速缓 存行的压缩状态的标签。当L2高速缓存350接收以L2高速缓存350中的特定高速缓存行为目标的写请求 时,L2高速缓存350使用标签存储件以确定是否目标高速缓存行是压缩的。当标签存储件 不包括由请求指示的高速缓存行的压缩状态时,L2高速缓存350产生派生的读请求以访问 在系统存储器104中的后备存储件(未示出)。L2高速缓存350通过交叉器单元210将派 生的读请求发送给PCIe接口 402。PCIe接口 402确定是否派生的读请求标记为特殊,并因 此将派生的读请求在PCIe总线401上路由。当系统存储器104返回与派生的读请求相关 的读完成时,当派生的读请求标记为特殊时这个读完成在VCl上发送,因此当写请求已经 在PICe总线401上时避免了死锁条件。如果后备存储件指示目标高速缓存行是压缩的,那么L2高速缓存350解压缩目标 高速缓存行,将解压缩的数据与包括在写请求中的数据合并,并将解压缩的和合并的数据 写回到在L2高速缓存350中的高速缓存行中。L2高速缓存350也可以更新标签存储件以 包括最近访问的高速缓存行的压缩状态。在一个实施例中,合并的数据可以再次压缩。当 数据解压缩时,其以解压缩的格式存储。标签存储件指示是否片是压缩的并因此需要解压
11缩,或者可以直接写而不用首先解压缩。L2高速缓存350也可以接收写请求,该写请求指定CPU102需要向其写数据的系统 存储器104的压缩的区域或“压缩片”。典型地,虽然压缩片来自并行处理子系统202中,但 在一个实施例中CPU102产生压缩片。L2高速缓存350接收写请求并产生派生的读请求以 访问系统存储器104并从系统存储器104读压缩片。L2高速缓存350通过交叉器单元210 将派生的读请求发送给PCIe接口 402。PCIe接口 402确定是否派生的读请求标记为特殊, 并因此将派生的读请求在PCIe总线401上路由。如果派生的读请求标记为特殊,那么系统 存储器104在VCl上返回与派生的读请求相关的读完成,因此避免了当写请求在PCIe总线 401上待决时可能发生的死锁条件。L2高速缓存350接收从派生的请求返回的压缩的数据, 对压缩的数据解压缩,将写数据与解压缩的数据合并,压缩合并的数据并将压缩的、合并的 数据写回到系统存储器104。将CPU102发出的请求标记为特殊,并也将响应那些请求产生的派生的读请求标 记为特殊,由于与标记为特殊的请求相关的读完成在VCl而不是VCO上发送,因此允许避免 死锁。使用标准的(非PCIe)总线协议技术,请求也可以标记为“灵活排序”或以其他方式 标记,其指示读完成可以不用考虑排序规则返回。虽然这个技术参考可能产生死锁的特定 环境在上面做了描述,但是本领域的技术人员将理解的是,将CPU102发出的请求标记为特 殊,并也将响应那些请求产生的派生的读请求标记为特殊,当PCIe总线401具有待决的写 请求时,允许避免死锁。图5是根据本发明一个实施例的避免死锁的方法步骤的流程图。本领域的技术人 员将理解的是,虽然该方法500结合图1-4的系统做了描述,但是配置为以任何顺序实施方 法步骤的任何系统都在本发明的范围中。如图所示,方法500开始于步骤502,其中MMU仲裁器408从主机404或客户端 406A-406N之一接收请求。请求可以是读请求或写请求。另外,请求可以以L2高速缓存 350、并行处理存储器204或系统存储器104为目标。在步骤504,MMU仲裁器408检查与请 求相关的引擎ID。引擎ID指示请求的来源。例如,请求可能从客户端406A-406N之一发 送,或者作为替换,可能通过主机404从CPU102发送。在步骤506,MMU仲裁器408确定是 否CPU102发送了请求。如果引擎ID指示CPU102发送请求,那么方法500进行到步骤508。 在步骤506,如果MMU仲裁器408确定CPU102没有发送请求,那么方法500进行到步骤518。在步骤508,MMU仲裁器408将请求标记为特殊。MMU仲裁器408配置为将在请求 中的位设置为“1”以指示该请求从CPU102发送。在步骤510,请求使得派生的读请求产生。 请求使得派生的读请求在不同环境下产生。例如,当需要读系统存储器104以使MMU410可 以实施虚拟到物理地址转换时,MMU410产生以系统存储器104为目标的派生的读请求。可 替换地,当需要读系统存储器104以使L2高速缓存350可以确定高速缓存行的压缩状态 时,L2高速缓存350产生以系统存储器104为目标的派生的读请求。初始请求使得派生的 读请求产生的各种其他情况是可能的。在步骤512,派生的读请求标记为特殊。当MMU410产生派生的读请求时,MMU410 将派生的读请求标记为特殊。当L2高速缓存350产生派生的读请求时,L2高速缓存350将 派生的读请求标记为特殊。如果并行处理子系统202的另外部件产生派生的读请求时,该 部件将派生的读请求标记为特殊。在步骤514,PCIe接口 402接收和检查请求。该请求可以是派生的读请求或可替换地是不同的请求。在步骤516,PCIe接口 402确定是否请求标记为特殊。如果请求没有标记为特殊, 那么方法500进行到步骤518,其中PCIe接口 402将请求和与请求相关的读完成通过PCIe 总线401的VCO路由。如果请求标记为特殊,方法500进行到步骤520,且PCIe接口 402将 请求和与请求相关的读完成通过PCIe总线401的VCl路由。然后方法终止。总之,并行处理单元(PPU)将接收自中央处理单元(CPU)的请求标记为“特殊”,使 得响应请求产生的派生的读请求也标记为特殊并因此在外围部件接口快速(PCIe)总线的 辅助虚拟通道上路由。PPU将标记为特殊的请求通过外围部件接口快速(PCIe)总线的虚拟 通道(VC)I发送。如果标记为特殊的请求产生读完成,那么读完成通过PCIe总线的VCl返 回。有利地,由于与标记为特殊的请求相关的读完成在不同的虚拟通道上发送,因此 从标记为特殊的请求返回的读完成当在VCO上已经有写请求时不会造成死锁。因此,本发明的实施例提供了使用传播通过结构的状态位用于识别和标记由 CPU102发出给并行处理子系统202的可能造成死锁的一定请求(例如读和写请求)的且由 该请求产生的任何派生的事务也用该状态位标记的技术。在其他实施例中,标准总线接口 限定的机制(例如“灵活排序”)可以用于避免死锁。要注意的是,由并行处理子系统202发送给系统存储器104的一定事务不会造成 死锁且因此不在第二虚拟通道上传输。例如,用作同步基元的或者另外基于读完成不超过 写请求的排序规则的事务在第一虚拟通道上发送。例如,当并行处理子系统202发出信号 收集以检测CPU102向并行处理存储器204的写何时完成时,读完成保证了所有较早的CPU 启动的写事务已经到达连贯点。本发明的一个实施例可以实施为与计算机系统使用的程序产品。程序产品的程序 限定了实施例(包括本文描述的方法)的功能且能包含在各种计算机可读存储介质中。示 例的计算机可读存储介质包括但不限于(i)其上信息被永久存储的不可写存储介质(例 如,计算机中的只读存储器设备,诸如由CD-ROM驱动器可读取的CD-ROM盘、闪存、ROM芯片 或任何类型的固态非易失半导体存储器);和(ii)其上存储可改变信息的可写存储介质 (例如,软盘驱动器中的软盘或硬盘驱动器或任何类型的固态随机存取半导体存储器)。上面已经参考特定实施例对本发明进行了描述。但是,本领域的技术人员将理解 的是,在不背离如所附的权利要求阐明的本发明的较宽的精神和范围的情况下,可以对特 定实施例作出各种修改和改变。因此前述的描述和附图是示例性的而不是限制性的。
1权利要求
一种计算机系统,包括第一处理单元、第二处理单元、存储器桥、系统存储器和通过第一虚拟通道和第二虚拟通道将该第二处理单元连接到该第一处理单元、该存储器桥和该系统存储器的总线;其中该第二处理单元包括总线接口单元,该总线接口单元配置为(i)从该第一处理单元通过该第一虚拟通道接收读或写请求;和(ii)将在处理该读或写请求时产生的派生的读请求在该第二虚拟通道上发送。
2.根据权利要求1的计算机系统,其中该第二处理单元进一步包括具有转换后备缓冲 器的存储器管理单元,且当在该转换后备缓冲器中发生缺失时该存储器管理单元产生该派 生的读请求。
3.根据权利要求1的计算机系统,进一步包括用于该第二处理单元的本地存储器,其 中该第二处理单元通过高速缓存存储器单元与该本地存储器连接且该高速缓存存储器单 元产生该派生的读请求。
4.根据权利要求3的计算机系统,其中当该读或写请求访问没有存储在该高速缓存存 储器单元中的压缩状态信息时,该高速缓存存储器单元产生该派生的读请求。
5.根据权利要求3的计算机系统,其中当该读或写请求从该系统存储器的压缩的区域 访问数据时,该高速缓存存储器单元产生该派生的读请求。
6.根据权利要求1的计算机系统,其中该第二处理单元进一步包括存储器管理单元仲 裁器,该存储器管理单元仲裁器配置为从多个客户端接收读或写请求,且如果读或写请求 接收自该第一处理单元,将该读或写请求标记为特殊。
7.根据权利要求6的计算机系统,其中该客户端的每个具有客户端标识符且该存储器 管理单元仲裁器配置为检查与每个读或写请求相关的该客户端标识符。
8.根据权利要求1的计算机系统,其中该第一处理单元是中央处理单元,该第二处理 单元是并行处理单元,和该总线是PCIe总线。
9.在具有第一处理单元、第二处理单元、存储器桥、系统存储器和将该第二处理单元连 接到该第一处理单元、该存储器桥和该系统存储器的总线的计算机系统中,一种在第二处 理单元处理读或写请求的方法,包括以下步骤通过该总线的第一虚拟通道在该第二处理单元接收读或写请求;当处理该读或写请求时在该第二处理单元产生一个或多个派生的读请求并将该派生 的读请求通过该总线的第二虚拟通道发送给该系统存储器;和通过该总线的该第二虚拟通道接收该派生的读请求的完成,和完成该最初接收的读或写请求。
10.根据权利要求9的方法,其中在处理该读或写请求时,当访问该系统存储器的压缩 的区域时,产生该派生的读请求。
全文摘要
通过标记CPU流量为特殊来避免死锁。通过将并行处理器发出给系统存储器的读请求标记为“特殊”而避免死锁。标记为特殊的与读请求相关的读完成在PCIe总线的虚拟通道1上路由。在虚拟通道1上返回的数据不会由在虚拟通道0上的写请求停止,因此避免了潜在的死锁。
文档编号G06F9/38GK101901198SQ200910249698
公开日2010年12月1日 申请日期2009年12月14日 优先权日2008年12月12日
发明者丹尼斯·K.·马, 塞缪尔·H.·邓肯, 帕特里克·R.·马尔尚, 戴维·B.·格拉斯科, 阿图·卡拉姆布尔, 黄伟杰 申请人:辉达公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1