用于GPU的着色器核心的在空闲周期期间的自测试的制作方法

文档序号:21484480发布日期:2020-07-14 17:10阅读:196来源:国知局
用于GPU的着色器核心的在空闲周期期间的自测试的制作方法

根据35u.s.c.§119的优先权要求

本专利申请要求于2017年12月5日提交的题为“用于gpu的着色器核心的在空闲周期期间的自测试(self-testduringidlecyclesforshadercoreofgpu)”的非临时申请第15/832,042号的优先权,所述非临时申请被转让给本申请的受让人,并且在此通过引用明确地并入本文。

本公开涉及处理电路系统的自测试。



背景技术:

汽车可以包含可以向所述车辆的驾驶员提供信息、数据、图像、视频等的显示装置。例如,显示装置可以显示由后视相机捕获的视频,以辅助车辆驾驶员安全地倒出停车位。进一步地,显示装置可以是汽车高级驾驶员辅助系统(adas)的一部分,或者可以可操作地耦接到所述adas,使得显示装置还可以显示盲点警报,以向驾驶员警示在其盲点处存在车辆。

图形处理单元(gpu)是被配置成并行执行许多操作的处理电路,并且可用于生成用于显示的图形数据的图形操作。gpu用于包含汽车的各种环境中。例如,gpu生成图像内容,如在方向盘后面的仪表板上的图像内容。gpu包含作为可编程处理器的着色器核心,着色器程序作为用于生成图像内容的过程的一部分在所述着色器核心上执行。



技术实现要素:

总体上,本公开描述了用于图形处理单元(gpu)核心和存储器的结构现场测试的技术。此类测试可以称为现场测试,所述现场测试的实例包含逻辑内建自测试(lbist)和存储器内建自测试(mbist),其可以用于安全关键汽车应用。在一些实例中,为了执行现场测试,所述gpu可以被配置成在所述gpu进入空闲状态时在操作期间(例如,在现场)自动地(例如,在没有来自另一个装置的指令的情况下)执行自测试。此外,gpu可以被配置成如果自测试未完成并且gpu需要从空闲状态切换到活动状态,则选择性地停止并重新开始自测试。

在一个实例中,本公开描述了一种用于图形处理单元(gpu)的自测试的方法,所述方法包括:由所述gpu确定所述gpu的操作的安全等级;确定所述gpu进入空闲模式的实例;以及响应于所述gpu进入所述空闲模式而执行自测试以确定所述gpu是否根据所述安全等级进行操作。

在一个实例中,本公开描述了一种用于图形处理单元(gpu)的自测试的装置,所述装置包括被配置成存储自测试的信息的存储器和所述gpu。所述gpu被配置成确定所述gpu的操作的安全等级;确定所述gpu进入空闲模式的实例;以及响应于所述gpu进入所述空闲模式而执行所述自测试以确定所述gpu是否根据所述安全等级进行操作。

在一个实例中,本公开描述了一种计算机可读存储媒体,所述计算机可读存储媒体包括用于图形处理单元(gpu)的自测试的指令,所述指令在被执行时使所述gpu:确定所述gpu的操作的安全等级;确定所述gpu进入空闲模式的实例;以及响应于所述gpu进入所述空闲模式而执行自测试以确定所述gpu是否根据所述安全等级进行操作。

在一个实例中,本公开描述了一种用于图形处理单元(gpu)的自测试的装置,所述装置包括所述gpu,其中所述gpu包括:用于确定所述gpu的操作的安全等级的装置;用于确定所述gpu进入空闲模式的实例的装置;以及用于响应于所述gpu进入所述空闲模式而执行自测试以确定所述gpu是否根据所述安全等级进行操作的装置。

在以下附图和说明书中阐述了一或多个实例的细节。根据说明书、附图以及权利要求,其它特征、目的和优点将显而易见。

附图说明

图1是被配置成执行本公开中描述的示例技术中的一或多种技术的装置的框图。

图2是进一步详细地展示了图1的计算装置的cpu、gpu和存储器的框图。

图3是进一步详细地展示了图2的gpu的电路块的框图。

图4是展示了根据本公开中描述的一或多种示例技术的示例操作方法的流程图。

图5是展示了根据本公开中描述的一或多种示例技术的另一种示例操作方法的流程图。

具体实施方式

高级驾驶员辅助系统(adas)需要满足iso26262规定的功能安全标准。iso26262的要求之一是硬件组件能够在操作期间执行自测试,以确保组件的完整性。自测试的实例包含对逻辑的测试(逻辑内建自测试(lbist))和对存储器的测试(存储器内建自测试(mbist))。由iso26262管控的应用的实例包含仪表组显示系统(例如,图形仪表板)、捕获的图像内容上的覆盖物等。

在一些实例中,gpu执行图形操作以生成图形内容,所述图形内容针对在汽车情况下受安全标准管控的应用而显示。因此,gpu是应当遵守iso26262的自测试要求的硬件组件。

为了确保gpu正确地操作,gpu可以执行本身的并行和在线测试,以检测在gpu处理一或多个图像以供显示装置显示时发生的操作故障。gpu的并行测试可以是如汽车等包含gpu的装置操作时的连续测试。在线测试可以包含在汽车通电并且执行其正常功能时的测试。gpu可以在gpu通电并处于使用中时执行测试,而无需进入专用测试模式,并且无需关闭显示装置。因此,如果gpu是adas,则adas的用户可以使用adas来例如观看从车辆的后视相机流式传输的视频,同时adas执行gpu的并行和在线测试。

此并行和在线测试可以检测操作故障。操作故障的实例可以包含黑屏、冻结帧或数据的不正确显示。操作故障可以包含永久故障、间歇故障和暂态故障。如果不采取校正动作,则永久故障可能是保持无限期存在的故障。此类故障可能是遗留的设计故障或制造故障。间歇故障可以出现、消失并且反复再现。此类故障可能难以预测,但是其影响可能高度相关。当此类间歇故障出现时,gpu在大多数情况下可以正常工作,但是在非典型环境条件下可能会发生故障。暂态故障可以迅速出现并消失,并且此类故障可能不相关。此类暂态故障通常是由随机环境干扰引起的。

被配置成执行本公开的技术的gpu可以执行本身的并行和在线测试,以通过系统性测试方法检测操作故障。gpu可以包含用于在正常操作期间针对若干硬件子块执行并行和在线内建自测试的机制。gpu可以执行此类内建自测试,以检测gpu中的硬件子块是否在处理中引入了任何故障,以及是否检测到故障。作为一个实例,gpu可以执行此类内建自测试以确定在gpu中的子块中是否检测到某一阈值百分比的故障。gpu可以是计算装置的一部分(如adas等),或者可以是可以执行贯穿本公开描述的内建自测试的独立模块。

现有的自测试技术需要中央处理单元(cpu)来执行控制gpu的当前状态信息的存储的软件,使得gpu可以执行自测试,并且然后通过重新加载状态信息返回到其正常操作。另外,cpu和gpu执行交握操作以寻找执行自测试的最佳时间。依靠软件来存储状态信息并且恢复gpu,以及迫使cpu与gpu之间交握以寻找自测试的时间导致了复杂性。

本公开描述了用于gpu的自动自测试的示例技术。gpu的自动自测试可以意味着gpu独立于来自gpu的指令执行自测试。作为实例,gpu可以在没有来自cpu的干预的情况下自动地执行自测试。编译器基于gpu的指令集架构(isa)编译应用。在本公开中描述的实例中,用于gpu的isa提供指令,所述指令用于定义应用或应用的一部分是否是安全关键的。isa可用于安全关键应用和非安全关键应用两者。

开发应用的开发人员可以包含定义或指令,所述定义或指令指示应用或应用的一部分是安全关键的。应用的一部分的一个实例是应用的指令的子集或在执行期间由应用调用的某些功能(例如,由应用调用的着色器)。编译器可以使用isa指令编译指令,所述指令指示应用或应用的一部分是安全关键的。作为一个实例,编译器可以包含功能安全(fs)标志,所述功能安全标志指示应用的一部分是应用的安全关键部分或非安全关键部分。

