CN117472269A - 片上系统的大数据集的无损压缩 - Google Patents

片上系统的大数据集的无损压缩 Download PDF

Info

Publication number
CN117472269A
CN117472269A CN202310938086.1A CN202310938086A CN117472269A CN 117472269 A CN117472269 A CN 117472269A CN 202310938086 A CN202310938086 A CN 202310938086A CN 117472269 A CN117472269 A CN 117472269A
Authority
CN
China
Prior art keywords
computing element
memory
local memory
data
subsystem
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202310938086.1A
Other languages
English (en)
Inventor
斯里达尔·古鲁穆尔蒂·伊苏卡帕利·夏尔马
理查德·劳伦斯·格林
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Meta Platforms Technologies LLC
Original Assignee
Meta Platforms Technologies LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US17/934,835 external-priority patent/US20240094907A1/en
Application filed by Meta Platforms Technologies LLC filed Critical Meta Platforms Technologies LLC
Publication of CN117472269A publication Critical patent/CN117472269A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7807System on chip, i.e. computer system on a single chip; System in package, i.e. computer system on one or more chips in a single package
    • G06F15/781On-chip cache; Off-chip memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0656Data buffering arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0662Virtualisation aspects
    • G06F3/0664Virtualisation aspects at device level, e.g. emulation of a storage device or system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]

Abstract

一种片上系统(SoC)包括第一子系统、第二子系统和压缩块,该压缩块连接到第一子系统和第二子系统,其中,压缩块包括解码器和编码器。压缩块接收由第一子系统和第二子系统中的一者中的计算元件生成的溢出数据,使用编码器压缩该溢出数据,并将压缩后的溢出数据存储在多个计算元件中的一者的本地存储器中的数据块中。

Description

片上系统的大数据集的无损压缩
相关申请的交叉引用
本申请要求于2022年7月27日提交的、第63/369,616号美国临时专利申请、以及于2022年9月23日提交的、第17/934,835号美国专利申请的权益,上述申请的全部内容通过引用并入本文。
技术领域
本公开总体上涉及存储器管理,并且尤其涉及虚拟存储系统中的大数据集(largedata set)的存储高效处理。
背景技术
当计算系统运行时,该系统使用易失性存储器(例如静态随机存取存储器(StaticRandom-Access Memory,SRAM))来存储可执行代码和数据。SRAM被认为是易失性的,是因为尽管SRAM使用锁存电路来存储每个数据位,但当断电时,存储在SRAM中的数据会丢失。
片上系统(Systems on a Chip,SoC)通常将很大一部分芯片面积(die area)专门用于SRAM。片内SRAM(on-die SRAM)提供了非常大的带宽、低延迟和低功率的存储器解决方案。然而,这种解决方案本质上通常是分布式的。也即,片内SRAM中作为本地存储器分布的部分位于使用该存储器的计算元件或多个计算元件附近。这种方法允许非常宽并因此较高的带宽、低延迟的接口,同时使在芯片上的长导线上进行通信所消耗的能量最小化。然而,当与不位于分布式的本地存储器附近的计算元件共享该存储器时,延迟可能会成为问题,因为这将需要更窄的连接以避免在芯片上布置大量走线。
人工现实系统是一种依赖于非易失性存储器(例如SRAM)的计算机系统。通常,人工现实是在呈现给用户之前已经以某种方式进行了调整的现实形式,该人工现实例如可以包括虚拟现实(virtual reality,VR)、增强现实(augmented reality,AR)、混合现实(mixed reality,MR)、混合现实(hybrid reality)、或它们的某种组合和/或衍生物。人工现实系统包括一个或多个用于渲染内容并向用户显示该内容的设备。人工现实系统的示例可以包含由用户佩戴、并且被配置为向用户输出人工现实内容的头戴式显示器(head-mounted display,HMD)。在一些示例中,HMD可以耦接(例如,无线地或以系留方式)到执行一个或多个人工现实相关功能的外围设备。
发明内容
总体上,本公开针对用于压缩激活数据的技术、以及用于将压缩后的激活数据的多个部分存储在本地存储器中而不是片外存储器(off die memory)中的技术。例如,低功率片上系统(SoC)可以具有这样的系统和子系统:所述系统和子系统各自包含作为本地存储器分布的SRAM。本地存储器(local memory,LMEM)可以用作静态存储器(static memory,SMEM)、高速缓冲存储器、或SMEM与高速缓冲存储器的组合。本地存储器的一部分也可以被分配为虚拟SMEM(virtual SMEM,VSMEM),并且用于在本地将大数据集(例如由数据溢出产生的数据)存储为压缩后的数据,从而减少使用片外动态随机存取存储器(DynamicRandom-Access Memory,DRAM)。
在一个示例方法中,片上系统(SoC)包括第一子系统、第二子系统和压缩块,该压缩块连接到第一子系统和第二子系统,其中,压缩块包括解码器和编码器。压缩块接收由第一子系统和第二子系统中的一者中的计算元件生成的溢出数据,使用编码器压缩该溢出数据,并将压缩后的溢出数据存储在各计算元件中的一者的本地存储器中的数据块中。本文所描述的技术可以在具有多个用于执行系统的各种功能的子系统的SoC上实现。这种子系统的示例包括系统控制子系统、通信子系统、安全子系统、视频处理子系统等。这些子系统中的一些子系统可能不需要始终处于活动状态。例如,如上面所讨论的,如果系统上的摄像头不处于使用状态,则视频子系统不需要通电。
在一个示例中,在包括第一子系统、第二子系统和压缩块的片上系统(SoC)中,该压缩块连接到第一子系统和第二子系统,该压缩块包括解码器和编码器,其中,第一子系统包括连接到第一本地存储器的第一计算元件,并且第二子系统包括连接到第二本地存储器的第二计算元件,一种方法包括:在压缩块处接收由第一计算元件和第二计算元件中的一者生成的溢出数据;使用编码器压缩该溢出数据;以及将压缩后的溢出数据存储在第一计算元件和第二计算元件中的一者的本地存储器中的数据块中。在另一示例中,一种片上系统(SoC)包括:第一子系统,该第一子系统包括第一计算元件和第一本地存储器,该第一本地存储器连接到第一计算元件;第二子系统包括第二计算元件和第二本地存储器,该第二本地存储器连接到第二计算元件;以及压缩块,该压缩块连接到第一子系统和第二子系统,该压缩块包括解码器和编码器。压缩块接收由第一计算元件和第二计算元件中的一者生成的溢出数据,使用编码器压缩该溢出数据,并将压缩后的溢出数据存储在第一计算元件和第二计算元件中的一者的本地存储器中的数据块中。压缩块还接收来自第一计算元件和第二计算元件中的一者的、对溢出数据的读取请求,从第一计算元件和第二计算元件中的一者的本地存储器取回所请求的溢出数据,使用解码器解压缩所请求的、压缩后的溢出数据,并将解压缩后的溢出数据返回给发出读取请求的计算元件。
在又一示例中,人工现实系统包括头戴式显示器(HMD),该HMD被配置为输出人工现实内容,该HMD包括显示器和至少一个片上系统(SoC)。该至少一个SoC包括:第一子系统,该第一子系统包括第一计算元件和第一本地存储器,该第一本地存储器连接到第一计算元件;第二子系统,该第二子系统包括第二计算元件和第二本地存储器,该第二本地存储器连接到第二计算元件;以及压缩块,该压缩块连接到第一子系统和第二子系统,该压缩块包括解码器和编码器。压缩块接收由第一计算元件和第二计算元件中的一者生成的溢出数据,使用编码器压缩该溢出数据,并将压缩后的溢出数据存储在第一计算元件和第二计算元件中的一者的本地存储器中的数据块中。压缩块还接收来自第一计算元件和第二计算元件中的一者的、对溢出数据的读取请求,从第一计算元件和第二计算元件中的一者的本地存储器取回所请求的溢出数据,使用解码器解压缩所请求的、压缩后的溢出数据,并将解压缩后的溢出数据返回给发出读取请求的计算元件。
在附图和以下描述中对本公开的多种技术的一个或多个示例的细节进行了阐述。这些技术的其他特征、对象和优势将从该描述和附图、以及从权利要求中变得显而易见。
附图说明
图1是描绘了根据本公开所描述的技术布置的示例人工现实系统的图示,该人工现实系统包括具有计算元件和本地存储器的SoC。
图2A是描绘了根据本公开所描述的技术的示例HMD的图示,该HMD具有多个计算元件、以及由该多个计算元件共享的本地存储器。
图2B是描绘了根据本公开所描述的技术的另一示例HMD的图示,该HMD包括具有多个计算元件、以及由该多个计算元件共享的本地存储器的SoC。
图3是示出了根据本公开所描述的技术的图1中的人工现实系统的控制台和HMD的示例实施方式的框图。
图4是描绘了根据本公开所描述的技术的图1中的人工现实系统的一个示例HMD的框图。
图5是示出了根据本公开所描述的技术的多设备人工现实系统的分布式架构的示例实施方式的框图,在该多设备人工现实系统中,一个或多个设备是使用各设备内的一个或多个SoC来实现的。
图6是示出了根据本公开所描述的技术的分布式存储系统中的示例高速缓冲存储器的框图。
图7是示出了根据本公开所描述的技术的具有示例分布式存储系统的SoC的框图,该示例分布式存储系统使用无损压缩和虚拟化来降低SoC中的功率。
图8是示出了根据本公开所描述的技术的图7中的压缩块中的压缩的框图。
图9是示出了根据本公开所描述的技术的图7中的压缩块中的解压缩的框图。
图10是根据本公开所描述的技术的图7中的压缩块的更详细的框图。
图11示出了根据本公开所描述的技术的可在图10中的压缩块中使用的写入描述符链和读取描述符链。
图12示出了根据本公开所描述的技术的可在图10中的压缩块中使用的示例重定向地址表(Redirection Address Table)和示例块状态表(Block Status Table)。
图13示出了根据本公开所描述的技术的可与图10中的压缩块一起使用的示例数据和控制互连。
图14是描绘了根据本公开所描述的技术的将压缩后的数据写入SMEM的流程图。
图15是描绘了根据本公开所描述的技术的从SMEM读取压缩后的数据的流程图。
图16是描绘了根据本公开所描述的技术的将压缩后的数据写入VSMEM的流程图。
图17是描绘了根据本公开所描述的技术的从VSMEM读取压缩后的数据的流程图。
具体实施方式
对大数据集的高效追踪和处理是任何人工现实系统的重要组成部分。这些系统通常是内存受限的,其中本地存储器在处理期间提供对数据集的低功率、快速访问。片上系统例如可以具有系统和子系统,每个系统和子系统包含有限数量的SRAM作为本地存储器。在一些示例中,本地存储器可以被配置为SMEM、高速缓冲存储器、或SMEM与高速缓冲存储器的组合。
机器学习在人工现实系统中扮演着重要的角色。然而,由于机器学习模型在训练时可能会导致大量激活,从而超过从有限的本地存储器分配给处理器的内存,因此在人工现实系统内训练机器学习模型可能会在系统上产生任务。用于激活的数据可以被换出到外部存储器(例如DRAM)中,但这种方法引入了延迟并增加了功耗。例如,对于被换出到DRAM的深度优化模型,在推断期间,用于激活的DRAM带宽(假设SoC上的本地存储器为4兆字节(MB))约为13.15吉字节/秒(GB/sec),这种情况大约在50%的情况下会发生。溢出到DRAM也非常低效(在一些情况下,每次激活消耗500毫瓦(mW))。
本地存储器的一部分可以被分配为用于在激活期间处理数据集的SMEM。然而,对于正被处理的数据集来说,所分配的SMEM可能是不足够的,从而在数据集流出所分配的本地存储器(即,数据溢出)时需要换出数据集的部分。例如,在训练机器学习模型时、在图像或图形处理期间、在计算机视觉中以及在压缩大数据集时,可能会发生数据溢出。数据溢出通常本地存储在高速缓冲存储器中、或存储在其他本地存储器中,并根据需要将数据块换出到片外存储器中。
在另一种方法中,数据集可以存储在本地存储器中的高速缓冲存储器中,并根据需要将数据块换出到片外存储器中。然而,这种方法可能会与其他进程(例如计算机视觉或数据压缩)冲突,从而导致多个相互竞争的进程之间的颠簸(thrashing)。另外,数据溢出(例如激活期间的数据溢出)在本质上是暂时的,典型地是一次写入和一次读取,并且引用的局域性较差,从而降低了高速缓冲存储器的效率。
替代地,在一个示例方法中,本地存储器的一部分被分配为虚拟SMEM(VSMEM)。所分配的VSMEM将来自大数据集(例如激活数据集)的溢出数据作为虚拟空间中的压缩后的数据本地存储在LMEM中,从而减少使用片外存储器。
图1是描绘了根据本公开所描述的技术布置的示例人工现实系统的图示,该人工现实系统包括具有计算元件和本地存储器的SoC。图1中的人工现实系统可以是虚拟现实系统、增强现实系统、或混合现实系统。在图1的示例中,人工现实系统100(也称为AR系统100、系统100)包括头戴式显示器(HMD)112、一个或多个控制器114A和114B(统称为“一个或多个控制器114”),并且在一些示例中,可以包括一个或多个外部传感器90(也称为传感器90)和/或控制台106。
HMD 112通常由用户110佩戴,并且包括用于将人工现实内容122作为虚拟对象120呈现给用户110的电子显示器和光学组件。另外,HMD 112包括内部控制单元140和用于追踪HMD 112的运动的一个或多个传感器136(例如,加速度计)。在一个示例方法中,如以下所详细描述的,内部控制单元140包括一个或多个SoC,每个SoC包括两个或更多个计算元件、以及存储器,该存储器分布在多个特定计算元件中但可由其他计算元件访问。HMD 112还可以包括一个或多个图像采集设备138(例如,摄像头、行扫描仪),以用于采集周围物理环境的图像数据。尽管AR系统100被示出为头戴式显示器,但是该AR系统100可以替换地或附加地包括用于向用户110呈现人工现实内容122的眼镜或其他显示设备。
一个或多个控制器114中的每个控制器是用户110可以用来向控制台106、HMD 112或AR系统100中的另一部件提供输入的输入设备。控制器114可以包括一个或多个存在敏感(presence-sensitive)表面,存在敏感表面用于通过检测触摸或悬停在该存在敏感表面的位置上方的一个或多个对象(例如手指、触控笔)的存在,来检测用户输入。在一些示例中,一个或多个控制器114可以包括输出显示器,在一些示例中,该输出显示器可以是存在敏感显示器。在一些示例中,一个或多个控制器114可以是智能手机、平板电脑、个人数字助理(personal data assistant,PDA)、或其他手持式设备。在一些示例中,一个或多个控制器114可以是智能手表、智能环、或其他可穿戴设备。一个或多个控制器114也可以是自助服务终端(kiosk)的一部分、或其他静止或移动系统的一部分。可替换地或另外地,一个或多个控制器114可以包括其他用户输入机械装置(例如一个或多个按钮、触发器、操纵杆、或方向键等),以使用户能够与AR系统100呈现给用户110的人工现实内容122的各方面进行交互、和/或对AR系统100呈现给用户110的人工现实内容122的各方面进行控制。
在该示例中,控制台106被示出为单个计算设备,例如游戏机、工作站、台式计算机、或膝上型计算机。在其他示例中,控制台106可以分布在多个计算设备上,例如分布式计算网络、数据中心、或云计算系统。如该示例中所示,控制台106、HMD 112和传感器90可以经由网络104通信地耦接,该网络可以是有线网络或无线网络,例如无线网络通信技术(Wi-Fi)、网状网络或短距离无线通信介质、或它们的组合。尽管HMD 112在该示例中被示出为与控制台106通信(例如,系连到控制台106或与控制台106无线通信),但是在一些实施方式中,HMD 112作为独立的移动AR系统来操作,并且AR系统100可以省略控制台106。
通常,AR系统100在HMD 112处渲染人工现实内容122,以供显示给用户110。在图1的示例中,用户110观看由如下的人工现实应用程序所构造和渲染的人工现实内容122:该人工现实应用程序在HMD 112和/或控制台106内的计算元件上执行。在一些示例中,人工现实内容122可以是完全人工的,也即,与用户110所处的环境无关的图像。在一些示例中,人工现实内容122可以包括以下项的混合:真实世界影像(例如,用户110的手、一个或多个控制器114、用户110附近的其他环境对象)与虚拟对象120,以产生混合现实和/或增强现实。在一些示例中,虚拟内容项可以(例如相对于真实世界影像)被映射(例如,钉、锁定、放置)到人工现实内容122内的特定位置。虚拟内容项的位置可以是固定的,例如,相对于墙或地球中的一者是固定的。虚拟内容项的位置可以是可变的,例如,相对于一个或多个控制器114或用户是可变的。在一些示例中,虚拟内容项在人工现实内容122内的特定位置与真实世界物理环境内的位置相关联(例如,在物理对象的表面上)。
在操作期间,人工现实应用程序通过追踪和计算参照系的姿态信息(通常是HMD112的观看视角),来构造用于向用户110显示的人工现实内容122。人工现实应用程序将HMD112用作参照系,并且基于通过HMD 112的当前估计姿态而确定的当前视场,来渲染三维(3D)人工现实内容,在一些示例中,该3D人工现实内容可以至少部分地覆盖在用户110的真实世界3D物理环境上。在该过程期间,人工现实应用程序使用从HMD 112和/或控制器114接收到的感测数据(例如,移动信息和用户命令),以及在一些示例中的来自任何外部传感器90(例如外部摄像头)的数据,来采集真实世界物理环境内的3D信息(例如,用户110的运动和/或关于用户110的特征追踪信息)。人工现实应用程序基于感测数据确定HMD 112的参照系的当前姿态,并根据该当前姿态来渲染人工现实内容122。
AR系统100可以基于用户110的当前视场130(如可以通过用户的实时视线追踪或其他条件确定),触发虚拟内容项的生成和渲染。更具体地,HMD 112的图像采集设备138采集图像数据,该图像数据表示真实世界物理环境中的处在图像采集设备138的视场130内的对象。视场130通常与HMD 112的观看视角对应。在一些示例中,人工现实应用程序呈现包括混合现实和/或增强现实的人工现实内容122。人工现实应用程序可以(例如,在人工现实内容122内),渲染与虚拟对象120一起处在视场130内的真实世界对象(例如,用户110的外围设备的部分、手的一部分和/或手臂的一部分)的图像。在其他示例中,人工现实应用程序可以在人工现实内容122内渲染用户110的外围设备、手、和/或手臂的、处在视场130内的部分的虚拟表示(例如,将真实世界对象渲染为虚拟对象120)。在任一示例中,用户110能够在人工现实内容122内渲染其手、手臂、外围设备和/或任何其他真实世界对象在视场130内的部分。在其他示例中,人工现实应用程序可以不渲染用户110的手或手臂的表示。
为了单独提供虚拟内容或提供覆盖有场景中真实世界对象的虚拟内容,HMD 112可以包括显示系统。例如,显示系统可以包括投影仪和波导,该波导被配置为将投影仪输出的图像平移到用户的眼睛或双眼可见的位置。投影仪可以包括显示器和投影仪透镜。波导可以包括输入光栅耦合器,以将来自投影仪的光重定向到该波导中,并且该波导可以通过全内反射(total internal reflection,TIR)来“捕获”光。例如,显示器可以包括红色发光二极管(Light-Emitting Diode,LED)、绿色LED和蓝色LED的阵列。在一些示例中,可以通过组合器将来自红色、绿色和蓝色LED阵列中的每个LED的红色光、绿色光和蓝色光组合来形成彩色图像。波导可以包括输出光栅,以将光重定向出该波导,例如指向适眼区(eye box)。在一些示例中,投影仪透镜可以准直来自显示器的光,例如,该显示器可以大体上位于投影仪透镜的焦点处。光栅耦合器可以将来自显示器的经准直的光重定向到波导中,并且该光可以在波导表面通过TIR在该波导内传播。波导可以包括输出结构(例如,孔、凸起、点、全息光学元件(holographic optical element,HOE)、衍射光学元件(diffractive opticalelement,DOE)等),以将来自波导的光重定向到用户的眼睛,该输出结构将来自投影仪的显示器的、经准直的光聚焦在用户的视网膜上,从而在用户的视网膜上重构显示图像。在一些示例中,波导的TIR起到镜子的作用,并且不显著影响显示器的图像质量,例如,用户观看显示器相当于观看在镜子中的显示器。
如本文所进一步描述的,人工现实系统100的一个或多个设备(例如HMD 112、控制器114和/或控制台106)可以包括多个SoC。此外,这些SoC中的一个或多个SoC可以包括具有计算元件152(也称为COMP 152)、以及与计算元件并置的片内存储器154(也称为本地存储器154)的SoC 150。尽管参考图1中的控制台106对HMD 112进行了详细地图示,但是该HMD112可以包括SoC 150的示例实例。在一个示例方法中,内部控制单元140包括具有两个或更多个子系统的SoC 150。每个子系统包括计算元件152(处理器或协处理器)和对应的本地存储器154(例如,SRAM),该本地存储器与计算元件152并置。在一些这种SoC中,片内SRAM的部分被物理地分布在整个SoC中作为本地存储器(LMEM)154,其中,LMEM 154的不同实例位于靠近每个计算元件152的位置。这种方法允许非常宽、非常高的带宽,以及到最接近的计算元件的低延迟接口,同时使在芯片上的长导线上进行通信所消耗的能量最小化。
如本文所进一步描述的,人工现实系统100的一个或多个设备(例如HMD 112、控制器114和/或控制台106)可以包括多个SoC。此外,这些SoC中的一个或多个SoC可以包括具有计算元件152、以及与计算元件并置的片内存储器154的SoC 150。在一个示例方法中,内部控制单元140包括具有两个或更多个子系统的SoC 150。每个子系统包括计算元件152(处理器或协处理器)和对应的本地存储器154(例如,SRAM),该本地存储器与计算元件152并置。在一些这种SoC中,片内SRAM的部分被物理地分布在整个SoC中作为本地存储器(LMEM)154,其中,LMEM 154的不同实例位于靠近每个计算元件152的位置。这种方法允许非常宽、非常高的带宽,以及到最接近的计算元件的低延迟接口,同时使在芯片上的长导线上进行通信所消耗的能量最小化。在一些示例方法中,SoC 150还包括输入/输出接口156(也称为I/O156)、用户接口158(也称为U/O158)、以及到外部的DRAM 160(也称为易失性存储器160)和非易失性存储器162(也称为NVM 162)中的一者或多者的连接。
在一个示例性方法中,每个LMEM 154可以被配置为静态存储器(SMEM)、高速缓冲存储器、或SMEM与高速缓冲存储器的组合。在一个这种示例方法中,LMEM 154包括SRAM。SRAM可以被配置为SMEM、高速缓冲存储器、或SMEM与高速缓冲存储器的组合,其中,SMEM用于临时存储来自对大数据集(例如激活数据)的处理的溢出。
例如,在一种方法中,LMEM 154被配置为SMEM/高速缓冲存储器子系统,该SMEM/高速缓冲存储器子系统包含了8MB的片内SRAM,其中,6MB被分配为通用的SMEM/高速缓冲存储器(可以被配置为任一种),其余2MB的SRAM被分配为激活数据SMEM,以用于临时存储来自对大数据集的处理的溢出。模拟表明,通过将LMEM的2MB的片内SRAM分配为激活数据SMEM以保存激活溢出,对于给定的一组计算元件152和本地存储器154,来自激活溢出的功耗可以从每次激活的约500mW(归因于溢出到DRAM)降低到约268mW。
在另一示例方法中,LMEM 154被配置为SMEM/高速缓冲存储器子系统,该SMEM/高速缓冲存储器子系统包含了8MB的片内SRAM,其中,4MB被分配为通用的SMEM/高速缓冲存储器(可以被配置为任一种),其余4MB的SRAM被分配为激活数据SMEM,以用于临时存储来自对大数据集的处理的溢出。模拟表明,通过将4MB的片内SRAM分配为保存激活溢出,对于给定的一组计算元件152和本地存储器154,来自激活溢出的功耗可以从每次激活的约500mW(归因于溢出到DRAM)降低到约150mW。
然而,这样的方法有其缺点;将可用SRAM的四分之一到一半分配给激活溢出,实际上就是“拆东墙补西墙”。LMEM 154的SMEM/高速缓冲存储器部分由许多进程共享,因此划出一大块片内SRAM以用于激活溢出意味着有限的内存不可用于其他进程。另外,本地存储器中可用的有限内存也存在竞争。例如,其他工作负载希望使用高速缓冲存储器;将存储器从高速缓冲存储器转换到SMEM再转换回来会产生大量开销。例如,LMEM 154可以刻入具有多路的高速缓冲存储器。将高速缓冲存储器的一部分转换为VSMEM 155以在激活期间使用,可能需要刷新脏高速缓冲存储器行(dirty cache line)(这是脏行的数量和需要刷新的路的数量的函数)以创建和分配所需的SRAM(也即,需要创建的VSMEM 155的大小)。刷新操作的长度取决于到DRAM 160的带宽,但是当有50%或更多的高速缓冲存储器行是脏行时,将4MB的VSMEM 155刷新为DRAM 160可能需要一毫秒或更多毫秒。更好的方法是压缩这些激活,以使这些激活占用更小的空间,并将压缩后的激活存储在像VSMEM 155这样的虚拟空间中。
在一个示例方法中,无损数据压缩用于在溢出期间减小存储在VSMEM 155中的数据集的大小。这允许将LMEM 154中分配给VSMEM 155的较小部分用于大数据集的溢出。这种方法还使得更快地从高速缓冲存储器转换到VSMEM 155。例如,在2:1压缩的情况下,通过将LMEM 154中的8MB中的2MB分配给VSMEM 155来代替DRAM 160以用于存储激活(或其他数据集)溢出,可以节省138mW。相似地,在相同的压缩和4MB的SMEM分配的情况下,存储器功率为56mW,与在没有压缩的情况下使用VSMEM 155相比,节省了100mW。除了机器学习激活之外的业务(例如计算机视觉和图像处理)也可以受益于VSMEM 155中的相关数据集的压缩。VSMEM155可以被分配为虚拟存储器,其中,该存储器的物理部分被分配为LMEM 15中的SMEM,并且其中,数据根据需要被换出到外部易失性存储器(例如DRAM 160)中。
图2A是描绘了根据本公开所描述的技术的示例HMD的图示,该HMD具有多个计算元件和由该多个计算元件共享的本地存储器。图2A的HMD 212A可以是图1的HMD 112的示例。如图2A所示,HMD 212A可以采取眼镜的形式。HMD 212A可以是人工现实系统(例如图1中的AR系统100)的一部分,或者可以作为被配置为实现本文所描述的技术的独立的、移动人工现实系统来操作。
在该示例中,HMD 212A是包括前框架和镜腿(或“臂”)的眼镜,该前框架包括鼻梁架以允许HMD 212A搁在用户的鼻子上,该镜腿延伸到用户耳朵上以将HMD 212A固定到用户。另外,图2A的HMD 212A包括一个或多个投影仪248A和248B、一个或多个波导203A和203B(统称为“波导203”)以及一个或多个波导输出结构205A和205B(统称为“波导输出结构205”),该一个或多个波导输出结构被配置为将光重定向出波导203A和203B。在所示出的示例中,投影仪248A和248B(统称为“投影仪248”)可以经由光栅耦合器(未示出)将光(例如,经准直的光)输入到波导203A和203B中,该光栅耦合器将来自投影仪248的光重定向到波导203中,使得光通过全内反射(TIR)而在波导内被“捕获”。例如,投影仪248A和248B可以包括显示器和投影仪透镜。在一些示例中,波导203可以是透明的,并且替代地在下文中可以被称为“窗口203”。在一些示例中,当追踪HMD 212A的位置和方向、以根据HMD 212A和用户106的当前观看视角来渲染人工现实内容时,窗口203相对于HMD 212A的前框架的已知方向和位置被用作参照系(也称为局部原点)。在一些示例中,投影仪248可以提供立体显示器,所述立体显示器用于向用户的每只眼睛提供单独的图像。
在所示出的示例中,波导输出结构205覆盖窗口203的一部分,覆盖视场230中的、用户110可通过该窗口203观看的部分。在其他示例中,波导输出结构205可以覆盖窗口203的其他部分,或覆盖窗口203的整个区域。
如图2A所进一步示出的,在该示例中,HMD 212A还包括一个或多个运动传感器206(也称为传感器206)、一个或多个集成的图像采集设备238A和238B(统称为“图像采集设备238”)、内部控制单元210,该内部控制单元可以包括内部电源和一个或多个印刷电路板,该一个或多个印刷电路板具有一个或多个处理器、存储器和硬件,以提供用于执行可编程操作来处理感测数据、并且在波导输出结构205上呈现人工现实内容的操作环境。内部控制单元210可以包括根据本公开的SoC,该SoC接收来自以下中的一者或多者的信息:一个或多个传感器206、图像采集设备238、一个或多个控制器(例如图1中所示的一个或多个控制器114)、和/或其他传感器,并且该SoC根据本公开形成计算系统的一部分,以处理感测数据并在波导输出结构205上呈现人工现实内容。在一个示例方法中,如以下所详细描述的,每个SoC包括两个或更多个计算元件、以及存储器,该存储器分布在多个特定计算元件中但可由其他计算元件访问。
图像采集设备238A和238B(统称为“图像采集设备238”)可以包括被配置为输出表示物理环境的图像数据的设备,例如视频摄像头、激光扫描仪、多普勒雷达扫描仪、或深度扫描仪等。更具体地,图像采集设备238采集表示物理环境中的、处于图像采集设备238的视场230A、230B内的对象的图像数据,该图像采集设备的视场通常与HMD 212A的观看视角相对应。
图2B是描绘了根据本公开所描述的技术的另一示例HMD的图示,该HMD包括具有多个计算元件和由该多个计算元件共享的本地存储器的SoC。HMD 212B可以是人工现实系统(例如图1的人工现实系统100)的一部分,或者可以作为被配置为实现本文所描述的技术的独立的、移动人工现实系统来操作。
在该示例中,HMD 212B包括前部刚性体和用于将HMD 212B固定到用户的带。另外,HMD 212B包括波导203(或者,替代地,窗口203),该波导被配置为经由波导输出结构205向用户呈现人工现实内容。在所示出的示例中,投影仪248可以经由输入光栅耦合器(未示出)将光(例如,经准直的光)输入到波导203中,该输入光栅耦合器将来自一个或多个投影仪248的光重定向到波导203中,使得光通过全内反射(TIR)而在波导203内被“捕获”。例如,投影仪248可以包括显示器和投影仪透镜。在一些示例中,当追踪HMD 212B的位置和方向、以根据HMD 212B和用户106的当前观看视角来渲染人工现实内容时,波导203相对于HMD 212B的前部刚性体的已知方向和位置被用作参照系(也称为局部原点)。在其他示例中,HMD212B可以采取其他可佩戴的头戴式显示器的形式,例如眼镜或护目镜。
类似于图2A中的HMD 212A,图2B中所示的示例HMD 212B还包括一个或多个运动传感器206、一个或多个集成的图像采集设备238A和238B、内部控制单元210,该内部控制单元可以包括内部电源和一个或多个印刷电路板,该一个或多个印刷电路板具有一个或多个处理器、存储器和硬件,以提供用于执行可编程操作来处理感测数据、并且在波导输出结构205上呈现人工现实内容的操作环境。内部控制单元210可以包括根据本公开的SoC,该SoC接收来自以下中的一者或多者的信息:一个或多个传感器206、图像采集设备238、一个或多个控制器(例如图1中所示的一个或多个控制器114)、和/或其他传感器,并且该SoC根据本公开形成计算系统的一部分,以处理感测数据并在波导输出结构205上呈现人工现实内容。在一个示例方法中,如以下所详细描述的,每个SoC包括两个或更多个计算元件、以及存储器,该存储器分布在多个特定计算元件中但可由其他计算元件访问。
在一些示例中,当本地存储器可用于缓存时,系统范围存储器中用于HMD 212A、212B的SoC的部分可以被缓存到与该SoC的计算元件相关联的本地存储器中。在一些这种示例中,如以下所进一步描述的,LMEM的多个部分被用来存储激活数据。
图3是示出了根据本公开所描述的技术的图1中的人工现实系统的控制台和HMD的示例实施方式的框图。在图3的示例中,控制台106基于感测数据(例如从HMD 112和/或外部传感器接收到的运动数据和图像数据),来执行姿态追踪、手势检测、以及HMD112的用户界面的生成和渲染。
在该示例中,HMD 112包括一个或多个处理器302和存储器304,在一些示例中,所述处理器302和存储器304提供用于执行操作系统305的计算机平台,该操作系统例如可以是嵌入式实时多任务操作系统、或其他类型的操作系统。进而,操作系统305提供用于执行一个或多个软件部件(包括应用程序引擎340)的多任务操作环境307。如关于图2A和图2B的示例所讨论的,处理器302耦接到一个或多个电子显示器303、运动传感器336、图像采集设备338,并且在一些示例中耦接到光学系统306。图3的运动传感器336可以是图2A和图2B的运动传感器206的示例,或者可以是图1的传感器136的示例。图3的图像采集设备338可以是图2A和图2B的图像采集设备238的示例,或者可以是图1的图像采集设备138的示例。在一些示例中,存储器304包括本地存储器(例如,如图1所示的、具有集成的VSMEM 155的本地存储器154)以及易失性存储器和非易失性存储器(例如,分别为图1的易失性存储器160和非易失性存储器162)中的一者或多者。
总体上,控制台106是这样的计算设备:该计算设备处理从图像采集设备338接收到的图像和追踪信息,以执行手势检测以及HMD 112的用户界面和/或虚拟内容的生成。在一些示例中,控制台106是单个计算设备,例如工作站、台式计算机、膝上型计算机、或游戏系统。在一些示例中,控制台106的至少一部分(例如处理器312和/或存储器314)可以分布在云计算系统、数据中心上,或者分布在网络上,该网络例如为互联网、另一公共或专用通信网络(例如,宽带、蜂窝、Wi-Fi)、和/或用于在计算系统、服务器和计算设备之间传输数据的其他类型的通信网络。
在图3的示例中,控制台106包括一个或多个处理器312、以及存储器314,在一些示例中,所述处理器312和存储器314提供用于执行操作系统316的计算机平台,该操作系统例如可以是嵌入式实时多任务操作系统、或其他类型的操作系统。进而,操作系统316提供用于执行一个或多个软件部件的多任务操作环境317。处理器312耦接到输入/输出(I/O)接口315,该I/O接口包括用于与外部设备进行通信的一个或多个I/O接口,该外部设备例如为键盘、一个或多个游戏控制器、一个或多个显示设备、一个或多个图像采集设备、一个或多个HMD、一个或多个外围设备等。此外,I/O接口315可以包括用于与网络(例如图1的网络104)进行通信的一个或多个有线或无线网络接口控制器(network interface controller,NIC)。在一些示例中,处理器312和/或存储器314的用于处理数据的功能可以被实现为根据本公开的SoC/SRAM集成电路部件。在一些示例中,存储器314包括本地存储器(例如如图1所示的、具有集成的VSMEM 155的本地存储器154)以及易失性存储器和非易失性存储器(例如,分别为图1的易失性存储器160和非易失性存储器162)中的一者或多者。
在控制台106的多任务操作环境317内执行的多个软件部件运行以提供整体的人工现实应用程序。在该示例中,多个软件部件包括应用程序引擎320、渲染引擎322、手势检测器324、姿态追踪器326和用户界面引擎328。
在一些示例中,处理器302和存储器304可以是分开、分立的部件(“片外存储器”)。在其他示例中,存储器304可以是与处理器302并置在诸如SoC(例如图1中所示出的)等单个集成电路内的片内存储器。在一些示例中,处理器302和/或存储器304的用于处理数据的功能可以被实现为根据本公开的SoC/SRAM集成电路部件。另外,存储器304和314可以包括片内存储器和片外存储器这两者,其中,片内存储器的至少多个部分用于缓存片外存储器中所存储的数据。
在一些示例中,如以上参考图2A和图2B所描述的,光学系统306可以包括用于向用户呈现虚拟内容的投影仪和波导。例如,光学系统306可以包括投影仪,该投影仪包括电子显示器303和投影透镜。
总体上,应用程序引擎320包括提供和呈现人工现实应用程序的功能,该人工现实应用程序例如为电话会议应用程序、游戏应用程序、导航应用程序、教育应用程序、训练或仿真应用程序等。应用程序引擎320例如可以包括用于在控制台106上实现人工现实应用程序的一个或多个软件包、一个或多个软件库、一个或多个硬件驱动程序、和/或一个或多个应用程序接口(Application Program Interface,API)。渲染引擎322响应于应用程序引擎320的控制,生成3D人工现实内容,该3D人工现实内容由HMD 112的应用程序引擎340向用户显示。
应用程序引擎320和渲染引擎322根据由姿态追踪器326确定的参照系的当前姿态信息(通常为HMD 112的观看视角),来构造用于向用户110显示的人工内容。渲染引擎322基于当前观看视角,构造3D人工现实内容,该3D人工现实内容在一些情况下可以至少部分地覆盖在用户110的真实世界3D环境上。在该过程中,姿态追踪器326对从HMD 112接收到的感测数据(例如移动信息和用户命令)以及在一些示例中的来自任何外部传感器90(图1)(例如外部摄像头)的数据进行操作,以采集真实世界环境内的3D信息(例如用户110的运动和/或关于用户110的特征追踪信息)。姿态追踪器326基于感测数据,确定HMD 112的参照系的当前姿态,并且根据该当前姿态,构造人工现实内容,以用于经由一个或多个I/O接口315传送到HMD 112以显示给用户110。
姿态追踪器326可以确定HMD 112的当前姿态,并且根据该当前姿态触发与任何所渲染的虚拟内容相关联的某些功能(例如,将虚拟内容项放置在虚拟表面上、操纵虚拟内容项、生成并渲染一个或多个虚拟标记、生成并渲染激光指示符)。在一些示例中,姿态追踪器326检测HMD 112是否接近与虚拟表面(例如,虚拟面板(virtual pinboard))对应的物理位置,以触发虚拟内容的渲染。
用户界面引擎328被配置为生成用于在人工现实环境中渲染的虚拟用户界面。用户界面引擎328生成包括一个或多个虚拟用户界面元素329的虚拟用户界面,所述虚拟用户界面元素329例如为:虚拟绘图界面、可选菜单(例如下拉菜单)、虚拟按钮、方向键、键盘、或其他用户可选的用户界面元素、字形、显示元素、内容、用户界面控件等。
控制台106可以经由通信信道310将该虚拟用户界面和其他人工现实内容输出到HMD 112,以在HMD 112处显示。
在一个示例方法中,手势检测器324基于来自多个图像采集设备(例如图像采集设备138、238或338)中的任意图像采集设备、来自一个或多个控制器114、和/或来自其他传感器设备(例如运动传感器136、206或336)的感测数据,对一个或多个控制器114和/或用户的对象(例如,手、手臂、手腕、手指、手掌、拇指)的受追踪运动、位形、位置、和/或方向进行分析,以识别由用户110做出的一个或多个手势。更具体地,手势检测器324对在由HMD 112的运动传感器336和图像采集设备338、和/或传感器90采集的图像数据内所识别的对象进行分析,以识别一个或多个控制器114和/或用户110的手和/或手臂,并且手势检测器324追踪一个或多个控制器114、手和/或手臂相对于HMD 112的运动,以识别用户110做出的手势。在一些示例中,手势检测器324可以基于所采集的图像数据,来追踪一个或多个控制器114、手、手指、和/或手臂的运动(包括位置和方向的改变),并且可以将对象的运动向量与手势库330中的一个或多个条目进行比较,以检测用户110做出的手势或手势的组合。在一些示例中,手势检测器324可以接收由一个或多个控制器114的一个或多个存在敏感表面检测到的用户输入,并且可以处理该用户输入以检测用户110相对于一个或多个控制器114做出的一个或多个手势。
如上所述,在一些示例中,存储器304和314可以包括片内存储器和片外存储器。在一些这种示例中,片内存储器的多个部分可以用作片内计算元件的本地存储器,并且可以偶尔用作这样的高速缓冲存储器:该高速缓冲存储器用于缓存存储在其他片内存储器中或片外存储器中的数据。例如,当本地存储器可用于缓存时,存储器314的多个部分可以被缓存在与处理器312相关联的本地存储器中。在一些示例中,存储器304包括本地存储器(例如,如图1所示的、具有集成的VSMEM 155的本地存储器154)以及易失性存储器和非易失性存储器(例如,分别为图1的易失性存储器160和非易失性存储器162)中的一者或多者。
图4是描绘了根据本公开所描述的技术的图1中的人工现实系统的一个示例HMD的框图。在图4中所示出的示例中,HMD 112是独立的人工现实系统。在该示例中,像图3一样,HMD 112包括一个或多个处理器302、以及存储器304,在一些示例中,所述处理器302以及存储器304提供用于执行操作系统305的计算机平台,该操作系统例如可以是嵌入式实时多任务操作系统或其他类型的操作系统。进而,操作系统305提供了用于执行一个或多个软件部件417的多任务操作环境。此外,一个或多个处理器302耦接到一个或多个电子显示器303、一个或多个变焦光学系统306(也称为光学系统306)、运动传感器336、和图像采集设备338。在一些示例中,处理器302和/或存储器304的用于处理数据的功能可以被实现为根据本公开的SoC集成电路部件。在一个这种示例方法中,如以下所详细描述的,每个SoC包括两个或更多个计算元件和存储器,该存储器作为本地存储器分布在多个特定计算元件中,但是可由多个其他计算元件中的每个计算元件经由本地存储器缓存机制访问。在一些示例中,存储器304包括本地存储器(例如,如图1所示的、具有集成的VSMEM 155的本地存储器154)以及易失性存储器和非易失性存储器(例如,分别为图1的易失性存储器160和非易失性存储器162)中的一者或多者。
在一些示例中,如以上参考图2A和图2B所描述的,光学系统306可以包括用于向用户呈现虚拟内容的投影仪和波导。例如,光学系统306可以包括投影仪,该投影仪包括电子显示器303和投影透镜。投影透镜可以进一步包括多功能DOE,该多功能DOE既用作将光重定向到波导中的光栅耦合器,又用作提高投影仪透镜的成像质量的透镜元件。
在图4的示例中,软件部件417运行以提供整体的人工现实应用程序。在该示例中,软件部件417包括应用程序引擎440、渲染引擎422、手势检测器424、姿态追踪器426和用户界面引擎428。在各种示例中,软件部件417与图3的控制台106的对应部件(例如,应用程序引擎320、渲染引擎322、手势检测器324、姿态追踪器326和用户界面引擎328)类似地运行,以构造覆盖在人工内容上或作为人工内容的一部分的虚拟用户界面,以向用户110进行显示。
如关于图3中的用户界面引擎328所论述的,在一个示例方法中,用户界面引擎428被配置为生成用于在人工现实环境中渲染的虚拟用户界面。用户界面引擎428生成包括一个或多个虚拟用户界面元素429的虚拟用户界面,所述虚拟用户界面元素429例如为:虚拟绘图界面、可选菜单(例如,下拉菜单)、虚拟按钮、方向键、键盘、或其他用户可选的用户界面元素、字形、显示元素、内容、用户界面控件等。
如在图3的控制台106中一样,在图4的示例HMD 112中,手势检测器424基于来自多个图像采集设备(例如图像采集设备138、238或338)中的任意图像采集设备、来自一个或多个控制器114、和/或来自其他传感器设备(例如运动传感器136、206或336)的感测数据,对一个或多个控制器114和/或用户的对象(例如,手、手臂、手腕、手指、手掌、拇指)的受追踪运动、位形、位置、和/或方向进行分析,以识别由用户110做出的一个或多个手势。在一些示例中,手势检测器424可以基于所采集的图像数据,来追踪一个或多个控制器114、手、手指、和/或手臂的运动(包括位置和方向的改变),并且可以将对象的运动向量与手势库430中的一个或多个条目进行比较,以检测用户110做出的手势或手势的组合。
根据本公开的技术,图4的存储器304可以包括片内存储器和片外存储器这两者,其中,片内存储器的至少多个部分用于缓存片外存储器中所存储的数据。在一些示例中,如将在下文进行更详细的论述的,当本地存储器可用于缓存时,图4的存储器304的多个部分可以被缓存到与处理器302相关联的本地存储器中。处理器302可以包括一个或多个加速器。在一些示例中,存储器304包括本地存储器(例如,如图1所示的、具有集成的VSMEM 155的本地存储器154)以及易失性存储器和非易失性存储器(例如,分别为图1的易失性存储器160和非易失性存储器162)中的一者或多者。
图5是示出了根据本公开所描述的技术的多设备人工现实系统的分布式架构的示例实施方式的框图,在该多设备人工现实系统中,一个或多个设备是使用各设备内的一个或多个SoC来实现的。图5示出了这样的示例:在该示例中,HMD 112与外围设备536协同运行。如上所述,HMD 112被配置为与外围设备536一起运行,以使得能够执行人工现实应用程序。
在图5的示例中,外围设备536表示具有如下表面的物理真实世界设备:多设备人工现实系统(例如系统100)可以将虚拟内容覆盖在该表面上。外围设备536可以包括接口554,该接口具有一个或多个存在敏感表面(例如触摸屏558),该一个或多个存在敏感表面用于通过检测存在一个或多个对象(例如,手指、触控笔等)触摸或悬停在存在敏感表面的多个位置上,来检测用户输入。在一些示例中,外围设备536可以具有类似于以下中的任一者的形状因子:智能手机、平板电脑、个人数字助理(PDA)、或其他手持式设备。在其他示例中,外围设备536可以具有以下各项的形状因子:智能手表、所谓的“智能环”、或其他可穿戴设备。外围设备536也可以是以下各项的一部分:自助服务终端、控制台、或其他固定或移动的系统。接口554可以包含输出部件(例如一个或多个触摸屏558),以用于向屏幕输出触摸位置或其他可视内容。然而,并不是外围设备536的所有示例都包括显示器。
在图5的示例中,HMD 112和外围设备536分别包括SoC 530A至530C和SoC510A至510B。SoC 530A和510A表示布置在分布式架构中、并且被配置为提供用于人工现实应用程序的操作环境的一系列专用集成电路。作为示例,SoC集成电路可以包括各种计算元件。这些计算元件可以包括作为以下各项来运行的专用功能块:协应用处理器、传感器聚合器、加密/解密引擎、安全处理器、手/眼睛/深度追踪和姿态计算元件、视频编码和渲染引擎、显示控制器和通信控制部件。这些功能块中的一些或全部功能块可以被实现为包括本地存储器(例如LMEM 556或564(也称为存储器556或564))子系统。在一个示例方法中,如以下所详细描述的,图5中的每个SoC(510A、510B、以及530A至530C)包括两个或更多个计算元件、以及存储器,该存储器作为本地存储器分布在多个特定计算元件中,但是可由多个其他计算元件中的每个计算元件经由本地存储器缓存机制访问。图5仅是SoC集成电路的一个示例布置。多设备人工现实系统的分布式架构可以包括SoC集成电路的任何集合和/或布置。
在图5的示例中,根据本公开的技术,HMD 112包括SoC 530A、530B和530C。在所示出的示例中,SoC 530A包括本地存储器LMEM 564A至564E(统称为“LMEM 564”),在一些示例中包括SRAM,但也可以使用其他类型的存储器。在一些示例方法中,LMEM 564可以与SoC530A的一个或多个处理器和其他片内电路分开、或在SoC530A的一个或多个处理器和其他片内电路外部(例如,非片内)。在该示例中,外围设备536是使用传统的SoC架构来实现的,在该传统的SoC架构中,SoC 510A包括可跨SoC 510A的多个子系统分布的片内LMEM 556、以及外部的(片外)存储器514,该外部的(片外)存储器可以包括易失性存储器和/或非易失性存储器。在一个示例中,HMD 112包括存储器566,该存储器566可以包括易失性存储器和/或非易失性存储器,并且该存储器566可以是片外的。在一个示例中,当各个LMEM 564可用于缓存时,存储器566的多个部分可以被缓存到LMEM 564中。类似地,当各个LMEM 556可用于缓存时,存储器514的多个部分同样地根据本公开的技术可以被缓存到LMEM 556中。在一些示例中,存储器556和564包括本地存储器(例如,如图1所示的、具有集成的VSMEM 155的本地存储器154)。在一些示例中,LMEM 564包括连接到存储器566的本地存储器(例如,如图1所示的、具有集成的VSMEM 155的本地存储器154),其中,存储器566包括易失性存储器和非易失性存储器(例如,分别为图1的易失性存储器160和非易失性存储器162)中的一者或多者。在一些示例中,LMEM 556包括连接到存储器514的本地存储器(例如,如图1所示的、具有集成的VSMEM 155的本地存储器154),其中,存储器514包括易失性存储器和非易失性存储器(例如,分别为图1的易失性存储器160和非易失性存储器162)中的一者或多者。
头戴式显示器(例如本文所描述的HMD 112)受益于通过使用片内存储器(例如SoC530A中的LMEM 564)而提供的尺寸减小、处理速度提高和功耗降低。例如,SoC530A根据本公开的技术提供的益处可以使佩戴者的舒适性增加并且使AR/VR体验更加充分沉浸和逼真。
另外,应当理解的是,可以使用根据本公开的技术的、具有集成存储器的SoC来实现SoC 510和/或530中的任一者,并且本公开不限于此方面。SoC 510和/或530中的任一者可以受益于本文所描述的SoC/SRAM集成电路所提供的尺寸减小、处理速度提高和功耗降低。另外,根据本公开的技术的SoC/SRAM部件所提供的益处不仅对于AR/VR系统是有利的,而且在许多应用中也是有利,这些应用例如为自动驾驶、基于边缘的人工智能、物联网(Internet-of-Things,IoT)、以及需要基于对来自大量传感器输入的数据的分析的高响应实时决策能力的其他应用。
在图5的示例中,HMD 112的SoC 530A包括多个功能块,这些功能块包括安全处理器524、追踪570(也称为追踪块570)、加密/解密580、协处理器582、和接口584。追踪570提供用于以下各项的功能块:眼睛追踪572(“眼睛572”)、手追踪574(“手574”)、深度追踪576(“深度576”)、和/或即时定位与地图构建(Simultaneous Localization and Mapping,SLAM)578(“SLAM 578”)。这些功能块中的一些或全部功能块可以在SoC 530A的一个或多个子系统内实现。作为这些功能块的操作示例,HMD 112可以接收来自以下的输入:输出指示HMD 112的当前加速度的数据的一个或多个加速度计(也称为惯性测量单元或“IMU”)、输出指示HMD 112的位置的数据的全球定位系统(GPS)传感器、输出指示HMD 112与各个对象的距离的数据的雷达或声纳、或提供对HMD 112或其他对象在物理环境内的位置或方向的指示的其他传感器。HMD 112还可以从一个或多个图像采集设备588A至588N(统称为“图像采集设备588”)接收图像数据。图像采集设备588可以包括被配置为输出表示物理环境的图像数据的摄像机、激光扫描仪、多普勒雷达扫描仪、深度扫描仪等。更具体地,图像采集设备588采集表示物理环境中的、处于图像采集设备的视场内的对象(包括外围设备536和/或手)的图像数据,该视场通常对应于HMD 112的观看视角。追踪570基于感测数据和/或图像数据,确定例如HMD 112的参照系的当前姿态,并根据该当前姿态来渲染人工现实内容。
SoC 530A的加密/解密580是这样的功能块:该功能块用于对传送到外围设备536或安全服务器的传出数据进行加密,并且对从外围设备536或从安全服务器传送的传入数据进行解密。协处理器582包括用于执行指令的一个或多个处理器,例如视频处理单元、图形处理单元、数字信号处理器、编码器和/或解码器、以及应用程序(例如AR/VR应用程序)。
SoC 530A的接口584是这样的功能块:该功能块包括用于连接到存储器514、和连接到SoC 530B和/或530C的功能块的一个或多个接口。作为一个示例,接口584可以包括外围组件快速互连(peripheral component interconnect express,PCIe)插槽。SoC 530A可以使用接口584与SoC 530B和530C连接。SoC 530A还可以使用接口584与通信设备(例如,无线电发射器)连接,以经由通信信道512与其他设备(例如,外围设备536)通信。
HMD 112的SoC 530B和530C各自表示用于在相应显示器(例如,显示器586A、586B(统称为“显示器586”))上输出人工现实内容的显示控制器。在该示例中,SoC530B可以包括用于显示器586A为用户的左眼587A输出人工现实内容的显示控制器。如图5所示,SoC 530B可以包括用于在显示器586A上输出人工现实内容的解密块592A(也称为解密592A)、解码器块594A(也称为解码器594A)、显示控制器596A、和/或像素驱动器598A。类似地,SoC 530C可以包括用于显示器586B为用户的右眼587B输出人工现实内容的显示控制器。如图5所示,SoC 530C可以包括用于生成人工现实内容并在显示器586B上输出人工现实内容的解密592B、解码器594B、显示控制器596B、和/或像素驱动器598B。显示器568可以包括发光二极管(LED)显示器、有机LED(Organic LED,OLED)显示器、量子点LED(Quantum dot LED,QLED)显示器、电子纸(Electronic paper,E-ink)显示器、液晶显示器(Liquid CrystalDisplay,LCD)、或用于显示AR内容的其他类型的显示器。
如图5所示,外围设备536包括被配置为支持人工现实应用程序的SoC 510A和510B。在该示例中,SoC 510A包括多个功能块,这些功能块包括安全处理器526、追踪540(也称为追踪块540)、加密/解密550、显示处理器552、和接口554。追踪540是提供眼睛追踪542(“眼睛542”)、手追踪544(“手544”)、深度追踪546(“深度546”)、和/或即时定位与地图构建(SLAM)548(“SLAM 548”)的功能块。这些功能块中的一些或全部功能块可以在SoC 510A的各种子系统中实现。作为SoC 510A的操作示例,外围设备536可以接收来自以下的输入:输出指示外围设备536的当前加速度的数据的一个或多个加速度计(也称为惯性测量单元或“IMU”)、输出指示外围设备536的位置的数据的GPS传感器、输出指示外围设备536与各个对象的距离的数据的雷达或声纳、或提供对外围设备536或其他对象在物理环境内的位置或方向的指示的其他传感器。在一些示例中,外围设备536还可以从一个或多个图像采集设备接收图像数据,所述图像采集设备例如为被配置为输出表示物理环境的图像数据的摄像机、激光扫描仪、多普勒雷达扫描仪、或深度扫描仪等。追踪块540基于感测数据和/或图像数据,确定例如外围设备536的参照系的当前姿态,并根据该当前姿态向HMD 112渲染人工现实内容。
在另一示例方法中,追踪块570基于对于外围设备536的参照系的感测数据和/或图像数据来确定当前姿态,并根据该当前姿态来渲染相对于该姿态的虚拟现实内容,以供HMD 112进行显示。
在一个示例方法中,SoC 510A的加密/解密550对传送到HMD 112或安全服务器的传出数据进行加密,并对从HMD 112或安全服务器传送的传入数据进行解密。加密/解密550可以支持对称密钥加密,以使用会话密钥(例如,秘密对称密钥)来加密/解密数据。SoC510A的显示处理器552包括用于向HMD 112渲染人工现实内容的一个或多个处理器,例如视频处理单元、图形处理单元、编码器和/或解码器、和/或其他。SoC 510A的接口554包括用于连接到SoC 510A的功能块的一个或多个接口。作为一个示例,接口554可以包括外围组件快速互连(PCIe)插槽。SoC 510A可以使用接口554与SoC 510B连接。SoC 510A可以使用接口554与一个或多个通信设备(例如,无线电发射器)连接,以用于与其他设备(例如,HMD 112)进行通信。
外围设备536的SoC 510B包括协应用处理器560(也称为协处理器560)和应用处理器562。在该示例中,协处理器560包括各种处理器,例如视觉处理单元(vision processingunit,VPU)、图形处理单元(graphics processing unit,GPU)、和/或中央处理单元(central processing unit,CPU)。应用处理器562可以执行一个或多个人工现实应用程序,以例如生成和渲染人工现实内容、和/或检测和解释用户相对于外围设备536做出的手势。在一个示例方法中,协处理器560和应用处理器562两者都包括片内存储器(例如LMEM556)。当各个LMEM 556可用于缓存时,存储器514的多个部分可以被缓存到LMEM 556中。
如上所述,通过选择性地将无损压缩添加到为LMEM 564内的激活数据而分配的SMEM,可以具有相当大的功率节约。在一些应用中,添加无损压缩是进一步降低功率的一种方式,因为它可以被设计为对应用(例如机器学习的训练)是透明的。然而,通常,无损压缩不能保证压缩的量。因此,在一些示例方法中,无损压缩与激活数据SMEM的虚拟化结合使用,以将最近最多使用的激活数据存储在VSMEM中并将最近最少使用的激活数据存储在存储器514或存储器566中。仅是激活数据SMEM的虚拟化就使得将激活数据传输到片外存储器514或566所需的带宽显著减少;当使用无损压缩来压缩存储在VSMEM中的数据时,减少的幅度甚至更大。
在本地存储器556和564中对激活数据SMEM进行虚拟化的一个优点是,假设没有压缩,则可能会分配较大的虚拟存储器,但是基于平均压缩则仅将本地存储器分配给激活数据SMEM。这将在不浪费SMEM的情况下,使得平均功耗更低。
考虑了使用各种压缩算法来压缩激活数据。DEC400是一种压缩算法,其被设计为在相邻像素具有几乎相同值的情况下压缩图像数据。对于数据稀疏的激活数据,情况并非如此。在稀疏激活数据(约50%至60%的零)的情况下,DEC400仅提供约10%的数据节约。DEC400的另一个问题是,高效使用SMEM需要数据以打包格式被存储。DEC400产生非打包数据;解决这个问题可能需要对被单独压缩并且随后被打包的子块进行处理,这需要对压缩后的子块执行单独的打包操作。这还可能需要添加用于解包的标头。
另一种选择是使用数据压缩算法(例如RFC1951压缩和解压缩(Inflate andDeflate))来执行激活数据压缩。这还将在压缩后创建大小可变的输出。此处使用虚拟存储器同样是有益的,因为可以分配较大的虚拟存储器,但是仅基于期望的平均压缩来物理固定部分内存。对例如ZIP和GZIP对激活数据的影响的初步评估表明,对于典型数据集,压缩比约为2至3:1,但该数值可以基于块的大小和霍夫曼表约束而变化。
在一个示例中,对压缩算法进行选择以限制从存储器514和566获取数据对延迟的影响。机器学习编译器试图优化保存在本地存储器中的张量、以及该本地存储器清除的张量。这主要是在考虑复用距离(时间)的情况下完成的。存储在本地存储器中的张量通常对延迟非常敏感,因为延迟会影响吞吐量。因此,在一些示例方法中,使用了非常小的块压缩算法或不影响延迟的其他方案。无损压缩算法(例如游程编码(run length encoding,RLE)或具有掩码的RLE)用处较少,因为此类方案不能节省LMEM空间(无法保证压缩比)。相反,使用不会对机器学习的精度和延迟产生负面影响的有损压缩方案可能会更好。
在一个示例方法中,使用块级压缩方案来压缩已经从训练机器学习模型的计算元件的本地存储器中清除的张量(被清除的张量具有更大的复用距离)。这种无损压缩可以与虚拟化结合使用,以“增加”被分配作为VSMEM 155的片内SRAM的表观大小。在一个这样的示例方法中,GZIP用于压缩和解压缩从VSMEM 155清除的数据。如果仅将GZIP用于激活和加权压缩,则可能会过度使用GZIP,但在一些示例方法中,所使用的压缩被设计为可由其他应用程序用作共享资源的通用无损压缩。
在一个示例方法中,在SoC 530中使用两种压缩,一种在训练机器学习模型的计算元件内,而第二种通常用于系统。在一个这样的示例方法中,SoC 530包括两个外部知识产权(Intellectual Property,IP)块(例如,可从例如新泽西州伍德克利夫湖的卡斯特公司(Cast,Inc.)获得的块),这两个外部IP块使用高达4千字节的搜索窗口对所配置的块大小实施高性能专用RFC-1950/1951/1952编码和解码操作。在一个示例方法中,这些块被集成为具有高级可扩展接口(Advanced eXtensible Interface,AXI)端口或高级高性能总线(Advanced High-Performance Bus,AHB)端口的独立加速器引擎。对于静态霍夫曼表,解码操作的延迟预计约为20个周期。另外,由于预期激活中最相关的数据模式是零的游程长度,因此,用于仅压缩零游程的专用游程编码器(Run-Length-Encoder,RLE)/变长编码器(Variable-Length-Coder,VLC)可能是用于压缩此类数据的最节能的方法。
图6是示出了根据本公开所描述的技术的分布式存储系统中的示例高速缓冲存储器的框图。图6中所示出的示例示出了具有三个子系统602A至602C(统称为“子系统602”)和分布式的缓存控制器604的片上系统(SoC)600。在所示出的示例中,分布式的缓存控制器604包括系统缓存控制器606、集中式的标签(TAG)查找608、TAG随机存取存储器(randomaccess memory,RAM)610和路控制掩码614;高速缓冲存储器分布在SoC 600的子系统602中的本地存储器564中。在一些示例方法中,如上所述,本地存储器564的一部分可以被分配作为激活数据SMEM 565。在一些示例方法中,所分配的SMEM 565被配置为VSMEM。
在图6所示出的示例中,计算元件620连接到本地存储器564,并且经由分布式的缓存控制器604访问存储在其他计算元件620的本地存储器564中的缓存存储块。子系统602、缓存控制器604、和存储器566可以经由片上网络(Network-on-Chip,NoC)611连接。在一个示例中,NoC 611是在多个子系统702之间实施基于路由器的分组交换网络的、基于网络的通信系统。
在一个示例中,缓存控制器604控制来自子系统602外部的、对LMEM 564的访问。在图6中所示出的示例中,计算元件620B已经在本地存储器564B中分配了SMEM 565,计算元件620C已经在本地存储器564C中分配了SMEM 565,并且计算元件620D已经在本地存储器564D中分配了SMEM 565。每个SMEM 565用于存储数据集中的溢出相应的本地存储器564的多个部分(例如激活数据)。例如,在一个示例中,计算元件520B执行训练机器学习模型的程序,并且替代地,在LMEM 564B的SMEM 565中采集通常会溢出到存储器566的激活数据。
在一个示例方法中,分布式的缓存控制器604是N路组关联的高速缓冲存储器。在组关联的高速缓冲存储器中,存在固定数量的、可存储待被缓存的每个块的多个位置。该固定数量的多个位置是一组中的多个元素;N路组关联的高速缓冲存储器包括多个组,该多个组中的每个组包括N个用于存储数据块的位置。存储器中的每个块映射到由索引字段给出的、高速缓冲存储器中的唯一组。块(缓存行(cache line))可以被放置在该组中的任何位置。为了访问缓存行,搜索与该缓存行对应的组中的所有块以用于匹配。也即,在图6中所示出的示例中,跨多路搜索与该组相关联的标签RAM 610。如果在该组中的多个位置中的一个位置处发现了匹配,则数据已被缓存并且可由计算元件620访问。
在一个示例方法中,地址的M个最高有效位形成标签,而接下来的S个位选择与该地址相关联的组。该地址的最低有效位从块内选择数据。这种方法利用了存储器请求中的空间局部性原则。非重叠地址位的其他组合也可以用于标签、组和块地址位。
在一个示例方法中,多组缓存位置被分配给本地存储器564的特定段,其中,组中的所有位置被放置在单个本地存储器564中。然而,不同的组可以跨两个或更多个本地存储器564分布。与所缓存的数据块相关联的标签和索引存储在标签RAM 610中。
在操作中,在读取操作中,由系统缓存控制器606接收读取请求。系统缓存控制器606向标签查找608发送该读取请求的地址的组号和标签,该标签查找访问标签RAM 610以确定与该地址相关联的块是否在高速缓冲存储器中。如果是,则标签查找608返回缓存命中以及组中存储缓存行的位置。然后,从分布在系统高速缓冲存储器612(也称为主系统高速缓冲存储器612)与一个或多个LMEM 564之间的高速缓冲存储器来履行该读取请求。也即,从主系统高速缓冲存储器612或从不同计算单元602中的多个本地存储器564中的一个本地存储器来履行该读取请求。
然而,如果与读取请求相关联的块不在高速缓冲存储器中,则标签查找608发出缓存未命中的信号,并且该读取请求被发送到存储器566以供履行。读取未命中带回一缓存行,履行读取请求,并将该缓存行存储在本地存储器564中与读取请求地址相关联的组中的一个位置。在一个示例方法中,从位置的集合中选择的位置是随机选择的。在另一示例方法中,从位置的集合中选择的位置是尚未被访问的时间最长的位置。可以根据需要使用其他替换算法。
在一个示例方法中,每个缓存行具有指示该缓存行是否已被修改的属性(例如,脏缓存行位)。在一个这样的示例方法中,脏位与标签一起存储在标签RAM 610中。当缓存行被替换时,只有具有脏位的缓存行被写回存储器566。作为示例,假设整个数据段作为一组缓存行驻留在高速缓冲存储器中。在转换时,仅将脏缓存行复制到存储器566中,而不是必须将整个数据段复制到存储器中。
如图6所示,分布式的缓存控制器604包括系统高速缓冲存储器612,该系统高速缓冲存储器用于存储与本地存储器564分开的缓存行。在一个这样的方法中,缓存控制器606确定特定的路或组是位于主系统高速缓冲存储器612中,还是位于多个子系统602中的一个子系统的本地存储器564中。在一个示例方法中,缓存控制器606照常访问标签查找608,并且如果对应于地址的数据已经被缓存,则缓存控制器606随后确定缓存行是位于主系统高速缓冲存储器612中,还是位于多个子系统602中的一个子系统的本地存储器564中,并且相应地推进。
当本地存储器未被本地计算元件620使用时,使用本地存储器564来存储缓存行可以是有利的。例如,在执行某些应用程序时,本地存储器的使用具有暂时性。当存储器未被与其相关联的计算元件620使用时,在时间上,这种使用的暂时性可以用于获得用于缓存行的附加存储。
在一个示例中,当计算元件620B正在执行本地存储器564B中的应用程序时,组关联的高速缓冲存储器被配置为禁止缓存被正常映射到本地存储器564B的缓存组,并且当计算元件620C正在执行本地存储器564C中的应用程序时,组关联的高速缓冲存储器被配置为禁止缓存被正常映射到本地存储器564C的缓存组。另一方面,如图6所示,计算元件620B可以访问临时存储在例如本地存储器564F中的缓存块,同时使用未被分配为SMEM 565的LMEM564B来存储程序代码和应用程序数据。类似地,计算元件620D可以访问临时存储在例如本地存储器564A中的缓存块,同时使用未被分配为SMEM 565的LMEM 564D来存储程序代码和应用程序数据。
在一个示例方法中,多组缓存位置被分配给特定的本地存储器564,并且该多组缓存位置仅当与组相关联的本地存储器564可用于缓存时,才可用于缓存。在一个这样的示例方法中,路控制掩码614包括每个组的条目,该条目指示组是否可用于缓存。本地存储器作为高速缓冲存储器的临时使用在于2021年10月18日提交的、第17/504,292号美国专利申请“用于片上系统的分布式临时高速缓冲存储器”中进行了进一步的详细描述,该申请的描述通过引用并入本文。
图7是示出了根据本公开所描述的技术的具有示例分布式存储系统的SoC的框图,该示例分布式存储系统使用无损压缩和虚拟化来降低SoC中的功率。在图7的示例中,在子系统702A中执行机器学习算法的计算元件试图将激活数据SMEM 565中的激活溢出存储在与子系统702A的计算元件相关联的本地存储器中。另外,在子系统702B中执行计算机视觉算法的计算元件试图将激活数据SMEM 565中的数据溢出存储在与子系统702B的计算元件相关联的本地存储器中。然而,存储溢出的目的地可以是SMEM 565或存储器566。
如上所述,在一些示例方法中,SMEM 565被虚拟化为VSMEM,并且激活数据被压缩。因此,使用SMEM重定向来将最初定向到SMEM 565的激活数据写入定向到压缩块704(也称为GZIP压缩/解压缩704、块704)以进行压缩。然后,压缩后的数据经由双倍数据速率同步动态随机存取存储器控制器(Double Data Rate Synchronous Dynamic Random AccessMemory Controller,DDR CTRL)712被转发到适当子系统的本地存储器的SMEM 565、或被转发到片外存储器566。如图7所示,待被写入存储器566的数据可以在经由下游的NoC 714传输到存储器566的适当部分之前,被临时存储在系统高速缓冲存储器(SYSCACHE 0至3中的一者)中。
在一个示例方法中,子系统702A的机器学习训练程序确定该程序将向SMEM 565溢出数据。替代地,该程序使用系统NoC 710将溢出重定向到GZIP压缩/解压缩704。尽管图7示出了使用GZIP,但是也可以使用其他无损压缩算法。
在一个示例方法中,压缩块是4千字节(KB),并且压缩后的数据块在地址转换之后被转发到VSMEM。在一个示例方法中,在虚拟SMEM(VSMEM)空间中以4KB偏移量写入这些块。
在一个示例方法中,仅VSMEM的一部分被物理地固定到片内本地存储器564的SMEM565。固定的量可以是期望的无损压缩量的函数。例如,可以基于2:1的平均压缩来分配SMEM565。在这种示例中,当2KB的片上物理SMEM 565不够用时,VSMEM将在低功耗双倍数据速率同步动态随机存取存储器(Low Power Double Data Rate SDRAM,LPDDR)中进行后端存储。
图8是示出了根据本公开所描述的技术的图7中的压缩块中的压缩的框图。在图8中所示出的示例中,64KB缓冲区用作中转区,这些中转区用于不同子系统602写入数据以创建块。
在图8中所示出的示例中,使用256位宽的高级可扩展接口(AXI)通过存储器孔(存储器端口)来访问压缩块804。尽管在一些示例方法中,可能存在用于未压缩数据的附加孔,但是通过压缩块704访问该区域。在一些示例方法中,未压缩数据可以是直通的(图8中的旁路模式)。也即,数据将未经压缩地进出块704。以旁路模式将压缩块704用于未压缩数据的优点在于,压缩块704可以经由位于压缩块704内部的页面映射表(Page Map table,PAT)来对SMEM、计算机视觉和音频LMEM进行虚拟化。这在仅使用SMEM/缓存块时是不可能的,因为该SMEM/缓存块无法将流量重定向出自身,并且虚拟化仅限于VSMEM。对较大存储空间进行虚拟化的能力允许计算元件620(例如机器语言训练程序)在无需担心存储器的物理位置的情况下,将张量从本地存储器564卸载到各种片内存储器。其结果是访问更多的片内SRAM,并进一步节省功率。
在一个示例方法中,调度器802(也称为调度802)从多个块中的一个块读取数据,并将该数据流式传输到压缩块804。在一个这样的示例方法中,压缩块804是可从新泽西州伍德克利夫湖的CAST公司获得的ZipAccel-C内核(也称为ZipAccel-C)。如RFC1950(zlib)、RFC1951(解压缩)和RFC1952(gzip)所描述的,该内核是通常被称为Gzip的、无损数据压缩算法的定制硬件、可配置和可扩展的实施方式。ZipAccel-C内核对数据流进行压缩,将数据块称为“文件”。尽管在本文件中正从本地存储器564清除出的张量被称为“块”,但在机器学习的背景下,它们可以是“文件”。在一些示例方法中,压缩块804基于脸谱网(Facebook)开发的无损压缩算法Zstandard(ZSTD)的实施。通常,可以使用任何类型的无损压缩。
CAST的ZipAccel-C使用AXI流式传输接口,并且需要明确地发送块的开始和结束信号,以进行压缩。在一个示例方法中,使用两个AXI_USER_BITS[7:6]来指示张量的开始和结束。这是由执行机器学习(Machine Learning,ML)训练的计算元件完成的。由于存在指示块的开始和结束的显式信号发送机制,因此3-D张量到一维(1D)张量的展开可以在任何C、H、W维度上发生。还应该可以让计算元件执行ML模型训练,以同时清除多个张量。不同的张量将由不同的AXI_ID表示。
计算机视觉算法还可以将数据分割成多个块:例如,块(tile)或一些线性区域(例如一行或多行)。在一个示例方法中,执行计算机视觉算法的计算元件将使用与上面针对张量所描述的类似的信号发送机制。计算元件中的不同集群可以独立地清除多个块,并且使用不同的AXI_ID,以便压缩子系统可以区分这些块。
如图8所示,压缩块706可能需要将缓冲区用作中转区,以用于不同子系统写入数据来创建多个块。在一个示例方法中,每个块是固定大小的,例如4KB;这将代表最大的块大小,并且对于机器学习应用而言,这将对应于最大的张量大小。
在另一示例方法中,可以使用另外数个AXI_USER位来发送块的大小(或者在几个大小之间进行选择)的信号。这种方法将提供更灵活的缓冲区分配方案。
第二个问题是需要同时支持的块的数量,因为这将决定缓冲区的大小。在一个示例方法中,可以将缓冲区的大小固定为64KB,并且如果没有可用的缓冲区空间,则只需将数据作为未压缩数据直通到输出。
在一个示例方法中,来自压缩块804的输出被发送到被分配为SMEM的片内VSRAM、或被发送到被指定为本地存储器的SRAM。这可以通过对压缩块804将要响应的存储区域(20MB)进行定义来完成;输入地址被映射到输出虚拟地址并被转换为物理地址。
图9是示出了根据本公开所描述的技术的图7中的压缩块中的解压缩的框图。在图9所示出的示例中,压缩块704包括具有伪最近最少使用(least recently used,LRU)替换策略的16路块高速缓冲存储器900(也称为高速缓冲存储器900、读取高速缓冲存储器900)。在一个示例方法中,块大小为4KB,并且所存储的数据未被压缩。在解压缩块902处接收数据请求,并且解压缩块902确定所请求的数据是否在高速缓冲存储器900中。如果是,则响应于该请求发送未压缩数据。
然而,如果所请求的数据不在高速缓冲存储器中,则解压缩块902从直接内存访问(Direct Memory Access,DMA)904(也称为读取DMA 904)请求该数据。DMA生成由页面地址表906修改的适当地址,并且从LMEM 564的一部分(该部分表示用于VSMEM 155的物理地址空间)、或从对应的片外存储器566取回所请求的数据,并将该所请求的数据发送到解压缩块902。解压缩块902对压缩后的数据进行解压缩,并响应于读取请求发送解压缩后的数据。
图10是根据本公开所描述的技术的图7中的压缩块的更详细的框图。在图10的示例方法中,如点1所示,输入端口800接收待被存储到虚拟SMEM中的激活数据。在输入端口800的写入数据信道处接收的写入数据被存储在写入缓冲区801中,该写入缓冲区具有写入缓冲区块803(也称为块803),该写入缓冲区块的大小支持多个事务。在一个这样的示例方法中,块803的大小为4KB,并且基于AXI标识符(AXI identifier,AXI ID)而被追踪。在输入端口800的写入数据信道上接收的写入地址被转发到重定向地址表808和块状态表810。
在一个示例方法中,如在点2处所示,压缩块704包括旁路复用器805,如果数据不能或不应该被压缩、或者如果写入缓冲区801已满,则可以使用该旁路复用器。
如图8所示,在图10的示例方法中,调度器802选择适当的块以传输到压缩块804。在一个示例方法中,调度器802以两种模式运行:流式传输模式和收集模式。在流式传输模式中,写入有限状态机(FSM)(调度器)802在接收到来自启动器的传输时,立即将数据传递到压缩块804以用于压缩。在收集模式中,调度器802等待直到收集到块并且启动器(例如,生成激活数据的计算元件)已经经由AXI用户位而发送信号时,开始压缩。在这两种模式中,调度器802在输入端口800的写入响应信道上向写入请求的启动器提供写入响应。
在图10的示例方法中,在点3处,写入DMA FSM 812启动DMA传输以通过输出端口908写入物理存储器。写入DMA 806通过经由输出端口908的写入数据信道将写入数据块传输到存储器566、并且经由输出端口908的写入地址信道将写入地址传输到存储器566来进行响应,并且在写入完成时在写入响应信道上接收来自输出端口908的写入响应。在一个这样的示例方法中,通过写入DMA描述符存储器814中的描述符链(例如图11中所示出的写入描述符链)来对写入DMA进行编程。将描述符链本地保存在写入DMA描述符存储器814中的一个原因是减少延迟。
在一个示例方法中,如点4所示,重定向地址表808将4KB对准的输入地址(16MB孔)映射到4x1 KB对准的物理地址。块状态表810追踪4KB的块是否被压缩以及该块的大小。
支持多次读取。在一个示例方法中,对于每个所支持的传入事务,读取高速缓冲存储器900的大小支持4KB的数据。在图10的点5处,读取FSM 901对高速缓冲存储器900进行检查以查看数据在读取高速缓冲存储器900中是否已经可用。若否,则读取FSM 901将读取高速缓冲存储器900中的空间分配为用于读取,并经由输出端口908的写入地址信道向物理存储器发出经由读取DMA FSM 914的读取请求。在一个这样的方法中,读取DMA FSM 914检索压缩后的数据,在解压缩块902处对压缩后的数据进行解压缩,并将解压缩后的、检索到的数据存储在读取高速缓冲存储器900中。如点6所示,如果读取的数据未被压缩,则读取DMAFSM经由多路复用器905绕过解压缩块902。
在一个示例方法中,子系统经由对它的虚拟SMEM地址的读取来请求压缩后的数据块。在未命中读取高速缓冲存储器900时,解压缩器使用页面地址表从SMEM取回压缩后的块,以将虚拟SMEM地址转换为物理地址。然后,使用该物理地址从物理存储器中取回压缩后的块。一旦接收到压缩后的数据,就将其进行解压缩并将其写入读取高速缓冲存储器900中的块。如果存在空闲块,则将解压缩后的块写入该空闲块。如果没有空闲块,新的解压缩后的块将覆写属于受害者(victim)的块,其中,伪LRU用于挑选受害者。
在一个示例方法中,如点7所示,读取DMA 904与写入DMA 806类似地运行,只是该读取DMA发出物理地址。例如,读取DMA 904也经由如图11所示的描述符链而被编程。
图11示出了根据本公开所描述的技术的可在图10中的压缩块中使用的写入描述符链和读取描述符链。描述符链中的每个描述符包括关于以下项的信息:所使用的块的数量、块大小、块输出地址、以及指向下一个描述符的指针。用于读取的块大小是被划分为1024个块(chunk)的、对大小的连续计数,其中,剩余的部分位于最后一个描述符中。
图12示出了根据本公开所描述的技术的可在图10中的压缩块中使用的示例重定向地址表和示例块状态表。在图12中所示出的示例中,重定向地址表808接收4KB对准的输入地址,并确定四个对应于该4KB对准的输入地址的1KB对准的输出地址。同时,块状态表810接收相同的4KB对准的输入地址,并确定4KB的块是否被压缩以及该4KB的块的大小。
图13示出了根据本公开所描述的技术的可与图10中的压缩块一起使用的示例数据和控制互连。在图13中所示出的示例中,互连分为高带宽互连和配置互连。配置协议不必是AXI-Lite,但是CAST单元已经支持该AXI-Lite协议。在图13中所示出的示例中,由于预计将使用软件/固件来对重定向地址表808进行编程,因此高带宽互连不被提供给重定向地址表808或块状态表810。块状态表包括用于调试的互连。
图14是描绘了根据本公开所描述的技术的将压缩后的数据写入SMEM的流程图。在图14的示例方法中,将与运行机器学习程序的计算元件620相关联的LMEM 564(也即,当运行该程序的计算元件是计算元件620B时,为LMEM 564B上的SRAM)分配为激活数据SMEM(920)。机器学习程序在计算元件620上执行(922),并且如果检测到溢出(924),则将来自该溢出的数据压缩为压缩后的数据块(926),并写入VSMEM 155(948)。否则,控制返回到922。在一个示例中,计算元件620发送这样的信号:压缩块704是应该等待附加数据来填充特定块、还是继续压缩已经接收的数据。在一个这样的示例中,被分配给激活数据SMEM的存储器是根据需要来分配和解除分配的。
图15是描绘了根据本公开所描述的技术的从SMEM读取压缩后的数据的流程图。在图15的示例方法中,接收对存储在激活数据SMEM 565中的压缩后的溢出数据的读取请求(930)。压缩块704取回所请求的数据块(932)并解压缩该数据块(934)。然后,响应于读取请求,返回从解压缩后的数据块读取的数据(936)。
图16是描绘了根据本公开所描述的技术的将压缩后的数据写入VSMEM的流程图。在图16的示例方法中,将与运行机器学习程序的计算元件620相关联的LMEM 564(也即,当运行该程序的计算元件是计算元件620B时,为LMEM 564B)上的SRAM的一部分分配为VSMEM(940),并溢出到DRAM 160。在计算元件620上执行机器学习程序(942),并且如果检测到溢出(944),则将来自该溢出的数据压缩为压缩后的数据块(946)并写入VSMEM 155(948)。否则,控制返回到942。在一个示例中,计算元件620发送这样的信号:压缩块704是应该等待附加数据来填充特定块、还是继续压缩已经接收的数据。在一个这样的示例中,被分配给激活数据SMEM的存储器是根据需要来分配和解除分配的。
在一个示例方法中,编译器将溢出表示为图表,并基于预测的需求来确定对VSMEM155的分配。编译器可以基于这种信息自动识别跳跃连接和直通,并从DRAM 160预取回数据。
图17是描绘了根据本公开所描述的技术的从VSMEM读取压缩后的数据的流程图。在图17的示例方法中,接收对存储在激活数据SMEM 565中的压缩后的溢出数据的读取请求(950)。进行检查以确定所请求的数据是否位于存储在LMEM 654中的压缩后的数据块中(952)。如果是,则压缩块704取回所请求的数据块(954)并解压缩该数据块(958)。然后,响应于读取请求,返回从解压缩后的数据块读取的数据(960)。
然而,如果在(952)处所请求的数据不位于存储在LMEM 654中的压缩后的数据块中,则压缩块704从片外存储器(例如,DRAM 160)取回所请求的数据块(956)并解压缩该数据块(958)。然后,响应于读取请求,返回从解压缩后的数据块读取的数据(960)。在一些示例中,响应于读取请求而从DRAM 160取回的压缩后的数据块也存储在LMEM 564中,以替换最近最少使用的数据块。在其他示例中,使用伪LRU算法来确定待被替换的数据块。
如上所述的硬件、软件和固件可以在支持本公开所描述的各种操作和功能的同一设备或多个分开的设备内实现。另外,所描述的单元、模块或部件中的任一者可以一起实现、或者可以被单独地实现为分立但可互操作的逻辑器件。将不同特征描述为模块或单元旨在强调不同的功能方面,并且不一定意味着这些模块或单元必须由单独的硬件或软件部件来实现。而是,与一个或多个模块或单元相关联的功能可以由单独的硬件或软件部件执行,或者可以集成在共同或单独的硬件或软件部件内。
本公开所描述的技术也可以被体现或编码在包含指令的计算机可读介质(例如,计算机可读存储介质)中。嵌入或编码在计算机可读存储介质中的指令可以使得可编程处理器、或其他处理器或处理电路和/或逻辑电路(例如在指令被执行时)执行该方法。计算机可读存储介质可以包括随机存取存储器(RAM)、只读存储器(read only memory,ROM)、可编程只读存储器(programmable read only memory,PROM)、可擦除可编程只读存储器(erasable programmable read only memory,EPROM)、电子可擦除可编程只读存储器(electronically erasable programmable read only memory,EEPROM)、闪存、硬盘、紧凑型光盘只读储存器(CD-ROM)、软盘、磁带、磁介质、光学介质、或其他计算机可读介质。
如本文中以各种示例的方式所描述的,本公开的技术可以包括人工现实系统、或结合人工现实系统来实现。如所描述的,人工现实是在呈现给用户之前已经以某种方式进行了调整的现实形式,该人工现实例如可以包括虚拟现实(VR)、增强现实(AR)、混合现实(MR)、混合现实(hybrid reality)、或它们的某种组合和/或衍生物。人工现实内容可以包括完全的计算机生成内容、或与采集的内容(例如,真实世界照片)相结合的计算机生成内容。人工现实内容可以包括视频、音频、触觉反馈、或它们的某种组合,并且以上中的任何一者均可以在单个通道或多个通道中呈现(例如,给观看者带来三维效果的立体视频)。另外,在一些实施例中,人工现实可以与应用程序、产品、附件、服务、或它们的某种组合相关联,这些应用程序、产品、附件、服务、或它们的某种组合例如用于在人工现实中创建内容、和/或用于人工现实中(例如,在人工现实中执行活动)。提供人工现实内容的人工现实系统可以在各种平台上实现,这些平台包括连接到主控计算机系统的头戴式显示器(HMD)、独立HMD、移动设备或计算系统、或能够向一位或多位观看者提供人工现实内容的任何其他硬件平台。

Claims (18)

1.一种片上系统SoC,包括:
第一子系统,所述第一子系统包括第一计算元件和第一本地存储器,所述第一本地存储器连接到所述第一计算元件;
第二子系统,所述第二子系统包括第二计算元件和第二本地存储器,所述第二本地存储器连接到所述第二计算元件;以及
压缩块,所述压缩块连接到所述第一子系统和所述第二子系统,所述压缩块包括解码器和编码器,
其中,所述压缩块接收由所述第一计算元件和所述第二计算元件中的一者生成的溢出数据,使用所述编码器压缩所述溢出数据,并将压缩后的溢出数据存储在所述第一计算元件和所述第二计算元件中的一者的本地存储器中的数据块中,以及
其中,所述压缩块接收来自所述第一计算元件和所述第二计算元件中的一者的、对存储在所述第一计算元件和所述第二计算元件中的一者的本地存储器中的所述压缩后的溢出数据的读取请求,从所述第一计算元件和所述第二计算元件中的一者的本地存储器取回所请求的、所述压缩后的溢出数据,使用所述解码器解压缩所请求的、所述压缩后的溢出数据,并将解压缩后的所述溢出数据返回给发出所述读取请求的计算元件。
2.根据权利要求1所述的SoC,其中,所述编码器将无损压缩算法应用于所述溢出数据。
3.根据权利要求1所述的SoC,其中,所述本地存储器能作为共享存储器寻址。
4.根据权利要求1所述的SoC,其中,所述本地存储器是静态随机存取存储器SRAM。
5.根据权利要求4所述的SoC,其中,所述本地存储器被分配为静态存储器SMEM的一部分。
6.根据权利要求4所述的SoC,其中,每个本地存储器被分配为虚拟静态存储器VSMEM,其中,所述本地存储器的一部分用作所述VSMEM的物理地址空间,并且片外存储器的一部分用作用于压缩后的数据块的存储装置,所述压缩后的数据块在所述VSMEM的所述物理地址空间中被进行了替换。
7.根据权利要求4所述的SoC,其中,每个本地存储器被分配为虚拟静态存储器VSMEM,其中,所述本地存储器的一部分用作所述VSMEM的物理地址空间,并且片外存储器的一部分用作用于压缩后的数据块的存储装置,所述压缩后的数据块从所述物理地址空间老化移出。
8.一种人工现实系统,包括:
头戴式显示器HMD,所述HMD被配置为输出人工现实内容,所述HMD包括显示器和至少一个片上系统SoC,其中,所述至少一个SoC包括:
第一子系统,所述第一子系统包括第一计算元件和第一本地存储器,所述第一本地存储器连接到所述第一计算元件;
第二子系统,所述第二子系统包括第二计算元件和第二本地存储器,所述第二本地存储器连接到所述第二计算元件;以及
压缩块,所述压缩块连接到所述第一子系统和所述第二子系统,所述压缩块包括解码器和编码器,
其中,所述压缩块接收由所述第一计算元件和所述第二计算元件中的一者生成的溢出数据,使用所述编码器压缩所述溢出数据,并将压缩后的溢出数据存储在所述第一计算元件和所述第二计算元件中的一者的本地存储器中的数据块中,以及
其中,所述压缩块接收来自所述第一计算元件和所述第二计算元件中的一者的、对存储在所述第一计算元件和所述第二计算元件中的一者的所述本地存储器中的所述压缩后的溢出数据的读取请求,从所述第一计算元件和所述第二计算元件中的一者的所述本地存储器取回所请求的、所述压缩后的溢出数据,使用所述解码器解压缩所请求的、所述压缩后的溢出数据,并将解压缩后的溢出数据返回给发出所述读取请求的计算元件。
9.根据权利要求8所述的人工现实系统,其中,所述编码器将无损压缩算法应用于所述溢出数据。
10.根据权利要求8所述的人工现实系统,其中,所述本地存储器能作为共享存储器寻址。
11.根据权利要求8所述的人工现实系统,其中,所述本地存储器是静态随机存取存储器SRAM。
12.根据权利要求11所述的人工现实系统,其中,所述本地存储器被分配为静态存储器SMEM的一部分。
13.根据权利要求11所述的人工现实系统,其中,每个本地存储器被分配为虚拟静态存储器VSMEM,其中,所述本地存储器的一部分用作所述VSMEM的物理地址空间,并且片外存储器的一部分用作用于压缩后的数据块的存储装置,所述压缩后的数据块在所述VSMEM的所述物理地址空间中被进行了替换。
14.根据权利要求8所述的人工现实系统,其中,所述本地存储器被分配为虚拟静态存储器VSMEM,其中,所述本地存储器的一部分用作所述VSMEM的物理地址空间,并且片外存储器的一部分用作用于压缩后的数据块的存储装置,所述压缩后的数据块从所述物理地址空间老化移出。
15.根据权利要求8所述的人工现实系统,其中,每个本地存储器被分配为虚拟静态存储器VSMEM,其中,所述本地存储器的一部分用作所述VSMEM的物理地址空间,并且片外存储器的一部分用作用于压缩后的数据块的存储装置,所述压缩后的数据块从所述物理地址空间老化移出。
16.一种方法,在具有第一子系统、第二子系统以及压缩块的片上系统(SoC)中,所述压缩块连接到所述第一子系统和所述第二子系统,所述压缩块包括解码器和编码器,其中,所述第一子系统包括连接到第一本地存储器的第一计算元件,并且所述第二子系统包括连接到第二本地存储器的第二计算元件,所述方法包括:
在所述压缩块处接收由所述第一计算元件和所述第二计算元件中的一者生成的溢出数据;
使用所述编码器压缩所述溢出数据;以及
将压缩后的溢出数据存储在所述第一计算元件和所述第二计算元件中的一者的本地存储器中的数据块中。
17.根据权利要求16所述的方法,其中,压缩包括:将无损压缩算法应用于所述溢出数据。
18.根据权利要求16所述的方法,其中,所述压缩块接收来自所述第一计算元件和所述第二计算元件中的一者的、对存储在所述第一计算元件和所述第二计算元件中的一者的所述本地存储器中的所述压缩后的溢出数据的读取请求,从所述第一计算元件和所述第二计算元件中的一者的所述本地存储器取回所请求的、所述压缩后的溢出数据,使用所述解码器解压缩所请求的、所述压缩后的溢出数据,并将解压缩后的溢出数据返回给发出所述读取请求的计算元件。
CN202310938086.1A 2022-07-27 2023-07-27 片上系统的大数据集的无损压缩 Pending CN117472269A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US63/369,616 2022-07-27
US17/934,835 2022-09-23
US17/934,835 US20240094907A1 (en) 2022-07-27 2022-09-23 Lossless compression of large data sets for systems on a chip

