CN116166468A - 用于处理异构***中ecc错误的方法、异构***及其相关产品 - Google Patents
用于处理异构***中ecc错误的方法、异构***及其相关产品 Download PDFInfo
- Publication number
- CN116166468A CN116166468A CN202111405208.8A CN202111405208A CN116166468A CN 116166468 A CN116166468 A CN 116166468A CN 202111405208 A CN202111405208 A CN 202111405208A CN 116166468 A CN116166468 A CN 116166468A
- Authority
- CN
- China
- Prior art keywords
- memory
- state
- address
- address information
- masking
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1008—Adding 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/1044—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices with specific ECC/EDC distribution
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
本公开涉及一种用于处理异构***中ECC错误的方法、异构***及其相关产品,该异构***中包括计算装置,其包括在组合处理装置中,该组合处理装置还可以包括接口装置和其他处理装置。该计算装置与其他处理装置进行交互,共同完成用户指定的计算操作。组合处理装置还可以包括存储装置,该存储装置分别与计算装置和其他处理装置连接,用于存储该计算装置和其他处理装置的数据。本披露的方案可以实现对ECC错误的有效处理并且避免该错误的扩散。
Description
技术领域
本公开一般地涉及存储领域。更具体地,本公开涉及用于处理异构***中错误检查和纠正(“Error Checking and Correcting”,即“ECC”) 错误的方法、异构***、计算机可读存储介质、计算机程序产品和计算装置。
背景技术
在数据存储和传递方面,例如高带宽存储器(“High Bandwidth Memory”,即“HBM”)等各类存储器扮演着重要的角色。在经过长时间的读写操作之后,存储器通常会出现数据错误。在一些场景中,前述的数据错误是无法通过存储器自身的ECC纠错进行修复的数据错误(本申请上下文简称为ECC错误)。为了解决这种不可纠错的异常场景,一些存储器(例如HBM)支持在发生ECC错误时,利用备用内存对出错的内存进行修复和替换。然而,由于硬件本身的限制,例如其可以用于替换的备用内存的数量较少,因此当备用内存耗尽时,硬件将无法对后续新出现的不可纠正的ECC错误进行修复。鉴于此,现有技术中需要一种用于针对该不可纠正的ECC错误的解决方案。
发明内容
鉴于上述背景技术部分所提及的技术问题,本公开提出一种软件机制,其用于在硬件修复资源无法对ECC错误进行修复或及时修复时,可以将发生该ECC错误的内存进行屏蔽,以确保出错的内存不被二次分配而导致ECC错误的扩散。为此,本公开在如下的多个方面中提供用于异构***的ECC错误解决方案。
在第一方面中,本公开提供了一种用于处理异构***中ECC错误的方法,其中异构***包括主机侧和设备侧,其中方法在设备侧处执行,并且包括:从主机侧获取待屏蔽的存储地址的地址信息,其中存储地址与ECC 错误相关联;以及根据地址信息对存储地址执行屏蔽操作。
在第二方面中,本公开提供了一种用于处理异构***中ECC错误的方法,其中异构***包括主机侧和设备侧,该方法在主机侧执行,并且包括获取待屏蔽的存储地址的地址信息,其中地址信息与ECC错误相关联;以及将地址信息进行存储,以便由设备侧执行读取并根据地址信息对存储地址执行屏蔽操作。
在第三方面中,本公开提供了一种计算机***,包括设备侧和主机侧,其中设备侧配置用于执行第一方面所述的方法,并且主机侧配置用于执行根据第二方面所述的方法,由此实现所述计算机***内针对所述ECC错误的屏蔽操作。
在第四方面中,本公开提供了一种对异构***中的ECC错误进行处理的方法,所述异构***包括设备侧和主机侧,所述方法包括:在所述主机侧处获取待屏蔽的存储地址的地址信息,其中所述存储地址与所述ECC错误相关联;在所述主机侧处将所述地址信息存储于与所述设备侧共享的存储区域中;以及令所述设备侧从所述共享的存储区域中读取所述地址信息并且执行针对所述地址信息的屏蔽操作。
在第五方面中,本公开提供了一种计算机可读存储介质,其上存储有用于对异构***中的ECC错误进行处理的计算机程序代码,当所述计算机程序代码由处理装置运行时,执行上文所述的方法。
在第六方面中,本公开提供了一种计算机程序产品,包括用于对异构***中的ECC错误进行处理的计算机程序,当所述计算机程序被处理器执行时实现上述方法的步骤。
在第七方面中,本公开提供了一种计算机装置,包括存储器、处理器及存储在存储器上的计算机程序,当所述处理器执行所述计算机程序时,实现上述方法的步骤。
根据本公开上述多个方面中所提供的方法、异构***及其相关设备,当硬件修复资源无法对发生ECC错误的内存进行硬件修复时,可以通过软件的方式对出错的物理内存进行屏蔽,由此确保其无法被二次分配。通过这样的方式,可以防止ECC错误的扩散从而可能潜在地影响其他应用程序的正常运行。
附图说明
通过参考附图阅读下文的详细描述,本公开示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本公开的若干实施方式,并且相同或对应的标号表示相同或对应的部分其中:
图1是示出根据本公开实施例的板卡的结构图;
图2是示出根据本公开实施例的集成电路装置的结构图;
图3是示出根据本公开实施例的单核计算装置的内部结构示意图;
图4是示出根据本公开实施例的多核计算装置的内部结构示意图;
图5是示出根据本公开实施例的处理器核的内部结构示意图;
图6是示出根据本公开实施例的用于处理异构***中ECC错误的方法流程图;
图7是示出根据本公开实施例的用于处理异构***中ECC错误的另一方法的流程图;
图8是示出根据本公开实施例的异构***初始化阶段处理ECC错误的示意操作框图;
图9是示出根据本公开实施例的异构***运行阶段处理ECC错误的示意操作框图;
图10是示出根据本公开实施例的异构***运行阶段中使用的状态机的示意状态转换图;以及
图11是示出根据本公开实施例的异构***处理ECC错误的流程图。
具体实施方式
下面将结合本披露实施例中的附图,对本披露实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本披露一部分实施例,而不是全部的实施例。基于本披露中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本披露保护的范围。
应当理解,本披露的权利要求、说明书及附图中可能使用的术语“第一”、“第二”和“第三”等是用于区别不同对象,而不是用于描述特定顺序。本披露的说明书和权利要求书中使用的术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在此本披露说明书中所使用的术语仅仅是出于描述特定实施例的目的,而并不意在限定本披露。如在本披露说明书和权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。还应当进一步理解,在本披露说明书和权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
如在本说明书和权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。
下面结合附图来详细描述本公开的具体实施方式。
图1示出根据本公开实施例的一种板卡10的结构示意图。可以理解的是图1所示结构和组成仅仅是一种示例,其并不用于在任何方面对本公开的方案进行限制。
如图1所示,板卡10包括芯片101,其可以是一种***级芯片(System on Chip,SoC),也即本公开上下文中所描述的片上***。在一个实施场景中,其可以集成有一个或多个组合处理装置。前述组合处理装置可以是一种人工智能运算单元,用以支持各类深度学***台的存储能力和计算能力有很高的要求,而本实施例的板卡10适用在云端智能应用,具有庞大的片外存储、片上存储和强大的计算能力。
进一步如图中所示,芯片101通过对外接口装置102与外部设备103 相连接,该外部设备103可以是主机,该主机可以是与芯片101具有不同指令集架构的通用处理器,例如中央处理器CPU。当然,根据不同的应用场景,外部设备103例如可以是服务器、计算机、摄像头、显示器、鼠标、键盘、网卡或wifi接口等。待处理的数据可以由外部设备103通过对外接口装置102传递至芯片101。芯片101的计算结果可以经由对外接口装置 102传送回外部设备103。根据不同的应用场景,对外接口装置102可以具有不同的接口形式,例如PCIe接口等。
板卡10还可以包括用于存储数据的存储器件104,其包括一个或多个存储单元105。存储器件104通过总线与控制器件106和芯片101进行连接和数据传输。板卡10中的控制器件106可以配置用于对芯片101的状态进行调控。为此,在一个应用场景中,控制器件106可以包括单片机 (Micro Controller Unit,MCU)。
图2是示出根据上述实施例的芯片101中的组合处理装置的结构图。如图2中所示,组合处理装置20可以包括计算装置201、接口装置202、处理装置203和动态随机存取存储器(Dynamic Random Access Memory, DRAM)DRAM 204。
计算装置201可以配置成执行用户指定的操作,主要实现为单核智能处理器或者多核智能处理器。在一些操作中,其可以用于执行深度学习或机器学习方面的计算,并且还可以通过接口装置202与处理装置203进行交互,以共同完成用户指定的操作。
接口装置202可以用于在计算装置201与处理装置203间传输数据和控制指令。例如,计算装置201可以经由接口装置202从处理装置203中获取输入数据,写入计算装置201片上的存储装置。进一步,计算装置201 可以经由接口装置202从处理装置203中获取控制指令,写入计算装置201 片上的控制缓存中。替代地或可选地,接口装置202也可以读取计算装置 201的存储装置中的数据并传输给处理装置203。
处理装置203作为通用的处理装置,执行包括但不限于数据搬运、对计算装置201的开启和/或停止等基本控制。根据实现方式的不同,处理装置203可以是中央处理器(Central Processing Unit,CPU)、图形处理器 (Graphics Processing Unit,GPU)或其他通用和/或专用处理器中的一种或多种类型的处理器,这些处理器包括但不限于数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application SpecificIntegrated circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,并且其数目可以根据实际需要来确定。如前所述,仅就本公开的计算装置 201而言,其可以视为具有单核结构或者同构多核结构。然而,当将计算装置201和处理装置203整合共同考虑时,二者视为形成异构多核结构。 DRAM 204用以存储待处理的数据,为DDR内存,大小通常为16G或更大,用于保存计算装置201和/或处理装置203的数据。
图3示出了计算装置201为单核的内部结构示意图。单核计算装置301 用以处理计算机视觉、语音、自然语言、数据挖掘等输入数据,单核计算装置301包括三大模块:控制模块31、运算模块32及存储模块33。
控制模块31用以协调并控制运算模块32和存储模块33的工作,以完成深度学习的任务,其包括取指单元(Instruction Fetch Unit,IFU)311 及指令译码单元(InstructionDecode Unit,IDU)312。取指单元311用以获取来自处理装置203的指令,指令译码单元312则将获取的指令进行译码,并将译码结果作为控制信息发送给运算模块32和存储模块33。
运算模块32包括向量运算单元321及矩阵运算单元322。向量运算单元321用以执行向量运算,可支持向量乘、加、非线性变换等复杂运算;矩阵运算单元322负责深度学习算法的核心计算,即矩阵乘及卷积。存储模块33用来存储或搬运相关数据,包括神经元存储单元(Neuron RAM, NRAM)331、参数存储单元(Weight RAM,WRAM)332、直接内存访问模块(Direct Memory Access,DMA)333。NRAM 331用以存储输入神经元、输出神经元和计算后的中间结果;WRAM 332则用以存储深度学习网络的卷积核,即权值;DMA 333通过总线34连接DRAM 204,负责单核计算装置301与DRAM 204间的数据搬运。
图4示出了计算装置201为多核的内部结构示意图。多核计算装置41 采用分层结构设计,多核计算装置41作为一个片上***,其包括根据本公开的至少一个集群(cluster,或称计算簇),每个集群又包括多个处理器核。换言之,多核计算装置41是以片上***-集群-处理器核的层次所构成的。以片上***的层级来看,如图4所示,多核计算装置41包括外部存储控制器401、外设通信模块402、片上互联模块403、同步模块404 以及多个集群405。
外部存储控制器401可以有多个(如图中示例性地示出2个),其用以响应处理器核发出的访问请求,访问外部存储设备,也即本公开上下文中的片外存储器(例如图2中的DRAM 204),从而自片外读取数据或是将数据写入。外设通信模块402用以通过接口装置202接收来自处理装置 203的控制信号,启动计算装置201执行任务。片上互联模块403将外部存储控制器401、外设通信模块402及多个集群405连接起来,用以在各个模块间传输数据和控制信号。同步模块404是一种全局同步屏障控制器 (Global Barrier Controller,GBC),用以协调各集群的工作进度,确保信息的同步。本公开的多个集群405是多核计算装置41的计算核心。尽管在图4中示例性地示出4个集群,然而,随着硬件的发展,本公开的多核计算装置41还可以包括8个、16个、64个、甚至更多的集群405。在一个应用场景中,集群405可以用于高效地执行深度学习算法。
以集群的层级来看,如图4所示,每个集群405可以包括多个处理器核(IPU core)406及一个存储核(MEM core)407,其例如可以包括高速缓冲存储器(例如LLC)。
处理器核406在图中示例性地示出为4个,本公开不限制处理器核406 的数量,并且其内部架构如图5所示。每个处理器核406类似于图3的单核计算装置301,并且同样可以包括三个模块:控制模块51、运算模块52 和存储模块53。控制模块51、运算模块52及存储模块53的功用及结构大致与控制模块31、运算模块32及存储模块33相同,此处不再赘述。需特别说明的是,存储模块53可以包括输入/输出直接内存访问模块(Input/Output DirectMemory Access,IODMA)533、搬运直接内存访问模块(Move Direct Memory Access,MVDMA)534。IODMA 533通过广播总线409控制NRAM 531/WRAM 532与DRAM 204的访存;MVDMA 534则用以控制NRAM 531/WRAM 532与存储单元(SRAM)408的访存。
回到图4,存储核407主要用以存储和通信,即存储处理器核406间的共享数据或中间结果、以及执行集群405与DRAM 204之间的通信、集群405间彼此的通信、处理器核406间彼此的通信等。在其他实施例中,存储核407可以具有标量运算的能力,用以执行标量运算。
存储核407可以包括静态随机存取存储器(Static Random-Access Memory,SRAM)408、广播总线409、集群直接内存访问模块(Cluster Direct Memory Access,CDMA)410及全局直接内存访问模块(Global Direct Memory Access,GDMA)411。在一个实施场景中,SRAM 408可以承担高性能数据中转站的角色。由此,在同一个集群405内不同处理器核406之间所复用的数据不需要通过处理器核406各自向DRAM 204获得,而是经SRAM 408在处理器核406间中转。进一步,存储核407仅需要将复用的数据从SRAM 408迅速分发给多个处理器核406即可,从而可以提高核间通信效率,并显著减少片上片外的输入/输出访问。
广播总线409、CDMA 410及GDMA 411则分别用来执行处理器核406 间的通信、集群405间的通信和集群405与DRAM 204的数据传输。以下将分别说明。
广播总线409用以完成集群405内各处理器核406间的高速通信,此实施例的广播总线409支持核间通信方式包括单播、多播与广播。单播是指点对点(例如单一处理器核至单一处理器核)的数据传输,多播是将一份数据从SRAM 408传输到特定几个处理器核406的通信方式,而广播则是将一份数据从SRAM 408传输到所有处理器核406的通信方式,属于多播的一种特例。
CDMA 410用以控制在同一个计算装置201内不同集群405间的 SRAM 408的访存。GDMA 411与外部存储控制器401协同,用以控制集群405的SRAM 408到DRAM 204的访存,或是将数据自DRAM 204读取至SRAM 408中。从前述可知,DRAM 204与NRAM 431或WRAM 432 间的通信可以经由2种方式来实现。第一种方式是通过IODAM 433直接和DRAM 204与NRAM 431或WRAM 432通信;第二种方式是先经由 GDMA 411使得数据在DRAM 204与SRAM 408间传输,再经过MVDMA 534使得数据在SRAM 408与NRAM 431或WRAM 432间传输。尽管第二种方式可能需要更多的元件参与且数据流较长,但实际上在部分实施例中,第二种方式的带宽远大于第一种方式,因此通过第二种方式来执行 DRAM 204与NRAM 431或WRAM 432间的通信可能更为有效。可以理解的是,这里所描述的数据传输方式仅仅是示例性的,并且本领域技术人员根据本公开的教导,也可以根据硬件的具体布置来灵活地选择和适用各种数据传输方式。
在其他的实施例中,GDMA 411的功能和IODMA 533的功能可以整合在同一部件中。尽管本公开为了方便描述,将GDMA 411和IODMA 533 视为不同的部件,然而对于本领域技术人员来说,只要其实现的功能以及达到的技术效果与本公开类似,即属于本公开的保护范围。进一步地, GDMA 411的功能、IODMA 533的功能、CDMA 410的功能、MVDMA 534 的功能也可以由同一部件来实现。
以上结合图1-图5对本公开的硬件架构及其内部结构进行了详细的描述。可以理解的是上述描述仅仅是示例性的而非限制性的。根据不同的应用场景和硬件规格,本领域技术人员也可以对本公开的板卡及其内部结构进行改变,而这些改变依然落入本公开的保护范围内。
根据本公开的方案,上述结合图1-图5所描述的板卡或芯片101可以充当异构***中的设备(“device”),或者说实施于异构***的设备侧。由此,其可以与异构***中的主机(“host”)或者说主机侧相配合,以便在主机侧的主控下实现对异构***中出现的ECC错误进行处理。基于此,本公开的技术方案提出一种基于异构平台的软件解决方案,其针对于发生不可纠正的ECC错误时的情况来执行处理,以便及时且有效地对ECC错误进行隔离。由此,本公开的方案可以防止ECC错误的扩散并有助于错误内存的修复。下文将结合图6和图7对本公开在设备侧和主机侧处执行用于处理异构***中的ECC错误的流程进行具体描述。
图6是示出在异构***的设备侧执行用于处理ECC错误的方法600 的简化流程图。如前所述,在本公开的上下文,此处的异构***可以包括主机侧和设备侧。在一个实施例中,前述主机侧可以是包括主处理器的处理装置或设备,而主处理器例如可以是通用处理器(“CPU”)。对应地,前述设备侧可以是包括从处理器的处理装置或设备,而从处理器可以是专用于人工智能领域运算的专用处理器(如图形处理单元“GPU”)。在一个实施方式中,此处的设备侧可以包括如前结合图1-图5所描述的板卡或其中的芯片。
如图6所示,在步骤S602处,获取待屏蔽的存储地址的地址信息,其中所述存储地址与所述ECC错误相关联,也即出现不可修复的ECC错误的内存物理地址。在一个示例性操作场景中,主机侧的主处理器可以在驱动初始化内存管理模块时从设备侧的内存中(例如静态随机存取存储器 SRAM 408)中读取需要进行屏蔽的存储地址的地址信息,并将其写入到与从设备共享的存储区中。在该场景中,可以在主机侧或设备侧布置有一个共享内存,以便于主机侧执行地址信息的存储和设备侧对应地址信息的读取。就具体布置而言,前述的共享内存可以是设备侧(例如DRAM 204) 的一块内存空间。替代地,该共享内存也可以是主机侧分配的一块内存空间,以用于存储发生ECC错误时的地址信息。
由于设备侧的操作***也存储在设备侧的DRAM中,该DRAM上用于存储操作***的内存空间也可能存在不可修改的ECC错误,因此本申请可以通过不受ECC错误影响的主机侧来执行设备侧对应地址信息读取。当然,在其他实施例中,当共享内存设置在设备侧时,也可以由设备侧的从处理器直接从该共享内存中读取中待屏蔽的地址信息。
接着,在步骤S604处,根据前述的地址信息对存储地址执行屏蔽操作(“PageRetire”)。通过这样的屏蔽操作,可以实现对ECC错误的软件方式的隔离,由此避免ECC错误的扩散并为后续的及时修复提供条件。
在一个实施场景中,本公开的上述屏蔽方案可以在整个异构***的始化阶段和/或运行阶段执行。当在初始化阶段执行屏蔽操作时,可以解决驱动加载过程中不可纠正的ECC错误的备用内存资源耗尽的情形,由此对无法进行硬件修复的错误物理地址进行软件层面的屏蔽。当在运行阶段时执行屏蔽操作可以解决这样的情形,即在应用程序运行过程中发生不可纠正的ECC错误而硬件修复手段无法快速介入时,则需要对发生错误的物理地址进行软件屏蔽防止错误扩散。此后,可以例如等待用户手动进行驱动复位,并接着采用(例如HBM)的相关硬件机制对错误的物理内存进行修复。
当在异构***的初始化阶段执行时,所述方法还可以包括执行设备侧的初始化操作,并且在执行完初始化操作后,从所述主机侧获取所述地址信息。接着,可以根据地址信息对存储地址执行屏蔽操作。附加地或可选地,还可以将执行所述屏蔽操作后获得的屏蔽结果写入至主机侧,以便主机侧执行其后续的初始化操作或后续的屏蔽操作。
在一个操作场景中,上述根据地址信息对存储地址执行屏蔽操作可以包括响应于待屏蔽的存储地址当前未被占用,对存储地址执行隔离。相对地,当待屏蔽的存储地址当前已被占用,则可以对存储地址进行错误标记。具体地,当待屏蔽的存储地址被占用时,可以将存储地址进行保存,以及在该存储地址被释放后,执行针对该释放后的存储地址的屏蔽操作。
就示例性操作而言,对于前述没有被占用的存储地址(即错误的物理地址),可以直接调用接口对其进行隔离,以避免在存储地址的申请阶段不当地分配和使用该错误物理地址,由此导致ECC错误的扩散。对应地,对于已经被占用的错误物理地址,可以在其相关程序结构体中对其进行标记,以在所述错误地址对应的内存被释放后,再对该错误地址指向的内存空间进行隔离,从而避免该错误的物理内存的后续分配和使用。接着,可以置位该错误物理地址的对应结构体中的硬件错误标记位。对于错误地址的屏蔽,在一个操作场景中,设备侧可以调用内存分配器中用于申请内存的指定接口(例如可以是函数malloc()),从而通过该指定接口将错误物理地址从内存分配器中分离出来。具体地,通过该内存申请接口(也即指定接口)申请该错误物理地址指向的内存空间,并且通过占用该错误物理地址指向的内存空间,从而将该错误物理地址进行屏蔽。
当在本公开的异构***的运行阶段执行屏蔽操作时,则响应于待屏蔽的存储地址当前被占用,将该存储地址进行保存。接着,可以在存储地址被释放后,对该保存的存储地址执行所述屏蔽操作。在一个实施例中,前述的保存操作可以通过链表的数据结构来实现,例如可以将待屏蔽的存储地址作为节点挂接于链表中。基于此,可以在执行内存释放操作时遍历该链表,以确定链表中是否存在待释放的存储地址,以及响应于链表中存在该存储地址,则可以在执行例如针对于该存储地址的内存释放操作后,对该存储地址执行屏蔽操作,以实现对存储地址的隔离。
在一个实施场景中,为了加速异构***内存的申请和释放操作,主从处理器都设有各自的内存缓存机制,该被程序结构体释放的内存可能会因为设备侧的内存缓存机制而被缓存住。鉴于此,本公开的方法提出执行针对于发生ECC错误的存储地址的缓存无效化操作,以便令该存储地址从所述设备侧的缓存中释放。作为示例,前述执行缓存无效化的操作可以包括将执行屏蔽操作前所申请的内存释放,以便申请的内存不在所述设备侧的缓存中驻留。进一步,为了实现将执行所述屏蔽操作前所申请的内存准确地释放,本公开的方法提出记录缓存中分配内存的第一时刻和记录开始执行屏蔽操作前的第二时刻。接着,可以通过比较第一时刻和第二时刻来将第二时刻前缓存中驻留的内存全部释放。就实现方面而言,前述的记录操作可以通过设置对应的时间戳来完成。
图7是示出在异构***的主机侧执行用于处理ECC错误的方法700 的简化流程图。基于上文的描述,本领域技术人员可以理解此处的异构***也即前文结合图6所述的异构***,因此前文关于该异构***及其所包含的设备侧的描述也同样适用于下文。
如图7所示,在步骤S702处,获取待屏蔽的存储地址的地址信息,其中所述地址信息与ECC错误相关联。如前所述,此处获得地址信息可以是从与主机侧共享的共享内存中获得的地址信息。接着,在步骤S704 处,可以将前述地址信息进行存储,以便由所述设备侧执行读取并根据所述地址信息对所述存储地址执行屏蔽操作。就实现而言,当设备侧发生ECC错误触发屏蔽操作的中断处理时,主机侧的主处理器可以将发生ECC 错误的地址信息写入到与设备侧共享使用的共享内存中以供设备侧读取。
如前所述,本公开异构***的操作可以包括初始化阶段和运行阶段。鉴于此,在异构***的初始化阶段,主机侧可以执行其初始化操作以及读取与ECC错误相关联的地址信息并且将其进行存储。附加地,当从设备成功执行完屏蔽操作后,主设备侧可以从所述设备侧读取关于执行所述屏蔽操作后所获得的屏蔽结果以及根据屏蔽结果来更新与该屏蔽操作关联的状态位。
在异构***的运行阶段,上述由主机侧所执行的方法还可以令主机侧的内存缓存标记位无效。对于主机侧的缓存无效化操作来说,其例如可以通过及时更新主机侧的内存缓存相应标记位来将该存储地址无效化。由此,可以确保缓存池中的内存块只接收用户下发的释放请求,而不再被进行二次分配。在运行阶段的一个场景中,主机侧还可以获取响应于ECC错误而产生的中断信号,并且根据该中断信号来调用针对于屏蔽操作的中断处理函数,以便发起与所述设备侧的通信并且令所述设备侧执行屏蔽操作。具体地,主机侧根据该中断信号来调用针对于屏蔽操作的中断处理函数的过程可以类似于图7所示的实施步骤,此处不再赘述。
在一个实施例中,考虑到由设备侧的例如内存分配器所执行的屏蔽操作并不是在中断处理函数内进行的,因此可能存在前一次的屏蔽操作请求还没有处理完而新的ECC错误中断就产生的情形。为了避免多次调用中断处理函数而导致存储在例如共享内存内的、还未处理的错误地址信息被新的错误地址信息覆盖掉,本公开的方案提出在所述主机侧布置状态机,该状态机可以用于维护地址信息的存储时机和屏蔽操作的工作状态。
在一个实施场景中,可以将状态机设置成至少包括空闲态和挂起态。基于此,由主机侧执行的方法还可以包括根据状态机的空闲态和挂起态来执行与N个地址信息分别关联的N个屏蔽操作,其中N大于或等于2。在该场景中,为了顺利执行N个屏蔽操作,主机侧可以顺序执行如下多个动作。即,首先响应于状态机的状态为空闲态,将第n个地址信息进行存储,以便由所述设备侧读取,其中1≤n≤N且为正整数。接着,在写入第 n个地址信息后,将状态机的状态更新为挂起态,以禁止存储与第“n+1”个屏蔽操作关联的第“n+1”个地址信息。此后,响应于设备侧执行完第n 个屏蔽操作,将状态机的状态更新为空闲态,以允许将第“n+1”个地址信息进行存储。
为了实现对上述多个(即N个)屏蔽操作的统计和维护,本公开的方案进一步提出在所述主机侧设置用于对待执行的屏蔽操作进行计数的计数器。在该情形下,主机侧可以根据计数器的数值并且结合前文状态机的状态来确定是否将地址信息进行存储。
在具体实现方面,针对计数器,还可以将状态机的状态设置为包括运行态。由此,响应于状态机为挂起态,将其状态更新为运行态,以便所述设备侧在所述运行态下执行所述屏蔽操作。接着,响应于从设备侧接收到关于执行完本次屏蔽操作的通知,将状态机的状态更新为空闲态并将计数器的数值减一。此后,可以判断计数器的计数值是否为零。响应于计数器的当前数值不为零(也即还有未执行完的屏蔽操作),可以存储下一地址信息并将状态机的状态更新为挂起态,以便设备侧接着执行针对下一地址信息的屏蔽操作。可以理解的是,当计数器的计数值为零时,也即意味着 N个屏蔽操作都已执行完毕。
图8是示出根据本公开实施例的异构***初始化阶段处理ECC错误的流程800的示意操作框图。可以理解的是,图8所示出的处理流程仅仅是图6所示方法600的一种可能实现方式,因此关于图6所做的描述同样适用于以下结合图8所做的描述。
在步骤S802,主机侧的主处理器可以利用驱动来初始化主机侧的内存管理模块。
在步骤S804处,从设备侧内存(例如设备侧的SRAM 408)中读取需要执行屏蔽操作的地址信息并在步骤S806处将其写入到与设备侧共享的共享内存之中。在一个实施场景中,前述的SRAM可以是设备侧内存中用于存储ECC错误的地址信息的存储空间。当设备侧的硬件存储器(例如“HBM”,“DRAM”)检测到ECC错误时,可以将与ECC错误关联的地址信息存入在设备侧内存(例如SRAM)中,以供主处理器读取并写入至共享内存中。
在步骤S808处,设备侧执行内存模块初始化操作。例如,设备侧的从处理器可以加载固件,以便进行其内存管理模块的初始化。
接着,在步骤S810处,执行初始化屏蔽结构体,也即对将要执行的屏蔽操作相关的程序进行初始化。在一个场景中,该初始化操作可以涉及初始化屏蔽操作所需的数据结构(例如结构体,其用于管理发生ECC错误的次数)和相关资源(例如用于存放数据结构的设备侧部分内存空间)。
在完成屏蔽操作的初始化后,在步骤S812处,设备侧可以从共享内存中读取需要屏蔽的地址信息(即发生错误的内存物理地址),并且执行本公开的屏蔽操作S814。在一个实施场景中,在初始化的过程中,如果该错误物理地址未被程序结构体占用,则设备侧可以直接执行本公开的屏蔽操作;如果该错误物理地址被相关程序结构体占用,则设备侧可以首先置位该错误物理地址所对应结构体中的硬件错误标记位,以在该错误物理地址被释放后完成屏蔽操作。具体地,设备侧的从处理器可以调用内存分配器来调用指定接口,以便通过该接口将发生ECC错误的物理地址从内存分配器中分配出来,由此完成屏蔽操作。当存在与ECC错误关联的多个地址信息时,则步骤S814可以执行多次。当执行完所有的屏蔽操作后,流程前进到步骤S816。
在该步骤S816处,设备侧可以将针对所有错误地址所执行的屏蔽操作的最终处理结果存入到共享内存之中,等待主处理器对前述的处理结果进行解析。
流程返回到主机侧。具体地,在步骤S818处,主处理器等待设备侧固件初始化。这里,设备侧固件初始化可以涉及从处理器上硬件资源或者是调度模块的初始化。接着,在从处理器的固件初始化流程成功返回之后,主处理器在步骤S820处执行内存模块的二阶段初始化过程。在一个实施例中,该二阶段初始化过程包括在步骤S822处从共享内存获取从处理器执行屏蔽操作后的处理结果。在一个场景中,主处理器可以基于屏蔽操作后的处理结果来更新相应的状态位,以便用户可以通过相关的应用程序来查询屏蔽操作的工作状态并且了解哪个或哪些错误的物理地址已经被屏蔽。
以上结合图8描述了本公开在异构***的初始化阶段中处理ECC错误所执行的操作流程。通过执行这样的操作流程,可以实现在初始化阶段对ECC错误的及时处理和隔离,从而有效地避免ECC错误在异构***的初始化阶段的传播和扩散。
图9是示出根据本公开实施例的异构***运行阶段处理ECC错误的流程900的示意操作框图。可以理解的是,此处的异构***可以是前文结合图8所描述的异构***(例如包括主机侧和设备侧),因此前文关于异构***的描述同样适用于下文的讨论,并且相同的内容将不再赘述。另外,可以理解的是本发明的方案也可以应用于包括本申请上下文的主机侧和设备侧的计算机***中。
如图9中所示,在步骤S901处,ECC错误的发生触发中断信号。具体地,当在异构***的应用程序运行阶段发生不可纠正的ECC错误时,主机侧的主处理器会接收相应的中断信号。接着,在步骤S902处,响应于接收到中断信号,主处理器可以调用与屏蔽操作相关的中断处理函数,以便令设备侧执行屏蔽操作。在一个场景中,关于屏蔽操作的中断处理函数中的处理流程类似于上文初始化阶段所讨论的处理流程。例如,可以从设备侧的SRAM中读取错误的地址信息并将其写入共享内存之中。接着,可以调用中断处理函数的下半部分,即,唤醒主从处理器的通信并且通知从处理器进行包括屏蔽操作在内的一些任务,例如内存的申请和释放。
不同于初始化阶段,在异构***的运行阶段,应用程序可能会频繁进行内存的申请和释放。为了加速异构***内存的申请和释放操作,主从处理器都设有各自的内存缓存机制。当正在使用的内存被释放时,可能会被缓存机制缓存住的情形,此时程序结构体中使用的不可纠正的ECC错误的物理地址对应的内存就可能会被缓存住,从而无法回收到物理内存分配器之中。为了确保发生ECC错误的物理地址不会驻留在各级缓存之中,本申请提出在步骤S903处执行针对于错误的物理地址的缓存无效化操作。对于主处理器的缓存无效化操作来说,其例如可以通过及时更新主处理器的内存缓存相应标记位来将该存储地址无效化,从而确保缓存池中的内存块只接收用户下发的释放请求,不再被进行二次分配。对于设备侧的缓存无效操作来说,设备侧可以执行对于发生ECC错误的存储地址的缓存无效化操作,以便令该存储地址从所述设备侧的缓存中释放。
接着,在步骤S904处,可以判断状态机的状态是否为空闲态。如前结合图7所描述的,为了对多个屏蔽操作进行管理和维护,可以在主机侧布置状态机和计数器。该状态机可以用于维护地址信息的存储时机和屏蔽操作的工作状态,而计数器可以对多个屏蔽操作的执行进行计数。基于此,当在步骤S904处确定状态机是空闲态时,则在步骤S906处将状态机的状态更新为挂起态,并且在步骤S907处将地址信息(即错误的物理地址信息)存入到与设备侧共享的共享内存中,以便后续由设备侧来进行读取。当在步骤S904处确定状态机的状态不是空闲态时,则在步骤S905处对计数器的计数值进行更新。换句话说,在后续发生新的ECC错误触发屏蔽操作的中断调用时,当判断状态机的状态标志位并非空闲态,则不再执行将错误地址信息写入到共享内存的操作,而是更新计数器关于屏蔽操作的计数,以便标识还有与ECC错误关联的地址信息未被读取。
在步骤S908处,当后续主处理器例如基于中断处理函数来发起主从处理器通信时,其在步骤S909处判断当前的状态机是否为挂起态。响应于确定状态机的当前状态是挂起态,其将状态机的状态更新为运行态,并且在步骤S911处通知设备侧的从处理器来执行相关任务(例如包括屏蔽操作)。当在步骤S909处判断状态机的状态非挂起态时,则流程直接前进到步骤S911。当在步骤S911接收到来自于主机侧的通信时,则流程可以进入到设备侧的处理操作。下面将描述在设备侧所执行的相关操作。
在步骤S912处,设备侧的从处理器可以执行通信回调(“Callback”)。例如,在主处理器发起主从处理器通信后,当从处理器确定该发起通信是释放内存的请求,则从处理器会给主处理器注册一个用于释放内存的回调函数。接着,在步骤S913处,从处理器可以判断状态机的状态是否为运行态。当确定为运行态时,则在步骤S914处,从处理器可以从共享内存中读取关于发生ECC错误的地址信息,并且在步骤S915处更新缓存时间戳。如前结合图6所述,此处的时间戳可以是用于记录开始执行屏蔽操作前的第二时刻。
此后,在步骤S916处,执行具体的屏蔽操作,例如置位错误的物理地址所对应结构体内的硬件错误标志位。附加地,可以在步骤S917处执行其他任务,例如执行缓存的释放操作。在一些场景中,当需要执行屏蔽操作的地址可能存在多个时,在S916处执行屏蔽操作时可能会发现有些错误地址被申请占用了。在该情形下,可以通过在步骤S917处执行内存释放操作后,再次对释放的内存中的错误物理地址执行步骤S916的屏蔽操作。在一个实施方式中,为了确保分配的内存都直接释放回到物理内存分配器而不在从处理器的缓存中驻留,本公开提出利用时间戳来记录缓存中分配内存的时刻(即前文所述的第一时刻),并且将第一时刻与上文所述的第二时刻进行比较,从而将第二时刻前缓存中驻留的内存全部释放,以便在释放的内存中执行针对于发生ECC错误的物理地址屏蔽。
在执行完上述设备侧的操作后,流程返回到主机侧。此后,在步骤S918 处,主处理器可以将状态机的状态更新为空闲态。在步骤S919处,主处理器可以判断计数器的计数值是否为零。当计数器的计数值为零时,则整个流程返回,即回到步骤S901前等待后续的中断信号。相反,当在步骤 S919处判断计数器的值并非为零,即还存在未执行完的屏蔽操作,则在步骤S906处将状态机的状态更新为挂起态,以便在步骤S907处将下一屏蔽操作的地址信息写入到共享内存中,以便从处理器的后续读取。如前所述,当存在多个地址信息时,本公开还提出利用链表来实现对多个地址信息的保存,即将存储地址作为节点挂接于链表中。基于此,可以在执行内存释放操作时遍历该链表,以确定链表中是否存在待释放的存储地址,以及响应于链表中存在该存储地址,可以在执行针对于该存储地址的内存释放操作后,对该存储地址执行屏蔽操作,以实现对错误的存储地址的隔离。
以上结合图9对本公开的异构***在运行阶段处理ECC错误的操作进行了详细的示例性描述。基于该运行阶段的处理,特别是充分考虑到缓存机制的影响,本公开的方案可以实现对多个屏蔽操作的有序执行。另外,通过设计状态机和计数器,本公开的方案也实现了对多个屏蔽操作的有效管理和高效执行。
图10是示出根据本公开实施例的异构***运行阶段中使用的状态机1000的示意状态转换图。
如前所述,为了实现针对多个ECC错误的多个屏蔽操作,本公开提出使用状态机来维护共享内存的写入时机和屏蔽操作的工作状态。特别地,当内存分配器中执行的屏蔽操作并不是在中断处理函数内进行时,就可能存在上一次的屏蔽操作请求还没有处理完成而新的ECC错误中断就产生了。为了避免多次调用中断处理函数导致共享内存内还未处理的地址信息被新的地址信息覆盖掉,本公开引入了具有空闲态、挂起态和运行态的状态机。
具体地,在主机侧的主处理器发生ECC错误调用屏蔽操作的中断处理函数时,如果当前状态机的状态位是如1002处所示出的空闲态,则主处理器读取与ECC错误关联的地址信息并将其写入到共享内存内。写入操作完成之后,将状态机更新为如1004处所示出的挂起态。当后续发生新的ECC错误触发屏蔽操作的中断调用时,当判断状态机不是空闲态(例如通过状态机的状态标志位确定),则不再执行将地址信息写入共享内存的操作,而是更新屏蔽操作的等待引用计数(例如通过前文所述的计数器的增1或减1操作),用以标识还有与ECC错误相关的地址信息未被读取。
进一步,在主处理器发起主从处理器通信时,如果确定状态机是挂起状态,则将状态机的标志位调整为运行态,也即图中的1006处所示的运行态。此后,从处理器在处理通信请求(例如针对内存释放的请求)之前就会先进行屏蔽操作。当从处理器的任务执行完成并通知主处理器之后,则主处理器会将状态机的状态更新为空闲态(该状态变换如从1006到1002的箭头线所示)。此时,如果主处理器发现屏蔽操作的等待引用计数不为0(即计数器的计数值非0),则继续例如从SRAM中读取地址信息并写入共享内存并将状态机的状态置位为挂起态(该状态变换如从1002 到1004的箭头线所示),从而开始新的循环处理。
图11是示出根据本公开实施例的异构***处理ECC错误的方法1100 的流程图。可以理解的是此处的异构***也即前述结合附图描述的异构***,因此前文关于异构***的描述也适用于方法1100所涉及的异构***。
如图11所示,在步骤S1102处,在主机侧处获取待屏蔽的存储地址的地址信息。如前所述,该存储地址与ECC错误相关联并且也即上文所提到的发生错误的物理地址。接着,在步骤S1104处,在主机侧处将地址信息存储于与所述设备侧共享的存储区域中。此处的共享的存储区域可以实现为前文所称的共享内存。最后,在步骤S1106处,令设备侧从共享的存储区域中读取地址信息并且执行针对该地址信息的屏蔽操作。
为了简明的目的,上面的描述并没有对方法1100做进一步阐述。然而,本领域技术人员根据前文结合附图的描述可以理解,方法1100可以包括更多的步骤和操作,例如使用状态机和/或计数器来对屏蔽操作的工作时机和状态变化进行维护。
以上结合附图对本公开的方案进行了详细的描述。根据不同的应用场景,本披露的屏蔽方案还可以包括或实施于服务器、云端服务器、服务器集群、数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、PC设备、物联网终端、移动终端、手机、行车记录仪、导航仪、传感器、摄像头、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备、视觉终端、自动驾驶终端、交通工具、家用电器、和/或医疗设备。所述交通工具包括飞机、轮船和/或车辆;所述家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机;所述医疗设备包括核磁共振仪、B超仪和/或心电图仪。本披露的电子设备或装置还可以被应用于互联网、物联网、数据中心、能源、交通、公共管理、制造、教育、电网、电信、金融、零售、工地、医疗等领域。进一步,本披露的电子设备或装置还可以用于云端、边缘端、终端等与人工智能、大数据和/或云计算相关的应用场景中。在一个或多个实施例中,根据本披露方案的算力高的电子设备或装置可以应用于云端设备(例如云端服务器),而功耗小的电子设备或装置可以应用于终端设备和/或边缘端设备(例如智能手机或摄像头)。在一个或多个实施例中,云端设备的硬件信息和终端设备和/或边缘端设备的硬件信息相互兼容,从而可以根据终端设备和/或边缘端设备的硬件信息,从云端设备的硬件资源中匹配出合适的硬件资源来模拟终端设备和/或边缘端设备的硬件资源,以便完成端云一体或云边端一体的统一管理、调度和协同工作。
需要说明的是,为了简明的目的,本披露将一些方法及其实施例表述为一系列的动作及其组合,但是本领域技术人员可以理解本披露的方案并不受所描述的动作的顺序限制。因此,依据本披露的公开或教导,本领域技术人员可以理解其中的某些步骤可以采用其他顺序来执行或者同时执行。进一步,本领域技术人员可以理解本披露所描述的实施例可以视为可选实施例,即其中所涉及的动作或模块对于本披露某个或某些方案的实现并不一定是必需的。另外,根据方案的不同,本披露对一些实施例的描述也各有侧重。鉴于此,本领域技术人员可以理解本披露某个实施例中没有详述的部分,也可以参见其他实施例的相关描述。
在具体实现方面,基于本披露的公开和教导,本领域技术人员可以理解本披露所公开的若干实施例也可以通过本文未公开的其他方式来实现。例如,就前文所述的电子设备或装置实施例中的各个单元来说,本文在考虑了逻辑功能的基础上对其进行划分,而实际实现时也可以有另外的划分方式。又例如,可以将多个单元或组件结合或者集成到另一个***,或者对单元或组件中的一些特征或功能进行选择性地禁用。就不同单元或组件之间的连接关系而言,前文结合附图所讨论的连接可以是单元或组件之间的直接或间接耦合。在一些场景中,前述的直接或间接耦合涉及利用接口的通信连接,其中通信接口可以支持电性、光学、声学、磁性或其它形式的信号传输。
在本披露中,作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元示出的部件可以是或者也可以不是物理单元。前述部件或单元可以位于同一位置或者分布到多个网络单元上。另外,根据实际的需要,可以选择其中的部分或者全部单元来实现本披露实施例所述方案的目的。另外,在一些场景中,本披露实施例中的多个单元可以集成于一个单元中或者各个单元物理上单独存在。
在一些实现场景中,上述集成的单元可以采用软件程序模块的形式来实现。如果以软件程序模块的形式实现并作为独立的产品销售或使用时,所述集成的单元可以存储在计算机可读取存储器中。基于此,当本披露的方案以软件产品(例如计算机可读存储介质)的形式体现时,该软件产品可以存储在存储器中,其可以包括若干指令用以使得计算机设备(例如个人计算机、服务器或者网络设备等)执行本披露实施例所述方法的部分或全部步骤。前述的存储器可以包括但不限于U盘、闪存盘、只读存储器 (“Read Only Memory”,简写为ROM)、随机存取存储器(“Random Access Memory”,简写为RAM)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
在另外一些实现场景中,上述集成的单元也可以采用硬件的形式实现,即为具体的硬件电路,其可以包括数字电路和/或模拟电路等。电路的硬件结构的物理实现可以包括但不限于物理器件,而物理器件可以包括但不限于晶体管或忆阻器等器件。鉴于此,本文所述的各类装置(例如计算装置或其他处理装置)可以通过适当的硬件处理器来实现,例如CPU、GPU、 FPGA、DSP和ASIC等。进一步,前述的所述存储单元或存储装置可以是任意适当的存储介质(包括磁存储介质或磁光存储介质等),其例如可以是可变电阻式存储器(“Resistive Random Access Memory”,简写为 RRAM)、动态随机存取存储器(“DynamicRandom Access Memory”,简写为DRAM)、静态随机存取存储器(“Static Random AccessMemory”,简写为SRAM)、增强动态随机存取存储器(“Enhanced Dynamic Random AccessMemory”,简写为“EDRAM”)、高带宽存储器(“High Bandwidth Memory”,简写为“HBM”)、混合存储器立方体(“Hybrid Memory Cube”,简写为“HMC”)、ROM和RAM等。
依据以下条款可更好地理解前述内容:
条款A1.一种用于处理异构***中ECC错误的方法,其中所述异构***包括主机侧和设备侧,其中所述方法在所述设备侧处执行,并且包括:
从所述主机侧获取待屏蔽的存储地址的地址信息,其中所述存储地址与所述ECC错误相关联;以及
根据所述地址信息对所述存储地址执行屏蔽操作。
条款A2.根据条款A1所述的方法,其中在所述异构***的初始化阶段,所述方法包括:
执行所述设备侧的初始化操作;
在执行所述初始化操作后,从所述主机侧获取所述地址信息并且根据所述地址信息对所述存储地址执行屏蔽操作;以及
将执行所述屏蔽操作后获得的屏蔽结果写入至所述主机侧。
条款A3.根据条款A2所述的方法,其中根据所述地址信息对所述存储地址执行屏蔽操作包括:
响应于待屏蔽的所述存储地址当前被占用,对所述存储地址进行错误标记。
条款A4.根据条款A2所述的方法,其中根据所述地址信息对所述存储地址执行屏蔽操作包括:
响应于待屏蔽的所述存储地址当前未被占用,对所述存储地址执行隔离。
条款A5.根据条款A3或A4所述的方法,其中在所述异构***的运行阶段,所述方法还包括:
响应于所述待屏蔽的存储地址当前被占用,将所述存储地址进行保存;以及
在所述存储地址被释放后,对保存的所述存储地址执行所述屏蔽操作。
条款A6.根据条款A5所述的方法,其中将所述存储地址进行保存包括将所述存储地址作为节点挂接于链表中,所述方法还包括:
在执行内存释放操作时遍历所述链表,以确定所述链表中是否存在待释放的所述存储地址;
响应于所述链表中存在所述存储地址,在执行针对于所述存储地址的内存释放操作后,对所述存储地址执行所述屏蔽操作。
条款A7.根据条款A5或A6所述的方法,还包括:
响应于发生所述ECC错误,执行针对于所述存储地址的缓存无效化操作,以便令所述存储地址从所述设备侧的缓存中释放。
条款A8.根据条款A7所述的方法,其中执行针对于所述存储地址的缓存无效化操作包括:
将执行所述屏蔽操作前所申请的内存释放,以便申请的内存不在所述设备侧的缓存中驻留。
条款A9.根据条款A8所述的方法,其中在将执行所述屏蔽操作前所申请的内存释放中,所述方法包括:
记录缓存中分配内存的第一时刻;
记录开始执行所述屏蔽操作前的第二时刻;以及
比较所述第一时刻和第二时刻,以便将所述第二时刻前所述缓存中驻留的内存全部释放。
条款A10.一种用于处理异构***中ECC错误的方法,其中所述异构***包括主机侧和设备侧,所述方法在所述主机侧执行,并且包括:
获取待屏蔽的存储地址的地址信息,其中所述地址信息与所述ECC 错误相关联;以及
将所述地址信息进行存储,以便由所述设备侧执行读取并根据所述地址信息对所述存储地址执行屏蔽操作。
条款A11.根据条款A10所述的方法,其中在所述异构***的初始化阶段,所述方法包括:
执行所述主机侧的初始化操作;以及
读取与ECC错误相关联的所述地址信息并且将其进行存储。
条款A12.根据条款A10所述的方法,还包括:
从所述设备侧读取关于执行所述屏蔽操作后所获得的屏蔽结果;以及
根据所述屏蔽结果来更新与所述屏蔽操作关联的状态位。
条款A13.根据条款A10-A12的任意一项所述的方法,其中在所述异构***的运行阶段,所述方法还包括:
在触发所述设备侧执行所述屏蔽操作前,令所述主机侧的内存缓存标记位无效,以便禁止与所述存储地址关联的内存被分配和使用。
条款A14.根据条款A13所述的方法,其中在所述运行阶段,所述方法还包括:
获取响应于所述ECC错误而产生的中断信号;以及
根据所述中断信号来调用针对于所述屏蔽操作的中断处理函数,以便发起与所述设备侧的通信并且令所述设备侧执行所述屏蔽操作。
条款A15.根据条款A13所述的方法,其中在所述主机侧布置有用于维护所述地址信息的存储时机和屏蔽操作的工作状态的状态机,其中所述状态机至少包括空闲态和挂起态,所述方法包括:
根据所述状态机的空闲态和挂起态来执行与N个地址信息分别关联的N个屏蔽操作,其中N大于或等于2。
条款A16.根据条款A15所述的方法,其中在执行所述N个屏蔽操作中,所述方法包括:
响应于所述状态机的状态为空闲态,将所述第n个地址信息进行存储,以便由所述设备侧读取,其中1≤n≤N且为正整数;
在写入第n个地址信息后,将所述状态机的状态更新为挂起态,以禁止存储与第“n+1”个屏蔽操作关联的第“n+1”个地址信息;以及
响应于所述设备侧执行完第n个屏蔽操作,将所述状态机的状态更新为空闲态,以允许将第“n+1”个地址信息进行存储。
条款A17.根据条款A15或A16所述的方法,其中在所述主机侧设置有用于对待执行的屏蔽操作进行计数的计数器,所述方法还包括:
根据所述计数器的数值和所述状态机的状态,确定是否将所述地址信息进行存储。
条款A18.根据条款A17所述的方法,其中所述状态机的状态还包括运行态,所述方法还包括:
响应于所述状态机为所述挂起态,将所述状态机的状态更新为所述运行态,以便所述设备侧在所述运行态下执行所述屏蔽操作;
响应于从所述设备侧接收到关于执行完本次所述屏蔽操作的通知,将所述状态机的状态更新为空闲态并将所述计数器的数值减一;
判断所述计数器是否为零;以及
响应于所述计数器不为零,存储下一所述地址信息并将状态机的状态更新为所述挂起态,以便所述设备侧执行针对下一地址信息的屏蔽操作。
条款A19.一种计算机***,包括设备侧和主机侧,其中所述设备侧配置用于执行根据条款A1-A9的任意一项所述的方法,并且所述主机侧配置用于执行根据条款A10-A18的任意一项所述的方法,由此实现所述计算机***内针对所述ECC错误的屏蔽操作。
条款A20.一种对异构***中的ECC错误进行处理的方法,所述异构***包括设备侧和主机侧,所述方法包括:
在所述主机侧处获取待屏蔽的存储地址的地址信息,其中所述存储地址与所述ECC错误相关联;
在所述主机侧处将所述地址信息存储于与所述设备侧共享的存储区域中;以及
令所述设备侧从所述共享的存储区域中读取所述地址信息并且执行针对所述地址信息的屏蔽操作。
条款A21.一种计算机可读存储介质,其上存储有用于对异构***中的ECC错误进行处理的计算机程序代码,当所述计算机程序代码由处理器运行时,执行条款A1-A9中任意一项或条款A10-A18中任意一项所述的方法。
条款A22.一种计算机程序产品,包括用于对异构***中的ECC错误进行处理的计算机程序,当所述计算机程序被处理器执行时实现条款 A1-A9中任意一项或条款A10-A18中任意一项所述方法的步骤。
条款A23.一种计算装置,包括存储器、处理器及存储在存储器上的计算机程序,当所述处理器执行所述计算机程序时,实现条款A1-A9中任意一项或条款A10-A18中任意一项所述方法的步骤。
虽然本文已经示出和描述了本披露的多个实施例,但对于本领域技术人员显而易见的是,这样的实施例只是以示例的方式来提供。本领域技术人员可以在不偏离本披露思想和精神的情况下想到许多更改、改变和替代的方式。应当理解的是在实践本披露的过程中,可以采用对本文所描述的本披露实施例的各种替代方案。所附权利要求书旨在限定本披露的保护范围,并因此覆盖这些权利要求范围内的等同或替代方案。
Claims (18)
1.一种用于处理异构***中ECC错误的方法,其中所述异构***包括主机侧和设备侧,其中所述方法在所述设备侧处执行,并且包括:
获取待屏蔽的存储地址的地址信息,其中所述存储地址与所述ECC错误相关联;以及
根据所述地址信息对所述存储地址执行屏蔽操作。
2.根据权利要求1所述的方法,其中在所述异构***的初始化阶段,所述方法包括:
执行所述设备侧的初始化操作;
在执行所述初始化操作后,从所述主机侧获取所述地址信息并且根据所述地址信息对所述存储地址执行屏蔽操作;以及
将执行所述屏蔽操作后获得的屏蔽结果写入至所述主机侧。
3.根据权利要求2所述的方法,其中根据所述地址信息对所述存储地址执行屏蔽操作包括:
响应于待屏蔽的所述存储地址当前被占用,对所述存储地址进行错误标记;
响应于待屏蔽的所述存储地址当前未被占用,对所述存储地址执行隔离。
4.根据权利要求3所述的方法,其中在所述异构***的运行阶段,所述方法还包括:
响应于所述待屏蔽的存储地址当前被占用,将所述存储地址进行保存;以及
在所述存储地址被释放后,对保存的所述存储地址执行所述屏蔽操作。
5.根据权利要求4所述的方法,其中将所述存储地址进行保存包括将所述存储地址作为节点挂接于链表中,所述方法还包括:
在执行内存释放操作时遍历所述链表,以确定所述链表中是否存在待释放的所述存储地址;
响应于所述链表中存在所述存储地址,在执行针对于所述存储地址的内存释放操作后,对所述存储地址执行所述屏蔽操作。
6.根据权利要求4或5所述的方法,还包括:
响应于发生所述ECC错误,执行针对于所述存储地址的缓存无效化操作,以便令所述存储地址从所述设备侧的缓存中释放,其中执行所述缓存无效化操作包括将执行所述屏蔽操作前所申请的内存释放,以便申请的内存不在所述设备侧的缓存中驻留。
7.根据权利要求6所述的方法,其中在将执行所述屏蔽操作前所申请的内存释放中,所述方法包括:
记录缓存中分配内存的第一时刻;
记录开始执行所述屏蔽操作前的第二时刻;以及
比较所述第一时刻和第二时刻,以便将所述第二时刻前所述缓存中驻留的内存全部释放。
8.一种用于处理异构***中ECC错误的方法,其中所述异构***包括主机侧和设备侧,所述方法在所述主机侧执行,并且包括:
获取待屏蔽的存储地址的地址信息,其中所述地址信息与所述ECC错误相关联;以及
将所述地址信息进行存储,以便由所述设备侧执行读取并根据所述地址信息对所述存储地址执行屏蔽操作。
9.根据权利要求8所述的方法,还包括:
从所述设备侧读取关于执行所述屏蔽操作后所获得的屏蔽结果;以及
根据所述屏蔽结果来更新与所述屏蔽操作关联的状态位。
10.根据权利要求8或9所述的方法,其中在所述异构***的运行阶段,所述方法还包括:
在触发所述设备侧执行所述屏蔽操作前,令所述主机侧的内存缓存标记位无效,以便禁止与所述存储地址关联的内存被分配和使用。
11.根据权利要求10所述的方法,其中在所述运行阶段,所述方法还包括:
获取响应于所述ECC错误而产生的中断信号;
根据所述中断信号来调用针对于所述屏蔽操作的中断处理函数,以便发起与所述设备侧的通信并且令所述设备侧执行所述屏蔽操作。
12.根据权利要求8-11任一项所述的方法,其中在所述主机侧布置有用于维护所述地址信息的存储时机和屏蔽操作的工作状态的状态机,其中所述状态机至少包括空闲态和挂起态,所述方法包括:
根据所述状态机的空闲态和挂起态来执行与N个地址信息分别关联的N个屏蔽操作,其中N大于或等于2。
13.根据权利要求12所述的方法,其中在执行所述N个屏蔽操作中,所述方法包括:
响应于所述状态机的状态为空闲态,将所述第n个地址信息进行存储,以便由所述设备侧读取,其中1≤n≤N且为正整数;
在写入第n个地址信息后,将所述状态机的状态更新为挂起态,以禁止存储与第“n+1”个屏蔽操作关联的第“n+1”个地址信息;以及
响应于所述设备侧执行完第n个屏蔽操作,将所述状态机的状态更新为空闲态,以允许将第“n+1”个地址信息进行存储。
14.根据权利要求13或14所述的方法,其中在所述主机侧设置有用于对待执行的屏蔽操作进行计数的计数器,所述方法还包括:
根据所述计数器的数值和所述状态机的状态,确定是否将所述地址信息进行存储。
15.根据权利要求13所述的方法,其中所述状态机的状态还包括运行态,所述方法还包括:
响应于所述状态机为所述挂起态,将所述状态机的状态更新为所述运行态,以便所述设备侧在所述运行态下执行所述屏蔽操作;
响应于从所述设备侧接收到关于执行完本次所述屏蔽操作的通知,将所述状态机的状态更新为空闲态并将所述计数器的数值减一;
判断所述计数器是否为零;以及
响应于所述计数器不为零,存储下一所述地址信息并将状态机的状态更新为所述挂起态,以便所述设备侧执行针对下一地址信息的屏蔽操作。
16.一种计算机***,包括设备侧和主机侧,其中所述设备侧配置用于执行根据权利要求1-7的任意一项所述的方法,并且所述主机侧配置用于执行根据权利要求8-15的任意一项所述的方法,由此实现所述计算机***内针对所述ECC错误的屏蔽操作。
17.一种对异构***中的ECC错误进行处理的方法,所述异构***包括设备侧和主机侧,所述方法包括:
在所述主机侧处获取待屏蔽的存储地址的地址信息,其中所述存储地址与所述ECC错误相关联;
在所述主机侧处将所述地址信息存储于与所述设备侧共享的存储区域中;以及
令所述设备侧从所述共享的存储区域中读取所述地址信息并且执行针对所述地址信息的屏蔽操作。
18.一种计算机可读存储介质,其上存储有用于对异构***中的ECC错误进行处理的计算机程序代码,当所述计算机程序代码由处理器运行时,执行权利要求1-7中任意一项或权利要求8-15中任意一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111405208.8A CN116166468A (zh) | 2021-11-24 | 2021-11-24 | 用于处理异构***中ecc错误的方法、异构***及其相关产品 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111405208.8A CN116166468A (zh) | 2021-11-24 | 2021-11-24 | 用于处理异构***中ecc错误的方法、异构***及其相关产品 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116166468A true CN116166468A (zh) | 2023-05-26 |
Family
ID=86420532
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111405208.8A Pending CN116166468A (zh) | 2021-11-24 | 2021-11-24 | 用于处理异构***中ecc错误的方法、异构***及其相关产品 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116166468A (zh) |
-
2021
- 2021-11-24 CN CN202111405208.8A patent/CN116166468A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101343714B1 (ko) | 공유된 비휘발성 메모리 아키텍쳐 | |
TWI496076B (zh) | 上下文狀態管理技術 | |
CN114580344B (zh) | 测试激励生成方法、验证方法、验证***及相关设备 | |
US11360809B2 (en) | Multithreaded processor core with hardware-assisted task scheduling | |
US10628352B2 (en) | Heterogeneous multi-processor device and method of enabling coherent data access within a heterogeneous multi-processor device | |
WO2023280097A1 (zh) | 一种缺页异常的处理方法及相应装置 | |
CN111258935A (zh) | 数据传输装置和方法 | |
US11416749B2 (en) | Execution synchronization and tracking | |
JP2012238306A (ja) | ルーティングのための方法及び装置 | |
WO2019133172A1 (en) | Processor, method, and system for reducing latency in accessing remote registers | |
US7581042B2 (en) | I/O hub resident cache line monitor and device register update | |
CN111258769B (zh) | 数据传输装置和方法 | |
US9760145B2 (en) | Saving the architectural state of a computing device using sectors | |
CN116166468A (zh) | 用于处理异构***中ecc错误的方法、异构***及其相关产品 | |
CN115878266A (zh) | ARM Cortex-A7处理器仿真方法、***、介质及设备 | |
US9043507B2 (en) | Information processing system | |
US11216377B2 (en) | Hardware accelerator automatic detection of software process migration | |
US11392406B1 (en) | Alternative interrupt reporting channels for microcontroller access devices | |
CN114443137A (zh) | 一种集成计算装置、芯片、板卡、设备和计算方法 | |
JPH08249175A (ja) | スーパースカラ・プロセッサ装置内の非アーキテクト命令を選択的にサポートする方法及び装置 | |
WO2023016382A1 (zh) | 用于片上***的方法及其相关产品 | |
WO2023016383A1 (zh) | 用于高速缓冲存储器的方法及其相关产品 | |
CN117667212A (zh) | 指令控制装置、方法、处理器、芯片和板卡 | |
CN115437603B (zh) | 用于生成随机数的方法及其相关产品 | |
CN113033791B (zh) | 用于保序的计算装置、集成电路装置、板卡及保序方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |