CN102640116A - 对外部dram的错误检测和纠正 - Google Patents

对外部dram的错误检测和纠正 Download PDF

Info

Publication number
CN102640116A
CN102640116A CN2010800539214A CN201080053921A CN102640116A CN 102640116 A CN102640116 A CN 102640116A CN 2010800539214 A CN2010800539214 A CN 2010800539214A CN 201080053921 A CN201080053921 A CN 201080053921A CN 102640116 A CN102640116 A CN 102640116A
Authority
CN
China
Prior art keywords
data
ecc
request
write
unit
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.)
Granted
Application number
CN2010800539214A
Other languages
English (en)
Other versions
CN102640116B (zh
Inventor
弗雷德·格伦纳
沙恩·凯尔
约翰·S·蒙提姆
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
Priority claimed from US12/568,639 external-priority patent/US8301980B2/en
Priority claimed from US12/568,642 external-priority patent/US8190974B2/en
Application filed by Nvidia Corp filed Critical Nvidia Corp
Publication of CN102640116A publication Critical patent/CN102640116A/zh
Application granted granted Critical
Publication of CN102640116B publication Critical patent/CN102640116B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1048Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using arrangements adapted for a specific error detection or correction feature

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本发明的一个实施例提出了一种用于使用错误纠正码(ECC)来保护数据的技术。该数据由处理单元访问并存储在外部存储器中,例如动态随机访问存储器(DRAM)。应用程序数据和相关的ECC数据有利的存储在共同DRAM装置内的共同页中。在处理器和外部共同DRAM装置之间通过一组共同的输入/输出(I/O)引脚来传输应用程序数据和ECC数据。通过消除通常与传输和存储ECC数据相关联的I/O引脚和DRAM设备,有利地降低了系统复杂性和成本。

Description

对外部DRAM的错误检测和纠正
相关申请的交叉引用
本申请要求于2009年9月28日提交的序列号为12/568,639的美国专利申请以及于2009年9月28日提交的序列号为12/568,642的美国专利申请的优先权。
技术领域
本发明总体上涉及存储器系统中的错误检测和纠正,且尤其涉及对外部动态随机访问存储器(DRAM)的错误检测和纠正。
背景技术
某些处理单元包括多个可配置为执行高吞吐量、高度并行性计算的多线程处理内核。包括多线程处理内核的处理单元的一个例子是图形处理单元(GPU)。GPU可经配置以在多线程的处理内核上执行通常需要很高的计算吞吐量的图形程序以生成实时的图形图像。因为图形程序和图形程序相应的数据集通常需要相当容量(amount)的存储器,诸如分立DRAM芯片的外部存储器通常附加到GPU以提供额外的存储。每个DRAM芯片均包括通过GPU上的一个或多个I/O引脚组附加到GPU的输入/输出(I/O)数据引脚和I/O控制引脚。
许多用于GPU处理的常规应用程序,如实时三维图形娱乐应用程序,并不需要高度的计算完整性,因此不需要对存储在外部DRAM芯片中的数据的硬件辅助错误检测和纠正。例如,如果由于在外部DRAM中的软件错误而在一秒钟内生成的八十五帧中有一帧包括一个错误的像素值,用户可能不会注意到或不在乎发生错误。然而,可能会显著受益于GPU设备提供的高吞吐量、多线程处理能力的某些应用程序由于需要正确的结构,事实上确实需要错误检测和纠正。
在诸如中央处理单元(CPU)的处理单元中执行错误检测和纠正的常规的方法,包括使用错误纠正代码(ECC)来保护数据处理单元和DRAM存储器之间的每个数据交换(transaction)。ECC包括为每次交换添加到相应的数据位的一组保护位。保护位的值基于数据位的值计算。为了适应保护位的存储,传统的ECC实现方案需要处理单元上的额外I/O引脚来传输保护位和至少一个额外的DRAM芯片来存储保护位。当多个独立的DRAM信道需要ECC保护时,通常需要每个信道至少有一个额外的DRAM芯片来为相应的ECC保护位提供存储。然而,增加I/O引脚和DRAM芯片到处理单元系统以支持ECC对于许多不需要ECC支持的处理单元应用程序会带来不必要的和潜在显著的成本负担。
因此,现有技术需要没有与ECC保护相关联的传统的成本负担而使GPU能够支持ECC保护DRAM中的数据的系统和方法。
发明内容
本发明的一个实施例提出了一种用于对存储在存储器单元中的数据进行错误检查的方法,其中所述数据和与所述数据相关的错误纠正代码(ECC)都存储在所述存储器单元中。该方法包括初始化与存储在所述存储器单元内的数据页相对应的读取列表数据结构,并且接收一个或多个数据读取请求以访问来自所述数据页的数据,其中所述一个或多个数据读取请求中的每一个均对应于所述数据页中所包含的不同的数据段。对于所述一个或多个数据读取请求中的每一个,该方法进一步包括确定对ECC段进行访问的ECC读取请求是否已包含在所述读取列表数据结构中,所述ECC段包含在所述数据页中并与对应于所述数据读取请求的所述数据段相关联。如果尚未包含所述ECC读取请求,则添加所述ECC读取请求到所述读取列表数据结构,并在所述ECC读取请求之后将所述数据读取请求添加到所述读取列表数据结构。如果已经包含所述ECC读取请求,则在所述ECC读取请求之后将所述数据读取请求添加到所述读取列表数据结构。本方法还包括将所述读取列表数据结构传送到仲裁单元以从所述存储器单元访问与所述一个或多个数据读取请求相对应的数据段以及与所述数据段相关联的一个或多个ECC段。
本发明的一个优点是并行处理子系统112的普通硬件配置既可操作在ECC模式下以获得更高的计算完整性也可以操作在非ECC模式下以获得更高的性能,而没有与在ECC模式下操作处理系统相关联的常规成本负担。
本发明的各种其它实施例提出了本文所描述的其它方法、配置为实施以上方法和本文描述的其它方法的存储器控制器以及包含这种存储器控制器的计算设备。
附图说明
因此,可以详细地理解上述本发明的特征,并且可以参考实施例得到对如上面所概括的本发明更具体的描述,其中一些实施例在附图中示出。然而,应当注意的是,附图仅用于示意性地表示本发明的典型实施例,因此不应被认为是对实施例范围的限制。本发明可以具有其他等效的实施方式。
图1是图示为实现本发明的一个或多个方面而配置的计算机系统的框图;
图2是根据本发明一个实施例,用于图1中计算机系统的并行处理子系统的框图;
图3A是根据本发明一个实施例,图2中一个PPU内的GPC的框图;
图3B是根据本发明一个实施例,图2中一个PPU内的分区单元的框图;
图4示出了根据本发明的一个实施例,耦合到分区单元的动态随机访问存储器(DRAM)的地址空间;
图5A示出了根据本发明的一个实施例的一个DRAM页,所述DRAM页组织为第一组数据块、第二组数据块以及存储在一个数据块的错误纠正码(ECC);
图5B示出了根据本发明的一个实施例,在一个DRAM页中的组织为四个三十二字节ECC数据段的ECC数据块;
图6A是根据本发明的一个实施例的从L2高速缓存到DRAM的ECC保护读取路径的框图;
图6B示出了根据本发明的一个实施例的用于将读取请求组织到DRAM的读取列表结构;
图6C是根据本发明的一个实施例的用于组建读取列表结构的方法步骤的流程图;
图6D是根据本发明的一个实施例的用于读取DRAM页的方法步骤的流程图;
图7A是根据本发明的一个实施例的从L2高速缓存到DRAM的ECC保护写入路径的框图;
图7B示出了根据本发明的一个实施例的将写入请求组织到DRAM的写入列表结构;
图7C是根据本发明的一个实施例的用于组建写入列表结构的方法步骤的流程图。
图7D是根据本发明的一个实施例,用于使用字节使能(enables)来写入DRAM页以有选择地写入相关ECC数据的方法步骤的流程图;和
图7E是根据本发明的一个实施例,用于使用读取-修改-写入方法来写入DRAM页以选择性地写入相关ECC数据的方法步骤的流程图。
具体实施方式
在下面的描述中,将阐述大量的详细内容以提供对本发明更深入的理解。然而,本技术领域的技术人员应该清楚,本发明可以在没有一个或多个这些具体细节的情况下得以实施。在其他实例中,没有描述公知的特征以避免对本发明造成混淆。
系统概述
图1示出了经配置以实现本发明的一个或多个方面的计算机系统100的框图。所述计算机系统100包括中央处理单元(CPU)102和系统存储器104,所述系统存储器104和CPU 102经由通过存储器桥105的总线路径通信。如图1所示,存储器桥105可被集成到CPU 102中。可选的,存储器桥105可以是诸如北桥芯片的常规设备,其经由总线连接到CPU 102。存储器桥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桥107与例如网络适配器118以及各种外插卡(add-in card)120和121的其他组件之间的连接。其他组件(未明确示出),包括USB或其他端口连接、CD驱动器、DVD驱动器、胶片录制设备及类似组件,也可以连接到I/O桥107。使图1中所示各种组件互连的通信路径可以采用任何适合的协议实现,例如PCI(外部组件互连)、PCI-Express(PCI-E)、AGP(加速图形端口)、超传输、任何其他总线或者点对点通信协议。不同设备间的连接可采用本技术领域已知的不同协议。
在一个实施例中,并行处理子系统112包含用于对图形和视频处理进行优化的电路,所述电路包括例如视频输出电路,并且构成图形处理单元(GPU)。在另一个实施例中,在保留底层的(underlying)计算架构的同时,所述并行处理子系统112包含用于对通用处理进行优化的电路,本文将进行更为详细的描述。在另一个实施例中,可以将所述并行处理子系统112与一个或多个其他系统元件集成,例如存储器桥105、CPU 102、以及I/O桥107,以形成片上系统(SoC)。
应该理解,本文所示系统是示例性的,可以对其惊醒变化和修改。连接拓扑,包括桥的数量和布置,可根据需要修改。例如,在一些实施例中,系统存储器104直接连接到CPU 102而不是通过桥,其他设备通过存储器桥105以及CPU 102与系统存储器104通信。在其他可选拓扑中,并行处理子系统112连接到I/O桥107或直接连接到CPU 102,而不是连接到存储器桥105。在又一些实施例中,一个或多个CPU 102、I/O桥107、并行处理子系统112和存储器桥105可被集成到单个芯片内。本文所示的特定组件是任选的,例如,可以支持任意数量的外插卡或外设。在一些实施例中,开关116被去掉,网络适配器118和外插卡120、121直接连接到I/O桥107。在其他实施例中,显示设备110可被去掉。
图2示出了根据本发明一个实施例的并行处理子系统112。如图所示,并行处理子系统112包括一个或多个并行处理单元(PPU)202,每个并行处理单元都耦合至本地并行处理(PP)存储器204。通常,并行处理子系统包括U个PPU,其中U≥1。(在这里,相似对象的多个实体用表明该对象的参考数字和根据需要表明该实体的括号内数字来表示)。PPU 202和并行处理存储器204可以使用一个或多个集成电路设备来实现,例如可编程处理器,专用集成电路(ASIC)或存储器设备,或以任何其他技术上可行的方式来实现。
再次参考图1,在一些实施例中,在并行处理子系统112中的一些或者全部的PPU 202是具有渲染管线的图形处理器,其能被配置成进行与下列情形有关的各种任务:从通过CPU 102和/或系统存储器104提供的图形数据产生像素数据;与本地并行处理存储器204(其可被用作图形存储器,例如包括常规的帧缓冲区(buffer))交互以储存并更新像素数据;将像素数据输送给显示设备110等。在一些实施例中,并行处理子系统112可包括作为图形处理器的一个或多个PPU 202和用于通用计算的一个或多个其他PPU 202。PPU可以是相同或不同的,且每个PPU可以有其自己专用的并行处理存储器设备或没有专用的并行处理存储器设备。一个或多个PPU202可以将数据输出到显示设备110或者每个PPU 202可以将数据输出到一个或多个显示设备110。
在操作中,CPU 102是计算机系统100的主处理器,其控制和协调其他系统组件的操作。特别是,CPU 102发出控制PPU 202操作的命令。在一些实施例中,CPU 102将针对每个PPU 202的流写入到命令缓冲区(图1和图2中未明确地示出),该命令缓冲区可以位于系统存储器104、并行处理存储器204或是CPU 102和PPU 202都可以访问的另一个存储位置中。PPU 202从命令缓冲区中读出命令流,并且随后相对于CPU 102的操作异步地执行命令。CPU 102也可以建立数据缓冲区,PPU 202可以响应命令缓冲区中的命令来读取该数据缓冲区。每个命令和数据缓冲区都可以由每一个PPU 202读取。
现在返回参考图2,每个PPU 202均包括通过通信路径113而与计算机系统100的剩余部分通信的I/O(输入/输出)单元205,其连接到存储器桥105(或是在一个可选实施例中直接与CPU 102相连接)。PPU 202到计算机系统100的剩余部分的连接也可以变化。在一些实施例中,并行处理子系统112被实现为外插卡,其能插入到计算机系统100的扩展槽中。在其他实施例中,PPU 202可与总线桥一起集成到单一芯片上,总线桥例如可以是存储器桥105或I/O桥107。在另外的其他实施例中,PPU 202的一些或全部元件可以连同CPU 102一起集成到单一芯片上。
在一个实施例中,通信路径113是PCI-Express链路,其中如本领域所已知的,向每个PPU 202分配专用通道(lane)。也可以使用其他通信路径。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可以被分配为使用时间片(time-slice)方案进行处理任务以在不同处理任务之间切换。
GPC 208通过工作分布单元200接收将要执行的处理任务,该工作分布单元200从前端单元212接收定义了处理任务的命令。处理任务包括指向将要处理的数据的指针,所述数据例如表面(曲面片)数据、基元数据、顶点数据和/或像素数据以及状态参数和定义如何对数据进行处理的命令(例如执行什么程序)。工作分布单元200可以被配置成获取对应于处理任务的指针,工作分布单元200可以从前端212接收指针,或者工作分布单元200可以直接从前端212接收数据。在一些实施例中,索引(index)指定了阵列中数据的位置。前端212保证在命令缓冲区所指定的处理启动前,GPC 208被配置为有效状态。
例如,当PPU 202用于图形处理时,每个曲面片的处理工作量被分成大约相等大小的任务,以使得能将曲面细分处理分布给多个GPC 208。工作分布单元200可以被配置成以能提供任务到多个GPC 208用于处理的频率输出任务。在本发明的一些实施例中,部分GPC 208被配置成进行不同类型的处理。例如,第一部分可以被配置成进行顶点着色和拓扑生成,第二部分可以被配置成进行曲面细分和几何着色,以及第三部分可以配置成在屏幕空间上进行像素着色以产生经渲染的图像。分配部分GPC 208以执行不同类型的处理任务的能力有效地适应了由那些不同类型的处理任务所产生的数据的任何扩展和缩减。GPC 208产生的中间数据可以被缓冲,以当下游GPC 208接收数据的比率落后于上游GPC 208产生数据的比率时,允许中间数据在GPC 208之间以最少的停止(stalling)得到传输。
存储器接口214可以被分区成D个存储器分区单元,每个存储器分区单元都耦合至并行处理存储器204的一部分,其中D≥1。并行处理存储器204的每部分通常包括一个或多个存储器设备(例如DRAM 220)。本领域的普通技术人员可以理解的是,DRAM 220可以由其他合适的存储设备代替并且通常可以是惯常的设计。因此省略了详细的描述。诸如帧缓冲区或纹理映射这类的渲染目标可以跨越DRAM 220存储,允许分区单元215将每个渲染目标的一部分并行写入,以有效地使用并行处理存储器204的可用带宽。
GPC 208的任何一个均可以处理要被写入到并行处理存储器204中的任何DRAM 220中的数据。交叉开关单元210被配置为将每个GPC 208的输出路由(route)至任何分区单元215的输入或另一GPC 208用于进一步处理。GPC 208通过交叉开关单元210与存储器接口214通信以对各种外部存储器设备进行读取或写入。在一个实施例中,交叉开关单元210具有到存储器接口214的连接以与I/O单元205通信,交叉开关单元210也具有到本地并行处理存储器204的连接,因此使得不同GPC 208内的处理内核能与系统存储器104或对于PPU 202而言为非本地的其他存储器进行通信。交叉开关单元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)技术被用于使用被配置为向每个GPC 208中的一组处理引擎发送指令的共同指令单元,来支持大量通用同步线程的并行执行。不像SIMD执行方式中所有处理引擎通常执行相同的指令,SIMT的执行允许不同的线程通过给定的线程程序更加容易地跟随分散的执行路径。本领域的技术人员可以理解的是,SIMD处理方式代表了SIMT处理方式的功能子集。
在图形应用中,GPC 208可以被配置为实现基元引擎以执行屏幕空间图形处理功能,其包括但不限于基元建立、光栅化和Z剔除(culling)。基元引擎从工作分布单元200接收处理任务,并且当处理任务不需要基元引擎执行的操作时,处理任务通过基元引擎传输到管线管理器305。经由管线管理器305有利地控制GPC 208的操作,管线管理器305将处理任务分配给流多处理器单元(SPM)310。管线管理器305也可以被配置为通过为SPM 310输出的经处理数据指定目的地来控制工作分布交叉开关330。
在一个实施例中,每个GPC 208包括M个SPM 310,其中M≥1,其中每个SPM 310配置成处理一个或多个线程组。传送到特定GPC 208的系列指令构成了如本文前面定义的线程,且在SPM 310内跨并行处理引擎(未示出)的一定数量并发执行的线程的集合在本文中称为“线程组”。如本文所使用的,“线程组”是指对不同输入数据并发执行相同程序的线程的组,组中的每个线程被分配给SPM 310中的不同处理引擎。线程组可以包括比SPM 310中处理引擎数量少的线程,在这种情况中,在正在处理线程组的周期中,一些处理引擎将是空闲的。线程组也可以包括比SPM 310中处理引擎数量多的线程,在这种情况中,处理将发生在多个时钟周期上。由于每个SPM 310可以并发支持多达G个线程组,因此在任何给定的时间在GPC 208中可以允许执行多达G×M个线程组。
另外,在SPM 310中,多个相关的线程组可以在同一时间是活动的(处于执行的不同阶段)。这个线程组的集合在本文中被称为“协作线程阵列(CTA)”。特定CTA的大小等于m*k,其中k是在线程组中并发执行的线程的数量且通常是SPM 310中并行处理引擎数量的整数倍;m是SPM310中并发活动的线程组的数量。CTA的大小通常由程序员和CTA可使用的硬件资源例如存储器或寄存器的容量确定。
专有的本地地址空间对每个线程可用,且共享的每CTA地址空间用于在CTA中的线程之间传递数据。存储在每线程的本地地址空间和每CTA的地址空间中的数据存储在L1高速缓存320中,且可以使用逐出(eviction)策略来帮助将数据保持在L1高速缓存320中。每个SPM 310使用在相应的L1高速缓存320中的空间,所述L1高速缓存320用于进行加载和存储操作。每个SPM 310也有权访问分区单元215中的L2高速缓存,所述L2高速缓存在所有GPC 208之间共享并可以用于在线程之间传输数据。最后,SPM 310也有权访问片外“全局”存储器,其可以包括例如并行处理存储器204和/或系统存储器104。L2高速缓存可以用于存储被写入到全局存储器中和从全局存储器中读取的数据。可以理解的是,PPU 202外部的任何存储器都可以被用作全局存储器。
此外,每个SPM 310有利地包括可被管线化的相同的一组功能单元(例如算术逻辑单元等),允许在前一个指令完成之前发送新的指令,如本领域中所公知的。可以提供功能单元的任何组合。在一个实施例中,功能单元支持各种操作,包括整数和浮点算术(例如加法和乘法)、比较操作、布尔操作(与、或、异或)、位移和各种代数函数(例如平面插值函数、三角函数、指数函数和对数函数等)的计算;并且相同的功能单元硬件可以被平衡为(be leveraged to)执行不同的操作。
每个GPC 208均可包括经经配置以将虚拟地址映射到物理地址的存储器管理单元(MMU)328。在其他实施例中,MMU 328可以驻留在存储器接口214内。MMU 328包括一组页表项目(PTE)以及可选地包括高速缓存线索引(cache line index),该组页表项目被用于将虚拟地址映射到像素块块(tile)的物理地址。物理地址经处理以分配表面数据访问位置,从而允许分区单元之间的高效请求交错。高速缓存行索引可被用于确定对高速缓存线的请求是否命中或未命中。
在图形应用中,GPC 208可以被配置为使得每个SPM 310都耦合到纹理单元315以进行纹理映射操作,例如确定纹理采样位置、读取纹理数据和过滤纹理数据。根据需要,通过存储器接口214读取纹理数据并从L2高速缓存、并行处理存储器204或者系统存储器104中获取。纹理单元315可以被配置为在内部高速缓存中存储纹理数据。在一些实施例中,纹理单元315耦合到L1高速缓存320且纹理数据存储在L1高速缓存320中。每个SPM 310向工作分布交叉开关330输出经处理的任务,以向另一GPC208提供该经处理的任务用于进一步处理,或通过交叉开关单元210将经处理的任务存储在L2高速缓存、并行处理存储器204或者系统存储器104中。PreROP(预光栅操作)325被配置成从SPM 310中接收数据,引导数据至分区单元215内的ROP单元,并进行对颜色混合的优化,组织像素颜色数据,并进行地址转译。
可以理解的是,本文描述的内核架构是示例性的,可以进行变化和改变。任何数量的处理引擎,例如基元引擎、SPM 310、纹理单元315或preROP325可以被包括在GPC 208中。进一步,虽然只示出了一个GPC 208,但PPU 202可以包括任何数量的GPC 208,这些GPC 208功能上最好彼此相似,使得执行行为不取决于哪个GPC 208接收了特定处理任务。进一步,每个GPC 208最好使用单独的和不同的处理引擎、L1高速缓存320等以相对另外的GPC 208独立地操作。
图3B是根据本发明一个实施例的、图2中一个PPU 202中的分区单元215的框图。如图所示,分区单元215包括L2高速缓存350、帧缓冲区(FB)355和光栅操作单元(ROP)360。L2高速缓存350是被配置为执行从交叉开关单元210和ROP 360接收的加载和存储操作的读/写高速缓存。读取失败和紧急写回请求由L2高速缓存350输出到FB 355以进行处理。脏(dirty)更新也被发送到FB 355用于伺机处理。FB 355直接与DRAM220接口,输出读取和写入请求,并接收从DRAM 220读取的数据。
在图形应用程序中,ROP 360是执行光栅操作的处理单元,例如模板(stencil)、z测试、混合等,并将像素数据作为经处理的图形数据以存储在图形存储器中。在本发明的一些实施例中,ROP 360被包括在每个GPC208而不是分区单元215中,并且通过交叉开关单元210来传输像素的读和写请求,而不是像素段数据。
经处理的图形数据可以显示在显示设备110上,或被路由以由CPU102或由并行处理子系统112中的一个处理实体来进一步处理。每个分区单元215均包括ROP 360以分布光栅操作的处理。在一些实施例中,ROP360可以被配置为压缩写入存储器中的z数据或颜色数据,并解压缩从存储器中读取的z数据或颜色数据。
本领域的技术人员可以理解的是,图1、2、3A和3B中描述的架构绝不以任何方式来限制本发明的范围,本文中教导的技术可以在任何经合适配置的处理单元上实现,该处理单元包括但不限于一个或多个CPU、一个或多个多内核CPU、一个或多个PPU 202、一个或多个GPC 208、一个或多个图形或专用处理单元或其相似物,而不脱离本发明的范围。
到DRAM的读取路径的ECC保护
图4示出了根据本发明的一个实施例的、耦合到分区单元215的动态随机访问存储器(DRAM)220的地址空间410。DRAM地址空间410包括DRAM 220内按照递增的物理地址加以组织的多个DRAM页412。DRAM页412通常包括1024字节(1K字节)或2048字节(2K字节)。DRAM地址空间410可以与耦合到其他分区单元215的一个或多个其他的DRAM地址空间相结合以形成对于PPU 202可访问的更大的整体地址空间。
虽然在下面的图5A至图7C中讨论的本发明实施例通常考虑1K字节的DRAM页大小,但可以使用其它DRAM页的大小,如512字节或2048字节,而不脱离本发明的范围。
图5A示出了根据本发明的一个实施例的DRAM 518的一个页,所述页组织为第一组数据块(数据1)550、第二组数据块(数据2)552和存储在一个数据块520-7中的错误纠正代码(ECC)数据554。每个块520包括一百二十八个字节,所述一百二十八个字节组织为四个段(sector),每段三十二字节。数据1 550包括设置四个块520-0到520-3,所述四个块组织为十六个三十二字节的段。数据2 552包括三个块520-4到520-6,所述三个块组织为十二个三十二字节的段。ECC 554包括一个块520-7,所述块组织为四个三十二字节的段。数据1 550和数据2 552包括受ECC数据554保护的应用程序数据。每个三十二字节的段均可与图3B中L2高速缓存中的高速缓存线相关联。
本领域技术人员将认识到在使用2K字节DRAM页的实施例中,ECC数据的一个块可被用于保护给定页内的十五个应用程序数据块。
图5B示出了根据本发明的一个实施例的DRAM 518一个页中的ECC数据块520-7,所述ECC数据块520-7被组织到四个三十二字节的ECC数据544的段560-0到560-3。在一个实施例中,分配ECC数据554以保护应用程序数据的三十二字节增量。即,分配ECC数据554以保护DRAM页518中的各个段。ECC数据的第一个段ECC1 560-0提供了三十二字节的ECC数据,其被用于保护应用程序数据的十六个三十二字节的段。换句话说,ECC1 560-0的两个字节被用来保护数据1 550中的三十二字节应用程序数据。
ECC2 560-1被用于保护三百八十四字节的应用程序数据。ECC2 560-1数据的两个字节被用于保护数据2 552中的三十二个字节的应用程序数据。
ECC3 560-2和ECC4 560-3对于使用1K字节的页的DRAM配置来说可以是未使用的。对于使用2K字节的页的DRAM配置来说,ECC3 560-2和ECC4 560-3被用于以两个字节的ECC数据对应三十二字节的应用程序数据的比例来保护应用程序数据。
图6A是根据本发明的一个实施例的从L2高速缓存350到DRAM 220的ECC保护(ECC-protected)读取路径600的框图。ECC保护读取路径600位于图3B的FB 355(本文也称为“存储器控制器”)内。ECC保护读取路径600通过读取请求信号610接收来自L2高速缓存350的读取请求并通过读取返回数据信号612对该读取请求进行应答。I/O引脚614将ECC保护读取路径600连接到一个或更多DRAM芯片220。
ECC保护读取路径600包括读取请求队列620、地址修改单元622、排序单元624、仲裁单元626、DRAM控制器628、帧缓冲区I/O台(pad)630和读取返回单元632。读取请求队列620接收读取请求并存储该读取请求,直到地址修改单元622准备好处理该读取请求。在一个实施例中,L2高速缓存350生成读取请求。
地址修改单元622将与访问一百二十八字节的段的读取请求相关联的线性物理地址乘以七分之八(“8/7”),以从线性物理地址生成扩展的物理地址。线性物理地址采取用于应用程序数据的连续物理地址空间,而扩展的物理地址容纳与应用程序数据一起关联(in-line)存储的ECC数据。在一个实施例中,以每七个应用程序数据段有一个ECC数据段的比例包含ECC数据。在可替代实施例中,地址修改单元622将线性物理地址乘以十五分之十六(“16/15”),以在具有2K字节页的DRAM中,每十五个应用程序数据块相应容纳一个一百二十八字节的ECC数据块。PPU 202中执行的程序并不知晓扩展的物理地址空间或任何关联的ECC数据,其假定线性物理地址空间而生成读取请求。
排序单元624将读取请求结合到诸如DRAM页518的共同(common)DRAM页,从而使得一旦该共同DRAM页已经打开,则即使读取请求是由读取请求队列620以不同的顺序进行接收的,仍可顺序执行经结合的读取请求。排序单元624建立至少包括一个经结合的读取请求的读取列表结构并传送该读取列表结构到仲裁单元626进行处理。排序单元624可以同时生成多个读取列表结构,其中,每个读取列表结构与不同的DRAM页相关联。在一个实施例中,排序单元624支持同时生成至少六十个不同的读取列表结构。
在一个实施例中,仲裁单元626指示排序单元624何时关闭给定的读取列表结构,允许关闭的读取列表结构被执行。仲裁单元626基于读取列表结构调度顺序读取请求并将顺序读取请求传送到读取返回单元632和DRAM控制器628。将来自读取列表结构的元素通过读取列表数据路径636传送到读取返回单元632供读取返回单元632加以执行。作为替代地,可传送完整的读取列表结构到读取返回单元632用于执行。DRAM控制器628基于被传送到DRAM 220的命令来传送协议控制信号638到读取返回单元632。协议控制信号638允许读取返回单元632根据适当的DRAM控制协议进行操作,而无需要求读取返回单元632详细了解每个可耦合到FB 355的可能的DRAM设备。读取返回单位632从帧缓冲区I/O台630接收表示来自外部DRAM设备的电信号。
本领域技术人员将会认识到,当打开每个新的DRAM页时都读取至少一个ECC字节段可能带来性能负担。然而,与ECC字节相关联的读取命令延迟可能经常被DRAM 220所需要的其他命令所隐藏;因此,读取与应用程序数据关联的ECC数据的整体性能负担应会减少。
读取返回单元632接收从DRAM设备220检索到的数据并通过读取返回数据信号612传送该数据到关联的请求方。在一个实施例中,L2高速缓存350是请求方并且数据被传送到L2高速缓存350。读取返回单元632可在传送数据到L2高速缓存350之前缓冲并可选地重新排序数据。读取返回单元632包括数据存储电路,例如ECC存储触发器(flip-flop)634,其可以本地存储ECC数据以保护存储在DRAM页例如DRAM页518中的应用程序数据。在一个实施例中,读取返回单元632包括足以保护存储在DRAM 220中的1K字节数据页的ECC数据的存储。需要五十六字节的ECC数据来保护1K字节页,所述1K字节页包括八百九十六(128×7)字节的应用程序数据。
图6B示出了根据本发明的一个实施例的用于将读取请求组织到DRAM 220的读取列表结构602。读取列表结构602表示了对相同的DRAM页的读取请求的有序列表,所述相同的DRAM页由L2高速缓存350生成并与需要通过读取DRAM 220的段来填充的高速缓存线相关联。在一个实施例中,每个高速缓存线包括直接映射到一个DRAM段的三十二个字节。每次读取操作包括从DRAM 220不可削减的三十二字节传输操作。
在操作中,对DRAM页518中的应用程序数据进行读取的请求在读取列表结构内应始终在对DRAM页518中的相应ECC数据段进行读取的请求之后。一旦在读取列表结构中安排了相应ECC数据段,对与该DRAM页518内的其它段相关联的读取请求都在读取列表结构内跟随其后,而无需对相同ECC数据的额外的请求。具体来说,当从DRAM 220检索到给定的ECC数据段并存储在读取返回单元632中之后,可使用已经存储在读取返回单元632中的ECC数据段来保护随后读取的与该ECC数据段相关联的应用程序数据段。
例如,如果L2高速缓存350发布了请求序列,该请求序列包括对与ECC2相关联的段D18和D19的请求,随后是对与ECC1相关联的段D2的请求,则生成读取列表结构602。读取列表结构602包括对ECC2的请求640-1,随后是对D18的请求640-2、对D19的请求640-3、对ECC1的请求640-4和对D2的请求640-5。将请求640按顺序传送到DRAM 220,并且在相应的应用程序数据到达读取返回单元632只前将ECC数据预加载到读取返回单元632供处理。
如果读取返回单元632没有检测到错误,则从DRAM 220检索到的数据会通过读取返回数据信号612被传送到L2高速缓存350。在一个实施例中,如果检测到一个位错误并由读取返回单位632纠正,那么通知L2高速缓存350并且将与具有单个位错误的三十二字节段相对应的三十二个字节的高速缓存线标记为“脏”。“脏”高速缓存线由L2高速缓存350写回到DRAM 220,例如,当高速缓存线更替时。高速缓存线写回使DRAM 220中的具有一位错误的相应段的数据被纠正版本的数据所覆写。应当记录每个单个位的错误并将其报告给主机处理器。在一个实施例中,与DRAM存储器特定区域相关联的位错误校验子(syndrome)触发存储器分配功能以避免分配该区域。如果读取返回单位632检测到两个位错误,那么应该记录和报告该错误。在一个实施例中,在给定的段内检测到两个位错误会触发对在诸如CPU 102的主机处理器上执行的应用程序的警告。在一个配置中,如果读取返回单元632检测到两个同步的位错误,则停止处理并触发应用程序级的错误抑制。
图6C是根据本发明的一个实施例的组建读取列表结构的方法步骤605的流程图。虽然是结合图1-3B、6B的系统来描述该方法步骤,但本领域技术人员将会明白,配置为以任何顺序执行该方法步骤的任何系统均在本发明的范围内。
该方法开始于步骤650,在该步骤650中排序单元624初始化读取列表结构。在一个实施例中,初始化后的列表包括空列表。在步骤652,排序单元624接收到对与读取列表结构相关联的当前DRAM页内的段的读取请求。在步骤654,如果对与该段相关联的ECC段的请求不在该读取列表结构中,则方法前进到步骤656。在步骤656,排序单元624将对与该被请求段相对应的ECC段的读取请求附加到读取列表结构中。在步骤658,排序单元624将对所请求段的读取请求附加到读取列表结构中。
在步骤660,如果排序单元624完成对读取列表结构的组建,则方法在步骤662终止。
返回到步骤654,如果与被请求段相对应的ECC段在读取列表结构中,则方法直接前进到本文此前描述过的步骤658。
返回到步骤660,如果排序单元624没有完成组建读取列表结构,则该方法返回到步骤652。
图6D是根据本发明的一个实施例的用于读取DRAM页的方法步骤的流程图。虽然结合图1-3B、6B的系统描述了方法步骤,本领域技术人员将会明白,配置为以任何顺序执行该方法步骤的任何系统均在本发明的范围内。
该方法开始于步骤670,在该步骤670中仲裁单元626接收在排序单元624中生成的读取列表结构。在一个实施例中,仲裁单元626经配置以按顺序处理读取列表结构,并按顺序将来自读取列表结构的元素传送到读取返回单元632,读取返回单元632按照在读取列表结构内出现的顺序来执行每个读取请求。可选地,读取返回单元632接收来自读取列表结构的多个元素以供执行。在步骤672,如果读取列表结构包括另一个读取请求,则方法前进到步骤674,在步骤674读取返回单元632从DRAM页518读取在读取列表结构中所指定的数据段。
在步骤676,如果数据段不是ECC数据,则方法前进到步骤678。在步骤678,如果基于该数据段以及存储在ECC存储触发器634中的ECC数据检测到ECC错误,则方法前进到步骤680。
在步骤680,如果ECC错误是一位ECC错误,则方法前进到步骤681,在步骤681,读取返回单元632基于该数据段和存储在ECC存储触发器634的ECC数据来计算纠正后的段数据。在步骤682,读取返回单元632使用任何技术上可行的技术来报告该一位ECC错误并记录该一位ECC错误。在一个实施例中,读取返回单元632也报告纠正后的段数据应由L2高速缓存350标记为“脏”,以将纠正后的段数据强制回写到DRAM页518。回写操作使用纠正后的段数据来覆写损坏的段数据。在步骤683,读取返回单元632传送纠正后的段数据到L2高速缓存350以存储。
返回到步骤676,如果数据段是ECC数据,则方法前进到步骤677,在该步骤,读取返回单元632在ECC存储触发器634中存储ECC数据。
返回到步骤678,没有检测到ECC错误,则方法前进到步骤679,在该步骤,读取返回单元632传送段数据到L2高速缓存350以存储。
返回到步骤680,如果ECC错误不是一位ECC错误,则方法前进到步骤686。在步骤686,读取返回单元632使用任何技术上可行的技术来报告该ECC错误并记录该ECC错误。在一个实施例中,读取返回单元632生成中断,该中断向在图1中的CPU102上执行的应用程序通知已发生无法在硬件中自动恢复的错误。该方法在步骤688终止。
返回到步骤672,如果读取列表结构不包括其他读取请求,则方法在步骤688终止。
到DRAM的写入路径的ECC保护
图7A是根据本发明的一个实施例的、从L2高速缓存350到DRAM 220的ECC保护写入路径700的框图。ECC保护写入路径700位于图3B的FB 355内。ECC保护写入路径700包括写入请求队列720、地址修改单元722、排序单元724、仲裁单元626、DRAM控制器628、帧缓冲区I/O台630以及写入拉出(pull)单元732。图6A的I/O引脚614将ECC保护写入路径700连接到一个或多个DRAM芯片220。
写入请求队列720通过写入请求信号710从L2高速缓存350接收写入请求,所述写入请求信号710请求将存储在L2高速缓存350内高速缓存行中的数据传送到DRAM220。写入请求队列720存储写入请求直到地址修改单元722准备好处理写入请求。在一个实施例中,L2高速缓存350生成写入请求。
地址修改单元722将与存储一百二十八字节的段的写入请求相关联的线性物理地址乘以七分之八(“8/7”)以从线性物理地址生成扩展的物理地址。线性物理地址采取用于应用程序数据的连续物理地址空间,而扩展的物理地址容纳与应用程序数据一起关联存储的ECC数据。在一个实施例中,以每七个应用程序数据段有一个ECC数据段的比例来包含ECC数据。在可替代实施例中,地址修改单元722将线性物理地址乘以十五分之十六(“16/15”),以在具有2K字节的页的DRAM中,每十五个应用程序数据块相应容纳一个一百二十八字节的ECC数据块。PPU202中执行程序并不知晓扩展物理地址空间或任何关联的ECC数据,其假定线性物理地址空间而生成写入请求。
排序单元724将写入请求结合到诸如DRAM页518的共同DRAM页,从而使得一旦该共同DRAM页已经打开,则即使写入请求是由写入请求队列720以不同的顺序进行接收的,仍可顺序执行经结合到共同DRAM页的写入请求。排序单元724建立至少包括一个经结合的写入请求的写入列表结构。排序单元724可以同时建立多个写入列表结构。排序单元724将写入列表结构传送到仲裁单元626用于处理。在一个实施例中,仲裁单元626基于存储在写入列表结构中的元素生成顺序写入请求并传送这些顺序写入请求到DRAM控制器628和写入拉出单元732(通过写入列表数据路径736)用于执行。在可替代实施例中,仲裁单元626通过写入列表数据路径736传送来自写入列表结构的多个元素到写入拉出单元732用于执行。DRAM控制器628基于正在进行中的每个DRAM命令来传送协议控制信号738到写入拉出单元732。协议控制信号738允许写入拉出单元732根据适当的DRAM控制协议来有效率地操作,而无需要求写入拉出单元732详细了解可耦合到FB 355的每个可能的DRAM设备。写入拉出单元732生成电信号,使用所述电信号帧缓冲区的I/O台630能够与外部DRAM设备220通信。
响应于通过写入请求信号710传送的写入请求,使用写入列表结构来调度写入操作,以供写入拉出单元732加以执行,所述写入拉出单元732请求并随后接收相应于写入请求的来自L2高速缓存350的数据。将所请求的数据通过写入拉出数据信号712从L2高速缓存350传送到写入拉出单元732。写入拉出单元732通过帧缓冲区I/O台630将所请求的数据传送到DRAM 220。写入拉出单元732可以在传送数据到DRAM 220之前缓冲并可选地重新排序数据。写入拉出单元732包括ECC存储触发器734,所述ECC存储触发器被配置为存储用于当前打开的DRAM页如DRAM页518的ECC字节。
本领域技术人员将会认识到,当关闭每个DRAM页时都写入至少一个ECC字节段可能带来性能负担。然而,与ECC字节相关联的写入命令延迟可能经常被DRAM 220所需要的其他命令所隐藏;因此,写入与应用程序数据关联的ECC数据的整体性能负担应会减少。
图7B示出了根据本发明的一个实施例的、用于将写入请求组织到DRAM 220的写入列表结构702。写入列表结构702表示了由L2高速缓存350生成的对相同的DRAM页的有序高速缓存线写入列表,所述高速缓存线写入与需要被写入DRAM 220的高速缓存线相对应。在一个实施例中,每个高速缓存线均包括直接映射到DRAM的段的三十二个字节。每次写入操作均包括到DRAM 220的不可削减的三十二字节传输操作。
写入列表结构702包括对应图5A的DRAM页518内的段的标志(flag)740、742和744。标志740-0到740-15直接对应包括数据1 550的段。每个标志740均指示数据1 550内与L2高速缓存350中高速缓存线相关联的相应的段是否需要被写入到DRAM页518。标志742-0到742-11直接对应包括数据2 552的段。每个标志742均指示数据2 552内与L2高速缓存350中高速缓存线相关联的相应的段是否需要被写入到DRAM页518。标志744对应于包括ECC 554的段。标志ECC1 744-0对应于ECC数据ECC1 560-0。标志ECC2 744-1对应于ECC数据ECC2 560-1,依次类推。写入列表结构702被组织为在最后包括与包括ECC 554的段相对应的标志744,以确保这些段只在数据1 550和数据2 552的任何段写入后才会被写入
当写入列表结构702初始化时,清除标志740、742和744。每个随后被结合到写入列表结构702中的对数据1 550内任何段的写入请求均设置相应的标志740和在ECC1 744-0中设置相关联的标志。类似地,每个随后被结合到写入列表结构702中的对数据2 552内任何段的写入请求均设置相应的标志742和在ECC2 744-1中设置相关联的标志。当符合排序单元724内的某些条件后,由仲裁单元626关闭和执行写入列表结构702。附加的写入列表结构可与写入列表结构702并发生成以在写入列表结构702之前和之后执行。
写入列表结构702指定将由写入拉出单元732从L2高速缓存350中检索的并写入到DRAM 220内DRAM页518的数据。标志740和742之内的每个标志均调用由写入拉出单元732所执行的相应的三十二字节写入操作到DRAM页518。ECC1 744-0和ECC2 744-1内的每个标志均调用三十二字节写入操作(对DRAM最小的、不可削减的输入/输出操作),所属三十二字节写入操作一般包括每字节的写使能。例如,如果数据1 550内只有一个段被写入,那么在ECC1 744-0内只有一个标志被设置,指示来自ECC1 560-0的恰好两个字节ECC数据需要被写入。为了在ECC1 560-0内保留未写入的ECC数据字节,当写入段ECC1 560-0时,只启用两个字节ECC数据供写入。标志740和742分别直接对应于标志744-0和744-1。在一个实施例中,标志740和742都存储在排序单元724内,并被传送到仲裁单元626;然而,标志744不必单独存储在排序单元724或仲裁单元626。而是,当对于共同DRAM页518的写入请求被从仲裁单元626发送到写入拉出单元732时,可在写入拉出单元732内累积标志744。当与数据1 550和数据2 552相关联的最后一个写请求被发送到DRAM页518后,写入拉出单元732生成一个或两个附加的写入请求到ECC段560。如果已执行了对数据1 550的任何写入,那么当从ECC存储触发器734向ECC1560-0写入ECC字节时,累积的标志774-0被用作字节使能。如果已执行了对数据2 552的任何写入,那么当从ECC存储触发器734向ECC2 560-1写入ECC字节时,累积的标志774-1被用作字节使能。
在可替代实施例中,对ECC段560执行读取-修改-写入操作,其中使用ECC段560的经修改以反映对DRAM页518的写入的版本,执行对ECC段560的完整写入(所有字节使能设置为真)。
图7C是根据本发明的一个实施例的、组建写入列表结构的方法步骤705的流程图。虽然结合图1-3B、7B的系统来描述方法步骤,但本领域技术人员将会明白,配置为以任何顺序执行该方法步骤的任何系统均在本发明的范围内。
该方法开始于步骤750,在该步骤750中排序单元724初始化与DRAM页518相关联的写入列表结构。另外,当写入列表结构初始化时,清除与DRAM页518内的段相对应的标志。在步骤752,排序单元724接收与DRAM页518内的段相对应的写入请求。
在步骤754,与相应于写入请求的DRAM页518内的段相关联的ECC标志未被设置在写入列表结构中,则方法前进到步骤756。在步骤756,排序单元724在写入列表结构中设置相关联的ECC标志。在步骤758,排序单元724在写入列表结构中设置对应于段的标志,其与对应于写入请求的DRAM页518内的段相关联。
在步骤760,如果排序单元724完成对写入列表结构的组建,则方法在步骤762终止。然而,如果排序单元没有完成对写入列表结构的组建,则方法返回到752。
返回到步骤754,如果在写入列表结构中设置有对应于写入请求的ECC标志,则方法前进到本文此前描述过的步骤758。
图7D是根据本发明的一个实施例的、用于使用字节使能来写入DRAM页518以有选择地写入相关ECC数据的方法步骤707的流程图。虽然结合图1-3B、7B的系统来描述方法步骤,但本领域技术人员将会明白,配置为以任何顺序执行该方法步骤的任何系统均在本发明的范围内。
该方法开始于步骤770,在步骤770中仲裁单元626接收在排序单元724中生成的写入列表结构。在一个实施例中,仲裁单元626经配置以按顺序处理写入列表结构,并按顺序将来自写入列表结构的元素传送到写入拉出单元732用于执行。作为替代地,写入拉出单元732接收来自写入列表结构的多个元素用于执行。在步骤772,如果写入列表结构中包括与数据段相关联的另一个写入请求,则方法前进到步骤773。在步骤773,写入拉出单元732拉出与来自L2高速缓存350的写入请求相关联的数据段。在步骤774,写入拉出单元732计算与该数据段相关联的ECC字节。在步骤775,写入拉出单元732将与该数据段相关联的ECC字节存储在ECC存储触发器734中。在步骤776,写入拉出单元732将该数据段写入DRAM220内的DRAM页518。
返回到步骤772,如果写入列表结构中不包含另一个写入请求,则该方法前进到步骤778。在步骤778,写入拉出单元732使用ECC标志位作为用于进行选择性写入ECC数据的字节使能,将存储在ECC存储触发器734的ECC字节写入到DRAM页518。只有当前可用并且存储在ECC存储触发器734内的ECC字节会被写入到DRAM页518。对于包括1K字节页的DRAM配置,最多可写入两个ECC字节段。对于包括2K字节页的DRAM配置,最多可写入四个ECC字节段。然后该方法在步骤779终止。
图7E是根据本发明的一个实施例的、用于使用读取-修改-写入方法来写入DRAM页以选择性地写入相关的ECC数据的方法步骤709的流程图。虽然结合图1-3B、7B的系统来描述方法步骤,但本领域技术人员将会明白,配置为以任何顺序执行该方法步骤的任何系统均在本发明的范围内。
该方法开始于步骤780,在步骤780中仲裁单元626接收由排序单元724生成的写入列表结构。在步骤782,如果写入列表结构中包括与数据段相关联的另一个写入请求,则方法前进到步骤783。在步骤783,写入拉出单元732拉出与来自L2高速缓存350的写入请求相关联的该数据段。在步骤784,写入拉出单元732计算与该数据段相关联的ECC字节。在步骤785,写入拉出单元732将与该数据段相关联的ECC字节存储到ECC存储触发器734中。在步骤786,写入拉出单元732将该数据段写入DRAM 220内的DRAM页518。
返回到步骤782,如果写入列表结构中不包含另一个写入请求,则该方法前进到步骤787。在步骤787,写入拉出单元732触发对存储在来自DRAM页518的ECC数据554中的ECC字节的读取,并基于来自写入列表结构的ECC标志来更新该ECC字节。重要的是,在此时在ECC存储触发器734内每个被更新ECC段560的所有ECC字节都是可用的。
在步骤788,写入拉出单元732将存储在ECC存储触发器734的ECC字节写入到DRAM页518中的ECC数据554。对于包括1K字节页的DRAM配置,最多可写入两个ECC字节段用。对于包括2K字节页的DRAM配置,最多可写入四个ECC字节段。然后该方法在步骤789终止。
总之,公开了一种用于将ECC能力增加到用于图1的并行处理子系统112的现有的DRAM配置的技术。ECC数据与应用程序数据一起关联添加,消除了对外部存储器进行ECC保护所通常要求的额外的DRAM组件的需要。ECC数据被分配在相关的被保护的应用程序数据的DRAM页内。通过转换物理地址以隐藏ECC数据,并行处理子系统112可以在透明的ECC模式下操作。因为ECC模式基本上是透明的,因此并行处理子系统112也可以以非ECC模式操作而无效率的损失。参考为给定页预加载ECC数据的列表中给定的次序,根据DRAM页的从属关系来将对操作在ECC模式下的DRAM的读取请求结合到有序的读取列表中。还根据DRAM页的从属关系,利用针对到给定DRAM页的一组写操作所最后写入的ECC数据,将对操作在ECC模式下的DEAM的写入请求结合到有序的写入列表中。当遇到可纠正的错误时,读取逻辑纠正该错误,并将纠正后的版本存储在L2高速缓存线中。在一个实施例中,高速缓存线也标记为“脏”,其强制将纠正后的数据回写到DRAM。
本发明的一个优点是并行处理子系统112的共同硬件配置既可操作在ECC模式中以获得更高的计算完整性也可以操作在非ECC模式下以获得更高的性能,而没有与在ECC模式下操作处理系统相关联的常规成本负担。尤其是,本发明使处理系统能够有利地操作在ECC模式下而无需额外的DRAM设备或I/O引脚。本发明的额外好处是,ECC模式基本上对执行在并行处理子系统112上的应用程序是透明的。
本发明的一个实施例可以实现为与计算机系统一起使用的程序产品。程序产品的程序对实施例的功能(包括在此描述的方法)进行定义,并且能够被包含在各种各样的计算机可读存储介质内。示例性的计算机可读存储介质包括但不限于:(i)信息在其上永久保存的非可写存储介质(例如,计算机内的只读存储装置,如可被CD-ROM驱动器读出的CD-ROM盘、闪存、ROM芯片或者任意类型的固态非易失性半导体存储器);以及(ii)其上存储有可改变的信息的可写存储介质(例如,软盘驱动器内的软盘或硬盘驱动器或任意类型的固态随机存取半导体存储器)。
本发明已经参考特定实施例进行了描述。但是,本领域技术人员可以理解的是,可以对本发明做出各种修改和改变,而不脱离如所附权利要求阐明的本发明的较宽精神和范围。因此,上述描述和附图被认为是示例性的而不是限制性的。

