CN106796504A - 用于指令预提取的方法和设备 - Google Patents

用于指令预提取的方法和设备 Download PDF

Info

Publication number
CN106796504A
CN106796504A CN201580051186.6A CN201580051186A CN106796504A CN 106796504 A CN106796504 A CN 106796504A CN 201580051186 A CN201580051186 A CN 201580051186A CN 106796504 A CN106796504 A CN 106796504A
Authority
CN
China
Prior art keywords
instruction
data
buffer
computer implemented
vector
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201580051186.6A
Other languages
English (en)
Other versions
CN106796504B (zh
Inventor
B·巴里
F·康纳
M·奥利德
D·莫洛尼
S·鲍尔
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Linear Algebra Technologies Ltd
Original Assignee
Linear Algebra Technologies Ltd
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 US14/457,929 external-priority patent/US10001993B2/en
Application filed by Linear Algebra Technologies Ltd filed Critical Linear Algebra Technologies Ltd
Priority to CN201910648783.7A priority Critical patent/CN110515658A/zh
Publication of CN106796504A publication Critical patent/CN106796504A/zh
Application granted granted Critical
Publication of CN106796504B publication Critical patent/CN106796504B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30149Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/02Digital function generators
    • G06F1/03Digital function generators working, at least partly, by table look-up
    • G06F1/035Reduction of table size
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30025Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30192Instruction operation extension or modification according to data descriptor, e.g. dynamic data typing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3814Implementation provisions of instruction buffers, e.g. prefetch buffer; banks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3889Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30029Logical and Boolean instructions, e.g. XOR, NOT
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30149Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
    • G06F9/30152Determining start or end of instruction; determining instruction length
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/3822Parallel decoding, e.g. parallel decode units

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)
  • Power Sources (AREA)
  • Memory System (AREA)
  • Image Processing (AREA)

Abstract

公开了一种包括各种可变长度指令的向量处理器。公开了用于以省时、存储器高效且功率高效的方式有效地执行各种操作的计算机实现的方法。公开了用于通过基于延迟线指令的长度而控制阈值来更有效地管理缓冲器的方法。公开了用于在硬件中布置多类型和多尺寸操作的方法。公开了用于压缩查找表的方法。公开了用于对变量进行在线改变的方法。

Description

用于指令预提取的方法和设备
相关申请的交叉引用
本申请要求于2014年8月12日提交的共同未决的美国实用新型申请号14/457,929以及于2014年7月30日提交的共同未决的美国临时申请序列号62/030,913的优先权的权益,这些申请的内容通过引用以其全文结合在此。
技术领域
本申请总体上涉及计算机视觉处理,并且更具体地涉及有效的低功率向量处理器。
背景技术
计算成像是能够基于图像和视频提供前所未有的用户体验和信息的新成像范例。例如,计算成像可以对图像和/或视频进行处理以提供场景的深度图,提供场景的全景视图,从图像和/或视频提取面部,从图像和/或视频提取文本、特征和元数据,并且甚至提供基于对象和场景识别特征的自动化视觉认知能力。
虽然计算成像可以提供有趣的能力,但它没有被广泛采用。计算成像的缓慢采用可归因于计算成像伴随有基本的数据处理挑战。通常,图像分辨率和视频帧速率是高的。因此,计算成像通常需要数百千兆字节的计算资源,这可能难以通过使用常规计算机处理器来获得,特别是在性能必须是可持续的并且在低功耗下由高的存储器带宽支持的情况下。此外,计算成像一般对延迟敏感。因为用户不可能等待几分钟来使相机识别对象,所以计算成像相机一般被设计为快速处理图像和视频,这进一步加重了计算成像的计算要求。
遗憾的是,难以在定制硬件中实现计算成像技术。由于计算成像领域处于其相对初期,实现技术在不断变化。因此,难以在硬件中完全定制计算成像,因为实施技术的变化将需要重新设计整个硬件。因此,通常期望提供灵活的硬件架构和灵活的硬件基础结构。
同时,对于这样的视频和图像处理的需求在很大程度上来自功率消耗是关键考虑因素的便携式电子设备,例如平板计算机和移动设备。其结果是,存在对于即使在受限的功率预算下也可以操作的灵活的计算成像基础结构。
发明内容
根据所公开主题,提供了多种用于低功率计算成像的向量处理器的系统和方法。
所公开主题包括一种用于管理可变长度指令缓冲器的计算机实现的方法,所述方法可以包括以下步骤:对来自第一参考位置的可变长度指令数据进行缓存;将在第一时刻在指令缓冲器中可用的第一等级的未处理数据与默认阈值进行比较;基于所述第一等级的未处理数据不满足所述默认阈值,将来自所述经缓存的指令数据中的固定宽度的数据加载到所述指令缓冲器中;对引用不同于所述第一参考位置的第二参考位置的分支指令进行处理,所述分支指令包括指示分支延迟大小的标头;将在所述分支指令被处理之后的第二时刻的所述指令缓冲器中可用的第二等级的未处理数据与所述分支延迟大小进行比较;以及基于所述第二等级的未处理数据不满足所述分支延迟大小,将来自所述经缓存的指令数据中的固定宽度的数据加载到所述缓冲器中。
在一些实施例中,所述方法可以进一步包括:从所述缓冲器中的未处理数据中解耦可变长度指令,并且输出所述解耦的指令,减少所述缓冲器中的未处理数据的等级。所述解耦的指令被输出到向量处理器。
所公开主题还包括一种用于管理可变长度指令的系统,所述系统包括:缓存,所述缓存用于存储来自存储器的可变长度指令;缓冲器,所述缓冲器用于将从所述缓存加载的数据解耦成指令;以及提取单元。所述缓存被配置为用于加载来自特定存储器位置的指令。所述缓冲器被配置为用于从所述缓存接收多个固定宽度数据行并且输出可变长度指令。所述提取单元被配置为用于确定所述缓冲器中的未处理数据的等级;指示所述缓存将附加数据加载到所述缓冲器中;将在第一时刻在所述缓冲器中可用的第一等级的未处理数据与默认阈值进行比较,以确定何时指示所述缓存将附加数据加载到所述缓冲器中;在所述系统标识分支指令之后,从所述分支指令标头中确定分支延迟大小;以及将在所述系统标识所述分支指令之后的第二时刻在所述缓冲器中可用的第二等级的未处理数据与所述分支延迟大小而不是所述默认阈值进行比较,以确定何时指示所述缓存将附加数据加载到所述缓冲器中。
所公开主题还包括一种用于数据的硬件处理的计算机实现的方法,所述方法可以包括以下步骤:接收第一可变长度指令,所述指令指示要执行的第一操作并且引用一个或多个第一操作数;
确定用于所述一个或多个第一操作数的第一数据类型;使用第一硬件逻辑电路对所述第一数据类型的所述第一操作数执行所述第一操作;接收第二可变长度指令,所述指令指示执行所述第一操作并且引用一个或多个第二操作数;确定用于所述一个或多个第二操作数的第二数据类型,其中,所述第二数据类型不同于所述第一数据类型;以及使用所述第一硬件逻辑对所述第二数据类型的所述第二操作数执行所述第一操作。所述第一硬件逻辑能够可操作用于对多种大小的操作数执行所述第一操作。所述第一硬件逻辑能够可操作用于对浮点、定点、整数、以及经缩放整数数据类型的操作数执行所述第一操作。
所公开主题还包括一种计算机实现的方法,所述方法可以包括以下步骤:存储用于操作的多个结果条目的查找表,所述查找表包括预定精度水平的多个小数结果,其中,所述查找表针对每个条目包括多个编码位和多个未编码位;响应于包括所述操作的指令,在所述查找表上查找对应于特定值的特定条目;对所述编码位进行解码以生成所述小数结果的一部分;至少将所述未编码位添加到所生成的小数结果;以及基于所产生的小数结果返回所述操作的结果。所述操作可以是诸如对数操作的单一操作。
在一些实施例中,所述编码位可以表示重复所述小数结果中的特定数字的次数。所述特定数字可以被存储在所述查找表条目中。可替代地,所述特定数字可以不被存储在所述查找表条目中,并且所述方法可以进一步包括将所述特定值与阈值进行比较,以便确定所述特定数字。
所公开主题还包括一种用于在线向量改变的计算机实现的方法,所述方法可以包括以下步骤:接收可变长度指令,所述可变长度指令包括有待对在第一存储器位置处引用的向量的改变形式执行的操作;生成由所述可变长度指令指定的改变向量;以及对所述改变向量执行所述操作。在执行所述操作之后,所述第一存储器位置处的向量处于其原始未改变的形式。所述改变可以包括拌和向量元素、反转向量元素、和/或向量元素的替换值。至少一个向量元素可以是既经拌和又经反转的。
根据另一实施例,公开了一种制品,所述制品包括至少一个处理器可读存储介质以及存储在所述至少一个介质上的指令。所述指令可以被配置为用于可由至少一个处理器从所述至少一个介质读取,以及从而致使所述至少一个处理器操作以执行任何上述实施例中的任何和所有步骤。
根据另一实施例,所述技术可以被实现为包括通信地耦联到网络的一个或多个处理器的系统;其中,所述一个或多个处理器被配置为用于执行关于上述任何一个实施例所描述的任何和所有步骤。
现在将参考附图中所示的本发明的具体实施例来更详细地描述本发明。虽然下面参考具体实施例来描述本公开内容,但应当理解,本公开内容不限于此。能够触及本文的传授内容的本领域普通技术人员将认识到在本文所描述的本公开内容的范围内的附加实施方式、修改和实施例以及其他使用领域,并且就其而言本公开内容可以具有重要的效用。
附图说明
当结合以下附图考虑时,参考下面对所公开主题的详细描述,可以更充分地理解所公开主题的各种目的、特征和优点,在附图中相似的附图标记表示相似的元件。这些附图是示意性的,并且不旨在按比例绘制。为了清楚起见,在每个附图中并非每个组件都被标记。也并未示出所公开主题的每个实施例的每个组件,其中图示无需允许本领域普通技术人员理解所公开主题。
图1提供了根据一些实施例的计算设备的高级图示。
图2示出了根据一些实施例的计算设备的详细图示。
图3示出了根据一些实施例的向量处理器。
图4绘制了根据一些实施例的三个不同的可变长度指令标头。
图5是示出根据一些实施例的用于指令缓冲器管理的系统的框图。
图6绘制了根据一些实施例的三个不同的功能单元指令。
图7是示出根据一些实施例的用于缓冲器管理的方法的流程图。
图8绘制了根据一些实施例映射功能单元指令。
图9是示出根据一些实施例的用于操作的通用硬件执行的方法的流程图。
图10是示出根据一些实施例的压缩查找表的条目的图表。
图11是示出根据一些实施例的用于使用压缩查找表的方法的流程图。
图12绘制了拌和指令并且示出了关于向量的指令。
图13是示出根据一些实施例的用于在线向量改变的方法的流程图。
图14示出了根据一些实施例的包括计算设备的电子设备。
具体实施方式
向量引擎架构
在下面的描述中,关于所公开主题的系统和方法以及这些系统和方法可以操作的环境等,阐述了许多具体细节,以便提供对所公开主题的透彻理解。然而,本领域技术人员将清楚的是,可以在没有这些具体细节的情况下实践所公开主题,并且本领域公知的某些特征未进行详细描述,以避免使所公开主题复杂化。此外,应当理解的是,下面提供的示例是示例性的,并且可以预期,在所公开主题的范围内存在其他系统和方法。
计算成像可以转换机器捕获物理世界并与其交互的方式。例如,通过计算成像,机器可以捕获使用传统成像技术极难捕获的图像。作为另一个示例,通过计算成像,机器可以理解其周围环境并根据其周围环境作出反应。
将计算成像引入大众市场的挑战之一在于,计算成像本身是计算量巨大的。计算成像通常使用大量的高分辨率的图像和/或大量的具有高帧速率的视频。因此,计算成像通常需要强大的计算平台的支持。此外,由于计算成像通常用于移动环境中,例如使用智能手机或平板计算机,计算成像通常需要可以低功率预算操作的强大的计算平台的支持。
本申请公开了一种计算设备,该计算设备可以提供用于计算成像的低功率、高能力的计算平台,并且标识可有助于平台的能力的向量处理器的特定特征。图1提供了根据一些实施例的计算设备的高级图示。计算设备100可以包括一个或多个处理单元(例如一个或多个向量处理器102和一个或多个硬件加速器104)、智能存储器结构106、外围设备108、以及功率管理模块110。
所述一个或多个向量处理器102包括实现包含对称为向量的数据阵列进行操作的指令的指令集的中央处理单元(CPU)。更具体地,所述一个或多个向量处理器102可以被配置为用于同时对大量数据执行通用算术操作。在一些实施例中,所述一个或多个向量处理器102可以包括单指令多数据、超长指令字(SIMD-VLIW)处理器。在一些实施例中,所述一个或多个向量处理器102可以被设计为执行与计算机视觉和成像应用相关联的指令。
所述一个或多个硬件加速器104包括执行一些功能的计算机硬件,其比在更通用的CPU上运行的软件中可能的功能执行更快。非视觉应用中的硬件加速器的示例包括图形处理单元(GPU)中的位块传输(blitting)加速模块,该位块传输加速模块被配置为用于使用光栅算子将几个位图组合成一个。
在一些实施例中,所述一个或多个硬件加速器104可以提供适合于图像处理和计算机视觉应用的可配置基础结构。这些硬件加速器104可以被认为包括用于使图像处理加速和围绕专用计算核心的计算机视觉操作的通用包装硬件。例如,硬件加速器104可以包括用于执行图像过滤操作的专用过滤模块。过滤模块可以被配置为用于以有效的方式跨图像操作定制的滤波器内核。在一些实施例中,硬件加速器104可以在每个时钟周期输出一个完整计算的输出像素。
智能存储器结构106可以被配置为用于提供具有小时延的低功率存储器系统。由于图像和视频包括大量数据,在存储器和处理单元之间提供高速接口是重要的。在一些实施例中,智能存储器结构106可以包括例如64个存储器块,其中每个块可以包括64位接口。在这些实施例中,例如,以600Mhz操作的存储器结构106能够以307.2GB/秒传输数据。在其他实施例中,智能存储器结构106可以包括任何其他数量的存储器块,其中每个块可以包括实现一个或多个接口协议的任何数量的接口。
外围设备108可以被配置为用于提供用于向诸如图像传感器和加速度计等外部设备发送和接收数据位的通信信道。外围设备108可以用于这些向量处理器102、硬件加速器104和存储器结构106的通信机制,以与外部设备通信。
功率管理模块110可以被配置为用于控制计算设备100内的多个指定块的活动。更具体地,功率管理模块110可以被配置为用于控制在计算设备100内的多个指定块(也称为功率岛)的供电电压。例如,当功率管理模块110启用功率岛的供电时,可以触发计算设备100向所述功率岛提供适当的供电电压。在一些实施例中,每个功率岛可以包括独立的功率域。因此,可以独立地控制功率岛的供电。在一些实施例中,功率管理模块110还可以被配置成通过计算设备100中的输入/输出引脚中的一者或多者来控制外部附接到计算设备100的功率岛的活动。
图2示出了根据一些实施例的计算设备的详细图示。计算设备100可以包括多个向量处理器102。在该图示中,计算设备100包括12个向量处理器102。这些向量处理器102可以经由处理器间互连(IPI)202彼此通信。这些向量处理器102还可以经由IPI 202和加速器存储器控制器(AMC)交叉开关矩阵204或存储器映射处理器总线208与计算设备100中的其他组件(包括存储器结构106和/或硬件加速器104)通信。
在一些实施例中,所述一个或多个向量处理器102可以被设计为执行专有指令集。该专有指令集可以包括专有指令。该专有指令可以是可变长度二进制字符串,其包括指令标头和一个或多个单元指令。该指令标头可以包括关于指令长度和用于相关联的专有指令的活动单元的信息;单元指令可以是包括多个固定或可变的字段的可变长度二进制字符串。这些字段可以包括标识所述指令的操作码和指定在单元指令执行中使用的值的操作数。
计算设备100可以包括多个硬件加速器104。这些硬件加速器104可以包括被配置为用于执行多种预定处理功能的各种加速器模块。在一些实施例中,预定处理功能可以包括过滤操作。例如,这些硬件加速器104可以包括原始图像处理模块、镜头阴影校正(LSC)模块、拜耳模式去马赛克模块、锐化滤波器模块、多相缩放器模块、Harris角检测模块、颜色组合模块、亮度信道噪声模块、色度信道去噪模块、中值滤波器模块、查找表、卷积模块、边检测模块和/或任何其他合适的模块或模块组合。这些硬件加速器104可以被配置为用于检索和存储驻留在存储器结构106中的多个存储器设备中的数据。
存储器结构106可以包括协调计算设备100内的存储器操作的中央存储器系统。存储器结构106可以被设计为减少处理单元(例如向量处理器102和硬件加速器104)之间的不必要的数据传输。存储器结构106被结构为允许多个处理单元并行地访问数据和程序代码存储器而不停顿。另外,存储器结构106可以使主机处理器经由诸如高级可扩展接口(AXI)或任何其他合适的总线208的并行总线访问存储器结构106中的存储器系统。
在一些实施例中,处理单元可以通过其多个加载存储单元(LSU)端口每个周期读/写高达128位,并且通过其指令端口每个周期读取高达128位的程序代码。除了分别用于处理器102和硬件加速器104的IPI 202和AMC 204接口之外,存储器结构106可以通过高级微控制器总线架构(AMBA)高性能总线(AHB)和AXI总线接口提供对存储器系统的同时读/写访问。AHB和AXI是允许使用共享总线基础结构来连接多个处理单元、存储器系统和外围设备的标准并行接口总线。可以使用任何其他合适的总线。在一些实施例中,存储器结构106可以被配置为用于每个时钟周期处理18x 128位存储器访问的峰值。在其他实施例中,存储器结构106可以被设计为使用具有大的位数的高速接口来每个时钟周期处理任意数量的存储器访问。
存储器结构106中的存储器系统可以包括多个存储器片,每个存储器片与这些向量处理器102之一相关联、并且越过其他向量处理器102向该处理器给予优先访问。每个存储器片可以包括多个随机存取存储器(RAM)瓦片(tile),其中每个RAM瓦片可以包括读取端口和写入端口。在一些情况下,每个存储器片可以设置有用于提供对相关存储器片的访问的存储器片控制器。
这些处理器和RAM瓦片可以经由总线(也称为IPI 202)彼此耦联。在一些情况下,IPI 202可以将这些向量处理器202中的任一者与存储器结构106中的这些存储器片中的任一者耦联。适当地,每个RAM瓦片可以包括用于准许对所述瓦片的访问的瓦片控制逻辑块。该瓦片控制逻辑块有时被称为瓦片控制逻辑或仲裁块。
在一些实施例中,每个存储器片可以包括多个RAM瓦片或物理RAM块。例如,具有128kB大小的存储器片可以包括组织为4k×32位字的四个32kB单端口RAM瓦片(例如,物理RAM元件)。作为另一实例,具有256kB大小的存储器片可以包括组织为8k×32位字的八个32kB单端口RAM瓦片(例如,物理RAM元件)。在一些实施例中,存储器片可以具有低至16kB和高达16MB的容量。在其他实施例中,存储器片可以被配置为用于具有与容纳由所述计算设备处理的各种应用所需的一样大的容量。
在一些实施例中,RAM瓦片可以包括单端口互补金属氧化物半导体(CMOS)RAM。单端口CMOS RAM的优点是,其在大多数半导体工艺中通常可用。在其他实施例中,RAM瓦片可以包括多端口CMOS RAM。在一些实施例中,每个RAM瓦片可以是16位宽、32位宽、64位宽、128位宽,或者可以与所述计算设备的特定应用所需的一样宽。
单端口存储器设备的使用可以增加存储器子系统的功率和面积效率,但是可能限制存储器系统的带宽。在一些实施例中,存储器结构106可以被设计为允许这些存储器设备表现为能够服务来自多个源(处理器和硬件块)的多个同时读取和写入请求的虚拟多端口存储器子系统。这可以通过使用多个物理RAM实例并提供对它们的仲裁访问以服务多个源来实现。
在一些实施例中,每个RAM瓦片可以与瓦片控制逻辑相关联。该瓦片控制逻辑被配置为用于从多个向量处理器102或硬件加速器104接收请求、并且提供对相关联的RAM瓦片的各个读取端口和写入端口的访问。例如,当向量处理器102准备访问RAM瓦片中的数据时,在向量处理器102将存储器数据请求直接发送到RAM瓦片之前,向量处理器102可以将存储器访问请求发送到与RAM瓦片相关联的瓦片控制逻辑。所述存储器访问请求可以包括由处理元件请求的数据的存储器地址。随后,瓦片控制逻辑可以分析存储器访问请求、并且确定向量处理器102是否可以访问所请求的RAM瓦片。如果向量处理器102可以访问所请求的RAM瓦片,则瓦片控制逻辑可以将访问授权消息发送到向量处理器102,并且随后,向量处理器102可以向RAM瓦片发送存储器数据请求。
在一些实施例中,瓦片控制逻辑可以被配置为用于确定和实施许多处理单元(例如,向量处理器和硬件加速器)访问相同RAM瓦片的顺序。例如,瓦片控制逻辑可以包括冲突检测器,该冲突检测器被配置为用于检测两个或更多个处理单元尝试同时访问RAM瓦片的情况。冲突检测器可以被配置为用于向运行时调度器报告已经发生访问冲突并且访问冲突应当被解决。
存储器结构106还可以包括用于将数据位从存储器传送到向量处理器102或硬件加速器104或者从向量处理器102或硬件加速器104传送到存储器的存储器总线。存储器结构106还可以包括直接存储器存取(DMA)控制器,该DMA控制器协调在向量处理器102、硬件加速器104和存储器之间的数据传送。
外围设备108可以被配置为用于提供用于向诸如多个异构图像传感器和加速度计等外部设备发送和接收数据位的通信信道。外围设备108可以用于这些向量处理器102、硬件加速器104和存储器结构106的通信机制,以与外部设备通信。
传统上,外围设备的功能已经被固定和硬编码。例如,移动工业处理器接口(MIPI)外围设备仅能够与也实现较低速率数字接口(例如SPI、I2C、I2S或任何其它合适的标准)的外部设备接口连接。
然而,在本公开内容的一些实施例中,外围设备108的功能可以使用软件来定义。更具体地,外围设备108可以包括仿真模块,该仿真模块能够仿真标准化接口协议(例如SPI、I2C、I2S或任何其他合适的协议)的功能。
功率管理模块110被配置为用于控制计算设备100内的多个块的活动。更具体地,功率管理模块110被配置为用于控制在多个指定块(也称为功率岛)的供电电压。例如,当功率管理模块110启用功率岛的供电时,计算设备100被配置为用于向所述功率岛提供适当的供电电压。功率管理模块110可以被配置为用于通过在寄存器中或在总线上的信号线上施加使能信号来启用对功率岛的供电。在一些实施例中,功率管理模块110还可以被配置成通过计算设备100中的输入/输出引脚中的一者或多者来控制外部设备的活动。
在一些实施例中,功率岛可以总是通电(例如,总是将供电电压提供给功率岛)。这样的功率岛可以被称为常通(always-on)功率岛。在一些实施例中,常通功率岛可以用于检测来自例如通用输入输出(GPIO)引脚、外部接口、和/或内部功能块(例如低频定时器或上电复位)的信号。这样,计算设备100可以响应事件或事件序列,并且仅对需要响应所述事件或事件序列的电源岛自适应地上电。
由代理人案卷号2209599.125US2标识的题为“LOW POWER COMPUTATIONALIMAGING(低功率消耗成像)”的美国专利申请号TBD以及由代理人案卷号2209599.125US3标识的标题为“APPARATUS,SYSTEMS,AND METHODS FOR LOW POWER COMPUTATIONAL IMAGING(用于低功率消耗成像的装置、系统及方法)”的美国专利申请号TBD中提供了关于这些硬件加速器104、存储器结构106、外围设备108和以及功率管理模块110的进一步细节。这两篇申请是在同一日期提交的,并且通过引用以其全文结合在此。
图3示出了根据本公开内容的多种实施方式的包括向量处理器的计算机视觉系统架构的进一步细节。公开了流式混合架构向量引擎(SHAVE)处理器300,其在所示实施例中与图形处理系统的存储器和电路组件通信。SHAVE处理器300是专用图形处理器,其被配置为用于通过本文进一步描述的各种硬件逻辑来实时执行计算机视觉计算。图3中所示的处理器300外部的组件包括提供快速存取存储器资源的二级(L2)缓存350、用于一级缓存和长期存储器的静态RAM(SRAM)354、堆叠管芯专用集成电路(ASIC)封装362、以及用于ASIC和存储器组件之间的接口的双数据速率(DDR)控制器358。
处理器300包括多个硬件组件,这些硬件组件共同地促进可变长度指令系统,在本文所示的实施例中,该可变长度指令系统具有八个功能单元302a-h。下面进一步描述了在该实施方式中使用的功能单元302a-h中的每一者。
基于与每个功能单元相关联的指令和该单元对这些资源的典型需求,这些功能单元302具有到处理器300内部和外部的存储器中的不同位置的各种端口。更具体地,在一些实施方式中,这些单元302包括到两个通用注册表文件(即:向量注册表文件(VRF)304或整数注册表文件(IRF)306)的端口。
向量注册表文件304提供512字节(32×128位字)的快速存取通用存储。该向量注册表文件通过一组端口并行地支持多达六个读访问和六个写访问,这些读访问和写访问被指配给不同单元指令中的变量。如果执行不同指令的两个功能单元被指配给相同端口,则这可能限制某些操作不能并行进行。
类似地,整数注册表文件306提供128字节(32×32位字)的快速存取通用存储。该整数注册表文件通过一组端口并行地支持多达十二个读访问和六个写访问,这些读访问和写访问被指配给这些功能单元。这也限制了并行执行某些指令的能力。
本领域普通技术人员将认识到,可以定制每个注册表文件304、306的以及可用访问端口的大小和配置,并且本文给出的值是示例性的。例如,在另一实施方式中,可以使用三个注册表文件而不是两个。这些访问端口的数量和优先级可以类似地由本领域技术人员选定。
现在给出八个功能单元中的每一者的简要概述以及存储器访问的端口和相关功能的一个或多个示例的描述。虽然本文所讨论的实施例使用这八个功能单元,但应当理解,可以根据本公开内容的多个方面来实现更多或更少的功能单元。
预测评估单元(PEU)302a包括用于使用诸如“if,then,else”命令的逻辑谓词来评估条件命令的逻辑。PEU指令一般包括用于先行词的比较指令(CMU)和用于谓词的一个或多个其他指令(VAU、SAU、IAU、BRU等)。PEU本身没有给这些注册表文件指配任何读或写端口。
分支单元(BRU)302b包括用于跳转到这些指令的不同部分的、循环指令的、以及重复最后指令的各种指令。BRU被指配给用于IRF的两个读端口和一个写端口,这些端口主要用于与分支指令相关联的地址。
加载存储单元0和1(LSU0和LSU1)302c和302d各自包括用于将数据加载到存储器和从存储器加载数据的各种指令。在LSU功能单元下执行各种特定操作,例如立即加载、位移加载、索引加载和存储。LSU功能单元还包括允许多个向量元素的在线拌和的多个命令,如下面进一步描述的。LSU0和LSU1各自包括对用于IRF的三个读端口和两个写端口、以及用于VRF的一个读端口和一个写端口的访问。另外,LSU0和LSU1各自包括对与SRAM 354相关联的读和写端口的访问。
整数算术单元(IAU)302e包括用于执行将位作为整数进行处理的算术操作的指令。IAU为IRF指配了三个读端口和一个写端口,这允许它读取多达三个用于进行整数算术的值并且写入整数结果。
标量算术单元(SAU)302f包括用于执行给出32位结果的算术操作(诸如加法、减法和标量乘法)的指令,所述32位结果可以被读取为单个32位值、两个16位值、或四个8位值。SAU包括产生标量值的向量求和操作。SAU操作适应各种格式的值,在一些实施方式中包括浮点和定点小数、整数和缩放整数。SAU为IRF指配了两个读端口和一个写端口。该SAU还为VRF分配了一个读端口,以适应向量值上的标量操作。
向量算术单元(VAU)302g包括用于执行产生高达四个32位结果的向量的操作的指令。所述四个32位区域可以被读取为4向量的32位元素、8向量的16位元素或者甚至16向量的8位元素。VAU操作包括通常在视觉处理中使用的各种标准矩阵算子,诸如交叉乘法、元素平均、具有强制饱和点的函数。VAU为VRF指配了两个读端口和一个写端口。
比较单元(CMU)302h包括用于执行比较操作(例如等价关系和其他测试(大于、小于、等于、数据类型比较等))的指令。CMU还执行数据类型格式转换,并且可以在IRF和VRF之间移动数据。这些CMU指令通常与PEU指令结合使用,以便生成用于不同偶然事件的代码,“if/then”指令依赖于一个或多个CMU测试的结果以便确定是否继续该偶然指令。CMU为IRF指配了三个读端口和两个写端口,以及为VRF指配了四个读端口和四个写端口。这允许CMU对由所述系统注册的任何值执行比较操作,包括16元素向量比较。
这八个功能单元总共允许多达192位的可变长度处理器指令。每个处理器指令是可变长度二进制字符串,该可变长度二进制字符串包括指令标头并且介于零个和八个之间的单位指令。
指令标头提供了足够的信息以确定处理器指令的总长度,包括作为处理器指令的一部分的有待并行执行的每个单元指令的位长度。这通过将每个功能单元限制到最多三个可能的位大小(然而其他实施方式可以使用更长的标头以允许另外的不同的位大小)。
作为说明,图4中示出了三个处理器标头400、410和420。第一处理器标头400表示并行执行的两个指令的标头,该标头由其四个前导位表示。并行发现的两个标头的十三个最常见的组合被给予4位代码,而一个4位代码被保留用于特殊指令。最后两个可用的4位代码是较长8位和16位代码的前四个数字,如下所述。
标头400中所示的特定四位代码402a转换为CMU和IAU指令。接下来的两位表示用于CMU指令的操作码404a,该操作码指示其长度、并且还可以提供关于将使用哪个CMU指令的一些信息。类似地,接下来的两位表示用于IAU指令的操作码404b。如果这些操作码中任一者为00,则这将指示没有给出作为处理器指令的一部分的类型的指令;因此也可以选择该标头以表示单个IAU指令,例如,通过将00放置在CMU操作码字段404a中。总而言之,标头400是8位长、并且提供足够的信息来确定整个处理器指令的位长。
指令标头410包括标头中的用于标识最多四个待并行执行的指令的8位代码。在该实施方式中对应于“1110”的特定4位字412a用于所有四指令标头。十五个四指令组合指配了4位代码,其表现为接下来的4位,示为412b。在该特定情况下,码字412b分别转换为VAU、CMU、LSU0和IAU指令。接下来的8位依次是用于这四个指令中的每一者的操作码414a-d,并且如图所示,IAU操作码414d设置为00,这意味着实际上只有VAU、CMU和LSUO指令由该标头表示。因此,处理器指令标头410在这种情况下为16位,这足以将处理器指令的总长度标识为以及这些单独单元指令的身份和长度。
指令标头420表示剩余情况和最长必需标头。该标头420包括4位代码,在该实施方式中其转换为包括用于所有八个指令的操作码的位-“1111”。如上所述,操作码424a-h中的任一者仍可以设置为00。在标头420中,仅将CMU(224b)、LSU0(224c)、SAU(224e)、IAU(224f)和PEU(224h)指令指示为是实际上存在的,因为VAU(224a)、LSU1(224d)和BRU(224g)操作码被设置为00。
另外,在一些实施方式中,填充部分426可以被添加到标头420。指令填充426可以是可变长度的、并且可以被添加以使得指令在存储器的128位边界处结束。对齐处理可以控制指令填充426的长度。
缓冲器管理
图5示出了包括用于提取多个附加数据行的机制的缓存系统500的图表。连接矩阵存储器502将数据馈送到指令缓存504(其可以是2kB)中,该指令缓存进而将多行数据馈送到指令解耦缓冲器506。指令解耦缓冲器506在存储器侧馈送有多个固定宽度的行(在一个实施方式中为128位,然而其他大小也是可能的)、并且在处理器侧提供可变宽度指令。提取模块508监测缓冲器506的缓冲级并且确定何时从缓存504向缓冲器506发送另一个128位指令行的信号。一般来说,这是借助于阈值来实现的;如果解耦缓冲器506中的未经传递的指令超过某一缓冲级(在指令或位数方面),则认为缓冲器506令人满意地充满。当缓冲器506下降到低于阈值缓冲级时,提取模块508向指令缓存504发信号以将另一128位数据加载到缓冲器506中。
不使解耦缓冲器506过载的一个原因是指令存在不连续,特别是跳转指令(由BRU.JMP不是,分支单元中的指令)。用跳转指令之后的指令填充满所述缓冲器是无效的,因为跳转指令改变后续指令应当从其拉取的存储器位置。因此,可以丢弃在跳转指令之后的指令。
然而,通常和期望的是在执行分支指令时包括有限数量的指令;这些指令被称为分支延迟线指令。要包括的分支延迟指令的理想数量将等于由这些分支指令引入的时延周期数;例如,在分支指令引入六个时延周期的情况下,在缓冲器中应当可获得六个指令周期(理想地,六个指令)用于处理。然而,当指令是可变长度时,如本文中所描述的处理器指令的情况一样,分支延迟指令的数目不会立即转换成需要包括在缓冲器中的位数。
为了改进分支指令的缓冲器管理,可以在分支指令本身的位中包括附加字段,如图6所示。示出了用于BRU指令的一些选择位图,包括用于由不同的BRU操作码给出的三种大小的BRU指令的每一者的一个选择位图。
示出了BRU.BRA指令600,其指令标头是24位。通过使用分支单元操作码602(在这种情况下为“00”),特定指令BRA(指令指针相对跳转)是已知的。立即偏移字段604指示指令在这些指令内的新位置,并且8位字段606给出这些延迟指令的总大小(在这种情况下为136位)。
示出了BRU.JMP指令610,其指令标头是16位。通过使用分支单元操作码612(在这种情况下为“001”),特定指令JMP(寄存器间接指令指针跳转)是已知的。五位字段614指示整数注册表文件内的新地址,并且8位字段616给出延迟指令的总大小(在这种情况下为132位)。
示出了BRU.RPL指令620,其指令标头是20位。特定指令RPL,指示所述系统将指令块循环可变次数。这通过使用分支单元操作码622(在这种情况下为“11”)是已知的。RPL指令采用两个五位自变量624a、624b,其中每一个表示整数注册表文件中的地址。在第一个列出的注册表位置624a处找到的整数值指示所述指令要循环的次数。在第二个列出的位置624b处找到的整数值指示循环结束地址。8位字段616给出延迟指令的总大小(在这种情况下为124位)。
通过包括用于引入分支延迟的分支指令的位大小字段,所述提取模块可以执行用于管理缓冲器的改进的过程,如图7所示。
图7中所示的方法700是可以通过如上所述的提取模块来管理缓冲器的一种方式。提取模块可以查询缓冲器的缓冲级(702)。在一些实施方式中,所述查询可以由除了提取模块之外的源执行,或者所述查询可能根本不是必需的(如当缓冲器以间隔而非即时的方式向提取模块报告其缓冲级时)。
提取模块接收表示缓冲器中可用的数据的级别的信息(704)。理想的情况下,此信息是以数据的位或字节表示出的,然而此信息也能够以指令表示出。在任何情况下,该缓冲器表示已经被拉取以供系统评估但尚未进行评估的指令。
如果没有判读分支指令(判定块706的“否”分支),则将缓冲器缓冲级阈值与默认值进行比较(708)。该默认值可以由用户手动设置或者可以基于系统性能的经验测量通过自动化过程来达到。如果缓冲器缓冲级超过所述阈值,则提取模块可以在再次查询缓冲器之前等待适当的间隔(712)。否则,从缓存中提取另一行数据(在一些实施例中为128位)(710)并且执行进一步的缓冲级查询。
如果分支指令已被判读(判定块706的“是”分支),使得在系统开始从存储器中的新位置提取指令时应判读分支延迟指令,则从分支指令(714)的标头确定这些延迟指令的字节大小。然后将缓冲器缓冲级与该字节大小阈值进行比较(716)。如果缓冲器缓冲级超过所述阈值,则所述系统从分支目的地提取指令(718)。如果缓冲器缓冲级低于字节大小阈值,则提取另一指令行以提供足够的分支延迟指令(710)。
通用硬件操作
本文描述的八个功能单元建立在如上所述和所描述的处理器上。在一些实施方式中,包括对存储器中的一个或多个值的操作的指令可以被设计为使用相同的基础逻辑,而不管值的数据类型。例如,在一种实施方式中,本文公开的指令被写入芯片的硬件中,并且可以使用相同的硬件和数据路径来对十进制定点、十进制浮点、整数和U8F值进行操作。此外,可以使用相同的硬连线操作逻辑来针对这些受支持的数据类型中的任何一种对32位、16位和8位值进行操作。以这种方式,可以减少处理器的总占用面积,因为这些逻辑组件可以被灵活地重新使用。
作为示例,图8示出了标量算术函数SAU.ADD的位图,其可以被设置为适应多种数据类型和多个精度水平。指令800包括五位操作码802,随后是五位字段804a、804b、804c,每个字段是对IRF存储器中的位置的引用。ADD操作采用存储在由804a指定的IRF位置中的值和存储在由804c指定的IRF位置中的值,并且将结果存储在由804b指定的IRF位置。包括单个位806以允许将第二操作数位置804c标识为指向的偏移而不是IRF位置。
剩余位808和810适应不同类型和大小。位808用“1”指定浮点并且用“0”指定整数,而两个大小位810指定32位、16位或8位。以这种方式,多个数据格式在相同的硬件逻辑中使用相同的操作。
图9表示用于执行操作的方法900的流程图。在读取表示这样的操作的指令时,所述系统从适当的注册表文件获取所指定的值(1102)。
所述系统确定这些操作数的数据类型(1104)。这可以根据它们在注册表中的存储是清楚的或者以其他方式是系统已知的。可替代地,操作标头可以具有用于标识数据类型的一个或多个字段。
所述系统执行所述操作,获得结果(1106)。该结果通常具有与这些操作数相同的格式,但是在一些实施方式中,结果能够以某种方式格式化、并且可能需要重新格式化以匹配期望类型的结果(1108)。如果这些指令这样需要,则结果可以被存储到注册表(1110)、或者可以保存在缓存或临时存储器中以供立即使用。
压缩查找表
为了某些数据的高效处理,包括用于常用功能的查找表是适当的。然而,可以使用适合于在特定表中找到的值的压缩方案来将特定数据类型内的特定功能更有效地存储在存储器中。
例如,用于16位浮点值的以2为底的对数通常包括用于0和1之间的值的表,并且该表的大部分包括值的小数部分的前导位的大量重复。图10是示出如何可以使用查找表的前五位来对前导位的多达十五次重复进行编码的图表。不是对十进制后的值的前五个位进行编码,而是这五个数字表示十进制之后的前导数字以及该数字在相反数字出现之前重复的次数。因此,对于所述前导数字的十五次重复,模式“111…10”和“000…01”被经编码的五位替换。
图11表示用于将查找表转换成用于log-2操作的十进制浮点的小数部分的流程图。在此,单个输入变量将被转换为以2为底的对数结果值,并且使用标识阈值以便仅需要四个编码位而不是五个。
所述系统提取输入变量的小数部分(1102)。然后将小数部分与阈值进行比较(1104),以确定该小数部分是具有前导0还是前导1(1106a或1106b)的条目。然后在查找表中找到适当的条目(1108),并且根据所述条目的前四位找到前导数字的适当的重复次数(1110)。所述条目的其余位被附加为所述结果的剩余部分(1112)。
在一些实施方式中,该压缩查找表可以节省标准最坏情况查找表所需的空间的多达40%。
在线拌和
并行执行多个功能单元指令允许更有效地在线执行视觉处理中共同的某些操作。例如,在视觉处理中的某些共同操作涉及在向量中交换两个或更多个元素(通常称为“拌和(swizzling)”),将特定的向量元素替换为1或0,以及使一个或多个元素反转。作为特定示例,向量反转通常是视觉处理操作的一部分,其涉及换位(拌和)和反转。然而,通常不期望的是,存储器中的向量元素实际上被改变;改变的向量是特定操作所需的,但是之后使用原始向量。
在一些实施方式中,所述系统可以包括对在主数据路径内发生的并且不干扰存储器中的基础值的向量元素的在线拌和、反转和替换的支持。
图12是加载存储功能算子LSU.SWZM4的位图,该加载存储功能算子提供在线拌和,其中用于四元素向量的可选的替换和反转用作具有VRF输入的VAU、CMU或SAU功能中的第一操作数。在操作码1202标识该功能、单元字段1204和允许该功能用于字节而不是字拌和的位1206之后,该指令包括指定这四个元素中的哪一个出现在四个槽缝中的每一个中的四个字段1208a-d、加上用于标记替换或反转的四个字段1210a-d。
通过原始向量1212a和在线拌和向量1212b展示了拌和操作。从字段1208a-d,第一和第三元素保持它们的地点,而第二和第四元素交换位置。从字段1210a-d,第二和第四元素根据它们的拌和位置(代码“00”)被再现,第一元素被反转(代码“01”),并且第三元素被替换为零(代码“10”)。在包括LSU.SWZM4在线拌和操作的特定单元指令中,所得到的向量1212b被用于代替原始向量1212a,但原始向量1212a本身不在存储器中改变或替换。
图13示出了根据本公开内容并且在该特定实施方式中基于上文关于LSU.SWZM4操作所描述的每个元素的第一和第二字段的用于拌和和改变向量的示例性在线方法1300。获取原始向量(1302),并且对于该向量的每个元素(其是“目标”元素,同时对该元素执行这些步骤)执行某些步骤(该元素是“目标”元素,同时对该元素执行这些步骤)。继续改变下一个元素。
基于用于第二字段中的目标元素的值(1304),所述系统将1或0替代目标元素(1308)、或者将指定的元素值标识并复制到目标元素(1310,1312)。如果是前者(替换为1或0),则所述系统是数据类型感知的:即,1或0值是根据向量元素的数据类型(例如浮点、定点、整数或缩放整数)进行格式化的。如果后者(无或反转),则进一步的步骤确定是否反转目标(1314,1316),此时所述系统继续改变下一个元素。
一旦向量中的每个元素被如所指定地切换和/或改变,则通过适当的操作使用新向量(1318)。原始向量不被经拌和的向量重写,而是仅被用作在特定指令中所调用的任何一个或多个函数中的自变量。
在一些实施例中,并行计算设备100可以驻留在电子设备中。图14示出了根据一些实施例的包括计算设备的电子设备。电子设备1400可以包括处理器1402、存储器1404、一个或多个接口1406、以及计算设备100。
电子设备1400可以具有存储器1404,诸如计算机可读介质、闪速存储器、磁盘驱动器、光驱动器、可编程只读存储器(PROM)和/或只读存储器(ROM)。电子设备1400可以配置有对指令进行处理并运行可存储在存储器1404中的软件的一个或多个处理器1402。处理器1402还可以与存储器1404和多个接口1406通信以与其他设备通信。处理器1402可以是任何可应用的处理器,例如组合CPU、应用处理器和闪速存储器的片上系统,或精简指令集计算(RISC)处理器。
存储器1404可以是非暂时性计算机可读介质、闪速存储器、磁盘驱动器、光学驱动器、可编程只读存储器(PROM)、只读存储器(ROM)或任何其他存储器或存储器组合。软件可以在能够执行计算机指令或计算机代码的处理器上运行。处理器还可以使用专用集成电路(ASIC)、可编程逻辑阵列(PLA)、现场可编程门阵列(FPGA)或任何其他集成电路的硬件中实现。
这些接口1406可以在硬件或软件中实现。这些接口1406可以用于从网络接收数据和控制信息以及本地源,诸如到电视机的远程控制。电子设备还可以提供各种用户接口,例如键盘、触摸屏、轨迹球、触摸板和/或鼠标。在一些实施例中,电子设备还可以包括扬声器和显示设备。
在一些实施例中,计算设备100中的处理单元(例如向量处理器102和硬件加速器104)可以包括能够执行计算机指令或计算机代码的集成芯片。处理器还可以使用专用集成电路(ASIC)、可编程逻辑阵列(PLA)、现场可编程门阵列(FPGA)或任何其他集成电路的硬件中实现。
在一些实施例中,计算设备100可以被实现为片上系统(SOC)。在其他实施例中,并行计算设备中的一个或多个块可以被实现为分开的芯片,并且并行计算设备可以被封装在系统级封装(SIP)中。在一些实施例中,并行计算设备400可以用于数据处理应用。这些数据处理应用可以包括图像处理应用和/或视频处理应用。图像处理应用可以包括图像处理过程(包括图像过滤操作);视频处理应用可以包括视频解码操作、视频编码操作、用于检测视频中的运动或对象的视频分析操作。本发明的附加应用包括基于图像、对象或视频序列的机器学习和分类以及增强现实应用,增强现实应用包括游戏应用从包括深度启用相机的多个相机视图中提取几何形状、以及从多个视图中提取特征,GPU可以从所述视图提取线框几何形状(例如经由点云)用于随后的顶点着色。
电子设备1400可以包括移动设备,例如蜂窝电话。移动设备可以使用多种接入技术与多个无线电接入网络通信和与有线通信网络通信。移动设备可以是提供诸如文字处理、网络浏览、游戏、电子书能力、操作系统和全键盘的高级能力的智能电话。移动设备可以运行诸如Symbian OS、iPhone OS、PJM的Blackberry、Windows Mobile、Linux、Palm WebOS、以及Android等操作系统。屏幕可以是可以用于向移动设备输入数据的触摸屏,并且可以使用屏幕而不是全键盘。移动设备可以具有运行应用或与由通信网络中的服务器提供的应用进行通信的能力。移动设备可以从网络上的这些应用接收更新和其他信息。
电子设备1400还可以包括诸如电视(TV)、视频投影仪、机顶盒或机顶单元、数字视频记录器(DVR)、计算机、上网本、膝上型计算机,平板计算机以及可以与网络通信的任何其他音频/视频设备。电子设备还可以在其堆栈或存储器中保持全球定位坐标、简档信息或其他位置信息。
应当理解的是,虽然本文描述了若干种不同的布置,但是每一种的特征可以有利地以各种形式组合在一起以实现优点。
在前述说明书中,已经参考具体示例描述了本申请。然而,在不偏离所附权利要求中阐述的本发明的更广精神和范围的情况下,将显然的是可对其进行各种修改和改变。例如,连接可以是适合于例如经由中间设备从相应的节点、单元或设备传送信号或者对其传送信号的任何类型的连接。因此,除非暗示或另作声明,否则这些连接可以例如是直接连接或间接连接。
应当理解的是,本文所描述的架构仅仅是示例性的,并且实际上可以实施实现相同功能的许多其他架构。在抽象但仍然明确的意义上,实现相同功能的多个组件的任何布置是有效地“相关联”的,以使得实现期望的功能。因此,在此组合以实现特定功能的任何两个组件可以被看作是彼此“相关联”的,以使得实现期望的功能,而不管架构或中间组件。同样,如此关联的任何两个组件还可以被视为是彼此“可操作地连接”或“可操作地耦联”的,以实现期望的功能。
此外,本领域技术人员将认识到,上述操作的功能之间的界限仅仅是说明性的。多个操作的功能可以组合成单个操作,和/或单个操作的功能可以分布在多个附加操作中。此外,替换实施例可以包括特定操作的多个实例,并且在各种其它实施例中可以改变操作的顺序。
然而,其他修改、变化和替代也是可能的。因此,本说明书和附图应被视为是说明性的而非限制性的。
在权利要求中,置于括号之间的任何附图标记不应被解释为限制权利要求。词语“包括”不排除权利要求中所列出的元件或步骤之外的其他元件或步骤的存在。此外,在此使用的术语“一”和“一个”被定义为一个或多于一个。此外,在权利要求中使用诸如“至少一个”和“一个或多个”之类的介绍性短语不应被解释为意味着通过不定冠词“一”或“一个”引入另一权利要求元素将包含这样的引入的权利要求元素的任何特定权利要求限制为仅包含一个这样的元素的发明,即使在相同的权利要求包括介绍性短语“一个或多个”或“至少一个”和诸如“一”或“一个”的不定冠词时亦是如此。这同样适用于定冠词的使用。除非另作声明,术语例如“第一”和“第二”用于任意地区别这类术语所描述的元素。因此,这些术语不一定旨在指示这类元素的时序或其他优先顺序。某些措施被引用在相互不同的权利要求中的单纯事实并不指示不能有利地使用这些措施的组合。