gpu接收用于应用的编译的指令。编译的指令可以指示应用或应用的一部分(例如,指令的子集或由应用调用的着色器)的安全等级。在本公开中描述的实例中,当gpu在应用或应用的一部分的执行期间变得空闲(例如,在某一长时间段内未接收到指令)时,如果编译的指令指示应用或应用的一部分是安全关键的,则gpu可以自动地执行自测试。作为实例,gpu可以独立于来自cpu的用于执行自测试的指令来执行自测试。例如,独立于来自cpu的指令的自测试可以意指作为实例在不接收来自cpu的用于执行自测试的指令的情况下的自测试。以此方式,gpu能够独立于来自cpu的自测试指令执行真正的自测试。独立于来自cpu的自测试指令执行自测试可以降低cpu控制的复杂性。

在一些实例中,代替编译器包含定义安全等级的指令,开发人员可以利用isa指令,并且直接在应用的源代码中包含指令,所述指令不仅使gpu进入空闲状态,而且定义了自测试的安全等级。在此类情况下,编译器仍然编译指示安全等级的指令。

安全等级的实例包含由汽车安全完整性等级(asil)定义的安全等级。例如,asil定义了单点故障度量和潜在故障度量。单点故障度量和潜在故障度量定义了需要在gpu的电路或存储器块中检测多少故障(例如,需要检测至少90%、97%或99%的单点故障,和/或需要检测至少60%、80%和90%的潜在故障)。在下面更详细地描述单点故障和潜在故障。

此外,在其中cpu控制由gpu执行的自测试的实例中,gpu可能无法执行其它操作,因为cpu可以暂停gpu执行另外操作。例如,在gpu完成自测试之前,cpu可以不向gpu提供指令。这可能导致要由gpu完成的其它任务的延迟。

在一或多种示例技术中,即使在执行自测试时,gpu也可能能够选择性地执行指令。例如,可以将自测试分成切片,并且gpu可以执行切片作为自测试的一部分。如将更详细描述的,每个切片包含自测试的操作的一部分,并且在一些实例中可以是自测试的可分离部分。如果gpu在执行自测试的同时接收到指令,则gpu可以在执行自测试的过程中暂停自测试,并且执行接收到的指令。在接收到的指令的执行完成时,gpu可以重新执行当前切片的操作,并且继续执行自测试的下一个切片。以此方式,gpu可以选择性地暂停自测试的执行以允许及时完成给予gpu的其它任务。

图1是被配置成执行本公开中描述的示例技术中的一或多种技术的装置的框图。装置10的一个实例是汽车。为了便于展示和简洁,未示出或描述汽车的各个组件。相反,图1展示了用于执行本公开中描述的示例技术的组件。

装置10不限于汽车。装置10的其它实例包含计算机(例如,个人计算机、台式计算机或膝上型计算机)、如平板计算机等移动装置、无线通信装置(如,移动电话、蜂窝电话、卫星电话和/或移动电话手持装置)、用于电话会议的陆线电话、因特网电话、如便携式视频游戏装置或个人数字助理(pda)等手持式装置。计算装置10的另外实例包含个人音乐播放器、视频播放器、显示装置、相机、电视机、机顶盒、广播接收器装置、服务器、中间网络装置、大型计算机或处理和/或显示图形数据的任何其它类型的装置。出于描述的目的,相对于作为汽车的装置10描述了实例,其中应理解实例可以延伸到装置10的其它实例。

如在图1的实例中展示的,装置10包含镜头12、相机处理器14、中央处理单元(cpu)16、图形处理单元(gpu)18和gpu18的本地存储器20、用户接口22、提供对系统存储器30的访问的存储器控制器24,以及输出信号的显示接口26,所述信号使图形数据显示在一或多个显示器28上。总线32提供各个组件的互连。

尽管将各个组件展示为单独的组件,但是在一些实例中,可以将组件组合以形成片上系统(soc)。作为实例,相机处理器14、cpu16、gpu18和显示接口26可以形成在公共集成电路(ic)芯片上。在一些实例中,相机处理器14、cpu16、gpu18和显示接口26中的一或多个可以在单独的ic芯片中。各种其它排列和组合是可能的,并且所述技术不应被认为限于图1中展示的实例。

图1中展示的各个组件(无论是形成在一个装置上还是形成在不同装置上)可以形成为以下中的至少一种:如在一或多个微处理器中的固定功能或可编程电路系统、专用集成电路(asic)、现场可编程门阵列(fpga)、数字信号处理器(dsp)或其它等效的集成或离散逻辑电路系统。本地存储器20的实例包含一或多个易失性或非易失性存储器或存储装置,如随机存取存储器(ram)、静态ram(sram)、动态ram(dram)、可擦除可编程rom(eprom)、电可擦除可编程rom(eeprom)、闪速存储器、磁数据媒体或光存储媒体。

图1中展示的各个单元使用总线32彼此通信。总线32可以是各种总线结构中的任何总线结构,如第三代总线(例如,超传输(hypertransport)总线或无限带宽(infiniband)总线)、第二代总线(例如,高级图形端口(advancedgraphicsport)总线、外围组件互连(peripheralcomponentinterconnect,pci)快速总线或高级可扩展接口(advancedextensibleinterface,axi)总线)或另一种类型的总线或装置互连。应当注意,图1中所示的不同组件之间的总线和通信接口的具体配置仅是示范性的,并且具有相同或不同组件的计算装置和/或其它图像处理系统的其它配置可以用于实施本公开的技术。

一或多个显示器28向驾驶员或乘客显示相关信息。一或多个显示器28的实例包含监视器、液晶显示器(lcd)、等离子体显示面板、发光二极管(led)阵列、触摸面板等。

在一些实例中,装置10中可以仅存在一个显示器28,如充当用户接口22以及显示如速度、温度、气体水平、电池电量和其它此类信息等信息并且输出由相机处理器14捕获的图像的“仪表板”的一个大屏幕。在一些实例中,可以存在多个显示器28。例如,显示器28中的一个显示器可以是方向盘后面的仪表板,显示器28中的另一个显示器可以是示出如行进距离、温度设置等信息的屏幕。

可以存在与显示器28中的每个显示器相关联的一个gpu(如gpu18)和一个显示接口(如显示接口26),或者可以存在用于显示器28中的每个显示器的单个gpu18和单个显示接口26。在本公开中描述的实例中,存在用于显示器28中的每个显示器的一个gpu18和一个显示接口26。然而,示例技术也适用于存在多个gpu18和多个显示接口26的情况。

用户接口22在本公开中用于一般性地指代驾驶员或乘客可以与装置10交互的方式。例如,用户接口22可以是方向盘的侧面上的开关,驾驶员可以使用所述开关来循环通过无线电站。用户接口22可以是驾驶员用来使汽车换挡或挂上倒档的变速杆。在一些实例中,如在其中显示器28之一是触摸面板的实例中,用户接口22可以是一或多个显示器28的一部分。

相机处理器14、cpu16和gpu18可以被配置成生成一或多个显示器28显示的图像内容。例如,相机处理器14被配置成从镜头12的相应像素接收电流作为传感器信号,并且处理电流以生成图像的像素数据。镜头12的一个实例是汽车的备用相机。相机处理器14可以被配置为单输入多数据(simd)架构。相机处理器14可以对从镜头12中的每个镜头上的传感器中的每个传感器接收的电流执行相同的操作。simd架构的每个通道可以包含图像管线。图像管线包含硬接线电路系统和/或可编程电路系统(例如,固定功能电路系统或可编程电路系统中的至少一种电路系统),以处理传感器的输出,从而生成将处于显示图像中的像素的像素值。

例如,相机处理器14的每个图像管线可以包含用于将电流转换为电压的相应的跨阻放大器(tia)和将模拟电压输出转换为数字值的相应的模数转换器(adc)。每个像素输出的电流指示红色、绿色或蓝色分量的强度。

除了将模拟电流输出转换为数字值之外,相机处理器14还可以执行一些另外后处理以提高最终图像的质量。例如,相机处理器14可以评估相邻图像像素的颜色和亮度数据,并且执行去马赛克以更新图像像素的颜色和亮度。作为另外实例,相机处理器14还可以执行噪声降低和图像锐化。相机处理器14通过存储器控制器24将所得图像(例如,图像像素中的每个图像像素的像素值)输出到系统存储器30。

cpu16可以包括控制装置10的操作的通用处理器或专用处理器。用户可以向装置10提供输入以使cpu16执行一或多个软件应用。在cpu16上执行的软件应用可以包含例如图形用户接口应用或另一个程序。作为实例,cpu16可以执行一或多个软件应用,所述一或多个软件应用为一或多个显示器28上示出的图标生成图像内容。作为另一个实例,响应于用户将汽车置于倒挡,cpu16可以执行使相机处理器14处理由镜头12捕获的图像内容的应用。作为另一个实例,cpu16可以执行生成指示电池电量、燃料水平、温度等的图像内容的应用。