Claims (15)

1.一种经配置以对存储在存储器单元中的数据进行错误检查的存储器控制器,其中,所述数据和与所述数据相关的错误纠正代码(ECC)数据都存储在所述存储器单元中,所述存储器控制器包括:
排序单元,经配置以:
初始化与存储在所述存储器单元内的数据页相对应的读取列表数据结构;
接收一个或多个数据读取请求以访问来自所述数据页的数据,其中所述一个或多个数据读取请求中的每一个均对应于所述数据页中所包含的不同的数据段;
对于所述一个或多个数据读取请求中的每一个,
确定对ECC段进行访问的ECC读取请求是否已包含在所述读取列表数据结构中,所述ECC段包含在所述数据页中并与对应于所述数据读取请求的所述数据段相关联;
如果尚未包含所述ECC读取请求,则添加所述ECC读取请求到所述读取列表数据结构,并在所述ECC读取请求之后将所述数据读取请求添加到所述读取列表数据结构,或
如果已经包含所述ECC读取请求,则在所述ECC读取请求之后将所述数据读取请求添加到所述读取列表数据结构;和
将所述读取列表数据结构传送到仲裁单元以从所述存储器单元访问与所述一个或多个数据读取请求相对应的数据段以及与所述数据段相关联的一个或多个ECC段。
2.根据权利要求1所述的存储器控制器,进一步包括:
读取请求队列,经配置以从高速缓存单元接收所述一个或多个数据读取请求的每一个,和
地址修改单元,经配置以,对于所述一个或多个数据读取请求的每一个,修改与所述数据读取请求相关联的地址以在所述数据页内指定能够对与所述数据读取请求相对应的所述数据段进行访问的位置,并将所述数据读取请求和所述修改后的地址一起传送到所述排序单元。
3.根据权利要求1所述的存储器控制器,其中,所述数据页包含包括第一多个数据段的第一部分、包括第二多个数据段的第二部分和包括多个ECC段的第三部分,以及所述读取列表数据结构包含对包含在所述多个ECC段中的第一ECC段进行访问的第一ECC读取请求,紧随其后是对包含在所述第一多个数据段中的第一数据段进行访问的第一数据读取请求,其中所述第一ECC段与所述第一多个数据段中的每一个数据段相关联。
4.根据权利要求1所述的存储器控制器,进一步包括读取返回单元,经配置以从所述存储器单元接收与所述一个或多个数据读取请求相对应的所述数据段和与所述数据段相关联的所述一个或多个ECC段,其中所述读取返回单元包含在其中存储所述一个或多个ECC段的多个本地存储元件。
5.根据权利要求4所述的存储器控制器,其中,所述读取返回单元进一步经配置以基于与所述数据段相关联的所述ECC段来对从所述存储器单元接收到的每一个数据段进行错误检查。
6.根据权利要求5所述的存储器控制器,其中,对于从所述存储器单元接收到的第一数据段没有检测到数据错误,并且其中,所述读取返回单元进一步经配置以将所述第一数据段传送到高速缓存单元以存储。
7.根据权利要求5所述的存储器控制器,其中,对于从所述存储器单元接收到的第一数据段检测到一位数据错误,并且其中,所述读取返回单元进一步经配置以基于与所述第一数据段相关联的所述ECC段来纠正所述第一数据段,并将所述纠正后的第一数据段传送到高速缓存单元以存储。
8.根据权利要求5所述的存储器控制器,其中,对于从所述存储器单元接收到的第一数据段检测到或者一位错误或者两位数据错误,并且其中,所述读取返回单元进一步经配置以向应用程序发出中断,指示发生了不可恢复的错误。
9.一种经配置以写入数据和相关的错误纠正代码(ECC)数据到存储器单元以存储的存储器控制器,所述存储器控制器包括:
排序单元,经配置以:
初始化与存储在所述存储器单元内的数据页相对应的写入列表数据结构;
接收一个或多个数据写入请求以将数据存储在所述数据页中,其中所述一个或多个数据写入请求中的每一个均对应于存储在所述数据页中的不同的数据段;
对于所述一个或多个数据写入请求中的每一个,
确定ECC标志是否已被设置,所述ECC标志被包含在所述写入列表数据结构中并且与对应于所述数据写入请求的所述数据段相关联,和
如果所述ECC标志尚未被设置,则设置所述ECC标志,并设置被包含在所述写入列表数据结构中并与对应于所述数据写入请求的所述数据段相对应的段标志,或
如果所述ECC标志已经被设置,则设置被包含在所述写入列表数据结构中并与对应于所述数据写入请求的所述数据段相对应的段标志;和
将所述写入列表数据结构传送到仲裁单元以从高速缓存单元访问与所述一个或多个数据写入请求相对应的所述数据段,并在所述存储器单元中存储所述数据段以及一个或多个与所述数据段相关联的ECC段。
10.根据权利要求9所述的存储器控制器,进一步包括:
写入请求队列,经配置以从所述高速缓存单元接收所述一个或多个数据写入请求的每一个,和
地址修改单元,经配置以对于所述一个或多个数据写入请求的每一个,修改与所述数据写入请求相关联的地址以在所述数据页内指定能够对与所述数据写入请求相对应的所述数据段进行存储的位置,并将所述数据写入请求和所述修改后的地址一起传送到所述排序单元。
11.根据权利要求9所述的存储器控制器,其中,所述数据页包含包括第一多个数据段的第一部分、包括第二多个数据段的第二部分和包括多个ECC段的第三部分,以及所述写入列表数据结构包含与被包含在所述第一多个数据段中的第一数据段相对应的设置段标志和与被包含在所述多个ECC段中的第一ECC段相对应的设置ECC标志,并且其中所述第一ECC段与所述第一多个数据段中的每一个数据段相关联。
12.根据权利要求9所述的存储器控制器,进一步包括写入拉出单元,经配置以从所述仲裁单元接收所述写入列表数据结构,并从所述高速缓存单元拉出与所述写入列表数据结构中第一设置段标志相对应的第一数据段。
13.根据权利要求12所述的存储器控制器,其中,所述写入拉出单元进一步经配置以为所述第一数据段计算一个或多个ECC字节。
14.根据权利要求13所述的存储器控制器,其中,所述写入拉出单元进一步经配置以使得所述第一数据段和所述一个或多个ECC字节被传送到所述存储器单元以存储在所述数据页中。
15.根据权利要求14所述的存储器控制器,其中,所述写入拉出单元进一步经配置以使得所述一个或多个ECC字节被直接写入到与所述第一数据段相关联并包含在所述数据页中的第一ECC段中,或使得所述第一ECC段从所述存储器单元被检索,基于所述一个或多个ECC字节被修改并被传送回所述存储器单元以存储在所述数据页中。
CN201080053921.4A 2009-09-28 2010-09-27 对外部dram的错误检测和纠正 Active CN102640116B (zh)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US12/568,639 US8301980B2 (en) 2009-09-28 2009-09-28 Error detection and correction for external DRAM
US12/568,642 2009-09-28
US12/568,642 US8190974B2 (en) 2009-09-28 2009-09-28 Error detection and correction for external DRAM
US12/568,639 2009-09-28
PCT/US2010/050365 WO2011038329A1 (en) 2009-09-28 2010-09-27 Error detection and correction for external dram