Claims (19)

1.一种用于管理可变长度指令缓冲器的计算机实现的方法,所述方法包括:
对来自第一参考位置的可变长度指令数据进行缓存;
将在第一时刻在指令缓冲器中可用的第一等级的未处理数据与默认阈值进行比较;
基于所述第一等级的未处理数据不满足所述默认阈值,将来自经缓存的指令数据中的固定宽度的数据加载到所述指令缓冲器中;
对引用不同于所述第一参考位置的第二参考位置的分支指令进行处理,所述分支指令包括指示分支延迟大小的标头;
将在所述分支指令被处理之后的第二时刻的所述指令缓冲器中可用的第二等级的未处理数据与所述分支延迟大小进行比较;以及
基于所述第二等级的未处理数据不满足所述分支延迟大小,将来自所述经缓存的指令数据中的固定宽度的数据加载到所述缓冲器中。
2.如权利要求1所述的方法,进一步包括:
从所述缓冲器中的未处理数据中解耦可变长度指令,并且输出解耦的指令,减少所述缓冲器中的未处理数据的等级。
3.如权利要求2所述的方法,其中所述解耦的指令被输出到向量处理器。
4.一种用于管理可变长度指令的系统,所述系统包括:
缓存,所述缓存用于存储来自存储器的可变长度指令,所述缓存被配置为用于加载来自特定存储器位置的指令;
缓冲器,所述缓冲器用于将从所述缓存加载的数据解耦成指令,所述缓冲器被配置为用于从所述缓存接收固定宽度数据行并且输出可变长度指令;以及
提取单元,所述提取单元被配置为用于确定所述缓冲器中的未处理数据的等级,并且指示所述缓存将附加数据加载到所述缓冲器中;
其中,所述获取单元被进一步配置为用于:
将在第一时刻在所述缓冲器中可用的第一等级的未处理数据与默认阈值进行比较,以确定何时指示所述缓存将附加数据加载到所述缓冲器中;
在所述系统标识分支指令之后,从所述分支指令标头中确定分支延迟大小;以及
将在所述系统标识所述分支指令之后的第二时刻在所述缓冲器中可用的第二等级的未处理数据与所述分支延迟大小而不是所述默认阈值进行比较,以确定何时指示所述缓存将附加数据加载到所述缓冲器中。
5.一种用于数据的硬件处理的计算机实现的方法,所述方法包括:
接收第一可变长度指令,所述指令指示要执行的第一操作并且引用一个或多个第一操作数;
确定用于所述一个或多个第一操作数的第一数据类型;
使用第一硬件逻辑电路对所述第一数据类型的所述第一操作数执行所述第一操作;
接收第二可变长度指令,所述指令指示执行所述第一操作并且引用一个或多个第二操作数;
确定用于所述一个或多个第二操作数的第二数据类型,其中,所述第二数据类型不同于所述第一数据类型;以及
使用所述第一硬件逻辑对所述第二数据类型的所述第二操作数执行所述第一操作。
6.如权利要求5所述的计算机实现的方法,其中,所述第一硬件逻辑可操作用于对多种大小的操作数执行所述第一操作。
7.如权利要求5所述的计算机实现的方法,其中,所述第一硬件逻辑可操作用于对浮点、定点、整数、以及缩放整数数据类型的操作数执行所述第一操作。
8.一种计算机实现的方法,包括:
存储用于操作的结果条目的查找表,所述查找表包括预定精度水平的小数结果,其中,所述查找表针对每个条目包括多个编码位和多个未编码位;
响应于包括所述操作的指令,在所述查找表上查找对应于特定值的特定条目;
对所述编码位进行解码以生成所述小数结果的一部分;
至少将所述未编码位添加到所生成的小数结果;以及
基于所产生的小数结果返回所述操作的结果。
9.如权利要求8所述的计算机实现的方法,其中,所述操作是单一操作。
10.如权利要求9所述的计算机实现的方法,其中,所述操作是对数操作。
11.如权利要求8所述的计算机实现的方法,其中,所述编码位表示重复所述小数结果中的特定数字的次数。
12.如权利要求11所述的计算机实现的方法,其中,所述特定数字还被存储在所述查找表条目中。
13.如权利要求11所述的计算机实现的方法,其中,所述特定数字不被存储在所述查找表条目中。
14.如权利要求13所述的计算机实现的方法,进一步包括:
将所述特定值与阈值进行比较,以便确定所述特定数字。
15.一种用于在线向量改变的计算机实现的方法,所述方法包括:
接收可变长度指令,所述可变长度指令包括有待对在第一存储器位置处引用的向量的改变形式执行的操作;
生成由所述可变长度指令指定的改变向量;以及
对所述改变向量执行所述操作;
其中,在执行所述操作之后,所述第一存储器位置处的所述向量处于其原始未改变的形式。
16.如权利要求15所述的计算机实现的方法,其中,所述改变包括拌和向量元素。
17.如权利要求15所述的计算机实现的方法,其中,所述改变包括反转向量元素。
18.如权利要求15所述的计算机实现的方法,其中,所述改变包括向量元素的替换值。
19.如权利要求15所述的计算机实现的方法,其中,所述改变包括经拌和且经反转的至少一个向量元素。
CN201580051186.6A 2014-07-30 2015-07-27 用于管理可变长度指令的方法和设备 Active CN106796504B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910648783.7A CN110515658A (zh) 2014-07-30 2015-07-27 用于管理可变长度指令的方法和设备

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201462030913P 2014-07-30 2014-07-30
US62/030,913 2014-07-30
US14/457,929 2014-08-12
US14/457,929 US10001993B2 (en) 2013-08-08 2014-08-12 Variable-length instruction buffer management
PCT/IB2015/001805 WO2016016726A2 (en) 2014-07-30 2015-07-27 Vector processor