cpu16执行的以上示例应用是cpu16生成用于显示的图像内容的实例。然而,可能存在cpu16执行的不生成图像内容的其它示例应用,如操作系统。此外,代替执行用于生成图像内容的应用,可以将cpu16硬接线以生成图像内容。例如,代替在可编程电路系统上执行应用以基于从燃料传感器接收的信息来确定燃料水平,可以将cpu16硬接线以利用专用固定功能电路系统确定燃料水平,所述专用固定功能电路系统从燃料传感器接收信息并且输出指示燃料水平的信息。在一些情况下,即使在此类实例中,cpu16也可以执行从固定功能电路系统接收指示燃料水平的信息并且生成图形命令的应用,使得gpu18可以生成示出燃料水平的图像内容。

使用用于cpu16的固定功能和可编程电路系统来生成要显示在一或多个显示器28上的信息可以存在各种组合和排列。以上提供了一些实例,并且此类实例不应被认为是限制性的。

在cpu16上执行的软件应用可以包含一或多个图形渲染指令,所述一或多个图形渲染指令指示gpu18进行图形数据的渲染,用于存储在系统存储器30中和/或显示在显示器28上。在一些实例中,软件指令可以符合图形应用编程接口(api),如开放式图形库(opengraphicslibrary,)api、开放式图形库嵌入式系统(opengraphicslibraryembeddedsystems,opengles)api、openclapi、direct3dapi、x3dapi、rendermanapi、webglapi或任何其它公共或专有标准图形api。所述技术不应被认为限于需要特定的api。

作为一个实例,cpu16可以确定汽车正在达到的每加仑英里数,并且生成图形渲染指令,所述图形渲染指令指示gpu18生成示出每加仑英里数的图像内容。作为另一个实例,驾驶员可能正使汽车倒退,并且作为响应,cpu16可以使一或多个显示器28显示由镜头12(例如,备用相机)捕获并且由相机处理器14处理的图像内容。另外,cpu16可以确定汽车的移动的角度,并且生成示出处于倒挡的汽车的路径的图形信息。cpu16可以生成用于gpu18的图形渲染指令,以绘制叠加在由相机处理器14处理的图像上的汽车的路径。因此,gpu18可以被配置成在汽车操作时为汽车应用生成图像内容。

存储器控制器24促进了进入和离开系统存储器30的数据的传输。例如,存储器控制器24可以接收存储器读取和写入命令,并且相对于存储器30服务此类命令,以便为计算装置10中的组件提供存储器服务。存储器控制器24可以通信地耦接到系统存储器30。尽管在图1的装置10的实例中将存储器控制器24展示为与cpu16和系统存储器30两者都分离的处理电路,但是在其它实例中,可以在cpu16和系统存储器30中的一个或两个上实施存储器控制器24的一些或全部功能。

系统存储器30可以存储可以由相机处理器14、cpu16和gpu18访问的程序模块和/或指令和/或数据。例如,系统存储器30可以存储用户应用(例如,用于相机应用的指令)、来自相机处理器14和gpu18等的所得图像。系统存储器30可以另外地存储供装置10的其它组件使用和/或由其生成的信息。例如,系统存储器30可以充当相机处理器14的装置存储器。系统存储器30可以包含一或多个易失性或非易失性存储器或存储装置,如随机存取存储器(ram)、静态ram(sram)、动态ram(dram)、只读存储器(rom)、可擦除可编程rom(eprom)、电可擦除可编程rom(eeprom)、闪速存储器、磁数据媒体或光存储媒体。

在一些实例中,系统存储器30可以包含使相机处理器14、cpu16、gpu18和显示接口26执行归因于本公开中的这些组件的功能的指令。因此,系统存储器30可以是计算机可读存储媒体,所述计算机可读存储媒体具有存储在其上的指令,所述指令在被执行时使一或多个处理器(例如,相机处理器14、cpu16、gpu18和显示接口26)执行各种功能。

在一些实例中,系统存储器30是非暂时性存储媒体。术语“非暂时性”指示存储媒体未体现在载波或传播的信号中。然而,术语“非暂时性”不应被解释为意指系统存储器30是不可移动的或其内容是静态的。作为一个实例,系统存储器30可以从计算装置10移除,并且移动到另一个装置。作为另一个实例,可以将与系统存储器30基本上类似的存储器插入计算装置10中。在某些实例中,非暂时性存储媒体可以存储可以随时间变化的数据(例如,在ram中)。

相机处理器14、cpu16和gpu18可以将图像数据等存储在系统存储器30内分配的相应缓冲器中。显示接口26可以从系统存储器30检索数据,并且配置显示器28以显示由生成的图像数据表示的图像。在一些实例中,显示接口26可以包含数/模转换器(dac),所述数/模转换器被配置成将从系统存储器30检索的数字值转换为可以由显示器28耗用的模拟信号。在其它实例中,显示接口26可以将数字值直接传递到显示器28以进行处理。

汽车要求高水平的安全遵守性,并且iso26262是道路车辆的功能安全标准。gpu18的操作的部分可以属于安全关键高级驾驶员辅助系统(adas)。针对adas的iso26262要求之一是通常通过在线(在操作期间)自测试来确保安全关键用例所涉及的各个硬件组件(如gpu18)的完整性。

本公开描述了硬件核心(如gpu18的核心)和如本地存储器20等存储器的结构现场测试的示例技术。可以在装置10处于操作中时(例如,在被驱动时)执行现场测试。所述测试可以称为现场逻辑内建自测试(lbist)和存储器内建自测试(mbist)。对于如adas等安全关键汽车应用或使用gpu18的如仪表组显示系统和环视系统的应用,lbist和mbist可用于确保gpu18和本地存储器20在无故障的情况下操作。在本公开中描述的技术可以提供系统性方法,以在装置10处于现场时(例如,在被驱动时)确保在每次系统加电时以及在运行时间期间,gpu18和本地存储器20的逻辑完整性。

为了遵守安全要求,可以将gpu18的某些部分预分配为用于安全关键应用的电路块。为安全关键应用分配电路块减少了需要测试以确保遵守安全要求的电路数量。然而,在每个实例中都不需要为安全关键应用保留gpu18的电路块。

预分配的一个实例可以基于gpu18的制造。例如,在制造期间,可以更严格地测试gpu18的某些电路,并且可以为安全关键应用预分配这些部分。作为另一个实例,可以为安全关键应用预分配gpu18的一些部分,并且可以在使用gpu18之前更严格地测试这些部分。在一些情况下,在cpu16上执行的操作系统(os)或在cpu16上执行的图形驱动器可以为安全关键应用分配gpu18的电路块。其它非安全关键应用可能无法访问这些电路。例如,os或图形驱动器可以确保没有提交给gpu18的指令利用用于安全关键应用的分配的块。预分配用于安全关键应用的电路块的其它方式是可能的,并且所述技术不限于这些具体实例。

确保遵守安全要求通常涉及使gpu18执行自测试。自测试的一个实例是gpu18以具体方式处理已知输入值以生成输出值。然后,cpu16可以将生成的输出值与已知输出值(例如,gpu18基于已知输入值应生成的理想输出值)进行比较。如果cpu16确定生成的输出值与已知输出值相同,则cpu16可以确定gpu18遵守安全要求中的一或多个要求。例如,cpu16可以确定检测到故障总数中足够数量的故障。存在自测试的其它实例,并且本公开中描述的技术不限于任何具体自测试。在下面关于汽车安全完整性等级(asil)更详细地描述安全要求和对应的自测试的实例。

在一些技术中,cpu16将指令传送到gpu18,所述指令使gpu18执行自测试。然而,gpu18可能处于执行操作的过程中。因此,cpu16执行使gpu18在对任何逻辑、核心或本地存储器20启动自测试之前执行上下文保存的应用。上下文保存意指gpu18将状态信息存储在系统存储器30中,所述状态信息指示存储在gpu18的寄存器中的值的信息、gpu18正在执行的软件的一部分等。一旦gpu18完成存储其状态信息,gpu18就可以执行自测试。然后,gpu18执行自测试,并且cpu16确定在由gpu18执行的处理中是否存在任何故障。在完成自测试后,应用基于存储的上下文将gpu18恢复到其自测试前的状态。