Publications (2)

Publication Number Publication Date
CN102640116A true CN102640116A (zh) 2012-08-15
CN102640116B CN102640116B (zh) 2016-01-20

Family

ID=43796251

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201080053921.4A Active CN102640116B (zh) 2009-09-28 2010-09-27 对外部dram的错误检测和纠正

Country Status (3)

Country Link
EP (1) EP2483779B1 (zh)
CN (1) CN102640116B (zh)
WO (1) WO2011038329A1 (zh)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105210046A (zh) * 2013-03-13 2015-12-30 英特尔公司 存储器等待时间管理
CN106021035A (zh) * 2016-05-25 2016-10-12 浪潮电子信息产业股份有限公司 一种实现在内存颗粒进行故障校验以增强模组条稳定性的方法
CN106205729A (zh) * 2015-01-29 2016-12-07 华邦电子股份有限公司 促进数据存储系统中的错误校正的方法及其数据存储系统
CN104051024B (zh) * 2013-03-11 2017-07-07 旺宏电子股份有限公司 用于内建错误更正的储存装置及其操作方法
CN107924349A (zh) * 2015-08-28 2018-04-17 英特尔公司 存储器装置管芯上错误校验和纠正代码
CN111209137A (zh) * 2020-01-06 2020-05-29 支付宝(杭州)信息技术有限公司 数据访问控制方法及装置、数据访问设备及系统
WO2022021870A1 (zh) * 2020-07-29 2022-02-03 苏州浪潮智能科技有限公司 一种fc卡的传输错误定位方法及相关装置

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120133659A1 (en) * 2010-11-30 2012-05-31 Ati Technologies Ulc Method and apparatus for providing static frame

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1971736A (zh) * 2002-04-25 2007-05-30 三洋电机株式会社 数据处理装置
US20070271494A1 (en) * 2006-05-17 2007-11-22 Sandisk Corporation Error Correction Coding for Multiple-Sector Pages in Flash Memory Devices

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6353910B1 (en) * 1999-04-09 2002-03-05 International Business Machines Corporation Method and apparatus for implementing error correction coding (ECC) in a dynamic random access memory utilizing vertical ECC storage
US7134069B1 (en) 1999-06-16 2006-11-07 Madrone Solutions, Inc. Method and apparatus for error detection and correction
JP2005339678A (ja) * 2004-05-27 2005-12-08 Ricoh Co Ltd 情報記録方法、情報再生方法、情報記録装置及び情報再生装置
US7389397B2 (en) * 2005-06-01 2008-06-17 Sandisk Il Ltd Method of storing control information in a large-page flash memory device
US8245109B2 (en) 2006-03-31 2012-08-14 Hewlett-Packard Development Company, L.P. Error checking and correction (ECC) system and method
US8352805B2 (en) * 2006-05-18 2013-01-08 Rambus Inc. Memory error detection

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1971736A (zh) * 2002-04-25 2007-05-30 三洋电机株式会社 数据处理装置
US20070271494A1 (en) * 2006-05-17 2007-11-22 Sandisk Corporation Error Correction Coding for Multiple-Sector Pages in Flash Memory Devices

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104051024B (zh) * 2013-03-11 2017-07-07 旺宏电子股份有限公司 用于内建错误更正的储存装置及其操作方法
CN105210046A (zh) * 2013-03-13 2015-12-30 英特尔公司 存储器等待时间管理
CN106205729A (zh) * 2015-01-29 2016-12-07 华邦电子股份有限公司 促进数据存储系统中的错误校正的方法及其数据存储系统
CN106205729B (zh) * 2015-01-29 2019-04-23 华邦电子股份有限公司 促进数据存储系统中的错误校正的方法及其数据存储系统
CN107924349A (zh) * 2015-08-28 2018-04-17 英特尔公司 存储器装置管芯上错误校验和纠正代码
CN107924349B (zh) * 2015-08-28 2021-11-23 英特尔公司 存储器装置管芯上错误校验和纠正代码
CN106021035A (zh) * 2016-05-25 2016-10-12 浪潮电子信息产业股份有限公司 一种实现在内存颗粒进行故障校验以增强模组条稳定性的方法
CN111209137A (zh) * 2020-01-06 2020-05-29 支付宝(杭州)信息技术有限公司 数据访问控制方法及装置、数据访问设备及系统
CN111209137B (zh) * 2020-01-06 2021-09-17 支付宝(杭州)信息技术有限公司 数据访问控制方法及装置、数据访问设备及系统
WO2022021870A1 (zh) * 2020-07-29 2022-02-03 苏州浪潮智能科技有限公司 一种fc卡的传输错误定位方法及相关装置