Related Child Applications (1)

Application Number Title Priority Date Filing Date
CN201910648783.7A Division CN110515658A (zh) 2014-07-30 2015-07-27 用于管理可变长度指令的方法和设备

Publications (2)

Publication Number Publication Date
CN106796504A true CN106796504A (zh) 2017-05-31
CN106796504B CN106796504B (zh) 2019-08-13

Family

ID=54705661

Family Applications (2)

Application Number Title Priority Date Filing Date
CN201910648783.7A Pending CN110515658A (zh) 2014-07-30 2015-07-27 用于管理可变长度指令的方法和设备
CN201580051186.6A Active CN106796504B (zh) 2014-07-30 2015-07-27 用于管理可变长度指令的方法和设备

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CN201910648783.7A Pending CN110515658A (zh) 2014-07-30 2015-07-27 用于管理可变长度指令的方法和设备

Country Status (6)

Country Link
EP (3) EP3175355B1 (zh)
JP (4) JP6491314B2 (zh)
KR (4) KR102063856B1 (zh)
CN (2) CN110515658A (zh)
BR (1) BR112017001981B1 (zh)
WO (1) WO2016016726A2 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116501389A (zh) * 2023-06-28 2023-07-28 睿思芯科(深圳)技术有限公司 指令缓冲单元、处理器及计算机系统

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11768689B2 (en) 2013-08-08 2023-09-26 Movidius Limited Apparatus, systems, and methods for low power computational imaging
CN117348933B (zh) * 2023-12-05 2024-02-06 睿思芯科(深圳)技术有限公司 一种处理器及计算机系统

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5689672A (en) * 1993-10-29 1997-11-18 Advanced Micro Devices, Inc. Pre-decoded instruction cache and method therefor particularly suitable for variable byte-length instructions
US5881260A (en) * 1998-02-09 1999-03-09 Hewlett-Packard Company Method and apparatus for sequencing and decoding variable length instructions with an instruction boundary marker within each instruction
CN1282024A (zh) * 1999-07-23 2001-01-31 国际商业机器公司 具有静态转移预测支持的去耦取指令-执行引擎
CN1523491A (zh) * 1998-03-18 2004-08-25 �����ɷ� 数字信号处理器
CN1625731A (zh) * 2002-01-31 2005-06-08 Arc国际公司 具有多种长度指令集体系结构的可配置数据处理器
CN101268440A (zh) * 2005-07-29 2008-09-17 高通股份有限公司 具有固定数量的可变长度指令的指令高速缓存器
CN101681258A (zh) * 2006-08-09 2010-03-24 高通股份有限公司 使用可变长度指令集处理器中分支目标地址缓存的分支预测

Family Cites Families (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US2209599A (en) 1938-08-29 1940-07-30 Filko John Switch mechanism for motor vehicle signals
ATE38442T1 (de) * 1980-02-28 1988-11-15 Intel Corp Datenverarbeitungssystem.
US4626825A (en) * 1985-07-02 1986-12-02 Vlsi Technology, Inc. Logarithmic conversion apparatus
JPH06100970B2 (ja) * 1988-03-24 1994-12-12 富士電機株式会社 演算制御装置
US5051885A (en) * 1988-10-07 1991-09-24 Hewlett-Packard Company Data processing system for concurrent dispatch of instructions to multiple functional units
SE9002558D0 (sv) * 1990-08-02 1990-08-02 Carlstedt Elektronik Ab Processor
US5642305A (en) * 1995-01-31 1997-06-24 Motorola, Inc. Logarithm/inverse-logarithm converter and method of using same
JP3439033B2 (ja) * 1996-07-08 2003-08-25 株式会社日立製作所 割り込み制御装置及びプロセッサ
US6247113B1 (en) * 1998-05-27 2001-06-12 Arm Limited Coprocessor opcode division by data type
US6182100B1 (en) * 1998-06-30 2001-01-30 International Business Machines Corporation Method and system for performing a logarithmic estimation within a data processing system
JP3123047B2 (ja) * 1998-10-02 2001-01-09 日本電気株式会社 マイクロプロセッサ
US6366998B1 (en) * 1998-10-14 2002-04-02 Conexant Systems, Inc. Reconfigurable functional units for implementing a hybrid VLIW-SIMD programming model
US6480872B1 (en) * 1999-01-21 2002-11-12 Sandcraft, Inc. Floating-point and integer multiply-add and multiply-accumulate
US6412063B1 (en) * 1999-04-02 2002-06-25 Via-Cyrix, Inc. Multiple-operand instruction in a two operand pipeline and processor employing the same
GB0124882D0 (en) * 2001-10-17 2001-12-05 Koninkl Philips Electronics Nv Improved variable length decoder
US20040054877A1 (en) * 2001-10-29 2004-03-18 Macy William W. Method and apparatus for shuffling data
US7467287B1 (en) * 2001-12-31 2008-12-16 Apple Inc. Method and apparatus for vector table look-up
JP3738842B2 (ja) * 2002-06-04 2006-01-25 富士通株式会社 遅延分岐機能を備えた情報処理装置
US8966223B2 (en) * 2005-05-05 2015-02-24 Icera, Inc. Apparatus and method for configurable processing
US20070198815A1 (en) * 2005-08-11 2007-08-23 Coresonic Ab Programmable digital signal processor having a clustered SIMD microarchitecture including a complex short multiplier and an independent vector load unit
US7539717B2 (en) * 2005-09-09 2009-05-26 Via Technologies, Inc. Logarithm processing systems and methods
JPWO2010067522A1 (ja) * 2008-12-11 2012-05-17 日本電気株式会社 演算ユニット、プロセッサ及び並列演算方法
EP2443751A1 (en) * 2009-06-17 2012-04-25 Coherent Logix Incorporated Parallel execution of trellis-based methods
US8555034B2 (en) * 2009-12-15 2013-10-08 Oracle America, Inc. Execution of variable width vector processing instructions
JP5089713B2 (ja) * 2010-01-18 2012-12-05 シャープ株式会社 画像圧縮装置、圧縮画像出力装置、画像圧縮方法、コンピュータプログラム及び記録媒体
CN102270112A (zh) * 2010-06-03 2011-12-07 边立剑 Risc微处理器指令译码电路
JP5240270B2 (ja) 2010-10-12 2013-07-17 日本電気株式会社 プロセッサ及びベクトルロード命令の実行方法
KR101699685B1 (ko) 2010-11-16 2017-01-26 삼성전자 주식회사 명령어 오퍼랜드 변경 장치 및 방법
US8880851B2 (en) * 2011-04-07 2014-11-04 Via Technologies, Inc. Microprocessor that performs X86 ISA and arm ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline
CN102662635A (zh) * 2012-03-21 2012-09-12 清华大学 超长指令字变长指令实现方法及实现该方法的处理器
US20140289502A1 (en) * 2013-03-19 2014-09-25 Apple Inc. Enhanced vector true/false predicate-generating instructions

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5689672A (en) * 1993-10-29 1997-11-18 Advanced Micro Devices, Inc. Pre-decoded instruction cache and method therefor particularly suitable for variable byte-length instructions
US5881260A (en) * 1998-02-09 1999-03-09 Hewlett-Packard Company Method and apparatus for sequencing and decoding variable length instructions with an instruction boundary marker within each instruction
CN1523491A (zh) * 1998-03-18 2004-08-25 �����ɷ� 数字信号处理器
CN1282024A (zh) * 1999-07-23 2001-01-31 国际商业机器公司 具有静态转移预测支持的去耦取指令-执行引擎
CN1625731A (zh) * 2002-01-31 2005-06-08 Arc国际公司 具有多种长度指令集体系结构的可配置数据处理器
CN101268440A (zh) * 2005-07-29 2008-09-17 高通股份有限公司 具有固定数量的可变长度指令的指令高速缓存器
CN101681258A (zh) * 2006-08-09 2010-03-24 高通股份有限公司 使用可变长度指令集处理器中分支目标地址缓存的分支预测

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116501389A (zh) * 2023-06-28 2023-07-28 睿思芯科(深圳)技术有限公司 指令缓冲单元、处理器及计算机系统
CN116501389B (zh) * 2023-06-28 2023-09-01 睿思芯科(深圳)技术有限公司 指令缓冲单元、处理器及计算机系统

Also Published As

Publication number Publication date
KR102413501B1 (ko) 2022-06-27
KR102259406B1 (ko) 2021-06-03
KR20210065208A (ko) 2021-06-03
KR102063856B1 (ko) 2020-01-08
EP3175355B1 (en) 2018-07-18
KR20170061661A (ko) 2017-06-05
KR20200003293A (ko) 2020-01-08
EP3410294A1 (en) 2018-12-05
KR102515720B1 (ko) 2023-03-31
WO2016016726A2 (en) 2016-02-04
JP2022169703A (ja) 2022-11-09
EP3175355A2 (en) 2017-06-07
JP2019109926A (ja) 2019-07-04
CN106796504B (zh) 2019-08-13
JP2017525046A (ja) 2017-08-31
BR112017001981A2 (pt) 2017-12-12
JP2021061036A (ja) 2021-04-15
WO2016016726A3 (en) 2016-06-30
JP6491314B2 (ja) 2019-03-27
CN110515658A (zh) 2019-11-29
EP4116819A1 (en) 2023-01-11
KR20220092646A (ko) 2022-07-01
BR112017001981B1 (pt) 2023-05-02

Similar Documents

Publication Publication Date Title
US11579872B2 (en) Variable-length instruction buffer management
US11010858B2 (en) Mechanism to accelerate graphics workloads in a multi-core computing architecture
CN110262907B (zh) 用于统一应用编程接口和模型的系统和方法
US9916634B2 (en) Facilitating efficient graphics command generation and execution for improved graphics performance at computing devices
CN103885752A (zh) 多线程处理单元中可编程的混合
US20170069054A1 (en) Facilitating efficient scheduling of graphics workloads at computing devices
US10282804B2 (en) Facilitating configuration of computing engines based on runtime workload measurements at computing devices
US10546411B2 (en) Directed acyclic graph path enumeration with application in multilevel instancing
US10089264B2 (en) Callback interrupt handling for multi-threaded applications in computing environments
CN110100274A (zh) 具有降低功率渲染的混合现实系统
WO2017099882A1 (en) Accelerated touch processing at computing devices
US11088907B2 (en) System characterization and configuration distribution for facilitating improved performance at computing devices
US10580108B2 (en) Method and apparatus for best effort quality of service (QoS) scheduling in a graphics processing architecture
CN106796504B (zh) 用于管理可变长度指令的方法和设备
US10002405B2 (en) Smart optimization of unused graphics buffer memory in computing environments
WO2017112030A1 (en) Clustered color compression for efficient processing of graphics data at computing devices
US20230132254A1 (en) Variable-length instruction buffer management
Sandgren Transfer time reduction of data transfers between cpu and gpu

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
GR01 Patent grant
GR01 Patent grant