然而,此类cpu16控制的自测试技术可能在操作上具有缺点。作为一个实例,在上下文保存和恢复中可能存在显著的软件复杂性。例如,cpu16和gpu18可以执行各种交握以确保gpu18处于可以进行上下文保存和恢复的状态(例如,gpu18可以执行不能被暂停的操作)。如上所述,依靠软件来存储状态信息并恢复gpu18,以及迫使cpu16与gpu18之间交握以寻找gpu18执行自测试的时间导致执行lbist或mbist的方式复杂。

此外,在执行自测试期间,gpu18可能在其它方面不可用。作为实例,cpu16可以向gpu18输出指令,所述指令使gpu18执行自测试。在所述时间期间,cpu16可以不向gpu18输出任何另外命令,从而允许gpu18完成自测试。尽管gpu18可以完成其自测试,但是gpu18的其它任务可能由于完成自测试而被延迟,这可能是不期望的。

本公开描述了用于gpu18独立于来自cpu16的控制(例如,在没有来自cpu16的控制的情况下)执行自测试的示例技术。例如,代替要求cpu16指示gpu18执行自测试,当gpu18处于空闲状态(例如,其中gpu18不处理指令的状态)时,gpu18可以执行自测试。在此实例中,代替使用软件应用来执行上下文保存和恢复,gpu18可以自动地执行保存和恢复。

在一些实例中,当gpu18执行自测试时,gpu18可以从cpu16接收指令以执行一些操作。gpu18可以暂停自测试的执行,执行接收到的指令,并且然后重新开始自测试。例如,可以将自测试分为多个切片,其中每个切片的开始或结束由检查点标识。

每个切片包含自测试的操作的一部分。例如,假设自测试包含gpu18要执行以完成自测试的多个操作。一个切片包含操作的一部分或子集。以此方式,自测试包含多个切片,其中每个切片包含自测试的多个操作中的操作的一部分。

gpu18可以执行用于执行自测试的切片中的每个切片。如果在自测试的特定切片的执行期间gpu18接收到指令,则gpu18可以停止特定切片的执行,并且执行接收到的指令。然后,gpu18可以重新开始特定切片的执行,并且移动到下一个切片。在一些实例中,代替停止特定切片的执行,gpu18可以首先完成特定切片的执行,并且然后执行接收到的指令,并且然后继续执行下一个切片。

以此方式,cpu16可以与gpu18执行的自测试解除关联。例如,cpu16可能不控制gpu18何时执行自我测试,可能不配置gpu18来执行自测试,并且在执行自测试时可能不暂停gpu18执行其它任务。从cpu16的角度来看,gpu18的操作(包含gpu18何时执行自测试)可能没有变化。

执行自测试的示例技术可以解决上述缺点中的一或多个缺点,因为不需要使用复杂的软件来控制上下文保存和恢复。相反,gpu18被配置成在gpu18不执行其它任务的时间期间(例如,在空闲状态期间)执行自测试,并且可以使用不需要响应来自cpu16的软件命令的硬件单元来存储上下文。此外,通过能够选择性地暂停自测试以允许执行其它指令,示例技术促进了指配给gpu18的任务的及时完成。

图2是进一步详细地展示了图1的计算装置的cpu、gpu和存储器的框图。如图2所示,cpu16通信地耦接到gpu18和存储器30,并且gpu18通信地耦接到cpu16和存储器30。在一些实例中,gpu18可以与cpu16集成到主板上。在另外的实例中,可以在安装在包含cpu16的主板的端口中的图形卡上实施gpu18。在进一步的实例中,gpu18可以并入在被配置成与cpu16互操作的外围装置内。在另外的实例中,gpu18与cpu16可以位于同一微芯片上,从而形成片上系统(soc)。

cpu16被配置成执行应用44、图形api46、gpu驱动器48和操作系统(os)50。gpu18包含控制器52、着色器核心54和一或多个固定功能单元56。如所展示的,gpu18还包含上下文保存和恢复电路58。上下文保存和恢复电路58可以被认为是固定功能单元56的一部分,但是为了易于描述而被单独地展示。

软件应用44可以包含使图形内容显示的一或多个指令,或使非图形任务(例如,通用计算任务)在gpu18上执行的一或多个指令中的至少一些指令。作为实例,软件应用44可以使cpu16确定汽车的移动,并且生成示出供gpu18渲染的汽车的路径的图形数据。例如,gpu18可以被配置成在汽车操作时为汽车应用生成图像内容。

软件应用44可以向图形api46发布指令。图形api46可以是运行时间服务,所述运行时间服务将从软件应用44接收的指令转变为可以由gpu驱动器48耗用的格式。在一些实例中,图形api46和gpu驱动器48可以是相同软件服务的一部分。

gpu驱动器48通过图形api46从软件应用44接收指令,并且控制gpu18的操作以服务于所述指令。例如,gpu驱动器48可以制定一或多个命令流,将命令流置于存储器30中,并且指示gpu18执行命令流。gpu驱动器48可以将命令流置于存储器30中,并且通过操作系统50(例如,通过一或多个系统调用)与gpu18通信。

gpu18的控制器52被配置成检索存储在命令流中的命令,并且分派所述命令,以在着色器核心54和一或多个固定功能单元56上执行。控制器52可以分派来自命令流的命令以在一或多个固定功能单元56或着色器核心54和一或多个固定功能单元56的子集上执行。控制器52可以是硬件(gpu18的固定功能电路系统),可以是用于执行软件或固件的gpu18的可编程电路系统,或者两者的组合。

着色器核心54包含可编程电路系统(例如,在其上执行软件的处理核心)。一或多个固定功能单元56包含被配置成以最小的功能灵活性来执行有限操作的固定功能电路系统。着色器核心54和一或多个固定功能单元56一起形成被配置成执行图形处理的图形管线。

着色器核心54可以被配置成执行从cpu16下载到gpu18上的一或多个着色器程序。在一些实例中,着色器程序可以是以高级着色语言(例如,opengl着色语言(openglshadinglanguage,glsl)、高级着色语言(highlevelshadinglanguage,hlsl)、用于图形的c(cforgraphics,cg)着色语言等)编写的程序的编译版本。在一些实例中,着色器核心54可以包含被配置成并行操作的多个处理单元(例如,simd管线)。着色器核心54可以具有存储着色器程序指令的程序存储器和指示程序存储器中正被执行的当前指令或要提取的下一个指令的执行状态寄存器(例如,程序计数器寄存器)。在着色器核心54上执行的着色器程序的实例包含例如顶点着色器、像素着色器(也称为片段着色器)、几何着色器、外壳着色器、域着色器、计算着色器和/或统一着色器。

固定功能单元56可以包含硬接线以执行某些功能的硬件。尽管固定功能硬件可以例如通过一或多个控制信号是可配置的,以执行不同的功能,但是固定功能硬件通常不包含能够接收用户编译的程序的程序存储器。在一些实例中,一或多个固定功能单元56可以包含例如执行光栅操作(例如,深度测试、剪刀测试、α混合等)的处理单元。

cpu16的gpu驱动器48可以被配置成将命令流写入存储器30,并且gpu18的控制器52可以被配置成从存储器30读取命令流的一或多个命令。在一些实例中,可以将命令流中的一个或两个命令流作为环形缓冲器存储在存储器30中。环形缓冲器可以是具有循环寻址方案的缓冲器,其中cpu16和gpu18保持与向环形缓冲器写入数据和从环形缓冲器读取数据相关联的同步状态变量。例如,如果第一命令流是环形缓冲器,则cpu16和gpu18中的每一个可以将指示要写入的下一个地址的写入指针存储在环形缓冲器中,并且将指示要读取的下一个地址的读取指针存储在环形缓冲器中。

当cpu16将新命令写入环形缓冲器(未示出)时,cpu16可以更新cpu16中的写入指针,并且指示gpu18更新gpu18中的写入指针。类似地,当gpu18从环形缓冲器读取新命令时,gpu18可以更新gpu18中的读取指针,并且指示cpu16更新cpu16中的读取指针。其它同步机制是可能的。当读取和/或写入指针到达为环形缓冲器分配的地址范围内的最高地址时,读取和/或写入指针可以回绕到最低地址以实施循环寻址方案。

现在关于图2描述示例gpu驱动器48和示例gpu控制器52的示例操作。gpu驱动器48从软件应用44接收一或多个指令,所述一或多个指令指定将由gpu18执行的图形操作和/或通用计算操作。gpu驱动器48将输出命令流置于存储器30中,gpu控制器52可以访问所述输出命令流。gpu驱动器48通知gpu控制器52对应于软件应用44的命令流可用于处理。例如,gpu驱动器48可以向gpu寄存器(例如,由gpu18轮询的gpu硬件寄存器和/或由gpu18轮询的gpu存储器映射的寄存器)写入指示命令流准备好执行的一或多个值。

在通知命令流准备好执行时,gpu18的控制器52可以确定在gpu18上资源当前是否可用以开始执行命令流。如果资源可用,则控制器52开始分派命令流中的命令。

作为图形处理的一部分,cpu16可以将某些图形处理任务卸载到gpu18。例如,应用44可以生成互连以形成图形对象的基元的多个顶点的属性的属性数据。应用44可以将属性数据存储在存储器30中的顶点缓冲器中。gpu驱动器48可以指示控制器52检索顶点的属性的属性数据以进行处理,从而生成用于显示的图形数据。

如上所述,gpu18的着色器核心54可以被配置成执行一或多个着色器。为了执行着色器,cpu16可以从系统存储器30检索着色器(例如,顶点着色器、片段着色器、计算着色器等)的源代码,并且执行编译器66以生成着色器的目标代码。cpu16可以将着色器的目标代码存储在系统存储器30中,并且着色器核心54可以执行着色器的目标代码以执行着色器。

作为实例,应用44的开发人员可以将指令包含在应用44中,所述指令指示cpu16使gpu18执行由应用44调用的一或多个着色器(例如,开发人员可以将一或多个着色器绑定到应用44)。在应用44的执行期间(例如,在运行时间期间),响应于gpu18执行着色器的指令,cpu16可以执行编译器66以生成着色器的目标代码,并且然后着色器核心54可以执行目标代码。

在一些实例中,编译器66可以被配置成将信息包含到gpu18要处理的指令中。所述指令指示着色器是否用于安全关键应用。gpu18可以基于所述信息在gpu18变得空闲的时间期间执行自测试。将更详细地描述gpu18确定其空闲的示例方式。

作为一个实例,在着色器的编译期间,编译器66可以包含指示汽车安全完整性等级(asil)的信息。asil定义了各种安全要求。存在asila、asilb、asilc和asild,其中asild包含最高安全要求,并且asila包含最低安全要求。asil包含对单点故障度量(spfm)和潜在故障度量(lfm)的要求。spfm是信号点故障的度量。单点故障意指元件(例如,gpu18的电路或存储器块)中未被任何安全机制覆盖并且直接导致违反安全目标的故障。lfm是潜在故障的度量。潜在故障是其存在未被安全机制检测到,也未被驾驶员察觉的多点故障(例如,两个或更多个故障)。

每种asil的spfm定义了需要检测多少单点故障以遵守特定asil。作为一个实例,每种asil的spfm可以定义需要检测x%的单点故障,其中对于每种asil,x是不同的。每种asil的lfm定义了需要检测多少潜在故障以遵守特定asil。作为一个实例,每种asil的lfm可以定义需要检测y%的潜在故障,其中对于每种asil,y是不同的。

作为一个实例,对于单点故障度量,asilb要求诊断覆盖率大于或等于90%,并且对于潜在故障度量,asilb要求诊断覆盖率大于或等于60%。这意指对于可以用于安全关键应用的gpu18的电路或存储器块,检测到至少90%的单点故障并且检测到至少60%的潜在故障以遵守asilb的要求。对于单点故障度量,asilc要求诊断覆盖率大于或等于97%,并且对于潜在故障度量,asilc要求诊断覆盖率大于或等于80%。这意指对于可以用于安全关键应用的gpu18的电路或存储器块,检测到至少97%的单点故障并且检测到至少80%的潜在故障以遵守asilc的要求。对于单点故障度量,asild要求诊断覆盖率大于或等于99%,并且对于潜在故障度量,asild要求诊断覆盖率大于或等于90%。这意指对于可以用于安全关键应用的gpu18的电路或存储器块,检测到至少99%的单点故障并且检测到至少90%的潜在故障。

单点故障的一个实例是gpu18的存储器块没有受到奇偶校验码或错误校正码(ecc)或另一种安全机制的保护。在此情况下,所述存储器块中的故障将不会被检测到,并且可能直接导致违反安全目标。因此,作为一个实例,对于asilb,应当存在用于安全关键存储器的安全机制,并且所述安全机制应当提供90%的诊断覆盖率,这意指所述安全机制应当能够检测存储器中至少90%的故障。

潜在故障(例如,两个或更多个点故障)的一个实例是其中元件(例如,gpu18的电路或存储器块)中存在故障并且所述元件的安全机制中存在故障。在一些但不是全部实例中,元件中的故障和其安全机制中的故障可能是需要检测的唯一类型的潜在故障。假设gpu18的安全关键存储器受到ecc保护。而且,假设ecc逻辑中存在故障,所述故障可能是永久硬件故障,如同ecc逻辑中的固定0故障。在此实例中,当存储器中出现故障(例如,位翻转)时,由于ecc逻辑已经发生故障,所以ecc逻辑可能无法校正或检测到此故障。因此,ecc逻辑本身的测试可以是满足lfm的asil要求的一部分。此测试可以在加电时执行或者可以在运行时间期间定期执行。

如上所述,编译器66可以包含指示asil的信息。指示asil的信息可以是表示不同的可能asil的多个位。信息可以是指示着色器是否用于安全关键应用的功能安全(fs)标志,并且如果fs标志为真(例如,逻辑1),则所述标志之后跟随两位值,每个两位值表示四种asil之一。

例如,应用44可以是安全关键应用,并且因此,在应用44的开发期间,开发人员可以包含指示所述应用44是安全关键的的信息或指令,并且还可以包含指示asil的信息。在编译期间,编译器66可以使用指配给应用44的asil来确定是否将安全关键fs标志设置为真,并且确定指示指定的asil所需的两位值。

然后,cpu16可以指示gpu18执行着色器(例如,着色器的目标代码)。然后,着色器核心54可以开始执行着色器。在接收到指示指定的asil的指令时,控制器52可以等待,直到gpu18空闲为止,并且然后可以执行更详细地描述的对应于指定的asil的自测试。

使用fs标志指示应用是否是安全关键的,然后使用两位值指示着色器核心54必须遵守的asil的以上实例仅仅是一种示例技术。由于asild是最严格的要求,因此gpu18遵守asild意指gpu18遵守asila、b和c。在一些实例中,仅可以使用fs标志,所述fs标志指示应用是否是安全关键的。例如,如果fs标志指示应用是安全关键的,则控制器52可以确定当gpu18空闲时,控制器52应当确定gpu18是否遵守asild。测试gpu18是否遵守asil的其它可能方式是可能的,并且所述技术不应被认为限于上述实例。

以此方式,gpu18(例如,通过控制器52)可以确定gpu18的操作的安全等级。作为一个实例,gpu18接收指示安全等级的指令作为确定gpu18的操作的安全等级的方式。可以存在gpu18可以确定gpu18的操作的安全等级的其它方式,如基于寄存器中设置的标志。作为另一个实例,来自检索着色器或应用44的指令的位置的信息可以指示安全等级。例如,可以为安全关键应用保留存储器30的某些位置。如果gpu18从存储器30的这些位置检索应用44调用的着色器的指令或应用44的指令,则gpu18可以基于gpu18从为安全关键应用保留的存储器30的这些位置检索指令来确定安全等级。

控制器52能够解析并且着色器核心54能够执行的指令可以由指令集架构(isa)定义。isa通常定义处理电路系统可以解析并执行的操作。在一些实例中,isa是特定于处理电路系统的机器语言指令形式。gpu18可以具有其自己的isa,编译器66利用所述isa将标志和asil信息包含在控制器52接收并处理(例如,解析)并且分派给着色器核心54以执行的指令中。

在一或多个实例中,用于gpu18的isa可以是asil感知的,使得编译器66可以包含针对遵守性指示asil的指令。可以在对于非安全关键应用可用的isa的顶部上包含asil感知说明。例如,编译器66可以基于isa生成用于gpu18指示安全等级(例如,asil)的指令。对于安全关键应用和非安全关键应用,isa可以相同。以此方式,isa可以提供混合的关键性支持,使得可以使用包含gpu18的同一片上系统(soc)来执行具有不同asil的应用。

如上所述,响应于gpu18进入空闲模式,控制器52可以基于指定的asil执行自测试。控制器52可以以多种方式确定gpu18进入空闲模式的实例。作为一个实例,控制器52可以监视本地存储器20中的指令缓冲器。如果指令缓冲器中不存在更多指令,则控制器52可以确定gpu18进入空闲模式的实例。作为另一个实例,控制器52可以跟踪gpu18的时钟频率,并且如果时钟频率下降到某一水平以下,则控制器52可以确定gpu18进入空闲模式的实例。空闲模式通常称为gpu18不主动执行操作的模式,并且所述技术适用于控制器52确定gpu18是否处于空闲模式的各种示例方式。

在一些实例中,cpu16可以输出指示gpu18进入空闲模式的指令。例如,应用44可以包含“空闲”命令,或者os50可以基于所需资源的确定来生成“空闲”命令。控制器52可以基于“空闲”指令确定gpu18处于空闲模式。然而,根据本公开中描述的一或多个实例,响应于接收到“空闲”指令,控制器52可以转换“空闲”指令以包含用于执行确保遵守安全等级的自测试的指令(例如,gpu18的电路或存储器块根据asil安全等级进行操作)。

作为实例,假设asm(“空闲”)表示“空闲”指令,其中“asm”代表汇编语言。在一些实例中,控制器52可以针对asila将asm(“空闲”)处理为asm(“idle_spfm_a”)和asm(“idle_lfm_a”),其中idle_spfm_a指代asila的单点故障度量,并且idle_lfm_a指代asila的潜在故障度量。对于asilb,控制器52可以将asm(“空闲”)处理为asm(“idle_spfm_b”)和asm(“idle_lfm_b”),其中idle_spfm_b指代asilb的单点故障度量,并且idle_lfm_b指代asilb的潜在故障度量。对于asilc,控制器52可以将asm(“空闲”)处理为asm(“idle_spfm_c”)和asm(“idle_lfm_c”),其中idle_spfm_c指代asilc的单点故障度量,并且idle_lfm_c指代asilc的潜在故障度量。对于asild,控制器52可以将asm(“空闲”)处理为asm(“idle_spfm_d”)和asm(“idle_lfm_d”),其中idle_spfm_d指代asild的单点故障度量,并且idle_lfm_d指代asild的潜在故障度量。

为了开始自测试,gpu18可以将其当前上下文状态存储到系统存储器30中。通过将其当前上下文状态存储到系统存储器30中,gpu18能够重新开始gpu18在自测试之前执行的操作。gpu18的上下文通常指代gpu18的内部寄存器、深度缓冲器上下文(如在本地存储器20中)、帧缓冲器上下文等中的一或多个。在一些现有技术中,cpu16执行存储gpu18的上下文的应用,或者gpu18可以执行存储上下文的应用。然而,如上所述,此应用驱动的上下文存储可能不是高效的。此外,因为在本公开中描述的一或多个实例中,当gpu18执行自测试时cpu16与gpu18解除关联,所以cpu16甚至可能未感知到gpu18何时将执行自测试。因此,cpu16可能无法及时执行用于存储gpu18的上下文的应用。

如图2中展示的,gpu18包含上下文保存和恢复电路58。上下文保存和恢复电路58可以是硬接线电路系统,所述硬接线电路系统在自测试之前存储gpu18的上下文并且在自测试之后恢复gpu18的上下文。上下文保存和恢复电路58可以将内部寄存器、深度缓冲器、帧缓冲器等的值存储到系统存储器30中,并且从系统存储器30中检索用于恢复gpu18的值。

在一些实例中,上下文保存和恢复电路58可以独立于来自cpu16的用于存储上下文的指令来存储上下文(例如,在没有来自cpu16的用于存储上下文的任何指令的情况下自动地存储上下文)。换句话说,上下文保存和恢复电路58负责保存任何必要的状态,并且独立于cpu16在从自测试退出时将其恢复。可以不需要软件上下文保存和恢复过程。

一旦控制器52确定gpu18进入空闲模式,控制器52就可以执行自测试。自测试可以是并行测试,所述并行测试在执行自测试之后连续检查由于故障引起的gpu18或本地存储器20的电路系统中的错误,所述故障可以是永久、间歇和/或瞬态的。操作故障通常通过其持续时间进行分类。如果不采取校正动作,则永久故障保持无限期存在,并且许多故障是遗留的设计故障或制造故障。间歇故障出现、消失并且反复再现。它们难以预测,但其影响高度相关。当间歇故障存在时,gpu18在大多数情况下良好地工作,但在非典型环境条件下发生故障。瞬态故障快速出现并消失,并且彼此不相关。它们最常见是由随机环境干扰引起的。

自测试的目的是在装置10操作期间检测支持关键或高可用性应用的操作故障。自测试可以检测故障影响或错误,并且控制器52可以采取适当的校正动作。在adas中,此类自测试有助于防止违反gpu18的定义的安全目标。例如,如根据上述asil,自测试可以用于确保检测到足够数量的单点故障或潜在故障。

一种用于执行自测试的示例方式是控制器52执行自测试的切片,其中每个切片是整个自测试的单独、可分离部分。如果自测试包含多个操作,则每个切片包含可以与整个自测试分离的自测试的操作的一部分。例如,可以使一个切片分离,使得从所述切片的执行生成的结果对于随后的切片不是必需的。作为另一实例,可以使一个切片分离,使得切片的执行的结论产生自测试的逻辑断裂点,所述逻辑断裂点有利于暂停自测试。作为另一个实例,可以使一个切片分离,使得切片的操作(例如,所有操作的子集)产生电路或存储器的特定集合是否可操作的有形指示,其中电路的特定集合比确保在无错误的情况下操作需要的所有电路或存储器少。切片的这些实例的任何组合都是可能的,包含确定切片的另外的示例方式。

作为一个实例,自测试的一个切片可以测试gpu18和本地存储器20的某些电路系统。作为一个实例,自测试的每个切片可以被选择为如在300微秒内运行。

而且,具有自测试的切片为开发人员提供了确定应当运行哪些测试的可配置性。在一些实例中,用户可以利用外部接口选择测试。此外,可以利用gpu18的空闲时间优化测试。

尽管关于gpu18描述了以上示例技术,但是示例技术不限于此。此外,通过使用自测试的切片,示例技术可以用于由包含cpu16和显示接口26的装置10的不同组件进行自测试(例如,在空闲时执行自测试)。例如,示例技术可以允许当cpu16或显示接口26空闲时在cpu16和显示接口26上进行并行自测试。

将自测试切片对于处理中断的目的也可能是有益的,使得gpu18的其它操作不受影响。例如,当gpu18执行自测试时,cpu16可以向gpu18发布新指令以执行,所述新指令使gpu18退出空闲模式。然而,自测试可以利用gpu18执行指令所需的电路和存储器块。

一种可能性是控制器52将这些指令排队,并且然后当整个自测试完成时,控制器52分派排队的指令以执行。然而,将指令的执行延迟到整个自测试完成可能是不期望的,因为可能会延迟图形操作的完成,这可以影响驾驶员或乘客的体验。

通过使用自测试的切片,控制器52可以暂停自测试的执行,切换到执行接收到的指令,并且然后返回到执行自测试的切片。在一些实例中,控制器52可以完成自测试的切片的执行,切换到执行接收到的指令,并且然后返回以执行下一个切片。由于切片是整个自测试的一部分,因此完成自测试的切片的执行可以以用户注意到的方式不延迟接收到的指令的执行。利用此中断控制,gpu18可能能够及时地完成在执行自测试的过程中接收到的指令的执行。

例如,如所展示的,系统存储器30可以存储自测试切片68a-68n(统称为自测试切片68)。自测试切片68中的每个自测试切片可以定义gpu18和本地存储器20的要测试的部分、要执行的操作,或者可以定义作为自测试的一部分要测试的型式。

一种用于执行自测试的示例方式是使控制器52具有gpu18的电路块,并且本地存储器20的存储器块使用可以由自测试切片68定义的操作的集合来处理一或多个已知输入60。已知输入60可以是存储在系统存储器30中的预选输入值。由gpu18和本地存储器20执行的操作的结果可以是存储在系统存储器30中的一或多个生成的输出64。控制器52或cpu16可以将生成的输出64与已知输出62进行比较,以确定gpu18的电路或存储器块是否在无错误的情况下操作(例如,确定gpu18的电路或存储器块的完整性)。通过确定gpu18的电路或存储器块是否在无错误的情况下操作,控制器52和/或cpu16可以确定是否检测到足够数量的故障以遵守安全等级(例如,对于asilb,检测到至少90%的单个故障)。已知输出62是输出值,所述输出值应当是基于自测试切片68定义的操作处理已知输入60的结果。

作为实例,安全机制可以确定电路或存储器块是否需要校正。然后,通过用已知输入60测试gpu18的电路和存储器块并且将输出64与已知输出62进行比较,cpu16和/或控制器52可以确认检测到足够数量的故障以遵守具体asil。作为另一个实例,通过用已知输入60测试gpu18的电路和存储器块并且将输出64与已知输出62进行比较,cpu16和/或控制器52可以测试如错误校正的逻辑等安全机制的功能。错误校正的逻辑的此测试可以确保gpu18遵守潜在故障度量。确保遵守asil的其它方式是可能的,并且上述示例技术不应被认为是限制性的。

在一个实例中,控制器52可以开始执行自测试切片68a,并且可以完成自测试切片68a的执行(例如,在300微秒内)。接下来,控制器52可以开始执行自测试切片68b,并且在执行自测试切片68b期间,控制器52可以接收要执行的指令。在一个实例中,控制器52可以暂停自测试切片68b的执行,并且可以执行接收到的指令。然后,在接收到的指令的执行完成时,控制器52可以在控制器52确定gpu18重新进入空闲模式之后重新执行自测试切片68b,并且在一些实例中,从自测试切片68b开始重新执行。在另一个实例中,控制器52可以完成自测试切片68b的执行,并且然后执行接收到的指令。在接收到的指令的执行完成时并且在重新进入空闲模式之后,控制器52可以处于执行自测试切片68c,依此类推。

图3是进一步详细地展示了图2的gpu18的电路块的框图。如所展示的,着色器核心54包含处理元件70a-70d(统称为处理元件70)。着色器核心54可以包含比所展示的更多或更少的处理元件70。

处理元件70可以是形成可编程处理器或着色器核心54的一部分的硬件组件。在一些实例中,处理元件70可以是被配置成执行程序的多个执行线程的单指令多数据(simd)处理系统。在此simd系统中,处理元件70可以一次针对不同的数据项一起处理单个指令。在与程序相关联的所有线程完成执行后,程序可以退出。

控制器52被配置成控制处理元件70以执行针对存储在系统存储器30中的着色器目标代码的指令。对于程序的每个指令,控制器52可以检索所述指令并且处理所述指令。在一些实例中,控制器52可以通过使与指令相关联的操作在处理元件70中的一或多个处理元件上执行来处理所述指令。例如,由控制器54检索到的指令可以是指示处理元件70执行关于由指令指定的数据项的算术操作的算术指令。

作为实例,为了执行自测试,控制器52可以接收已知输入60和由自测试切片68a定义的操作中的一或多个。控制器52可以指示处理元件70中的一或多个处理元件执行操作以生成生成的输出64,控制器52将所述生成的输出存储在系统存储器30中。控制器52或cpu16可以将生成的输出64与已知输出62进行比较以确定在处理元件72中是否存在任何错误。换句话说,控制器52或cpu16可以将生成的输出64与已知输出62进行比较,以确定gpu18的电路或存储器块(其中gpu18的存储器块指代相对于gpu18为本地的本地存储器29的存储器块)是否在无错误的情况下操作(例如,确定电路或存储器块的完整性)。

例如,如接收到的信息中指示的,控制器52可能已经确定了针对应用的asil。如上所述,asil指示需要在gpu18的电路或存储器块中检测多少故障(例如,对于单点故障度量,asilb为至少90%,asilc为97%,并且asild为99%,并且对于潜在故障度量,asilb为至少60%,asilc为80%,并且asild为90%)。响应于gpu18进入空闲模式,控制器52可以执行自测试(例如,自测试切片68)以确定如由安全等级指示的gpu18的电路块或存储器块的完整性。控制器52还可以基于对gpu18的电路块或存储器块的完整性的确定来确认是否检测到足够数量的故障。以此方式,响应于gpu18进入空闲模式,控制器52可以执行自测试以确定gpu18是否根据安全等级进行操作。

作为说明,假设asilb是接收到的指令指示的安全等级。asilb定义应检测至少90%的单点故障。因此,需要在为安全关键应用保留的gpu18的电路和存储器中检测到至少90%的单点故障以遵守asilb。

在此实例中,控制器52可以执行由自测试切片68定义的操作,以测试处理元件72的电路,从而确定电路是否在无错误的情况下操作。如果在处理元件72的电路中检测到至少90%的故障,则控制器52或cpu16可以确定着色器核心54遵守asilb。为测试本地存储器20,控制器52可以将已知输入60加载到本地存储器20中,并且在将生成的输出64在存储在系统存储器30中之前将其存储在本地存储器20中。如果检测到本地存储器20的存储器块的数据存在损坏的情况的90%,则本地存储器20可能遵守asilb。以此方式,控制器52或cpu16可以执行自测试以确定在gpu18的电路或存储器块(例如,处理元件72和本地存储器20内的存储器块)中是否检测到故障以遵守asilb。

在一些实例中,控制器52可以通过启用针对其应执行操作的处理元件70的特定子集和停用针对其不应执行操作的处理元件70的另一个子集中的一个或两个来使操作在处理元件70的特定子集上执行。控制单元12可以通过向处理元件70中的每个处理元件提供相应的启用和/或停用信号来启用和/或停用处理元件70。

处理元件70中的每个处理元件可以被配置成执行操作以辅助处理着色器的指令。在一些实例中,处理元件70中的每个处理元件可以被配置成执行操作的相同集合。例如,处理元件70中的每个处理元件可以实施相同的指令集架构(isa)。在另外的实例中,处理元件70中的每个处理元件可以是算术逻辑单元(alu)。在进一步的实例中,处理元件70中的每个处理元件可以是向量处理器内的处理元件。在另外的实例中,处理元件70可以是simd执行单元内的simd处理元件。

由处理元件70执行的操作可以包含算术操作、逻辑操作、比较操作等。算术操作可以包含如加法操作、减法操作、乘法操作、除法操作等操作。算术操作还可以包含例如整数算术操作和/或浮点算术操作。逻辑操作可以包含如逐位与(and)操作、逐位或(or)操作、逐位异或(xor)操作等操作。比较操作可以包含如大于操作、小于操作、等于零操作、不等于零操作等操作。大于操作和小于操作可以确定第一数据项是否大于或小于第二数据项。等于零操作和不等于零操作可以确定数据项等于零还是不等于零。

以此方式,本公开中描述的示例技术提供了检测gpu18中的永久故障和间歇故障的能力。此检测可以实现单点故障度量(spfm)和潜在点故障度量(lpfm)(如称作潜在故障度量(lfm))的根据iso26262功能安全标准的硬件架构度量。示例技术允许在对gpu18的管芯面积的影响最小的情况下从asila缩放到asild。

图4是展示了根据本公开中描述的一或多种示例技术的示例操作方法的流程图。出于描述的目的,关于一或多个处理电路以及存储在存储器30中的信息描述了实例,所述一或多个处理电路的实例包含cpu16和/或gpu18。

gpu18可以确定gpu18的操作的安全等级(72)。例如,gpu18可以接收指示安全等级的指令。除了接收指令之外或代替接收指令,可能还存在其它方式来确定gpu18的操作的安全等级。

安全等级指示需要在gpu18的电路或存储器块中检测多少故障。例如,为了根据asilb操作,应在安全关键应用的电路和存储器块中检测到至少90%的单点故障,并且应在电路和存储器块中检测到至少60%的潜在故障,以遵守asilb的要求。为了根据asilc操作,应在安全关键应用的电路和存储器块中检测到至少97%的单点故障,并且应在安全关键应用的电路和存储器块中检测到至少80%的潜在故障,以遵守asilc的要求。为了根据asild操作,应在安全关键应用的电路和存储器块中检测到至少99%的单点故障,并且应在安全关键应用的电路和存储器块中检测到至少90%的潜在故障,以遵守asild的要求。

gpu18可以确定gpu18进入空闲模式的实例(74)。例如,gpu18可以基于作为一些实例的队列中需要执行的指令中的一或多个指令、gpu18的时钟频率或来自cpu16的指令来确定gpu18进入空闲模式的实例。

