CN107347253B - 用于专用处理器的硬件指令生成单元 - Google Patents
用于专用处理器的硬件指令生成单元 Download PDFInfo
- Publication number
- CN107347253B CN107347253B CN201680011565.7A CN201680011565A CN107347253B CN 107347253 B CN107347253 B CN 107347253B CN 201680011565 A CN201680011565 A CN 201680011565A CN 107347253 B CN107347253 B CN 107347253B
- Authority
- CN
- China
- Prior art keywords
- instruction
- operand
- host
- purpose processor
- instructions
- 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.)
- Expired - Fee Related
Links
- 239000000872 buffer Substances 0.000 claims abstract description 65
- 238000000034 method Methods 0.000 claims abstract description 37
- 238000012545 processing Methods 0.000 claims description 62
- 239000013598 vector Substances 0.000 claims description 57
- 230000015654 memory Effects 0.000 claims description 33
- 230000004044 response Effects 0.000 claims description 4
- 238000013467 fragmentation Methods 0.000 description 21
- 238000006062 fragmentation reaction Methods 0.000 description 21
- 238000010586 diagram Methods 0.000 description 18
- 230000008569 process Effects 0.000 description 13
- 238000011161 development Methods 0.000 description 8
- 230000007246 mechanism Effects 0.000 description 8
- 230000000007 visual effect Effects 0.000 description 8
- 238000004891 communication Methods 0.000 description 7
- 230000006870 function Effects 0.000 description 7
- 238000012986 modification Methods 0.000 description 7
- 230000004048 modification Effects 0.000 description 7
- 238000005457 optimization Methods 0.000 description 7
- 230000008901 benefit Effects 0.000 description 6
- 230000000694 effects Effects 0.000 description 6
- 239000012634 fragment Substances 0.000 description 6
- 238000012360 testing method Methods 0.000 description 6
- 230000004888 barrier function Effects 0.000 description 5
- 238000013461 design Methods 0.000 description 5
- 239000004744 fabric Substances 0.000 description 5
- 238000007667 floating Methods 0.000 description 5
- 230000014509 gene expression Effects 0.000 description 5
- 230000000875 corresponding effect Effects 0.000 description 4
- 230000033001 locomotion Effects 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 238000010200 validation analysis Methods 0.000 description 3
- 238000013459 approach Methods 0.000 description 2
- 238000003491 array Methods 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 230000008520 organization Effects 0.000 description 2
- 238000012163 sequencing technique Methods 0.000 description 2
- 239000000725 suspension Substances 0.000 description 2
- 230000006399 behavior Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000002596 correlated effect Effects 0.000 description 1
- 230000005574 cross-species transmission Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 230000001066 destructive effect Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000000873 masking effect Effects 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
- 238000003786 synthesis reaction Methods 0.000 description 1
- 238000011144 upstream manufacturing Methods 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/3017—Runtime instruction translation, e.g. macros
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3877—Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
- G06F9/3879—Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor for non-native instruction execution, e.g. executing a command; for Java instruction set
- G06F9/3881—Arrangements for communication of instructions and data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3893—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45516—Runtime code conversion or optimisation
- G06F9/4552—Involving translation to a different instruction set architecture, e.g. just-in-time translation in a JVM
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- Advance Control (AREA)
- Devices For Executing Special Programs (AREA)
- Executing Machine-Instructions (AREA)
- Image Processing (AREA)
- User Interface Of Digital Computer (AREA)
Abstract
公开将主机对接到专用处理器的方法、设备和系统。在一个实施例中,指令生成单元包括属性、解码、以及指令缓冲级。所述属性级被配置为从所述主机接收主机‑程序操作代码和虚拟主机‑程序操作数,并将所述虚拟主机‑程序操作数扩展成操作数描述符。所述解码级被配置为接收所述第一操作数描述符和所述主机‑程序操作代码,将所述主机‑程序操作代码转换为一个或多个已解码指令以便由所述专用处理器执行,以及分配存储位置以便由所述专用处理器使用。所述指令缓冲级被配置为接收所述已解码指令,将所述一个或多个已解码指令放入一个或多个指令队列中,以及从所述一个或多个指令队列的至少一个指令队列中发出已解码指令以便由所述专用处理器执行。
Description
相关申请
根据35U.S.C.§119(e)的规定,本申请要求2015年2月25日提交的标题为“Hardware Instruction Compiler for Specialized Processors”的第62/120,603号美国临时专利申请的国内优先权,此临时专利申请在此全部引入作为参考并且用于所有目的,如同在本文中完全和彻底说明那样。
技术领域
本申请涉及计算机技术。
背景技术
指令集架构(ISA)是计算机处理器设计和开发的基础。ISA包括用于处理器的指令集、指令格式、以及处理器特征,例如可以使用的操作数的类型、用于指令执行的存储机构和如何访问存储机构。程序员使用指令集将程序传送到处理器。此外,多个软件“工具”将指令集架构用于处理器开发和编程,包括编译器、链接器和调试器。
编译器将以高级编程语言编写的“源代码”转换为可由处理器理解的“目标代码”。链接器将由编译器创建的一个或多个目标代码文件组合成单个可执行文件,并且还可以布置以便在处理器的正确地址空间中执行代码。调试器是用于测试被编写以在处理器上运行的其它程序的程序。这些工具连同用于处理器的其它开发工具一起可以被称为“工具链”。对处理器的指令集或指令集架构的其它方面进行的任何更改必须在整个工具链、在使用ISA的工具中得以反映。
通常对ISA进行广泛的测试、修改和验证直到认为满意,此时可以基于ISA创建规范、模拟器和开发工具链。然后还可以基于ISA进行处理器设计,包括微架构设计和验证、微架构在硬件描述语言(HDL)中的实现、以及基于HDL实现的电路合成。
ISA和与ISA兼容的处理器之间的高度集成连同ISA和相关工具的开发所代表的巨大承诺能够使得难以实现专用处理器设计。考虑到还将需要创建或修改的一系列关联的验证和开发工具,创建新指令集或者甚至修改现有指令集可以极其昂贵和耗时。
发明内容
根据本发明的第一方面,提供了一种指令生成单元,其被配置为将主机对接到专用处理器。指令生成单元包括:属性级、解码级、以及指令缓冲级。属性级被配置为:从主机接收主机-程序操作代码和第一虚拟主机-程序操作数,其中,第一虚拟主机-程序操作数表示用于专用处理器的第一操作数;以及将第一虚拟主机-程序操作数扩展成第一操作数描述符,其中,第一操作数描述符提供第一操作数的在一个或多个操作数属性方面的描述。解码级被配置为:从属性级接收第一操作数描述符和主机-程序操作代码;将主机-程序操作代码转换为一个或多个已转换指令以便由专用处理器执行;以及分配存储位置以供专用处理器在执行已转换指令中使用。其中,已转换指令中的至少一个包括:指定用于标识用于专用处理器的已转换操作数的部分;指定用于标识由专用处理器针对已转换操作数执行的操作的部分;以及指定用于特定于专用处理器的操作的额外参数的部分。指令缓冲级被配置为:接收来自解码级的已转换指令;将一个或多个已转换指令放入一个或多个指令队列中;以及从一个或多个指令队列中的至少一个指令队列发出已转换指令以便由专用处理器执行。
根据本发明的第二方面,提供了一种生成用于专用处理器的指令的方法。该方法包括:从主机处理器接收主机-程序操作代码和第一虚拟主机-程序操作数,其中,第一虚拟主机-程序操作数表示用于专用处理器的第一操作数;将第一虚拟主机-程序操作数扩展成第一操作数描述符,其中,第一操作数描述符提供第一操作数的在一个或多个操作数属性方面的描述;将主机-程序操作代码转换为一个或多个已转换指令以便由专用处理器执行;分配存储位置以供专用处理器在执行已转换指令中使用;将一个或多个已转换指令放入一个或多个指令队列中;以及从一个或多个指令队列中的至少一个指令队列发出已转换指令以便由专用处理器执行。其中,已转换指令中的至少一个包括:指定用于标识用于专用处理器的已转换操作数的部分,指定用于标识由专用处理器针对已转换操作数执行的操作的部分,以及指定用于特定于专用处理器的操作的额外参数的部分。
根据本发明的第三方面,提供了一种数据处理系统。该数据处理系统包括:主机、专用处理器以及指令生成单元。主机被配置为运行已编译程序。指令生成单元在操作上耦合到主机和专用处理器。指令生成单元被配置为:从已编译程序接收主机-程序操作代码和虚拟主机-程序操作数,其中,虚拟主机-程序操作数表示用于专用处理器的操作数;将主机-程序操作代码转换为一个或多个已转换指令以便由专用处理器执行;分配存储位置以供专用处理器在执行已转换指令中使用;将一个或多个已转换指令放入一个或多个指令队列中;以及从一个或多个指令队列中的至少一个指令队列发出已转换指令以便由专用处理器执行。其中,已转换指令中的至少一个包括:指定用于标识用于专用处理器的已转换操作数的部分;指定用于标识由专用处理器针对已转换操作数执行的操作的部分;以及指定用于特定于专用处理器的操作的额外参数的部分。
附图说明
各种公开的实施例的以下详细描述参考附图,这些附图是:
图1是数据处理架构的一个示例性实施例的简化框图;
图2是专用处理器的一个示例性实施例的简化框图;
图3是示出具有主机的指令生成单元的一个示例性实现的简化框图;
图4是示出指令生成单元的一个实施例的简化框图;
图5是示出由在此描述的指令生成单元执行的过程的一个实施例的流程图;
图6是示出由在此描述的指令生成单元执行的过程的另一个实施例的流程图;
图7是示出由在此描述的指令生成单元执行的过程的又一个实施例的流程图;
图8是示出由在此描述的指令生成单元执行的过程的再一个实施例的流程图;以及
图9是示出由在此描述的指令生成单元执行的过程的再又一个实施例的流程图。
具体实施方式
概述
公开将主机对接到专用处理器的方法、设备和系统。在一个实施例中,被配置为将主机对接到专用处理器的指令生成单元包括属性级,其被配置为从所述主机接收主机-程序操作代码和第一虚拟主机-程序操作数,其中所述第一虚拟主机-程序操作数表示用于所述专用处理器的第一操作数。在该实施例中,所述属性级被进一步配置为将所述第一虚拟主机-程序操作数扩展成第一操作数描述符,其中所述第一操作数描述符提供所述第一操作数的在一个或多个操作数属性方面的描述。所述指令生成单元进一步包括解码级,其被配置为从所述属性级接收所述第一操作数描述符和所述主机-程序操作代码,将所述主机-程序操作代码转换为一个或多个已解码指令以便由所述专用处理器执行,以及分配存储位置以供所述专用处理器在执行所述已解码指令中使用。所述指令生成单元的该实施例进一步包括指令缓冲级,其被配置为从所述解码级接收所述已解码指令,将一个或多个已解码指令放入一个或多个指令队列中,以及从所述一个或多个指令队列中的至少一个指令队列发出已解码指令以便由所述专用处理器执行。
在进一步实施例中,所述指令生成单元进一步包括存储器,其被配置为存储包括一个或多个操作数描述符的属性表,并且所述属性级被进一步配置为判定所述主机-程序操作代码是否对应于所述第一操作数的初始声明。响应于所述主机-程序操作代码对应于所述第一操作数的初始声明的判定,所述属性级被进一步配置为在所述属性表中存储包括所述第一操作数描述符的条目,并且向所述主机返回所存储的属性表条目的地址。
在一个实施例中,所述指令生成单元与包括具有至少两个互连处理单元的阵列的专用处理器对接,其中每个处理单元包括指令缓冲器和数据存储器,所述数据存储器被分成至少两个区域。在另一实施例中,所述第一操作数包括跨所述专用处理器的一个或多个所述数据存储器的多个区域存储的二维数据阵列。在再一实施例中,所述互连处理单元的相应指令缓冲器通过指令流水线连接,所述指令流水线被配置为按顺序将指令从一个处理单元传送到下一个处理单元,所述一个或多个指令队列包括向量指令队列和标量指令队列,以及所述指令缓冲级被进一步配置为结合从所述一个或多个指令队列发出已解码指令而将来自所述向量指令队列的已解码指令放入所述指令流水线中。
在此还公开一种生成用于专用处理器的指令的方法。在一个实施例中,所述方法包括从主机处理器接收主机-程序操作代码和第一虚拟主机-程序操作数,其中所述第一虚拟主机-程序操作数表示用于所述专用处理器的操作数;将所述虚拟主机-程序操作数扩展成操作数描述符,其中所述操作数描述符提供所述操作数的在一个或多个操作数属性方面的描述;以及将所述主机-程序操作代码转换为一个或多个已解码指令以便由所述专用处理器执行。所述方法的该实施例进一步包括分配存储位置以供所述专用处理器在执行所述已解码指令中使用;将一个或多个已解码指令放入一个或多个指令队列中;以及从所述一个或多个指令队列中的至少一个指令队列发出已解码指令以便由所述专用处理器执行。
在另一实施例中,所述方法包括判定主机-程序操作代码是否对应于第一操作数的初始声明。响应于所述主机-程序操作代码对应于所述第一操作数的初始声明的判定,所述方法包括在所述属性表中存储包括所述第一操作数描述符的条目,并且向所述主机处理器返回所存储的属性表条目的地址。
在一个实施例中,所述专用处理器包括具有至少两个互连处理单元的阵列,其中每个处理单元包括指令缓冲器和数据存储器,所述数据存储器被分成至少两个区域。在另一实施例中,所述第一操作数包括跨所述专用处理器的一个或多个所述数据存储器的多个区域存储的二维数据阵列。在再一实施例中,所述互连处理单元的相应指令缓冲器通过指令流水线连接,所述指令流水线被配置为按顺序将指令从一个处理单元传送到下一个处理单元,并且一个或多个指令队列包括向量指令队列和标量指令队列。在此类实施例中,从所述一个或多个指令队列发出所述已解码指令包括将来自所述向量指令队列的已解码指令放入所述指令流水线中。
在此还公开一种数据处理系统。在一个实施例中,所述数据处理系统包括被配置为运行已编译程序的主机、专用处理器、以及指令生成单元。所述指令生成单元在操作上耦合到所述主机和所述专用处理器,并且被配置为从所述已编译程序接收主机-程序操作代码和虚拟主机-程序操作数,其中所述虚拟主机-程序操作数表示用于所述专用处理器的操作数。所述指令生成单元被进一步配置为将所述主机-程序操作代码转换为一个或多个已解码指令以便由所述专用处理器执行,分配存储位置以供所述专用处理器在执行所述已解码指令中使用,将一个或多个已解码指令放入一个或多个指令队列中,以及从所述一个或多个指令队列中的至少一个指令队列发出已解码指令以便由所述专用处理器执行。
在所述数据处理系统的一个实施例中,所述专用处理器包括具有至少两个互连处理单元的阵列,其中每个处理单元包括指令缓冲器和数据存储器,所述数据存储器被分成至少两个区域。在另一实施例中,所述互连处理单元的相应指令缓冲器通过指令流水线连接,所述指令流水线被配置为按顺序将指令从一个处理单元传送到下一个处理单元,并且所述一个或多个指令队列包括向量指令队列和标量指令队列。在此类实施例中,所述指令生成单元被进一步配置为结合从所述一个或多个指令队列发出所述已解码指令而将来自所述向量指令队列的已解码指令放入所述指令流水线中。
除了在此描述的其它实施例之外,上面的实施例反映一种生成用于专用处理器的定制指令的更广义方式。作为一种现有方法,第6,477,683号美国专利描述使用标准化语言来描述可以以某些特定方式配置的指令集。采用标准化语言的描述用于生成处理器的开发和配置工具。但是,此类解决方案仅允许对现有架构进行有限数量的特定预定义修改。
在此处描述的方法的一个实施例中,改变对象类库以便由常规编译器访问,以及由其它工具链程序和应用程序开发人员访问。在一个实施例中,对象类库包含与面向对象的编程方法关联的类或模板。在此类实施例中,一个或多个类被配置为使用由应用程序提供的数据来被实例化为对象。对象类库包含一个或多个定制文件,当在被编译的源文件中遇到不熟悉的操作数或函数时,例如由编译器访问这些定制文件。
在一个实施例中,对象类库内的定制文件是定制指令宏、或者用于针对定制功能单元生成定制指令的模板、或者与处理器关联的指令生成单元。定制指令包括操作代码或操作码、以及一个或多个操作数。在另一实施例中,使用常规编译器的用户定义的指令能力来定义定制指令宏。定制功能单元在此还可以被称为“指令生成单元”或“硬件指令编译器”。在一个实施例中,定制功能单元将从常规编译器接收的定制指令(包括操作码和操作数)转换成适于专用处理器的硬件配置的一个或多个指令。
上述对象类库和定制功能单元的使用允许程序员访问专用处理器的功能而不必理解处理器的ISA的细节。可以在程序员的源代码中以抽象术语描述所需操作。然后可以由常规编译器(使用对象类库中的定制文件)将此类操作转换成用于定制功能单元的指令。定制功能单元然后可以将指令转换为适合于专用处理器的一个或多个指令。在一个实施例中,用于定制功能单元的指令是用于针对专用处理器构造或创建一个或多个变量的指令。此类指令在此可以被称为“构造器指令”。在一个实施例中,由定制功能单元产生的处理器指令并不限于任何特定的长度或格式。
在其它实施例中,对象类库内的定制文件包括源代码,其可在编译器的本机指令集中执行以便实现专用处理器的一个或多个功能的基于软件的版本。在另一实施例中,当选择用于采用软件实现的选项时,编译该代码。
使用对象类库以实现处理器操作的基于软件的版本可以被用于测试(基于硬件的)处理器操作。在一个实施例中,实现基于软件的过程的代码可执行以便以相同顺序执行与基于硬件的处理器相同的至少某些步骤,从而确定错误。如在硬件指令编译器的定制指令生成的情况下,可以由程序员抽象地描述操作,并且可以使用编译器的用户定义的常规特征从对象类库调用定制例程。
在另一个实施例中,执行使用上述两种类型的定制文件(包括用于软件实现的指令的定制文件、以及用于针对定制功能单元生成定制指令的定制文件)生成的程序指令。在一个实施例中,使用专用处理器执行一个程序,而另一个程序是在本机指令集中执行的同一程序的基于软件的版本。在另一实施例中,至少部分地同时执行基于硬件和基于软件的程序。在再一实施例中,测试控制模块管理程序的执行,并且在被执行的计算或过程中的一个或多个点处比较来自基于硬件和基于软件的执行的结果。
分片处理器(tile processors)
可以与如在此描述的对象类库和硬件指令编译器结合使用的专用处理器的一个示例是如在第9,183,614号美国专利中描述的分片处理器,该专利在此引入作为参考,如同在此完全和彻底说明那样。分片处理器适于二维相关数据集(例如可以用于图像处理的那些数据集)的有效高吞吐量处理。如在上面引用的申请中进一步描述的,分片处理器采用多个特性(包括存储器分区和指令排序的新技术),以便执行基于硬件的处理。但是,在此描述的定制编译方法和系统并不限于与任何特定类型的专用处理器一起使用。
如在此使用的,“可视处理”指图像和视频图片元素(“像素”)和相关数据的一类通用处理。这包括诸如以下项的应用:增强图像和转换像素格式、运动检测和跟踪、以及在静态图像或视频帧中标识特征或对象。基于分片处理器的可视处理架构实现多种可编程、可伸缩、软件兼容的解决方案以便有效处理大型可视数据集。它克服了该应用领域的常规方法的限制,这些常规方法通常在某种形式的共享存储器、对称多处理(SMP)配置中使用多个单指令多数据(SIMD)核心,并且使用定制编程和运行时环境来处置处理核心之间的处理器分配、通信和同步的问题。
相比之下,基于分片处理器的架构上的处理采用任何数量的细粒度分片路径(tile path)(它们被自动分配并且在平行范围内动态伸缩),不需要全局共享存储器以便在分片路径之间通信,并且使同步基于广义顺序执行模型。在一个实施例中,编程在多个行业标准指令集架构(ISA)上使用标准C++而无需编译器重新定位目标。
所述架构使用容易理解的编程模型实现大规模并行执行,该编程模型几乎不需要了解用于提供并行执行的机制。这通过作为完全虚拟化的并行处理器提供处理硬件而实现,而没有通常由虚拟化隐含的开销。虚拟化通常针对解释虚拟操作并且将它们转换为硬件操作而引起性能损失。相反,在一个实施例中,基于分片处理器的架构直接执行由C++对象类提供的抽象,通常使用单周期执行,即使抽象表示数百或数千个操作也是如此。并行执行的虚拟化依赖于硬件—指令生成单元(IGU),以便将虚拟指令转换为本机指令并且确保本机指令的正确并行执行。
图1示出可视处理架构的高级系统图,其包括由主机核心102和主机指令/数据104表示的本地主机处理器、由IGU表/逻辑106表示的IGU、以分片路径阵列组织的分片路径(在该示例中为256个分片路径)、系统接口、以及表存储器108。图1中的分片路径被示为本地数据存储器110(阴影)部分与处理逻辑(例如,功能单元和互连)112(白色)部分的组合。256个分片路径系列被折叠成四个行。存在非常高的结构度和规律性,并且大部分控制开销被限于IGU和表-系统单元。
分片路径是简单的处理元件,其包括功能单元、包含可选累加器的可选寄存器文件、以及本地数据存储器(DMEM)。没有指令存储器和指令取回逻辑。由分片路径执行的指令仅执行可视处理操作,并且DMEM和寄存器文件仅用于像素和相关数据而没有程序控制等的开销。分片路径除了执行指令之外几乎不执行其它操作:控制逻辑主要专用于分片路径之间的互连和数据一致性。分片路径被构造成由任何数量的分片路径组成的分片阵列,然而通常每个阵列具有256-1024个分片路径。
图2是分片阵列的示例性框图,其是可以与在此描述的对象类库和定制功能单元一起使用的专用处理器的一个示例。分片阵列(例如图2的分片阵列)的组件和操作在第9,183,614号美国专利中提供。更具体地说,图2的每个相同互连处理单元204可以被称为单独分片处理器,其中互连并一起工作的一组分片处理器形成分片处理系统202。在一个实施例中,在此描述的IGU连同寄存器、存储器、以及主机处理器的其它组件一起实现在上面参考的专利中描述的“主处理器”的指令取回和排序操作。
在图2的分片处理系统的实施例中,针对其执行操作的数据被存储在分片处理器的共同分区数据存储器206中。例如,如在此使用的,“分片”指像素的直线区域或二维阵列(或其它二维数据)。每个处理元件或分片处理器针对唯一像素分片执行操作,且相邻分片映射到相邻分片处理器的数据存储器。用于这些操作数的多值操作数在分片处理架构中被定义为对象,并且使用“对象跟踪器”被标识。因此,在该实施例中,包括在由主机编译器生成的指令中的对象跟踪器可以引用存储在分片处理器数据存储器中的数据。与产生多值结果的针对多值操作数(例如数据阵列)的操作相比,其它操作可能产生标量结果,例如用于发现阵列中的所有值的平均值的操作。在一个实施例中,这种类型的标量结果不容易存储在分片处理器数据存储器(例如图2的分片处理器数据存储器)中。此类标量结果可以通过分片处理器互连结构被发送回到指令生成单元以便存储在主机处理器处,如由“标量结果”线208例示的那样。
除了标识要执行的操作数和操作之外,由IGU针对专用处理器生成的指令可以包括用于专用处理器的其它参数。在分片处理系统的示例中,可以使用指令中的指定位传递的有用信息包括有关指令是否与如在第9,183,614号美国专利中定义的“任务边界”关联的信息。可以在指令中传递到分片处理器的其它有用信息是标识指令的“使用”和“定义”次数的信息。此类信息可以由分片处理器用于维护数据一致性。其它类型的专用处理器可以采用不同种类的专用信息,这些专用信息可以在由IGU创建的专用指令中被传递到处理器。
图2示出分片阵列的子集—在此类情况下,四个分片路径在彼此的本地。分片路径不同时执行同一指令,然而它们执行同一指令序列。在时间和空间上分配指令:在时间上,因为在多个不同任务间隔内在同一分片路径上重复指令,每个间隔表示图像中的不同相邻位置;以及在空间上,因为还使用指令流水线,跨任何数量的分片路径将指令从一个分片路径流化(复制)到下一个分片路径。
所有计时在分片路径本地,并且没有全局暂停信号。使用用于以每周期一个分片路径的速率暂停上游指令的滑移缓冲器(skid buffer),通过中断分片路径之间的指令流水线来实现暂停。此类形式的指令分配和执行还允许分片路径之间的细粒度数据共享,而不需要全局机制。
与SIMD/SMP组织相比,分片阵列实现具有多个实现优点:
·分片路径针对寄存器文件和DMEM不需要宽RAM。它们与典型的32位(或16位)数据路径没有区别,而SIMD需要相当于多达2048位宽RAM(假设64、32位数据路径)。
·访问像素的本地相邻像素不需要大型多路复用结构。由于跨大量数据路径的多路复用RAM输出的开销,访问给定位置的左边和右边的像素的要求通常将SIMD限于每一侧2-3个像素。使用复杂性小若干数量级的互连,分片路径针对该访问的范围没有限制,即使分片路径有效地完全互连也是如此。
·分片路径更节能,因为它们以单个像素的粒度被动态分配,而SIMD以包含32或64个像素的单元被分配。此分配以逐个指令为基础,因此例如,针对1024宽向量的操作可以使用256个分片路径,并且后面紧跟仅使用128个分片路径的针对512宽向量的操作,其它128个路径被取消计时(de-clocked)。
·互连传输的单位是标量,并且在系统级别是标量流。SIMD通常需要向量级别互连(例如跨越SIMD的宽度),并且需要系统级别数据在传输到SIMD之前被聚合成向量,可能具有像素交错和解交错。这不仅使系统互连相比之下更复杂,而且在处理中引入延迟。一旦单个分片路径接收标量输入,便可以独立于其它分片路径而继续。没有显式像素交错或解交错,因为向量未在系统级别暴露。实际上,像素格式由如何在分片阵列中将程序从标量写入汇编抽象向量来确定。
·暂停不会使所有数据路径在同一周期中空闲。相反,分片路径单独检测暂停状况,并且通过指令流水线在相继周期上传播暂停状况。使用极端情况作为示例,64个分片路径可以解决64个独立暂停状况,其中由于暂停而丢失单个周期。实际上,跨所有路径检测到的暂停状况的总数明显高于解决暂停需要的周期总数—通常为2-3倍或更多倍。这导致相当高的每周期指令(IPC)速率,而不考虑大量潜在的系统级别争用。
这最后一点值得强调,因为针对大多数并行系统具有反直觉效果。现存并行系统的基本属性是除了所需基本机制(例如用于设置和测试信号量的周期)的开销之外,通信和同步还导致随着核心数量的增加而增加的暂停。这通常严重限制了并行性,但在如下应用中除外:其中与通信/同步要求相比,处理工作负载大(不适用于可视处理的属性),因为需要跨数百或数千个像素逐指令通信/同步,并且跨所有应用在通信/同步频率或依赖性拓扑方面具有非常小的可预测性。
相比之下,分片阵列针对通信和同步不需要额外周期,因为这些机制被折叠成单周期加载和存储操作—甚至具有数十个周期的相对高互连延时的单个周期。暂停机制不仅受益于暂停状况的并行解决,而且还导致构造优势,因为添加了分片路径。作为一个示例,用于CIF分辨率的尺度不变特征变换(SIFT)应用使用88个分片路径,并且在530万个周期中执行430万个指令,每分片路径的IPC为0.81(针对所有路径保持70)。在该配置中暂停状况的总数是440万,这通常将建议低得多的IPC:性能降低100万个周期以便解决这440万个暂停,而不是预期的440万个周期。
此外,HD-1080配置可以使用多达960个分片路径,并且在2500万个周期中执行1600万个指令,每分片路径的IPC为0.64(针对所有路径保持607)。暂停状况的总数为2.82亿—比指令数量多出17倍。如预期的,添加更多分片路径已增加更多暂停状况,但这些暂停状况被并行解决的这一事实极大地降低性能影响,从而意味着可以在构造上使用大量分片路径。
指令生成
分片阵列的指令生成使用唯一机制,其适合于任何适当的本地主机ISA。它需要对ISA的现有软件工具链进行非常小的修改(在某种意义上不需要修改),只要工具链基于C++或者具有可比特征的面向对象的语言。因此,它是主机ISA的扩展,即,在此被统称为可视处理扩展(VPX)的指令集。
VPX基于定制指令的概念,这些定制指令在一个实施例中使用Gnu编译器集合(“GCC”)_builtin_custom宏。这些宏导致编译器使用定义操作码(通常使用枚举)和两个操作数(立即数或变量(其被分配给寄存器))的宏,发出预定义指令。变量具有如下类型:整数、浮点或空指针(后者允许存储器访问)。指令可以被定义为返回结果,该结果被分配给另一个变量。因为具有结果,所以指令是三操作数、非破坏性指令。
编译器不一定知道由定制指令执行的功能(尽管它可以知道,但通常使用某种抽象机器描述)。它仅使用参与寄存器分配、程序链接等的指令,管理所使用的变量/立即数并且处理结果,与任何其它指令一样。这允许最终由编译器发出分片阵列指令,而没有向编译器公开基本分片路径或其指令编码的细节的任何要求。定制指令的此类属性用于编译分片阵列的代码,具有很大的灵活性,但在工具链方面没有复杂性,并且不要求工具链理解分片路径指令的语义。
编译器不需要知道指令功能的事实允许VPX指令是虚拟的。它们不像指令通常所做的那样直接对功能进行编码,而是对由IGU用于生成指令并向分片阵列发出指令的信息进行编码。在某种意义上,IGU是用于VPX的硬件编译器,只是它不如软件编译器一样通用—例如不必处理分支或程序链接。此类通用性的缺乏实际上是优势,因为例如由分支导致的控制流的变化通常限制软件编译器中的寄存器分配的有效性。使用例如1024个寄存器或更多寄存器,IGU可以更有效地分配寄存器,而大多数编译器不能有效地分配多于32个寄存器。
虚拟化编程模型
在一个实施例中,用于分片阵列的应用基于C++类库。该类库以两种不同的形式实现虚拟分片阵列的功能。第一种形式完全以软件实现,具有完全等效于分片阵列的功能,但慢得多,因为它不在硬件上执行。第二种形式简单地成列(in-line)发出VPX指令,没有类库的程序调用开销,具有单周期执行的效果,在超标量流水线中可能与其它主机指令并行。
针对使用这两种形式的虚拟化的类库,存在三个不同的构建选项,所述选项通过编译器标志来选择:1)用于独立于分片阵列实现的原型设计,使用类库的仅软件仿真;2)用于针对分片阵列目标生成指令,具有最小软件开销;以及3)实现软件仿真和分片阵列定制指令的混合版本,用于协同仿真和验证。下面描述仅硬件版本(2)。
首先,考虑三个整数DataVector a、b和c的声明,a和b具有定义的宽度(宽度不一定在声明中定义;向量可以继承分配时的宽度,这适用于c)。在程序中其后面跟随语句,该语句添加a和b并且将结果分配给c。
DataVector<int>a(width),b(width),c;
…
c=a+b:
当编译器遇到a、b和c的声明时,它调用由库定义的对象构造器。这些构造器包含一个或两个定制指令(在此处描述的库版本中),并且对象仅包含单个变量(被称为对象跟踪器)。定制指令对对象的属性(例如数据类型和宽度)进行编码。除了宽度之外,该信息由编译时常量提供,并且如果宽度在寄存器中,则构造器调用可以是单周期成列指令,因此它具有最小开销。
构造器定制指令返回结果,该结果被分配给对象跟踪器。该对象跟踪器用于针对对象变量的后续操作,并且像任何其它对象变量一样被处理。例如,上面示例中的超载添加生成单个定制指令,该定制指令具有用于a和b的对象跟踪器作为它的两个操作数,并且返回用于添加的结果的临时对象跟踪器作为它的结果。为了将此分配给c,编译器简单地复制(或传播)该对象跟踪器以便成为用于c的对象跟踪器。
这允许编译器处理非常大的可视对象,犹如它们是任何其它变量—包括分配给寄存器、参与程序链接、被动态分配等—而不需要编译器具有用于对象、其行为的机器描述,也不需要分片路径指令的定义。这至关重要,因为如将看到的,分片路径指令的定义和执行与任何其它架构均不同。可以定义分片路径指令以便实现分片路径和阵列的优势,而没有由工具链施加的限制,例如指令宽度、数据类型的限制等。它还允许完全不同的分片路径和分片阵列实施方式彼此二进制兼容。
IGU概述
图3是可以用于实现在此描述的系统和方法的主机300的一个示例性实施例的简化框图。除了图3中具体示出的组件之外,主机还包括以常规计算机的方式互连的常规计算机的组件(例如,电源和用于连接到电源的设备),如所属技术领域的技术人员理解的那样。在一个实施例中,由主机(例如图3的主机)执行由常规编译器使用如在此所述的对象类库编译的程序。一般来说,除了图的中间右侧部分中的IGU 302之外,图3的组件是也可以在常规处理器中发现的组件。
在一个实施例中,主机处理器执行涉及图3中所示的操作数dataA和dataB的指令。在另一实施例中,由主机处理器执行的指令是32位指令。对于某些指令,操作数dataA和dataB可以表示常规形式的数字或变量,并且通常可使用主机处理器的本机指令集来执行所述指令。在一个实施例中,使用由图3中所示的主机寄存器文件304、主机数据存储器306和“其它功能单元”308表示的处理器执行此类指令,而不使用图3的IGU。由图3的主机处理器执行的其它指令是定制指令,这些定制指令由编译器使用对象类库内的定制指令宏生成,如上所述。此类指令由IGU处理。
对图3的IGU(其在此还可以被称为“定制功能单元”或“硬件指令编译器”)进行编程,以便识别由编译器生成的定制指令所使用的操作数dataA和dataB的值。使用来自定制指令的操作数和操作码,硬件指令编译器针对耦合到IGU的专用处理器生成一个或多个适当的指令。在图3的实施例中,通过使用指令流水线I-Pipe将指令从IGU发送到专用处理器并且从专用处理器接收一个或多个标量结果来将IGU耦合到专用处理器。从专用处理器的角度来看,IGU是“指令生成单元”,因为它能够包括额外操作,例如专用处理器的指令的排序和多任务处理。
通过下面提供的两个示例性分片处理器主机定制指令集架构表(以下为“定制ISA表”),示出可以使用IGU处理的定制指令的示例。下面的表定义某些定制指令,在一个示例性实施例中这些定制指令可以由编译器生成并且提供给图1的IGU。多种其它类型的指令(例如移位指令、布尔指令和移动指令)也将被包括在实际实现中。定制ISA表中的信息可以被包括在对象类库内的一个或多个文件中,这些文件由编译器访问以便实现用户定义的功能。此类信息的使用允许编译器生成定制指令,这些定制指令包括诸如dataA和dataB之类的操作数和对应于所需操作的操作码。在一个实施例中,定制指令是32位指令。
表1:构造器、解构器、调整大小
表2:算术(DataVector)
Mnem | dataA | dataB | 结果 | 类型 |
ADD | objTracker | objTracker | objTracker | inii |
ADD_IMM | objTracker | literal | objTracker | init |
SUB | objTracker | objTracker | objTracker | inii |
SUB_IMM | objTracker | literal | objTracker | init |
SUB_FROM_IMM | objTracker | literal | objTracker | init |
ABS | objTracker | objTracker | init | |
MUL | objTracker | objTracker | objTracker | inii |
MUL_IMM | objTracker | literal | objTracker | init |
DIV | objTracker | objTracker | objTracker | inii |
DIV_IMM | objTracker | literal | objTracker | init |
DIV_IMM_BY | objTracker | literal | objTracker | init |
取决于专用处理器的性质,诸如dataA和dataB之类的操作数可以表示多个数据值。例如,上面参考的第9,183,614号美国专利的分片处理器的操作数可以表示二维数据阵列。在定制ISA表的示例中,具有定制、多值格式的此类变量被定义为对象并且使用“对象跟踪器”(“objTracker”)来标识。某些定制指令(例如定制ISA表的表1中的CONSTRUCT指令)可以用于创建属性并将属性分配给对应于特定变量的对象。其它定制指令用于使用由对象跟踪器标识的变量执行操作。例如,定制ISA表的表2中的ADD指令指定将由用于操作数dataA的对象跟踪器标识的数据与由用于操作数dataB的对象跟踪器标识的数据进行相加,并且将结果存储在与用于结果的对象跟踪器关联的存储位置中。在一个实施例中,与这些对象跟踪器中的一个或多个关联的数据被存储在专用处理器内的一个或多个数据存储器中。
对于被设计为使用由定制ISA表定义的接口对接到分片处理器阵列(“分片阵列”)的IGU的示例,IGU响应于从定制ISA表的表2接收ADD指令,以由分片阵列需要的形式创建加法(add)指令。以这种方式,主机处理器的编译器不需要具有有关由分片处理器(或其它专用处理器)需要的指令格式的信息。主机编译器使用由对象类库内的文件(这些文件针对主机编译器建立用户定义的指令)定义的到定制功能单元的接口。硬件指令编译器然后自由创建用于专用处理器的具有专用处理器所需的任何长度和任何形式的指令。专用处理器的开发可以继续进行,从而导致对处理器需要的指令格式进行更改,并且仅硬件指令编译器需要被修改以便适应对专用处理器的任何更改。
在图3的实施例中,IGU被实现为主机的数据路径中的功能单元,而不是直接执行VPX指令,它解释VPX指令。该功能单元具有两个输入操作数和一个结果总线。对于大多数指令,该单元看似具有单周期执行,因为针对本地主机,它仅接收对象跟踪器(或固定值)并且返回对象跟踪器。例如,返回到代码示例,当构造器定制指令被发出到IGU时,它简单地使用基于堆栈的分配将条目—即,描述符—分配到属性表中,并且返回表条目(对象跟踪器)的地址,同时它填入对象的信息(例如数据类型和宽度)。对于需要分片路径中的共享DMEM的对象,它还分配需要的存储器,从而将基地址分配给将用于分片路径指令生成的对象。此外,对于包含其它控制状态的对象(例如循环缓冲器),该状态被初始化。
对于其它指令(例如先前示例中的add),IGU访问属性表条目,生成适当形式的分片路径ADD指令,并且发出到分片阵列。下面提供IGU的进一步细节,但几个重点如下:
·由IGU执行所有控制、排序和一致性操作。它遵循顺序执行模型,因此例如,存储器写入始终在同一位置的读取之前,并且在后续写入之前执行所有读取。分片阵列中的执行极其无序,但使用在分片路径指令中提供的基于顺序执行模型的信息,维护等同的顺序排序。
·由IGU管理系统接口和表存储器的操作,例如提供基地址并且独立于分片路径访问宽度。这些操作完全在分片路径的外部,它们仅执行加载、存储和直方图操作并且提供本地偏移和数据,而不涉及任何全局细节。
·IGU执行分片路径的所有寄存器和存储器分配,包括寄存器溢出/填充以及将累加器(可选地)分配给复合乘法-加法运算。对于它必须处理的情况,此类分配堪比常规编译器分配并且与其一样通用,并且实际上更有效,因为在定制指令流中没有分支或程序调用,并且不需要显式程序链接。溢出的任何对象被分配有DMEM位置,但仅当需要溢出时才分配该位置。使用足够数量的寄存器(通常为每像素位置256个),溢出非常罕见,并且填充甚至更罕见,因为对象可以通过程序返回(或删除)被解构并且不再被使用。
·IGU以确保一致性的方式管理共享数据。例如,除临时求值期间以外,不将共享数据分配给寄存器,因为不可在分片路径之间共享寄存器。
·指令使用类型标记,以使得可以针对任何数量的数据类型定义单个操作。例如,除了标识数据类型的字段之外,有符号/无符号整数和浮点加法是相同的。这可以被扩展为包括用户定义的类型(例如固点),假设分片路径被设计为支持基础操作。
实现概述
图4是示出图3的IGU 302的组织和操作的示例性框图。如上所述,IGU被实现为主机的数据路径中的功能单元;但是,它解释VPX指令,而不是直接执行VPX指令。该功能单元具有典型的配置,因为它具有两个输入操作数—Host dataA和Host dataB,并且返回单个结果—Host result。Host dataA几乎始终包含一个对象跟踪器:例外是它可以包含构造器指令的对象参数。Host dataB(如果存在)包含另一个对象跟踪器、固定值(立即数)或构造器信息。Host result(如果由指令定义)通常是用于指令结果的对象跟踪器,其由IGU分配。但是,它还可以是返回到主机的VectorSummary对象中的标量值。
IGU的实现分布在与图的上部、中部、以及下部对应的三个流水线级上:属性级402、解码级404、以及指令缓冲级406。以下章节提供这些级中的每一个的操作的概述。在该概述之后,后续章节详细地描述每一级的操作。
属性级概述
属性级实现到主机处理器的主接口,从而接收VPX操作码以及dataA和dataB操作数,并且返回对象跟踪器result。它的主要功能是:1)将对象描述符输入属性表中以便实现构造器指令,2)根据指令执行的需要更新这些描述符,3)删除描述符以便实现解构器指令,并且4)组装解码级所需的信息以便将VPX指令转换成分片路径指令。它将该信息输出到解码级。
当属性级接收构造器指令时,它分配属性表408中的下一个条目,并且输入基于包含在该指令中的参数的描述符信息。它还输入基于本地参数的信息,例如针对实现共享数据的循环缓冲器的LineBuffer对象分配分片路径DMEM:基于缓冲器的大小,这些LineBuffer对象需要多个DMEM行以便实现缓冲器。它返回属性表条目的地址作为指令结果;这是由主机用于针对对象的后续操作的对象跟踪器。少数对象需要两个指令以便传送所有构造器参数,并且在此类情况下,针对第二指令返回对象跟踪器。
指令执行通常需要针对指令结果创建描述符,或者修改现有描述符以便反映由指令隐含的对象状态变化。例如:1)在其描述符反映输入操作数的新对象中添加两个对象结果,2)分配LineBuffer变量需要更新由变量实现的循环缓冲器的状态,并且3)分配DataVector对象能够改变对象的宽度。在这些情况下,属性级创建新描述符并且将对象跟踪器返回到主机,或者更新属性表中由所述指令中的对象跟踪器定义的位置处的描述符。
到解码级的主要输出是原始VPX指令的流水线化版本、以及与两个输入操作数和结果相关的其它信息。在此类情况下,将dataA操作数转换为操作数的描述符而不是对象跟踪器的描述符。dataB操作数是操作数的描述符或者是具有其数据类型指示的固定操作数值(对于变量,数据类型被包含在描述符中)。可以在修改属性表之前,相对于属性表修改这些描述符。由属性级创建的用于结果的描述符也被传送到解码级。
解码级概述
IGU的解码级(在图4的示意图的中心示出)从属性级接收指令和属性信息,并且使用寄存器分配标志和寄存器分配队列来处理寄存器的分配和取消分配。解码级还形成用于专用处理器的指令并且将指令传递到指令缓冲级。解码级将VPX指令序列转换成功能等效的分片路径指令序列。在高级别,这简单地将一种格式的指令(例如VPX add)转换为另一种格式(分片add)。但是,这还涉及寄存器分配、寄存器溢出/填充(包括用于溢出/填充位置的DMEM分配)、以及使用依赖性信息注释指令。解码级还实现到图1中所示的表-系统单元114的控制接口,这还涉及跟踪和管理有关系统和表访问的依赖性。
作为可以被包含在寄存器中的用于对象的构造器指令的结果,执行寄存器分配。这排除包含共享数据的对象,因为寄存器不能被共享。寄存器分配使用两个结构:“空闲列表”,其包含未被分配的寄存器的标识符;以及“分配FIFO”,其以分配顺序包含已被分配的寄存器的列表。空闲列表不需要排序,但分配列表按顺序保留,以使得如果需要寄存器,则硬件能够选择最近分配的寄存器,因为在不久的将来不太可能需要该寄存器。
在操作期间,构造操作可能在寄存器都不可用时需要寄存器。在此类情况下,解码级使用从最高地址DMEM位置发展到较低地址的堆栈,针对溢出分配存储位置,并且发出溢出指令。后续操作可能针对已溢出的寄存器运行,在此类情况下,针对填充操作分配另一个寄存器—此分配又可能导致另一个溢出。操作还可能具有需要新寄存器的临时结果,这也可能导致溢出。尽管存在多个分配(从而导致多个溢出和填充状况)的事实,但寄存器分配最终达到如下状态:所需寄存器已被分配,并且任何溢出的寄存器已被放在DMEM中。
解码级还将依赖性信息添加到写入和读取共享数据的指令。该信息允许分片路径在实现顺序执行模型中进行协调,即使实际指令执行在空间和时间上无序也是如此。这使用两个表来存储与共享数据的访问相关的信息。一个表针对每个DMEM位置保存最近写入该位置的指令的标识符:读取该数据的任何操作都需要已在目标存储器中执行指令。另一个表再次针对每个DMEM位置保存最近读取该位置的指令的标识符:在允许后续写入之前,所有分片路径必须已完成该读取。
到由解码级实现的表-系统单元的控制接口(表-系统接口410)用于将全局信息传送到该单元。这包括用于读取或写入的表或系统基地址,这些基地址适用于所有分片路径—分片路径仅提供距该地址的偏移。它还指示操作是读取还是写入,并且对于作为直方图操作的表写入,指示直方图操作的类型。最后,解码级提供唯一地标识给定时间跨度内的访问的信息,包括用于特定访问和用于被访问的对象的唯一标识符(使用对象跟踪器)。
在任何给定时间,可以具有多个进行中的表和系统访问,因为这些操作被分布在分片阵列上。使用请求队列跟踪单独访问流:针对表和系统访问存在单独请求队列。发出到分片路径的访问指令包含队列标识符,并且指令对访问是针对表还是针对系统进行编码。因此,可以正在进行多个访问,它们由个体访问的队列条目来标识。
当所有访问都已完成时,表-系统单元114向解码级返回指示,其指示对应队列条目空闲。该指示还包括最初由解码级提供的对象跟踪器。该标识符由解码级用于提供针对对象的读取-写入同步。例如,当针对同一表具有正在进行的读取时,解码级抑制表写入。当表-系统单元用信号通知已跨所有分片路径完成读取时,表写入被允许继续。
表-系统接口410还实现全局屏障,其允许与分片阵列的系统级同步。这确保在屏障操作被允许完成之前,所有表和系统访问都已完成。
最后,解码级包括优化队列412,其用于在本地优化指令序列。例如,该队列可以将存储(stores)组合成先前指令,以使得该指令可以具有写入DMEM的副作用而无需额外周期。它还可以将乘法和加法序列转换为复合乘法-加法指令,这些指令采取单个周期来执行,而不是针对乘法和加法(或者加法和乘法)采取两个单独周期。
解码级的输出是用于指令缓冲级的已解码指令。
指令缓冲级概述
硬件指令编译器的指令缓冲级(在图4的示意图底部处示出)包括标量寄存器和标量功能单元,以便从专用处理器接收标量数据、使用由主机处理器提供的其它标量操作数处理标量数据、以及存储标量结果。指令缓冲级还包括优化队列和指令重放缓冲器,以便管理专用处理器的指令执行。在具有分片阵列作为专用处理器的一个实施例中,指令缓冲级实现在第9,183,614号美国专利中描述的“主处理器”的指令取回和排序操作。在具有分片处理器作为专用处理器的此类实施例中,指令缓冲级从解码级中的优化队列接收指令,并且管理两个指令缓冲器:一个用于向量指令(向量指令重放缓冲器414),另一个用于标量指令(标量指令队列416)。向量指令通过分片路径执行,并且指令缓冲级管理指令到向量I-pipe中的排序。标量指令直接由IGU执行,只是其中某些标量指令涉及由向量内操作(例如产生向量中的最大值的操作)产生的标量。后面的指令被放在向量和标量缓冲器两者上以便将标量结果与向量运算同步。
向量和标量指令缓冲器服务于不同的目的。向量指令需要在多个任务间隔内排序,每个任务间隔表示每个分片路径中的特定位置处的操作。通过对共享数据的访问定义任务间隔,因为多任务是用于避免传送该数据的延时损失、以及用于解析数据的写入与读取之间的依赖性的基础。但是,还定义任务间隔以便包含表和系统访问的延时,并且标记缓冲器中的指令序列的结束,以使得能够发出指令而不考虑从解码级(并且最终从主机)接收的指令的状态。后一点示出指令缓冲器的另一个优势—它允许从来自主机的VPX指令的瞬时带宽中分离分片阵列的执行。仅需要某一时间跨度内的平均带宽以便保持分片阵列以其峰值速率执行。
标量指令缓冲器将标量运算同步到向量运算。标量运算通常具有大延时,因为标量需要跨全部向量处理,从而意味着产生标量的所有指令必须在所有分片路径以及分片路径内的所有本地位置(区域)中执行。类库实现VectorSummary对象以便允许程序将该延时与主机执行分离:标量结果被放入VectorSummary对象中以便由主机随时访问,而不是要求主机等待标量产生。因为向量可以具有任何宽度,所以该延时是取决于特定变量的宽度的变量,因此产生标量而没有结果相对于彼此或者相对于针对VectorSummary对象的任何操作(例如将两个标量值进行相加)的任何自然排序。标量指令缓冲器被实现为队列416,从而将操作保持为其原始顺序。当指令缓冲器发出产生标量结果的向量内指令时,所述指令标识要接收结果的队列条目。
指令缓冲级处理嵌入通过全局互连传输的分组中的边带信息。在被读取的最后一个向量元素处完成共享数据读取时传输这些边带信息中的一个。这指示启用向数据中的写入。可以针对给定写入具有多个读取操作,并且该指示仅当写入与最近读取(如由IGU跟踪)关联时才启用写入。这些边带信号中的另一个通过最后一个分片路径传输以便执行导致标量的向量内运算,因为仅在所有向量元素已被处理之后才能产生标量结果。该标量结果被放入标量指令队列中,以便与其它标量运算正确排序。
最后,指令缓冲器连接到指令流水线中的最后一个分片路径的I-pipe输出。这允许IGU检测何时已在I-pipe中具有中断,例如无限暂停状况。这允许实现能够用信号通知此类状况(其表示错误)的计时器,并且促进恢复。它还针对分片路径实现先前提及的屏障操作。指令缓冲器将屏障操作发出到I-pipe中,并且检测当在I-pipe结尾处检测到该指令时所有分片路径都已完成。
属性级详细操作
图5和图6示出属性级操作的顶级流程图。仅当解码级未处于已暂停状态(步骤502)时该级才操作,以使得解码级可以从属性级接收信息(该指示还可以反映指令缓冲级是否处于用于从解码级接收指令的状态)。该级别的主要操作是响应直接影响属性表的状态的指令(图5),并且针对解码级设置操作数(图6)。
具有直接影响属性表中的描述符的四个指令。构造指令(步骤504)创建新对象,且在表中具有新描述符(步骤506)。复制构造指令(步骤508)使用现有对象的设置来创建新对象并将其值复制到新对象中(步骤510):这可能涉及将现有对象的数据类型转换为新对象的数据类型。解构指令(步骤508的“否”分支)删除对象(步骤512)和它正在使用的资源,例如属性表条目和任何已分配的DMEM和寄存器。最后,调整大小指令(步骤514)设置对象向量的新宽度(步骤516)。图中的最后指令设置全局帧参数(步骤518),例如帧高度和区域大小(步骤520),其中区域大小控制通过每个分片路径处理的相邻向量元素或像素的数量。
第二组操作(图6)根据需要针对输入操作数从属性表取回描述符(步骤602、604),并且针对具有结果(向量或标量)的指令创建新描述符条目(步骤606、608、610、612)。将新条目的地址返回到主机,但这与创建该条目并行发生,因为预先知道该条目的地址。从操作数(多个)的描述符(多个)导出新条目的描述符。例如,如果将浮点数与整数进行相加,则结果是浮点数:解码级将在发出加法之前发出整数到浮点表示的转换,后跟标准转换和针对C++定义的数据类型优先规则。作为另一个示例,将向量与更宽向量进行相加导致更宽宽度的向量,但元素仅如由更窄向量定义那样改变。
表3示出包含在每种类型对象的描述符中的信息类型。该信息:1)直接从属性表被访问;2)由属性级针对指令结果创建;或者3)在被传送到解码级之前由属性级修改,以便反映作为指令的副作用,描述符将由属性级更新。这是图中标记为“副作用解码”的流程图连接符的一个方面。该组操作没有流程图,因为它非常详细和机械。但是,以下是所需操作的类型的概括性总结。
对象类型 | 描述符信息 |
Line Buffer | 循环缓冲器状态、存储器分配 |
Data Vector(或Temp) | 宽度、变量或临时 |
Index | 开始/结束位置、宽度、表达式参数 |
Mask | 二进制值或位置范围 |
Table或Histogram | 大小、基地址、移位/掩码参数 |
System Access | 系统基地址、寻址状态 |
Vector Summary(或Temp) | 变量或临时 |
表3:按对象类型的描述符信息
LineBuffer读取需要启用或禁用读取,具体取决于当前包含在缓冲器中的数据量和读取的偏移。缓冲器中的数据量应该足够以便满足给定偏移下的读取,包括边界处理。此外,结果向量的宽度能够取决于针对水平和/或垂直偏移定义的宽度。如果缓冲器已被初始化,则其输出立即可用。
Move指令实现分配操作,因此根据移动需要修改分配的对象的描述符状态。例如,使用更宽向量设置DataVector将其宽度变为与更宽向量相同。这还可以将临时对象(例如Index表达式)转换为非临时对象。
LineBuffer分配更新缓冲器的循环寻址状态,包括基线、有效线的数量、接下来要分配的新线等。这相应地修改属性表中的描述符和传送到解码级的描述符。
Index对象可以具有未定义的宽度,在此类情况下其它考虑事项(例如对象宽度)定义访问的宽度;或者具有定义的宽度,其超控对象宽度。如果定义宽度,则出现如下情况:这修改被访问对象的宽度—例如用于上采样或下采样—而不是直接确定宽度。由处理Index对象的表达式定义该状态,因此属性级必须跟踪这些表达式并相应地修改用于Index的描述符。
如果由于某种原因访问无效,例如对针对访问尚未具有足够上下文的LineBuffer对象的访问,则属性级禁用涉及该访问的任何表达式,直到下一个分配点,包括禁用分配。这极大地简化某些对象的编程和重用,因为可以使用它们而不需要测试大量边界条件—对象简单地静默,直到满足输入条件,或者在它们已达到结束条件之后静默。
解码级详细操作
图7示出解码级的整体操作的流程图,包括图8中的寄存器分配流程图,其在图7中被示出为跨页(off-page)连接符。解码级的主操作被示为“对VPX指令进行解码”(步骤702),其将VPX指令序列转换为用于专用处理器的等效指令序列,例如分片路径指令。该过程主要是机械的,并且鉴于本公开和涉及的专用处理器的指令集,应该对于指令集架构领域的普通技术人员来说显而易见(然而注意,VPX指令预计是标准的,而由于由IGU实现的虚拟化,分片路径指令不必固定)。下面的讨论描述围绕该中心解码任务的特定任务组。
解码级服务于到表-系统单元的接口(步骤704),如前所述,而不考虑它是否被暂停。否则,仅当指令缓冲级处于用于接收已解码指令的状态时(例如向量指令缓冲器具有开放位置并且未以其它方式暂停)解码级才操作(步骤706)。解码级自身可以通过防止属性级提供新指令以及防止已解码指令流到达指令缓冲级来强制实施暂停状况。当由于后面描述的条件而导致解码级被暂停时,它不接受新指令,而是重复或继续前一个解码操作(步骤708)。在前一个解码不成功的情况下重复解码,并且在单个VPX指令导致多个分片路径指令的情况下继续解码(步骤710)。后者的一个示例是表访问,其要求在能够完成访问之前移动和掩蔽表地址。
示出的第一组操作判定输入指令是构造还是解构操作。构造指令(步骤712)要求用于基于寄存器的(非共享)对象的寄存器分配(步骤714),并且解构指令(步骤716的“否”分支)解除分配与对象关联的任何寄存器(步骤718)。复制构造(步骤716)保留被复制对象的分配,但针对新对象分配寄存器并且发出移动(move)操作以便复制分片路径中的被复制对象的内容(步骤720)。寄存器分配可以导致溢出。在构造的情况下,通过解码器发出该溢出而没有暂停,因为构造指令不导致任何其它分片路径指令。如果针对复制构造发生溢出,则需要暂停(步骤722),因为生成两个指令:溢出、后跟实现复制的移动。所分配的寄存器被记录在由对象跟踪器寻址的对象寄存器表中。
其它指令根据需要分配寄存器,如图8中所示。在大多数情况下,这仅涉及在对象寄存器表中查找寄存器标识符,但如果寄存器已溢出并被重用,则这需要填充寄存器,填充寄存器可能又导致另一个寄存器溢出。由已解码指令需要的任何或所有寄存器都可以发生此类情况,因此在解码可以继续之前,可能发生总计三次溢出和三次填充,并且可以导致多达六个暂停周期(注意,当结果是声明的变量而不是临时结果时,必须在分配之前填充寄存器,即使寄存器将被写入也是如此,因为可以由更小宽度的对象来分配对象,并且这被定义为仅影响与更小宽度关联的元素)。但是,溢出和填充非常罕见,因此这是极端情况—它被用作如下例示:不管通过该级发生的传递次数为何,寄存器分配最终都达到解码器可以继续的状况,假设具有在硬件中定义的至少三个寄存器。还采取第四寄存器,因为某些指令针对多个已解码指令之间的中间状态需要寄存器,并且直到指令被进一步解码才知道该要求。
如上所述,解码器的中心任务是将VPX指令转换成分片路径指令。这可以要求解码级发出指令以便在执行操作之前将操作数转换为兼容的数据类型,从而导致一个周期暂停。这还可能向表-系统单元发起访问请求,并且可以要求将依赖性信息和访问标识符添加到已解码指令。先前概述了这些操作,并且细节超出本文的范围,但鉴于本公开,对于所属技术领域的普通技术人员来说这应该被理解为相对简单的映射。
解码级中的最后任务是管理优化队列。该队列保持少数指令的上下文,并且在优化是可能的情况下,抑制来自指令缓冲级的指令。当执行优化时,或者已知优化不可能时,它将指令传送到指令缓冲级。
指令缓冲级详细操作
图9示出当专用处理器是分片处理器时,指令缓冲级的顶级操作的流程图。该级仅当未处于已暂停状况时才从优化队列接收新指令(步骤902、904)(并且如果解码级被暂停,则可能不接收新指令)。不管它是否被暂停,它始终服务于边带信号,如前所述(步骤906),并且检测向量I-pipe是否已在通常很长的时间段内空闲或者是否已满足屏障条件。
当接收新指令时,第一步是将指令放在向量和/或标量指令队列上(步骤908、910、912)(或者在产生标量值的向量指令的情况下,放在这两个指令队列上)。如果所需队列条目未空闲,则这可以导致暂停状况,由于输入指令未被指令缓冲级使用,这被检测为最后步骤(步骤914、916)。
第二步独立于输入指令,并且该第二步被执行而不管是否接收新指令。如果前一个向量指令已被分片路径接受,则来自向量指令缓冲器的下一个指令(如果可用)被设置为要发出的下一个指令。此发出跨分片路径区域实现多任务处理,因此针对每个区域重复任务间隔内的相同指令序列。当每个任务间隔完成时,区域数量递增,直到已在最后一个区域(步骤918)(由程序定义)上执行任务间隔。此时,区域被设置为第一个区域,并且指令发出继续到下一个任务间隔(步骤920)。再次地,这仅适用于缓冲器中具有指令的情况。
独立于向量指令处理,指令缓冲级还执行标量指令。这些操作可以涉及处理一个或两个标量值、使用从向量运算或主机接收的值设置标量寄存器、或者将标量值返回到主机。针对标量指令队列中的第一个指令,并且仅当所有输入操作数都有效时,执行所有这些操作。由向量指令产生的标量变得有效,因为标量在边带分组中被接收并且被放入适当的队列条目中。当标量执行到达该队列条目时,值被写入标量寄存器文件中并且可用于后续执行。如果由于某种原因而使同一VectorSummay对象在其值被使用之前被写入多次(这可以在某些程序条件下发生),则标量指令队列识别该状况并且不使用该标量值,直到最近更新有效。
在本公开内使用某些术语以指特定系统组件。如所属技术领域的技术人员将认识到的,从业人员可以通过不同名称参考组件。本文并非旨在区别名称不同但功能相同的组件。在下面讨论和权利要求中,以开放方式使用术语“包括”和“包含”,并且因此应该被解释为意味着“包括但不限于…”。此外,术语“耦合”或“耦接”旨在意味着间接或直接电连接。因此,如果第一设备耦合到第二设备,则该连接可以通过直接电连接,或者通过经由其它设备和连接的间接电连接。
上面的讨论涉及在此描述的系统、处理器、以及方法的各种实施例。所公开的实施例不应该被解释为或者以其它方式被用作限制本公开(包括任何权利要求)的范围。此外,所属技术领域的技术人员将理解,先前描述具有广泛的应用,并且对任何实施例的讨论仅意欲例示该实施例,并且并非旨在建议本公开(包括任何权利要求)的范围被限于该实施例。
在此提供的描述意欲例示本发明的原理和各种实施例。在完全理解上面的公开之后,许多变化和修改对于所属技术领域的技术人员来说将变得显而易见。任何权利要求都旨在被解释为包含所有此类变化和修改。
Claims (19)
1.一种指令生成单元,其被配置为将主机对接到专用处理器,所述指令生成单元包括:
属性级,其被配置为
从所述主机接收主机-程序操作代码和第一虚拟主机-程序操作数,其中所述第一虚拟主机-程序操作数表示用于所述专用处理器的第一操作数,以及
将所述第一虚拟主机-程序操作数扩展成第一操作数描述符,
其中所述第一操作数描述符提供所述第一操作数的在一个或多个操作数属性方面的描述;
解码级,其被配置为
从所述属性级接收所述第一操作数描述符和所述主机-程序操作代码,
将所述主机-程序操作代码转换为一个或多个已转换指令以便由所述专用处理器执行,以及
分配存储位置以供所述专用处理器在执行所述已转换指令中使用;
其中,所述已转换指令中的至少一个包括:
指定用于标识用于所述专用处理器的已转换操作数的部分,
指定用于标识由所述专用处理器针对所述已转换操作数执行的操作的部分,以及
指定用于特定于所述专用处理器的操作的额外参数的部分;以及
指令缓冲级,其被配置为
接收来自所述解码级的所述已转换指令,
将所述一个或多个已转换指令放入一个或多个指令队列中,以及
从所述一个或多个指令队列中的至少一个指令队列发出已转换指令以便由所述专用处理器执行。
2.根据权利要求1所述的指令生成单元,其中所述属性级被进一步配置为
从所述主机接收第二虚拟主机-程序操作数;以及
将所述第二虚拟主机-程序操作数扩展成第二操作数描述符。
3.根据权利要求1所述的指令生成单元,进一步包括存储器,其被配置为存储包括一个或多个操作数描述符的属性表,并且其中所述属性级被进一步配置为
判定所述主机-程序操作代码是否对应于所述第一操作数的初始声明;以及
响应于所述主机-程序操作代码对应于所述第一操作数的初始声明的判定,在所述属性表中存储包括所述第一操作数描述符的条目,并且向所述主机返回所存储的属性表条目的地址。
4.根据权利要求3所述的指令生成单元,其中所述属性级被进一步配置为通过从所述属性表取回所述第一操作数描述符来执行将所述第一虚拟主机-程序操作数扩展成所述第一操作数描述符。
5.根据权利要求1所述的指令生成单元,其中所述专用处理器包括具有至少两个互连处理单元的阵列,所述处理单元均包括
指令缓冲器;以及
数据存储器,其被分成至少两个区域。
6.根据权利要求5所述的指令生成单元,其中所述第一操作数包括跨所述专用处理器的一个或多个所述数据存储器的多个区域存储的二维数据阵列。
7.根据权利要求5所述的指令生成单元,其中由所述解码级分配的所述存储位置在所述专用处理器的所述处理单元内。
8.根据权利要求5所述的指令生成单元,其中
所述互连处理单元的相应指令缓冲器通过指令流水线连接,所述指令流水线被配置为按顺序将指令从一个处理单元传送到下一个处理单元;
所述一个或多个指令队列包括向量指令队列和标量指令队列;以及
所述指令缓冲级被进一步配置为结合从所述一个或多个指令队列发出所述已转换指令而将来自所述向量指令队列的已转换指令放入所述指令流水线中。
9.一种生成用于专用处理器的指令的方法,所述方法包括:
从主机处理器接收主机-程序操作代码和第一虚拟主机-程序操作数,其中所述第一虚拟主机-程序操作数表示用于所述专用处理器的第一操作数;
将所述第一虚拟主机-程序操作数扩展成第一操作数描述符,其中所述第一操作数描述符提供所述第一操作数的在一个或多个操作数属性方面的描述;
将所述主机-程序操作代码转换为一个或多个已转换指令以便由所述专用处理器执行,其中,所述已转换指令中的至少一个包括:
指定用于标识用于所述专用处理器的已转换操作数的部分,
指定用于标识由所述专用处理器针对所述已转换操作数执行的操作的部分,以及
指定用于特定于所述专用处理器的操作的额外参数的部分;
分配存储位置以供所述专用处理器在执行所述已转换指令中使用;
将所述一个或多个已转换指令放入一个或多个指令队列中;以及
从所述一个或多个指令队列中的至少一个指令队列发出已转换指令以便由所述专用处理器执行。
10.根据权利要求9所述的方法,进一步包括:
从所述主机处理器接收第二虚拟主机-程序操作数;以及
将所述第二虚拟主机-程序操作数扩展成第二操作数描述符。
11.根据权利要求9所述的方法,进一步包括:
判定所述主机-程序操作代码是否对应于所述第一操作数的初始声明;以及
响应于所述主机-程序操作代码对应于所述第一操作数的初始声明的判定,在属性表中存储包括所述第一操作数描述符的条目,并且向所述主机处理器返回所存储的属性表条目的地址。
12.根据权利要求11所述的方法,其中将所述第一虚拟主机-程序操作数扩展成所述第一操作数描述符包括从所述属性表取回所述第一操作数描述符。
13.根据权利要求9所述的方法,其中所述专用处理器包括具有至少两个互连处理单元的阵列,所述处理单元均包括
指令缓冲器;以及
数据存储器,其被分成至少两个区域。
14.根据权利要求13所述的方法,其中所述第一操作数包括跨所述专用处理器的一个或多个所述数据存储器的多个区域存储的二维数据阵列。
15.根据权利要求13所述的方法,其中分配存储位置包括分配位于所述专用处理器的所述处理单元内的存储位置。
16.根据权利要求13所述的方法,其中:
所述互连处理单元的相应指令缓冲器通过指令流水线连接,所述指令流水线被配置为按顺序将指令从一个处理单元传送到下一个处理单元;
所述一个或多个指令队列包括向量指令队列和标量指令队列;以及
从所述一个或多个指令队列发出所述已转换指令包括将来自所述向量指令队列的已转换指令放入所述指令流水线中。
17.一种数据处理系统,包括:
主机,其被配置为运行已编译程序;
专用处理器;以及
指令生成单元,其在操作上耦合到所述主机和所述专用处理器,其中所述指令生成单元被配置为
从所述已编译程序接收主机-程序操作代码和虚拟主机-程序操作数,其中所述虚拟主机-程序操作数表示用于所述专用处理器的操作数,
将所述主机-程序操作代码转换为一个或多个已转换指令以便由所述专用处理器执行,
分配存储位置以供所述专用处理器在执行所述已转换指令中使用,
将所述一个或多个已转换指令放入一个或多个指令队列中,以及
从所述一个或多个指令队列中的至少一个指令队列发出已转换指令以便由所述专用处理器执行,其中,所述已转换指令中的至少一个包括:
指定用于标识用于所述专用处理器的已转换操作数的部分,
指定用于标识由所述专用处理器针对所述已转换操作数执行的操作的部分,以及
指定用于特定于所述专用处理器的操作的额外参数的部分。
18.根据权利要求17所述的数据处理系统,其中所述专用处理器包括具有至少两个互连处理单元的阵列,所述处理单元均包括
指令缓冲器;以及
数据存储器,其被分成至少两个区域。
19.根据权利要求18所述的数据处理系统,其中
所述互连处理单元的相应指令缓冲器通过指令流水线连接,所述指令流水线被配置为按顺序将指令从一个处理单元传送到下一个处理单元;
所述一个或多个指令队列包括向量指令队列和标量指令队列;以及
所述指令生成单元被进一步配置为结合从所述一个或多个指令队列发出所述已转换指令而将来自所述向量指令队列的已转换指令放入所述指令流水线中。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201562120603P | 2015-02-25 | 2015-02-25 | |
US15/054,118 US9898292B2 (en) | 2015-02-25 | 2016-02-25 | Hardware instruction generation unit for specialized processors |
US15/054,118 | 2016-02-25 | ||
PCT/IB2016/052248 WO2016135712A1 (en) | 2015-02-25 | 2016-04-20 | Hardware instruction generation unit for specialized processors |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107347253A CN107347253A (zh) | 2017-11-14 |
CN107347253B true CN107347253B (zh) | 2021-07-06 |
Family
ID=56693176
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680011565.7A Expired - Fee Related CN107347253B (zh) | 2015-02-25 | 2016-04-20 | 用于专用处理器的硬件指令生成单元 |
Country Status (8)
Country | Link |
---|---|
US (1) | US9898292B2 (zh) |
EP (1) | EP3262503B1 (zh) |
JP (1) | JP6894377B2 (zh) |
KR (1) | KR20180079224A (zh) |
CN (1) | CN107347253B (zh) |
GB (1) | GB2553442A (zh) |
HK (1) | HK1246444A1 (zh) |
WO (1) | WO2016135712A1 (zh) |
Families Citing this family (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11436045B2 (en) | 2015-05-26 | 2022-09-06 | Blaize, Inc. | Reduction of a number of stages of a graph streaming processor |
US10437637B1 (en) | 2015-05-26 | 2019-10-08 | Thin CI, Inc. | Configurable scheduler for graph processing on multi-processor computing systems |
US11150961B2 (en) | 2015-05-26 | 2021-10-19 | Blaize, Inc. | Accelerated operation of a graph streaming processor |
US11379262B2 (en) | 2015-05-26 | 2022-07-05 | Blaize, Inc. | Cascading of graph streaming processors |
US11416282B2 (en) * | 2015-05-26 | 2022-08-16 | Blaize, Inc. | Configurable scheduler in a graph streaming processing system |
US10642617B2 (en) * | 2015-12-08 | 2020-05-05 | Via Alliance Semiconductor Co., Ltd. | Processor with an expandable instruction set architecture for dynamically configuring execution resources |
GB2558220B (en) | 2016-12-22 | 2019-05-15 | Advanced Risc Mach Ltd | Vector generating instruction |
US10817293B2 (en) * | 2017-04-28 | 2020-10-27 | Tenstorrent Inc. | Processing core with metadata actuated conditional graph execution |
US10534881B2 (en) | 2018-04-10 | 2020-01-14 | Advanced Micro Devices, Inc. | Method of debugging a processor |
CN110545489A (zh) * | 2018-05-28 | 2019-12-06 | 中国电信股份有限公司 | 自适应流媒体的播放方法、系统及客户端 |
US11409530B2 (en) * | 2018-08-16 | 2022-08-09 | Arm Limited | System, method and apparatus for executing instructions |
GB2580165B (en) * | 2018-12-21 | 2021-02-24 | Graphcore Ltd | Data exchange in a computer with predetermined delay |
US20200264921A1 (en) * | 2019-02-20 | 2020-08-20 | Nanjing Iluvatar CoreX Technology Co., Ltd. (DBA "Iluvatar CoreX Inc. Nanjing") | Crypto engine and scheduling method for vector unit |
CN111831722A (zh) * | 2019-04-19 | 2020-10-27 | 安徽寒武纪信息科技有限公司 | 数据同步方法及装置以及相关产品 |
CN111782274B (zh) * | 2019-04-04 | 2023-03-31 | 安徽寒武纪信息科技有限公司 | 数据处理装置及相关产品 |
CN111831329B (zh) * | 2019-04-19 | 2022-12-09 | 安徽寒武纪信息科技有限公司 | 数据处理方法及装置以及相关产品 |
EP3825847B1 (en) * | 2019-04-04 | 2022-05-11 | Cambricon Technologies Corporation Limited | Data processing method and apparatus, and related product |
CN111782133A (zh) * | 2019-04-04 | 2020-10-16 | 安徽寒武纪信息科技有限公司 | 数据处理方法及装置以及相关产品 |
CN111782577B (zh) | 2019-04-04 | 2023-03-24 | 安徽寒武纪信息科技有限公司 | 数据处理装置及方法以及相关产品 |
CN111782267B (zh) * | 2019-04-04 | 2022-12-09 | 安徽寒武纪信息科技有限公司 | 数据处理方法及装置以及相关产品 |
CN111783992A (zh) * | 2019-04-04 | 2020-10-16 | 安徽寒武纪信息科技有限公司 | 数据处理装置及相关产品 |
KR20200142536A (ko) | 2019-04-04 | 2020-12-22 | 캠브리콘 테크놀로지스 코퍼레이션 리미티드 | 데이터 처리 장치 및 관련 제품 |
CN111831337B (zh) * | 2019-04-19 | 2022-11-29 | 安徽寒武纪信息科技有限公司 | 数据同步方法及装置以及相关产品 |
CN111857829A (zh) * | 2019-04-25 | 2020-10-30 | 安徽寒武纪信息科技有限公司 | 处理器操作方法及装置以及相关产品 |
CN111857828B (zh) * | 2019-04-25 | 2023-03-14 | 安徽寒武纪信息科技有限公司 | 处理器操作方法及装置以及相关产品 |
CN110377339B (zh) * | 2019-08-17 | 2024-03-01 | 中昊芯英(杭州)科技有限公司 | 长延时指令处理装置、方法以及设备、可读存储介质 |
CN110780922B (zh) * | 2019-10-22 | 2022-06-17 | 珠海格力电器股份有限公司 | 指令生成方法、装置、电子设备及存储介质 |
US11599481B2 (en) * | 2019-12-12 | 2023-03-07 | Western Digital Technologies, Inc. | Error recovery from submission queue fetching errors |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6275920B1 (en) * | 1998-04-09 | 2001-08-14 | Teranex, Inc. | Mesh connected computed |
US20050172105A1 (en) * | 2004-01-15 | 2005-08-04 | International Business Machines Corporation | Coupling a general purpose processor to an application specific instruction set processor |
CN101151589A (zh) * | 2005-01-13 | 2008-03-26 | Nxp股份有限公司 | 处理器及其指令发布方法 |
CN102282537A (zh) * | 2009-01-15 | 2011-12-14 | 牛郎星半导体有限公司 | 增强大指令宽度处理器的处理效率 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6292879B1 (en) * | 1995-10-25 | 2001-09-18 | Anthony S. Fong | Method and apparatus to specify access control list and cache enabling and cache coherency requirement enabling on individual operands of an instruction of a computer |
US5796974A (en) * | 1995-11-07 | 1998-08-18 | Advanced Micro Devices, Inc. | Microcode patching apparatus and method |
US6016395A (en) * | 1996-10-18 | 2000-01-18 | Samsung Electronics Co., Ltd. | Programming a vector processor and parallel programming of an asymmetric dual multiprocessor comprised of a vector processor and a risc processor |
US6477683B1 (en) | 1999-02-05 | 2002-11-05 | Tensilica, Inc. | Automated processor generation system for designing a configurable processor and method for the same |
JP3879350B2 (ja) * | 2000-01-25 | 2007-02-14 | 富士ゼロックス株式会社 | 構造化文書処理システム及び構造化文書処理方法 |
US20070118832A1 (en) | 2005-11-18 | 2007-05-24 | Huelsbergen Lorenz F | Method and apparatus for evolution of custom machine representations |
US20100153934A1 (en) | 2008-12-12 | 2010-06-17 | Peter Lachner | Prefetch for systems with heterogeneous architectures |
US9183614B2 (en) * | 2011-09-03 | 2015-11-10 | Mireplica Technology, Llc | Processor, system, and method for efficient, high-throughput processing of two-dimensional, interrelated data sets |
-
2016
- 2016-02-25 US US15/054,118 patent/US9898292B2/en not_active Expired - Fee Related
- 2016-04-20 CN CN201680011565.7A patent/CN107347253B/zh not_active Expired - Fee Related
- 2016-04-20 GB GB1715408.9A patent/GB2553442A/en not_active Withdrawn
- 2016-04-20 JP JP2017545214A patent/JP6894377B2/ja active Active
- 2016-04-20 KR KR1020177027109A patent/KR20180079224A/ko not_active Application Discontinuation
- 2016-04-20 WO PCT/IB2016/052248 patent/WO2016135712A1/en active Application Filing
- 2016-04-20 EP EP16720179.7A patent/EP3262503B1/en active Active
-
2018
- 2018-05-08 HK HK18105948.2A patent/HK1246444A1/zh unknown
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6275920B1 (en) * | 1998-04-09 | 2001-08-14 | Teranex, Inc. | Mesh connected computed |
US20050172105A1 (en) * | 2004-01-15 | 2005-08-04 | International Business Machines Corporation | Coupling a general purpose processor to an application specific instruction set processor |
CN101151589A (zh) * | 2005-01-13 | 2008-03-26 | Nxp股份有限公司 | 处理器及其指令发布方法 |
CN102282537A (zh) * | 2009-01-15 | 2011-12-14 | 牛郎星半导体有限公司 | 增强大指令宽度处理器的处理效率 |
Also Published As
Publication number | Publication date |
---|---|
GB201715408D0 (en) | 2017-11-08 |
KR20180079224A (ko) | 2018-07-10 |
EP3262503A1 (en) | 2018-01-03 |
EP3262503B1 (en) | 2020-03-04 |
WO2016135712A1 (en) | 2016-09-01 |
CN107347253A (zh) | 2017-11-14 |
GB2553442A (en) | 2018-03-07 |
US20160246599A1 (en) | 2016-08-25 |
JP6894377B2 (ja) | 2021-06-30 |
JP2018529132A (ja) | 2018-10-04 |
US9898292B2 (en) | 2018-02-20 |
HK1246444A1 (zh) | 2018-09-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107347253B (zh) | 用于专用处理器的硬件指令生成单元 | |
US20230359509A1 (en) | Programming Flow for Multi-Processor System | |
Auerbach et al. | A compiler and runtime for heterogeneous computing | |
EP2710467B1 (en) | Automatic kernel migration for heterogeneous cores | |
WO2013184380A2 (en) | Systems and methods for efficient scheduling of concurrent applications in multithreaded processors | |
Jo et al. | SOFF: An OpenCL high-level synthesis framework for FPGAs | |
Owaida et al. | Massively parallel programming models used as hardware description languages: The OpenCL case | |
Amiri et al. | FLOWER: A comprehensive dataflow compiler for high-level synthesis | |
Ohno et al. | A GPGPU programming framework based on a shared-memory model | |
Qadri et al. | Multicore Technology: Architecture, Reconfiguration, and Modeling | |
Gray et al. | Exposing non-standard architectures to embedded software using compile-time virtualisation | |
WO2022013887A1 (en) | Apparatus for implementing dynamic, data-dependent parallelism for task execution based on an execution model | |
Tseng et al. | Automatic data layout transformation for heterogeneous many-core systems | |
Stitt et al. | Thread warping: Dynamic and transparent synthesis of thread accelerators | |
Hascoet | Contributions to Software Runtime for Clustered Manycores Applied to Embedded and High-Performance Applications | |
Bragança et al. | Fast flow cloud: A stream dataflow framework for cloud FPGA accelerator overlays at runtime | |
Bailey et al. | Codesign experiences based on a virtual platform | |
Diamos | Harmony: an execution model for heterogeneous systems | |
Tagliavini | Optimization Techniques for Parallel Programming of Embedded Many-Core Computing Platforms | |
KHALILI MAYBODI | A Data-Flow Threads Co-processor for MPSoC FPGA Clusters | |
Calore et al. | Design and optimizations of lattice Boltzmann methods for massively parallel GPU-based clusters | |
Yang et al. | Accelerating thread-intensive and explicit memory management programs with dynamic partial reconfiguration | |
CN118043786A (zh) | 多传递性能剖析 | |
Ding | Exploiting Hardware Abstraction for Parallel Programming Framework: Platform and Multitasking | |
Ilvonen et al. | PATC Course: Introduction to Accelerators@ CSC (2014) |
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 | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 1246444 Country of ref document: HK |
|
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20210706 |
|
CF01 | Termination of patent right due to non-payment of annual fee |