用于片上系统的可编程视觉加速器的内置自测试
背景技术:
::1.向量处理单元(vpu)用于并行执行单指令多数据(simd)操作。vpu的流行用途包括诸如图像处理、计算机视觉、信号处理、深度学习(例如,用于卷积操作)等操作。2.在一些计算机视觉应用中,例如,中间值的动态范围是很好理解的。因此,为了检测异常,可以将计算值与这些动态范围进行比较。然而,用于检测和分析这些最小值和最大值的常规解决方案包括将所有值写入存储器,然后对存储器中的值进行分析,这需要额外的处理周期。此外,为了实现高吞吐量,尽管存在加载使用延迟,高时钟速率处理器可以执行软件管线和/或循环展开。然而,在原始迭代计数没有均匀地除以展开因子的情况下,在完成展开循环后可能会保留一些迭代次数,从而需要额外的余数循环来计算一个或更多个最终迭代的值。此余数循环增加了系统的代码大小和延迟——例如,因为无法展开余数循环以实现最佳性能。在传统的单指令多数据(simd)操作中,每个simd单元可以在其自己的数据通道(lane)中并行且彼此独立地操作。一些架构可能允许相邻邻居之间共享,但这种有限的共享是有限制的,并且使得操作的实现通常需要将相同的操作数复制到每个数据通道进行处理。此外,向量simd处理器可能要求每个存储器读取操作使用标准或一致的单元,例如,等于向量处理宽度,这在存储器组很宽的情况下可能效率低下。例如,从存储器宽度为64字节的元素4到67读取时,可能需要两次存储器读取——例如,一次从0到63,一次从64到67。但是,这会导致读取许多附加值——例如,值0-3和值68-127——即使当前操作不需要这些值。在需要附加数据操作的传统指令集中,在数据被读出并存储在寄存器中之后,附加指令可用于对寄存器中的存储器数据进行操作。例如,这可能需要加载数据,对数据执行置换,然后使用重组后的数据执行操作。因此,数据操作需要额外的周期并增加延迟。当使用现有的vpu执行表查找时,可以复制表,以便可以从复制的表中提取每个单个值,或者可以将附加的读取端口添加到每个存储器组以允许从同一组的同一表中读取多个值。但是,为每个值复制表需要附加的存储器和处理,并且添加附加的读取端口需要芯片上的附加空间。在传统的vpu中,由于vpu被编程为在一组较小的高度优化的代码上执行,因此可能无法实现数据高速缓存,因为程序员可能会管理本地数据存储器中的内容。然而,通过这样做,每次访问都需要从每个存储器组读取值,即使下一次迭代的数据包括与一个或更多个先前读取操作的重叠。3.为了优化处理器(例如vpu)的性能,可以增强指令集架构(isa)以创建定制指令以加速常见的操作——例如表查找、卷积操作等。然而,以这种方式使用isa需要处理器本身也执行这些操作,这意味着处理器在执行这些增强指令期间很忙。4.此外,vpu可以使用直接存储器访问(dma)系统来检索数据以供vpu处理。这样,dma系统可以作为数据移动引擎操作,但也可以执行附加操作,例如图像填充、地址操纵、重叠数据管理、遍历顺序管理、帧大小管理等。然而,随着dma资源(例如描述符、信道(channel)、触发器等)的增加,对dma系统和vpu进行编程的编程复杂性也随之增加。在帧的图块包含空间或时间依赖性的情况下,dma资源的动态更新成为系统的处理负担。当获取未知或数据相关数据时,传统dma系统需要处理控制器(例如,r5或arm处理核心)来干预处理周期,以确定用于指导下一次处理迭代的更新信息。例如,在对象或特征跟踪中,vpu可以计算对象或特征的下一个位置,然后处理控制器将进行干预,更新存储器寻址信息,然后触发dma系统使用更新的信息。然而,处理控制器的干预增加了延迟,并且需要更复杂的编程来使用区域相关的数据移动算法进行操作。5.此外,在诸如自主和半自主机器应用之类的安全关键应用中,对于永久故障检测和隔离存在严格要求。例如,当在机器中执行深度学习、计算机视觉、传感器处理和/或其他应用程序时,必须在分配的时间预算内定期执行永久性故障检测,以便进行准确的测试,同时也允许应用程序正确执行——例如,低延迟。为此,可能需要端到端的覆盖,具有低延迟,同时满足每个特定应用程序的运行时间预算。传统方法使用内置自测试(bist)来识别故障,但这些bist技术要么不包括足够的覆盖范围,要么在系统中引入过多的延迟,和/或不满足某些应用程序的运行时间预算。技术实现要素:6.本公开的实施例涉及对向量处理单元(vpu)、可用于处理来自vpu的卸载处理的解耦加速器以及支持存储器和vpu之间的数据移动的直接存储器访问(dma)系统的改进。为了解决传统或现有解决方案的各种缺点,本公开的vpu可以包括最小值/最大值硬件收集器,该硬件收集器包括在从vpu到存储器的数据路径中,从而可以在存储到存储器之前存储最小值/最大值。以这种方式,最小值/最大值可以在存储器写入操作完成后立即可用,从而减少在将值存储到存储器之后确定最小值/最大值的延迟。此外,vpu可以包括自动预测功能,该功能可以通过为在最终迭代之后的迭代中计算的每个值设置预测位来应用预测标志。结果,每组迭代可以包括相同数量的已执行迭代,但是来自最终迭代组的一个或更多个值可能由于预测标志而不被写出到存储器。为了解决现有解决方案的数据通道之间共享的限制,本公开的simd架构可以在处理器中定义切片,每个切片包括多个通道,并且每个通道可以被配置为在彼此之间进行通信。这样,来自一个通道的操作数可以被其他通道使用,从而消除了将每个操作数复制到每个通道以进行处理的要求。为了解决从单个宽存储器组加载的低效率,vpu可以包括多个较小的存储器组以允许较小的位对齐——例如,16位对齐,其中存储器组是每个16位。这样,读取值4到67的示例可能发生在一次存储器读取中,而不是0-63和64-127的两次存储器读取中。除了这个存储器组组织之外,vpu可以包括转置负载和/或存储功能,以允许存储的值在存储器组中偏移,从而不会发生存储器组冲突,并且每个周期可以读取或写入更多数据。为了解决传统指令集的数据操作缺陷,可以使用带有置换指令的加载来将置换模式连同存储器地址一起发送到本地存储器,以便根据置换或数据操纵模式从存储器中检索数据。这样,数据操作和数据加载可以在同一周期中执行,从而减少等待时间。为了解决每个值的表复制或用于表查找的附加读取端口的缺点,可以执行两点或逐两点查找,使得每个表每个周期可以分别查找两个或四个点。为了实现这一点,表和每存储器组地址总线和相关逻辑和路由的偏移存储模式可以用于允许两个点或四个点的并行查找。在实施例中,每个存储器组可包括相关联的数据高速缓存,其可根据给定操作启用或禁用。例如,对于迭代之间存在大量数据重叠的过滤操作,数据高速缓存可用于存储来自一个或更多个先前查找的值,这样每个存储器组只需要最少的读取,从而为系统保留能量和功率。7.为了解决用于vpu或其他处理器类型的传统isa的缺点,本公开的系统和方法可以使用解耦加速器,该加速器可以由vpu配置并通过共享存储器与vpu通信,但可以独立地执行特定任务vpu以允许vpu继续与加速器并行的其他处理任务。例如,可以使用解耦查找表(dlut)加速器来提高系统在执行查找表时的性能。通过这种方式,dlut加速器可以识别冲突、解决冲突并增加系统的吞吐量,而不是vpu在线执行存储器组冲突检测和解决。8.为了解决传统dma系统的缺点,本公开的系统和方法可以包括硬件定序器,该硬件定序器对包括用于硬件定序器的命令序列的帧数据进行操作。例如,硬件定序器可以在帧级别而不是图块级别运行,并且可以为dma引擎执行定序,以消除对dma引擎进行编程以执行相同操作(例如填充、地址操纵等)的编程复杂性。在一些实施例中,dma系统可以包括dma触发模式,其中dma引擎控制图块移动到向量存储器(vmem),而不是要求vpu触发dma来加载下一个图块。因此,命令序列被反转,dma成为vpu的触发器。为了解决dma系统中依赖于区域的数据移动操作的缺点,dma系统可以使用dma和vpu在紧密耦合的循环中操作,而无需处理控制器干预。例如,vpu可以为正在跟踪的各种特征和/或对象更新vmem中的位置信息,并且dma可以使用这个更新的信息来更新描述符存储器中的描述符,以便提供给vpu用于处理的下一个数据对应于特征或对象的下一个位置。这个过程可以重复直到处理完成,从而消除了处理控制器干预的需求,并减少了系统的延迟。9.此外,为了解决bist的常规方法的缺陷,本系统和方法可以执行多输入签名寄存器(misr)bist——例如,执行片上系统(soc)的可编程视觉加速器(pva)的故障检测。例如,在本公开的各种实施例中,pva可以包括一个或更多个dma系统和一个或更多个vpu,它们使用一个或更多个处理控制器(或控制处理器)(例如r5处理器和arm处理器、cpu和/或类似设备)来控制。因此,pva的每个组件可能需要测试,并且本系统和方法执行misrbist以端到端方式检测永久性故障。以这种方式,可以执行永久故障检测以覆盖控制和数据逻辑的端到端块,向安全处理器直接报告误差以减少延迟,并为特定应用程序定制以满足相关联的运行时间预算。附图说明10.下面参考附图详细描述用于改进向量处理单元(vpu)的本系统和方法,其中:11.图1a是根据本公开的一些实施例的示例最小值/最大值收集系统;12.图1b是示出根据本公开的一些实施例的用于最小值/最大值收集的方法的流程图;13.图2a是根据本公开的一些实施例的包括具有自动预测能力的地址生成单元的处理器的示例系统;14.图2b是示出根据本公开的一些实施例的状态随时间变化的序列的表格;15.图2c是示出根据本公开的一些实施例的用于自动存储预测的方法的流程图;16.图3a是根据本公开的一些实施例的示例单指令多数据(simd)数据路径组织的图示;17.图3b-3d示出了根据本公开的一些实施例的分别用于过滤操作、点积操作和具有有效载荷的排序操作的simd架构的切片之间的操作数共享;18.图3e包括根据本公开的一些实施例的跨simd架构的通道使用共享操作数来计算输出的方法的流程图。19.图4a是根据本公开的一些实施例的用于读取和写入存储器的转置负载的逻辑视图以及对应于逻辑视图的转置负载的存储器组视图;20.图4b是根据本公开的一些实施例的具有用于读取和写入存储器的各种行间距和步幅参数的转置负载的逻辑视图以及对应于逻辑视图的转置负载的存储器组视图;21.图4c是示出了根据本公开的一些实施例的用步幅参数配置转置负载的写入操作的方法的流程图;22.图4d是示出了根据本公开的一些实施例的使用步幅参数执行转置负载的写入操作的方法的流程图;23.图5a-5b示出了根据本公开的一些实施例的用于不同功能的simd架构中的数据和系数布局表;24.图5c示出了根据本公开的一些实施例的用于执行具有置换和零插入的加载的硬件架构;25.图5d示出了根据本公开的一些实施例的图5c的硬件架构的示例使用;26.图5e是示出了根据本公开的一些实施例的利用置换加载的方法的流程图;27.图6a示出了根据本公开的一些实施例的用于单点查找的16路并行表组织;28.图6b示出了根据本公开的一些实施例的用于两点查找的8路并行表组织;29.图6c示出了根据本公开的一些实施例的用于2x2点查找的2路并行字类型表的逻辑视图;30.图6d示出了根据本公开的一些实施例的用于图6c的2x2点查找的2路并行字类型表的存储器视图;31.图6e示出了根据本公开的一些实施例的用于使用具有交织数据操作的水平混合来处理通道对的布局;32.图6f示出了根据本公开的一些实施例的具有交织数据操作的水平混合的中间和最终结果;33.图6g是根据本公开的一些实施例的用于执行多点查找的方法的流程图;34.图7a示出了根据本公开的一些实施例的数据和系数阵列的元素;35.图7b-7c示出了根据本公开的一些实施例的使用用于存储器组的数据高速缓存分别对数据操作数和系数操作数所需的读取操作;36.图7d示出了根据本公开的一些实施例的与加载高速缓存一起使用的存储器组组织;37.图7e示出了根据本公开的一些实施例的用于在存储器组中使用数据高速缓存的硬件架构;38.图7f是根据本公开的一些实施例的使用用于存储器组的数据高速缓存的方法的流程图;39.图8a示出了根据本公开的一些实施例的包括一个或更多个解耦加速器的系统;40.图8b是根据本公开的一些实施例的使用解耦加速器来执行一个或更多个操作的方法的流程图;41.图9a示出了根据本公开的一些实施例的包括解耦的查找表加速器的系统;42.图9b是示出根据本公开的一些实施例的解耦查找表加速器在执行各种操作时的不同组件动作的表格;43.图9c是根据本公开的一些实施例的使用解耦查找表加速器来执行一个或更多个操作的方法的流程图;44.图10a是示出根据本公开的一些实施例的用填充值填充帧的可视化;45.图10b是示出根据本公开的一些实施例的对帧的描述符的地址操纵的可视化;46.图10c是示出根据本公开的一些实施例的帧的图块之间的重叠数据的可视化;47.图10d包括示出根据本公开的一些实施例的各种光栅遍历顺序的可视化;48.图10e是示出根据本公开的一些实施例的三次遍历顺序的可视化;49.图10f包括示出根据本公开的一些实施例的各种垂直挖掘遍历顺序的可视化;50.图10g是示出根据本公开的一些实施例的金字塔配置中的各种图像尺寸的可视化;51.图10h是根据本公开的一些实施例的包括硬件定序器的直接存储器访问(dma)系统;52.图10i是根据本公开的一些实施例的用于存储用于图10h的dma系统的硬件定序器控制的定序命令的帧格式;53.图10j是根据本公开的一些实施例的用于光栅扫描序列的图10i的帧格式的示例;54.图10k是根据本公开的一些实施例的在光栅扫描序列中具有硬件排序的示例图块结构,其使用图10j的示例帧格式进行帧地址处理;55.图10l是根据本公开的一些实施例的在dma系统中使用硬件定序器的方法的流程图;56.图11a示出了根据本公开的一些实施例的使用向量处理单元(vpu)配置直接存储器访问(dma)系统的过程的数据流程图;57.图11b是示出根据本公开的一些实施例的由vpu写入向量存储器(vmem)中并由dma系统读取的vpu配置格式的表格;58.图11c是根据本公开的一些实施例的使用vpu配置dma系统的方法的流程图;59.图12a是根据本公开的一些实施例的用于执行可编程视觉加速器(pva)的循环冗余校验(crc)计算的内置自测试(bist)系统图;60.图12b是根据本公开的一些实施例的用于pva的并行信道crc计算的bist系统图;61.图12c是根据本公开的一些实施例的用于在pva中进行永久性故障检测的执行(bist)方法的流程图;62.图13a是根据本公开的一些实施例的示例自主车辆的图示;63.图13b是根据本公开的一些实施例的图13a的示例自主车辆的相机位置和视野的示例;64.图13c是根据本公开的一些实施例的图13a的示例自主车辆的示例系统架构的框图;65.图13d是根据本公开的一些实施例的用于一个或更多个基于云的服务器和图13a的示例自主车辆之间的通信的系统图;66.图14是适用于实现本公开的一些实施例的示例计算设备的框图;以及67.图15是适用于实施本公开的一些实施例的示例数据中心的框图。具体实施方式68.公开了与片上系统(soc)的各种组件相关的系统和方法——例如向量处理单元(vpu)、直接存储器访问(dma)控制器和硬件加速器(例如,可编程视觉加速器(pva),例如包括一对或更多对vpu和dma的pva)。例如,在本公开的各种实施例中,pva可以包括一个或更多个dma系统和一个或更多个vpu,它们使用一个或更多个处理控制器(或控制处理器)(例如r5处理器和arm处理器、cpu和/或类似设备)来控制。尽管本公开(包括soc的各种组件)可以相对于示例自主车辆1300(在本文中也称为“车辆1300”或“自我车辆1300”进行描述,其示例是关于参见图13a-13d),这不是限制性的。例如,本文描述的系统和方法可以由但不限于非自主车辆、半自主车辆(例如,在一个或更多个高级驾驶员辅助系统(adas)中)、驾驶和非驾驶机器人或机器人使用平台、仓库车辆、越野车辆、耦合到一个或更多个拖车的车辆、飞行器、船、穿梭车、应急响应车辆、摩托车、电动或机动自行车、飞机、工程车辆、水下航行器、无人机和/或其他车辆类型。此外,虽然本公开可针对计算机视觉、机器学习、人工智能、图像处理等进行描述,但这并非旨在限制,并且本文描述的系统和方法可用于增强现实、虚拟现实、混合现实、机器人技术、安全和监视、自主或半自主机器应用程序和/或任何其他技术空间,其中可以使用向量处理单元(vpu)、直接存储器访问(dma)系统、指令集架构(isa)、可编程视觉加速器(pva)、解耦加速器、解耦查找表、硬件定序器、单输入多数据(simd)架构和/或soc的一个或更多个其他组件。此外,尽管本文描述的组件和相关过程可以相对于soc进行描述,但这并不意味着限制,并且这些组件可以实现为独立组件、系统的分立组件和/或集成组件一个soc。在一些实施例中,本公开的系统、组件、特征、功能和/或方法可以集成到图13a-13d的示例自主车辆1300、图14的示例计算设备1400和/或图15的示例数据中心1500中。69.用于异常检测的最小值/最大值硬件收集器70.例如,在计算机视觉应用中,尤其是在安全关键视觉应用中,计算中间结果的动态范围是一项重要任务。例如,为了检测中间计算中的噪声或误差,可以使用已知或预期的动态值范围来识别落在这些范围之外的值。在这样的示例中,在值落在已知或预期动态范围之外的情况下,这些值可以被标记为对应于噪声、误差和/或另一个问题。因此,可能需要收集中间结果的最小值(min)和最大值(max)值以检测数据异常。在实践中,这些异常可能由但不限于图像传感器中的噪声、算法极端情况或存储器或互连中的数据损坏引起。为了解决这些问题,收集最小值/最大值是检测此数据中异常值的有效方法。最小值/最大值也用于某些算法。71.对于特定示例,在自主车辆应用中,运行时异常——例如无穷大或非数字——可能是无效值或产生误差、导致故障或其他不希望的结果。考虑到这一点,可以评估作为自主车辆平台的一部分执行的算法,以确定在处理过程中可能产生的值的范围(中间值或其他值)。一旦知道值的范围,就可以将实际计算的值与已知范围进行比较,并且可以将超出最小或最大阈值的值标记为误差。在标记误差的情况下,可以执行处理中的更改——例如忽略给定迭代的数据、识别和修复问题等。这样,由于潜在的运行时异常被考虑在内,因此不允许运行时异常并且不受自主车辆的依赖。72.作为另一个示例,可以在某些算法中使用最小值/最大值收集来将中间结果归一化到某个数值范围,从而在处理中实现更高的准确度——例如,块浮点。该归一化过程可以包括收集阵列的最小值和/或最大值的动态范围收集步骤,以及将缩放因子应用于阵列的调整步骤。然而,为了收集最小值/最大值,传统过程要求将所有值写入存储器,然后分析这些值的最小值/最大值并调整缩放比例。73.因此,这些用于最小值/最大值评估的传统方法在软件中执行,并且需要额外的处理周期。例如,可以运行算法本身来计算值,然后可以运行软件来确定最小值/最大值并将最小值/最大值与已知范围的值进行比较以识别异常。该软件需要执行附加指令来读取中间结果阵列中的元素,然后执行最小值/最大值操作。结果,用于检测异常的系统的运行时间增加了,因为算法被执行到完成,然后执行附加的过程来计算算法输出的最小值/最大值。这可能会导致下游处理被延迟,直到计算出最小值/最大值并将其与阈值进行比较,或者可能导致下游任务在进行最小值/最大值评估时开始对包含误差的数据执行计算。这不仅会增加运行时间,而且还会增加系统的处理要求和能耗,因为执行这些附加的循环来识别异常数据。74.参考图1a,图1a是根据本公开的一些实施例的用于最小值/最大值收集的示例处理器架构100。应当理解,这里描述的这种和其他布置仅作为示例阐述。除了所示的那些之外或代替所示的那些,可以使用其他布置和元素(例如,机器、接口、功能、命令、功能分组等),并且可以完全省略一些元素。此外,这里描述的许多元素是功能实体,它们可以实现为离散或分布式组件或与其他组件结合,并以任何合适的组合和位置实现。在此描述为由实体执行的各种功能可以由硬件、固件和/或软件来执行。例如,可以通过处理器执行存储在存储器中的指令来执行各种功能。在一些实施例中,架构100可以包括与图13a-13d的示例性自主车辆1300、图14的示例计算设备1400和/或图15的示例数据中心1500类似的组件、特征和/或功能。75.为了解决诸如本文所述的传统最小值/最大值评估过程的缺陷,本公开包括用于使用硬件进行最小值/最大值收集的系统和方法。例如,在计算期间,计算的值可以写出到存储器106(例如本地存储器)并用于同一算法或另一算法内的下游计算。为了减少运行时间和处理,可以使用最小值/最大值收集硬件(例如,最小值/最大值收集器104)在它们被写出到存储器106之前或之时捕获最小值/最大值——例如,而不是等待值被读出存储器106,然后分析最小值/最大值的值。例如,启用位可以用于启用最小值/最大值收集器104的最小值/最大值收集功能,并且一旦启用,随着使用处理器102计算这些值并将其写出到存储器106(例如,在存储之前或与存储到存储器106并发地进行),最小值/最大值收集器104可以更新最小值/最大值。在实施例中,启用位可以指示正在计算的阵列的类型——例如,有符号的或无符号的——使得最小值/最大值收集器104被配置为收集特定类型的阵列的最小值/最大值。例如,启用位或另一类型的控制特征可用于禁用最小值/最大值收集器104和/或配置最小值/最大值收集器104以收集无符号最小值/最大值或收集有符号最小值/最大值。在数据存储数据路径中,可以包括最小值/最大值收集器104的最小值/最大值收集逻辑,当它们使用处理器102计算并存储在寄存器文件中时读取值以更新或维护最小值/最大值。76.例如,在操作期间,当前最小值和/或当前最大值可以保持在最小值/最大值收集器104中,并且当前最小值和/或当前最大值可以更新为新的、较低的最小值和/或新的、更高的最大值,其被写出到存储器106。在新计算的值大于最小值和/或小于最大值的情况下,当前最小值和/或最大值可以由最小值/最大值收集器104保持。通过这种方式,最小值/最大值收集器104可以保持当前最小和/或最大值,因为在整个计算中计算每个值。一旦对于给定迭代的计算完成,最小值/最大值在最小值/最大值收集器104中立即可用,并且软件和/或硬件可用于将这些存储的值与最小和/或最大阈值进行比较,该最小和/或最大阈值与执行的特定算法或计算相关联,以确定是否存在异常。例如,可以包括允许读取收集的最小值/最大值以进行评估的机制。因此,与先前的方法相比,在算法完全执行后不需要另一个循环来计算最小值/最大值,因为最小值/最大值立即可用。此外,在实施例中,最小值/最大值收集器104(例如,包括硬件和/或逻辑)可以知道存储预测,使得如果经由例如每通道存储预测特定数据项被禁止存储到存储器106,则最小值/最大值收集可能会排除该特定数据项。例如,在来自地址生成器的地址包括存储预测标志的情况下,针对存储到存储器106以及更新最小值/最大值收集器104二者,计算值可以被忽略。77.在一些实施例中,最小值/最大值收集器104可以实现为包括地址生成器的系统的特征——例如在提交于2016年4月28日的美国非临时申请no.15/141,703中描述的一个或更多个地址生成器,通过引用将其全部内容并入本文。地址生成器可以包含在任何类型的处理器或其他处理单元中——例如向量处理单元(vpu)、中央处理单元(cpu)、图形处理单元(gpu)、数字信号处理器(dsp)、数据处理单元(dpu)和/或另一种处理单元类型(例如关于图13a-13d、14和/或15描述的那些)。在一些实施例中,一个或更多个vpu可以包括在可编程视觉加速器(pva)中,和/或作为片上系统(soc)的一部分。78.作为非限制性示例,用于特定传感器类型或算法的输入可以被限制为16位的单位。为了确定该特定传感器和/或算法的动态范围,可以评估与处理传感器输入的算法相关联的操作。在这样的示例中,假设第一个操作是两个16位数字相加,那么第一个中间结果是17位数字。然后可以将17位数乘以5位数以产生22位数。如果这是算法的结束,则可以确定输出可能不超过22位。类似地,可以评估最小值。因此,在部署期间,如果最小值/最大值超出此已知范围(例如22位),则可能会标记输出。79.在一些实施例中,存储数据路径(例如,在处理器102和存储器106之间)可以包括饱和和/或舍入逻辑108以使存储到存储器106的值限制在某个上限和下限或阈值之间,或根据某些特定约定进行四舍五入。因此,在传统方法中,对最小值/最大值的评估可能在饱和和/或舍入之后进行。在存在异常的情况下,这些传统方法可能无法检测到异常,因为饱和和/或舍入可能会隐藏异常——例如,低值和/或高值可能在饱和逻辑针对其所配置的上限和下限之间饱和。80.然而,对于特定实现而言,有价值的或期望的可能是不饱和的、未舍入的或绝对的最小值/最大值——例如,除了饱和的最小值/最大值之外或替代地来自饱和的最小值/最大值。因此,本公开的最小值/最大值收集器104可以从原始或不饱和数据(例如,在使用饱和/舍入逻辑108操纵值之前)收集最小值/最大值以用于异常检测。在实施例中,可以执行数据的平均值或数据的平均绝对值的收集。可以计算平均值,例如,通过对元素求和、从地址生成器配置寄存器读回总和以及除以存储出的多个数据项(应用程序可能知道)。以这种方式,绝对值的最小值/最大值、值的总和和/或绝对值的总和可以添加到处理器存储数据路径,并且可以执行结果统计的配置和收集——例如,可以添加到地址生成器配置功能集,或者可以单独管理。在一些实施例中,最小值/最大值收集器104可以在饱和、舍入或使用饱和/舍入逻辑108的其他计算之前和/或之后收集值。81.现在参考图1b,这里描述的方法110的每个框包括可以使用硬件、固件和/或软件的任何组合来执行的计算过程。例如,可以通过处理器执行存储在存储器中的指令来执行各种功能。方法110也可以体现为存储在计算机存储介质上的计算机可用指令。方法110可以由独立应用程序、服务或托管服务(独立或与另一托管服务组合)或另一产品的插件提供,仅举几例。尽管关于图1a的架构100进行了描述,方法110可由任何一个系统或系统的任何组合执行,包括但不限于本文所述的那些。82.图1b是示出根据本公开的一些实施例的用于最小值/最大值收集的方法110的流程图。在框b102,方法110包括计算一个或更多个值。例如,当执行一种或更多种算法时——例如,神经网络、计算机视觉算法、过滤算法等——可以使用处理器102计算一个或更多个值。83.在框b104,方法110包括将一个或更多个值的值与当前存储的最小值和当前存储的最大值进行比较。例如,最小值/最大值收集器104可以将要存储到存储器106的任意数量的值中的每个值(例如,寄存器文件中的值)与当前存储的最小值和当前存储的最大值进行比较(例如,当前由硬件最小值/最大值收集器104存储)。在这样的示例中,随着值被计算并且在值被存储到存储器之前或同时,最小值/最大值收集器可以将值与当前存储的最小值和/或最大值进行比较。在一个或更多个实施例中,最小值/最大值收集器可以被包括在沿着计算一个或更多个值的硬件单元和存储一个或更多个值的存储器单元之间的数据路径。84.在框b106,方法110包括确定该值是大于当前存储的最大值还是小于当前存储的最小值之一。例如,基于框b104的比较,系统(例如,硬件最小值/最大值收集器104)可以确定要存储到存储器的每个值是大于当前存储的最大值还是小于当前存储的最小值。85.在框b108,方法110包括基于值小于当前存储的最小值而将当前存储的最小值更新为该值。例如,在要存储到存储器的计算值小于硬件最小值/最大值收集器当前存储的最小值的情况下,硬件最小值/最大值收集器可以将当前存储的最小值更新为计算值。86.在框b110,方法110包括基于值大于当前存储的最大值而将当前存储的最大值更新为该值。例如,在要存储到存储器的计算值大于硬件最小值/最大值收集器的当前存储的最大值的情况下,硬件最小值/最大值收集器可以将当前存储的最大值更新为计算值。87.以这种方式,可以在存储值期间动态更新最小值/最大值,使得一旦存储了一些(例如,所有)值,通过从最小值/最大值收集器当前存储的值中读取出最小值/最大值,最小值/最大值立即可用。88.自动存储预测89.在高时钟速率处理器中,一种流行的实现方式是将处理器配置成多个管线级。因此,在发出指令以从本地存储器加载寄存器到寄存器可用于另一条指令操作的时间之间可能存在延迟——例如,加载到使用延迟。为了在加载到使用延迟的情况下实现高吞吐量,处理器编译器和应用程序开发可以使用软件管线和/或循环展开。例如,软件管线可用于重叠循环的多次迭代的执行,循环展开可用于通过多次重复循环体的内容来扩展循环体。总之,这些技术可以允许并发地执行循环内容的多次迭代,从而减少调度中的空闲周期(理想情况下没有)。在执行循环展开时,编译器可以将循环交互计数除以展开因子。例如,编译器可能假设原始迭代计数是展开因子的倍数,因此展开的循环可以以等效的功能行为执行。在这样的示例中,如果原始迭代计数为60,并且循环要以6倍展开,则展开的循环可以运行10次迭代。但是,如果原始循环迭代计数为64,通过正常整数除法,64/6也会导致10,因此循环不会执行足够多次(例如,可能不会执行附加的4次迭代),导致展开后不同的代码行为,其可能导致应用程序失败。在某些技术中,添加断言语句以确保迭代计数确实是展开因子的倍数。90.循环主体中的步骤或操作的收集可以具有窄范围的最佳或期望展开因子。例如,展开因子的下限可能是要调度的循环代码的最小副本数,以填补由于各种延迟而导致的空白并实现最佳性能,其上限也可能是以寄存器文件中的有限的能力进行调度的最大副本数——例如,这可能导致过多的寄存器溢出(保存到堆栈和从堆栈中恢复)并导致次优调度。作为另一个示例,由于选择图块宽度和图块高度组合的可行性,允许迭代计数为2的某个幂(例如,2、4、8等),以2的幂展开对于许多应用程序来说是可以接受的。然而,在实施例中,循环体也可以最佳地展开6或7次,而展开4或8次可能效率不高。在任何情况下,循环展开以实现最优调度可能会对迭代次数造成不便的限制。因此,解决这个问题的传统技术可能会导致性能下降和代码大小增加。91.例如,迭代次数的限制是不方便的,因此程序员可以编写两个循环——例如,“多次”循环和“余数”循环——当不应该对迭代次数进行这种限制时。作为示例,以下说明性示例代码段显示:代码1–没有循环展开的向量加法循环;代码2–循环展开为6的相同循环,仅当迭代计数为6的倍数时才有效;以及代码3–双循环解决方案,适用于任何迭代计数,但余数循环未展开,因此效率较低,由于附加的循环和迭代计数计算,也会导致更大的代码大小。92.代码1:[0093][0094]代码2:[0095][0096]代码3:[0097][0098]使用本公开的向量处理单元(vpu),代码1可以实现每次迭代6个周期,代码2可以实现每次迭代1个周期,并且代码3的性能可以取决于迭代计数。对于迭代次数(niter),niter=60(6的倍数,因此余数不运行),代码3每次迭代可能实现1.0个周期,对于niter=64(余数循环运行4次),代码3可能每次迭代平均达到1.3125个周期(例如,(60*1+4*6)/64=84/64=1.3125)。[0099]参考图2a,图2a是根据本公开的一些实施例的包括处理器202(例如vpu)的示例系统200,该处理器202包括具有自动预测能力的地址生成单元。应当理解,这里描述的这种和其他布置仅作为示例阐述。除了所示的那些之外或代替所示的那些,可以使用其他布置和元素(例如,机器、接口、功能、命令、功能分组等),并且可以完全省略一些元素。此外,这里描述的许多元素是功能实体,它们可以实现为离散或分布式组件或与其他组件结合,并以任何合适的组合和位置实现。在此描述为由实体执行的各种功能可以由硬件、固件和/或软件来执行。例如,可以通过处理器执行存储在存储器中的指令来执行各种功能。在一些实施例中,处理器202可以被包括在和/或可以包括与图13a-13d的示例性自主车辆1300、图14的示例计算设备1400和/或图15的示例数据中心1500的组件、特征和/或功能类似的组件、特征和/或功能。[0100]在本公开的实施例中,代码段中的加载和存储可以使用处理器202(例如,vpu)中的地址生成器204。例如,在每个加载和存储中,地址生成器(agen)参数(agen_a、agen_b、agen_c)可以提供给加载/存储函数。自变量可以标识地址生成器寄存器,该地址生成器寄存器包含可以用于特定加载和/或存储操作的地址计算的参数——例如,地址指针、迭代次数、当前循环变量值等。在一些实施例中,vpu可以设计成每个地址生成器寄存器支持6个(或其他值)寻址维度,因此包括6个(或其他值)迭代计数和6个(或其他值)循环变量。[0101]为了解决循环展开对迭代次数的限制,本公开的系统和方法可以包括地址生成器204,该地址生成器204具有用于从地址生成器204自动预测存储的逻辑(例如,预测标志或位208)。例如,预测可用于提供条件执行的指示,例如是否(或不)执行某事。预测位208的值(例如,0表示存储或1表示防止存储,反之亦然)可用于指示指令是否将被执行。执行可能不是指迭代的实际执行,而是指迭代执行的结果值是否存储到存储器中。因此,在实施例中,由于预测标志而未执行的指令可以指代正在执行的指令或迭代,但执行的结果被阻止或排除对存储器206的状态进行改变。可以包括指令级预测和通道级预测。指令级预测可用于指示是否应执行整个指令,而通道级预测可用于指示应执行或不执行哪些数据通道。[0102]在一些实施例中,在循环变量耗尽迭代计数之后,存储指令的任何后续执行被自动预测为禁止进一步写入存储器206。以这种方式,自动存储预测特征可以通过将不是6(或另一个展开因子)的倍数的迭代计数四舍五入到下一个6的倍数并且通过不改变不是6的倍数(或另一个展开因子)的迭代计数来允许清楚地写入代码。尽管使用了6的因子,但这并非旨在进行限制,并且可以使用任何展开因子而不背离本公开的范围。下面的代码4包括带有自动存储预测的向量加法示例。[0103]代码4:[0104][0105]具有64的原始迭代次数(niter)的代码4可以以每次迭代1.03125个周期(例如,11x6/64=1.03125)运行展开循环11次。另一种考虑对是展开因子的倍数的迭代计数的限制的方法是在循环中计算必要的预测标志,并在存储指令中提供预测标志。例如,下面描述的代码5示出了预测标志计算的示例实现。[0106]代码5:[0107][0108]代码5可以在本公开的vpu中编译成每次迭代1.5个循环,因此自动预测可以包括优于在循环中计算的预测的性能优势。在实施例中,vpu可以包括7路超长指令字(vliw)指令方案,并且每个周期可以包括2个标量槽,用于预测计算所需的标量操作。如果循环每次迭代有更多的向量操作,则可能有足够的标量槽,以便预测计算可以适合可用槽并且不会导致性能下降。即使在实时计算预测对性能没有影响的计算循环中,自动预测在代码大小和能耗方面仍可能具有优势。[0109]因此,软件可用于配置多次迭代(例如,n1-n6),并且软件可导致执行基于地址生成器的加载/存储——通常在循环中。地址生成器硬件可以维护循环变量(例如,变量i1-i6),并且可以适当地推进地址指针。当基于地址生成器的加载/存储已执行超过预先配置的迭代次数时,地址指针可能会停留在最后一个有效地址,并且可以关闭自动预测(例如,通过设置预测标志)以阻塞后续存储到存储器中。这样,“自动预测关闭”内部布尔状态可以包括在地址生成器204中,并且循环变量迭代逻辑可以被配置为支持关闭自动预测。例如,并且关于图2b,当初始化地址生成器时,除了循环变量i1-i6之外,参数自动预测关闭(“auto_pred_off”)的值(例如,预测位208)可以被初始化或重置为“0”。在循环变量耗尽编程的迭代计数后,auto_pred_off可能会更新为“1”。作为预测位为“1”的结果,存储指令的任何后续执行随后可以被自动预测,并且可以防止进一步写入存储器。[0110]在图2b的示例中,寄存器n1-n6的地址生成器的迭代次数可以编程为n1=4、n2=2、n3=n4=n5=n6=1。总的编程迭代计数因此可以是4*2*1*1*1*1=8,并且结果可以执行图2b所示的序列。如图所示,初始状态和随后的7次执行(例如,前8次迭代)可以对应于值为0的auto_pred_off位,并且第8次和第9次执行(例如,最后2次迭代)可以对应于值为1的auto_pred_off位,从而阻止将第9次和第10次执行的结果存储到存储器中。[0111]在实践中,vpu可以被配置为处理一些同时工作的向量单元——例如,8、16等——因此vpu可能需要阵列是向量单位的数量的倍数。如果阵列是向量单元的数量的倍数,则此设置效果很好。然而,通常,一个阵列可能不是向量单元的倍数(例如,因为不能保证数据将根据相同大小的阵列计算),因此,阵列被填充以便处理总是在相同大小的批次上执行。例如,剩余的迭代可以用“0”值填充,但这仍然需要软件中的附加循环来处理填充的值。因此,填充可能效率低下,因为添加的数据会导致计算浪费,并且还会使软件复杂化——这是单指令多数据(simd)软件中的常见问题。因此,可以使用自动存储预测来解决这个问题。[0112]对于一个非限制性示例,在使用16个批次的情况下,可以从一个阵列生成尽可能多的16个批次,并且剩余的值可以包括在最终批次中,16个批次内的剩下或剩余空间使用预测标志被预测为关闭。举个具体的例子,如果一个阵列大小为82,则可能会生成5个完整的集合(每组16个),并且在最后一次迭代中,可能会包含剩余的2个元素,而其他14个元素可能会自动预测关闭——从而最大限度地减少用14个值对批次进行填充并对填充数据执行不必要的计算的计算浪费。作为另一个示例,在向量处理粒度包括32的宽度,并且阵列具有100个元素的情况下,可以处理3个完整的32个元素向量,并且可以通过32个通道中的4个处理剩余的4个元素(例如,预测标志可能会打开),而其他28条通道可能会被预测关闭。通过这种方式,程序员可能能够对样本中不是单元数量的倍数的阵列进行向量化处理。例如,对于每个存储,硬件实际上可能会计算要写入存储器的元素数量,并将此信息传达给存储单元。因此,即使可以执行和存储填充或附加元素的数学运算,这种附加的计算和存储也是低效的。因此,可以设置预测标志,使得不需要附加的读取,并且不会发生将计算值从填充值写入存储器(例如,被阻止或排除)。这种自动预测可以发生在指令级别,并且可以添加软件以附加执行车道级别预测。[0113]此外,对于自动预测,可能不需要附加的信息,因为地址生成器可以对多次迭代进行编程——因此地址生成器具有支持自动预测的存储器——并且可以添加软件指令来自动在预测存储和预测关闭存储之间移动。这样,在最后的迭代中,硬件可以确定何时存储完整结果或何时存储少于完整的结果——例如,由于预测被关闭或以其他方式发出信号——这可以零成本执行,而保持性能。在单独使用软件的情况下,该过程将需要附加的周期,从而减慢该过程。[0114]在一些实施例中,可以在每通道级别使用预测,使得这些实现不仅可以处理不是循环展开因子的倍数的迭代计数,而且可以有效地处理不是向量宽度的倍数的任何问题大小。在这样的实施例中,可以使用向量寄存器来驱动每通道预测,这可以提供实时计算信息的优点,并且通过使用向量寄存器可以实现消除从向量寄存器复制到标量预测寄存器的要求的快捷方式,然后使用标量预测寄存器在每个通道上应用预测标志。例如,可以从向量寄存器执行每通道预测,这在循环中计算每通道预测信息时可能是有益的,并且可以对计算进行向量化。[0115]例如,要执行阵列中的某些值替换——例如用999替换任何超过100的值——代码可以编写如下:[0116][0117]虽然此代码在功能上可能是正确的,但可能会导致性能不佳。因此,可以通过合并使用每车道预测对代码进行向量化,例如以下代码:[0118][0119]当预测计算以这种方式被向量化,并且每通道的预测只能通过标量预测寄存器传送时,需要将预测信息从向量寄存器复制到标量预测寄存器,从而增加了执行时间。[0120]然而,与执行位打包和将预测掩码从向量通道0移动到标量寄存器相比,可以在此示例中使用直接从本文描述的向量寄存器特征驱动的每通道预测,如以下代码所示:[0121][0122][0123]现在参考图2c,本文描述的方法220的每个框包括可以使用硬件、固件和/或软件的任何组合来执行的计算过程。例如,可以通过处理器执行存储在存储器中的指令来执行各种功能。方法220也可以体现为存储在计算机存储介质上的计算机可用指令。方法220可以由独立应用程序、服务或托管服务(独立或与另一个托管服务组合)或另一个产品的插件提供,仅举几例。尽管关于图2a的系统200进行了描述,方法220可由任何一个系统或系统的任何组合执行,包括但不限于本文所述的那些。[0124]图2c是示出根据本公开的一些实施例的用于自动存储预测的方法220的流程图。在框b202,方法220包括确定迭代的总数。例如,地址生成器204可以确定要针对给定指令执行的迭代总数。[0125]在框b204,方法220包括将迭代的总数分成多组迭代。例如,地址生成器204可以通过展开因子将迭代分开以生成包括循环的多个迭代的循环体。[0126]在框b206,方法220包括确定多组迭代中的一组迭代包括小于第二迭代次数的第一迭代次数,该第二迭代次数对应于多组迭代中的其他组迭代。例如,地址生成器204可以确定在通过展开因子分离迭代之后,一组迭代包括比其他组更少的迭代。例如,在展开因子为6且迭代次数为62的情况下,可能有11组迭代——10组包括6次迭代,1组包括2次迭代。这样,地址生成器204可以确定应该执行包括剩余2次迭代的该组迭代中的2次迭代并且应该预测关闭其他四个迭代。[0127]在框b208,方法220包括在执行该组迭代期间,生成与该组迭代的至少一个迭代相对应的预测标志。例如,在确定该组迭代不包括与其他组迭代相同数量的迭代的完整组时,地址生成器204可以启用预测标志(改变预测关闭位208的值)以指示应该将多余迭代的结果存储或写入存储器。[0128]在框b210,方法220包括至少部分地基于预测标志,防止将与该组迭代的至少一个迭代相对应的值写入存储器。例如,基于设置的预测标志,可以防止或计算计算的值被写入存储器。[0129]用于向量处理器的增强型simd数据路径组织[0130]在传统的单指令多数据(simd)架构中,每个simd处理单元在其自己的数据通道上并行且彼此独立地操作。一些机器允许每个simd处理单元与近邻的直接通信(例如,左邻和右邻作为处理单元的线性阵列,或二维(2d)阵列或处理中的北、南、东和西邻)。但是,仅在相邻数据路径之间进行通信是有限制的,并且使得需要多个输入操作数的操作的实现成本很高。例如,卷积是图像处理、计算机视觉、机器学习等领域的常见操作。在卷积期间,可以将各种过滤器应用于相邻像素,例如,对于非限制性示例,涉及三个数据操作数和三个系数操作数的三抽头一维(1d)过滤。如果这些操作数不能在simd架构的数据通道之间共享,则需要将六个操作数带入每个数据通道以产生该特定通道的结果。考虑到这一点,一些常见的方法在一个寄存器文件上实现了多个读取端口,但这需要simd架构的附加表面积以及附加的运行功率。[0131]为了解决传统simd架构的缺陷,本公开的simd架构可以通过定义处理器中的切片(例如向量处理单元(vpu))来允许通道之间的通信,该处理器包括多个通道作为群组。对于非限制性示例,在处理器中,simd通道组织可以包括分层组织,该分层组织包括可以划分为例如8个48位(扩展字)通道、16个24位(扩展半字)通道、或32个12位通道(扩展字节)的384位数据路径。在这样的示例中,每个字节可以扩展4位。单独通道之上的第一层通信可以称为simd切片,并且可以是(例如但不限于)96位宽度,由两个扩展字通道(例如,两个48位通道)、四个扩展半字通道(例如,4个24位通道)或8个扩展字节通道(例如,8个12位通道)组成。在非限制性实施例中,在所有四个(或其他数量的)simd切片和所有通道中,整个处理器数据路径可以包括四个simd切片,并且第二层通信可以是全局的。以这种方式,可以实现每个切片的通道之间的操作数共享,这在诸如过滤、点积、有效负载排序等指令中可能是有用的。simd架构可以包括在vpu或其他处理器类型中,例如图13a-13d的示例自主车辆1300的处理器、图14的示例计算设备1400和/或图15的示例数据中心1500。[0132]由于simd架构的物理路由,simd的指令集架构(isa)可以允许在切片内的某个数量(例如,8个)通道之间共享。例如,如图所示。如图3a所示,在每个片内,32位字数据类型、16位半字数据类型和8位字节数据类型之间的通信是可能的。结果,在示例中,例如图3b所示的过滤操作,在有四个输入操作数和四个系数的情况下,可以在半字中执行8位乘8位乘法和累加,其中系数可以与来自不同通道的数据共享。在传统的simd架构中,每个通道将需要加载所有8个操作数以执行在本公开的simd架构中仅使用三个输入操作数即可执行的相同计算。因此,由于每个读取端口都与增加的表面积和能耗相关联,因此只需要三个读取端口就可以节省执行此类指令的空间和功率。在操作中,由于切片内通道之间的共享,四个累加器(例如0、1、2和3)可能会填充以下计算的结果。[0133]acc[0]+=d[0]*c[0]+d[1]*c[1]+d[2]*c[2]+d[3]*c[3][0134]acc[1]+=d[1]*c[0]+d[2]*c[1]+d[3]*c[2]+d[4]*c[3][0135]acc[2]+=d[2]*c[0]+d[3]*c[1]+d[4]*c[2]+d[5]*c[3][0136]acc[3]+=d[3]*c[0]+d[4]*c[1]+d[5]*c[2]+d[6]*c[3][0137]如图所示,例如,acc[0]可以访问src1a的其他通道,包括d[1]、d[2]和d[3],并且还可以访问src2的其他通道,包括c[1]、c[2]和c[3]。类似地,其他累加器(acc)可以访问src1和src2的各个通道。在通道之间共享有限或最少的传统向量处理器中,这种类型的操作是不可能的。例如,这些计算可以包括滑动窗口方法,其中每个累加器包括相对于前一个累加器移动滑动窗口的结果。例如,第一个累加器对d[0]、d[1]、d[2]和d[3]进行操作,第二个累加器对d[1]、d[2]、d[3]和d[4],以此类推。每个累加器使用相同的系数c[0]、c[1]、c[2]和c[3]。这是可能的,因为simd架构切片的通道之间的共享物理路由。[0138]作为本公开的simd架构的另一个示例实现方式,并且关于图如图3c所示,向量乘法运算中的点积可以使用通道共享来执行。在这样的示例中,两个索引(例如d[0][0])指示数据属于哪个通道以及该数据属于哪个输出集。对于点积计算,每个通道仅使用来自其自己通道的数据操作数,但系数在通道之间共享。因此,来自每个通道的输出可能会在点积操作期间的某个时间使用所有四个系数。在操作中,由于切片内通道之间的共享,四个累加器(例如0、1、2和3)可能会填充以下计算的结果。[0139]acc[0]+=d[0][0]*c[0]+d[1][0]*c[1]+d[2][0]*c[2]+d[3][0]*c[3]acc[1]+=d[0][1]*c[0]+d[1][1]*c[1]+d[2][1]*c[2]+d[3][1]*c[3]acc[2]+=d[0][2]*c[0]+d[1][2]*c[1]+d[2][2]*c[2]+d[3][2]*c[3]acc[3]+=d[0][3]*c[0]+d[1][3]*c[1]+d[2][3]*c[2]+d[3][3]*c[3][0140]作为可以受益于本公开的simd架构的另一示例操作,可以执行图3d的两点排序操作。对于两点排序,使用两个值对有效负载进行排序。这种两点排序利用了切片内通道对之间的通信,并且在例如各种计算机视觉应用中很有用。例如,通道0中有条目0的键,通道1中是对应的有效载荷,以此类推,有效载荷可以根据键的比较进行排序——例如,如下代码中每个键/有效载荷对:[0141][0142]现在参考图3e,本文描述的方法300的每个框包括可以使用硬件、固件和/或软件的任何组合来执行的计算过程。例如,可以通过处理器执行存储在存储器中的指令来执行各种功能。方法300也可以体现为存储在计算机存储介质上的计算机可用指令。方法300可以由独立应用程序、服务或托管服务(独立或与另一个托管服务组合)或另一个产品的插件来提供,仅举几例。尽管关于本公开的simd架构进行了描述,但是方法300可以由任何一个系统或系统的任何组合执行,包括但不限于本文描述的那些。[0143]图3e包括根据本公开的一些实施例的跨simd架构的通道使用共享操作数来计算输出的方法300的流程图。在框b302,方法300包括将处理器的位宽度划分为多个数据切片,每个数据切片包括小于第一位宽度的第二位宽度,多个数据切片的每个数据切片包括多个通道,每个通道包括小于第二位宽度的第三位宽度。例如,向量处理器可以被划分为一些数量(例如,4个)切片,并且每个切片可以包括一些数量的通道。[0144]在框b304,方法300包括将第一向量加载到第一向量寄存器中,使得多个通道中的第一通道包括第一向量的第一操作数,并且多个通道中的第二通道包括第一向量的第二操作数。例如,关于图3b,可以将第一向量的第一数据操作数d[0]加载到第一通道中,并且可以将对应于第一向量的第二数据操作数d[1]加载到第二通道中。[0145]在框b306,方法300包括将第二向量加载到第二向量寄存器中,使得多个通道中的第一通道包括第二向量的第三操作数,并且多个通道中的第二通道包括第二向量的第四操作数。例如,关于图3b,可以将第三个的第一系数操作数c[0]加载到第一通道中,并且可以将对应于第三向量的第二系数操作数c[1]加载到第二通道中。[0146]在框b308,方法300包括至少部分地基于第一操作数、第二操作数、第三操作数和第四操作数,来使用指令计算输出。例如,关于图3b,第一累加器(acc[0])可以接收计算acc[0]+=d[0]*c[0]+d[1]*c[1]+d[2]*c[2]+d[3]*c[3]的结果,包括d[0]、d[1]、c[0]、c[1]等值。由于每个切片的通道之间的内部共享和路由,可能会发生这种计算。[0147]在框b310,方法300包括将输出存储到寄存器。例如,关于图3b,计算的输出可以存储到累加器寄存器acc[0],然后可以存储到存储器。[0148]具有步幅参数的转置负载和存储操作[0149]在传统的向量单指令多数据(simd)处理器中,可以调整本地数据存储器的大小以匹配向量处理宽度。例如,对于能够处理32个8位通道、16个16位通道或8个32位通道的256位向量simd处理器,例如,本地数据存储器可以包括256位宽度存储器或512位宽度存储器(例如,两倍于处理位宽度)。在这样的示例中,本地数据存储器被组织为具有全宽存储器字的单个存储器组。但是,具有单个全宽存储器字组的宽向量simd处理器可能效率低下——尤其是对于未对齐的存储器访问。例如,要在字节地址4到67处加载16元素32位阵列的阵列,处理器可能需要两次存储器读取——例如,一次读取地址0到63(包括地址0到3,其当前操作不需要的数据)和第二次读取地址64到127(包括地址68到127,其包括当前操作不需要的数据)。因此,在没有本公开的分组存储器架构的情况下,访问模式可以通过多个加载或存储来实现,这可能导致计算内核减慢、性能降低和功耗增加。[0150]考虑到这一点,单个宽存储器组可以改为组织为多个存储器组——例如16位存储器组(例如,32个16位存储器组,每个时钟周期提供512位存储器带宽)。通过这种方式,读取和/或写入操作可以在任何16位对齐范围内进行-从而减少多余的读取/写入操作的数量,例如上述示例中描述的那些。使用这样的存储器组织,读取地址4到67可能只需要一次存储器读取。除了包括较小的单独存储器组的存储器组组织之外,还可以实现转置负载和/或存储功能。例如,通道偏移参数k可用于定义应用于存储器中每个后续通道的行地址偏移。通道大小可能对应于数据元素大小——例如,8位、16位、32位等。当2d阵列以w*k+1个元素的行间距存储在存储器中时,交错访问模式可能会转换为垂直模式,其中k是偏移参数,w是64/通道大小(或数据元素的大小)。例如,对于32位数据元素,行间距可以是16*k+1。在一些实施例中,simd处理器可以作为组件包括在内,和/或可以包括与图13a-13d的示例自主车辆1300、图14的示例计算设备1400和/或图15的示例数据中心1500类似的组件、特征和/或功能。[0151]作为示例,并且关于图如图4a所示,表400可以包括转置负载的逻辑视图和具有17个超过256位的行间距的转置负载的存储器组视图的图示。存储器条在存储器组视图中以18个单独的16位条结束,这仅用于说明目的。例如,存储器组可能是总共256位、总共512位或其他一些总位数——例如,每个存储器组可能是16位宽度。在使用转置负载的存储器组视图中,行距为17,可以执行单个加载操作来检索阵列的每个突出显示的值。[0152]尽管使用该技术的转置负载对许多操作都是有益的,但某些算法——例如一些计算机视觉算法——可能需要访问即使使用关于图4a所描述的转置负载技术也无法通过单次读取和/或写入来完成的数据模式。例如,可能需要加载8高乘2元素宽的子矩阵、4高乘4元素宽的矩阵或其他矩阵或子矩阵大小,而不是加载16高的垂直向量。例如,在点积运算中,累加可能针对两行16个元素,每次16位,因此当存储输出时,可能需要具有适当行间距的t16转置存储选项,以便两行可以是作为一个存储器写入事务写出。为了解决这个问题,可以将步幅参数与转置的加载和/或存储一起使用。在一些实施例中,步幅参数可以包括2的功率步幅(尽管这不是限制性的),例如2、4、8、32等的步幅,其可以被称为t2、t4、t8、t32等。具有步幅参数的不同转置负载的示例在图4b的表410中示出,其包括转置负载的逻辑视图和存储器组视图。图4a的示例,镜像于图4b中,包括为1的步幅参数,但是,其他步幅参数是2的倍数。例如,t2的行间距为18,允许将2个元素宽乘8高的矩阵存储为转置负载,例如可以使用单个加载事务来检索每个值。类似地,对于t4,行间距为20,步幅为4,可以存储4个元素宽乘4高的矩阵,从而可以使用单个加载事务来检索每个值,等等。虽然被描述为加载事务,但这种类型的格式也可以用于存储事务,根据转置加步幅参数将数据存储在存储器中。[0153]在这样的示例中,可以根据步幅调整行间距约束。对于字型t-转置存取,行间距可以是16k+1,对于字型t2-转置存取(例如,对于2的步幅),行间距可以是16k+2,对于字型t4-转置存取(例如,对于4的步幅),行距可能是16k+4,依此类推。因此,行间距可以等于16k+步幅值,或16k+1+(t-1),其中t是步幅参数。[0154]在操作中,vpu的vmem的架构和vpu的指令集架构(isa)可以被配置为执行转置的加载和/或存储操作,带有或没有步幅参数,以允许读取或写入在单个读取操作中的逻辑视图中按列组织的数据。例如,isa可以被配置为接收指示用于从其读取数据或向其写入数据(例如,用于从寄存器文件读取或写入数据)的起始地址、写入类型的指示(例如,转置写入操作,带或不带步幅参数),行间距值(例如,16*k+1中的k值),和/或步幅参数值。需要注意的是,16的值对应于特定实现的数据元素的数量,但是16(或w)的值在不同的实施例中可能不同。因此,当根据转置写入操作将数据写入存储器时,isa可以接收要写入vmem中的起始地址、行间距和/或步幅参数。结果,当写入值时,而不是将它们在单个数据列中写出到单个存储器组中,可以根据例如图4a和4b中所示的转置或偏移来写出数据。在使用步幅参数的情况下,可以将步幅的第一个值写入存储器,然后是对应于步幅的下一个元素数量,然后可以应用行间距以将下一组值写入存储器组,使得每个值都可以在一个周期内写入存储器。类似地,在读操作期间,根据转置存储组织或写出数据,isa可以接收起始地址、加载类型(例如,转置负载,带或不带步幅参数)、行间距值(例如,k的值)和步长参数值(例如,数据类型指示符,例如字节、半字等)。然后isa可以根据转置的加载指令(和/或步幅参数)访问来自各个存储器组的数据,以便在单个读取周期中检索一列(或多列)数据。以这种方式,通过从每个存储器组中检索一个元素,可以从单个读取操作返回单个向量。[0155]现在参考图4c-4d,本文描述的方法420和430的每个框包括可以使用硬件、固件和/或软件的任何组合来执行的计算过程。例如,可以通过处理器执行存储在存储器中的指令来执行各种功能。方法420和430也可以体现为存储在计算机存储介质上的计算机可用指令。方法420和430可以由独立应用程序、服务或托管服务(独立或与另一托管服务组合)或另一产品的插件提供,仅举几例。尽管关于本公开的simd架构进行了描述,但是方法420和430可以由任何一个系统或系统的任何组合执行,包括但不限于本文描述的那些。[0156]图4c包括根据本公开的一些实施例的使用步幅参数配置转置存储操作的方法420的流程图。在框b402,方法420包括确定矩阵的维度。例如,可以确定矩阵的宽度。[0157]在框b404,方法420包括基于维度确定用于存储矩阵的步幅参数和行间距。例如,可以使用16k+步幅值来确定行间距,并且可以基于矩阵的宽度来确定步幅值。[0158]在框b406,方法420包括使用步幅参数和行间距,使得矩阵的值被存储到存储器中。例如,一旦确定了行间距和步幅,矩阵的值可以存储在存储器中,使得行间距和步幅参数值在从存储器读取矩阵值时不会导致存储器组冲突。[0159]现在参考图4d,图4d包括根据本公开的一些实施例的使用步幅参数配置转置存储操作的方法430的流程图。在框b408,方法430包括接收表示多个存储器组中的存储器组中的行间距和起始存储器地址的数据,起始存储器地址对应于多个元素中的元素,该多个元素对应于阵列中的列。[0160]在框b410,方法430包括在单个读取操作中,从多个存储器组中读取多个元素,至少部分基于行间距,从多个存储器组中的相应存储器组中读取多个元素中的每个元素。[0161]在单个指令中进行置换和零插入的加载[0162]在传统的处理器指令集中,加载指令可以通过一些索引计算形成存储器地址,从本地存储器读取所请求的存储器数据,并将存储器数据存放到寄存器中。如果应用程序需要附加的数据操纵,则可以使用附加的指令对寄存器中的存储器数据进行操作。在某些情况下,数据操纵可能包括简单的数据重组。在传统处理器中,即使是寄存器文件中的这种简单数据操纵也需要附加的指令,因此需要附加的延迟。例如,传统系统可以加载数据,对加载的数据执行置换,然后使用重组后的数据来执行一个或更多个操作。如果使用这种数据重组能力增强加载指令,则可以节省一些处理时间,并且可以以更高的性能和更低的功耗执行计算内核。[0163]为了解决这些缺点,本公开的系统和方法添加了带有置换指令的加载,该指令将置换模式连同存储器地址一起发送到本地存储器。结果,用于处理未对齐负载的现有数据路由和多路复用可用于执行置换而无需大量附加逻辑。除了节省否则会花费的指令(例如,使用双向量输入和双向量输出进行置换,需要执行5条指令)之外,置换操作的总体延迟可能会降低。例如,没有加载到使用延迟和计算延迟(例如,用于执行置换),唯一的延迟是加载到使用延迟。在一些实施例中,本文描述的具有置换和/或零插入的负载可以包括在图13a-13d的示例性自主车辆1300、图14的示例计算设备1400和/或图15的示例数据中心1500的组件、特征和/或功能中,或者可以类似于这些组件、特征和/或功能。[0164]因此,具有置换特征的加载可用于将来自存储器的加载数据操纵成用于操作的期望格式。作为示例,各种过滤和点积指令所需的系数数据可以包括特定的重复模式,该模式可以通过加载和置换来实现。关于过滤操作,例如关于图3c所描述的,0、1、2和3的系数可以在向量宽度(例如,16位)上重复——例如,如图5a所示。在这样的示例中,对第一个寄存器的写出可以从d[0]-d[15]开始,然后可以使用4的滑动窗口以d[0]-d[19]开始下一个寄存器,等等。在这个过滤示例中,系数c[0]-c[3]可能在向量的宽度上重复,因此使用置换加载可能有助于直接从加载中按此顺序写入系数,而不是加载所有数据,然后执行置换,然后将向量写入寄存器。因此,在该示例中,系数数据的置换模式可以包括{0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3)。在同一示例中,数据操作数的置换模式可能是{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19}。这样,数据操作数和系数操作数可以根据置换顺序被读出,而不是在被写入寄存器用于计算之前被顺序读出然后置换。作为另一个示例,例如如图5b所示,过滤指令可以包括双向量系数操作数,因此可以包括诸如{0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7}的置换模式。置换模式可以是静态的或固定的,或者可以动态地通过算法计算,这允许置换模式是灵活和动态的。在模式是重复模式的情况下,在实施例中,重复元素的第一个实例可以被加载,然后被复制,然后被写出到simd单元的simd通道。[0165]在一些情况下,可能优选将存储器数据的某些部分屏蔽为零值。例如,为了在软件开发中更容易可视化或消耗更少的能量(例如,与保留随机数据值相比),可以为未使用的条目插入零。在其他示例中,可以插入零来描绘数据结构中的数据块,例如在每个数据块的长度不固定的情况下。在这样的示例中,零值可以指示两个数据块之间的间隙。当处理一个恒定大小的图像块时,例如,在从每个图像块中提取一些可变长度信息(例如,特征点的位置)时,可以使用零来填充与提取的信息不对应的剩余数据。[0166]在实践中,置换索引通常可以在读数中包括32或16个元素——例如,分别在0-31或0-15的范围内。为了在读出中包括零值,可以使用置换操作将负索引值包括在加载中,以便在目标寄存器的相应通道中写入零。因此,在写入操作期间,例如,可以将负值写入simd架构的对应通道中而不是零。[0167]作为示例,30宽乘30高的图像补丁可以通过一次使用16个连续条目的向量运算来处理。由于30的宽度不能被16整除,因此每一行可以通过两个向量运算处理,第一次处理16个条目的全向量宽度,第二次处理14个条目的部分向量宽度。在这样的示例中,如果使用零填充第二个14条目向量的加载以填充最后两个向量通道,而不是当前可能存在于存储器中的随机数据值,则可能是有益的。[0168]在一个或更多个实施例中,可以将填充的零插入到simd架构的期望通道位置中,例如,以节省将零写入这些通道位置所需的处理时间。在存在16个通道的情况下,正常的排列模式可能由16个通道索引组成——例如,0-15。在这样的示例中,如果存在{100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115}的值,并且索引作为排列模式为{0,1,2,3,4,5,6,7,8,9,10,11,12,13,-1,-1},最终加载到目标寄存器中的值应为{100,101,102,103,104,105,106,107,108,109,110,111,112,113,0,0}。因此,为-1的两个值在目标寄存器中基于包括负值的置换模式自动转换为0。在先前的方法中,-1、-1将分别包括14、15,并且存储器中14、15处的值将被写入寄存器。然而,这些可能包括与包括0值相比可能需要附加处理时间的随机值。[0169]为了实现具有置换特征的加载,可以使用存储器逻辑中的路由和多路复用——例如,用于执行非对齐存储器加载的类似路由和逻辑。例如,为了支持从任何16位地址(或从任何32位地址加载16x32位通道)加载全存储器宽度(例如,32x16位),存储器逻辑可以包括多路复用逻辑以选择存储器数据中的32个通道中的任何一个路由到任何目标寄存器通道。例如,对于非对齐的存储器负载,可以根据以下逻辑驱动:[0170]output_lane[0]=select(start_lane,memory_lane[0..31]);[0171]output_lane[1]=select((start_lane+1)%32,memory_lane[0..31]);[0172]output_lane[2]=select((start_lane+2)%32,memory_lane[0..31]);[0173]…[0174]output_lane[31]=select((start_lane+31)%32,memory_lane[0..31]).[0175]在实施例中,可以使用模算子(%)来环绕收束(wrapped)车道的总数。因此,例如,在起始通道是通道3的情况下,通道3、4、5、...、31、0、1、2将用作至寄存器通道的输出。[0176]对于具有置换特征的加载,这个相同的逻辑可以基本上被重用,但是可以包括修改的逻辑以执行置换操作。修改后的逻辑示例如下:[0177]output_lane[0]=select((start_lane+permute[0])%32,memory_lane[0..31]);[0178]output_lane[1]=select((start_lane+permute[1])%32,memory_lane[0..31]);[0179]output_lane[2]=select((start_lane+permute[2])%32,memory_lane[0..31]);[0180]…[0181]output_lane[31]=select((start_lane+permute[31])%32,memory_lane[0..31])[0182]作为示例,并且关于图如图5c所示,具有交叉开关510(例如交叉开关)的硬件结构500(其可以作为vpu、simd单元、soc或其他设备类型的一部分被包括在内)可以用于从存储器512的任何位置获取数据。并通过相应的多路复用器(mux)514a-514n将数据驱动到simd中的任何通道。以这种方式,16个输入(或其他宽度存储器或寄存器)中的任何一个都可能能够被写入16个输出位置或通道中的任何一个。这可能有助于非对齐访问,使得加载操作可以从任何地址开始,然后向下对齐。例如,如果从位置2-18读取存储器中的数据,则可以从2-18读取数据但与通道0-16对齐(例如,2进入通道0,3进入通道1,等等)。这在传统系统中是不可能的,在传统系统中,向量负载需要从16的倍数位置开始,例如0、16、32等。如图5c所示,因为来自任何存储器索引的数据可以输出到例如vpu的simd单元中的任何通道,所以也可以完成置换。多路复用器518可用于为每个通道注入或插入置换控制,以基于起始位置(可以对齐或未对齐)和置换模式来通知交叉开关510的多路复用器514从哪个存储器位置读取数据。因此,代替简单地从对齐的位置提取数据,置换模式可以用于更新存储器读取的位置,使得每个多路复用器514将正确的数据发送到simd单元的每个通道。此外,多路复用器516可用于为包括负值或指示零插入的其他值的置换模式插入零(例如,在使用除负值之外的值来导致零插入的情况下)。这样,一旦存储器访问位置从多路复用器518发送到交叉开关510,并且来自存储器访问的值被发送到多路复用器516以进行零插入,对应于置换模式中的负值的值可以被转换为零值以填充相应simd通道的值。尽管在图5c中仅示出了四组通道、多路复用器和存储器索引,这不是限制性的,并且可以包括任意数量的组而不脱离本公开的范围。[0183]图5d图示了硬件架构500的示例使用。例如,图5d中的图示。5d可能基于以下信息:[0184]crossbar_mode=1;[0185]start_lane=2;[0186]permutepattern={3,1,-1,…,2}={011b,001b,111b,…,010b};[0187]memreadbus={100,101,102,…,103}[0188]permute_low={3,1,3,…,2};//较低2-位置换[0189]permute_sign={0,0,1,…,0};//置换的位3[0190]readdataoutput={103,101,0,…,102}[0191]另外,以下c代码可以描述图5c和5d的硬件架构的逻辑电路:[0192][0193]这样,在图5d的示例中,多路复用器518中的位值1可以指示应该选择负载置换值,并且这些值{3,1,3,...,2}可以被传送到交叉开关510的相应多路复用器514。如这样,{103,101,103,...,102}的值可以从存储器中读出并发送到多路复用器516,其中置换模式可以包括为-1的第三值,因此103的值可以通过零插入被转换为0。因此,{103,101,0,...,102}的最终值可以被读回向量寄存器。[0194]现在参考图如图5e所示,本文描述的方法550的每个块包括可以使用硬件、固件和/或软件的任何组合来执行的计算过程。例如,可以通过处理器执行存储在存储器中的指令来执行各种功能。方法550也可以体现为存储在计算机存储介质上的计算机可用指令。方法550可以由独立应用程序、服务或托管服务(独立或与另一托管服务组合)或另一产品的插件提供,仅举几例。此外,通过示例的方式,关于图5c的硬件结构描述了方法550。然而,该方法550可以附加地或替代地由任何系统、结构或组件或系统、结构或组件的任何组合执行,包括但不限于本文所述的那些。[0195]图5e是示出根据本公开的一些实施例的用于使用置换操作执行加载的方法550的流程图。在框b502,方法550包括确定用于加载来自存储器数据的置换模式。例如,置换模式可以是静态的,也可以是动态计算的。置换模式可以对齐(例如,0到16,或0到32)、未对齐(例如,2到18)、重复(例如,0、1、2、3、0、1、2、3、...、等等)和/或其他模式类型。[0196]在框b504,方法550包括至少部分地基于置换模式,确定多个通道中的每个通道的存储器地址位置。例如,置换模式可以指示应该从哪个存储器地址位置加载特定通道或寄存器的数据。置换模式可以使用多路复用器518来实现,从而根据置换模式的正确存储器地址被发送到交叉开关512。[0197]在框b506,方法550包括至少部分地基于存储器地址位置,将值加载到多个通道中的每个通道。例如,基于存储器地址位置,来自交叉开关512的多路复用器514可以从存储器中检索对应的值以写入一个或更多个向量寄存器内的一个或更多个通道。在一些实施例中,多路复用器516还可用于将与置换模式中的负值相关联的值(或指示用零填充的其他值)转换为零。因此,在置换模式中包括一个或更多个负值的情况下,从存储器加载的值可以在被写入向量寄存器之前被转换为零。[0198]在框b508,方法550包括使用这些值和至少一个指令,在多个通道的每个通道内执行一个或更多个操作。例如,一旦向量寄存器或simd单元的处理通道被填充,一个或更多个操作——例如算术指令、逻辑指令、移位/循环指令、位操作指令、比较指令、转换指令、常数生成指令,和/或类似的——可以使用对应于一个或更多个处理通道的一个或更多个处理单元来执行。[0199]用于执行表查找的具有混合的多点查找[0200]在具有向量simd计算的传统处理器中,本地存储器可以包括与向量simd的位宽度匹配的位宽度。结果,这些处理器通常可能仅支持与位宽度相对应的读取和/或写入对齐和粒度。然而,表查找是例如数字信号处理(dsp)和计算机视觉等嵌入式环境中的常用技术,以实现各种非线性功能。例如,平方根、对数、正弦和余弦函数可能需要执行表查找。为了执行这些功能,可以在一维(1d)网格中均匀地采样输入空间,并且可以在一维表中的这些输入点处记录输出。然而,当使用表查找实现非线性函数时,通常需要在表大小(例如,表中的条目数)和准确性之间进行权衡。为了在不需要大表大小的情况下提高准确性,可以执行插值查找,其中在分数索引周围查找两个点以进行线性插值,或者在分数索引周围查找三个点以进行二次插值。[0201]作为示例,其中使用查找表实现正弦函数,并且正弦值以整数度制表,则table[0]=sin(0度),table[1]=sin(1度),table[2]=sin(2度),等等。在这样的示例中,如果评估是sin(1.7度),则可以使用table[1]*0.3+table[2]*0.7的分数在两个整数度条目之间线性地进行插值。在这个例子中,table[2]的第二个条目得到分数作为权重,第一个条目得到1减去分数,因此分数越接近1.0或第二个条目对应的位置,第二个条目被越高地加权。[0202]作为另一个示例,可以对图像或图像的补丁重新采样,这可以涉及查找围绕某个分数像素坐标的可用像素,然后执行内插查找。在这样的示例中,表格可以包括图像补丁,并且可以是二维的。在这种情况下,可以执行双线性插值以在两个维度上进行插值,每个维度都是线性的。例如,位置y=5.1、x=7.6的补丁可以根据以下计算进行插值:[0203](patch[5][7]*0.4+patch[5][8]*0.6)*0.9+(patch[6][7]*0.4+patch[6][8]*0.6)*0.1然而,在传统处理器中执行这种类型的内插查找是昂贵的,因为需要对每个表中的每个值执行单独的查找。为了加快此过程,可以复制表以允许同时使用表的不同实例进行任意数量的查找。例如,在上面的示例中,当查找5、6、7和8处的补丁时,表可能至少被复制4次,以允许在四个表中并行查找。例如,在处理器(例如vpu)支持32路并行性的情况下,表可能会被复制32次。然而,虽然复制表可能会增加每个周期的吞吐量,但复制还需要附加的存储器容量和使用,这在某些实现中可能不可用或不是最佳的。[0204]考虑到这一点,本文描述的系统和方法使用两点和/或逐二(2x2)点查找操作来增加吞吐量(或匹配例如32路并行的吞吐量)同时节省存储器空间。例如,使用每存储器组地址总线和相关联的逻辑和路由,两个点或2x2点(例如,4个点)的并行查找可以用更少的存储器使用来执行。因此,对表的单次查找可能会在两点查找中产生两个点或在2x2点查找中产生四个点。这可以基于硬件设置来完成——例如,组地址、逻辑、路由等——以及存储器中的存储模式,允许读取多个数据而不会发生存储体冲突。如上所述,如果没有这些功能,要实现例如32路并行查找,则需要将表复制32次。例如,这个32路并行查找可以使用以下c代码执行:[0205][0206]在该示例中,循环的查找部分可以在每个周期执行32次查找,持续两个周期(查找和混合分别在存储器和向量数学槽中执行,并且每次迭代管线化到两个周期),并内插以产生32个输出。因此,整个查找/插值是每个周期16个输出,并且需要对表进行32次复制。[0207]作为进一步的示例,并且关于图参考图6a,示出了用于执行具有索引向量{0,1,2,3,4,5,4,3,...}的单点查找的16路并行表组织。在这样的示例中,使用传统架构和存储器布局技术,将需要顺序执行第一次查找和第二次查找以从每个存储器组读取两个条目。例如,第一存储器组t0包括要在查找操作中读出的t0[0]和t0[1]处的值,但是因为这些值都在同一个存储器组中,所以t0(可能只包括一个单读端口),第一个值t0[0]在第一遍中被读取,第二个值t0[1]在第二个顺序通过中被读取。使用这样的存储器布局,如果在同一个存储器组中发生两次读取,则会发生存储体冲突,这可能会导致处理延迟和/或导致算法或其他计算无法正确执行。[0208]然而,使用本公开的架构,相同的32次查找对于两点查找可能仅需要16次表复制或对于2x2点查找仅需要8次。例如,对于两点查找,每个时钟周期16个输出的相同性能可以通过表的16次复制来实现,从而将存储器占用减少两倍。指令的16路并行变体可以返回双向量,第一个条目在较低的单向量中,第二个条目在较高的单向量中。在c代码中,这种16路并行查找和插值可以表示如下:[0209][0210]在这样的示例中,循环的查找和内插部分可能仅需要单个时钟周期(查找和混合分别在存储器和向量数学槽中执行,并且每次迭代管线到一个周期),并且内插到产生16个输出。因此,查找/内插是每个周期16个输出。作为一个例子,并且关于图6b,说明了用于执行具有索引向量{0,1,2,3,4,5,4,3,...}的两点查找的8路并行表组织。在这样的示例中,由于每个存储器组t0、t1、t2等在查找操作期间仅包含要读取的单个值,因此可以在单个通过中读出所有16个值,而不是图6a的示例,在图6a中,由于可能存在存储器组冲突,因此在两遍中的每一遍中只能读取8个值。为此,在实施例中,用于查找的指令可以包括单个索引和模式,该模式不仅包括检索索引,还包括检索索引加上一个位置。因此,指令可能会导致读取两个值以进行两点查找,并且可以以这种格式将值写入查找表以允许在没有存储器组冲突的情况下执行该单次读取。[0211]作为示例,当执行向量运算时,vpu的每个通道可以处理从存储器检索的一组像素值。在某些情况下,一个通道可以处理来自同一存储器组的多个值,这可能导致存储器组冲突,因为该存储器组可能仅包括单个读取端口。因此,本公开的方法和系统将值分布在存储器组之间使得不会发生存储器组冲突,并且例如用于vpu的单个处理通道的每个值可以访问单个处理通道中的每个对应值读周期。[0212]在执行2d双线性内插查找的传统系统中,每个输出需要四个查找(例如,2x2),从而允许每个时钟周期8个输出和32个表副本的最佳吞吐量。使用2x2点查找,每个周期可以实现8个输出,表的8次复制(与32次相比),从而将并行子表所需的存储器占用减少了四倍。例如,对于2x2点查找,可以从2d表的一行读取两个条目,然后从下一行读取2个条目。为避免任何存储器组中的存储器组冲突,2d表中的行间距可以限制为m*k+2,其中m是每个子表中水平存储的条目数,k是足以存储的任何整数桌子的一排。对于8路并行16位表,m=32(16位存储器字)/8(并行度)=4。对于2路并行32位表,m=16(32位存储器字)/2(并行度)=8。[0213]作为示例,并且关于图6c-6d,行间距约束可用于避免存储器争用。在这样的示例中,说明了用于2x2点查找的2路并行字型表,行间距为10。子表(m)中的连续元素数为8,其中a[0][0…7]连续放置在子表中,符合8k+2的公式,其中k可以是任意整数。因此,无论使用哪个索引值开始,要检索的2x2点都可以放置在不同的组中,这是由数学保证的。例如,相对于子表的2x2点的组号概述如下:[0214]index%8,[0215](index+1)%8,[0216](index+line_pitch)%8=(index+8k+2)%8=(index+2)%8,[0217](index+line_pitch+1)%8=(index+8k+2+1)%8=(index+3)%8通常有4个条目要通过2x2在组号中的查找来检索,相对于子表是索引%m、(索引+1)%m、(索引+2)%m、(索引+3)%m)。只要m》=4,就不应该有存储体冲突。在图6c-6d的示例中,查找可以包括(0,1)和(1,3)的2d索引,使用y然后x作为以行主要顺序存储像素的约定。在图6c中,示出了两个二维表的逻辑视图,并且在图6d中示出了来自表的值的存储器布局视图。在逻辑视图中,查找是2x2,如图所示,并且存储器布局视图显示了四个点,每个点位于不同的存储器组(或图中的不同列)中,因此这些值中的每一个都可以在单个存储器循环或通过中读取。基于使用索引(例如,(0,1)和(1,3))的指令和读取模式,表中的值可以以这种方式存储在存储器中,以在单个通过中从存储器中读取每个值。因此,使用此存储器布局和读取指令,每个子表的四个条目可以在每个周期以以下格式返回:[0218]目的地较低的单向量:a[0][1],a[0][2],b[1][3],b[1][4],(其余用零填充)目的地较高的单向量:a[1][1],a[1][2],b[2][3],b[2][4],(其余用零填充)[0219]尽管在图6c中被示为两个10个元素宽乘3个高的2d表,例如a表和b表,这不是限制性的,表格可以是任何宽度和/或高度,这取决于实施例。类似地,图6d中的存储器布局,包括16个元件宽×3高的布局,但这不是限制性的,并且存储器宽度和/或高度可以是取决于实施例的任何配置。[0220]在一些实现中,例如当对图像补丁进行采样时,可以执行像素的一部分之间的内插。在一些实施例中,为了在没有附加指令的情况下对查找的值进行内插以操纵数据,可以执行向量水平交错混合(vhblend_i)指令,该指令可以包括与交错数据的水平混合以在通道对之间进行混合。例如,使用该指令,可以在同一循环中执行后查找双线性插值。该指令可以根据图6e的表格的布局来处理每个通道对。这样,y0和y1的计算可以如下计算:[0221]y0=x*(1–alpha0)+y*alpha0[0222]y1=z*(1–alpha1)+w*alpha1[0223]因此,该指令可以导致通道对x和y、z和w之间的水平混合,并且可以导致输出在目的地寄存器中被交错。例如,以下c代码段可用于使用2x2点查找在8路并行表上实现最佳性能。[0224][0225]在这种8路并行表组织中,子表被指定为a、b、...、h,循环可以执行查找和插值,从而导致每次迭代有16个输出。在这样的示例中,输入可以按照以下方式进行组织:[0226]idx.lo={idx0,idx1,idx2,idx3,idx4,idx5,idx6,idx7,(忽略剩余)}[0227]idx.hi={idx8,idx9,idx10,idx11,idx12,idx13,idx14,idx15,(忽略剩余)}[0228]x_frac.lo={xf0,xf0,xf1,xf1,…,xf7,xf7}ꢀꢀꢀꢀꢀꢀꢀ//注意重复模式[0229]x_frac.hi={xf8,xf8,xf9,xf9,…,xf15,xf15}ꢀꢀꢀ//注意重复模式[0230]y_frac={yf0,xf8,yf1,yf9,…,yf15}ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ//注意交错模式该指令的中间和最终结果的示例说明在图6f中说明,其中包括指示数据的混合和交织模式的箭头。[0231]现在参考图如图6g所示,本文描述的方法600的每个框包括可以使用硬件、固件和/或软件的任何组合来执行的计算过程。例如,可以通过处理器执行存储在存储器中的指令来执行各种功能。方法600也可以体现为存储在计算机存储介质上的计算机可用指令。方法600可以由独立应用程序、服务或托管服务(独立或与另一个托管服务组合)或另一个产品的插件来提供,仅举几例。此外,方法600可以由任何一个系统、结构或组件或系统、结构或组件的任何组合执行,包括但不限于本文所述的那些。[0232]图6g是示出根据本公开的一些实施例的用于执行多点查找(例如,在解耦查找表(dlut)加速器中的单个时钟周期中,例如关于图9a-9c所描述的)的方法600的流程图。在框b602,方法600包括将表复制到存储器,以包括在第一存储器组中的第一物理地址处的第一值和在第二存储器组中的第二物理地址处的第二值,第一值和第二值被包括在表的逻辑存储器视图中的相同列中。例如,可以将一个表复制到存储器任意多次,以利用系统的存储器访问并行性。该表可以包括在第一逻辑地址处的第一值和在与第一值相同的列中的第二逻辑地址处的第二值,如果在这种配置中存储到存储器中,则可能导致存储器组冲突,因为这两个值可能被存储到同一个存储器组。因此,当将表复制到存储器时,写指令可以将第一个值写入相邻的第一个物理地址——例如,在另一个存储器组中——作为第二个值,从而可以在同一周期中检索这两个值。[0233]在框b604,方法600包括确定与存储器中的第一物理地址相对应的第一索引。例如,读取操作可以使用指示存储器中的从其开始读取值的第一位置的索引。[0234]在框b606,方法600包括至少部分地基于与多点查找相对应的读取指令,在单个周期期间读取位于第一物理地址的第一值和位于第二物理地址的第二值。例如,当将表复制到存储器时,该表可以被复制使得在同一列或表中的点对(例如,对应于同一列像素中的像素)被存储在单独的存储器组中。因此,使用用于两点查找的读取指令,该指令使用点对中的第一点的索引来读取存储在不同存储器组中的第一点和相邻的第二点,可以在单个周期中从存储第一值的第一存储器组和存储第二值的第二存储器组读取第一值和第二值。可以对每个复制表中的每对值执行该操作以产生包括来自每个表的第一值的高向量和包括来自每个表的第二值的低向量,并且这些向量可以用作vpu中的向量寄存器,以及生成输出的指令(例如,内插等)。[0235]在框b608,方法600包括使用第一值和第二值执行一个或更多个操作。例如,可以将第一值和第二值加载到vpu的一个或更多个通道,并且可以执行平方根、对数、正弦和余弦函数,可以执行线性或双线性内插,和/或其他可以执行操作类型。在执行内插的情况下,一个表被复制16次,例如,可能发生16次两点查找操作以产生32个值——vpu的每个向量通道有2个值——并且可以在每个通道上执行插值以输出16个结果。因此,每个周期可以仅使用表的16次复制来产生16个内插输出。这可能是使用两点查找的结果,因为包含值的表可能只需要复制传统单点查找操作的一半(例如,16次而不是32次),以允许相同的32值一半的存储器占用的吞吐量。[0236]向量存储器中的每个存储器组加载高速缓存[0237]在常规处理器中,数据高速缓存可以具有例如每高速缓存线32字节的宽度。高速缓存行是硬件跟踪的数据单元。例如,硬件可以跟踪标记存储器中的高速缓存行使用信息,包括完整的系统地址、高速缓存行是否已被写入、相对于其他高速缓存行的最后一次读取高速缓存行的时间,以确定何时驱逐高速缓存行。在一些实现中,数据高速缓存是本地存储器,或者是本地存储器的一部分,用于将存储在外部存储器中的较大的数据结构临时映射到本地存储器,使得数据可以在不经受直接处理外部存储器的长延迟存储器的情况下被处理。在传统的台式或膝上型计算机中,经常使用这种类型的数据高速缓存。[0238]作为非限制性示例的可编程视觉加速器和/或vpu包括旨在运行更小的高度优化代码集的嵌入式处理器。在此类处理器类型中,可能无法实现数据高速缓存,因为程序员可以管理本地数据存储器中的内容。本公开的系统和方法可以包括由程序员管理而不是被高速缓存的本地存储器,但也可以包括在一个或更多个(例如,每个)存储器组中的附加数据高速缓存能力。与例如包括32字节的更传统的数据高速缓存相比,数据高速缓存可以是窄的,例如但不限于16位宽度。与传统数据缓存的主要目标是减少延迟相反,数据缓存可主要用于降低功耗。[0239]例如,在计算机视觉处理中,数据访问模式通常具有一定程度的局部性(例如,在移动到下一个邻域之前在某个邻域中停留一段时间)。例如,当使用此处描述的vfilt4hhw指令(一次计算4个抽头)执行7x72d过滤时,数据读取流可以从邻域读取3次存储器读取,然后移动到另一个邻域并再读取3次,等等。在操作的系数读取中,可以使用相同的零填充值阵列(例如,7*2*4=56个半字),一次推进四个半字,直到读取最后一组4个半字,然后开始再次从56个半字阵列的开头返回,直到过滤内核完成。[0240]因此,为了利用这些本地访问模式并减少由于存储器访问而导致的功耗,可以实现在具有双向集关联性(保持例如总共64个半字)的每个存储器组中加载数据高速缓存。当启用加载高速缓存时,可以在高速缓存中记录读取数据的最近读取的集合(例如,最近的、最近的两个、最近的三个等),以及行地址和最近读取的条目在标签存储器中。结果,当再次读取相同的存储器地址时,可能会出现高速缓存命中,并且高速缓存可能会提供数据,而不是要求从本地存储器中再次读取数据。在实施例中,加载高速缓存可以位于存储器日志记录逻辑和存储器本身之间,使得每当存在高速缓存命中时,将停止或不发生针对该特定地址或值的存储器读取,以节省功率。[0241]使用这种高速缓存结构,并且对于上面的7x72d过滤示例,加载高速缓存可以允许系统跳过几乎三分之二的数据读取和几乎所有在稳定状态下的系数读取。每个存储器组中的数据高速缓存的使用说明在图7a-7c中说明。例如,vfilt4hhw指令可以执行可能更大的过滤任务的4-抽头,并且可能消耗两个单半字数据向量——例如,数据[0-15]和数据[4-19]——和一个单半字向量系数——例如,coef[0-3]——重复四次以填充16元素的单个向量。在两个向量数学槽中使用vfilt4hhw指令的7x72d滤波器实现中,可以使用图7a的数据元素和系数阵列。由于本公开的vpu可以被配置为读取双向量,所以data[y][0-15]和data[y][16-31]可以被读取为双向量。类似地,data[y][4-19]和data[y][20-35],以及data[y][8-23]和data[y][24-39]可以被读取为双向量。同样地,数据和系数读取模式可以对应于图7b-7c的那些,假设数据的行间距为100,系数的行间距为8。[0242]图7d说明存储器组组织。例如,2条目完全关联高速缓存在任何超级组中保留两个位置的数据价值,并且可以将数据和系数放置到不同的超级组中以允许高速缓存有效地工作。在系数读取中,存储器组0-3可能首先保留系数元素0-3,添加元素32-35,然后读取元素64-67将驱逐元素0-3,这些元素将在下一个读取的系数中作为模式重复。在启用加载高速缓存的稳态下,系数读取模式的每次扫描只能读取四个存储器组。因此,通过对数据使用加载高速缓存来节省存储器条读取可能是(3*32-(32+4+4))/(3*32)=58.3%,对于系数可能是(14*16-4)/(14*16)=98.2%。[0243]因此,在某些算法中——例如具有滑动窗口的计算机视觉算法——加载高速缓存可用于节省功率。例如,如果没有加载高速缓存,则需要在每个周期读取每个存储器组,即使大部分数据是相同的。在每次迭代读出512位的示例中,可以读出前512位,然后可以读出另一个512,等等。例如,如果滑动窗口只有8个字节,那么每次迭代只有64位是新的,其余448位是相同的。如果没有数据高速缓存,则需要再次从数据组中读取这448位。然而,为每个存储器组使用数据高速缓存,这448位可以从加载高速缓存中提取,并且只有64个新位需要从其他存储器组中读出。因此,节省了从存储器组读取448位所需的功率。可以从使用加载高速缓存中受益的算法的示例是空间过滤操作、深度学习推理操作(例如卷积操作)等。[0244]关于图7e,示出了用于具有加载高速缓存的存储器组的硬件架构或逻辑。例如,对于存储器(例如,向量存储器(vmem))中的非对齐访问支持,可以加速滑动窗口数据访问。这是许多计算机视觉算法的关键存储器访问模式,包括过滤和卷积。对于滑动窗口向量加载,来自随机存取存储器(ram)组702的大部分数据保持不变。在这样的示例中,当滑动4b时,在64b向量加载中只有4b的数据发生变化,因此从ram库702中仅读取4b的新数据。为了优化vmemram的功率,称为“加载高速缓存”的微型高速缓存可以针对每个超级组附加到每个组——因此,每个vmem总共有3个超级组x32个组=96个加载高速缓存。在非限制性实施例中,每个加载高速缓存的配置可以包括两行(2x2b=4b)容量、完全关联性和伪最近最少使用(plru)替换策略。[0245]数据高速缓存存储最新访问的地方被分成两部分——标签存储706和数据存储704。在标签存储706中,可以存储对应于先前访问的缓存地址和控制信息,并且在数据存储704中,可以存储来自先前访问的数据。标签存储器706中的控制信息可以包括有效标志(例如,条目是否有效)、脏标志(例如,条目是否已经被修改并且需要写回存储器)和/或最后使用标志(例如,如果要替换条目,则使用最近最少使用的策略来指示要替换的条目)。因为高速缓存是加载高速缓存,所以写入数据可能不会更新高速缓存,但有效和最后使用标志可以包括在标签存储706中。有效标志或位可以用于限定地址匹配,并且任何写入都应该无效入口。每次访问时,可能会更新最后一次使用标志。[0246]如本文所述,为了使高速缓存方案有效,加载高速缓存的存储能力远小于存储器或ram库702的存储能力,以减少访问时间并节省功率。在一个实施例中,每个加载高速缓存可以对应于单个ram库702,ram库702每个可以是2048x16位存储器,并且加载高速缓存可以每个是2x16位数据存储704,其带有23位标签存储706(例如,2个条目x(11位地址+1位有效)+1位最后使用)。[0247]在操作中,偏移量722、行地址724和增量726可用于生成用于存储器访问的存储器地址。该存储器地址可以被分接以与标签存储706进行比较——例如,与一些数量的先前访问地址(例如,2个先前访问)进行比较。进入标签存储器706顶部的箭头可以表示存储器地址。在一些实施例中,标签存储器706可以使用整个存储器地址来与来自先前访问的存储的存储器地址进行比较。在其他实施例中,来自存储器地址的地址位的子集可用于寻址标签的子集,因此仅将标签的子集与存储器地址进行比较。例如,在标签存储器706中存储大量先前访问标签的情况下,可以仅将标签的子集与使用存储器地址位的子集进行比较以减少面积并节省功率。在标签较少的加载高速缓存设计中——例如对应于两个先前访问的标签——可以将先前条目的整个标签与整个存储器地址进行比较。“==?”判定框720将ram库702的当前存储器地址与存储在标签存储器706中的地址进行比较。当存在未命中(例如,标签和存储器地址不匹配)时,ram库702的读取可以使用读取使能708和读取数据多路复用器(rddatamux)712使能时,可以选择并读出ram库702以发送到分级触发器716。当有命中时(例如,标签和存储器地址匹配),数据存储704可以用0或1寻址(在具有两个条目的实施例中)以指示命中对应于哪个先前访问。数据存储器中的相应条目可以通过读数据多路复用器712发送到分级触发器716。分级触发器716可以将读回数据返回到处理器管线,最终路由到加载指令的目的地标量或向量寄存器。[0248]分级触发器714可以对应于奇偶校验。例如,可能需要足够大的存储器来具有奇偶位(例如,在奇偶终端710中)以允许误差检测和/或纠错。在存储器(例如,vmem)中,可以使用误差检测,和/或可以对回读数据实施误差校正逻辑。[0249]因此,加载高速缓存可以包括用于路0和路1的标记存储706中的标记位,每个标记位可以包括11位地址和1位有效位。加载高速缓存还可以包括1位plru,以及数据存储704中用于way0和way1的数据位,每个数据位包括16位数据和2位奇偶。加载高速缓存启用后,可在d1阶段查找。为了最小化功耗,可以仅启用参与加载的ram库702的加载高速缓存。例如,对于单个向量加载,可能仅查找32个加载高速缓存中的16个。在加载命中时(例如,在加载高速缓存包括要访问的数据的情况下),可以抑制给定ram库702的读取使能,从而防止点亮ram库702。plru720也可以在d1阶段更新。在d2阶段,数据和奇偶位可以从加载高速缓存命中路中读取并与ram结果复用。[0250]在加载高速缓存未命中时,在dl阶段,以受害者方式,可以基于有效位和plru来确定要被逐出以为新条目腾出空间的现有条目。然后可以用未命中地址更新受害者路径的标签,并且可以不抑制ram库702的读取使能708。在d2阶段,来自ram库702的数据/奇偶不仅被发送到读取数据交叉开关,而且还将数据填充到被逐出的高速缓存行中。存储也可以在启用和参与时查找加载高速缓存。存储命中可能会导致命中方式无效,并且存储未命中可能会被忽略。[0251]在加载高速缓存中命中时,节省了读取ram库702的功率。另一方面,加载高速缓存中的未命中不仅会导致读取ram库702的功率,而且还会消耗电力来查找加载高速缓存以填充受害者路径。由于并非所有类型的存储器访问模式都在加载高速缓存中获得高命中率——特别是在以索引寻址模式访问超级组时——只能在加载高速缓存中查找向量线性加载。[0252]当启用时,可以在加载高速缓存中查找所有存储,以确保加载高速缓存永远不会与例如vmemram库702中的数据不同步。对于给定的超级组,软件可用于禁用该超级组的ram库702的加载高速缓存,以最小化存储查找能力,如下面更详细描述的。[0253]例如,在一些实施例中,数据高速缓存的使用可能不提供益处。例如,在访问模式不重复的操作中,数据高速缓存可能没有用,因此在读取之前执行检查高速高速缓存的附加任务可能会浪费时间和/或精力,因为可能需要读取数据库访问正确的数据。因此,可以启用或禁用加载高速缓存,从而减少由于负载缓存未命中率高的访问模式导致的功率损失,而且还允许将加载高速缓存用于访问模式,其中数据高速缓存可节省功率。在一些实施例中,可以使用应用程序代码来编程启用或禁用,因此程序员可以对代码进行编程以在需要时启用数据高速缓存并且在不需要时禁用数据高速缓存。在其他实施例中,可以通过硬件分析读取模式并检测重叠模式来执行启用或禁用。例如,对于连续读取操作之间的阈值重叠量,硬件可以启用加载高速缓存。然而,在重叠小于阈值的情况下,可以禁用加载高速缓存。作为非限制性实例,阈值可以是读数之间的25%、40%、50%、75%或不同的阈值重叠量。[0254]当加载高速缓存被禁用时,并且关于图如图7e所示,可以不访问标签存储器706,并且可以设置读取使能708,使得对于每次读取都启用对ram库702的读取。类似地,数据存储器704可能不被访问,并且读取数据复用器712可能总是将ram库702的数据传递到分级触发器716。[0255]此外,在一些实施例中,存储器组结构可以包括多个超级组——例如,三个超级组——并且各个超级组可以根据每个超级组内的特定访问模式启用或禁用加载高速缓存。例如,在使用三个超级库的情况下,每个超级库可以包括32个ram存储器组,并且每个存储器组的数据高速缓存可以包括两个条目,其中每个条目是一个字,因此是16位。在使用两个或更多个超级组的情况下,超级组可以是任何大小、不同大小、相同大小或它们的组合。例如,第一超级组可以是128kb,第二超级组可以是256kb,第三超级组可以是512kb。[0256]现在参考图如图7f所示,本文描述的方法750的每个块包括可以使用硬件、固件和/或软件的任何组合来执行的计算过程。例如,可以通过处理器执行存储在存储器中的指令来执行各种功能。方法750也可以体现为存储在计算机存储介质上的计算机可用指令。方法750可以由独立应用程序、服务或托管服务(独立或与另一托管服务组合)或另一产品的插件提供,仅举几例。此外,方法750可以由任何一个系统、结构或组件或系统、结构或组件的任何组合来执行,包括但不限于本文所述的那些。[0257]图7f是示出根据本公开的一些实施例的用于将数据高速缓存用于读取操作的方法750的流程图。在框b702,方法750包括接收表示存储器读取地址的数据。例如,在使用一些存储器组的第一次读取操作之后,可以执行第二次读取操作,该第二次读取操作除了一个或更多个附加或其他存储器组之外还包括一个或更多个存储器组。因为第一读取操作可能已经包括将读取的输出存储在对应于每个相应存储器组的数据高速缓存中,所以这些值可以被重新使用,而不是要求存储器组的另一次读取。这样,可以接收对应于下一个读取操作的存储器读取地址,并且可以访问加载高速缓存——当启用时——以确定是否有任何数据存储在加载高速缓存中。[0258]在框b704,方法750包括将存储器读取地址与对应于存储在加载高速缓存中的先前存储器读取的加载高速缓存存储器地址进行比较。例如,在先前的存储器读取之后,来自存储器读取的数据可以存储在对应于特定ram库702的加载高速缓存中。为了记住这个信息,标签存储器706可以包括对应于从ram库702读取的一个或更多个先前的存储器地址。[0259]在框b706,方法750包括确定存储器读取地址至少部分地与加载高速缓存存储器地址重叠。例如,可以将存储器读取地址与存储在标签存储器706中的先前读取的先前存储器读取地址进行比较。如果有命中,则可以使用加载高速缓存来读出对应于当前存储器读取的存储器读取地址的数据中的至少一些。[0260]在框b708,方法750包括从加载高速缓存读取对应于存储器读取地址的数据的至少一部分。例如,由于从标签存储706确定的加载高速缓存中的命中,来自重叠存储器地址的部分数据可以从加载高速缓存中读出,并且数据的剩余部分——如果有的话——可以从ram库702中读出。[0261]解耦的可配置加速器[0262]为了针对特定应用(例如实时应用)优化处理器的性能,可以增强指令集架构(isa)以创建自定义指令以加速常见操作。这允许处理器减少执行特定任务所需的周期数。执行定制isa的过程,直到满足系统的性能目标。但是,添加这些新指令是为了对处理器寄存器文件中的数据进行操作,或者直接作为存储器作为操作数进行操作,这些指令使用现有的处理器控制器以及现有的存储器寻址和访问硬件来执行。在此类示例中,希望新指令适合处理器的寄存器文件读/写操作数计数(例如,重用现有端口),适合寄存器文件宽度(例如,适合处理器数据类型),以及适合处理器管线阶段。由于成功向isa添加指令的这些要求,添加新指令的灵活性受到限制。此外,当为处理多阶段(例如,30、40、50等阶段)的管线创建isa时,isa的配置变得复杂。[0263]此外,处理器以功耗为代价提供高度的灵活性——因为每条添加的指令都需要获取、解码/分派、读取/写入寄存器文件和/或存储器等。因此,添加附加的功能单元来实现这些自定义指令会增加寄存器文件读/写端口的压力,从而导致所需面积(例如,可能需要附加的读/写端口)和功率(例如,可以实现附加负载寄存器文件)。此外,嵌入式应用程序的处理管道通常具有多个阶段——其中一个阶段的输出将输入馈送到下一个阶段。诸如在处理器中执行多个线程(例如,用于不同的处理阶段)之类的技术可以减少扩展时间,从而提供减少的延迟。然而,多线程是以牺牲硬件为代价的——必须从多个线程获取/解码/调度指令,为每个线程的每个状态保留状态信息(例如,在寄存器文件中),以及包含控制逻辑来处理处理器中的多个线程。这导致面积和功率要求增加,同时使处理器的验证和编程更加复杂。因此,尽管存在用于减少处理管线中的延迟的各种方法,但现有方法需要处理器硬件的附加表面积,由于附加的硬件而需要额外的功耗,并且增加了对处理器进行编程以执行各种任务的复杂性。[0264]为了解决主处理器配置的限制和多线程处理器的缺陷,本公开的系统和方法使用主处理器或主处理器的一个或更多个单元——例如诸如vpu之类的单线程处理器-除了与主处理器解耦并通过共享存储器与主处理器通信的领域特定加速器或协处理器-例如向量存储器(vmem)。这样,加速器可以作为主处理器的子单元操作,但是一旦被配置,加速器可以独立于主处理器的指令来执行,而不是需要处理器指令来执行。例如,加速器访问指令可用于允许主处理器配置和排序加速器,共享存储器可允许在主处理器和加速器之间共享级间数据结构)。一旦主处理器启动或开启加速器(例如,通过公共加速器接口,并使用一个或更多个加载/存储指令),主处理器就可以自由地处理不同的阶段(从而提供在处理管线的多个阶段同时工作并减少运行时间的能力)或转换到等待加速器完成处理的低功耗或最低功耗状态(例如,在不主动处理时最大限度地减少功耗)。这样,一旦由主处理器配置,一个或更多个加速器中的每一个都可以与主处理器独立地和并发地操作。主处理器和加速器可以在处理期间通过握手接口同步,以便主处理器知道加速器何时完成处理和/或准备好执行新任务,或相反亦然。共享存储器可以存储配置消息(例如,当配置指令由于大小限制而不能通过加速器接口有效发送时,用于配置加速器)、输入缓冲区(例如,存储数据以供加速器处理)和/或输出加速器的结果(例如,在处理完成之后,来自加速器的例如寄存器文件的数据可以被存储回从主处理器的配置指令中所指示的共享存储器中的位置)。因此,一旦被触发,加速器可以从共享存储器读取配置参数和/或输入数据结构,并且可以将输出结果数据结构写入共享存储器。[0265]结果,主处理器、共享存储器和解耦加速器的这种组合系统允许可编程主处理器的灵活性,同时实现固定功能硬件的功耗等级(例如,因为可以将处理管线的高计算处理阶段实现为加速器),而无需显著增加主处理器的复杂性(例如,因为主处理器可能只需要额外的加速器配置或访问指令对加速器进行编程)。例如,加速器的管线和数据类型(例如,数据宽度)可以独立于主处理器的那些,从而允许进一步的定制和优化,这可能是需要指令适应处理器的寄存器文件读/写操作数计数、寄存器文件宽度和管线阶段的仅主处理器无法实现的。[0266]在一些实施例中,加速器和主处理器可以在指令执行时耦合,以便在将执行耦合到主处理器管线时实现加速器的一些功率节省。然而,在这样的实施例中,并发地处理管线的不同阶段的能力将降低,因为指令将在加速器和主处理器之间交错。在一个或更多个实施例中,加速器和主处理器可以通过更高级别的第二级(l2)存储器耦合,而不是通过共享存储器连接。然而,在这样的实施例中,更高级别的解耦(例如,移除通过共享存储器到更高级别的耦合)可能会增加与主处理器的通信开销。[0267]解耦加速器可用于任何域内的任何任务,例如,对于非限制性示例,执行1d、2d等查找作为解耦查找表加速器以检测和解决存储器组冲突、执行1d/2d内插等,用于计算机视觉算法,例如特征跟踪、对象跟踪、图像变形、金字塔创建等,用于传感器处理,例如矩阵乘法或对lidar数据、radar数据的其他操作,以及/或类似的,用于机器学习或深度学习应用程序。因此,本文描述的拓扑结构可以应用于任何处理管线,其中可以将处理的一部分卸载到加速器。[0268]取决于实施方式,在一个或更多个芯片上可以有任何数量的解耦加速器,它们通过共享存储器与一个或更多个主处理器通信。例如,片上系统(soc)或其他集成电路(ic)可能包括主处理器和一个或更多个加速器,程序员可能知道各种加速器并编写使用加速器的指令或代码,可以提高系统的任何各种任务的性能。尽管主要将主处理器描述为vpu,但这并非旨在进行限制,并且主处理器可以包括任何处理器类型,例如cpu、gpu、dpu或其他处理器,而不背离范围本公开的内容。[0269]现在参考图8a,图8a示出了根据本公开的一些实施例的包括一个或更多个解耦加速器的系统800。应当理解,这里描述的这种和其他布置仅作为示例阐述。除了所示的那些之外或代替所示的那些,可以使用其他布置和元素(例如,机器、接口、功能、命令、功能分组等),并且可以完全省略一些元素。此外,这里描述的许多元素是功能实体,它们可以实现为离散或分布式组件或与其他组件结合,并以任何合适的组合和位置实现。在此描述为由实体执行的各种功能可以由硬件、固件和/或软件来执行。例如,可以通过处理器执行存储在存储器中的指令来执行各种功能。在一些实施例中,系统800可以被包括在和/或可以包括与图13a-13d的示例性自主车辆1300、图14的示例计算设备1400和/或图15的示例数据中心1500的组件、特征和/或功能类似的组件、特征和/或功能。[0270]系统800可以包括处理器802(例如,主处理器),例如vpu、cpu、gpu、dpu等、解耦加速器804和/或共享存储器806(例如,向量存储器或vmem)。处理器802可以耦合到指令高速缓存(i-cache)810,其可以高速缓存指令以供处理器802执行。处理器802可以包括通用输入/输出(gpio)808(例如,ic上的数字信号引脚,可以用作输入、输出或两者,并且可以在运行时可控),以及ic配置器812。在一些实施例中,如图所示,处理器802可以使用高级可扩展接口(axi)进行片上通信,例如但不限于256位axi接口。ic配置器812可用于配置系统800。[0271]处理器802可以直接与解耦的加速器804通信——例如,经由协处理器或加速器接口,例如高级外围总线(apb)接口,和/或握手,编程,或事件接口。例如,处理器802可以使用加速器接口(或配置总线)配置加速器804,使用事件接口启动或触发加速器804的处理,并使用握手或事件接口与加速器804同步。这样,每个加速器804可以包括被配置为通过相应的加速器接口或配置总线与处理器802通信的机制。例如,当处理完成时,加速器804可以通过握手机制向处理器802指示相同,或者当处理器802正在等待加速器804完成处理时,处理器802可以周期性地轮询加速器804以请求状态或结束时间。在一些实施例中,加速器接口可以包括32位接口(或其他较小尺寸的接口),使得配置指令可以被传送到加速器804。然而,在一些实施例中,配置消息可能很大(例如,大于32位,或其某个倍数),并且配置消息可以替代地存储在共享存储器806中,并且可以通过加速器接口将配置信息在存储器806中的位置发送到加速器804以指示在哪里检索配置信息。[0272]配置总线因此可以配置加速器804,并且事件(或编程接口)可以用于允许处理器802触发或启动加速器804的处理。一旦触发或启动时,加速器804可自行操作,处理器802等待处理完成和/或执行不同的处理任务或阶段。例如,应用程序员可以对处理器802和加速器804进行编程,知道它们各自能够做什么,从而可以将应用程序分成多个部分——处理器802的一些部分和加速器804的一些部分。因此,在实施例中,可以在处理器802和加速器804之间并行执行处理,以减少运行时间并提高效率。配置消息——通过加速器接口和/或通过共享存储器806共享——可由处理器802生成并用于向加速器804指示要处理的数据在共享存储器806中的何处开始,多少数据要处理,以及将结果写回到共享存储器806中的何处。处理器802可以在共享存储器806中的指定位置处生成输入缓冲区,该输入缓冲区包括用于加速器804的数据操作。一旦配置消息被发送并且输入缓冲区被存储在共享存储器806中,加速器804可以通过事件接口(例如,编程接口)从处理器802接收触发信号,并且加速器804可能正在处理数据。一旦加速器804被触发,处理器802然后可以执行其他工作或进入低功率状态,并且一旦加速器804完成处理,加速器804可以指示相同到处理器802并且可以等待额外的工作。[0273]处理器802可以设置输入缓冲区或输入数据结构以供加速器804处理,并将其存储到存储器806。可以使用加载/存储操作由处理器802来配置加速器804,处理器802专门用于配置加速器804并与加速器804通信。配置消息可以配置加速器804的各种寄存器(例如,在一个实施例中,256个32位寄存器)。例如,对于解耦的查找表加速器(如本文更详细描述的),配置信息可以指示查找是用于具有内插的1d查找、具有双线性内插的2d查找和/或另一种类型的查找。加速器804一旦知道特定模式或功能,就可以配置寄存器以正确地从存储器806读取数据、处理数据并将数据写回存储器806。[0274]在一些实施例中,处理器802可以将加速器804配置为一次执行多个任务以提高效率。例如,在加速器804将执行各种较小的任务的情况下,单独配置加速器804可能会增加运行时间,因为每个任务可以快速完成,从而需要处理器802停止处理,配置加速器804用于另一个任务,等等。为此,第一任务消息可以包括第二任务消息的地址,从而允许多个任务的自链接。这样,处理器802可以一次为多个任务生成配置消息,并且为每个任务生成配置信息和输入缓冲区,使得加速器804可以在向处理器802指示处理已完成并且加速器804已准备好接收更多工作之前连续执行各种任务。此外,为了提高效率,加速器804可以被配置为重叠任务,使得当第一个任务接近完成时,加速器804可以开始对下一个任务进行解码并为下一个任务配置寄存器。最终,通过包括用于处理器802和加速器804的单独指令,加速器804可能能够对不同于处理器802将支持的数据格式或类型进行操作。这可能是加速器804的寄存器的架构和布局不同并且专门用于特定处理任务的结果。[0275]在实施例中,处理器802可以通过任何数量的存储器接口(例如,512位静态随机存取存储器(sram)接口)与共享存储器806通信。类似地,如图所示,加速器804可以通过任何数量的存储器接口(例如,512位sram接口)与共享存储器806通信。仲裁器814可以为每个周期决定允许处理器802和/或加速器804中的哪个访问共享存储器806。[0276]现在参考图8b,本文描述的方法850的每个框包括可以使用硬件、固件和/或软件的任何组合来执行的计算过程。例如,可以通过处理器执行存储在存储器中的指令来执行各种功能。方法850也可以体现为存储在计算机存储介质上的计算机可用指令。方法850可以由独立应用程序、服务或托管服务(独立或与另一个托管服务组合)或另一个产品的插件来提供,仅举几例。此外,关于图8a的系统800描述了方法850,方法850可以由任何一个系统、结构或组件或系统、结构或组件的任何组合执行,包括但不限于本文所述的那些。[0277]图8b是示出根据本公开的一些实施例的用于使用解耦加速器的方法850的流程图。在框b802,方法850包括接收用于处理管线的一个或更多个第一处理任务的配置信息。例如,加速器804可以从处理器802接收配置信息(例如,经由加速器接口的配置消息)。[0278]在框b804,方法850包括至少部分地基于配置信息来配置加速器的一个或更多个寄存器。例如,加速器804可以基于配置信息来配置一个或更多个寄存器。[0279]在框b806,方法850包括至少部分地基于对包括在配置信息中的输入缓冲区的起始位置的指示,从存储器中的输入缓冲区读取数据。例如,配置信息可以包括输入缓冲区存储在存储器806中的什么位置的指示,并且加速器804可以将数据从输入缓冲区读取到寄存器中。[0280]在框b808,方法850包括处理来自输入缓冲区的数据以计算输出数据。例如,加速器804可以处理来自输入缓冲区的数据以生成或计算输出。[0281]在框b810,方法850包括在至少部分地基于配置信息确定的位置处,将输出数据写入存储器。例如,加速器804可以将计算结果写出到存储器806,并且可以向处理器802指示处理完成。处理器802然后可以使用输出数据来执行处理管线的一个或更多个第二处理任务。[0282]解耦的查找表加速器[0283]并行处理用于加速许多计算任务,包括但不限于:计算机视觉应用程序、深度学习应用程序、传感器处理应用程序和/或受益于并行性的其他应用程序(例如,其中处理任务独立于其他处理任务)。例如,向量处理器可以在同一操作中对多个元素进行操作,以获得实时执行这些类型的并行处理算法所需的效率,同时消耗低功率。例如,计算机视觉或深度学习任务的常见操作是根据索引或坐标位置从查找表、图像块或表面执行查找。为此,可以使用单个向量加载或存储操作来访问来自多个元素的数据。除非正在查找的索引是规则的(例如,水平或垂直或深度方向上的连续或固定整数步幅),否则它会导致存储器中的随机索引访问。[0284]为了支持来自存储器的常规但未对齐的向量访问,处理器可以使用较小的ram库来构造向量存储器。通过这种方式,硬件能够通过独立地为每个ram库生成唯一地址来为向量存储器创建有趣的寻址模式。对于存储器中的非常规索引向量加载操作,由于不同向量元素的索引可以相互独立,这可能导致ram的一个或更多个存储器组中的存储器组冲突。存储体冲突可能不是静态确定的,因为它们是数据相关的,因此不允许编译器围绕存储体冲突进行调度。[0285]在一些常规系统中,为了支持非常规索引向量加载操作,可以实现各种架构设计。例如,可以将多个读取端口添加到ram库。在这样的示例中,如果硬件可以处理32个向量,则每个组将需要32个读取端口,这将增加费用、面积和功率,并增加ram库周围的布局和布线拥塞。另一个示例包括降低索引查找的吞吐量以执行每个负载的单个标量查找。但是,这会为向量执行造成瓶颈,并成为执行时间的限制因素。另一个示例包括在存储器中制作数据结构的多极副本,使得每个向量通道可以访问来自单个组的数据。虽然此示例可以解决其他方法的一些吞吐量问题,但存储器容量受到数据结构占用n倍(其中n是要访问的条目数)空间的限制,这可能导致相关联的算法的整体性能下降,除了制作副本的开销以外。但是,在数据结构较小的情况下,这种方法比较合适。在一些示例中,可以通过序列化有冲突的查找来动态检测和解决冲突。但是,这可能会导致硬件复杂性增加,因为必须动态检测和解决存储体冲突。此外,这些额外的阶段增加了这些操作的加载使用延迟,从而影响编译器有效调度代码的能力。此外,可能会引入数据相关的执行延迟,这是编译器有效调度的问题。在一些示例中,可以执行这些方法的组合。[0286]为了解决其他架构的这些缺点,本公开的系统和方法包括解耦查找表加速器,其被配置为支持非常规索引向量加载操作。解耦查找表加速器可以作为系统800的加速器804被包括在内,并且可以通过共享存储器806与处理器802——例如vpu——通信。解耦查找表(dlut)可以支持用于执行表查找的多种模式,例如1d查找模式、2d查找模式、2d无冲突查找模式、具有内插模式的1d查找、具有内插模式的2d查找、表格重新格式化模式和/或其他模式。在任何查找模式下,dlut都可以接受vmem中的索引阵列,该阵列可以是1d(x)格式或2d(x,y)格式。例如,每个元素可以包括16位或32位,它们可以是无符号的。dlut然后可以执行规定的索引计算,其可以包括2d到1d映射、截断/舍入、整数/分数分割和/或有效范围检测,作为非限制性示例。例如,dlut可以检测或合并重复读取,检测索引内的存储体冲突,并向vmem发出读取请求以查找请求的表条目。每个元素可以包括8位、16位或32位,它们可以是有符号的,也可以是无符号的。然后,dlut可以按照配置执行内插后处理,并将输出写回vmem。这些处理操作中的每一个都可以在管线中执行以增加吞吐量、减少等待时间并降低功耗。[0287]结果,dlut加速器克服了在处理器管线中实现动态冲突检测和解决的缺陷,允许编译器有效地调度所有存储器操作的确定性执行延迟,同时避免进行内联冲突检测的复杂性。由于加速器作为紧密耦合的加速器运行——例如,通过与vpu共享的vmem——处理器可以配置和启动加速器,同时继续处理处理管道或算法的其他独立部分或阶段。在一些实施例中,加速器可以包括额外的特征以进一步减少主处理器上的负载,例如卸载具有特定查找模式的补丁的索引生成,对查找的数据执行可选的1d混合和2d内插,和/或提供表重新格式化支持,无需查找或内插。在实践中,整个系统(包括用于执行查找的处理器802和加速器804)已被证明可以将各种计算机视觉算法(例如,特征跟踪、对象跟踪、图像变形、金字塔创建等)的处理加速一个因素两个,同时与仅在主处理器上执行整个算法相比,能耗降低了50%以上。[0288]现在参考图9a,图9a示出了根据本公开的一些实施例的包括解耦查找表(dlut)加速器的系统900。应当理解,这里描述的这种和其他布置仅作为示例阐述。除了所示的那些之外或代替所示的那些,可以使用其他布置和元素(例如,机器、接口、功能、命令、功能分组等),并且可以完全省略一些元素。此外,这里描述的许多元素是功能实体,它们可以实现为离散或分布式组件或与其他组件结合,并以任何合适的组合和位置实现。在此描述为由实体执行的各种功能可以由硬件、固件和/或软件来执行。例如,可以通过处理器执行存储在存储器中的指令来执行各种功能。在一些实施例中,系统900可以被包括在和/或可以包括与图8a的系统800、图13a-13d的示例自主车辆1300、图14的示例计算设备1400和/或图15的示例数据中心1500类似的组件、特征和/或功能。[0289]系统900可包括一个或更多个处理器902(其可对应于图8a的处理器802)、存储器904(其可对应于图8a的共享存储器806)和解耦查找表(dlut)加速器906(其可以作为图8a的加速器804的加速器804被包括在内)。在实施例中,处理器902可以包括vpu,并且存储器904可以包括vmem。dlut加速器906(或“dlut906”)可以包括用于与处理器902通信的处理单元(pu)接口(i/f)908、用于与处理器902通信的控制器912,以及配置器910,用于基于来自处理器902的跨pu接口908共享的信息和/或来自基于来自处理器902的关于配置消息或信息在存储器904的何处的指示的存储器904的信息,来配置dlut906。例如,pu接口908和控制器912可以分别对应于高级外围总线(apb)和系统800的事件或编程接口。控制器912可以从处理器902接收启动或触发命令或信号(例如,通过标记为“开始”的箭头),指示dlut906可以开始处理和/或可以从处理器902接收轮询信号以帮助将处理器902与dlut906同步。此外,当dlut906完成处理一个或更多个分配的任务时,dlut906可以向处理器902生成信号(例如,通过标记为“完成”的箭头),使得处理器902可以开始为下一个任务配置dlut906。[0290]在配置期间,处理器902可以直接经由pu接口908和/或通过经由pu接口908指示配置信息在存储器904中的位置来间接配置dlut906。在后一示例中,dlut906可以通过例如共享读取端口strm1_dm_rd从存储器检索配置信息,并且可以使用存储的配置信息来配置dlut906(例如,配置子单元(例如,iau、cdru、ppu等)和/或dlut906的其他组件)用于执行一项或多项任务。例如,处理器902可以在存储器904中设置dlut906执行一个或更多个任务所需的数据结构。例如,对于1000坐标查找,处理器902可以设置存储器904中的数据结构,其具有1000个坐标中的每一个,并且可以进一步在存储器904中分配dlut906将输出写入到的缓冲区。处理器902还可以指示dlut906将执行哪些操作——例如,1d或2d查找,有或没有内插,表格重新格式化等——并且dlut906可以使用该信息来配置子单元。由处理器902设置的配置信息还可以包括坐标索引的位宽度的指示,以及表的条目的位宽度的指示,等等。这样,一旦在存储器904中设置了输入缓冲区和输出缓冲区,并且诸如位宽度、操作类型等的配置信息被发送到dlut906,处理器902可以启动或触发dlut906开始处理。因此,与仅依赖处理器902的系统相比,处理器902可以在dlut906执行查找、内插、表重新格式化等时执行其他任务,从而减少运行时间并提高效率。[0291]在操作中,dlut906可以从存储器904接收对应于坐标的索引列表,并且dlut906可以从对应于索引的表中提取值(例如,其中值是整数值)和/或可以拉取分数值的周围值(例如,一维查找的左值和右值或二维查找的左上、左下、右上和右下值),并对关于周围值执行内插或其他操作。一旦确定了最终值(例如,直接通过不执行后处理的查找,或在由后处理单元(ppu)930处理之后),可以将这些值写入存储器904中的输出缓冲区,其与输入缓冲区中的索引一一对应。为了有效地执行这些任务,在实施例中,索引地址单元(iau)922、冲突检测和解决单元(cdru)924、控制(ctl)先进先出(fifo)928、分数(frac)fifo926例如,可以使用后处理单元(ppu)930、数据合并单元(dcu)932和/或其他组件。[0292]例如,索引(idx)流916可以包括从存储器904读出的索引流(例如,经由读取端口strm1_dm_rd),其要在一个或更多个查找表中查找,并且对应于索引的值可以经由查找表(lut)流918从存储器904(例如,经由读取端口strm0_dm_rd)读出。输出(out)流920可以是在使用dlut906处理之后写回存储器904(例如,通过写入端口strm0_dm_wr)的值。[0293]处理器902在配置期间可以向idx流916指示如何访问用于索引的数据结构。例如,对于一维查找,其中与存储器904的接口为64字节宽,在每个周期中可以读出64字节。在执行1d查找的情况下,可以为每个索引值(例如(x)值)读取单个坐标,而对于2d查找,可以为每个索引读取两个坐标索引(例如,(x,y)值)。在非限制性实施例中,每个索引可以是16位或32位,因此在每个64字节读取中,可能有8、16或32个坐标来自idx流916。[0294]idx流916数据可以作为原始索引以原始格式发送到iau922,并且每个坐标可以是整数值或分数值。iau922(其中索引是分数值)可以拆分小数值以将分数位提供给fracfifo926,以帮助使用ppu930混合表中查找到的周围值。然后iau922可以确定发送到cdru924的一组索引,其中发送的索引的数量可以对应于lut流918可以在单个周期中执行的查找的数量。例如,如果lut流918可以在一个循环中执行例如32次查找(基于查找表中每个值的位宽度),则iau922可以在每次迭代时向cdru924发送32个索引。在一些示例中,例如在从idx流916到iau922的值是整数值的情况下,iau922可以发送每组索引而无需任何处理。然而,在来自idx流916的值是分数值的情况下,iau922可以确定需要查找哪些索引以获得所需的每个周围值(例如,用于1d插值的2个索引或用于2d插值的4个索引)以执行内插或其他操作,从而获得对应于分数值的混合值。例如,在分数值是对应于用于2d查找和插值的(x,y)坐标的(5.3,6.2)的情况下,iau922可以确定查找将发生在(5,6),(5,7)、(6,6)和(6,7),然后ppu930可以混合这些值以生成对应于索引(5.3,6.2)的最终值。例如,这些值可以被同等加权混合,或者可以使用双线性插值来混合,使得更接近(5,6)而不是(6,7)的值被更重地加权以计算(5.3,6.2)的最终值。[0295]可以以对应于在使用idx流916读取的存储器904中的输入缓冲区中的索引顺序的适当顺序将查找集合(例如,lut流918能够在每个读取周期中读取32个值的32个查找索引)发送到cdru924。cdru924然后通过识别如果lut流918中的查找表读取按照从iau922接收的顺序发生将导致的存储体冲突来执行冲突检测和解决,并通过改变索引的顺序来解决存储体冲突以避免存储体冲突。例如,在索引集的查找将导致存储体冲突,并且另一组(例如,稍后或之前的)索引集可用于另一查找周期时,cdru924可从其他查找周期中找到非冲突查找并将非冲突查找与该周期的冲突查找交换。结果,可以避免一个或更多个存储体冲突,从而增加吞吐量。例如,在iau每个周期发送32个索引,并且给定周期的6个索引具有存储体冲突的情况下,cdru924可以从不会导致当前查找冲突的另一个查找中确定多达6个索引,并且可以执行这32次查找——例如,来自原始32的26次查找和来自iau922发送的另一个集合的6次查找。一旦确定了查找(例如,有或没有替代来解决冲突),就可以使用lut流918从存储器904读出查找集合。[0296]为了考虑发生替换的无序查找,cdru924可以使用ctlfifo928向数据合并单元指示来自iau922的每组查找的查找的顺序。例如,对于32次查找的初始集合,dcu可以确定在第一个周期中执行了8个,然后在另一个周期中执行了8个,然后在另一个周期中执行了16个,然后可以确定整个32个集合已被处理,然后可以推送32次查找到ppu930用于后处理,如果适用,或者可以将它们直接推送到out流920以写入存储器904中的输出缓冲区。指示查找的实际顺序的这个附加信息由cdru924确定和读出到lut流918的索引可以通过ctlfifo928传送到dcu932。因此,无论cdru924对从iau922接收到的索引的顺序做出什么改变,dcu932都可以考虑。ctlfifo928可能是有用的,因为通过iau922、cdru924等的周期数是不确定的并且是数据相关的。例如,因为冲突不是提前知道的(例如,因为数据可能是非确定性的),并且是编程的结果,所以没有完全避免冲突的解决方案,所以ctlfifo928有助于指示dcu932作为冲突解决的结果组织查找。[0297]在需要时——例如在需要对查找表值执行附加操作的情况下——ppu930可以为可以被读出到存储器904的每个索引计算最终值。在不需要后处理的情况下,ppu930可能不需要收集结果。例如,在对直接映射到查找表中的位置的整数值的索引执行正常的1d或2d查找的情况下,ppu930和fracfifo926可以不用于执行附加处理。在执行内插(例如,1d查找上的线性或2d查找上的双线性)和/或其他操作时,ppu930和fracfifo926可用于将收集的结果转换为更新的结果或值以写出到存储器904。[0298]在一些实施例中,dlut906可以用于表格重新格式化模式。例如,idx流916和out流920可以用于更新地址以进行访问和/或转置。在这样的示例中,在存储器904中存在缓冲区并且缓冲区中的索引要被转置的情况下,该操作可以被卸载到dlut906(而不是让处理器902的地址生成单元执行转置)。来自处理器902——例如来自地址生成单元——的配置信息可以指示用于从存储器904中的缓冲区读取的读取模式和用于以不同模式将地址写回存储器904的写入模式。例如,在程序员知道许多冲突将由特定访问模式导致的情况下,程序员可以对处理器902进行编程以配置dlut906以执行表重新格式化以打乱数据使得可能发生较少或不发生冲突。[0299]作为另一示例,dlut906可用于超出范围检测哨兵返回值,或超出范围预测关闭输出写入。因此,例如,在idx流916中的坐标在给定图像块之外并且不应该写入对应值的情况下,dlut906可以写出哨兵值,而其可以向处理器902指示何时处理输出缓冲区中的在处理中不依赖或使用哨兵值的信息。在一些实施例中,该哨兵值可以向处理器902指示这些值不被写入存储器,因此被识别为误差值的值可以不被存储。[0300]因此,dlut906可以被实现为子单元的管线,这些子单元一起工作以执行特定任务或操作。每个子单元可以独立运行并通过共享接口与其他子单元通信。关于图9b中,表940图示了在特定操作的处理期间dlut906的各种子单元的任务。[0301]由于这里描述的dlut加速器,处理器管线可以通过将动态冲突检测和解决卸载到解耦的加速器来保持确定性。此外,加速器能够与主处理器(例如vpu)独立且并发地运行,从而减少运行时间。dlut加速器还可以允许从一个公用表中进行1d和/或2d查找,并具有冲突检测/解决。加速器可以执行各种后处理操作,例如具有线性插值的1d查找、具有双线性插值的2d查找、超出范围检测哨兵返回(1d和2d)和/或超出范围预测关闭输出写入(1d和2d)。dlut加速器可以配置为使用可配置的分数位数执行内插,并且可以支持各种索引和数据格式,例如8、16和32位有符号和无符号数据格式以及16和32位1d和2d坐标索引格式。dlut加速器还可以使用可配置的x/y偏移在全局坐标和局部坐标之间进行转换。dlut加速器还可以支持数据流单元从vmem读取索引缓冲区,从vmem执行查找,并将结果(或查找或插值)写入vmem。数据流单元可以支持线性和转置访问的高达2d寻址。为了优化查找/内插所需的周期数,查找索引可能会出现乱序以最小化存储体冲突——例如,如果vmem支持n次查找,加速器可以使用mxn索引来最大化可以在冲突检测中幸存——并且可以执行重复检测以过滤掉保证会产生冲突的重复索引。此外,dlut加速器的2d查找和内插模式可以包括在加速器内根据几个参数自动生成的索引(称为自动索引模式),这与程序员提供索引数据块相反。这将索引的准备工作从主处理器卸载到加速器。[0302]现在参考图9c,本文描述的方法950的每个框包括可以使用硬件、固件和/或软件的任何组合来执行的计算过程。例如,可以通过处理器执行存储在存储器中的指令来执行各种功能。方法950也可以体现为存储在计算机存储介质上的计算机可用指令。方法950可以由独立应用程序、服务或托管服务(独立或与另一托管服务组合)或另一产品的插件提供,仅举几例。此外,关于图9a的系统900描述了方法950,方法950可以由任何一个系统、结构或组件或系统、结构或组件的任何组合执行,包括但不限于本文所述的那些。[0303]图9c是示出根据本公开的一些实施例的用于使用解耦查找表加速器的方法950的流程图。在框b902,方法950包括至少部分地基于使用处理器生成的配置信息来配置dlut加速器的一个或更多个子单元。例如,dlut906可以使用从处理器902接收的和/或从存储器904检索的信息来配置dlut906的子单元。[0304]在框b904,方法950包括从存储器读取流中的索引的第一集合,确定没有存储体冲突的索引的第一子集。例如,iau922可以为cdru924生成一组索引以处理冲突,并且cdru924可以确定该组索引中没有存储器组冲突的子集。[0305]在框b906,方法950包括从存储器读取的索引流的第二组索引中确定不与第一索引子集发生存储体冲突的第二索引子集。例如,iau922可以为cdru924生成另一组索引以处理冲突,并且cdru924可以确定用来自不会导致与第一组索引冲突的索引的第二组的一个或更多个索引替换来自第一组的具有冲突的一个或更多个索引。[0306]在框b908,方法950包括在来自存储器的单个读取周期中使用索引的第一子集和索引的第二子集来执行一个或更多个查找表的查找以检索多个值。例如,dlut906可以使用来自索引集合的值的子集和来自被确定为与第一索引集合的值的子集没有冲突的第二索引集合的值将值从存储器904读入lut流918。[0307]在框b910,方法950包括将多个值写入存储器。例如,来自lut流918的值可以在输出流920中被写入存储器904。在被写出之前,dcu932可以重新组织数据,使得数据与idx流916的输入缓冲区的读出的索引是一对一的顺序。在一些实施例中,ppu930可以在将最终值写出到out流920中的存储器904之前对检索到的值执行一个或更多个操作,例如内插。[0308]用于直接存储器访问系统的硬件定序器[0309]直接存储器访问(dma)系统可以用于从不同的存储器位置移动数据,而不需要中央处理单元(cpu)。例如,dma可以作为数据移动引擎运行,将数据从源移动到目的地——例如,从诸如外部存储器(例如dram)之类的源或诸如l2缓冲区或向量处理单元(vpu)的向量存储器(vmem)之类的内部存储器到目的地,例如vpu。dma系统在实践中可以执行额外的操作,例如但不限于填充帧数据、操纵地址、管理重叠数据、管理不同的遍历顺序以及考虑不同的帧大小。[0310]在数字信号处理中,可以使用多个dma资源来描述在外部存储器和处理器(例如vpu)之间的结构化图块数据移动。例如,这些dma资源可以包括描述符、信道、触发器和/或寄存器。例如,描述符可以描述诸如源位置、目的地位置、行间距、图块宽度、图块高度、圆形缓冲区布置等的图块移动。然而,具有空间和时间依赖性的图像表面的图块数据移动会给用户带来额外的编程模型挑战,并且需要不同的许多dma配置资源。这些图块数据依赖性还可能使处理器(例如,vpu)代码中的控制代码和控制序列复杂化。例如,典型的处理操作可以包括过滤,例如3x3过滤。这种类型的操作引入了空间依赖性,因为每个输出像素将取决于输出像素周围的3x3像素的相应值。在这样的操作中,可以使用3x3的值矩阵来执行过滤,并且该操作可以被称为空间相关操作。在实践中,帧的每个图块可能具有相同的大小——例如,64x64——以减少编程挑战。然而,如果在64x64图块上使用3x3过滤器,则相邻块将需要向上和向下额外的像素——例如,如图10c的阴影区域所示。因此,此信息需要在dma资源中进行编码,以允许跨图块正确获取数据——这会导致完成额外的编程负担。[0311]参考图10a-10g,图10a-10g示出了当使用dma系统时数据移动的各种挑战。例如,图10a的可视化1000可以对应于填充帧数据。在可视化1000中,可以有九个部分,左上部分、上部分、右上部分、左部分、中心部分、右部分、左下部分、下部分和右下部分。在这样的示例中,每个部分可以包括一个或更多个图块——例如,左上部分可以包括一个图块,而顶部部分可以包括例如四个图块。因此,为了准确地定义该分段,在现有方法中,可以使用九个描述符(例如,每个部分一个)、三个信道(例如,一个用于左列、一个用于中心列、一个用于右列)和三个触发器(例如,每个信道一个)。[0312]关于填充,例如,由于空间相关性,当对帧的图块或部分的边界附近的数据执行操作时,dma系统可以填充值或为图像边界外部的像素制造值。这可能是因为在某些实施方式中,为图像请求存储器区域之外的数据可能会触发故障。因此,dma可用于在从相应的存储器区域获取图像数据之后填充或制造值以避免触发故障。如果没有填充,数据的结构可能与内核大小不匹配,例如,如果执行过滤操作。然后可以将获取的具有附加填充值的数据发送到目的地(例如,vpu),以便vpu能够根据其配置处理数据,并且可以在整个(填充的)帧上以相同的方式处理数据。当填充时,可以使用零填充(例如,在每个新数据点包括零值的情况下)、可以使用重复值(例如,从获取的数据中复制相邻像素的像素值)和/或可以使用另一种填充机制。此外,填充可以添加到帧的任何侧面,并且可以针对不同侧面添加不同的填充。例如,在图10a中,填充区域1002在右侧可以大于帧的左侧、顶部或底部。在将数据从源移动到目的地(例如从存储器到vmem)时,填充会增加dma编程的复杂性,并且在处理更大的填充帧时也会增加vpu编程的复杂性。[0313]现在参考图10b,图10b的可视化1010对应于dma系统的地址操作。例如,可以操纵和编程不同的描述符地址以获取连续的帧数据。为了使dma有效执行,数据移动的地址描述可能是连续的。因此,每个描述符的地址都可以被操纵,并且这种操纵必须从一个描述符传递到另一个描述符。例如,当如图所示填充值时,可以操纵每个描述符的起始地址以使提取的数据包括填充值。为此,程序员使用起始地址和图块宽度以及每个部分中的图块数量,并使用此信息生成下一个描述符地址。例如,第一个描述符可以导致从左上角开始数据的获取,然后是顶部,然后是右上角,然后是左边,然后是中心,等等,如图10b中的箭头所示。但是,在将数据移动到目的地(例如vmem)时,起始描述符地址会增加dma编程的复杂性。[0314]作为另一个示例,并且关于图10c,为了确保连续数据处理,可能需要dma系统从相邻图块读取垂直和水平重叠的数据。例如,如图10c的阴影区域所示,可能需要在同一操作中读取来自左上部分的拼贴和顶部中的相邻拼贴的重叠数据。类似地,可能需要在同一操作中读取来自左上部分的图块和左侧部分中的相邻图块的重叠数据。为此,需要更新或移动描述符以包括重叠部分。例如,基本描述符可能包括顶部开始处的地址,但为了从左上部分的相邻图块捕获数据,需要更新顶部的描述符(例如,移动到左侧)以从左上角的图块中捕获数据。这种更新需要额外的编程复杂性,尤其是随着描述符数量的增加。[0315]此外,关于图10d-10f,dma系统可能需要支持不同的遍历顺序,以便以连续的方式从存储器中读取数据。例如,无论是执行滤波、卷积、矩阵乘法和/或其他操作,相关联的遍历顺序可能不同。考虑到这一点,可以支持各种遍历顺序,例如图10d中所示的那些,其包括从左上开始的光栅遍历顺序(可视化1030)、从右上开始的光栅遍历顺序(可视化1032)、从左下开始的光栅遍历顺序(可视化1034)和/或从右下开始的光栅遍历顺序(可视化1036)。类似地,关于图10e的可视化1038,对于立方体图像,dma系统可以支持各种立方体遍历顺序。图10f示出了可以由dma系统支持的各种垂直挖掘遍历顺序,例如从左上开始的垂直挖掘遍历顺序(可视化1040)、从右上开始的垂直挖掘遍历顺序(可视化1042)、从左下开始的垂直挖掘遍历顺序(可视化1046),和/或从右下开始的垂直挖掘遍历顺序(可视化1048)。为了支持将数据移动到存储器(例如vmem)的这些不同遍历顺序中的每一个,增加了dma编程的复杂性。[0316]关于图10g,dma系统可能还需要支持不同的帧大小,例如移动具有不同大小的多个帧(例如,luma/chroma复合或不同的金字塔级别)。例如,处理器(例如vpu)可以处理不同大小的帧以生成最终所需的输出。图10a图示了对应于用于光流估计操作的帧的金字塔处理的示例可视化1048。在这样的示例中,像素的移动可以首先计算较小的帧大小,然后使用来自较小帧大小的输出的提示来计算较大的帧大小,然后使用来自较大帧大小的提示来计算更大的帧大小,等等。因此,dma系统可以支持获取各种帧大小的帧数据,但这种能力需要dma系统的额外编程复杂性。例如,必须针对每个不同的帧大小对描述符进行编程或更新。[0317]为了简化dma系统支持的这些各种操作的编程,本公开的dma系统和方法可以使用与dma引擎相结合的硬件定序器来解决数据移动问题。例如,完整图像的数据移动可以在硬件排序模式中显式和完整地描述,其具有处理图块排序(触发)、填充、重叠(偏移)、遍历顺序和不同的帧大小的简化编程模型(例如,帧的图像结构,例如图10i所示)。硬件定序器可以减少dma资源使用(例如,减少所需的描述符、触发器、信道等的数量),从vpu卸载用以进行vpu控制处理的控制,并降低dma编程的复杂性。这可以通过从本地可编程存储器以命令序列的形式加载图像或帧描述符视图(例如,如图10i所示)来完成。这些硬件序列命令可以合并导致编程复杂性增加的每个操作,如本文所述——包括图像填充、图块重叠或偏移、帧偏移、图像遍历顺序和图块粒度中的图像大小。除了描述符信息(例如,从图像命令或从单独的描述符存储器或sram)之外,硬件定序器还可以从存储器中读取图像命令,并对图块移动进行排序以遍历和绘制整个帧。[0318]现在参考图10h,图10h示出了根据本公开的一些实施例的包括硬件定序器的dma系统1050。应当理解,这里描述的这种和其他布置仅作为示例阐述。除了所示的那些之外或代替所示的那些,可以使用其他布置和元素(例如,机器、接口、功能、命令、功能分组等),并且可以完全省略一些元件。此外,这里描述的许多元件是功能实体,它们可以实现为离散或分布式组件或与其他组件结合,并以任何合适的组合和位置实现。在此描述为由实体执行的各种功能可以由硬件、固件和/或软件来执行。例如,可以通过处理器执行存储在存储器中的指令来执行各种功能。在一些实施例中,系统1050可以被包括在和/或可以包括与图13a-13d的示例性自主车辆1300、图14的示例计算设备1400和/或图15的示例数据中心1500的组件、特征和/或功能类似的组件、特征和/或功能。[0319]系统1050可以包括dma引擎1056、寄存器控制1058、硬件(hw)定序器控制器1060、描述符sram1052和/或硬件(hw)定序器命令sram1054。现有系统可以仅包括dma引擎1056和存储帧描述符的描述符sram1052。因此,如本文所述,当从源向目的地发送数据时,dma引擎1056之前需要执行所有的填充、地址操纵等操作,并且需要vpu或其他源来执行通过与dma系统握手进行排序(例如,以vpu作为主节点,dma作为辅助节点)。在这样的示例中,dma引擎1056将在图块级别上处理,使用帧的各个部分的描述符,每个部分包括一个或更多个图块,以便一次检索一个图块以发送到目的地,并且随后的图块将是基于描述符而被检索,描述符基于来自vpu的指示以检索下一个图块。[0320]然而,使用图10h的系统1050可以实现在帧级别处理帧——例如,单个描述符可以用于图10h中所示的帧,其以前需要九个描述符。因此,在实践中,当dma引擎1056试图从描述符sram1052(或更一般地,描述符存储器1052)加载描述符时,hw定序器控件1060可以拦截描述符加载并使用命令序列处理结构来处理多个帧、图块行/列和多个描述符。为此,可以使用帧格式1070(图10i),其通过在硬件中而不是在图块级别处理图块行/列(取决于遍历顺序)来描述更高级别的帧。例如,代替填充图块,可以使用帧格式1070填充整个帧,从而用单个填充命令填充许多帧。因此,可以理解整个帧,例如在哪里填充、在哪里重叠、如何自动操纵地址等等。此外,由于dma引擎1056可以直接从描述符sram1052中提取描述符,而无需硬件定序器控制1060的干预,因此对于可能无法从hw定序器控制1060受益的操作仍可支持传统格式。[0321]hw定序器控件1060可以例如作为读取hw定序器命令sram1054(或更一般地hw定序器命令存储器1054)的状态机来操作,其中存储了包括定序命令的帧格式1070。处理控制器——例如r5处理器、cpu、arm处理器等——可以使用来自更高级别引擎的编程代码和/或设置来编程或配置硬件定序器命令sram1054和描述符sram1052。[0322]描述符sram1054可以包括一个或更多个描述符,这些描述符可以定义图块尺寸(例如,图块宽度dx和图块高度dy)、图像或帧的起点(例如,左上、右下等)、触发器类型和/或有关描述符的扫描类型的其他微信息。[0323]hw定序器命令sram1054可以存储将帧定义为一个整体的帧格式1070、帧的大小、帧填充等。例如,帧格式1070可以包括用于报头控制的帧报头,偏移控制和填充控制,并且可以包括帧的列或行的列报头和/或行报头(例如,垂直扫描模式的列报头和光栅扫描模式的行报头)。帧头控制可以包括帧重复因子以识别特定帧将被重复多少次,以及描述符行和/或描述符列的数量。帧报头偏移控制可以包括帧图块偏移(例如,从图块到图块的偏移)和帧偏移(例如,可以使用单个信道读取的两个或更多个帧之间的偏移,例如yuv帧可被处理以包括三个单独的平面)。帧填充报头可以指示要在帧级别上添加多少行或像素的填充(与现有方法的每个图块级别相反),例如填充帧的左侧、帧的顶部、帧的右侧和/或帧的底部,从而填充整个框架,而不是在图块级别填充帧的每个部分内的每个图块。[0324]列报头可用于遍历顺序为垂直的情况,而行报头可用于遍历顺序为光栅或水平的情况。列报头和/或行报头可以包括列或行偏移量(例如,每列或每行之间的偏移量)、列或行重复因子(例如,跨帧重复多少次相同的列或行的处理类型,例如n-1次,其中n是处理列或行的次数),以及用于每列或行的描述符的数量(例如,单个描述符可用于重复跨行或列的相同图块,或者第一个描述符可用于遍历行的一部分,而第二个描述符可用于遍历行的另一部分,依此类推)。描述符id可以被描述为使得描述符——例如,存储在描述符sram1052中——可以被拉出并用于描述行或列。例如,描述符id可以指示将哪个描述符用于特定列和/或行,以及描述符被重复多少次(例如,n-1次,其中n是次数描述符总共使用的次数)。在实施例中,可以有一组描述符(例如,64个),并且描述符id可以用于确定哪个描述符应该用于特定的列和/或行。以这种方式,硬件定序器控制器1060查看位于来自描述符sram1052的基本描述符之上的帧的上层结构,这允许简化dma引擎1056实现相同数据传输所需的资源。此外,硬件定序器控件1060可以提前预取图块(例如,使用寄存器控制1058)以减少延迟,并且图块数据可以在dma引擎1056请求时立即可用。[0325]在操作中,hw定序器控件1060可以从hw定序器命令sram1054中读取图像结构(例如,帧格式1070)以及来自描述符sram1052的描述符信息,并且可以组合该信息以对dma引擎1056的帧进行排序。因此,hw定序器控制1060可以读取图像结构,拉入描述符和对具有正确描述符格式的dma引擎1056的帧进行排序,而不是要求对每个描述符、触发器、信道等单独编码dma引擎1056。在实施例中,寄存器控制1058可以帮助控制遍历顺序、预取和/或其他帧寻址控制。hw定序器控件1060进一步简化了vpu的代码,使得vpu不必考虑多个信道。相反,vpu可以请求一个图块,然后是下一个图块,然后是下一个图块,等等。hw定序器控件1060了解帧中的当前位置,因此了解要为dma引擎1056提取的下一个图块,并且dma引擎1056不必在内部跟踪该信息。[0326]系统1050因此可以与先前的方法向后兼容,因为系统仍然可以支持使用各种描述符、触发器、信道等,但也可以在帧级别上理解以降低复杂性。系统1050可以支持具有不同像素填充大小的帧的所有角落处的图像填充、垂直和/或水平重叠图块以允许vpu访问相邻的图块以沿图块边界进行处理,以及以不同的遍历顺序遍历帧。此外,系统1050可以支持由硬件定序器控件1060在vmem目的地处进行的自动图块偏移调整。因为帧中的描述符是通过硬件链接的,所以用户不需要将描述符链接或拼接在一起。硬件定序器控件1060可以管理跨帧的描述符/图块的地址排序而无需额外的编程复杂性,并且硬件定序器控件1060可以预取图块以提高性能。[0327]在一些实施例中,描述符可以包括在图像或帧结构中,而不是单独存储在描述符sram1052中。例如,在没有实现传统兼容性的情况下,整个排序结构和图块结构可以在框架结构中进行描述。在这样的示例中,图10i的帧格式可用于包括描述符的附加信息,例如图块宽度、触发类型等,以导致与当描述符单独存储在描述符sram1052中时相同的信息可用于hw定序器控件1060。[0328]参考图10j,图10j是根据本公开的一些实施例的当针对光栅扫描序列实施时的图10的帧格式1070的示例。例如,帧格式1070a是光栅模式中帧格式的一个示例,具有帧地址处理,使用单信道、单触发器和单描述符。在这个例子中,图块结构可以是16x8。图10k是根据本公开的一些实施例的在光栅扫描序列中具有硬件排序的这种图块结构的示例,其中使用示例帧格式1070a进行帧地址处理。例如,对于每个图块行,可以使用相同的描述符(例如图块维度)(如在可视化1072中由“d1”指示),以便沿每行(从c1到c16)应用相同的图块16次),然后从上到下重复8行(从r1到r8)。该序列可以包括20个字节,如帧格式1070a所示,并且每行可以具有n*2+字节,其中n代表每行的条目数(如图10j所示)。因此,为了如可视化1072中所示对帧进行排序,帧格式1070a可以包括无帧重复、描述符行的数量可以为零、无图块偏移、无帧偏移、左侧(pl)、右(pr)、上(pt)、下(pb)的3行像素的帧填充,该行可以重复7次(共8行),每行的偏移量可以是图块高度(ty)(使得每一行偏移图块高度),一个描述符可以与描述符idd1一起使用,并且描述符可以在每一行中重复15次(总共16次)。因此,在实践中,hw定序器控件可以使用来自描述符sram1052的对应于d1的描述符(其包括图块高度和图块宽度),并且可以使用来自存储在hw定序器控件sram1054中的帧格式1072的图像结构,为目标处理器(例如,vpu)逐图块(每行16个图块)、逐行(从r1到r8)对图像图块进行排序。这样,可以使用单个描述符、单个触发器和单个信道,从而降低编程复杂性,同时还允许dma系统1050成为dma系统1050和vpu交互中的主要或控制组件。[0329]在一些实施例中,作为hw定序器控件1060的扩展,dma触发模式可用于通过使dma系统1050命令描述符序列来减少对vpu编程的软件干预。例如,dma系统1050可以从外部存储器读取图像,对图像进行拼贴,并对用于vpu的图块进行序列处理。为了促进这一点,vpu可以公开开始(start)和完成(done)信号。vpu启动可以由dma系统1050驱动,并且当vpu完成对指令块的处理时,vpu可以向dma系统1050发送完成信号。因此,dma系统1050(例如,硬件定序器控件1060)并且vpu可以参与其中dma系统1050是主要节点并且vpu是次要节点的握手机制。这种dma触发模式可以最小化vpu图块控制开销并简化dma引擎1056的编程模型。例如,可能不需要用于双缓冲dma数据移动的特定代码,并且dma内核代码可以独立于vpu内核代码。因此,dma触发模式简化了vpu代码,因为dma系统使用hw定序器控制1060处理图块排序。下面的示例代码说明了dma触发添加之前和之后的vpu代码。[0330]之前:[0331][0332]之后:[0333][0334][0335]结果,在vpu之前一直请求将图块移动到vmem的情况下,现在,因为hw定序器控件1060控制排序,dma系统1050可以触发将图块移动到vmem和vpu作为目标。以这种方式,dma系统1050可以提前获取要由vpu处理的数据,并且当vpu指示处理完成时,dma系统1050可以使下一个要处理的数据立即可用(例如,在vmem中),并且可以向vpu指示相同的内容。[0336]当执行一个或更多个帧的处理时,hw定序器控件1060可以从描述符sram1052中检索一个或更多个描述符(其可以指示图块尺寸、触发类型等),并且可以从硬件定序器命令sram1054检索图像结构。hw定序器命令1060——结合寄存器控制1058——然后可以根据遍历顺序并使用第一(并且仅在实施例中)描述符开始遍历第一行或第一列,以及然后可以基于在使用两个或更多个描述符的情况下遇到的重复次数(例如,1-n)移动到第二个描述符,依此类推。当每个图块被确定时,dma引擎1056可以从源数据中检索图块数据并且将图块数据写入目的地数据(例如,在vmem中)。一旦数据被写入数据目的地,处理器(例如,vpu)可以由硬件定序器控件1060通知数据可供处理器开始处理。然后,在处理期间,dma系统1050可以基于来自硬件定序器控件1060的序列获取下一个数据图块并将数据写入数据目的地,使得当处理器指示处理完成时,硬件定序器控件1060可以向vpu指示(通过握手机制)下一个要处理的数据可用,依此类推,直到处理完成。[0337]现在参考图10l,本文描述的方法1080的每个框包括可以使用硬件、固件和/或软件的任何组合来执行的计算过程。例如,可以通过处理器执行存储在存储器中的指令来执行各种功能。方法1080也可以体现为存储在计算机存储介质上的计算机可用指令。方法1080可以由独立应用程序、服务或托管服务(独立或与另一托管服务组合)或另一产品的插件提供,仅举几例。此外,方法1080是关于图10h的系统描述的,方法1080可以由任何一个系统、结构或组件或系统、结构或组件的任何组合执行,包括但不限于本文所述的那些。[0338]图10l是根据本公开的一些实施例的包括硬件定序器的dma系统的方法1080的流程图。在框b1002,方法1080包括从描述符存储器中检索图块结构以及从硬件定序器命令存储器中检索对应于帧的帧结构。例如,硬件定序器控制1060可以从描述符sram1052中检索描述符。[0339]在框b1004,方法1080包括对从源存储器中的帧的图块的检索进行排序。例如,硬件定序器控件1060——在实施例中与寄存器控制1058组合——可以根据帧(或图像)结构和来自描述符的图块描述来对dma引擎1056从源存储器的图块检索进行排序。[0340]在框b1006,方法1080包括将检索到的对应于图块的数据写入目的地存储器。例如,dma引擎1056可以将检索到的对应于图块的数据写入目标存储器(例如,vmem)以供目标处理器(例如,vpu)处理。[0341]在框b1008,方法1080包括向与目的地存储器相关联的处理器提供检索到的数据被存储在目的地存储器中的指示。例如,hw定序器控件1060可以向处理器指示下一个图块的数据已准备好进行处理。[0342]在框b1010,方法1080包括接收对检索到的数据的处理完成的指示。例如,在处理完成后,处理器可以向dma系统1050指示处理完成,此时下一个数据图块可以被加载(或可能已经被预加载)到目的地存储器,并且dma系统1050可以向处理器指示相同。[0343]使用vpu为区域相关数据移动配置dma系统[0344]当获取已知数据模式时,处理控制器可以配置直接存储器访问(dma)系统并且处理器(例如,向量处理单元(vpu))可以触发dma并对其进行排序。然而,在处理不规则或未知数据模式的不同数据点或特征时,可能会在重新配置数据移动时引入挑战,因为特征或对象位置是动态计算的。例如,对象跟踪算法、特征跟踪算法、对象检测算法、使用可变大小的感兴趣区域(roi)的深度学习算法和/或其他区域相关的数据移动算法需要动态调整地址和数据对,以便dma系统可以检索适当的信息供处理器(例如vpu)进行处理。在传统系统中,当获取未知数据模式时——例如在对象跟踪中——处理控制器(例如,用于控制可编程视觉加速器(pva)的r5处理器核心)可能需要中断来干预处理周期以确定由处理器(例如,vpu)计算的更新的信息并重新配置dma并用于下一次迭代。因此,处理控制器向例如跟踪算法引入了额外的延迟,这需要较短的响应时间。[0345]为了解决需要处理控制器干预的传统系统的缺点,本公开的系统和方法可以使用dma和处理器(例如,vpu)来配置紧密耦合的处理循环,该处理循环允许dma基于处理器的输出重新配置其描述符。因此,dma可以在运行时动态重新编程,以处理某些需要区域相关数据移动的算法。此vpu配置模式可用于更新dma的描述符,以基于运行时vpu计算跟踪特征数据(包括位置)。因此,vpu可以指定存储器(例如vmem)中的地址和数据对列表,然后触发dma更新其自己的描述符,以从具有新计算地址的区域收集数据。通过依赖vpu和dma之间的接口,一旦处理控制器最初配置vpu和dma以开始处理,则可能不需要处理控制器(例如,r5或arm处理核心)进行干预。这种用于更新功能描述符的批量、快速和同步mmio访问因此减少了对象跟踪、特征跟踪、对象检测、深度学习和/或具有区域相关数据移动的其他算法的延迟。[0346]现在参考图11a,图11a示出了根据本公开的一些实施例的用于使用向量处理单元(vpu)配置直接存储器访问(dma)系统的过程的数据流程图1100。应当理解,这里描述的这种和其他布置仅作为示例阐述。除了所示的那些之外或代替所示的那些,可以使用其他布置和元素(例如,机器、接口、功能、命令、功能分组等),并且可以完全省略一些元素。此外,这里描述的许多元素是功能实体,它们可以实现为离散或分布式组件或与其他组件结合,并以任何合适的组合和位置实现。在此描述为由实体执行的各种功能可以由硬件、固件和/或软件来执行。例如,可以通过处理器执行存储在存储器中的指令来执行各种功能。在一些实施例中,过程1100可以由包括与图13a-13d的示例性自主车辆1300、图14的示例计算设备1400和/或图15的示例数据中心1500类似的组件、特征和/或功能的系统执行。[0347]执行过程1100的系统可以包括处理控制器1102(例如,r5处理器、arm处理核心、指令集架构(isa)、x86架构等)、直接存储器访问(dma)系统1104、向量处理单元(vpu)1108(或另一种处理器类型)、向量存储器(vmem)1110(或另一种存储器类型)和描述符ram1106。实际上,vpu配置模式可以配置dma通过将一系列不连续的地址/数据对写入dma描述符sram来获取描述符。可以关于示例特征或对象跟踪算法来描述过程1100。然而,这并非旨在进行限制,并且过程1100和底层系统可以用于执行任何类型的算法,例如具有区域相关数据移动的那些算法。[0348]例如,第一操作可以包括处理控制器1102配置dma1104和vpu1108以对一些数据执行处理,然后触发dma1104和vpu1108两者进行处理。例如,处理控制器1102可以将描述符ram1106加载到存储器中用于处理的起始点,并且可以针对vpu1108将对数据执行的特定类型的操作配置vpu1108的寄存器。[0349]对于第二操作,vpu1108可以触发dma1104以读取vmem1110中的初始特征数据点。例如,为了开始工作,vpu1108需要来自dma1104的数据,因此vpu1108配置dma1104在vpu1108知道检索数据以供处理的位置将数据点加载到vmem1110。[0350]在第三操作中,vpu1108可以处理当前特征数据集,并且计算下一个被跟踪对象或特征位置。结果,vpu1108现在可能已经计算了被跟踪特征或对象的新位置或更新位置。[0351]在第四操作中,vpu1108可以使用vpu配置格式(参照图11b描述)用更新的位置更新vmem1110,然后可以触发dma1104更新其在描述符ram1106中的描述符。例如,图11b是说明根据本公开的一些实施例的由vpu写入向量存储器(vmem)中并由dma系统读取的vpu配置格式的表1120。例如,对于每个地址/数据对,格式可以包括四个字节的地址和四个字节的数据。[0352]在第五操作中,dma1104可以更新描述符ram1106中的描述符,以便为vpu1108的下一次处理迭代检索适当的数据。例如,dma1104可以读取地址/数据对形成vpu配置格式以使用更新的位置修补操作描述符。在实施例中,特征点和描述符之间可以存在一一对应关系,使得每个被跟踪的特征、对象或点可以包括相关联的描述符。这样,每个跟踪的特征、对象或点的地址/数据对可以使用单独的描述符随时间更新。[0353]在第六操作中,dma1104可以使用描述符ram1106中新更新的描述符来获取位置的新特征数据。例如,dma1104可以向vpu1108指示描述符已经被更新,并且vpu1108可以触发dma1104将新数据读取到vmem1110,等等。[0354]结果,在处理控制器的第一次配置操作之后,可以重复操作二到六以形成需要处理控制器干预的紧密同步的vpu配置循环——从而减少延迟以解决跟踪或检测算法所需的短响应时间。此外,因为dma1104正在用新的更新地址覆盖存储器中的地址,所以dma1104正在更新dma1104需要查看以确定接下来要获取什么的代码。通过这样做,与依赖控制总线来用地址和数据更新寄存器的传统系统相比,吞吐量增加了。因此,实现了定义地址/数据协议的好处,其中可以更新具有可变数据量的可变地址位置以及如何更新地址/数据对。这允许dma1104——其宽度可能大于控制总线的宽度(例如,分别为512位和32位)——更新至(例如但不限于)8个地址/数据对一个时间(其中每个地址/数据对使用8个字节定义,如图11b所示)。[0355]此外,尽管dma被示为使用过程1100的vpu配置模式被更新,但是可以更新系统的附加或替代元件或组件。例如,vpu1108的指令高速缓存可以使用类似方法使用vpu来更新。作为另一个示例,可以编写更新的硬件定序器程序以通过给出地址数据来更新硬件定序器存储器。这实质上将包括用新程序编写硬件定序器ram——例如用于图10h的硬件序列控制器1060的硬件定序器ram1054。[0356]现在参考图11c,本文描述的方法1150的每个框包括可以使用硬件、固件和/或软件的任何组合来执行的计算过程。例如,可以通过处理器执行存储在存储器中的指令来执行各种功能。方法1150也可以体现为存储在计算机存储介质上的计算机可用指令。方法1150可以由独立应用程序、服务或托管服务(独立或与另一托管服务组合)或另一产品的插件提供,仅举几例。此外,关于图11a的系统描述了方法1150,方法1150可以由任何一个系统、结构或组件或系统、结构或组件的任何组合执行,包括但不限于本文所述的那些。[0357]图11c是根据本公开的一些实施例的使用vpu配置dma系统的方法1150的流程图。在框b1102,方法1150包括使用处理器并且至少部分地基于使用dma系统写入存储器的第一数据来计算对应于被跟踪特征的一个或更多个第一更新位置的第一输出。例如,vpu1108可以访问来自使用dma1104写入vmem1110的来自vmem1110的数据,并且可以处理数据以计算对应于被跟踪特征、对象、点等的一个或更多个对象位置。[0358]在框b1104,方法1150包括使用处理器更新存储器以包括表示对应于一个或更多个第一更新位置的一个或更多个地址/数据对的第二数据。例如,在计算一个或更多个位置之后,vpu1108可以用一种格式的地址/数据对更新vmem1110,例如关于图11b描述的格式。[0359]在框b1106,方法1150包括使用dma系统并且至少部分地基于所述一个或更多个地址/数据对来更新对应于被跟踪特征的一个或更多个描述符。例如,dma1104可以访问来自vmem1110的地址/数据对并且使用地址/数据对来更新描述符ram1106中的描述符以用于下一次读取操作。[0360]在框b1108,方法1150包括使用dma系统并且至少部分地基于所述一个或更多个描述符,将第三数据写入存储器。例如,dma1104可以将更新的数据从对应于使用描述符识别的地址/数据对写入vmem1110。[0361]在框b1110,方法1150包括使用处理器并至少部分地基于第三数据计算与跟踪特征的一个或更多个第二更新位置相对应的第二输出。例如,一旦更新的数据在vmem1110中,vpu1108可以计算对应于跟踪的特征、对象、点等的下一组更新的地址/数据对,并且这个过程可以重复直到处理完成。[0362]可编程视觉加速器(pva)中的永久故障检测[0363]在诸如自主和半自主机器应用之类的安全关键应用中,对于永久故障检测和隔离存在严格要求。例如,当在机器中执行深度学习、计算机视觉、传感器处理和/或其他应用程序时,必须在分配的时间预算内定期执行永久性故障检测,以便进行准确的测试,同时也允许应用程序正确执行——例如,低延迟。关于汽车安全完整性等级(asil)d,在自主或半自主机器中执行的应用程序可能需要90%或更多的永久性故障覆盖率。为此,可能需要端到端的覆盖,具有低延迟,同时满足每个特定应用程序的运行时间预算。传统方法使用内置自测试(bist)来识别故障,但这些bist技术要么不包括足够的覆盖范围,要么在系统中引入过多的延迟,和/或不满足某些应用程序的运行时间预算。[0364]为了解决这些传统方法的缺陷,本系统和方法可以执行多输入签名寄存器(misr)bist——例如,执行片上系统(soc)的可编程视觉加速器(pva)的故障检测。例如,在本公开的各种实施例中,pva可以包括一个或更多个dma系统和一个或更多个vpu,它们使用一个或更多个处理控制器(或控制处理器)(例如r5处理器和arm处理器、cpu和/或类似设备)来控制。因此,pva的每个组件可能需要测试,并且本系统和方法执行misrbist以端到端方式检测永久性故障。以这种方式,可以执行永久故障检测以覆盖控制和数据逻辑的端到端块,向安全处理器直接报告误差以减少延迟,并为特定应用程序定制以满足相关联的运行时间预算。[0365]在各种实施例中,misr可以在pva中用于实现用于永久故障检测的软件逻辑bist。misr硬件(在此关于图12a和/或12b)可以包括循环冗余校验(crc)硬件,其被初始化(例如,使用已知的种子值)使用处理控制器。在执行pva应用程序时,处理控制器可以分配一部分时序预算(例如,约10%或更少的时序预算)以运行具有已知输入的已知软件misr测试,该已知输入具有确定性预计算输出,确定性预计算输出具有正确签名或黄金价值。例如,在时序预算对应于每秒30帧的情况下,可以将对应于3个或更少帧的时序预算分配给misr测试。在分配的时间,处理控制器可以启动misr测试并等待测试完成以终止misrcrc计算。一旦测试完成,misr硬件可能会读回最终的crc值,并根据预先计算的黄金值检查最终的crc值。在不匹配的情况下,misr硬件可以将误差直接报告给soc的安全处理器,以采取进一步措施来处理安全误差——例如,导致应用程序的输出被忽略,解决或解决永久性故障等。[0366]因此,dma块中的misr硬件可以监控pva的高级可扩展接口(axi)主端口上的一个或更多个(例如,在实施例中的所有)的一个或更多个(例如,在实施例中的所有)事务。通过检查来自pva的所有输出级,在实施例中,可以针对可能破坏输出级的永久性缺陷(例如,输出信息)检查pva的安全完整性,这些永久性缺陷可能会在执行应用程序时被pva和/或另一个发动机消耗。misr硬件因此可以跨pva的不同块(例如,处理控制器、vpu和dma系统)检测误差,因为这些组件都在产生输出级时协作和交互。misr硬件中计算的签名可以表示在misr测试期间这些不同pva块的状态。[0367]在实施例中,misr方案可以包括对离开axi主端口的写地址(例如,40位控制)和写数据(例如,512位数据)两者的crc校验。该特征可以允许将控制路径故障(例如,寻址误差)与数据路径故障(例如,计算误差)隔离开来。由于misr硬件的配置(如本文所述),每个dmaaxi端口都可能能够被检查。在实施例中,控制位可用于禁止写入参与misr计算的所有信道(channel)的地址和数据输出,以便节省存储器子系统中和存储器分配期间的带宽消耗。此外,misr方案可能包括每个通道的控制寄存器位,以从misr计算中排除或屏蔽(mask)特定信道——例如,隔离非安全信道。在实施例中,dma可以使用ieee802和mpegcrc-32原始多项式来计算misrcrc:x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1。misrset寄存器可用于设置地址和数据crc计算的初始crc值(例如,种子值)。misrref寄存器可用于比较地址和数据crc计算的crc值。[0368]为了支持512位数据的misr,可以应用8:1位数据压缩——例如,可以通过8》1异或(xor)操作将每个数据字节压缩为1个数据位,以形成2x32位消息数据。为了支持misr40位地址,可以压缩9个最高有效位——例如,可以通过9》1xor操作压缩9个最高有效位以形成32位消息地址。测试模式和指令的变化可用于覆盖与压缩相关的混叠。出现混叠的可能性可能很低,因为当输出图像上的一个字节中存在偶数个误差时,误差失败不会产生地址crc误差。此外,混叠可能不太可能,因为可以在整个misr测试期间在相同偶数误差位位置上具有相同模式的输出图像上计算参考crc。在实验过程中,混叠被证明会导致平均0.25%的覆盖损失。在实施例中,由于总线的宽度(例如,512位),具有这种低混叠的数据压缩是有价值的,并且如果没有压缩,misr测试可能无法满足系统的延迟或运行时间预算。[0369]misr定时器寄存器可用于使misr计算超时,并且misr定时器寄存器可在每个axi时钟上递减。如果出现导致misr测试挂起的故障,超时功能可能会有所帮助,这可能会阻止misr硬件报告误差。当misr测试结束时,处理控制器可以使用软件事件来停止misr计算。dma系统可以将misrref值与misr测试的数据和地址输出的misrval值进行比较,并且dma硬件可以根据比较结果更新misr状态寄存器。例如,misr状态寄存器可以包括以下值之一:0:空闲;1:完成:失败数据;3:忙;4:完成:地址和数据都失败;5:完成:失败超时;6:rsvd;和7:完成:通过。在misr超时误差的情况下,dma可以向安全处理器生成超时信号,并且在数据和/或地址中的crc校验误差的情况下,dma可以向安全处理器断言安全误差。[0370]参考图12a,图12a是根据本公开的一些实施例的用于执行可编程视觉加速器(pva)的循环冗余校验(crc)计算的内置自测试(bist)系统图。应当理解,这里描述的这种和其他布置仅作为示例阐述。除了所示的那些之外或代替所示的那些,可以使用其他布置和元素(例如,机器、接口、功能、命令、功能分组等),并且可以完全省略一些元素。此外,这里描述的许多元素是功能实体,它们可以实现为离散或分布式组件或与其他组件结合,并以任何合适的组合和位置实现。在此描述为由实体执行的各种功能可以由硬件、固件和/或软件来执行。例如,可以通过处理器执行存储在存储器中的指令来执行各种功能。在一些实施例中,misr硬件1250可以包括与图10h的dma系统1050、图13a-13d的示例自主车辆1300、图14的示例计算设备1400、和/或图15的示例数据中心1500类似的组件、特征和/或功能。例如,misr硬件1200可以包括在pva的dma块中,如图10h所示。这样,misr硬件1200可以在数据移动的输出级上操作,并且寻址(或控制)可以接入dma引擎1056的输出。如图12a所示,可能有16个axi数据信道和16个axi地址(或控制)信道。然而,这不旨在进行限制,并且可以根据实施例使用任何数量(和/或类型)的数据和/或地址信道。[0371]在操作中,处理控制器可以控制dma系统1050和misr硬件1200——以及系统的一个或更多个处理组件,例如vpu。在对dma系统1050执行misr测试时,在实施例中,测试代码可以包括全0、全1、交替的0和1、和/或随机代码序列。以这种方式,可以实现dma系统1050的高覆盖率。例如,当测试vpu时,测试代码可以包括应用特定的或定制的代码。例如,在测试特定应用程序的覆盖率期间,可以确定使用的vpu的组件或部分(例如,寄存器、逻辑等),并且可以生成测试代码,以便那些特定的组件或部分的vpu包含在执行测试代码中。例如,这些具有不同指令的随机数据可以包含在测试代码中,以便通过不同的指令对测试进行排序,以使用vpu逻辑的不同区域。以这种方式,总体上增加了vpu的覆盖范围,特别是在vpu上执行的特定应用程序的覆盖范围。通过以这种方式执行dma和vpu测试,并且由于处理控制器参与了各种组件(例如,dma系统1050和vpu)之间的控制和交互,因此处理控制器可以具有高覆盖率,因为数据移动的输出和寻址受到处理控制器交互的影响。[0372]在测试期间,在使用不同代码模式的情况下,代码模式可以以交替模式使用,或者一个代码可以用于第一时间帧(例如,相当于30fps的时间),另一个代码用于第二时间帧(例如,相当于30fps的时间),第三时间帧的另一个代码(例如,相当于30fps的时间),等等。例如,在dma代码示例中,0的代码可用于第一时间帧,然后1的代码用于第二时间帧,然后交替0和1的代码(例如,0101010101...)用于第三时间帧,然后是第四时间帧的随机代码(例如,011100100010…),然后这四个代码可能会重复,依此类推。[0373]实际上,当测试dma时,例如,处理控制器可以与misr控制器1206交互以将设置的参考值写入misr数据集寄存器1210和misr地址集寄存器1216。这些值对于数据和地址可能不同,并且可以被称为crc计算的种子值。处理控制器然后可以初始化在dma引擎1056中执行数据移动的信道,并且因为测试代码在存储器中的位置对于处理控制器是已知的,所以描述符(例如,由处理控制器在描述符sram中配置)1052)可用于通过misr测试的数据对dma引擎1056进行排序。处理控制器可以在misr硬件1200上设置计时器1226以启用misr测试,然后可以触发dma引擎1056的信道开始从源目的地读取测试数据并将数据输出到misr硬件1200用于misr测试。因此,当测试dma时,正在测试数据移动(例如,正确寻址和寻址位置中的正确数据),因此misr硬件1200可以在dma引擎执行测试代码的数据移动时接入dma引擎1056的输出。这种进入输出级的抽头可以在图12a中指示作为外部存储器,可以按照处理控制器的序列漏斗化(一次一个数据信道,一次一个地址信道)。例如,对于数据信道,处理控制器可以通过例如16个数据信道中的每一个进行排序,并且每个信道的相应axi写入数据(wdata)可以通过ch0-ch16数据crc计算1202馈送——例如,串联。例如,处理控制器可以配置信道输出寄存器1220以根据来自处理控制器的配置顺序一次一个地通过信道。在实施例中,信道屏蔽(channelmask)寄存器1208(例如,由misr控制器1206基于与处理控制器的交互来编程)可以由处理控制器配置以将各种信道(例如,未在测试中的信道)从crc计算中屏蔽掉或移除。在实施例中,可以使用与门来执行该掩蔽。在屏蔽掉一个或更多个信道的情况下,misr数据参考寄存器1222中的黄金值(其可以由处理控制器提供给misr控制器1206)可能仅对应于未屏蔽信道的crc计算。对于每个未屏蔽(unmasked)信道,信道上的数据(使用从存储器读取的测试代码生成)可以应用于(例如,压缩或不压缩)crc数据计算1202的多项式以生成该信道的misr数据值1214。一旦信道完成计算,处理控制器可以接收指示,并且可以使下一个数据信道被发送到crc计算1202以计算下一个misr数据值1214,依此类推,直到每个未屏蔽信道具有相应的misr数据值1214。一旦已经计算了特定迭代的每个misr数据值1214,这些值1214可以组合以生成最终misr数据值,该最终misr数据值可以与misr数据参考寄存器1222中的黄金值进行比较以生成misr数据状态确定(例如,其可以包括对应于上述值0-7的状态)。[0374]作为另一个示例,对于地址信道,处理控制器可以对例如16个地址或控制信道中的每一个进行排序,并且可以通过ch0-ch16crc计算1204馈送每个信道的对应axi写地址(waddress)地址——例如,串联。在实施例中,信道屏蔽寄存器1208可以由处理控制器配置以从crc计算中屏蔽或移除各种信道——例如,未在测试中的信道。在实施例中,可以使用与门来执行该掩蔽。在屏蔽掉一个或更多个信道的情况下,misr数据参考寄存器1224中的黄金值可能仅对应于未屏蔽信道的crc计算。对于每个未屏蔽信道,信道上的地址(使用从存储器读取的测试代码生成)可以应用于(例如,压缩或不压缩)crc地址计算1204的多项式,以生成该信道的misr地址值1218。一旦信道完成计算,处理控制器可以接收指示,并且可以使地址数据的下一个信道被发送到crc计算1204以计算下一个misr地址值1218,依此类推,直到每个未屏蔽信道具有对应的misr地址值1218。一旦计算了特定迭代的每个misr地址值1218,这些值1218可以组合以生成最终地址misr值,该最终地址misr值可以与misr参考寄存器1224地址中的黄金值进行比较以生成misr地址状态确定(例如,其可以包括对应于上述值0-7的状态)。[0375]在一些实施例中,misr测试可以是迭代的,从而可以处理第一代码,可以测试输出,然后可以将输出用于可以测试的下一次迭代,等等。在这样的实施例中,misr测试可以包括多个阶段,并且完成的misr测试可以包括执行每个阶段。[0376]在misr硬件1200具体用于测试vpu的情况下,例如,dma系统1050可以将测试代码移动到vmem中,vpu可以处理测试代码并将结果写回vmem,以及dma引擎1056可以将结果从vmem读取回目的地位置。当将结果写回目的地位置时,misr硬件1200可以接入dma输出并对数据(例如,包括数据和地址)执行misr,并且执行类似于本文所讨论的misr。这样,可以使用misr硬件1200测试vpu与测试代码的交互。[0377]在完成misr测试之后,处理控制器可以接收中断。例如,处理控制器可以接收完成中断,并且在没有误差的情况下,可以等待下一个misr测试周期。在中断是误差中断的情况下,可以确定误差的类型——例如,失败数据、失败地址、两者都失败等——并且可以向安全处理器断言安全误差。例如,在misr硬件1200挂起或空闲(例如,具有超时误差)的一些实施例中,dma可以向soc的安全处理器生成超时信号。[0378]在一些实施例中,为了加速misr计算以计算一个或更多个(例如,在实施例中,诸如16个)信道上的crc,而不串行化或分级信道-misr计算,可以基于存在于axiid字段中以并行化信道计算对信道进行解复用信道id。例如,由于crc计算以不同的速率完成,因此图12a的方法包括一个接一个信道的串行处理。然而,使用图12b的系统,如下所述,这些计算可以并行完成。例如,当处理控制器终止misr计算时,misr控制器可以对所有信道输出进行排序以计算最终签名,该签名可以与地址和数据输出的参考值或黄金值进行比较。此功能可以加速永久性故障检测,而无需额外的编程器寄存器接口——例如,因为相同的控制寄存器可用于所有信道。[0379]同样地,并且参考图12b,图12b是根据本公开的一些实施例的用于可编程视觉加速器(pva)的并行信道循环冗余校验(crc)计算的内置自测试(bist)系统图。应当理解,这里描述的这种和其他布置仅作为示例阐述。除了所示的那些之外或代替所示的那些,可以使用其他布置和元素(例如,机器、接口、功能、命令、功能分组等),并且可以完全省略一些元素。此外,这里描述的许多元素是功能实体,它们可以实现为离散或分布式组件或与其他组件结合,并以任何合适的组合和位置实现。在此描述为由实体执行的各种功能可以由硬件、固件和/或软件来执行。例如,可以通过处理器执行存储在存储器中的指令来执行各种功能。在一些实施例中,misr硬件1250可以包括与图10h的dma系统1050、图13a-13d的示例自主车辆1300、图14的示例计算设备1400和/或图15的示例数据中心1500类似的组件、特征和/或功能。例如,misr硬件1250可以包括在pva的dma块中,如图10h所示。这样,misr硬件1250可以在数据移动的输出级上操作,并且寻址(或控制)可以接入dma引擎1056的输出。如图12a所示,可能有16个axi数据信道和16个axi地址(或控制)信道。然而,这不旨在进行限制,并且可以根据实施例使用任何数量(和/或类型)的数据和/或地址信道。[0380]misr硬件1250可以与图12a的misr硬件1200类似地操作。除了misr硬件1250可以被配置用于并行数据信道和并行地址信道crc计算之外。例如,处理控制器可以配置misr数据集寄存器1256用于为每个数据crc计算1260a-1260n(分别对应于axi数据信道0-15)设置种子或参考值,并且可以配置misr地址集寄存器1258为每个地址crc计算1262a-1262n设置种子或参考值(分别对应于axi地址信道0-15)。处理控制器,类似于关于图12a所描述的,然后可以触发dma系统1050的数据移动(例如,用于dma测试)和/或vpu处理(例如,用于vpu特定测试)来移动数据,并且misr硬件1250可以接入输出级以待测试。[0381]因此,处理控制器可以使16个信道的数据被发送到多路复用器(mux)1252并且16个信道的地址数据被发送到多路复用器(mux)1254。mux1252然后可以提供相应信道的数据到相应的crc计算1260a-1260n(例如,信道0axi数据到信道0crc计算1260,信道1数据到信道1crc计算1260b,等等),并且每个crc计算1260可以使用该数据以及具有参考值的crc多项式以计算misr数据值1284a-1284n(例如,信道0crc计算1260a可以计算misr数据0值1284a,信道1crc计算1260b可以计算misr数据1值1284b,等等)。misr数据值1284a-1284n然后可以根据由处理控制器配置的来自misr控制1270的misr序列从多路复用器(mux)1264中排序出来。在实施例中,例如关于图12a所描述的,一个或更多个信道可能不包括在特定misr测试中,因此信道屏蔽寄存器1268可由处理控制器配置以更新misr序列,使得对应于一个或更多个屏蔽信道的misr数据值1284不提供给信道0-16数据crc计算1274,以用于计算最终crc值。对于未屏蔽的信道,多路复用器1264可以根据misr序列输出misr数据值1284。以这种方式,考虑到不同信道和crc计算1260的不同计算时间,因为misr数据值1284被强制根据misr序列输出,而不是根据crc计算正在完成的时序发送到crc计算1274。一旦misr数据值1284的misr序列由多路复用器1264输出到crc计算1274,crc计算1274可以计算最终crc值并将最终crc值存储到val寄存器1276。val寄存器1276中的最终crc值然后可以将与misr数据参考寄存器1272中的黄金值(由来自处理控制器的misr控制1270配置)进行比较以确定misr数据状态。[0382]类似地,处理控制器可以使16个地址信道被发送到多路复用器(mux)1254,然后mux1254可以将对应的地址信道提供给对应的crc计算1262a-1262n(例如,信道0axi地址到信道0crc计算1262,信道1地址到信道1crc计算1262b,等等),并且每个crc计算1262可以使用地址和具有参考值的crc多项式来计算misr地址值1286a-1286n(例如,信道0crc计算1262a可以计算misr地址0值1286a,信道1crc计算1262b可以计算misr地址1值1286b,等等)。misr地址值1286a-1286n然后可以根据来自misr控制1270的misr序列从多路复用器(mux)1266中排序出来,如由处理控制器配置。在实施例中,例如关于图12a所描述的,一个或更多个信道可能不包括在特定misr测试中,因此信道屏蔽寄存器1268可以由处理控制器配置以更新misr序列,使得对应于一个或更多个屏蔽信道的misr地址值1286不提供给信道0-16地址crc计算1280,以用于计算最终crc值。对于未屏蔽的信道,misr地址值1286可以由多路复用器1266根据misr序列输出。以这种方式,考虑到不同信道和crc计算1262的不同计算时间,因为misr地址值1286被强制根据misr序列输出,而不是根据crc计算正在完成的时序发送到crc计算1280。一旦多路复用器1266将misr地址值1286的misr序列输出到crc计算1280,crc计算1280可以计算最终crc值并将最终crc值存储到val寄存器1282。val中的最终crc值然后可以将寄存器1282与misr地址参考寄存器1278中的黄金值(由来自处理控制器的misr控制1270配置)进行比较以确定misr地址状态。[0383]misr数据状态和misr地址状态可以类似于以上关于图12a的描述来检查和使用。[0384]现在参考图如图12c所示,本文描述的方法1290的每个框包括可以使用硬件、固件和/或软件的任何组合来执行的计算过程。例如,可以通过处理器执行存储在存储器中的指令来执行各种功能。方法1290也可以体现为存储在计算机存储介质上的计算机可用指令。方法1290可以由独立应用程序、服务或托管服务(独立或与另一托管服务组合)或另一产品的插件提供,仅举几例。此外,方法1290是关于图12a的系统描述的,方法1290可以由任何一个系统、结构或组件或系统、结构或组件的任何组合执行,包括但不限于本文所述的那些。[0385]图12c是根据本公开的一些实施例的用于在pva中进行永久性故障检测的执行(bist)方法1290的流程图。在框b1202,方法1290包括一次一个信道并且基于处理控制器的排序,从dma系统接收多个数据信道。例如,misr硬件1200可以根据处理控制器确定的顺序一次接收一个数据信道(或一个地址数据信道)。[0386]在框b1204,方法1290包括通过使用crc计算的多项式和对应于该信道的相应数据来执行crc计算以计算misr值,来计算多个misr值。例如,对于每个信道,crc计算1202(或地址的1204)可以使用来自信道的数据(或地址)和crc计算的多项式1202来计算misr数据值1214(或地址的misr地址值1216)(从crcmisr数据集寄存器1210或misr地址集寄存器1216的种子值开始)。[0387]在框b1206,方法1290包括使用多个misr值计算最终misr值。例如,可以组合来自每个信道的misr数据值1214(或来自每个信道的misr地址值)以生成最终的misr值。[0388]在框b1208,方法1290包括将最终misr值与签名值进行比较。例如,从各个misr值1214(或地址值1216)生成的最终misr值可以与misr数据参考寄存器1222(或地址的misr地址参考寄存器1224)的签名或黄金值进行比较。[0389]在框b1210,方法1290包括至少部分地基于比较来输出misr状态。例如,基于框b1208的比较,可以确定状态——例如,失败数据、失败地址、两者都失败、完成等——并且该状态可以用于通知soc的安全处理器,其中产生误差状态。[0390]示例自主车辆[0391]图13a是根据本公开的一些实施例的示例自主车辆1300的图示。自主车辆1300(可替代地,在本文称为“车辆1300”)可以包括但不限于,客运车辆,如小汽车、卡车、公共汽车、第一响应车辆、摆渡车、电动或机动自行车、摩托车、消防车、警用车辆,救护车、船、施工车辆、水下船只、无人机、耦合到拖车的车辆和/或另一类型的车辆(例如,无人驾驶的和/或容纳一个或更多个乘客的车辆)。自主车辆通常按照美国运输部的一个部门——国家公路交通安全管理局(nhtsa)以及汽车工程师协会(sae)“taxonomyanddefinitionsfortermsrelatedtodrivingautomationsystemsforon-roadmotorvehicles”(2018年6月15日发布的标准no.j3016-201806,2016年9月30日发布的标准no.j3016-201609,以及该标准的先前和未来的版本)定义的自动化级别进行描述。车辆1300可能够实现符合自主驾驶级别的3级-5级中的一个或更多个的功能。例如,取决于实施例,车辆1300可能够实现条件自动化(3级)、高自动化(4级)和/或全自动化(5级)。[0392]车辆1300可以包括诸如底盘、车身、车轮(例如2个、4个、6个、8个、18个等)、轮胎、车轴之类的部件以及车辆的其他部件。车辆1300可以包括推进系统1350,例如内燃机、混合动力发电厂、全电动发动机和/或另一种推进系统类型。推进系统1350可以连接到可以包括变速器的车辆1300的传动系以便实现车辆1300的推进。可以响应于接收到来自油门/加速器1352的信号而控制推进系统1350。[0393]可以包括方向盘的转向(steering)系统1354可以用来在推进系统1350操作时(例如在车辆运动时)使车辆1300转向(例如沿着希望的路径或路线)。转向系统1354可以接收来自转向致动器1356的信号。对于全自动(5级)功能而言,方向盘可以是可选的。[0394]制动传感器系统1346可以用来响应于接收到来自制动致动器1348和/或制动传感器的信号而操作车辆制动器。[0395]可以包括一个或更多个片上系统(soc)1304(图13c)和/或一个或更多个gpu的一个或更多个控制器1336可以向车辆1300的一个或更多个部件和/或系统提供(例如表示命令的)信号。例如,一个或更多个控制器可以发送经由一个或更多个制动致动器1348操作车辆制动器、经由一个或更多个转向致动器1356操作转向系统1354、经由一个或更多个油门/加速器1352操作推进系统1350的信号。一个或更多个控制器1336可以包括一个或更多个板载(例如集成)计算设备(例如超级计算机),所述计算设备处理传感器信号并且输出操作命令(例如表示命令的信号),以实现自主驾驶和/或辅助人类驾驶员驾驶车辆1300。一个或更多个控制器1336可以包括用于自主驾驶功能的第一控制器1336、用于功能性安全功能的第二控制器1336、用于人工智能功能(例如计算机视觉)的第三控制器1336、用于信息娱乐功能的第四控制器1336、用于紧急情况下的冗余的第五控制器1336和/或其他控制器。在一些示例中,单个控制器1336可以处理上述功能中的两个或更多,两个或更多控制器1336可以处理单个功能,和/或其任意组合。[0396]一个或更多个控制器1336可以响应于接收自一个或更多个传感器的传感器数据(例如传感器输入),提供用于控制车辆1300的一个或更多个部件和/或系统的信号。传感器数据可以接收自例如且不限于全球导航卫星系统传感器1358(例如全球定位系统传感器)、radar传感器1360、超声传感器1362、lidar传感器1364、惯性测量单元(imu)传感器1366(例如加速度计、陀螺仪、磁罗盘、磁力计等)、麦克风1396、立体相机1368、广角相机1370(例如鱼眼相机)、红外相机1372、环绕相机1374(例如360度相机)、远程和/或中程相机1398、速度传感器1344(例如用于测量车辆1300的速率)、振动传感器1342、转向传感器1340、制动传感器(例如作为制动传感器系统1346的部分)和/或其他传感器类型。[0397]控制器1336中的一个或更多个可以接收来自车辆1300的仪表组1332的输入(例如由输入数据表示),并且经由人机接口(hmi)显示器1334、听觉信号器、扬声器和/或经由车辆1300的其他部件提供输出(例如输出数据、显示数据等表示的)。这些输出可以包括诸如车辆速度、速率、时间、地图数据(例如图13c的hd地图1322)、位置数据(例如,车辆1300例如在地图上的位置)、方向、其他车辆的位置(例如占用网格)之类的信息,如控制器1336所感知的关于对象和对象状态的信息等等。例如,hmi显示器1334可以显示关于一个或更多个对象(例如街道指示牌、警示牌、交通灯变化等)的存在性的信息和/或关于车辆已经做出、正在做出或者将会做出的驾驶机动的信息(例如现在变道、两英里后离开34b,等等)。[0398]车辆1300还包括网络接口1324,其可以使用一个或更多个无线天线1326和/或调制解调器通过一个或更多个网络通信。例如,网络接口1324可能够通过lte、wcdma、umts、gsm、cdma2000等通信。一个或更多个无线天线1326也可以使用诸如蓝牙、蓝牙le、z波、zigbee等等之类的一个或更多个局域网和/或诸如lorawan、sigfox等等之类的一个或更多个低功率广域网(lpwan)实现环境中的对象(例如车辆、移动设备等等)之间的通信。[0399]图13b为根据本公开一些实施例的用于图13a的示例自主车辆1300的相机位置和视场的示例。相机和各自的视场是一个示例实施例,并不意图是限制性的。例如,可以包括附加的和/或可替换的相机,和/或这些相机可以位于车辆1300上的不同位置。[0400]用于相机的相机类型可以包括但不限于可以适于与车辆1300的部件和/或系统一起使用的数字相机。所述相机可以在汽车安全完整性级别(asil)b下和/或在另一个asil下操作。相机类型可以具有任何图像捕获率,例如60帧每秒(fps)、120fps、240fps等等,这取决于实施例。相机可能够使用滚动快门、全局快门、另一种类型的快门或者其组合。在一些示例中,滤色器阵列可以包括红白白白(rccc)滤色器阵列、红白白蓝(rccb)滤色器阵列、红蓝绿白(rbgc)滤色器阵列、foveonx3滤色器阵列、拜耳传感器(rggb)滤色器阵列、单色传感器滤色器阵列和/或另一种类型的滤色器阵列。在一些实施例中,诸如具有rccc、rccb和/或rbgc滤色器阵列的相机之类的清晰像素相机可以用在提高光敏感度的努力中。[0401]在一些示例中,所述相机中的一个或更多个可以用来执行高级驾驶员辅助系统(adas)功能(例如作为冗余或故障安全设计的部分)。例如,可以安装多功能单目相机以提供包括车道偏离警告、交通指示牌辅助和智能前照灯控制在内的功能。所述相机中的一个或更多个(例如全部相机)可以同时记录和提供图像数据(例如视频)。[0402]所述相机中的一个或更多个可以安装在诸如定制设计的(3-d打印的)组件之类的安装组件中,以便切断可能干扰相机的图像数据捕获能力的杂散光和来自汽车内的反射(例如挡风玻璃镜中反射的来自仪表板的反射)。关于翼镜安装组件,翼镜组件可以是定制3-d打印的,使得相机安装板匹配翼镜的形状。在一些示例中,一个或更多个相机可以集成到翼镜中。对于侧视相机而言,一个或更多个相机也可以集成到驾驶室每个拐角的四根柱子内。[0403]具有包括车辆1300前面的环境部分的视场的相机(例如前置相机)可以用于环视,以帮助识别前向路径和障碍,以及在一个或更多个控制器1336和/或控制soc的帮助下辅助提供对于生成占用网格和/或确定优选车辆路径至关重要的信息。前置相机可以用来执行许多与lidar相同的adas功能,包括紧急制动、行人检测和碰撞避免。前置相机也可以用于adas功能和系统,包括车道偏离警告(“ldw”)、自主巡航控制(“acc”),和/或诸如交通指示牌识别之类的其他功能。[0404]各种各样的相机可以用于前置配置中,包括例如包括cmos(互补金属氧化物半导体)彩色成像仪在内的单目相机平台。另一个示例可以是广角相机1370,其可以用来感知从周边进入视场的对象(例如行人、十字路口交通或者自行车)。尽管图13b中图示出仅仅一个广角相机,但是在车辆1300上可以存在任意数量的广角相机1370。此外,远程相机1398(例如长视立体相机对)可以用于基于深度的对象检测,尤其是用于尚未针对其训练神经网络的对象。远程相机1398也可以用于对象检测和分类以及基本的对象追踪。[0405]一个或更多个立体相机1368也可以包括在前置配置中。立体相机1368可以包括集成控制单元,该单元包括可扩展处理单元,其可以提供在单个芯片上具有集成的can或以太网接口的多核微处理器和可编程逻辑(fpga)。这样的单元可以用来生成车辆环境的3-d地图,包括针对图像中的所有点的距离估计。可替代的立体相机1368可以包括紧凑型立体视觉传感器,其可以包括两个相机镜头(左右各一个)以及可以测量从车辆到目标对象的距离并且使用生成的信息(例如元数据)激活自主紧急制动和车道偏离警告功能的图像处理芯片。除了本文所描述的那些之外或者可替代地,可以使用其他类型的立体相机1368。[0406]具有包括车辆1300的侧面的环境部分的视场的相机(例如侧视相机)可以用于环视,提供用来创建和更新占用网格以及生成侧撞击碰撞警告的信息。例如,环绕相机1374(例如如图13b中所示的四个环绕相机1374)可以置于车辆1300上。环绕相机1374可以包括广角相机1370、鱼眼相机、360度相机和/或类似物。四个示例,四个鱼眼相机可以置于车辆的前面、后面和侧面。在一种可替代的布置中,车辆可以使用三个环绕相机1374(例如左边、右边和后面),并且可以利用一个或更多个其他相机(例如前向相机)作为第四环视相机。[0407]具有包括车辆1300的后面的环境部分的视场的相机(例如后视相机)可以用于辅助停车、环视、后面碰撞警告以及创建和更新占用网格。可以使用各种各样的相机,包括但不限于也适合作为如本文所描述的前置相机(例如远程和/或中程相机1398、立体相机1368、红外相机1372等等)的相机。[0408]图13c为根据本公开一些实施例的用于图13a的示例自主车辆1300的示例系统架构的框图。应当理解,这种布置和本文描述的其他布置仅仅作为示例而被阐述。除了所示的那些之外或者代替它们的是,可以使用其他的布置和元素(例如机器、接口、功能、顺序、功能分组等等),并且一些元素可以完全省略。进一步,许多本文描述的元素是功能实体,其可以实现为分立的或分布式部件或者结合其他部件实现,以及以任何适当的组合和位置实现。本文描述为由实体执行的各个功能可以通过硬件、固件和/或软件实现。例如,各个功能可以通过处理器执行存储在存储器中的指令而实现。[0409]图13c中车辆1300的部件、特征和系统中的每一个被图示为经由总线1302连接。总线1302可以包括控制器区域网络(can)数据接口(可替代地,本文称为“can总线”)。can可以是车辆1300内部的网络,用来辅助控制车辆1300的各种特征和功能,例如制动器、加速、制动、转向、挡风玻璃雨刷等等的驱动。can总线可以被配置为具有数十或者甚至数百个节点,每个节点具有其自己的唯一标识符(例如canid)。可以读取can总线以找到方向盘角度、地速、每分钟发动机转速(rpm)、按钮位置和/或其他车辆状态指示符。can总线可以是asilb兼容的。[0410]尽管这里将总线1302描述为can总线,但是这并不意图是限制性的。例如,除了can总线之外或者可替代地,可以使用flexray和/或以太网。此外,尽管用单条线来表示总线1302,但是这并不意图是限制性的。例如,可以存在任意数量的总线1302,其可以包括一条或更多条can总线、一条或更多条flexray总线、一条或更多条以太网总线和/或一条或更多条使用不同协议的其他类型的总线。在一些示例中,两条或更多总线1302可以用来执行不同的功能,和/或可以用于冗余。例如,第一总线1302可以用于碰撞避免功能,并且第二总线1302可以用于驱动控制。在任何示例中,每条总线1302可以与车辆1300的任何部件通信,并且两条或更多总线1302可以与相同的部件通信。在一些示例中,车辆内的每个soc1304、每个控制器1336和/或每个计算机可以有权访问相同的输入数据(例如来自车辆1300的传感器的输入),并且可以连接到诸如can总线之类的公共总线。[0411]车辆1300可以包括一个或更多个控制器1336,例如本文关于图13a所描述的那些控制器。控制器1336可以用于各种各样的功能。控制器1336可以耦合到车辆1300的任何其他不同的部件和系统,并且可以用于车辆1300的控制、车辆1300的人工智能、用于车辆1300的信息娱乐和/或类似物。[0412]车辆1300可以包括一个或更多个片上系统(soc)1304。soc1304可以包括cpu1306、gpu1308、处理器1310、高速缓存1312、加速器1314、数据存储1316和/或未图示出的其他部件和特征。在各种各样的平台和系统中,soc1304可以用来控制车辆1300。例如,一个或更多个soc1304可以在系统(例如车辆1300的系统)中与hd地图1322结合,所述hd地图可以经由网络接口1324从一个或更多个服务器(例如图13d的一个或更多个服务器1378)获得地图刷新和/或更新。[0413]cpu1306可以包括cpu簇或者cpu复合体(可替代地,本文称为“ccplex”)。cpu1306可以包括多个核和/或l2高速缓存。例如,在一些实施例中,cpu1306在一致性多处理器配置中可以包括八个核。在一些实施例中,cpu1306可以包括四个双核簇,其中每个簇具有专用的l2高速缓存(例如2mbl2高速缓存)。cpu1306(例如ccplex)可以被配置为支持同时簇操作,使得cpu1306的簇的任意组合能够在任何给定时间是活动的。[0414]cpu1306可以实现包括以下特征中的一个或更多个的功率管理能力:各硬件块在空闲时可以自动进行时钟门控以节省动态功率;由于wfi/wfe指令的执行,每个核时钟可以在该核不主动地执行指令时进行门控;每个核可以独立地进行功率门控;当所有核都进行时钟门控或者功率门控时,可以独立地对每个核簇进行时钟门控;和/或当所有核都进行功率门控时,可以独立地对每个核簇进行功率门控。cpu1306可以进一步实现用于管理功率状态的增强算法,其中指定允许的功率状态和期望的唤醒时间,并且硬件/微代码为所述核、簇和ccplex确定要进入的最佳的功率状态。处理核可以在软件中支持简化的功率状态进入序列,该工作被卸载到微代码。[0415]gpu1308可以包括集成的gpu(可替代地,本文称为“igpu”)。gpu1308可以是可编程的,并且对于并行工作负载而言是高效的。在一些示例中,gpu1308可以使用增强张量指令集。gpu1308可以包括一个或更多个流式微处理器,其中每个流式微处理器可以包括l1高速缓存(例如具有至少96kb存储能力的l1高速缓存),并且这些流式微处理器中的两个或更多可以共享l2高速缓存(例如具有512kb存储能力的l2高速缓存)。在一些实施例中,gpu1308可以包括至少八个流式微处理器。gpu1308可以使用计算应用编程接口(api)。此外,gpu1308可以使用一个或更多个并行计算平台和/或编程模型(例如nvidia的cuda)。[0416]在汽车和嵌入式使用的情况下,可以对gpu1308进行功率优化以实现最佳性能。例如,可以在鳍式场效应晶体管(finfet)上制造gpu1308。然而,这并不意图是限制性的,并且gpu1308可以使用其他半导体制造工艺来制造。每个流式微处理器可以合并划分成多个块的若干混合精度处理核。例如且非限制性地,可以将64个pf32核和32个pf64核划分成四个处理块。在这样的示例中,每个处理块可以分配16个fp32核、8个fp64核、16个int32核、用于深层学习矩阵算术的两个混合精度nvidia张量核、l0指令高速缓存、线程束(warp)调度器、分派单元和/或64kb寄存器文件。此外,流式微处理器可以包括独立的并行整数和浮点数据路径,以利用计算和寻址计算的混合提供工作负载的高效执行。流式微处理器可以包括独立线程调度能力,以允许实现并行线程之间的更细粒度的同步和协作。流式微处理器可以包括组合的l1数据高速缓存和共享存储器单元,以便在简化编程的同时提高性能。[0417]gpu1308可以包括在一些示例中提供大约900gb/s的峰值存储器带宽的高带宽存储器(hbm)和/或16gbhbm2存储器子系统。在一些示例中,除了hbm存储器之外或者可替代地,可以使用同步图形随机存取存储器(sgram),例如第五代图形双倍数据速率同步随机存取存储器(gddr5)。[0418]gpu1308可以包括统一存储器技术,其包括访问计数器以允许存储器页面更精确地迁移到最频繁地访问它们的处理器,从而提高处理器之间共享的存储器范围的效率。在一些示例中,地址转换服务(ats)支持可以用来允许gpu1308直接访问cpu1306页表。在这样的示例中,当gpu1308存储器管理单元(mmu)经历遗漏时,可以将地址转换请求传输至cpu1306。作为响应,cpu1306可以在其页表中寻找用于地址的虚拟-物理映射,并且将转换传输回gpu1308。这样,统一存储器技术可以允许单个统一虚拟地址空间用于cpu1306和gpu1308二者的存储器,从而简化了gpu1308编程和将应用程序移(port)到gpu1308。[0419]此外,gpu1308可以包括访问计数器,其可以追踪gpu1308访问其他处理器的存储器的频率。访问计数器可以帮助确保存储器页面移至最频繁地访问这些页面的处理器的物理存储器。[0420]soc1304可以包括任意数量的高速缓存1312,包括本文描述的那些高速缓存。例如,高速缓存1312可以包括cpu1306和gpu1308二者可用的l3高速缓存(例如,其连接到cpu1306和gpu1308二者)。高速缓存1312可以包括回写高速缓存,其可以例如通过使用高速缓存一致性协议(例如mei、mesi、msi等)追踪行的状态。取决于实施例,l3高速缓存可以包括4mb或者更多,但是也可以使用更小的高速缓存大小。[0421]soc1304可以包括算术逻辑单元(alu),所述算术逻辑单元可以在执行关于车辆1300的各种任务或操作中的任何任务或操作(如处理dnn)的处理中被利用。此外,soc1304可以包括用于在系统内执行数学运算的浮点单元(fpu)(或其他数学协处理器或数字协处理器类型)。例如,soc104可以包括集成为cpu1306和/或gpu1308内的执行单元的一个或更多个fpu。[0422]soc1304可以包括一个或更多个加速器1314(例如硬件加速器、软件加速器或者其组合)。例如,soc1304可以包括硬件加速器簇,其可以包括优化的硬件加速器和/或大型片上存储器。该大型片上存储器(例如4mbsram)可以使得硬件加速器簇能够加速神经网络和其他计算。硬件加速器簇可以用来补充gpu1308,并且卸载gpu1308的一些任务(例如释放gpu1308的更多周期以用于执行其他任务)。作为一个示例,加速器1314可以用于足够稳定以易于控制加速的有针对性的工作负载(例如感知、卷积神经网络(cnn)等等)。当在本文中使用时,术语“cnn”可以包括所有类型的cnn,包括基于区域的或者区域卷积神经网络(rcnn)和快速rcnn(例如用于对象检测)。[0423]加速器1314(例如硬件加速器簇)可以包括深度学习加速器(dla)。dla可以包括可以被配置成为深度学习应用和推理提供额外的每秒10万亿次操作的一个或更多个张量处理单元(tpu)。tpu可以是被配置为执行图像处理功能(例如用于cnn、rcnn等)且针对执行图像处理功能而优化的加速器。dla可以进一步针对特定的一组神经网络类型和浮点运算以及推理进行优化。dla的设计可以比通用gpu提供每毫米更高的性能,并且远远超过cpu的性能。tpu可以执行若干功能,包括单实例卷积函数,支持例如用于特征和权重二者的int8、int16和fp16数据类型,以及后处理器功能。[0424]dla可以在处理的或者未处理的数据上针对各种各样的功能中的任何功能快速且高效地执行神经网络,尤其是cnn,例如且不限于:用于使用来自相机传感器的数据进行对象识别和检测的cnn;用于使用来自相机传感器的数据进行距离估计的cnn;用于使用来自麦克风的数据进行应急车辆检测和识别与检测的cnn;用于使用来自相机传感器的数据进行面部识别和车主识别的cnn;和/或用于安全和/或安全相关事件的cnn。[0425]dla可以执行gpu1308的任何功能,并且通过使用推理加速器,例如,设计者可以使dla或gpu1308针对任何功能。例如,设计者可以将cnn的处理和浮点运算聚焦在dla上,并且将其他功能留给gpu1308和/或其他加速器1314。[0426]加速器1314(例如硬件加速器簇)可以包括可编程视觉加速器(pva),其在本文中可以可替代地称为计算机视觉加速器。pva可以被设计和配置为加速用于高级驾驶员辅助系统(adas)、自主驾驶和/或增强现实(ar)和/或虚拟现实(vr)应用的计算机视觉算法。pva可以提供性能与灵活性之间的平衡。例如,每个pva可以包括例如且不限于任意数量的精简指令集计算机(risc)核、直接存储器访问(dma)和/或任意数量的向量处理器。[0427]risc核可以与图像传感器(例如本文描述的任何相机的图像传感器)、图像信号处理器和/或类似物交互。这些risc核中的每一个可以包括任意数量的存储器。取决于实施例,risc核可以使用若干协议中的任何协议。在一些示例中,risc核可以执行实时操作系统(rtos)。risc核可以使用一个或更多个集成电路设备、专用集成电路(asic)和/或存储设备实现。例如,risc核可以包括指令高速缓存和/或紧密耦合的ram。[0428]dma可以使得pva的部件能够独立于cpu1306访问系统存储器。dma可以支持用来向pva提供优化的任意数量的特征,包括但不限于支持多维寻址和/或循环寻址。在一些示例中,dma可以支持高达六个或更多维度的寻址,其可以包括块宽度、块高度、块深度、水平块步进、竖直块步进和/或深度步进。[0429]向量处理器可以是可编程处理器,其可以被设计为高效且灵活地执行用于计算机视觉算法的编程并且提供信号处理能力。在一些示例中,pva可以包括pva核和两个向量处理子系统分区。pva核可以包括处理器子系统、一个或更多个dma引擎(例如两个dma引擎)和/或其他外围设备。向量处理子系统可以作为pva的主处理引擎而操作,并且可以包括向量处理单元(vpu)、指令高速缓存和/或向量存储器(例如vmem)。vpu核可以包括数字信号处理器,诸如例如单指令多数据(simd)、超长指令字(vliw)数字信号处理器。simd和vliw的组合可以增强吞吐量和速率。[0430]向量处理器中的每一个可以包括指令高速缓存并且可以耦合到专用存储器。结果,在一些示例中,向量处理器中的每一个可以被配置为独立于其他向量处理器执行。在其他示例中,包括在特定pva中的向量处理器可以被配置为采用数据并行化。例如,在一些实施例中,包括在单个pva中的多个向量处理器可以执行相同的计算机视觉算法,但是在图像的不同区域上执行。在其他示例中,包括在特定pva中的向量处理器可以在相同的图像上同时执行不同的计算机视觉算法,或者甚至在序列图像或者图像的部分上执行不同的算法。除其他的以外,任意数量的pva可以包括在硬件加速器簇中,并且任意数量的向量处理器可以包括在这些pva中的每一个中。此外,pva可以包括附加的纠错码(ecc)存储器,以增强总体系统安全性。[0431]加速器1314(例如硬件加速器簇)可以包括片上计算机视觉网络和sram,以提供用于加速器1314的高带宽、低延迟sram。在一些示例中,片上存储器可以包括由例如且不限于八个现场可配置的存储器块组成的至少4mbsram,其可以由pva和dla二者访问。每对存储器块可以包括高级外围总线(apb)接口、配置电路系统、控制器和复用器。可以使用任何类型的存储器。pva和dla可以经由向pva和dla提供高速存储器访问的主干(backbone)访问存储器。主干可以包括(例如使用apb)将pva和dla互连到存储器的片上计算机视觉网络。[0432]片上计算机视觉网络可以包括在传输任何控制信号/地址/数据之前确定pva和dla二者都提供就绪且有效的信号的接口。这样的接口可以提供用于传输控制信号/地址/数据的单独相位和单独信道,以及用于连续数据传输的突发式通信。这种类型的接口可以符合iso26262或者iec61508标准,但是也可以使用其他标准和协议。[0433]在一些示例中,soc1304可以包括例如在2018年8月10日提交的美国专利申请no.16/101,232中描述的实时光线追踪硬件加速器。该实时光线追踪硬件加速器可以用来快速且高效地确定(例如世界模型内的)对象的位置和范围,以便生成实时可视化仿真,以用于radar信号解释、用于声音传播合成和/或分析、用于sonar系统仿真、用于一般波传播仿真、用于为了定位和/或其他功能的目的与lidar数据相比较和/或用于其他用途。在一些实施例中,一个或更多个树遍历单元(ttu)可以用于执行一个或更多个光线追踪相关操作。[0434]加速器1314(例如硬件加速器簇)具有广泛的自主驾驶用途。pva可以是可编程视觉加速器,其可以用于adas和自主车辆中的关键处理阶段。pva的能力是需要可预测处理、低功率和低延迟的算法域的良好匹配。换言之,pva在半密集或者密集规则计算上,甚至在需要具有低延迟和低功率的可预测运行时间的小数据集上都表现良好。因此,在用于自主车辆的平台的背景下,pva被设计为运行经典计算机视觉算法,因为它们在对象检测和整数数学运算方面很有效。[0435]例如,根据该技术的一个实施例,pva用来执行计算机立体视觉。在一些示例中,可以使用基于半全局匹配的算法,但是这并不意图是限制性的。许多用于3-5级自主驾驶的应用都需要即时运动估计/立体匹配(例如来自运动的结构、行人识别、车道检测等等)。pva可以在来自两个单目相机的输入上执行计算机立体视觉功能。[0436]在一些示例中,pva可以用来执行密集的光流。根据过程原始radar数据(例如使用4d快速傅立叶变换)以提供经处理的radar。在其他示例中,pva用于飞行时间深度处理,其例如通过处理原始飞行时间数据以提供经处理的飞行时间数据。[0437]dla可以用来运行任何类型的网络以增强控制和驾驶安全性,包括例如输出用于每个对象检测的置信度度量的神经网络。这样的置信度值可以解释为概率,或者解释为提供每个检测与其他检测相比的相对“权重”。该置信度值使得系统能够做出关于哪些检测应当被认为是真阳性检测而不是假阳性检测的进一步决定。例如,系统可以为置信度设置阈值,并且仅仅将超过阈值的检测看作真阳性检测。在自动紧急制动(aeb)系统中,假阳性检测会使得车辆自动地执行紧急制动,这显然是不希望的。因此,只有最确信的检测才应当被认为是aeb的触发因素。dla可以运行用于回归置信度值的神经网络。该神经网络可以将至少一些参数子集作为其输入,例如边界框维度,(例如从另一个子系统)获得的地平面估计,与车辆1300方位、距离相关的惯性测量单元(imu)传感器1366输出,从神经网络和/或其他传感器(例如lidar传感器1364或radar传感器1360)获得的对象的3d位置估计等。[0438]soc1304可以包括一个或更多个数据存储1316(例如存储器)。数据存储1316可以是soc1304的片上存储器,其可以存储要在gpu和/或dla上执行的神经网络。在一些示例中,为了冗余和安全,数据存储1316可以容量足够大以存储神经网络的多个实例。数据存储1312可以包括l2或l3高速缓存1312。对数据存储1316的引用可以包括对与如本文所描述的pva、dla和/或其他加速器1314关联的存储器的引用。[0439]soc1304可以包括一个或更多个处理器1310(例如嵌入式处理器)。处理器1310可以包括启动和功率管理处理器,其可以是用于处理启动功率和管理功能以及有关安全实施的专用处理器和子系统。启动和功率管理处理器可以是soc1304启动序列的一部分,并且可以提供运行时间功率管理服务。启动功率和管理处理器可以提供时钟和电压编程、辅助系统低功率状态转换、soc1304热和温度传感器管理和/或soc1304功率状态管理。每个温度传感器可以实现为环形振荡器,其输出频率与温度成比例,并且soc1304可以使用环形振荡器检测cpu1306、gpu1308和/或加速器1314的温度。如果确定温度超过阈值,那么启动和功率管理处理器可以进入温度故障例程并且将soc1304置于较低功率状态和/或将车辆1300置于司机安全停车模式(例如使车辆1300安全停车)。[0440]处理器1310可以还包括可以用作音频处理引擎的一组嵌入式处理器。音频处理引擎可以是一种音频子系统,其允许实现对于通过多个接口的多声道音频的完全硬件支持以及一系列广泛而灵活的音频i/o接口。在一些示例中,音频处理引擎是具有带有专用ram的数字信号处理器的专用处理器核。[0441]处理器1310可以还包括始终在处理器上的引擎,其可以提供必要的硬件特征以支持低功率传感器管理和唤醒用例。该始终在处理器上的引擎可以包括处理器核、紧密耦合的ram、支持外围设备(例如定时器和中断控制器)、各种i/o控制器外围设备和路由逻辑。[0442]处理器1310可以还包括安全簇引擎,其包括处理汽车应用的安全管理的专用处理器子系统。安全簇引擎可以包括两个或更多处理器核、紧密耦合的ram、支持外围设备(例如定时器、中断控制器等等)和/或路由逻辑。在安全模式下,所述两个或更多核可以操作于锁步模式下,并且用作具有检测它们的操作之间的任何差异的比较逻辑的单核。[0443]处理器1310可以还包括实时相机引擎,其可以包括用于处理实时相机管理的专用处理器子系统。[0444]处理器1310可以还包括高动态范围信号处理器,其可以包括图像信号处理器,该图像信号处理器是一种硬件引擎,该硬件引擎是相机处理管线的部分。[0445]处理器1310可以包括可以是(例如微处理器上实现的)处理块的视频图像复合器,其实现视频回放应用程序产生用于播放器窗口的最终图像所需的视频后处理功能。视频图像复合器可以对广角相机1370、环绕相机1374和/或对驾驶室内监控相机传感器执行镜头畸变校正。驾驶室内监控相机传感器优选地由运行在高级soc的另一个实例上的神经网络监控,被配置为识别驾驶室内事件并且相对应地做出响应。驾驶室内系统可以执行唇读,以激活移动电话服务并拨打电话、口述电子邮件、改变车辆目的地、激活或改变车辆的信息娱乐系统和设置或者提供语音激活的网上冲浪。某些功能仅在车辆操作于自主模式下时对于驾驶员可用,并且在其他情况下被禁用。[0446]视频图像复合器可以包括用于空间和时间降噪的增强时间降噪。例如,在视频中出现运动的情况下,降噪适当地对空间信息加权,降低邻近帧提供的信息的权重。在图像或者图像的部分不包括运动的情况下,视频图像复合器执行的时间降噪可以使用来自先前的图像的信息以降低当前图像中的噪声。[0447]视频图像复合器也可以被配置为对输入立体镜头帧执行立体校正。当操作系统桌面正在使用并且gpu1308无需连续地渲染(render)新的表面时,视频图像复合器可以进一步用于用户接口组成。甚至在gpu1308上电并且激活,进行3d渲染时,视频图像复合器可以用来减轻gpu1308的负担以提高性能和响应能力。[0448]soc1304可以还包括用于从相机接收视频和输入的移动行业处理器接口(mipi)相机串行接口、高速接口和/或可以用于相机和有关像素输入功能的视频输入块。soc1304可以还包括可以由软件控制并且可以用于接收未提交到特定角色的i/o信号的输入/输出控制器。[0449]soc1304可以还包括大范围的外围设备接口,以使能与外围设备、音频编解码器、功率管理和/或其他设备通信。soc1304可以用来处理来自(通过千兆多媒体串行链路和以太网连接的)相机、传感器(例如可以通过以太网连接的lidar传感器1364、radar传感器1360等等)的数据,来自总线1302的数据(例如车辆1300的速率、方向盘位置等等),来自(通过以太网或can总线连接的)gnss传感器1358的数据。soc1304可以还包括专用高性能大容量存储控制器,其可以包括它们自己的dma引擎,并且其可以用来从日常数据管理任务中释放cpu1306。[0450]soc1304可以是具有灵活架构的端到端平台,该架构跨越自动化3-5级,从而提供利用和高效使用计算机视觉和adas技术以实现多样性和冗余、连同深度学习工具一起提供用于灵活可靠驾驶软件堆栈的平台的综合功能安全架构。soc1304可以比常规的系统更快、更可靠,甚至更加能量高效和空间高效。例如,当与cpu1306、gpu1308和数据存储1316结合时,加速器1314可以提供用于3-5级自主车辆的快速高效平台。[0451]因此该技术提供了不能通过常规系统实现的能力和功能。例如,计算机视觉算法可以在cpu上执行,这些cpu可以使用诸如c编程语言之类的高级编程语言配置为跨各种各样的视觉数据执行各种各样的处理算法。然而,cpu常常不能满足许多计算机视觉应用的性能要求,诸如与例如执行时间和功耗有关的那些要求。特别地,许多cpu不能实时地执行复杂的对象检测算法,这是车载adas应用的要求和实用3-5级自主车辆的要求。[0452]与常规系统形成对比的是,通过提供cpu复合体、gpu复合体和硬件加速器簇,本文描述的技术允许同时和/或顺序地执行多个神经网络,并且将结果组合在一起以实现3-5级自主驾驶功能。例如,在dla或dgpu(例如gpu1320)上执行的cnn可以包括文本和单词识别,允许超级计算机读取和理解交通指示牌,包括尚未针对其特别地训练神经网络的指示牌。dla可以还包括能够识别、解释和提供对指示牌的语义理解,并且将该语义理解传递给运行在cpu复合体上的路径规划模块的神经网络。[0453]作为另一个示例,如3、4或5级驾驶所需的,多个神经网络可以同时运行。例如,由“注意:闪烁的灯指示结冰条件”组成的警告指示牌连同电灯可以由若干神经网络独立地或者共同地进行解释。指示牌本身可以由部署的第一神经网络(例如经过训练的神经网络)识别为交通指示牌,文本“闪烁的灯指示结冰条件”可以由部署的第二神经网络解释,该部署的第二神经网络告知车辆的路径规划软件(优选地在cpu复合体上执行)当检测到闪烁的灯时,存在结冰条件。闪烁的灯可以通过在多个帧上操作部署的第三神经网络而识别,该神经网络告知车辆的路径规划软件闪烁的灯的存在(或不存在)。所有三个神经网络可以例如在dla内和/或在gpu1308上同时运行。[0454]在一些示例中,用于面部识别和车主识别的cnn可以使用来自相机传感器的数据识别车辆1300的授权的驾驶员和/或车主的存在。始终在传感器上的处理引擎可以用来在车主接近驾驶员车门时解锁车辆并且打开灯,并且在安全模式下,在车主离开车辆时禁用车辆。按照这种方式,soc1404提供了防范盗窃和/或劫车的安全性。[0455]在另一个示例中,用于应急车辆检测和识别的cnn可以使用来自麦克风1396的数据来检测并且识别应急车辆警报(siren)。与使用通用分类器检测警报并且手动地提取特征的常规系统形成对比的是,soc1304使用cnn以对环境和城市声音分类以及对视觉数据分类。在优选的实施例中,运行在dla上的cnn被训练为识别应急车辆的相对关闭速率(例如通过使用多普勒效应)。cnn也可以被训练为识别如gnss传感器1358所识别的特定于车辆在其中操作的局部区域的应急车辆。因此,例如,当在欧洲操作时,cnn将寻求检测欧洲警报,并且当在美国时,cnn将寻求识别仅仅北美的警报。一旦检测到应急车辆,在超声传感器1362的辅助下,控制程序可以用来执行应急车辆安全例程,使车辆放慢速度,开到路边,停下车辆,和/或使车辆空转,直到应急车辆通过。[0456]车辆可以包括可以经由高速互连(例如pcie)耦合到soc1304的cpu1318(例如分立的cpu或dcpu)。cpu1318可以包括例如x86处理器。cpu1318可以用来执行各种各样的功能中的任何功能,包括例如仲裁adas传感器与soc1304之间潜在地不一致的结果,和/或监控控制器1336和/或信息娱乐soc1330的状态和健康状况。[0457]车辆1300可以包括可以经由高速互连(例如nvidia的nvlink)耦合到soc1304的gpu1320(例如分立的gpu或dgpu)。gpu1320可以例如通过执行冗余的和/或不同的神经网络而提供附加的人工智能功能,并且可以用来至少部分地基于来自车辆1300的传感器的输入(例如传感器数据)来训练和/或更新神经网络。[0458]车辆1300可以还包括网络接口1324,该网络接口可以包括一个或更多个无线天线1326(例如用于不同通信协议的一个或更多个无线天线,例如蜂窝天线、蓝牙天线等等)。网络接口1324可以用来使能通过因特网与云(例如与服务器1378和/或其他网络设备)、与其他车辆和/或与计算设备(例如乘客的客户端设备)的无线连接。为了与其他车辆通信,可以在这两辆车之间建立直接链接,和/或可以建立间接链接(例如跨网络以及通过因特网)。直接链接可以使用车对车通信链路提供。车对车通信链路可以向车辆1300提供关于接近车辆1300的车辆(例如车辆1300前面、侧面和/或后面的车辆)的信息。该功能可以是车辆1300的协作自适应巡航控制功能的部分。[0459]网络接口1324可以包括提供调制和解调功能并且使得控制器1336能够通过无线网络通信的soc。网络接口1324可以包括用于从基带到射频的上转换以及从射频到基带的下转换的射频前端。频率转换可以通过公知的过程执行,和/或可以使用超外差(super-heterodyne)过程执行。在一些示例中,射频前端功能可以由单独的芯片提供。网络接口可以包括用于通过lte、wcdma、umts、gsm、cdma2000、蓝牙、蓝牙le、wi-fi、z波、zigbee、lorawan和/或其他无线协议通信的无线功能。[0460]车辆1300可以还包括可包括片外(例如soc1304外)存储装置的数据存储1328。数据存储1328可以包括一个或更多个存储元件,包括ram、sram、dram、vram、闪存、硬盘和/或可以存储至少一个位的数据的其他部件和/或设备。[0461]车辆1300可以还包括gnss传感器1358。gnss传感器1358(例如gps、辅助gps传感器、差分gps(dgps)传感器等)用于辅助映射、感知、占用网格生成和/或路径规划功能。可以使用任意数量的gnss传感器1358,包括例如且不限于使用带有以太网到串行(rs-232)网桥的usb连接器的gps。[0462]车辆1300可以还包括radar传感器1360。radar传感器1360可以甚至在黑暗和/或恶劣天气条件下也由车辆1300用于远程车辆检测。radar功能安全级别可以是asilb。radar传感器1360可以使用can和/或总线1302(例如以传输radar传感器1360生成的数据)以用于控制以及访问对象追踪数据,在一些示例中接入以太网以访问原始数据。可以使用各种各样的radar传感器类型。例如且非限制性地,radar传感器1360可以适合前面、后面和侧面radar使用。在一些示例中,使用脉冲多普勒radar传感器。[0463]radar传感器1360可以包括不同的配置,例如具有窄视场的远程、具有宽视场的短程、短程侧覆盖等等。在一些示例中,远程radar可以用于自适应巡航控制功能。远程radar系统可以提供通过两个或更多独立扫描实现的广阔视场(例如250m范围内)。radar传感器1360可以帮助区分静态对象和运动对象,并且可以由adas系统用于紧急制动辅助和前方碰撞警告。远程radar传感器可以包括具有多根(例如六根或更多)固定radar天线以及高速can和flexray接口的单站多模radar。在具有六根天线的示例中,中央四根天线可以创建聚焦的波束图案,其被设计为在更高速率下以来自邻近车道的最小交通干扰记录车辆1300的周围环境。其他两根天线可以扩展视场,使得快速地检测进入或离开车辆1300的车道的车辆成为可能。[0464]作为一个示例,中程radar系统可以包括高达1360m(前面)或80m(后面)的范围以及高达42度(前面)或1350度(后面)的视场。短程radar系统可以包括但不限于被设计为安装在后保险杠两端的radar传感器。当安装在后保险杠两端时,这样的radar传感器系统可以创建持续地监控后方和车辆旁边的视盲点的两个波束。[0465]短程radar系统可以在adas系统中用于视盲点检测和/或变道辅助。[0466]车辆1300可以还包括超声传感器1362。可以置于车辆1300的前面、后面和/或侧面的超声传感器1362可以用于停车辅助和/或创建和更新占用网格。可以使用各种各样的超声传感器1362,并且不同的超声传感器1362可以用于不同的检测范围(例如2.5m、4m)。超声传感器1362可以操作于功能安全级别的asilb。[0467]车辆1300可以包括lidar传感器1364。lidar传感器1364可以用于对象和行人检测、紧急制动、碰撞避免和/或其他功能。lidar传感器1364可以为功能安全级别的asilb。在一些示例中,车辆1300可以包括可以使用以太网(例如以将数据提供给千兆以太网交换机)的多个lidar传感器1364(例如两个、四个、六个等等)。[0468]在一些示例中,lidar传感器1364可能够对360度视场提供对象列表及其距离。商业上可用的lidar传感器1364可以具有例如近似1300m的广告范围,精度为2cm-3cm,支持1300mbps以太网连接。在一些示例中,可以使用一个或更多个非突出的lidar传感器1364。在这样的示例中,lidar传感器1364可以实现为可以嵌入到车辆1300的前面、后面、侧面和/或拐角的小设备。在这样的示例中,lidar传感器1364可以甚至对于低反射率对象提供高达120度水平的和35度竖直的视场,具有200m的范围。前面安装的lidar传感器1364可以被配置用于45度与135度之间的水平视场。[0469]在一些示例中,也可以使用诸如3d闪光lidar之类的lidar技术。3d闪光lidar使用激光的闪光作为发射源,以照亮高达约200m的车辆周围环境。闪光lidar单元包括接受器,该接受器将激光脉冲传输时间和反射光记录在每个像素上,其进而与从车辆到对象的范围相对应。闪光lidar可以允许利用每个激光闪光生成周围环境的高度精确且无失真的图像。在一些示例中,可以部署四个闪光lidar传感器,车辆1300的每一侧一个。可用的3d闪光lidar系统包括没有风扇以外的运动部件(movingpart)的固态3d凝视阵列lidar相机(例如非扫描lidar设备)。闪光lidar设备可以使用每帧5纳秒i类(眼睛安全)激光脉冲,并且可以以3d范围点云和共同寄存的强度数据的形式捕获反射的激光。通过使用闪光lidar,并且因为闪光lidar是没有运动部件的固态设备,lidar传感器1364可以不太容易受到运动模糊、振动和/或震动的影响。[0470]该车辆可以还包括imu传感器1366。在一些示例中,imu传感器1366可以位于车辆1300的后轴的中心。imu传感器1366可以包括例如且不限于加速度计、磁力计、陀螺仪、磁罗盘和/或其他传感器类型。在一些示例中,例如在六轴应用中,imu传感器1366可以包括加速度计和陀螺仪,而在九轴应用中,imu传感器1366可以包括加速度计、陀螺仪和磁力计。[0471]在一些实施例中,imu传感器1366可以实现为微型高性能gps辅助惯性导航系统(gps/ins),其结合微机电系统(mems)惯性传感器、高灵敏度gps接收器和高级卡尔曼滤波算法以提供位置、速度和姿态的估计。这样,在一些示例中,imu传感器1366可以使得车辆1300能够在无需来自磁传感器的输入的情况下通过直接观察从gps到imu传感器1366的速度变化并且将其相关来估计方向(heading)。在一些示例中,imu传感器1366和gnss传感器1358可以结合到单个集成单元中。[0472]该车辆可以包括置于车辆1300中和/或车辆1300周围的麦克风1396。除别的以外,麦克风1396可以用于应急车辆检测和识别。[0473]该车辆可以还包括任意数量的相机类型,包括立体相机1368、广角相机1370、红外相机1372、环绕相机1374、远程和/或中程相机1398和/或其他相机类型。这些相机可以用来捕获车辆1300整个外围周围的图像数据。使用的相机类型取决于实施例和车辆1300的要求,并且相机类型的任意组合可以用来提供车辆1300周围的必要覆盖。此外,相机的数量可以根据实施例而不同。例如,该车辆可以包括六个相机、七个相机、十个相机、十二个相机和/或另一数量的相机。作为一个示例且非限制性地,这些相机可以支持千兆多媒体串行链路(gmsl)和/或千兆以太网。所述相机中的每一个在本文关于图13a和图13b更详细地进行了描述。[0474]车辆1300可以还包括振动传感器1342。振动传感器1342可以测量车辆的诸如车轴之类的部件的振动。例如,振动的变化可以指示道路表面的变化。在另一个示例中,当使用两个或更多振动传感器1342时,振动之间的差异可以用来确定道路表面的摩擦或滑移(例如当动力驱动轴与自由旋转轴之间存在振动差异时)。[0475]车辆1300可以包括adas系统1338。在一些示例中,adas系统1338可以包括soc。adas系统1338可以包括自主/自适应/自动巡航控制(acc)、协作自适应巡航控制(cacc)、前方撞车警告(fcw)、自动紧急制动(aeb)、车道偏离警告(ldw)、车道保持辅助(lka)、视盲点警告(bsw)、后方穿越交通警告(rctw)、碰撞警告系统(cws)、车道居中(lc)和/或其他特征和功能。[0476]acc系统可以使用radar传感器1360、lidar传感器1364和/或相机。acc系统可以包括纵向acc和/或横向acc。纵向acc监控并控制到紧接在车辆1300前方的车辆的距离,并且自动地调节车速以维持离前方车辆的安全距离。横向acc执行距离保持,并且在必要时建议车辆1300改变车道。横向acc与诸如lca和cws之类的其他adas应用程序有关。[0477]cacc使用来自其他车辆的信息,该信息可以经由网络接口1324和/或无线天线1326经由无线链路或者通过网络连接(例如通过因特网)间接地从其他车辆接收。直接链接可以由车对车(v2v)通信链路提供,而间接链接可以是基础设施到车辆(i2v)的通信链路。通常,v2v通信概念提供关于紧接在前的车辆(例如紧接在车辆1300前方且与其处于相同车道的车辆)的信息,而i2v通信概念提供关于前方更远处的交通的信息。cacc系统可以包括i2v和v2v信息源中的任一个或者二者。给定车辆1300前方车辆的信息,cacc可以更加可靠,并且它有可能提高交通流的畅通性且降低道路拥堵。[0478]fcw系统被设计为提醒驾驶员注意危险,使得驾驶员可以采取纠正措施。fcw系统使用耦合到专用处理器、dsp、fpga和/或asic的前置相机和/或radar传感器1360,该专用处理器、dsp、fpga和/或asic电耦合至诸如显示器、扬声器和/或振动部件之类的驾驶员反馈。fcw系统可以提供例如声音、视觉警告、振动和/或快速制动脉冲形式的警告。[0479]aeb系统检测即将发生的与另一车辆或其他对象的前方碰撞,并且可以在驾驶员在指定的时间或距离参数内没有采取纠正措施的情况下自动地应用制动器。aeb系统可以使用耦合到专用处理器、dsp、fpga和/或asic的前置相机和/或radar传感器1360。当aeb系统检测到危险时,它典型地首先提醒(alert)驾驶员采取纠正措施以避免碰撞,并且如果驾驶员没有采取纠正措施,那么aeb系统可以自动地应用制动器以努力防止或者至少减轻预测的碰撞的影响。aeb系统可以包括诸如动态制动支持和/或碰撞迫近制动之类的技术。[0480]ldw系统提供了诸如方向盘或座位振动之类的视觉、听觉和/或触觉警告,以在车辆1300穿过车道标记时提醒驾驶员。当驾驶员指示有意偏离车道时,通过激活转弯信号,不激活ldw系统。ldw系统可以使用耦合到专用处理器、dsp、fpga和/或asic的前侧朝向相机,该专用处理器、dsp、fpga和/或asic电耦合至诸如显示器、扬声器和/或振动部件之类的驾驶员反馈。[0481]lka系统是ldw系统的变型。如果车辆1300开始离开车道,那么lka系统提供纠正车辆1300的转向输入或制动。[0482]bsw系统检测并向驾驶员警告汽车视盲点中的车辆。bsw系统可以提供视觉、听觉和/或触觉警报以指示合并或改变车道是不安全的。系统可以在驾驶员使用转弯信号时提供附加的警告。bsw系统可以使用耦合到专用处理器、dsp、fpga和/或asic的后侧朝向相机和/或radar传感器1360,该专用处理器、dsp、fpga和/或asic电耦合至诸如显示器、扬声器和/或振动部件之类的驾驶员反馈。[0483]rctw系统可以在车辆1300倒车时在后置相机范围之外检测到对象时提供视觉、听觉和/或触觉通知。一些rctw系统包括aeb以确保应用车辆制动器以避免撞车。rctw系统可以使用耦合到专用处理器、dsp、fpga和/或asic的一个或更多个后置radar传感器1360,该专用处理器、dsp、fpga和/或asic电耦合至诸如显示器、扬声器和/或振动部件之类的驾驶员反馈。[0484]常规的adas系统可能易于出现假阳性结果,这可能会让驾驶员烦恼并分散注意力,但是典型地不是灾难性的,因为adas系统提醒驾驶员并且允许驾驶员决定安全条件是否真正存在并且相对应地采取行动。然而,在自主车辆1300中,在冲突结果的情况下,车辆1300本身必须决定是否注意(heed)来自主计算机或者辅助计算机(例如第一控制器1336或第二控制器1336)的结果。例如,在一些实施例中,adas系统1338可以是用于向备用计算机合理性模块提供感知信息的备用和/或辅助计算机。备用计算机合理性监视器可以在硬件部件上运行冗余多样的软件,以检测感知和动态驾驶任务中的故障。来自adas系统1338的输出可以提供给监督mcu。如果来自主计算机和辅助计算机的输出冲突,那么监督mcu必须确定如何协调该冲突以确保安全操作。[0485]在一些示例中,主计算机可以被配置为向监督mcu提供置信度评分,指示主计算机对所选结果的置信度。如果置信度评分超过阈值,那么监督mcu可以遵循主计算机的方向,而不管辅助计算机是否提供冲突或不一致的结果。在置信度评分不满足阈值的情况下并且在主计算机和辅助计算机指示不同的结果(例如冲突)的情况下,监督mcu可以在这些计算机之间进行仲裁以确定适当的结果。[0486]监督mcu可以被配置为运行神经网络,所述神经网络被训练并且被配置为至少部分地基于来自主计算机和辅助计算机的输出,确定辅助计算机提供假警报的条件。因此,监督mcu中的神经网络可以了解何时可以信任辅助计算机的输出以及何时不能。例如,当辅助计算机为基于radar的fcw系统时,监督mcu中的神经网络可以了解fcw系统何时正在识别事实上不是危险的金属对象,例如触发警报的排水栅格或井盖。类似地,当辅助计算机是基于相机的ldw系统时,监督mcu中的神经网络可以学习在骑车者或行人在场并且车道偏离实际上是最安全的策略时无视该ldw。在包括运行在监督mcu上的神经网络的实施例中,监督mcu可以包括适合于利用关联的存储器运行神经网络的dla或gpu中的至少一个。在优选的实施例中,监督mcu可以包括soc1304的部件和/或作为soc1304的部件而被包括。[0487]在其他示例中,adas系统1338可以包括使用传统计算机视觉规则执行adas功能的辅助计算机。这样,辅助计算机可以使用经典的计算机视觉规则(如果-那么),并且在监督mcu中存在神经网络可以提高可靠性、安全性和性能。例如,多样化的实现方式和有意的非完全相同(non-identity)使得整个系统更加容错,对于软件(或者软件-硬件接口)功能造成的故障而言尤其如此。例如,如果在主计算机上运行的软件中存在软件漏洞或误差并且运行在辅助计算机上的非完全相同的软件代码提供相同的总体结果,那么监督mcu可以更加确信总体结果是正确的,并且主计算机上的软件或硬件中的漏洞不造成实质性的误差。[0488]在一些示例中,adas系统1338的输出可以馈送至主计算机的感知块和/或主计算机的动态驾驶任务块。例如,如果adas系统1338由于对象紧接在前的原因而指示前方碰撞警告,那么感知块可以在识别对象时使用该信息。在其他示例中,辅助计算机可以具有它自己的神经网络,其被训练并且因此如本文所描述的降低假阳性的风险。[0489]车辆1300可以还包括信息娱乐soc1330(例如车载信息娱乐系统(ivi))。尽管被图示和描述为soc,但是信息娱乐系统可以不是soc,并且可以包括两个或更多分立的部件。信息娱乐soc1330可以包括可以用来向车辆1300提供音频(例如音乐、个人数字助理、导航指令、新闻、广播等等)、视频(例如tv、电影、流媒体等等)、电话(例如免提呼叫)、网络连接(例如lte、wifi等等)和/或信息服务(例如导航系统,后停车援助,无线电数据系统,诸如燃油水平、覆盖的总距离、制动燃油水平、油位、车门开/关、空气过滤器信息之类的车辆有关信息,等等)的硬件和软件的组合。例如,信息娱乐soc1330可以包括收音机、盘播放器、导航系统、视频播放器、usb和蓝牙连接、车载电脑、车载娱乐、wifi、方向盘音频控件、免提语音控件、平视显示器(hud)、hmi显示器1334、远程信息处理设备、控制面板(例如用于控制各种部件、特征和/或系统,和/或与其交互)和/或其他部件。信息娱乐soc1330可以进一步用来向车辆的用户提供信息(例如视觉的和/或听觉的),例如来自adas系统1338的信息,诸如规划的车辆机动、轨迹、周围环境信息(例如交叉路口信息、车辆信息、道路信息等等)之类的自主驾驶信息,和/或其他信息。[0490]信息娱乐soc1330可以包括gpu功能。信息娱乐soc1330可以通过总线1302(例如can总线、以太网等)与车辆1400的其他设备、系统和/或部件通信。在一些示例中,信息娱乐soc1330可以耦合至监督mcu,使得在主控制器1336(例如车辆1300的主和/或备用计算机)出现故障的情况下,信息娱乐系统的gpu可以执行一些自驾驶功能。在这样的示例中,信息娱乐soc1330可以如本文所描述的将车辆1300置于司机安全停车模式。[0491]车辆1300可以还包括仪表组1332(例如数字仪表板、电子仪表组、数字仪表面板等等)。仪表组1332可以包括控制器和/或超级计算机(例如分立的控制器或超级计算机)。仪表组1332可以包括一套仪器,例如车速表、燃油水平、油压、转速表、里程表、转弯指示器、换档位置指示器、安全带警告灯、停车制动警告灯、发动机故障灯、安全气囊(srs)系统信息、照明控件、安全系统控件、导航信息等等。在一些示例中,信息可以被显示和/或在信息娱乐soc1330和仪表组1332之间共享。换言之,仪表组1332可以作为信息娱乐soc1330的部分而被包括,或者反之亦然。[0492]图13d为根据本公开一些实施例的基于云的服务器与图13a的示例自主车辆1300之间的通信的系统示意图。系统1376可以包括服务器1378、网络1390以及包括车辆1300在内的车辆。服务器1378可以包括多个gpu1384(a)-1384(h)(这里统称为gpu1384)、pcie交换机1382(a)-1382(h)(这里统称为pcie交换机1382)和/或cpu1380(a)-1380(b)(这里统称为cpu1380)。gpu1384、cpu1380和pcie交换机可以与诸如例如且不限于nvidia开发的nvlink接口1388之类的高速互连和/或pcie连接1386互连。在一些示例中,gpu1384经由nvlink和/或nvswitchsoc连接,并且gpu1384和pcie交换机1382经由pcie互连连接。尽管图示出八个gpu1384、两个cpu1380和两个pcie交换机,但是这并不意图是限制性的。取决于实施例,服务器1378中的每一个可以包括任意数量的gpu1384、cpu1380和/或pcie交换机。例如,服务器1378中的每一个可以包括八个、十六个、三十二个和/或更多gpu1384。[0493]服务器1378可以通过网络1390并且从车辆接收图像数据,该图像数据表示示出诸如最近开始的道路工程之类的意外或改变的道路状况的图像。服务器1378可以通过网络1390并且向车辆传输神经网络1392、更新的神经网络1392和/或地图信息1394,包括关于交通和道路状况的信息。对地图信息1394的更新可以包括对于hd地图1322的更新,例如关于建筑工地、坑洼、弯道、洪水或其他障碍物的信息。在一些示例中,神经网络1392、更新的神经网络1392和/或地图信息1394可以已从新的训练和/或从环境中的任意数量的车辆接收的数据中表示和/或基于数据中心处执行的训练(例如使用服务器1378和/或其他服务器)的经验产生。[0494]服务器1378可以用来基于训练数据训练机器学习模型(例如神经网络)。训练数据可以由车辆生成,和/或可以在仿真中生成(例如使用游戏引擎)。在一些示例中,训练数据被标记(例如在神经网络受益于有监督学习的情况下)和/或经历其他预处理,而在其他示例中,训练数据不被标记和/或预处理(例如在神经网络无需有监督学习的情况下)。可以根据任何一类或更多类别的机器学习技术来执行训练,包括但不限于诸如以下类别:监督训练、半监督训练、非监督训练、自学习、强化学习、联合学习、转移学习、特征学习(包括主要组成和聚类分析)、多线性子空间学习、流形学习、表示学习(包括备用字典学习)、基于规则的机器学习、异常检测及其任何变体或组合。一旦机器学习模型被训练,机器学习模型可以由车辆使用(例如通过网络1390传输至车辆),和/或机器学习模型可以由服务器1378用来远程地监控车辆。[0495]在一些示例中,服务器1378可以接收来自车辆的数据,并且将该数据应用到最新的实时神经网络以用于实时智能推理。服务器1378可以包括由gpu1384供电的深度学习超级计算机和/或专用ai计算机,例如nvidia开发的dgx和dgx站机器。然而,在一些示例中,服务器1378可以包括仅使用cpu供电的数据中心的深度学习基础设施。[0496]服务器1378的深度学习基础设施可能够快速实时推理,并且可以使用该能力来评估并验证车辆1300中的处理器、软件和/或关联硬件的健康状况。例如,深度学习基础设施可以接收来自车辆1300的定期更新,例如图像序列和/或车辆1300已经定位的位于该图像序列中的对象(例如经由计算机视觉和/或其他机器学习对象分类技术)。深度学习基础设施可以运行它自己的神经网络以识别对象并且将它们与车辆1300识别的对象相比较,如果结果不匹配并且该基础设施得出车辆1300中的ai发生故障的结论,那么服务器1378可以向车辆1300传输信号,指示车辆1300的故障保护计算机进行控制,通知乘客,并且完成安全停车操作。[0497]为了推理,服务器1378可以包括gpu1384和一个或更多个可编程推理加速器(例如nvidia的tensorrt)。gpu供电的服务器和推理加速的组合可以使得实时响应成为可能。在其他示例中,例如在性能不那么重要的情况下,cpu、fpga和其他处理器供电的服务器可以用于推理。[0498]示例计算设备[0499]图14是适合用于实现本公开的一些实施例的示例计算设备1400的框图。计算设备1400可以包括直接或间接耦合以下设备的互连系统1402:存储器1404、一个或更多个中央处理单元(cpu)1406、一个或更多个图形处理单元(gpu)1408、通信接口1410、输入/输出(i/o)端口1412、输入/输出组件1414、电源1416,一个或更多个呈现组件1418(例如,(一个或更多个)显示器)和一个或更多个逻辑单元1420。在至少一个实施例中,(一个或更多个)计算设备1400可以包括一个或更多个虚拟机(vm),和/或其任何组件可以包括虚拟组件(例如,虚拟硬件组件)。对于非限制性示例,gpu1408中的一个或更多个可以包括一个或更多个vgpu,cpu1406中的一个或更多个可以包括一个或更多个vcpu,和/或逻辑单元1420中的一个或更多个可以包括一个或更多个虚拟逻辑单元。这样,(一个或更多个)计算设备1400可以包括分立组件(例如,专用于计算设备1400的全gpu)、虚拟组件(例如,专用于计算设备1400的gpu的一部分)、或其组合。[0500]尽管图14的各个方框被示出为利用线路经由互连系统1402连接,但这并不旨在是限制性的并且仅是为了清楚起见。例如,在一些实施例中,呈现组件1418(诸如显示设备)可被认为是i/o组件1414(例如,如果显示器是触摸屏)。作为另一个示例,cpu1406和/或gpu1408可以包括存储器(例如,存储器1404可以表示除了gpu1408的存储器、cpu1406和/或其他组件之外的存储设备)。换言之,图14的计算设备仅是说明性的。在如“工作站”、“服务器”、“膝上型计算机”、“桌面型计算机”、“平板计算机”、“客户端设备”、“移动设备”、“手持式设备”、“游戏控制台”、“电子控制单元(ecu)”、“虚拟现实系统”和/或其他设备或系统类型的此类类别之间不做区分,因为所有都被考虑在图14的计算设备的范围内。[0501]互连系统1402可表示一个或更多个链路或总线,诸如地址总线、数据总线、控制总线或其组合。互连系统1402可以包括一个或更多个总线或链路类型,诸如工业标准架构(isa)总线、扩展工业标准架构(eisa)总线、视频电子标准协会(vesa)总线、外围组件互连(pci)总线、快速外围组件互连(pcie)总线和/或另一类型的总线或链路。在一些实施例中,组件之间存在直接连接。作为示例,cpu1406可直接连接到存储器1404。进一步,cpu1406可直接连接到gpu1408。在组件之间存在直接或点对点连接的情况下,互连系统1402可包括pcie链路以执行连接。在这些示例中,pci总线不需要被包括在计算设备1400中。[0502]存储器1404可以包括各种计算机可读介质中的任何计算机可读介质。计算机可读介质可以是可由计算设备1400访问的任何可用介质。计算机可读介质可以包括易失性和非易失性介质,以及可移除和不可移除介质。作为示例而非限制,计算机可读介质可包括计算机存储介质和通信介质。[0503]计算机存储介质可以包括以用于存储诸如计算机可读取指令、数据结构、程序模块和/或其他数据类型的信息的任何方法或技术实现的易失性和非易失性介质和/或可移动和不可移动介质。例如,存储器1404可以存储计算机可读取指令(例如,表示(一个或更多个)程序和/或(一个或更多个)程序元件,诸如操作系统)。计算机存储介质可以包括但不限于ram、rom、eeprom、闪存或其他存储器技术,cd-rom、数字通用盘(dvd)或其他光盘存储、磁带盒、磁带、磁盘存储装置或其他磁性存储装置,或可用于存储所要信息且可由计算设备1400存取的任何其他介质。如本文所使用的,计算机存储介质不包括信号本身。[0504]计算机存储介质可将计算机可读取指令、数据结构、程序模块和/或其他数据类型体现在诸如载波或其他传输机制之类的已调制数据信号中,并且包括任何信息传递介质。术语“调制数据信号”可以指代以编码信号中的信息的方式设置或改变其一个或更多个特性的信号。作为示例而非限制,计算机存储介质可包括有线介质(诸如有线网络或直接有线连接)和无线介质(诸如声学、rf、红外和其他无线介质)。以上任何内容的组合也应包含在计算机可读介质的范围内。[0505]cpu1406可经配置以执行计算机可读取指令中的至少一些以控制计算设备1400的一个或更多个组件执行本文中所描述的方法和/或过程中的一个或更多个。cpu1406可各自包含能够同时处置众多软件线程的一个或更多个核心(例如,一个、两个、四个、八个、二十八个、七十二个等)。cpu1406可包含任何类型的处理器,且可取决于所实施的计算设备1400的类型而包含不同类型的处理器(例如,针对移动装置具有较少核心的处理器和针对服务器具有较多核心的处理器)。例如,取决于计算设备1400的类型,处理器可以是使用精简指令集计算(risc)实现的高级risc机器(arm)处理器或使用复杂指令集计算(cisc)实现的x86处理器。除了一个或更多个微处理器或补充协处理器(诸如数学协处理器)之外,计算设备1400还可包括一个或更多个cpu1406。[0506]除(一个或更多个)cpu1406以外或替代(一个或更多个)cpu1406,(一个或更多个)gpu1408可被配置成执行计算机可读取指令中的至少一些以控制计算设备1400的一个或更多个组件执行本文所描述的方法和/或过程中的一个或更多个。gpu1408中的一个或更多个可为集成gpu(例如,有cpu1406中的一个或更多个)和/或gpu1408中的一个或更多个可为离散gpu。在实施例中,gpu1408中的一个或更多个可以是cpu1406中的一个或更多个的协处理器。gpu1408可由计算设备1400使用以渲染图形(例如,3d图形)或执行通用计算。例如,gpu1408可用于gpu上的通用计算(gpgpu)。gpu1408可包含能够同时处置数百或数千软件线程的数百或数千核心。gpu1408可响应于渲染命令(例如,经由主机接口从cpu1406接收的渲染命令)而产生输出图像的像素数据。gpu1408可包含用于存储像素数据或任何其他合适数据(例如,gpgpu数据)的图形存储器(例如,显示存储器)。显示存储器可作为存储器1404的一部分被包括。gpu1408可包含并行操作(例如,经由链路)的两个或两个以上gpu。链路可以直接连接gpu(例如,使用nvlink)或可以通过交换机(例如,使用nvswitch)连接gpu。当组合在一起时,每一gpu1408可产生用于输出的不同部分或用于不同输出的像素数据或gpgpu数据(例如,用于第一图像的第一gpu和用于第二图像的第二gpu)。每一gpu可包含其自己的存储器,或可与其他gpu共享存储器。[0507]除cpu1406和/或gpu1408之外或替代cpu1406和/或gpu1408,逻辑单元1420可经配置以执行计算机可读取指令中的至少一些以控制计算设备1400的一个或更多个组件执行本文中所描述的方法和/或过程中的一个或更多个。在实施例中,(一个或更多个)cpu1406、(一个或更多个)gpu1408、和/或(一个或更多个)逻辑单元1420可以离散地或联合地执行方法、过程和/或其部分的任何组合。逻辑单元1420中的一个或更多个可为cpu1406和/或gpu1408中的一个或更多个中的一部分和/或集成于cpu1406和/或gpu1408中的一个或更多个和/或逻辑单元1420中的一个或更多个可为离散组件或以其他方式在cpu1406和/或gpu1408外部。在实施例中,逻辑单元1420中的一个或更多个可以是cpu1406中的一个或更多个和/或gpu1408中的一个或更多个的协处理器。[0508]逻辑单元1420的示例包括一个或更多个处理核心和/或其组件,诸如数据处理单元(dpu)、张量核心(tc)、张量处理单元(tpu)、像素视觉核心(pvc)、视觉处理单元(vpu)、图形处理群集(gpc)、纹理处理群集(tpc)、流多处理器(sm)、树横向单元(ttu)、人工智能加速器(aia)、深度学习加速器(dla)、算术逻辑单元(alu)、专用集成电路(asic)、浮点单元(fpu)、输入/输出(i/o)元件、外围组件互连(pci)或快速外围组件互连(pcie)元件等。[0509]通信接口1410可以包括使计算设备1400能够经由电子通信网络(包括有线和/或无线通信)与其他计算设备通信的一个或更多个接收机、发射机和/或收发机。通信接口1410可包括实现通过多个不同网络中的任一个进行通信的组件和功能,诸如无线网络(例如,wi-fi、z-wave、蓝牙、蓝牙le、zigbee等)、有线网络(例如,通过以太网或无限带通信)、低功率广域网(例如,lorawan、sigfox等)和/或互联网。在一个或更多个实施例中,逻辑单元1420和/或通信接口1410可以包括一个或更多个数据处理单元(dpu)以将通过网络和/或通过互连系统1402接收的数据直接传输到一个或更多个gpu1408(例如,一个或更多个gpu1408的存储器)。[0510]i/o端口1412可以使得计算设备1400能够逻辑地耦合到包括i/o组件1414、(一个或更多个)呈现组件1418和/或其他组件的其他设备,其中一些可以被内置到(例如,集成在)计算设备1400中。说明性i/o组件1414包括麦克风、鼠标、键盘、操纵杆、游戏垫、游戏控制器、碟形卫星天线、扫描仪、打印机、无线设备等。i/o组件1414可以提供处理空中姿态、语音或由用户生成的其他生理输入的自然用户界面(nui)。在一些情况下,可将输入发射到适当的网络元件以供进一步处理。nui可实现与计算设备1400的显示器相关联的语音识别、指示笔识别、面部识别、生物特征识别、屏幕上和屏幕附近的姿态识别、空中姿态、头部和眼睛追踪、以及触摸识别(如以下更详细地描述的)的任何组合。计算设备1400可以包括用于手势检测和识别的深度相机,诸如立体相机系统、红外相机系统、rgb相机系统、触摸屏技术和这些的组合。另外,计算设备1400可包含使得能够检测运动的加速度计或陀螺仪(例如,作为惯性测量单元(imu)的部分)。在一些示例中,计算设备1400可以使用加速度计或陀螺仪的输出来渲染沉浸式增强现实或虚拟现实。[0511]电源1416可包括硬连线电源、电池电源或其组合。电源1416可向计算设备1400提供电力以使得计算设备1400的组件能够操作。[0512]呈现组件1418可包括显示器(例如,监视器、触摸屏、电视屏幕、平视显示器(hud)、其他显示器类型或其组合)、扬声器和/或其他呈现组件。呈现组件1418可从其他组件(例如,gpu1408、cpu1406等)接收数据,且输出所述数据(例如,作为图像、视频、声音等)。[0513]示例数据中心[0514]图15示出了可在本公开的至少一个实施例中使用的示例数据中心1500。数据中心1500可包括数据中心基础设施层1510、框架层1520、软件层1530和/或应用层1540。[0515]如图15所示,数据中心基础设施层1510可以包括资源协调器1512、分组的计算资源1514和节点计算资源(“节点c.r.s”)1516(1)-1516(n),其中“n”表示任何完整的正整数。在至少一个实施例中,节点c.r.s1516(1)-1516(n)可包括,但不限于任何数量的中央处理单元(“cpu”)或其他处理器(包括加速器、现场可编程门阵列(fpga)、图形处理器或图形处理单元(gpu)等),存储器设备(例如,动态只读存储器),存储设备(例如,固态或磁盘驱动器),网络输入/输出(“nwi/o”)装置、网络交换机、虚拟机(“vm”)、功率模块和/或冷却模块,等等。在一些实施例中,来自节点c.r.s1516(1)-1516(n)中的一个或更多个节点c.r.s可对应于具有上述计算资源中的一个或更多个的服务器。此外,在一些实施例中,节点c.r.s1516(1)-15161(n)可包括一个或更多个虚拟组件,诸如vgpu、vcpu等,和/或节点c.r.s1516(1)-1516(n)中的一个或更多个可对应于虚拟机(vm)。[0516]在至少一个实施例中,分组的计算资源1514可包括容纳在一个或更多个机架(未示出)内的节点c.r.s1516的单独分组,或容纳在不同地理位置(也未示出)处的数据中心内的许多机架。分组的计算资源1514内的节点c.r.s1516的单独分组可包括可被配置或分配来支持一个或更多个工作负荷的分组计算、网络、存储器或存储资源。在至少一个实施例中,包括cpu、gpu、dpu和/或其他处理器的若干节点c.r.s1516可以分组在一个或更多个机架内以提供计算资源来支持一个或更多个工作负荷。一个或更多个机架还可包括任意组合的任意数量的功率模块、冷却模块和/或网络交换机。[0517]资源协调器1522可配置或以其他方式控制一个或更多个节点c.r.s1516(1)-1516(n)和/或分组的计算资源1514。在至少一个实施例中,资源协调器1522可以包括用于数据中心1500的软件设计基础设施(“sdi”)管理实体。资源协调器1522可以包括硬件、软件或其某种组合。[0518]在至少一个实施例中,如图15所示,框架层1520可以包括作业调度器1533、配置管理器1534、资源管理器1536和/或分布式文件系统1538。框架层1520可以包括支持软件层1530的软件1532和/或应用层1540的一个或更多个应用1542的框架。软件1532或应用1542可分别包含基于网络的服务软件或应用,例如由amazon(亚马逊)网络服务、googlecloud(谷歌云)和microsoftazure提供的那些。框架层1520可以是但不限于可以利用分布式文件系统1538进行大规模数据处理(例如,“大数据”)的免费和开源的软件网络应用框架(如apachesparktm(下文称为“spark”))的类型。在至少一个实施例中,作业调度器1533可以包括spark驱动器以促进调度由数据中心1500的不同层支持的工作负荷。配置管理器1534可以能够配置不同层,诸如软件层1530和框架层1520(其包括用于支持大规模数据处理的spark和分布式文件系统1538)。资源管理器1536可以能够管理被映射到分布式文件系统1538和作业调度器1533或被分配用于支持分布式文件系统1538和作业调度器1533的集群的或分组的计算资源。在至少一个实施例中,集群的或分组的计算资源可包括在数据中心基础设施层1510的分组的计算资源1514。资源管理器1536可与资源协调器1512协调以管理这些被映射或分配的计算资源。[0519]在至少一个实施例中,在软件层1530中包括的软件1532可包括由节点c.r.s1516(1)-1516(n)、分组的计算资源1514和/或框架层1520的分布式文件系统1538中的至少部分使用的软件。一种或更多种类型的软件可以包括但不限于互联网网页搜索软件、电子邮件病毒扫描软件、数据库软件和流式视频内容软件。[0520]在至少一个实施例中,在应用层1540中包括的应用1542可包括由节点c.r.s1516(1)-1516(n)、分组的计算资源1514和/或框架层1520的分布式文件系统1538中的至少部分使用的一个或更多个类型的应用。一种或更多种类型的应用可以包括但不限于任何数量的基因组应用、认知计算和机器学习应用,包括训练或推断软件、机器学习框架软件(例如,pytorch、tensorflow、caffe等)和/或结合一个或更多个实施例使用的其他机器学习应用。[0521]在至少一个实施例中,配置管理器1534、资源管理器1536和资源协调器1512中的任一个可基于在任何技术上可行的方式中获取的任何量和类型的数据来实现任何数量和类型的自修改动作。自修改动作可使数据中心1500的数据中心操作者免于做出可能较差的配置决策和可能避免数据中心的未充分利用和/或较差执行部分。[0522]根据本文描述的一个或更多个实施例,数据中心1500可包括工具、服务、软件或其他资源来训练一个或更多个机器学习模型或使用一个或更多个机器学习模型来预测或推断信息。例如,可以通过使用以上相对于数据中心1500描述的软件和/或计算资源根据神经网络架构来计算权重参数来训练(一个或更多个)机器学习模型。在至少一个实施例中,对应于一个或更多个神经网络的经训练或部署的机器学习模型可用于通过使用通过一种或更多种训练技术(诸如但不限于本文中描述的那些训练技术)计算的权重参数,使用上文相对于数据中心1500描述的资源来推断或预测信息。[0523]在至少一个实施例中,数据中心1500可使用cpu、专用集成电路(asic)、gpu、fpga和/或其他硬件(或与其对应的虚拟计算资源)来使用上述资源执行训练和/或推断。此外,上文所描述的一或更多个软件和/或硬件资源可被配置为允许用户训练或执行对信息的推断的服务,例如图像识别、语音识别或其他人工智能服务。[0524]示例网络环境[0525]适合用于实现本公开的实施例的网络环境可以包括一个或更多个客户端设备、服务器、网络附加存储(nas)、其他后端设备和/或其他设备类型。客户端设备、服务器和/或其他设备类型(例如,每个设备)可以在图14的(一个或更多个)计算设备1400的一个或更多个实例上实现——例如,每个设备可以包括(一个或更多个)计算设备1400的类似部件、特征和/或功能。此外,在实现后端设备(例如,服务器、nas等)的情况下,后端设备可被包括作为数据中心1500的一部分,数据中心1500的示例在本文中关于图15更详细地描述。[0526]网络环境的组件可经由网络彼此通信,所述网络可为有线的、无线的或为两者。网络可以包括多个网络或多个网络中的一个网络。例如,网络可包括一个或更多个广域网(wan)、一个或更多个局域网(lan)、一个或更多个公共网络(诸如互联网和/或公共交换电话网(pstn))和/或一个或更多个私有网络。在网络包括无线电信网络的情况下,诸如基站、通信塔或者甚至接入点(以及其他组件)的组件可以提供无线连接。[0527]兼容的网络环境可以包括一个或更多个对等网络环境(在这种情况下,服务器可以不被包括在网络环境中)和一个或更多个客户端-服务器网络环境(在这种情况下,一个或更多个服务器可以被包括在网络环境中)。在对等网络环境中,本文针对服务器所描述的功能可在任何数量的客户端设备上实现。[0528]在至少一个实施例中,网络环境可包括一个或更多个基于云的网络环境、分布式计算环境、其组合等。基于云的网络环境可包括框架层、作业调度器、资源管理器和在一个或更多个服务器上实现的分布式文件系统,所述服务器可包括一个或更多个核心网服务器和/或边缘服务器。框架层可包括支持软件层的软件和/或应用层的一个或更多个应用的框架。软件或应用可分别包含基于网络的服务软件或应用。在实施例中,一个或更多个客户端设备可以使用基于网络的服务软件或应用(例如,通过经由一个或更多个应用编程接口(api)访问服务软件和/或应用)。框架层可以是但不限于如可以使用分布式文件系统进行大规模数据处理(例如,“大数据”)的一种免费和开源软件网络应用框架。[0529]基于云的网络环境可提供执行本文描述的计算和/或数据存储功能(或其一个或更多个部分)的任何组合的云计算和/或云存储。这些不同功能中的任何功能可以分布在来自(例如,可以分布在州、地区、国家、全球等的一个或更多个数据中心的)中央或核心服务器的多个位置上。如果与用户(例如,客户端设备)的连接相对靠近边缘服务器,则核心服务器可以将功能的至少一部分指定给边缘服务器。基于云的网络环境可以是私有的(例如,限于单个组织),可以是公共的(例如,对许多组织可用),和/或其组合(例如,混合云环境)。[0530](一个或更多个)客户端设备可以包括本文关于图14所描述的(一个或更多个)示例计算设备1400的组件、特征和功能中的至少一些。作为示例而非限制,客户端设备可被实现为个人计算机(pc),膝上型计算机、移动设备、智能电话、平板计算机、智能手表、可穿戴计算机、个人数字助理(pda)、mp3播放器、虚拟现实耳机、全球定位系统(gps)或设备、视频播放器、摄像机、监视设备或系统、车辆、船、飞船、虚拟机、无人机、机器人、手持式通信设备、医院设备、游戏设备或系统、娱乐系统、车辆计算机系统、嵌入式系统控制器、遥控器、电器、消费电子设备、工作站、边缘设备、这些描绘的设备的任何组合或任何其他合适的设备。[0531]本公开可以在由计算机或者诸如个人数字助理或其他手持式设备之类的其他机器执行的、包括诸如程序模块之类的计算机可执行指令的机器可使用指令或者计算机代码的一般背景下进行描述。通常,包括例程、程序、对象、组件、数据结构等等的程序模块指的是执行特定任务或者实现特定抽象数据类型的代码。本公开可以在各种各样的系统配置中实践,这些配置包括手持式设备、消费电子器件、通用计算机、更专业的计算设备等等。本公开也可以在其中任务由通过通信网络链接的远程处理设备执行的分布式计算环境中实践。[0532]如在本文中使用的,“和/或”关于两个或更多元件的叙述应当解释为仅指一个元件或者元件组合。例如,“元件a、元件b和/或元件c”可以包括仅仅元件a,仅仅元件b,仅仅元件c,元件a和元件b,元件a和元件c,元件b和元件c,或者元件a、b和c。此外,“元件a或元件b中的至少一个”可以包括元件a中的至少一个,元件b中的至少一个,或者元件a中的至少一个和元件b中的至少一个。进一步,“元件a和元件b中的至少一个”可以包括元件a中的至少一个,元件b中的至少一个,或者元件a中的至少一个和元件b中的至少一个。[0533]这里详细地描述了本公开的主题以满足法定要求。然而,描述本身并非意在限制本公开的范围。相反地,本公开人已经设想到,要求保护的主题也可以以其他的方式具体化,以包括与本文中结合其他当前或未来技术描述的步骤不同的步骤或者相似的步骤的组合。而且,尽管术语“步骤”和/或“块”在本文中可以用来隐含采用的方法的不同元件,但是这些术语不应当被解释为暗示本文公开的各个步骤之中或之间的任何特定顺序,除非明确描述了各步骤的顺序。当前第1页12当前第1页12
技术特征:
1.一种系统,包括:直接存储器访问dma系统;处理控制器;以及多输入签名寄存器misr硬件组件,其包括处理电路,用于:基于所述处理控制器的排序,从所述dma系统接收多个数据信道;通过对所述多个信道中的每个信道执行循环冗余校验crc计算以计算misr值,来计算多个misr值;使用所述多个misr值计算最终的misr值;将所述最终的misr值与签名值进行比较;以及至少部分地基于所述比较,输出misr状态。2.如权利要求1所述的系统,还包括存储器,其中来自所述dma系统的数据包括使用所述dma系统从所述存储器检索的数据或与从所述存储器检索的所述数据相对应的地址数据中的至少一个。3.如权利要求1所述的系统,其中使用所述misr硬件组件的misr控制为每个信道编程用于每个crc计算的种子值,所述misr控制使用所述处理控制器来配置。4.如权利要求1所述的系统,还包括向量处理单元vpu,其中在所述vpu处理misr测试之后,从向量存储器vmem中检索来自所述dma系统的所述多个数据信道。5.如权利要求4所述的系统,其中所述misr测试包括测试数据和测试指令,所述vpu根据所述测试指令处理所述测试数据并将所述misr测试的输出写入所述vmem。6.如权利要求1所述的系统,还包括安全处理器,其中当所述misr状态指示错误或超时时,将所述misr状态输出到所述安全处理器。7.如权利要求1所述的系统,其中所述misr硬件组件进一步用于至少部分地基于所述misr硬件组件的信道屏蔽寄存器的配置来屏蔽所述多个信道中的一个或更多个信道,所述信道屏蔽寄存器使用所述处理控制器进行配置。8.如权利要求1所述的系统,其中所述系统被包括在以下的至少一项中:用于自主或半自主机器的控制系统;用于自主或半自主机器的感知系统;用于执行模拟操作的系统;用于执行深度学习操作的系统;片上系统soc;包括可编程视觉加速器pva的系统;包括视觉处理单元的系统;使用边缘设备实现的系统;使用机器人实现的系统;合并一个或更多个虚拟机vm的系统;至少部分地在数据中心中实现的系统;或者至少部分地使用云计算资源实现的系统。9.一种多输入签名寄存器misr硬件组件,包括处理电路,用于:基于处理控制器的排序,从直接存储器访问dma系统接收多个数据信道;
通过对所述多个信道中的每个信道执行循环冗余校验crc计算以计算misr值,来计算多个misr值;使用所述多个misr值计算最终的misr值;将所述最终的misr值与签名值进行比较;以及至少部分地基于所述比较输出misr状态。10.如权利要求9所述的misr硬件组件,其中来自所述dma系统的数据包括使用所述dma系统从存储器检索的数据或与从所述存储器检索的所述数据相对应的地址数据中的至少一个。11.如权利要求9所述的misr硬件组件,其中使用所述misr硬件组件的misr控制为每个信道编程用于每个crc计算的种子值,所述misr控制使用所述处理控制器来配置。12.如权利要求9所述的misr硬件组件,其中在向量处理单元vpu处理misr测试之后,从向量存储器vmem中检索来自所述dma系统的所述多个数据信道。13.如权利要求12所述的misr硬件组件,其中所述misr测试包括测试数据和测试指令,所述vpu根据所述测试指令处理所述测试数据并将所述misr测试的输出写入所述vmem。14.如权利要求9所述的misr硬件组件,其中当所述misr状态指示错误或超时时,将所述misr状态输出到安全处理器。15.如权利要求9所述的misr硬件组件,还包括至少部分地基于所述misr硬件组件的信道屏蔽寄存器的配置来屏蔽所述多个信道中的一个或更多个信道,所述信道屏蔽寄存器使用所述处理控制器来配置。16.如权利要求9所述的misr硬件组件,其中所述misr硬件组件被包括在以下的至少一项中:用于自主或半自主机器的控制系统;用于自主或半自主机器的感知系统;用于执行模拟操作的系统;用于执行深度学习操作的系统;片上系统soc;包括可编程视觉加速器pva的系统;包括视觉处理单元的系统;使用边缘设备实现的系统;使用机器人实现的系统;合并一个或更多个虚拟机vm的系统;至少部分地在数据中心中实现的系统;或者至少部分地使用云计算资源实现的系统。17.一种方法,包括:基于处理控制器的排序,一次一个信道地从直接存储器访问dma系统接收多个数据信道;通过对每个信道执行循环冗余校验crc计算以计算misr值,来计算多个多输入单寄存器misr值;使用所述多个misr值计算最终的misr值;
将所述最终的misr值与签名值进行比较;以及至少部分地基于所述比较输出misr状态。18.如权利要求17所述的方法,其中来自所述dma系统的所述数据包括使用所述dma系统从存储器检索的数据或与从所述存储器检索的所述数据相对应的地址数据中的至少一种。19.如权利要求17所述的方法,其中使用所述misr硬件组件的misr控制为每个信道编程用于每个crc计算的种子值,所述misr控制使用所述处理控制器来配置。20.如权利要求17所述的方法,其中在向量处理单元vpu处理misr测试之后,从向量存储器vmem中检索来自dma系统的所述多个数据信道。
技术总结
本公开涉及用于片上系统的可编程视觉加速器的内置自测试。在各种示例中,可以优化VPU和相关联的组件以提高VPU性能和吞吐量。例如,VPU可以包括最小值/最大值收集器、自动存储预测功能、允许通道间共享的SIMD数据路径组织、具有步幅参数功能的转置负载/存储、具有置换和零插入功能的加载、硬件、逻辑和存储器布局功能,以允许两点和逐两点查找,以及每个存储器组加载高速缓存功能。此外,可以使用解耦加速器来卸载VPU处理任务以提高吞吐量和性能,并且硬件定序器可以被包括在DMA系统中以降低VPU和DMA系统的编程复杂性。DMA和VPU可以执行允许VPU和DMA在没有用于执行基于动态区域的数据移动操作的处理控制器的情况下操作的VPU配置模式。配置模式。配置模式。
技术研发人员:A
受保护的技术使用者:辉达公司
技术研发日:2022.07.05
技术公布日:2023/2/9
转载请注明原文地址:https://wp.8miu.com/read-76267.html