响应于gpu18进入空闲模式,gpu18可以执行自测试以确定gpu18是否根据安全等级进行操作(76)。例如,gpu18可以将已知输入60用作自测试切片68a至68n的输入,以生成输出64。响应于gpu18进入空闲模式,cpu16或gpu18可以将生成的输出64与已知输出62进行比较,以根据安全等级(例如,asild、c、b等)确定是否如由安全等级(例如,99%、90%、80%等)所指示地检测到gpu18的电路或存储器块中的故障。

图5是展示了根据本公开中描述的一或多种示例技术的另一种示例操作方法的流程图。出于描述的目的,关于一或多个处理电路以及存储在存储器30中的信息描述了实例,所述一或多个处理电路的实例包含cpu16和/或gpu18。

gpu18可以接收指示安全等级的指令,其中所述安全等级指示需要在gpu18的电路或存储器块中检测到多少故障(78)。作为一个实例,gpu18可以接收指示安全等级的指令作为gpu18接收以用于执行着色器的指令的一部分。例如,开发人员可以将asil信息包含在应用44中,并且还可以指示用于应用44或应用44的一部分的安全等级(例如,asil),所述安全等级包含对gpu18要执行的着色器的调出。在着色器的源代码的编译期间,编译器66可以包含fs标志并且包含指示asil的两位值,所述fs标志指示应用44或应用44的一部分是安全关键的。如上所述,每种asil指示需要确保gpu18的多少电路或存储器块正常或正确地操作(例如,无错误,如无单点故障或潜在故障,其中错误是永久、间歇或瞬态的)。控制器52可以接收并处理指示安全等级的信息。在一些实例中,指示安全等级的信息可以基于isa,其中isa对于安全关键应用和非安全关键应用是相同的。

控制器52可以确定gpu18进入空闲模式的实例(78)。作为一个实例,控制器52可以确定本地存储器20的指令缓冲器中是否存在指令,以确定gpu18进入空闲模式的实例。作为另一个实例,控制器52可以确定gpu18的时钟速率已经下降到阈值以下以确定gpu18进入空闲模式的实例。可能存在其它方式来确定gpu18进入空闲模式的实例,并且以上是一些实例。

如果gpu18未处于空闲模式(80的否),则gpu18可以处理操作(82)。例如,控制器52可以使处理元件70处理指令并且执行在指令缓冲器中存在的操作。换句话说,当gpu18不处于空闲模式时,gpu18可以基于由cpu16提供的指令进行操作。

如果gpu18进入空闲模式(80的是),则在执行自测试之前,gpu18可以利用硬接线电路系统将gpu18的上下文(也称作状态信息)存储到系统存储器30中(84)。例如,上下文保存和恢复电路58可以被配置成将内部寄存器、深度缓冲器、指令缓冲器、帧缓冲器等的值存储到系统存储器30中。在一些实例中,上下文保存和恢复电路58可以在没有来自另一个处理电路(如cpu16)的用于存储gpu18的上下文的任何指令的情况下存储上下文。以此方式,cpu16可以不执行保存gpu18的上下文的上下文保存应用并且允许gpu18独立地执行自测试。

响应于gpu18进入空闲模式,控制器52可以执行自测试以确定gpu18是否根据asil(例如,安全等级)进行操作(86)。作为一个实例,控制器52可以解析指示安全等级的信息,并且基于所述信息确定需要检测到电路和存储器块的多少故障。为了执行自测试,控制器52可以利用已知输入60作为处理元件70的输入。控制器52可以从自测试切片68a开始,并且使一或多个处理元件70执行由自测试切片68a定义的操作,所述自测试切片可以定义具体操作以及使用一或多个已知输入60中的哪些已知输入。由自测试切片68a定义的操作的结果可以是生成的输出64中的一或多个生成的输出。

控制器52或cpu16可以将生成的输出64中的一或多个生成的输出与已知输出62中的一或多个已知输出进行比较以确定输出是否相同。基于所述比较,控制器52或cpu16可以确定是否检测到如由指定的asil所定义的足够数量的故障。

控制器52可以不在gpu18进入空闲模式的每个实例时执行自测试。相反,控制器52可以基于定义的安全等级或如gpu18处于空闲模式的时间长度、gpu18进入空闲模式的最后几个实例等各种其它因素来选择性地执行自测试。

以此方式,gpu18可以在汽车的操作期间执行运行中自测试。例如,gpu18可以被配置成在汽车操作时为汽车应用生成图像内容。安全等级是asil的一部分,并且gpu18可以在汽车的操作期间执行自测试。

此外,在一或多个示例技术中,gpu18可以被配置成独立于来自另一个处理电路的指示gpu18执行自测试的任何指令来执行自测试(例如,在没有来自另一个处理电路的指示gpu18执行自测试的指令的情况下自动地执行自测试)。例如,从cpu16的角度来看,gpu18可以正常操作,并且cpu16不指示gpu18关于何时执行自测试,或者不提供指示gpu18执行自测试的指令。相反,当确定gpu18进入空闲模式的实例时,gpu18可以独立地执行自测试。

控制器52可以确定在执行自测试的切片的操作时是否接收到使gpu18退出空闲模式的指令(88)(例如,基于指令缓冲器中是否存在具有指示指令缓冲器中存在新指令的对应寄存器值的新指令)。如果没有接收到新指令(88的否),则控制器52可以继续进行自测试并且完成自测试的切片的执行,并且继续进行下一个切片,依此类推(86)。

如果接收到新指令(88的是),则控制器52可以暂停自测试的切片的执行(90)。然后,控制器52可以使着色器核心54执行一或多个指令(92)。在指令的执行完成之后,控制器52可以确定gpu18重新进入空闲模式(94)。在gpu18重新进入空闲模式之后,控制器52可以重新执行gpu18在被新指令中断时正在执行的自测试的切片的操作(96)。

在一或多个实例中,描述的功能可以在硬件、软件、固件或其任何组合中实施。如果在软件中实施,则功能可以作为一或多个指令或代码存储在计算机可读媒体上或通过计算机可读媒体进行传送并且由基于硬件的处理单元执行。计算机可读媒体可以包含对应于如数据存储媒体等有形媒体的计算机可读存储媒体。以此方式,计算机可读媒体通常可以对应于非暂时性有形计算机可读存储媒体。数据存储媒体可以是可以被一或多个计算机或一或多个处理器访问以检索用于实施本公开中描述的技术的指令、代码和/或数据结构的任何可用媒体。计算机程序产品可以包含计算机可读媒体。

通过举例而非限制的方式,这种计算机可读存储媒体可以包括ram、rom、eeprom、cd-rom或其它光盘存储装置、磁盘存储装置或其它磁性存储装置、闪速存储器、或可以用于以指令或数据结构的形式存储期望的程序代码并且可以被计算机访问的任何其它媒体。应当理解的是,计算机可读存储媒体和数据存储媒体不包含载波、信号或其它暂时性媒体,反而涉及非暂时性有形存储媒体。如本文所使用的,磁盘和光盘包含压缩光盘(cd)、激光光盘、光盘、数字通用光盘(dvd)、软盘和蓝光光盘,其中磁盘通常以磁性方式再现数据,而光盘用激光以光学方式再现数据。上述内容的组合也应包括在计算机可读媒体的范围内。

指令可以由一或多个处理器执行,如一或多个数字信号处理器(dsp)、通用微处理器、专用集成电路(asic)、现场可编程逻辑阵列(fpga)或其它等效的集成或离散逻辑电路系统。因此,如本文所使用的术语“处理器”可以指代任何前述结构或适于实施本文所描述的技术的任何其它结构。另外,在一些实例中,本文描述的功能可以在被配置用于编码和解码的专用硬件和/或软件模块中提供,或并入组合的编码解码器中。而且,技术可以完全实施在一或多个电路或逻辑元件中。

本公开的技术可以在各种装置或设备中实施,包含无线手持装置、集成电路(ic)或ic的集合(例如,芯片集合)。本公开中描述了各个组件、模块或单元以强调被配置成执行所公开技术的装置的功能方面,但不一定需要通过不同的硬件单元来实现。相反,如上所述,结合适合的软件和/或固件,各个单元可以组合在编码解码器硬件单元中或由互操作硬件单元集合提供,包含如上所述的一或多个处理器。

已经描述了各个实例。这些以及其它实例在以下权利要求书的范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1