Also Published As

Publication number Publication date
CN102640116B (zh) 2016-01-20
EP2483779A1 (en) 2012-08-08
WO2011038329A1 (en) 2011-03-31
EP2483779B1 (en) 2015-11-11
EP2483779A4 (en) 2014-06-04

Similar Documents

Publication Publication Date Title
CN102640116A (zh) 对外部dram的错误检测和纠正
US9490847B2 (en) Error detection and correction for external DRAM
US8423745B1 (en) Systems and methods for mapping a neighborhood of data to general registers of a processing element
US8700862B2 (en) Compression status bit cache and backing store
US8037391B1 (en) Raid-6 computation system and method
CN101714247B (zh) 单通道镶嵌
US7187383B2 (en) Yield enhancement of complex chips
US8200940B1 (en) Reduction operations in a synchronous parallel thread processing system with disabled execution threads
US8938598B2 (en) Facilitating simultaneous submission to a multi-producer queue by multiple threads with inner and outer pointers
CN102640127B (zh) 在一级高速缓存内分配单独的存储器空间的方法
CN102648449A (zh) 用于并行处理单元的陷阱处理器架构
CN102640132A (zh) 用于并行处理器的高效断言执行
CN103793893A (zh) 采用限缓冲区处理的世界和屏幕空间管线间基元重新排序
US8984372B2 (en) Techniques for storing ECC checkbits in a level two cache
CN101901198A (zh) 通过标记cpu流量为特殊来避免死锁
US9798543B2 (en) Fast mapping table register file allocation algorithm for SIMT processors
CN102696023A (zh) 用于访问并行存储器空间的统一寻址和指令
US9569348B1 (en) Method for automatic page table compression
US8615541B2 (en) Extended-precision integer arithmetic and logical instructions
US8190974B2 (en) Error detection and correction for external DRAM
US8321761B1 (en) ECC bits used as additional register file storage
US8624916B2 (en) Processing global atomic operations using the bending unit datapath
CN101751356B (zh) 用于改进直接存储器存取传送效率的方法、系统和装置
US20140136793A1 (en) System and method for reduced cache mode
CN114080598A (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