Publications (1)

Publication Number Publication Date
CN117472269A true CN117472269A (zh) 2024-01-30

Family

ID=89633754

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310938086.1A Pending CN117472269A (zh) 2022-07-27 2023-07-27 片上系统的大数据集的无损压缩

Country Status (1)

Country Link
CN (1) CN117472269A (zh)

Similar Documents

Publication Publication Date Title
EP3574407B1 (en) No miss cache structure for real-time image transformations with data compression
US20200218330A1 (en) Adaptive multi-resolution for graphics
US20210350597A1 (en) Predictive viewport renderer and foveated color compressor
US10672368B2 (en) No miss cache structure for real-time image transformations with multiple LSR processing engines
CN110249317B (zh) 用于实时图像变换的无未命中高速缓存结构
ES2922054T3 (es) Soporte de múltiples tasas de refresco en regiones diferentes del visor del panel
US20200082494A1 (en) Contextual configuration adjuster for graphics
US20240095195A1 (en) Artificial Reality System Having Multi-Bank, Multi-Port Distributed Shared Memory
US11514721B2 (en) Dynamic brightness and resolution control in virtual environments
CN104952033A (zh) 分布式图形处理器分级中的系统一致性
US11755747B2 (en) High throughput storage encryption
JP2023531928A (ja) 人工現実システムのためのメモリの階層型電力管理
EP4312109A1 (en) Lossless compression of large data sets for systems on a chip
CN117472269A (zh) 片上系统的大数据集的无损压缩
US11681627B1 (en) Distributed temporal cache for Systems on a Chip
US11797451B1 (en) Dynamic memory management in mixed mode cache and shared memory systems
US11941131B1 (en) Isolation of secrets from an operating system
WO2022147349A1 (en) High throughput storage encryption

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination