CN109213524A - 用于难预测分支的预测器 - Google Patents

用于难预测分支的预测器 Download PDF

Info

Publication number
CN109213524A
CN109213524A CN201810712208.4A CN201810712208A CN109213524A CN 109213524 A CN109213524 A CN 109213524A CN 201810712208 A CN201810712208 A CN 201810712208A CN 109213524 A CN109213524 A CN 109213524A
Authority
CN
China
Prior art keywords
branch
processor
htp
instruction
field
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
CN201810712208.4A
Other languages
English (en)
Inventor
S·J·塔沙
G·凯斯金
G·N·什雅
王宏
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.)
Intel Corp
Original Assignee
Intel Corp
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
Application filed by Intel Corp filed Critical Intel Corp
Publication of CN109213524A publication Critical patent/CN109213524A/zh
Pending legal-status Critical Current

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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
    • 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/30072Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • G06N3/084Backpropagation, e.g. using gradient descent
    • 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
    • G06F9/30058Conditional branch 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • 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/3017Runtime instruction translation, e.g. macros
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3848Speculative instruction execution using hybrid branch prediction, e.g. selection between prediction techniques
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Health & Medical Sciences (AREA)
  • Biomedical Technology (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Biophysics (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • Computational Linguistics (AREA)
  • Artificial Intelligence (AREA)
  • Mathematical Physics (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Image Analysis (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

本申请公开了用于难预测分支的预测器。一种处理器,包括:执行单元,所述执行单元包括分支电路系统;分支预测器,所述分支预测器包括用于标识难预测(HTP)分支的HTP分支过滤器;以及特殊分支预测器,用于从所述HTP分支过滤器接收对HTP分支的标识,所述特殊分支预测器包括用于预测针对所述HTP分支的分支动作的卷积神经网络(CNN)分支预测器。

Description

用于难预测分支的预测器
技术领域
本公开总体上涉及半导体器件领域,并且更具体地但不排他地涉及一种用于 预测难预测(hard to predict)分支的系统和方法。
背景技术
多处理器系统正变得越来越普遍。在现代世界中,计算资源在人类生活中扮 演着越来越综合的角色。随着计算机变得越来越无处不在,控制着从电网到大型工业 机器到个人计算机到灯泡的一切,对功能更强大的处理器的需求也随之增加。
附图说明
当结合附图阅读时,将最佳地根据以下具体实施方式来理解本公开。应强调 的是,根据行业中的标准实践,各种特征不必按比例绘制,并且仅用于说明的目的。 当明确地或隐含地示出了比例时,其仅仅提供了一个说明性示例。在其他实施例中, 为讨论清楚起见,可以任意地扩大或缩小各种特征的尺寸。
图1是根据本说明书的一个或多个示例的分支预测器的所选元件的框图。
图2是数学流程图,展示了根据本说明书的一个或多个示例的双层卷积神经 网络(CNN)。
图3是框图,展示了根据本说明书的一个或多个示例的将CNN应用于分支 预测问题。
图4是根据本说明书的一个或多个示例的训练集的框图图示。
图5是根据本说明书的一个或多个示例的分支预测器模型的框图。
图6和图7是根据本说明书的一个或多个示例的CNN分支预测器的框图。
图8是根据本说明书的一个或多个示例的特殊分支预测设备和方法的框图。
图9a和图9b是框图,展示了根据本说明书的一个或多个示例的通用向量友 好指令格式及其指令模板。
图10a至图10d是框图,展示了根据本说明书的一个或多个示例的示例特定 向量友好指令格式。
图11是根据本说明书的一个或多个示例的寄存器架构的框图。
图12a是框图,展示了根据本说明书的一个或多个示例的示例有序流水线和 示例寄存器重命名乱序发布/执行流水线两者。
图12b是框图,展示了根据本说明书的一个或多个示例的待包括在处理器中 的有序架构核的示例和示例寄存器重命名乱序发布/执行架构核两者。
图13a和图13b展示了根据本说明书的一个或多个示例的更特定的有序核架 构的框图,所述核将是芯片中的多个逻辑块(包括相同类型和/或不同类型的其他核) 之一。
图14是根据本说明书的一个或多个示例的可以具有多于一个核、可以具有 集成存储器控制器、并且可以具有集成图形的处理器的框图。
图15至图18是根据本说明书的一个或多个示例的计算机架构的框图。
图19是根据本说明书的一个或多个示例的对照使用软件指令转换器将源指 令集中的二进制指令转换成目标指令集中的二进制指令的框图。
具体实施方式
以下公开提供了用于实施本公开的不同特征的许多不同实施例或示例。以下 描述了组件和安排的具体示例以便简化本公开。当然,这些仅仅示例并且不旨在是限 制性的。进一步地,本公开在各个示例中可以重复参考标记和/或字母。这种重复是 为了简单和清晰的目的,并且本身并不指定所讨论的各个实施例和/或配置之间的关 系。不同实施例可以具有不同优点,并且不一定需要任何实施例都具有特定优点。
分支预测是当代微处理器性能的关键贡献因素。在分支误预测的情况下,甚 至是具有高能力流水线和大型高速缓存的非常快速的微处理器都可能接近陷入停顿。 分支误预测可能中断程序流,导致必须对流水线进行重置,可能导致必须从缓慢的主 存储器重新填充高速缓存,并且可能具有其他性能影响。
对于许多类型的条件分支,现有硬件分支预测器实现很高的准确度。这种准 确度可以为大约98%到99%或更好。然而,传统分支预测器的模式识别机制对难预测 (HTP)分支的某个子集系统地表现不佳。这些HTP分支可能由例如造成用于分支 预测的历史数据的高度变化的程序结构引起。这些HTP分支对于如局部模式匹配 (partial patternmatching)分支预测器等传统分支预测器而言是困难的,因为那些分 支预测器可能基于识别捕获位置相关性的也被称为感知机的正合序列。
因为甚至是1%到2%的分支误预测都可能在微处理器中引起严重的性能损 失,所以有利的是提供如特殊分支预测器等补充分支预测电路系统,所述补充分支预 测电路系统提供集中于某些类型的HTP分支预测的算法。特殊分支预测器可以直接 设置在处理器硬件中,在微代码中,可以在补充软件中实施,或者可以编码在如现场 可编程门阵列(FPGA)、专用集成电路(ASIC)或协处理器等硬件加速器内。
在某些实施例中,可以使用HTP分支过滤器来对分支序列进行过滤以判定 分支是应当由可能使用如局部模式匹配(PPM)等传统方法的主线分支预测器进行预 测,还是应当被发送到可能使用更复杂的分支预测算法的特殊分支预测器。本说明书 的示例包括使用卷积神经网络(CNN)来对HTP分支执行更好的分支预测的特殊分 支预测器。
一般而言,分支预测器的工作方式为对分支历史数据执行模式识别并且调节 根据所观察程序状态选择某一分支的可能性。这种分支预测器的实施例可以既包括学 习以训练运行时间统计数据的数据模型,又包括进行推断以根据此模型生成新预测。 成功的分支预测器可以相对于在流水线的前端处操作的数据、存储装置和计算约束而 使两种功能的准确度平衡。
采用例如PPM的高度调整和优化的主线分支预测器能够预测大约98%到99% 或更好的分支。然而,剩余的1%到2%的分支误预测可能引起显著的性能影响,因为 可能需要对整个执行流水线进行转储,并且损失与机器宽度和误预测成本成比例地增 大。
因此,本文所述的特殊分支预测器可以提供可以使用CNN来提高对HTP分 支的准确度的辅助功能。CNN可用于从有噪声的高度变化数据中捕获模式。CNN分 层级地将下层处的敏感模式匹配中的位置与高层处的位置特定匹配进行组合以提高 对如模式移位等数据变化的容忍度。变量迭代计数循环内部的条件语句或如开关语句 等其他程序结构可能在历史数据内引起这种变化并且因此产生HTP分支。因此,可 以使用CNN、然后通过PPM对这种结构中的某些结构进行更仔细的建模。
本说明书的特殊分支预测器被配置成在高性能使用情况下增强主线或基线 预测器。在应用跨几千台机器执行几千次的高性能计算(high-performance computing, HPC)中,这是特别相关的。在可以在大量异构计算装置上运行多次的广泛分布的软 件的情况下,这也是有用的。本说明书的实施例在运行时间数据中标识HTP分支, 将其历史数据流式传输到在一些情况下可以被具体化在协处理器或FPGA中的特殊 分支预测器,并且训练特殊分支预测器中的CNN。特殊分支预测器然后可以根据经 训练的网络计算辅助预测器元数据并且高速缓存和重新使用结果以实现专用性能提 升。
本发明的特殊分支预测器的某些实施例可能需要从路径历史得到程序计数 器(program counter,PC)值的少到七个最低有效位,由此使其对应用被加载在其处 以供执行的基础虚拟地址不可知。此外,可以对持续十亿条指令的轨迹保持预测增益, 由此展示出基于CNN的特殊分支预测器提取到稳定的预测模式。
训练模块可以离线于分支预测器而每难预测分支地训练CNN,并且然后将 容纳预先计算的网络响应的元数据分配给如协处理器或FPGA等芯片上特殊分支预 测器。训练模块可以针对这样的使用情况:稳定应用行为可以被离线地学习并且用于 改进大规模分布的二进制,由此随着时间推移并且跨许多不同系统摊销训练成本。如 上所述,当PC地址在训练期间被掩码为少到六个或七个最低有效位时,本说明书的 CNN可能对别名化有弹性,这使这种方法能够容忍应用执行之间的基础虚拟地址变 化,而无需进行再训练。在编程器修改源代码并释放新的二进制的情况下,可以重新 训练网络,并且可以更新元数据以提高应用性能。在一些情况下,可以在不需要专业 的程序分析知识的情况下使此过程自动化,并且此过程可以由例如微处理器供应商作 为服务而提供。
多层CNN可以以灵活的方式在分支历史数据中实施模式匹配。CNN在许多 位置中应用一小组经学习的过滤器(即,卷积地)以检测受到如位置移位等失真的关 键模式。相比而言,感知机可以学习分支的现有历史中较简单的位置相关的相关性。 这些感知机对不可线性分离的数据变化的容忍度较低。因此,在分支取决于感知机和 PPM预测器不能很好地预测的程序结构的情况下,如在分支前面是其迭代计数在整 个执行中发生变化从而使预测模式在全局历史数据中移位的循环时,CNN分支预测 器特别有用。
本说明书的分支预测器使用多层CNN,所述多层CNN被优化成使芯片上推 断可行,而无需在预测时间进行繁重的前端计算。具体地,当网络拓扑和权重精度在 训练期间受限时,可以预先计算卷积过滤器响应并使其流水线化以将稍后的芯片上预 测简化为单个二进制内积。
可以使用全精度后向传播连同二进制约束离线地训练1位CNN预测器的实 施例,如遵循以下四步程序:
1.在客户端工作负载中的基线预测器下标识候选HTP分支。
2.每HTP分支地建立历史数据训练集。
3.在专用平台上经由后向传播训练1位CNN预测器。
4.提取网络响应并且将其作为元数据上传到芯片上特殊分支预测器。
首先可以将承载预先计算的卷积过滤器响应和网络参数的元数据分配给客 户机并将其安装在专用于HTP分支的芯片上特殊分支预测器中,从而提供专用性能 提升。此训练和分配过程可以被自动化并且可以作为服务被提供给大规模执行性能敏 感二进制的客户端。
本说明书的CNN使用经学习的过滤器来实施多层卷积模式匹配以识别受到 有噪声数据内的失真和位置变化的模式。这种情形经常发生于传统PPM、感知机和 域特定预测器对其表现不佳的分支的很大一部分的历史数据中。
然而,CNN训练和推断两者的计算复杂性对于将完整CNN作为辅助预测器 实施在芯片上或FPGA中而言可能是个障碍。因此,本公开的实施例可以针对这样的 情况:可以针对单独的难预测分支而离线地训练CNN预测器,并且可以通过随着时 间的推移对大规模分布的应用进行持续的性能改进来摊销相关联成本。示例包括将分 支预测元数据与二进制绑定以实现专用IPC提升,或者对向数据中心中的许多机器部 署性能敏感障碍的顾客提供基于云的优化服务。
为了解决进行芯片上预测时的CNN推断的复杂性,本说明书的实施例提供 了由对数据编码、网络拓扑以及在网络训练期间强加的权重约束的特定选择引起的优 化。使用这些,可以从经训练的CNN中提取网络参数和预先计算的过滤器响应并将 其安装在单个芯片上特殊分支预测器中。在特定应用中可以仅针对HTP分支而调用 特殊分支预测器,并且特殊分支预测器可以使用少量逻辑和整数运算来产生代数地相 当于前馈CNN推断的预测。
这是有益的,因为已经发现CNN在视觉和音频分类任务中的准确度经常在 其参数的精度严重受限时才稍微降低。因此,本说明书的实施例提供了基于CNN的 分支预测器,所述分支预测器每HTP分支地需要芯片上存储装置的4,000个位并且仅 需要并行异或(XOR)、累加、移位、整数乘法以及减法运算以生成预测。
当根据相同的分支历史数据进行训练时,CNN可以执行高度灵活的模式匹 配。
附加的感知机预测器将全局历史位的端部维向量(例如,表示现有端部分支 的方向)与n x 1权重向量相乘,并且对结果进行阈值设定以进行预测。可以针对被 预测的每个分支而学习权重向量,并且权重向量捕获分支的全局历史及其方向的每个 位置中的位之间的统计相关性。
相比而言,本说明书的特殊分支预测器使用卷积来执行有意不敏感于历史数 据中的位置移位的模式匹配。这是因为普通程序结构自然地使模式在全局历史中移位, 例如,当变化的迭代循环可能使两个相关分支被全局历史中的不可预测数量的临时位 分离时。
现在将更具体地参照附图描述用于预测难预测分支的系统和方法。应当注意 的是,贯穿附图,可以重复某些参考标记以指示特定装置或块在附图内完全或基本上 一致。然而,这不旨在暗示所公开的各个实施例之间的任何特定关系。在某些示例中, 某类元件可以通过特定的参考标记(“小部件10”)引用,而所述类中的单独种类或 示例可以通过带有连字符号的标记(“第一特定小部件10-1”和“第二特定小部件10-2”) 引用。
以下附图中的某些附图详述了用于实施上述内容的实施例的示例架构和系 统。在一些实施例中,上述一个或多个硬件组件和/或指令如以下所详述的那样被仿 真或者被实施为软件模块。
在某些示例中,(多条)指令可以被具体化为以下详述的“通用向量友好指 令格式”。在其他实施例中,使用另一指令格式。以下对写掩码寄存器、各种数据变 换(混合、广播等)、寻址等的描述总体上适用于对以上(多个)指令的实施例的描 述。另外,在下文中详述了示例系统、架构和流水线。以上(多条)指令的实施例可 在这些系统、架构和流水线上执行,但是不限于所详述的系统、架构和流水线。
指令集可以包括一种或多种指令格式。给定的指令格式可定义各种字段(例 如,位的数量、位的位置)以指定将要执行的操作(例如,操作码)以及将对其执行 此操作的(多个)操作数和/或(多个)其他数据字段(例如,掩码),等等。通过定 义指令模板(或子格式)进一步分解一些指令格式。例如,给定指令格式的指令模板 可以被定义为具有指令格式的字段的不同子集(所包括的字段通常采用相同的顺序, 但是至少有一些具有不同的位位置,因为包括较少的字段)和/或被定义为具有不同 解释的给定字段。由此,ISA的每条指令都使用给定指令格式(并且如果被定义,则 采用此指令格式的指令模板中的给定一个指令模板)来表达并且包括用于指定操作和 操作数的字段。
在一个实施例中,示例ADD指令具有特定操作码和指令格式,所述指令格 式包括用于指定此操作码的操作码字段和用于选择操作数的操作数字段(源1/目的地 和源2);并且此ADD指令在指令流中出现将在选择特定操作数的操作数字段中具有 特定内容。
已经发布和/或公布了一组被称为高级向量扩展(AVX)(AVX1和AVX2) 并且使用向量扩展(VEX)编码方案的SIMD扩展(例如,参见《和IA-32 架构软件开发人员手册(64and IA-32Architectures Software Developer’s Manual)》,10014年9月;并且参见《高级向量扩展编程参考(Advanced Vector Extensions ProgrammingReference)》,10014年10月)。
示例指令格式
本文所述的(多条)指令的实施例可以被具体化为不同格式。另外,在下文 中详述了示例系统、架构和流水线。(多条)指令的实施例可以在这种系统、架构和 流水线上执行,但不限于所详述的系统、架构和流水线。
通用向量友好指令格式
向量友好指令格式是适用于向量指令的指令格式(例如,存在特定于向量运 算的某些字段)。虽然描述了通过向量友好指令格式支持向量运算和标量运算两者的 实施例,但是替代性实施例仅通过向量友好指令格式使用向量运算。
图1是根据本说明书的一个或多个示例的分支预测器100的所选元件的框图。 在图示中,分支预测器100包括HTP分支过滤器104。HTP分支过滤器104检查即 将到来的分支以判定所述分支是否应当被分类为HTP分支。如果所述分支不是HTP 分支,则可以根据如PPM或感知机等传统方法根据主线分支预测器112对所述分支 进行预测。
然而,如果所述分支被确定为HTP分支,则其可以被发送到特殊分支预测 器116。在一些实施例中,特殊分支预测器116可以是根据本文所述方法提供特殊分 支预测的协处理器或FPGA或者管芯上电路。具体地,特殊分支预测器116可以采用 本文所述的双层CNN方法。
图2是数学流程图,展示了根据本说明书的一个或多个示例的双层CNN。 在此示例中,输入历史数据204被提供给第1层卷积208,所述第1层卷积最终将其 结果提供给第2层二进制分类器212。
图2的CNN 200保持各自被称为二进制过滤器的多个一位精度权重向量并 且使用二进制内积来将所述向量与全局历史中的每个位置进行匹配。相比于权重值表 示分支之间的位置特定相关性的感知机公式,CNN 200的二进制过滤器被公式化为充 当位置不可知的模式检测器。在此模型中,检测结果被馈送到第二CNN层、具体地 第2层,以便进行捕获位置特定模式的二进制分类。
在此示例中,输入历史数据204包括P,其是指历史数据的m x n独热(1-hot) 矩阵。
在第1层208中,每个过滤器都被卷积地应用于历史中的所有端位置。在第 2层212中,根据所预测模式进行预测。
1位CNN 200可以利用输入的独热编码连同卷积和1位权重约束以减轻PPM 预测器可能需要的大存储空间,所述大存储空间可能随着可能输入的空间而成倍地增 长。CNN200将(PC,方向)对的长度为n的历史映射到m×n二进制矩阵的索引, 其中,如果标记i在历史j中出现,则1位于第(i,j)位置中,否则,零位于所述位 置中(即,具有独热列的矩阵)。由于与独热向量的内积产生单个非零值,所以可以 使用在m*L*1位表中查找此值来执行针对1二进制过滤器的所有第1层卷积。对 于具有b位整数权重的感知机,存储装置因此缩放O(m*L*1)而不是O(n*m*b), 其中,L远小于n并且1远小于b。
这种简化特定于CNN 200中存在的独热编码、卷积和1位权重约束的组合, 并且使得有可能使用以下讨论的计算连同合理的芯片上存储需求来加速预测。具体地, 为了对(PC,方向)对的同一历史执行模式匹配,差异在于CNN可以将存储装置的 4,000个位用于长度为155的历史,每位置使用PC的9个最低有效位(LSB)和一个 方向位,相对于将952,320个位用于具有6位整数权重的传统感知机。
在CNN 200中,第1层卷积208的结果被馈送到第2层分类器212中被约 束成具有二进制输入权重的第二层sigmoid或softmax预测器。第2层212捕获第1 层过滤器响应当中的位置特定关系并且可以利用快速二进制内积计算。如下所述,由 于可以在数据到达时使针对第1层过滤器响应的表查找流水线化,所以预测最终可能 仅需要并行XOR、累加、移位、整数、乘法以及减法运算以计算第2层的响应并生 成新的预测。相比于在路径驱动的感知机中使整数内积流水线化可能需要的推测性累 加,此程序明显更简单并且更准确。
大多数分支误预测系统地出现。例如,以下代码片段展示了两个HTP分支:
虽然HTP 1是数据相关的,但是HTP 2与HTP 1的结果精确相关。两者都 被偏置在33%的时间被选择并且被具有可变数量迭代的循环分离。尽管HTP 1确保全 局历史包含HTP 2的预测模式,但是由所述循环在这些相关分支之间插入的不相关分 支使历史数据中的相对位置在每次需要对HTP 2的预测时发生变化。这是移位变化的 示例。理想地,在不具有关于数据值的附加信息的情况下,应当在至少66%的时间准 确地预测HTP 1,而应当100%准确地预测HTP 2。
然而,传统的分支预测器可能无法满足这些理想情况。尽管全局历史预测器 将HTP 2的统计数据存储在其历史表中的每一个中以捕获长度逐渐增大的序列,但是 在对随机化数据的10,000次函数调用内除了35个预测之外的所有预测都来自所述分 支的所估计偏置。在某些情况下,将HTP分离的多达十个不相关分支导致必须由预 测器记忆的唯一历史模式的爆发。
此代码样本中的变量迭代循环还限制了感知机预测器的有效性。如模式移位 等变化可能由常见程序结构自然地引起,并且这些可能破坏准确匹配和位置特定的数 据模型。在PPM的情况下,可能出现的模式的数量在最糟糕的情况下随着历史长度 而指数式地增长,由此降低所存储模式将积累确信统计数据并且被调用以生成预测的 可能性。根据表分配策略,这种数据还可能使大量非预测模式存储在全局表中。对于 如感知机等位置特定的预测器,移位变化阻止权重始终滤出噪声并保留预测相关性。
如上所述,本说明书的基于CNN的特殊分支预测器提供了用于在这种情况 下提供更好的分支预测的解决方案。
CNN的基本单元是神经元,所述神经元根据长度为N的实值输入向量xi与 权重向量(Wi,b)的线性组合而计算函数f:
对f的常见选择为sigmoid、tanh或者修正线性单元(rectified linear unit),并且可以每应用地选择f。一旦经过训练,权重向量就经常被称为特征或过滤器,因 为权重向量采取与从所述数据学习的有用模式相对应的值。
相比于仅包括单个神经元的感知机分支预测器,CNN从彼此上下堆叠的神 经元层获得其预测能力。在下层处,神经元权重被训练成产生很小的一组过滤器,所 述过滤器可以检测任何位置中的突出模式。过滤器具有l<<N的宽度,所述宽度与由 此神经元检测到的模式的大小相对应。在输入数据中的每个位置处开始,每个过滤器 都与l个输入值的集合卷积地匹配。在图4中展示了这一点。
池化操作和对f的非线性选择经常被应用于下层卷积过滤器响应以仅将强响 应传播至高层神经元,由此提高高层神经元对移位变化和混淆信息的容忍度。
例如,在之前的代码样本中,HTP 1与HTP 2由于变量迭代计数循环而被变 化数量的条件分支分离。这种程序结构由于必须被堆叠的大量可能序列而对PPM预 测器构成挑战。单一感知机预测器还进行竞争,因为这些HTP的位置变化阻止位置 特定的权重被调整成正确地捕获预测信号。
然而,当与HTP 1的PC的LSB以及所述HTP的方向相匹配时,本说明书 的CNN特殊分支预测器可以学习根据方程1产生大内积分数的卷积过滤器。因此, CNN的卷积层可以正确地标识预测模式,而不论所述预测模式出现在全局历史中的 什么地方,并且可以仅将此信息传播给更高级别。
CNN过滤器可以通过基于示例历史数据集以及所观察到的分支方向调整权 重和网络参数来进行训练。在示例中,可能存在经记录的多批分支历史数据,并且可 以使用后向传播算法来调整权重。可以通过首先选择层数量、过滤器大小以及神经元 类型来每HTP地使网络实例化。然后,一个实施例可以随机地初始化权重并且运行 随机梯度下降、即后向传播的实施方式,以迭代地更新参数值直到顶层的预测准确度 收敛。结合图5和图6更具体地展示了这一点。
图3是框图,展示了根据本说明书的一个或多个示例的将CNN应用于分支 预测问题。
即使是在神经元权重被约束为取值为+1或-1的仅一个位时,CNN也可以提 供极好的模式识别。通过使用逻辑运算来代替浮点算术,结果可以大大简化针对经训 练CNN的推断,同时仅牺牲中等的准确度下降。{-1,+1}N向量之间的二进制内积可 以通过对其位进行XOR、计算填充计数(popcount)、电平移位以及整数减法来进行 计算。
在训练期间,可以通过以下方式强加二进制约束:保持全精度网络,但代数 地确保其将在权重被量化时产生相同的预测。在训练的前向道次期间,网络错误被计 算为好像权重是二进制的;然后,在后向道次期间可以根据此错误调整权重。
因为后向传播使用小步长朝着收敛点调整权重值,所以在训练期间可以使用 网络的高精度版本。因此,本说明书的实施例假设二进制CNN是离线于如图5所示 的其中可以执行高精度计算的基线预测器单元而进行训练的。一旦经过训练,网络就 可以被简化成在分支预测器单元(branch predictor unit,BPU)内执行快速推断。
训练1位CNN预测器
可以每HTP分支地训练CNN预测器,并且在一些实施例中,CNN预测器 采用全精度后向传播。可以离线于分支预测器单元而实施训练,并且结果可以上传到 芯片上特殊分支预测器。训练过程的实施例可以包括以下四种操作:
1.标识候选难预测分支。
2.建立用于后向传播的训练数据集。
3.使用后向传播连同二进制权重约束来训练CNN预测器。
4.提取网络响应并且上传到芯片上特殊分支预测器。
以下在这四种操作中的每一种操作自己的副标题中通过示例的方式描述了 所述操作。
标识候选难预测分支
在一个实施例中,HTP分支被定义为每3千万条指令产生多于1,000个误预 测的分支,或者在基线预测器下以小于99%的准确度被预测的分支。
可以使用客户机上的附加仪器或者离线地通过在模拟器或虚拟机上重放二 进制来完成对这些分支的筛选。
还可以对候选HTP分支进行筛选以确保需要至少15,000个分支执行的训练 集。这是对具有八个二进制过滤器的1位CNN预测器在后向传播期间进行收敛所需 的数据量的保守估计,并且在一些实施例中这是通过经验建立的。
建立用于后向传播的训练数据集
后向传播采用分支历史训练集连同分支结果。在一个示例中,针对一直通往 所研究HTP分支的每个分支而记录(PC,方向)对的序列。每个序列都可以具有参 数化长度N,例如,155。还记录了HTP分支的方向。为了将历史数据编码成适合于 CNN的输入,训练模块可以将输入值映射到独热向量。
此历史中的每个值都可以由其尺寸与可能的唯一输入值的数量成比例的向 量表示。所述向量在索引到相应输入值的位置中包含1,并且否则,包含零。
图4是根据本说明书的一个或多个示例的训练集的框图图示。在图4的示例 中,示出了长度为5的历史序列,包括PC的一些最低有效位以及用于选择(taken) 或不选择(nottaken)的标记。这些输入针对23条目表而被量化。量化输入的独热代 数表示然后被记录。
在编码期间,训练模块对历史值进行掩码以控制独热向量的最大尺寸,以及 最终地在芯片上保持预先计算的值所需的存储装置。这种掩码程序还提供了对执行之 间的程序的基础虚拟地址变化的容忍度,而无需进行再训练。对于每个(PC,方向) 对,训练器将PC的(b-1)个最低有效位与相关联的1位方向(0:不选择;1:选择) 连结。输入历史数据中的每个值都因此被编码为2b×1向量,其中,1位于第(PC和 (2b-1)+方向)位置中,并且否则,零位于所述位置中。
一直通往HTP分支的长度为155的输入历史序列因此被表示为1位值的 (2bx155)维矩阵。此程序保证历史数据中的所有元组都可以映射到最终查找表中的 2b个条目之一。
使用后向传播连同二进制权重约束来训练CNN预测器
对于每个HTP分支,训练器可以将其训练数据集传递到专用于CNN预测器 训练的平台。通过非限制性示例的方式,此平台可以是客户机上的协处理器或者云环 境中的专用服务器。
在训练平台上,训练器使用随机梯度下降(stochastic gradient descent,SGD)连同网络权重和激活必须使用1位精度的附加约束来执行标准后向传播。在一个实施 例中,可以使用针对GPU加速的后向传播的开源工具连同二进制约束来实施训练。
在一些实施例中,训练器可以将网络拓扑约束为仅允许二进制N-D卷积作 为最低网络层,因为其使推断计算能够被流水线化。线性层不实现这种流水线化并且 因此仅用于网络的上层。最终层分类器可以在训练期间被实施为标准全精度分类器 (例如,sigmoid或softmax)。由于流向分类器的值被保证为是整数,所以可以在芯 片上使用整数运算来接近地近似分类计算。一个实施例在每个层之间实施阈值设定、 批归一化以及量化单元以保持用于训练的全精度网络与用于推断的最终1位CNN之 间的相当性。可以使用具有四个卷积过滤器的示例双层网络。
提取网络响应并且将元数据传到芯片上特殊预测器
一旦网络已经经过训练,就可以利用数据编码来预先计算卷积层的值,以及 最终层分类进行预测所需的参数。
通过非限制性示例的方式,被提取并上传到芯片上特殊预测器的元数据可以 包括:
·由掩码成m个位的(PC,方向)对索引到的m×L表,其中,每个条目都包含L个 1位卷积过滤器响应
·用于历史长度n的两个L×n位第2层二进制过滤器
·在第2层二进制内积中使用的两个整数常数
·用于根据第2层过滤器响应计算预测的两个缩放常数。
尽管在网络公式中所有过滤器都通过值-1/+1进行代数表示,但是所述过滤 器可以存储在芯片上作为具有值0或1的单独位,并且适当的代数调整可以列入内积 计算中。
预先计算的第1层过滤器表可以根据以下公式来进行填充(根据x_bar=γ1 *(x–μ1)/Σ1 21采用第1层后归一化单元的经学习参数)
bool(fj(i)+cj>=thresh1)
for j=1…L;i=1…2m
其中,经学习的偏置常数c和阈值1=上限(Σ1*(-β1)/γ1)+μ1
用于将归一化、阈值设定以及二进制内积缩减(collapse)为尽可能少的计 算的第2层常数由下式给出:
pred add选择=round(-(μ选择×σtaken)+β选择
最终,在给定经学习的第2层过滤器h选择和h不选择以及偏置常数c选择和cnottaken的情况下,缩放常数为:
图5是根据本说明书的一个或多个示例的分支预测器模型的框图。在此实施 例中,分支预测器模型包括协处理器504和分支预测单元(BPU)502。在图5的模 型中,可以假设HTP是从运行时间数据中标识出来的,因为历史数据被流式传输到 协处理器504以供训练。通过示例的方式,此模型可以用于每HTP地训练单个CNN 并且高速缓存结果。网络参数然后可以被加载到BPU 502中以提供专用提升连同如主 线分支预测器112等基线预测器。因此,应当理解的是,在某些实施例中,图5的 BPU 502可以是图1的特殊分支预测器116的实施例。
在一个非限制性示例中,软件包或基准的第一1亿条指令被筛选以标识HTP。 可以在工作负荷中的任何点处发现HTP。然而,在此实施例中,筛选范围被限制成使 固定长度轨迹中可用的评估数据的量最大化。
对于在第一1亿条指令中标识出的每个HTP,从整个工作负荷中收集历史数 据,包括现有200个条件分支的方向和PC值。
对于独热历史编码,用于训练的每个输入样本都作为一直通往HTP取出指 令的原始全局路径历史数据序列而开始。由200个组成的序列中的每个条目都包含 (PC,方向)对,所述对可以被转换为待馈送到CNN的向量。因为PC是离散的并 且可能取大量可能值,所以历史中的每个值都可以映射到固定尺寸的独热向量。例如, 根据2b=1024设定尺寸,可以将方向位连结到PC的b-1个LSB上,并且可以将1置 于2b×1维向量的位置(PC<<1)+Dir∧(b-1)中,并且否则,将零置于所述位置中。
通过将这些列向量安排成矩阵,长度为200的历史可以被转换成表示单个训 练样本的2b×200矩阵。尽管矩阵大小相对很大,但是在推断期间可以优化掉临时数 据表示。
参照图5,在块508中具体化了在之前段落中描述的HTP跟踪和数据收集操 作。这些操作可以作为训练数据集520而提供给协处理器504。如之前段落所述,网 络训练块524可以对训练数据集执行训练。
在块528中,执行对训练数据的二进制化,并且执行预先计算。
在块532中,创建特殊分支预测器元数据高速缓存,并且将其提供给可配置 的特殊预测器516。
基线预测器512可以使用可配置的特殊预测器516来执行实时分支预测。
图6和图7是根据本说明书的一个或多个示例的CNN分支预测器的框图。
图6展示了所谓的全精度CNN实施方式。虽然全精度CNN实施方式提供 了最高的可能预测准确度,但是在一些实施例中,在真实系统中实施全精度CNN预 测器可能不可行。因此,在图7中公开了根据本说明书一个或多个示例的简化分支预 测器CNN。虽然图7的简化分支预测器可能具有比图6的全实施方式更低的总体精 度,但是仍可以实现接近相同的分支预测准确度。
图6的全精度CNN具有32位浮点权重并且根据此图所示的布局进行配置。 这包括各自具有32个过滤器的两个卷积层604。第一卷积层具有过滤器长度1,并且 第二层具有过滤器长度3。
然后,池化层包括成对最大608。最大池化层在历史数据中的相邻位置上采 取最大过滤器响应。
在这之后是具有16个神经元612的线性层,每个神经元都能够锁存到下层 过滤器响应中的不同模式。
最终层是二进制滤波器,在此示例中,所述二进制滤波器是具有一个神经元sigmoid 616的sigmoid分类器。这使用网络响应来计算0与1之间的值,其中,所有 超过0.5的值都对应于“选择”预测。在此实施例中,除了分类层之外,在网络中使 用针对所有神经元的tanh激活函数。
图7展示了对于在某些实施例中实施处理器、协处理器、FPGA或其他特殊 分支预测器而言可能更加实际的简化CNN分支预测器。此实施例的特征在于如块704 中所示的具有过滤器长度1和二进制权重的单个卷积层。这可以包括不具有偏置项的 8与32个过滤器之间。接下来是具有用于将响应缩放和量化为一个位的块708的归 一化层和二进制化层。
二进制线性层包括不具有偏置项的单个神经元710,随后是归一化块712, 其中,结果直接馈送到具有单神经元sigmoid 716的二进制分类器层中。
在图7的实施例中,通过非限制性示例的方式,卷积层和线性层中的偏置项 被禁用。因为输入向量也是二进制的,所以此网络非常像XOR网。网络权重可以以 全精度进行训练并且在训练之后被量化以便进行推断。
图8是根据本说明书的一个或多个示例的特殊分支预测设备和方法的框图。
图8的特殊分支预测器的优点在于:一旦经过训练,其推断计算就可以被简 化成拟合芯片上BPU的约束。注意,{-1,+1}N向量之间的内积可以被实施为应用于相 应{0,1}N表示的XOR、填充计数、移位以及减法运算。因此,通过非限制性示例的方 式,此设计采用三种优化:
1.当独热向量与过滤器相乘时,结果总是为与非零值的位置相对应的过滤器系 数。由于可以通过从(PC,方向)值索引到独热输入向量来对数据进行编码,所以 矩阵表示可以代替芯片上的表查找。使用这种方法,可以通过直接从历史数据索引到 卷积过滤器权重表来实施网络的第一层。此外,随后的归一化和二进制化操作针对每 个可能的过滤器权重而产生单个位,由此,在填充查找表时,可以提前针对那些层而 预先计算结果。对于长度为2b的被表示为wj其中j=1...m的m个过滤器,以及根据 下式变换数据的归一化层的经学习参数μ1、σ1、γ1、β1:
将2b×m位表T填充为:
for i=1…b,j=1…m
此表的内容是将在BPU中高速缓存的元数据的第一部分。
b.当应用长度为1的卷积时,输入序列中的每个位置的过滤器响应独立于其邻 居。因此,这允许分支预测器在HTP被取出之前很久计算下层响应(在卷积、归一 化和二进制化之后的值)。当执行条件指令时,相应下层响应可以从查找表中检索到 并且被推入到先进先出(first in,first out,FIFO)缓冲器中。FIFO缓冲器包含在任何 给定时间对例如200个分支的全局历史的响应。当HTP被取出并且需要预测时,缓 冲器内容可以直接馈送到较高网络层以计算预测。
c.为了生成预测,分支预测器可以评估二进制线性、归一化以及sigmoid分类 器层。分别地,这可能需要FIFO缓冲器的二进制内容与二进制线性层的权重之间的 内积,按照经学习的归一化参数对所产生的整数值进行缩放和移位,并且最终将结果 与0.5进行比较以判定分支将被“选择”还是“不选择”。然而,通过将对二进制内 积的最后移位和减法运算折叠成归一化公式,并且求解sigmoid阈值的交叉点,分支 预测器可以计算单个整数阈值以代替这些运算。因此,预测运算被简化为对二进制内 积的前两个运算:并行XOR、填充计数、以及整数比较。在给定经学习的归一化参 数、长度为200x m的FIFO缓冲器的情况下,并且在注意到对于输入0,sigmoid函 数与0.5相交的情况下,可以通过求解下式来计算阈值t:
图8展示了与BP-CNN辅助预测器相对应的芯片上推断。这展示了执行分支 预测的四阶段过程。
在操作1处,包括具有(PC,方向)对的全局历史的数据到达下层响应表 804。
在操作2处,将结果推入到将保持卷积结果的FIFO缓冲器812中。
在操作3处,当HTP被取出时,对缓冲器内容与1位二进制线性层权重808 进行XOR。然后对所产生的一的数量进行计数。
在操作4处,将一的总和816与阈值820进行比较。与阈值进行的这种比较 产生分支被选择或不选择的预测。
芯片上CNN分支预测器的设计的实施例可以包括针对四个组件的存储装置:
1.用于保持过滤器响应的2b×m位表。
2.用于保持卷积结果的历史长度×m位FIFO缓冲器。
3.用于保持二进制线性层权重的历史长度×m位缓冲器。
4.用于保持预先计算的整数阈值的缓冲器。
因此,存储装置可以由输入值映射2b的大小、网络中的卷积过滤器数量m以 及历史长度驱动。例如,其中b=8,m=32并且历史长度为200的CNN所需的存储 装置为20,992个位。当m减小为24时,存储装置为15,744个位。对于m=12,存储 装置为7,872个位。
进一步地,已经通过分析发现HTP经常出现在不同的工作负荷阶段中。这 提供了随着时间推移而重新使用CNN存储装置的机会。例如,特定工作负荷可能具 有四个HTP,其中,仅两个一直在同一工作负荷阶段中执行。这允许分支预测器将芯 片上所需的存储装置的量分成两半。
图9a-9b是示出根据本说明书的各实施例的通用向量友好指令格式及其指令 模板的框图。图9a是示出根据本说明书的实施例的通用向量友好指令格式及其A类 指令模板的框图;而图9b是示出根据本说明书的实施例的通用向量友好指令格式及 其B类指令模板的框图。具体而言,为通用向量友好指令格式900定义了A类和B 类指令模板,这两类指令模板都包括无存储器访问905指令模板和存储器访问920指 令模板。在向量友好指令格式的上下文中的术语“通用”指不束缚于任何专用指令集的 指令格式。
将描述其中向量友好指令格式支持以下情况的本说明书的实施例,即:64 字节向量操作数长度(或尺寸)与32位(4字节)或64位(8字节)数据元素宽度 (或尺寸)(并且由此,64字节向量由16个双字尺寸的元素或者替代地8个四字尺 寸的元素组成);64字节向量操作数长度(或尺寸)与16位(2字节)或8位(1字 节)数据元素宽度(或尺寸);32字节向量操作数长度(或尺寸)与32位(4字节)、 64位(8字节)、16位(2字节)、或8位(1字节)数据元素宽度(或尺寸);以及 16字节向量操作数长度(或尺寸)与32位(4字节)、64位(8字节)、16位(2字节)、或8位(1字节)数据元素宽度(或尺寸);替代实施例可支持更大、更小、和 /或不同的向量操作数尺寸(例如,256字节向量操作数)与更大、更小或不同的数据 元素宽度(例如,128位(16字节)数据元素宽度)。
图9a中的A类指令模板包括:1)在无存储器访问905的指令模板内,示出 无存储器访问的完全舍入控制型操作910的指令模板以及无存储器访问的数据变换 型操作915的指令模板;以及2)在存储器访问920的指令模板内,示出存储器访问的 时效性的925的指令模板和存储器访问的非时效性的930的指令模板。图9b中的B 类指令模板包括:1)在无存储器访问905的指令模板内,示出无存储器访问的写掩码 控制的部分舍入控制型操作912的指令模板以及无存储器访问的写掩码控制的VSIZE 型操作917的指令模板;以及2)在存储器访问920的指令模板内,示出存储器访问的 写掩码控制927的指令模板。
通用向量友好指令格式900包括下文中按照图9a-9b中所示出的顺序列出的 下列字段。
格式字段940——该字段中的特定值(指令格式标识符值)唯一地标识向量 友好指令格式,并且由此标识指令在指令流中以向量友好指令格式出现。由此,该字 段对于仅具有通用向量友好指令格式的指令集是不需要的,在这个意义上该字段是任 选的。
基础操作字段942——其内容区分不同的基础操作。
寄存器索引字段944——其内容直接或者通过地址生成来指定源和目的地操 作数在寄存器中或者在存储器中的位置。这些字段包括足够数量的位以从PxQ(例如,32x512、16x128、32x1024、64x1024)个寄存器堆中选择N个寄存器。尽管在一个实 施例中N可高达三个源和一个目的地寄存器,但是替代实施例可支持更多或更少的源 和目的地寄存器(例如,可支持高达两个源,其中这些源中的一个源还用作目的地, 可支持高达三个源,其中这些源中的一个源还用作目的地,或者可支持高达两个源和 一个目的地)。
修饰符(modifier)字段946——其内容将指定存储器访问的以通用向量指 令格式出现的指令与不指定存储器访问的以通用向量指令格式出现的指令区分开;即 在无存储器访问905的指令模板与存储器访问920的指令模板之间进行区分。存储器 访问操作读取和/或写入到存储器层次(在一些情况下,使用寄存器中的值来指定源 和/或目的地地址),而非存储器访问操作不这样(例如,源和/或目的地是寄存器)。 尽管在一个实施例中,该字段还在三种不同的方式之间选择以执行存储器地址计算, 但是替代实施例可支持更多、更少或不同的方式来执行存储器地址计算。
扩充操作字段950——其内容区分除基础操作以外还要执行各种不同操作中 的哪一个操作。该字段是针对上下文的。在本说明书的一个实施例中,此字段被划分 为类字段968、α字段952以及β字段954。扩充操作字段950允许在单条指令而非2 条、3条或4条指令中执行多组共同的操作。
比例字段960-其内容允许用于存储器地址生成(例如,用于使用2比例* 索引+基址的地址生成)的索引字段的内容按比例缩放。
位移字段962A-其内容用作存储器地址生成的部分(例如,用于使用2比 例*索引+基址+位移的地址生成)。
位移因数字段962B(注意,位移字段962A直接在位移因数字段962B上的 并置指示使用一个或另一个)-其内容用作地址生成的一部分,它指定通过存储器访 问的尺寸(N)按比例缩放的位移因数,其中N是存储器访问中的字节数量(例如, 用于使用2比例*索引+基址+按比例缩放的位移的地址生成)。忽略冗余的低阶位, 并且因此将位移因数字段的内容乘以存储器操作数的总尺寸(N)以生成在计算有效 地址时所使用的最终位移。N的值由处理器硬件在运行时基于完整操作码字段974(稍 后在本文中描述)和数据操纵字段954C确定。位移字段962A和位移因数字段962B 不用于无存储器访问905指令模板,和/或不同的实施例可以实现仅一者或两者都不 实现,从这个意义上说,位移字段962A和位移因数字段962B是任选的。
数据元素宽度字段964——其内容区分将使用多个数据元素宽度中的哪一个 (在一些实施例中,用于所有指令;在其他实施例中,用于指令中的仅一些)。如果 支持仅一个数据元素宽度和/或使用操作码的某一方面来支持数据元素宽度,则该字 段是不需要的,在这个意义上该字段是任选的。
写掩码字段970——其内容在每一数据元素位置的基础上控制目的地向量操 作数中的数据元素位置是否反映基础操作和扩充操作的结果。A类指令模板支持合并 -写掩码操作,而B类指令模板支持合并-写掩码操作和归零-写掩码操作两者。当合并 时,向量掩码允许在执行任何操作期间保护目的地中的任何元素集免于更新(由基础 操作和扩充操作指定)——在一个实施例中,保持其中对应掩码位具有0的目的地的 每一元素的旧值。相反,当归零时,向量掩码允许在执行任何操作期间使目的地中的 元素的任何集合归零(由基础操作和扩充操作指定),在一个实施例中,目的地的元 素在对应掩码位具有0值时被设为0。该功能的子集是控制执行的操作的向量长度的 能力(即,从第一个到最后一个要修改的元素的跨度),然而,被修改的元素不一定 要是连续的。如此,写掩码字段970允许部分向量操作,包括加载、存储、算术、逻 辑等等。尽管描述了其中写掩码字段970的内容选择多个写掩码寄存器中的包含要使 用的写掩码的一个写掩码寄存器(并且由此,写掩码字段970的内容间接地标识了要 执行的掩码操作)的本说明书的多个实施例,但是替代地或附加地,替代实施例允许 掩码写字段970的内容直接地指定要执行的掩码操作。
立即数字段972——其内容允许对立即数的指定。该字段在实现不支持立即 数的通用向量友好格式中不存在且在不使用立即数的指令中不存在,在这个意义上该 字段是任选的。
类字段968——其内容在不同类的指令之间进行区分。参考图9a-9b,该字 段的内容在A类和B类指令之间进行选择。在图9a-9b中,使用圆角方形来指示在字 段中存在专用值(例如,在图9a-9b中,分别是针对类字段968的A类968A和B类 968B)。
A类指令模板
在A类非存储器访问905的指令模板的情况下,α字段952被解释为RS字 段952A,其内容区分将执行不同的扩充操作类型中的哪一种(例如,分别为无存储 器访问的舍入型操作910以及无存储器访问的数据变换型操作915指令模板指定的舍 入952A.1和数据变换952A.2),而β字段954区别将执行指定的类型的操作中的哪一 个。在无存储器访问905的指令模板中,比例字段960、位移字段962A以及位移比 例字段962B不存在。
无存储器访问的指令模板——完全舍入控制型操作
在无存储器访问的完全舍入控制型操作910指令模板中,β字段954被解释 为舍入控制字段954A,其内容提供静态舍入操作。尽管在本说明书的所描述的实施 例中,舍入控制字段954A包括抑制所有浮点异常(SAE)字段956和舍入操作控制 字段958,但是替代实施例可以将这两个概念编码为同一个字段,或仅具有这些概念 /字段中的一个或另一个(例如,可以仅具有舍入操作控制字段958)。
SAE字段956——其内容区分是否停用异常事件报告;当SAE字段956的 内容指示启用抑制时,给定指令不报告任何种类的浮点异常标志且不唤起任何浮点异 常处理程序。
舍入操作控制字段958——其内容区分执行一组舍入操作中的哪一个(例如, 向上舍入、向下舍入、向零舍入、以及就近舍入)。如此,舍入操作控制字段958允 许逐指令地改变舍入模式。在其中处理器包括用于指定舍入模式的控制寄存器的本说 明书的一个实施例中,舍入操作控制字段950的内容优先于该寄存器值。
无存储器访问的指令模板——数据变换型操作
在无存储器访问的数据变换型操作915指令模板中,β字段954被解释为数 据变换字段954B,其内容区分将执行数个数据变换中的哪一个(例如,无数据变换、 混合、广播)。
在A类存储器访问920的指令模板的情况下,α字段952被解释为驱逐提示 字段952B,其内容区分要使用驱逐提示中的哪一个(在图9a中,对于存储器访问时 效性925的指令模板和存储器访问非时效性930的指令模板分别指定时效性的952B.1 和非时效性的952B.2),而β字段954被解释为数据操纵字段954C,其内容区分要执 行多个数据操纵操作(也称为基元(primitive))中的哪一个(例如,无操纵、广播、 源的向上转换以及目的地的向下转换)。存储器访问920指令模板包括比例字段960, 并且任选地包括位移字段962A或位移比例字段962B。
向量存储器指令使用转换支持来执行来自存储器的向量加载并将向量存储 到存储器。如同寻常的向量指令,向量存储器指令以数据元素式的方式与存储器来回 传输数据,其中实际传输的元素由选为写掩码的向量掩码的内容规定。
存储器访问指令模板——时效性
时效性的数据是可能足够快地重新使用以从高速缓存受益的数据。然而,这 是提示,且不同的处理器可以不同的方式实现它,包括完全忽略该提示。
存储器访问指令模板——非时效性
非时效性数据是不大可能足够快地重复使用以从第1级高缓存中的高速缓 存操作获益且应当给予驱逐优先级的数据。然而,这是提示,且不同的处理器可以不 同的方式实现它,包括完全忽略该提示。
B类指令模板
在B类指令模板的情况下,α字段952被解释为写掩码控制(Z)字段952C, 其内容区分由写掩码字段970控制的写掩码操作应当是合并还是归零。
在B类非存储器访问905指令模板的情况下,β字段954的部分被解释为RL 字段957A,其内容区分将执行不同的扩充操作类型中的哪一种(例如,分别为无存 储器访问的写掩码控制部分舍入控制型操作912指令模板和无存储器访问的写掩码 控制VSIZE型操作917指令模板指定的舍入957A.1和向量长度(VSIZE)957A.2), 而β字段954的其余部分区分将执行指定类型的操作中的哪一个。在无存储器访问905 的指令模板中,比例字段960、位移字段962A以及位移比例字段962B不存在。
在无存储器访问的写掩码控制部分舍入控制型操作910指令模板中,β字段 954的其余部分被解释为舍入操作字段959A,并且异常事件报告被禁用(给定的指令 不报告任何种类的浮点异常标志,并且不引发任何浮点异常处理程序)。
舍入操作控制字段959A——正如舍入操作控制字段958,其内容区分执行 一组舍入操作中的哪一个(例如,向上舍入、向下舍入、向零舍入、以及就近舍入)。 由此,舍入操作控制字段959A允许在每一指令的基础上改变舍入模式。在其中处理 器包括用于指定舍入模式的控制寄存器的本说明书的一个实施例中,舍入操作控制字 段950的内容优先于该寄存器值。
在无存储器访问的写掩码控制VSIZE型操作917指令模板中,β字段954的 其余部分被解释为向量长度字段959B,其内容区分将执行数个数据向量长度中的哪 一个(例如,128、256或512字节)。
在B类存储器访问920指令模板的情况下,β字段954的部分被解释为广播 字段957B,其内容区分是否将执行广播类型数据操纵操作,而β字段954的其余部分 由向量长度字段959B解释。存储器访问920指令模板包括比例字段960,并且任选 地包括位移字段962A或位移比例字段962B。
就通用向量友好指令格式900而言,完整操作码字段974示出为包括格式字 段940、基础操作字段942以及数据元素宽度字段964。尽管示出了其中完整操作码 字段974包括所有这些字段的一个实施例,但是,在不是支持所有这些字段的实施例 中,完整操作码字段974包括少于全部这些字段。完整操作码字段974提供操作码 (opcode)。
扩充操作字段950、数据元素宽度字段964以及写掩码字段970允许以通用 向量友好指令格式逐指令地指定这些特征。
写掩码字段和数据元素宽度字段的组合创建各种类型的指令,因为这些指令 允许基于不同的数据元素宽度应用该掩码。
在A类和B类内出现的各种指令模板在不同的情形下是有益的。在本说明 书的一些实施例中,不同处理器或者处理器内的不同核可支持仅A类、仅B类、或 者可支持两类。举例而言,旨在用于通用计算的高性能通用乱序核可仅支持B类,旨 在主要用于图形和/或科学(吞吐量)计算的核可仅支持A类,并且旨在用于两者的 核可支持两者(当然,具有来自两类的模板和指令的一些混合、但是并非来自两类的 所有模板和指令的核在本说明书的范围内)。同样,单一处理器可包括多个核,所有 核支持相同的类或者其中不同的核支持不同的类。举例而言,在具有单独的图形和通 用核的处理器中,图形核中的旨在主要用于图形和/或科学计算的一个核可仅支持A 类,而通用核中的一个或多个可以是具有旨在用于通用计算的仅支持B类的乱序执行 和寄存器重命名的高性能通用核。不具有单独的图形核的另一处理器可包括既支持A 类又支持B类的一个或多个通用有序或乱序核。当然,在本说明书的不同实施例中, 来自一类的特征也可在其他类中实现。可使以高级语言撰写的程序成为(例如,及时 编译或者静态编译)各种不同的可执行形式,包括:1)仅具有用于执行的目标处理器 支持的类或多个类的指令的形式;或者2)具有使用所有类的指令的不同组合而编写的 替代例程且具有选择这些例程以基于由当前正在执行代码的处理器支持的指令而执 行的控制流代码的形式。
示例专用向量友好指令格式
图10a-10d是示出根据本说明书的一个或多个示例的示例专用向量友好指令 格式的框图。图10a示出专用向量友好指令格式1000,其指定位置、尺寸、解释和字 段的次序、以及那些字段中的一些字段的值,在这个意义上专用向量友好指令格式 1000是专用的。专用向量友好指令格式1000可用于扩展x86指令集,并且由此一些 字段类似于在现有x86指令集及其扩展(例如,AVX)中使用的那些字段或与之相同。 该格式保持与具有扩展的现有x86指令集的前缀编码字段、实操作码字节字段、MOD R/M字段、SIB字段、位移字段、以及立即数字段一致。示出来自图9a和9b的字段, 来自图10a-10d的字段映射到来自图9a和9b的字段。
应当理解,虽然出于说明的目的在通用向量友好指令格式900的上下文中, 本说明书的实施例参考专用向量友好指令格式1000进行了描述,但是本说明书不限 于专用向量友好指令格式1000,声明的地方除外。例如,通用向量友好指令格式900 构想了各种字段的各种可能的尺寸,而专用向量友好指令格式1000示出为具有特定 尺寸的字段。作为特定示例,尽管数据元素宽度字段964示出为专用向量友好指令格 式1000中的一个位字段,但是本说明书不限于此(也就是说,通用向量友好指令格 式900构想数据元素宽度字段964的其他尺寸)。
通用向量友好指令格式900包括下文中按照图10a中所示出的顺序列出的字 段。
EVEX前缀(字节0-3)1002——以四字节形式进行编码。
格式字段940(EVEX字节0,位[7:0])——第一字节(EVEX字节0)是格 式字段940,并且它包含0x62(在一个实施例中用于区分向量友好指令格式的唯一值)。
第二-第四字节(EVEX字节1-3)包括提供专用能力的多个位字段。
REX字段1005(EVEX字节1,位[7-5])-由EVEX.R位字段(EVEX字节 1,位[7]–R)、EVEX.X位字段(EVEX字节1,位[6]–X)以及(957BEX字节1,位 [5]–B)组成。EVEX.R、EVEX.X和EVEX.B位字段提供与对应VEX位字段相同的 功能,并且使用1补码的形式进行编码,即ZMM0被编码为1111B,ZMM15被编码 为0000B。这些指令的其他字段对如在本领域中已知的寄存器索引的较低三个位(rrr、 xxx、以及bbb)进行编码,由此可通过增加EVEX.R、EVEX.X以及EVEX.B来形成 Rrrr、Xxxx以及Bbbb。
REX’字段910——这是REX’字段910的第一部分,并且是用于对扩展的32 个寄存器集合的较高16个或较低16个寄存器进行编码的EVEX.R’位字段(EVEX字 节1,位[4]–R’)。在一个实施例中,该位与以下指示的其他位一起以位反转的格式存 储以(在公知x86的32位模式下)与实操作码字节是62的BOUND指令进行区分, 但是在MOD R/M字段(在下文中描述)中不接受MOD字段中的值11;其他实施例 不以反转的格式存储该指示的位以及其他指示的位。值1用于对较低16个寄存器进 行编码。换句话说,通过组合EVEX.R’、EVEX.R、以及来自其他字段的其他RRR 来形成R’Rrrr。
操作码映射字段1015(EVEX字节1,位[3:0]–mmmm)——其内容对隐含 的前导操作码字节(0F、0F 38、或0F 3)进行编码。
数据元素宽度字段964(EVEX字节2,位[7]–W)——由记号EVEX.W表 示。EVEX.W用于定义数据类型(32位数据元素或64位数据元素)的粒度(尺寸)。
EVEX.vvvv 1020(EVEX字节2,位[6:3]-vvvv)——EVEX.vvvv的作用可 包括如下:1)EVEX.vvvv编码第一源寄存器操作数且对具有两个或两个以上源操作 数的指令有效,第一源寄存器操作数以反转(1补码)的形式被指定;2)EVEX.vvvv 编码目的地寄存器操作数,目的地寄存器操作数针对特定向量位移以1补码的形式被 指定;或者3)EVEX.vvvv不编码任何操作数,保留该字段,并且应当包含1111b。由 此,EVEX.vvvv字段1020对以反转(1补码)的形式存储的第一源寄存器指定符的4 个低阶位进行编码。取决于该指令,额外不同的EVEX位字段用于将指定符尺寸扩展 到32个寄存器。
EVEX.U 968类字段(EVEX字节2,位[2]-U)——如果EVEX.U=0,则它 指示A类或EVEX.U0;如果EVEX.U=1,则它指示B类或EVEX.U1。
前缀编码字段1025(EVEX字节2,位[1:0]-pp)——提供了用于基础操作 字段的附加位。除了对以EVEX前缀格式的传统SSE指令提供支持以外,这也具有 压缩SIMD前缀的益处(EVEX前缀只需要2位,而不是需要字节来表达SIMD前缀)。 在一个实施例中,为了支持使用以传统格式和以EVEX前缀格式的SIMD前缀(66H、 F2H、F3H)的传统SSE指令,将这些传统SIMD前缀编码成SIMD前缀编码字段; 并且在运行时在提供给解码器的PLA之前被扩展成传统SIMD前缀(因此PLA可执 行传统和EVEX格式的这些传统指令,而无需修改)。虽然较新的指令可将EVEX前 缀编码字段的内容直接作为操作码扩展,但是为了一致性,特定实施例以类似的方式 扩展,但允许由这些传统SIMD前缀指定不同的含义。替代实施例可重新设计PLA 以支持2位SIMD前缀编码,并且由此不需要扩展。
α字段952(EVEX字节3,位[7]–EH,也称为EVEX.eh、EVEX.rs、EVEX.rl、 EVEX.写掩码控制、以及EVEX.n;也以α示出)——如先前所述,该字段是针对上 下文的。
β字段954(EVEX字节3,位[6:4]-SSS,也称为EVEX.s2-0、EVEX.r2-0、 EVEX.rr1、EVEX.LL0、EVEX.LLB,还以βββ示出)——如前所述,此字段是针对 上下文的。
REX’字段910——这是REX’字段的其余部分,并且是可用于对扩展的32 个寄存器集合的较高16个或较低16个寄存器进行编码的EVEX.V’位字段(EVEX字 节3,位[3]–V’)。该位以位反转的格式存储。值1用于对较低16个寄存器进行编码。 换句话说,通过组合EVEX.V’、EVEX.vvvv来形成V’VVVV。
写掩码字段970(EVEX字节3,位[2:0]-kkk)——其内容指定写掩码寄存 器中的寄存器索引,如先前所述。在一个实施例中,特定值EVEX.kkk=000具有暗示 没有写掩码用于特定指令的特殊行为(这可以各种方式实现,包括使用硬连线到全部 为1的写掩码或者旁路掩码硬件的硬件来实现)。
实操作码字段1030(字节4)也称为操作码字节。操作码的一部分在该字段 中被指定。
MOD R/M字段1040(字节5)包括MOD字段1042、Reg字段1044以及 R/M字段1046。如先前所述的,MOD字段1042的内容将存储器访问和非存储器访 问操作区分开。Reg字段1044的作用可被归结为两种情形:对目的地寄存器操作数 或源寄存器操作数进行编码;或者被视为操作码扩展且不用于对任何指令操作数进行 编码。R/M字段1046的作用可包括如下:对引用存储器地址的指令操作数进行编码; 或者对目的地寄存器操作数或源寄存器操作数进行编码。
比例、索引、基址(SIB)字节(字节6)——如先前所述的,比例字段950 的内容用于存储器地址生成。SIB.xxx 1054和SIB.bbb 1056-先前已经针对寄存器索 引Xxxx和Bbbb提及了这些字段的内容。
位移字段962A(字节7-10)——当MOD字段1042包含10时,字节7-10 是位移字段962A,并且它与传统32位位移(disp32)一样地工作,并且以字节粒度 工作。
位移因数字段962B(字节7)——当MOD字段1042包含01时,字节7是 位移因数字段962B。该字段的位置与传统x86指令集8位位移(disp8)的位置相同, 它以字节粒度工作。由于disp8是符号扩展的,因此它仅能在-128和127字节偏移量 之间寻址;在64字节高速缓存行的方面,disp8使用可被设为仅四个真正有用的值-128、 -64、0和64的8位;由于常常需要更大的范围,所以使用disp32;然而,disp32需 要4个字节。
与disp8和disp32对比,位移因数字段962B是disp8的重新解释;当使用位 移因数字段962B时,通过将位移因数字段的内容乘以存储器操作数访问的尺寸(N) 来确定实际位移。
该类型的位移被称为disp8*N。这减小了平均指令长度(单个字节用于位移, 但具有大得多的范围)。这种压缩位移基于有效位移是存储器访问的粒度的倍数的假 设,并且由此地址偏移量的冗余低阶位不需要被编码。换句话说,位移因数字段962B 替代传统x86指令集8位位移。
由此,位移因数字段962B以与x86指令集8位位移相同的方式(因此在 ModRM/SIB编码规则中没有变化)进行编码,唯一的不同在于,将disp8超载至 disp8*N。
换句话说,在编码规则或编码长度中没有变化,而仅在通过硬件对位移值的 解释中有变化(这需要按存储器操作数的尺寸按比例缩放位移量以获得字节式地址偏 移量)。
立即数字段972如先前所述地操作。
完整操作码字段
图10b是示出根据一个实施例的构成完整操作码字段974的专用向量友好指 令格式1000中的字段的框图。具体地,完整操作码字段974包括格式字段940、基 础操作字段942、以及数据元素宽度(W)字段964。基础操作字段942包括前缀编 码字段1025、操作码映射字段1015以及实操作码字段1030。
寄存器索引字段
图10c是示出根据一个实施例的构成寄存器索引字段944的专用向量友好指 令格式1000中的字段的框图。具体地,寄存器索引字段944包括REX字段1005、 REX’字段1010、MODR/M.reg字段1044、MODR/M.r/m字段1046、VVVV字段1020、 xxx字段1054以及bbb字段1056。
扩充操作字段
图10d是示出根据一个实施例的构成扩充操作字段950的专用向量友好指令 格式1000中的字段的框图。当类(U)字段968包含0时,它表明EVEX.U0(A类 968A);当它包含1时,它表明EVEX.U1(B类968B)。当U=0且MOD字段1042 包含11(表明无存储器访问操作)时,α字段952(EVEX字节3,位[7]–EH)被解 释为rs字段952A。当rs字段952A包含1(舍入952A.1)时,β字段954(EVEX字 节3,位[6:4]–SSS)被解释为舍入控制字段954A。舍入控制字段954A包括一位SAE 字段956和两位舍入操作字段958。当rs字段952A包含0(数据变换952A.2)时,β 字段954(EVEX字节3,位[6:4]–SSS)被解释为三位数据变换字段954B。当U=0 且MOD字段1042包含00、01或10(表明存储器访问操作)时,α字段952(EVEX 字节3,位[7]–EH)被解释为驱逐提示(EH)字段952B且β字段954(EVEX字节3, 位[6:4]–SSS)被解释为三位数据操纵字段954C。
当U=1时,α字段952(EVEX字节3,位[7]–EH)被解释为写掩码控制(Z) 字段952C。当U=1且MOD字段1042包含11(表明无存储器访问操作)时,β字段 954的一部分(EVEX字节3,位[4]–S0)被解释为RL字段957A;当它包含1(舍入 957A.1)时,β字段954的其余部分(EVEX字节3,位[6-5]–S2-1)被解释为舍入 操作字段959A,而当RL字段957A包含0(VSIZE957.A2)时,β字段954的其余 部分(EVEX字节3,位[6-5]-S2-1)被解释为向量长度字段959B(EVEX字节3,位 [6-5]–L1-0)。当U=1且MOD字段1042包含00、01或10(表明存储器访问操作) 时,β字段954(EVEX字节3,位[6:4]–SSS)被解释为向量长度字段959B(EVEX 字节3,位[6-5]–L1-0)和广播字段957B(EVEX字节3,位[4]–B)。
示例寄存器架构
图11是根据一个实施例的寄存器架构1100的框图。在所示出的实施例中, 有32个512位宽的向量寄存器1110;这些寄存器被引用为zmm0到zmm31。
较低的16zmm寄存器的较低阶256个位覆盖在寄存器ymm0-16上。较低的 16zmm寄存器的较低阶128个位(ymm寄存器的较低阶128个位)覆盖在寄存器 xmm0-15上。
专用向量友好指令格式1000对这些覆盖的寄存器堆操作,如在以下表格中 所示的。
换句话说,向量长度字段959B在最大长度与一个或多个其他较短长度之间 进行选择,其中每一这种较短长度是前一长度的一半,并且不具有向量长度字段959B 的指令模板对最大向量长度操作。此外,在一个实施例中,专用向量友好指令格式1000的B类指令模板对紧缩或标量单/双精度浮点数据以及紧缩或标量整数数据操作。 标量操作是对zmm/ymm/xmm寄存器中的最低阶数据元素位置执行的操作;取决于本 实施例,较高阶数据元素位置保持与在指令之前相同或者归零。
写掩码寄存器1115——在所示实施例中,有8个写掩码寄存器(k0到k7), 每一个的尺寸都是64位。在替代实施例中,写掩码寄存器1115的尺寸是16位。如 先前所述的,在一个实施例中,向量掩码寄存器k0无法用作写掩码;当正常指示k0 的编码用作写掩码时,它选择硬连线的写掩码0xFFFF,从而有效地停用该指令的写 掩码操作。
通用寄存器1125——在所示实施例中,有十六个64位通用寄存器,这些寄 存器与现有的x86寻址模式一起使用来对存储器操作数寻址。这些寄存器通过名称 RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP以及R8到R15来引用。
标量浮点栈寄存器堆(x87栈)1145,在其上重叠了MMX紧缩整数平坦寄 存器堆1150——在所示出的实施例中,x87栈是用于使用x87指令集扩展来对32/64/80 位浮点数据执行标量浮点操作的八元素栈;而使用MMX寄存器来对64位紧缩整数 数据执行操作,以及为在MMX和XMM寄存器之间执行的某些操作保存操作数。
其他实施例可以使用较宽的或较窄的寄存器。另外,其他实施例可以使用更 多、更少或不同的寄存器堆和寄存器。
示例核架构、处理器和计算机架构
处理器核可以以不同方式、出于不同目的、在不同的处理器中实现。例如, 这样的核的实现可以包括:1)旨在用于通用计算的通用有序核;2)旨在用于通用计 算的高性能通用乱序核;3)旨在主要用于图形和/或科学(吞吐量)计算的专用核。 不同处理器的实现可包括:1)包括旨在用于通用计算的一个或多个通用有序核和/或 旨在用于通用计算的一个或多个通用乱序核的CPU;以及2)包括旨在主要用于图形 和/或科学吞吐量的一个或多个专用核的协处理器。这样的不同处理器导致不同的计 算机系统架构,其可包括:1)在与CPU分开的芯片上的协处理器;2)在与CPU相 同的封装中但分开的管芯上的协处理器;3)与CPU在相同管芯上的协处理器(在该 情况下,这样的协处理器有时被称为诸如集成图形和/或科学(吞吐量)逻辑等专用 逻辑,或被称为专用核);以及4)可以将所描述的CPU(有时被称为应用核或应用 处理器)、以上描述的协处理器和附加功能包括在同一管芯上的芯片上系统。接着描 述示例核架构,随后描述示例处理器和计算机架构。
示例核架构
有序和乱序核框图
图12a是示出示例有序流水线和示例的寄存器重命名的乱序发布/执行流水 线的框图。图12b是示出要包括在处理器中的有序架构核的实施例和示例寄存器重命 名的乱序发布/执行架构核的框图。图12a-12b中的实线框示出了有序流水线和有序核, 而可选增加的虚线框示出了寄存器重命名的、乱序发布/执行流水线和核。给定有序 方面是乱序方面的子集的情况下,将描述乱序方面。
在图12a中,处理器流水线1200包括取出级1202、长度解码级1204、解码 级1206、分配级1208、重命名级1210、调度(也称为分派或发布)级1212、寄存器 读取/存储器读取级1214、执行级1216、写回/存储器写入级1218、异常处置级1222 以及提交级1224。
图12b示出了包括耦合到执行引擎单元1250的前端单元1230的处理器核 1290,且执行引擎单元和前端单元两者都耦合到存储器单元1270。核1290可以是精 简指令集计算(RISC)核、复杂指令集计算(CISC)核、超长指令字(VLIW)核或 混合或其他核类型。作为又一选项,核1290可以是专用核,诸如例如网络或通信核、 压缩引擎、协处理器核、通用计算图形处理单元(GPGPU)核、或图形核等等。
前端单元1230包括耦合到指令高速缓存单元1234的分支预测单元1232, 该指令高速缓存单元1234耦合到指令转换后备缓冲器(TLB)1236,该指令转换后 备缓冲器1236耦合到指令取出单元1238,指令取出单元1238耦合到解码单元1240。 解码单元1240(或解码器)可解码指令,并生成从原始指令解码出的、或以其他方 式反映原始指令的、或从原始指令导出的一个或多个微操作、微代码进入点、微指令、 其他指令、或其他控制信号作为输出。解码单元1240可使用各种不同的机制来实现。 合适的机制的示例包括但不限于查找表、硬件实现、可编程逻辑阵列(PLA)、微代 码只读存储器(ROM)等。在一个实施例中,核1290包括(例如,在解码单元1240 中或否则在前端单元1230内的)用于存储某些宏指令的微代码的微代码ROM或其 他介质。解码单元1240耦合至执行引擎单元1250中的重命名/分配器单元1252。
执行引擎单元1250包括重命名/分配器单元1252,该重命名/分配器单元1252 耦合到引退单元1254和一个或多个调度器单元的集合1256。调度器单元1256表示 任何数目的不同调度器,包括预留站、中央指令窗等。调度器单元1256耦合到物理 寄存器堆单元1258。每个物理寄存器堆单元1258表示一个或多个物理寄存器堆,其 中不同的物理寄存器堆存储一种或多种不同的数据类型,诸如标量整数、标量浮点、 紧缩整数、紧缩浮点、向量整数、向量浮点、状态(例如,作为要执行的下一指令的 地址的指令指针)等。在一个实施例中,物理寄存器堆单元1258包括向量寄存器单 元、写掩码寄存器单元和标量寄存器单元。这些寄存器单元可以提供架构向量寄存器、 向量掩码寄存器、和通用寄存器。物理寄存器堆单元1258被引退单元1254所覆盖, 以示出可实现寄存器重命名和乱序执行的多种方式(诸如,使用重排序缓冲器和引退 寄存器堆、使用未来文件(future file)、历史缓冲器、引退寄存器堆、使用寄存器映 射和寄存器池等等)。引退单元1254和物理寄存器堆单元1258耦合至执行群集1260。 执行集群1260包括一个或多个执行单元1262的集合以及一个或多个存储器访问单元 1264的集合。执行单元1262可执行多种操作(例如,移位、加法、减法、乘法)并 可在多种数据类型(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点) 上执行。尽管一些实施例可以包括专用于特定功能或功能集合的多个执行单元,但其 他实施例可包括仅一个执行单元或全部执行所有功能的多个执行单元。调度器单元1256、物理寄存器堆单元1258和执行集群1260被示为可能有多个,因为某些实施例 为某些类型的数据/操作创建分开的流水线(例如,标量整型流水线、标量浮点/紧缩 整型/紧缩浮点/向量整型/向量浮点流水线,和/或各自具有其自己的调度器单元、物理 寄存器堆单元和/或执行集群的存储器访问流水线——以及在分开的存储器访问流水 线的情况下,实现其中仅该流水线的执行集群具有存储器访问单元1264的某些实施 例)。还应当理解,在使用分开的流水线的情况下,这些流水线中的一个或多个可以 为乱序发布/执行,并且其余流水线可以为有序发布/执行。
存储器访问单元的集合1264耦合至存储器单元1270,该存储器单元包括数 据TLB单元1272,该数据TLB单元耦合至数据高速缓存单元1274,该数据高速缓 存单元耦合至第二级(L2)高速缓存单元1276。在一个实施例中,存储器访问单元 1264可包括加载单元、存储地址单元和存储数据单元,其中的每一个均耦合至存储 器单元1270中的数据TLB单元1272。指令高速缓存单元1234还耦合到存储器单元 1270中的第2级(L2)高速缓存单元1276。L2高速缓存单元1276耦合至一个或多 个其他级别的高速缓存,并最终耦合至主存储器。
作为示例,寄存器重命名的、乱序发布/执行核架构可以如下实现流水线1200: 1)指令取出1238执行取出和长度解码级1202和1204;2)解码单元1240执行解码级 1206;3)重命名/分配器单元1252执行分配级1208和重命名级1210;4)调度器单元 1256执行调度级1212;5)物理寄存器堆单元1258和存储器单元1270执行寄存器读 取/存储器读取级1214;执行集群1260执行执行级1216;6)存储器单元1270和物理 寄存器堆单元1258执行写回/存储器写入级1218;7)各单元可牵涉到异常处置级1222; 以及8)引退单元1254和物理寄存器堆单元1258执行提交级1224。
核1290可支持一个或多个指令集(例如,x86指令集(具有与较新版本一 起添加的一些扩展);加利福尼亚州桑尼维尔市的MIPS技术公司的MIPS指令集;加 利福尼州桑尼维尔市的ARM控股的ARM指令集(具有诸如NEON等可选附加扩展)), 其中包括本文中描述的各指令。在一个实施例中,核1290包括用于支持紧缩数据指 令集扩展(例如,AVX1、AVX2)的逻辑,由此允许许多多媒体应用所使用的操作利 用紧缩数据来执行。
应当理解,核可支持多线程化(执行两个或更多个并行的操作或线程的集合), 并且可以按各种方式来完成该多线程化,此各种方式包括时分多线程化、同步多线程 化(其中单个物理核为物理核正在同步多线程化的各线程中的每一个线程提供逻辑 核)、或其组合(例如,时分取出和解码以及此后诸如用超线程化技术来同步 多线程化)。
尽管在乱序执行的上下文中描述了寄存器重命名,但应当理解,可以在有序 架构中使用寄存器重命名。尽管所示出的处理器的实施例还包括分开的指令和数据高 速缓存单元1234/1274以及共享L2高速缓存单元1276,但替代实施例可以具有用于 指令和数据两者的单个内部高速缓存,诸如例如一级(L1)内部高速缓存或多个级别 的内部高速缓存。在一些实施例中,该系统可包括内部高速缓存和在核和/或处理器 外部的外部高速缓存的组合。或者,所有高速缓存都可以在核和/或处理器的外部。 示例有序核架构
图13a-13b示出更具体的示例有序核架构的框图,该核将是芯片中的多个逻 辑块中的一个(包括相同类型和/或不同类型的其他核)。根据应用,这些逻辑块通过 高带宽的互连网络(例如,环形网络)与一些固定的功能逻辑、存储器IO接口和其 他必要的IO逻辑通信。
图13a是根据一个或多个实施例的单个处理器核以及它与管芯上互连网络 1302的连接及其第2级(L2)高速缓存的本地子集1304的框图。在一个实施例中,指 令解码器1300支持具有紧缩数据指令集扩展的x86指令集。L1高速缓存1306允许 对进入标量和向量单元中的高速缓存存储器的低等待时间访问。尽管在一个实施例中 (为了简化设计),标量单元1308和向量单元1310使用分开的寄存器集合(分别为标量 寄存器1312和向量寄存器1314),并且在这些寄存器之间转移的数据被写入到存储器 并随后从一级(L1)高速缓存1306读回,但是其他实施例可以使用不同的方法(例如使 用单个寄存器集合或包括允许数据在这两个寄存器堆之间传输而无需被写入和读回 的通信路径)。
L2高速缓存的本地子集1304是全局L2高速缓存的一部分,该全局L2高速 缓存被划分成多个分开的本地子集,即每个处理器核一个本地子集。每个处理器核具 有到其自己的L2高速缓存的本地子集1304的直接访问路径。被处理器核读出的数据 被存储在其L2高速缓存子集1304中,并且可以与其他处理器核访问其自己的本地 L2高速缓存子集并行地被快速访问。被处理器核写入的数据被存储在其自己的L2高 速缓存子集1304中,并在必要的情况下从其他子集转储清除(flush)。环形网络确保 共享数据的一致性。环形网络是双向的,以允许诸如处理器核、L2高速缓存和其他 逻辑块之类的代理在芯片内彼此通信。每个环形数据路径为每个方向1012位宽。
图13b是根据本说明书的实施例的图13a中的处理器核的一部分的展开图。 图13b包括L1高速缓存1304的L1数据高速缓存1306A部分,以及关于向量单元1310 和向量寄存器1314的更多细节。具体地说,向量单元1310是16宽向量处理单元 (VPU)(见16宽ALU 1328),该单元执行整型、单精度浮点以及双精度浮点指令中的 一个或多个。该VPU通过混合单元1320支持对寄存器输入的混合、通过数值转换单 元1322A-B支持数值转换、并通过复制单元1324支持对存储器输入的复制。写掩码 寄存器1326允许断言所得的向量写入。
图14是根据本说明书的实施例的可具有多于一个的核、可具有集成存储器 控制器、以及可具有集成图形器件的处理器1400的框图。图14中的实线框示出具有 单个核1402A、系统代理1410、一个或多个总线控制器单元1416的集合的处理器1400, 而虚线框的可任选附加示出具有多个核1402A-N、系统代理单元1410中的一个或多 个集成存储器控制器单元1414的集合以及专用逻辑1408的替代处理器1400。
因此,处理器1400的不同实现可包括:1)CPU,其中专用逻辑1408是集成 图形和/或科学(吞吐量)逻辑(其可包括一个或多个核),并且核1402A-N是一个或 多个通用核(例如,通用的有序核、通用的乱序核、这两者的组合);2)协处理器, 其中核1402A-N是旨在主要用于图形和/或科学吞吐量的大量专用核;以及3)协处理 器,其中核1402A-N是大量通用有序核。因此,处理器1400可以是通用处理器、协 处理器或专用处理器,诸如例如网络或通信处理器、压缩引擎、图形处理器、GPGPU (通用图形处理单元)、高吞吐量的集成众核(MIC)协处理器(包括30个或更多核)、 或嵌入式处理器等。该处理器可以被实现在一个或多个芯片上。处理器1400可以是 一个或多个基板的一部分,和/或可以使用多种工艺技术(诸如,BiCMOS、CMOS、 或NMOS)中的任意技术被实现在一个或多个基板上。
存储器层级结构包括核内的一个或多个层级的高速缓存、一组或一个或多个 共享高速缓存单元1406以及耦合到集成存储器控制器单元1414的集合的外部存储器 (未示出)。共享高速缓存单元1406的集合可包括一个或多个中级高速缓存,诸如, 第二级(L2)、第三级(L3)、第四级(L4)或其他级别的高速缓存、末级高速缓存 (LLC)和/或以上的组合。虽然在一个实施例中,基于环的互连单元1412将集成图 形逻辑1408、共享高速缓存单元1406的集合以及系统代理单元1410/集成存储器控 制器单元1414互连,但是替代实施例可使用任何数量的公知技术来互连此类单元。 在一个实施例中,可以维护一个或多个高速缓存单元1406和核1402A-N之间的一致 性(coherency)。
在一些实施例中,核1402A-N中的一个或多个能够实现多线程。系统代理 1410包括协调并操作核1402A-N的那些组件。系统代理单元1410可包括,例如,功 率控制单元(PCU)和显示单元。PCU可以是对核1402A-N以及集成图形逻辑1408的 功率状态进行调节所需的逻辑和组件,或可包括这些逻辑和组件。显示单元用于驱动 一个或多个外部连接的显示器。
核1402A-N在架构指令集方面可以是同构的或异构的;即,这些核1402A-N 中的两个或更多个核可能能够执行相同的指令集,而其它核可能能够执行该指令集的 仅仅子集或不同的指令集。
示例计算机架构
图15-18是示例计算机架构的框图。本领域已知的对膝上型设备、台式机、 手持PC、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、 嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控 制器、蜂窝电话、便携式媒体播放器、手持设备以及各种其他电子设备的其他系统设 计和配置也是合适的。一般地,能够包含本文中所公开的处理器和/或其他执行逻辑 的多个系统和电子设备一般都是合适的。
现在参见图15,所示是根据一个实施例的系统1500的框图。系统1500可 以包括一个或多个处理器1510、1515,这些处理器耦合到控制器中枢1520。在一个 实施例中,控制器中枢1520包括图形存储器控制器中枢(GMCH)1590和输入/输出 中枢(IOH)1550(其可以在分开的芯片上);GMCH 1590包括存储器和图形控制器, 存储器1540和协处理器1545耦合到该存储器和图形控制器;IOH 1550将输入/输出 (IO)设备1560耦合到GMCH 1590。可替代地,存储器和图形控制器中的一个或两 个在处理器(如本文中所描述的)内集成,存储器1540和协处理器1545直接耦合到 处理器1510、以及在单一芯片中具有IOH 1550的控制器中枢1520。
在图15中以虚线表示附加的处理器1515的可选的性质。每一处理器1510、 1515可包括本文中描述的处理核中的一个或多个,并且可以是处理器1400的某一版 本。
存储器1540可以是例如动态随机存取存储器(DRAM)、相变存储器(PCM) 或这两者的组合。对于至少一个实施例,控制器中枢1520经由诸如前端总线(FSB) 之类的多分支总线、诸如超级通道互连(UPI)之类的点对点接口、或者类似的连接 1595与(多个)处理器1510、1515进行通信。
在一个实施例中,协处理器1545是专用处理器,诸如例如高吞吐量MIC处 理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器等等。 在一个实施例中,控制器中枢1520可以包括集成图形加速器。
在物理资源1510、1515之间会存在包括架构、微架构、热、功耗特性等的 一系列品质度量方面的各种差异。
在一个实施例中,处理器1510执行控制一般类型的数据处理操作的指令。 协处理器指令可嵌入在这些指令中。处理器1510将这些协处理器指令识别为应当由 附连的协处理器1545执行的类型。因此,处理器1510在协处理器总线或者其他互连 上将这些协处理器指令(或者表示协处理器指令的控制信号)发布到协处理器1545。 (多个)协处理器1545接受并执行所接收的协处理器指令。
现在参见图16,所示是第一更具体的示例系统1600的框图。如图16所示, 多处理器系统1600是点对点互连系统,且包括经由点对点互连1650耦合的第一处理 器1670和第二处理器1680。处理器1670和1680中的每一个都可以是处理器1400 的某一版本。在一个实施例中,处理器1670和1680分别是处理器1510和1515,而 协处理器1638是协处理器1545。在另一实施例中,处理器1670和1680分别是处理 器1510和协处理器1545。
处理器1670和1680被示为分别包括集成存储器控制器(IMC)单元1672 和1682。处理器1670还包括作为其总线控制器单元的一部分的点对点(P-P)接口 1676和1678;类似地,第二处理器1680包括P-P接口1686和1688。处理器1670、 1680可以经由使用点对点(P-P)接口电路1678、1688的P-P接口1650来交换信息。 如图16所示,IMC 1672和1682将处理器耦合到相应的存储器,即存储器1632和存 储器1634,这些存储器可以是本地附连到相应处理器的主存储器的部分。
处理器1670、1680可各自经由使用点对点接口电路1676、1694、1686、1698 的各个P-P接口1652、1654与芯片组1690交换信息。芯片组1690可以可选地经由 高性能接口1639与协处理器1638交换信息。在一个实施例中,协处理器1638是专 用处理器,诸如例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处 理器、GPGPU、嵌入式处理器等等。
共享高速缓存(未示出)可被包括在任一处理器中,或在两个处理器的外部 但经由P-P互连与这些处理器连接,从而如果处理器被置于低功率模式,则任一个或 这两个处理器的本地高速缓存信息可被存储在该共享的高速缓存中。
芯片组1690可经由接口1696耦合到第一总线1616。在一个实施例中,第 一总线1616可以是外围组件互连(PCI)总线或诸如PCI高速总线或另一第三代IO 互连总线之类的总线,作为非限制性示例。
如图16所示,各种IO设备1614可以连同总线桥1618被耦合至第一总线 1616,总线桥1618将第一总线1616耦合至第二总线1620。在一个实施例中,诸如 协处理器、高吞吐量MIC处理器、GPGPU、加速器(诸如例如图形加速器或数字信 号处理(DSP)单元)、现场可编程门阵列或任何其他处理器的一个或多个附加处理 器1615耦合到第一总线1616。在一个实施例中,第二总线1620可以是低引脚数(LPC) 总线。各种设备可耦合到第二总线1620,包括例如键盘和/或鼠标1622、通信设备1627 以及存储单元1628,诸如在一个实施例中可包括指令或代码和数据1630的盘驱动器 或者其他大容量存储设备。此外,音频IO 1624可以被耦合至第二总线1620。注意, 其他架构是可能的。例如,代替图16的点对点架构,系统可以实现多分支总线或其 他这类架构。
现在参考图17,所示为更具体的第二示例系统1700的框图。图16和17具 有相同附图标记,并已从图17中省去了图16中的某些方面,以避免使图17的其他 方面变得模糊。
图17示出处理器1670、1680可分别包括集成存储器和IO控制逻辑(“CL”) 1672和1682。因此,CL 1672、1682包括集成存储器控制器单元并包括IO控制逻辑。 图17示出不仅存储器1632、1634耦合至CL 1672、1682,IO设备1714也耦合至控 制逻辑1672、1682。传统IO设备1715被耦合至芯片组1690。
现在参照图18,所示出的是根据实施例的SoC 1800的框图。在图14中, 相似的部件具有同样的附图标记。另外,虚线框是更先进的SoC的可选特征。在图18中,互连单元1802被耦合至:应用处理器1810,该应用处理器包括一个或多个核 1402A-N的集合以及共享高速缓存单元1406;系统代理单元1410;总线控制器单元 1416;集成存储器控制器单元1414;一个或多个协处理器1820的集合,其可包括集 成图形逻辑、图像处理器、音频处理器和视频处理器;静态随机存取存储器(SRAM) 单元1830;直接存储器存取(DMA)单元1832;以及用于耦合至一个或多个外部显示 器的显示单元1840。在一个实施例中,协处理器1820包括专用处理器,诸如例如网 络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、嵌入式处理器等等。
本文公开的机制的各实施例可以被实现在硬件、软件、固件或这些实现方法 的组合中。一些实施例可实现为在可编程系统上执行的计算机程序或程序代码,该可 编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元 件)、至少一个输入设备以及至少一个输出设备。
可将程序代码(诸如图16中示出的代码1630)应用于输入指令,以执行本 文描述的各功能并生成输出信息。可以按已知方式将输出信息应用于一个或多个输出 设备。为了本申请的目的,处理系统包括具有诸如例如数字信号处理器(DSP)、微控 制器、专用集成电路(ASIC)或微处理器之类的处理器的任何系统。
程序代码可以用高级程序化语言或面向对象的编程语言来实现,以便与处理 系统通信。在需要时,也可用汇编语言或机器语言来实现程序代码。事实上,本文中 描述的机制不限于任何特定编程语言的范围。在任一情形下,该语言可以是编译语言 或解释语言。
至少一个实施例的一个或多个方面可以由存储在机器可读介质上的表示性 指令来实现,指令表示处理器中的各种逻辑,指令在被机器读取时使得该机器制作用 于执行本文所述的技术的逻辑。被称为“IP核”的这些表示可以被存储在有形的机器可 读介质上,并被提供给多个客户或生产设施以加载到实际制造该逻辑或处理器的制造 机器中。
此类机器可读存储介质可以包括但不限于通过机器或设备制造或形成的制 品的非暂态的有形安排,其包括存储介质,诸如,硬盘;任何其他类型的盘,包括软 盘、光盘、紧致盘只读存储器(CD-ROM)、紧致盘可重写(CD-RW)以及磁光盘;半导 体器件,诸如,只读存储器(ROM)、诸如动态随机存取存储器(DRAM)和静态随机存 取存储器(SRAM)之类的随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、 闪存、电可擦除可编程只读存储器(EEPROM);相变存储器(PCM);磁卡或光卡; 或适于存储电子指令的任何其他类型的介质。
因此,一些实施例还包括非瞬态的有形机器可读介质,该介质包含指令或包 含设计数据,诸如硬件描述语言(HDL),它定义本文中描述的结构、电路、装置、处 理器和/或系统特征。这些实施例也被称为程序产品。
仿真(包括二进制变换、代码变形等)
在一些情况下,指令转换器可用来将指令从源指令集转换至目标指令集。例 如,指令转换器可以变换(例如使用静态二进制变换或包括动态编译的动态二进制变 换)、变形、仿真或以其他方式将指令转换成将由核来处理的一个或多个其他指令。 指令转换器可以用软件、硬件、固件、或其组合实现。指令转换器可以在处理器上、 在处理器外、或者部分在处理器上且部分在处理器外。
图19是对照使用软件指令转换器将源指令集中的二进制指令转换成目标指 令集中的二进制指令的框图。在所示的实施例中,指令转换器是软件指令转换器,但 作为替代,该指令转换器可以用软件、固件、硬件或其各种组合来实现。图19示出 可使用x86编译器1904来编译利用高级语言1902的程序,以生成可由具有至少一个 x86指令集核的处理器1916原生执行的x86二进制代码1906。具有至少一个x86指 令集核的处理器1916表示能通过兼容地执行或以其他方式处理以下内容来执行与具 有至少一个x86指令集核的处理器基本相同的功能的任何处理器:(1) x86指令集核的指令集的本质部分,或(2)目标为在具有至少一个x86指令集 核的处理器上运行以实现与具有至少一个x86指令集核的处理器基 本相同的结果的应用或其他软件的目标代码版本。x86编译器1904表示用于生成x86 二进制代码1906(例如,目标代码)的编译器,该二进制代码可通过或不通过附加 的链接处理在具有至少一个x86指令集核的处理器1916上执行。类似地,图19示出 可以使用替代的指令集编译器1908来编译利用高级语言1902的程序,以生成可以由 不具有至少一个x86指令集核的处理器1914(例如具有执行加利福尼亚州桑尼维尔 市的MIPS技术公司的MIPS指令集、和/或执行加利福尼亚州桑尼维尔市的ARM控 股公司的ARM指令集的核的处理器)原生执行的替代指令集二进制代码1910。指令 转换器1912被用来将x86二进制代码1906转换成可以由不具有x86指令集核的处理 器1914原生执行的代码。该转换后的代码不大可能与替代性指令集二进制代码1910 相同,因为能够这样做的指令转换器难以制造;然而,转换后的代码将完成一般操作 并由来自替代指令集的指令构成。因此,指令转换器1912通过仿真、模拟或任何其 他过程来表示允许不具有x86指令集处理器或核的处理器或其他电子设备执行x86二 进制代码1906的软件、固件、硬件或其组合。
前述内容概述了若干实施例的特点,以使得本领域技术人员可以更好地理解 本公开的各方面。本领域技术人员应该理解,他们可以轻松地使用本公开作为用于设 计或修改用于执行相同目的和/或实现此处介绍的各实施例的相同优点的其他过程和 结构的基础。本领域技术人员还应该认识到,这样的等效的结构不会偏离本公开的精 神和保护范围,在不偏离本公开的精神和保护范围的情况下,他们可以作出各种更改、 替换,以及改变。
在包括中央处理单元(CPU)封装体的芯片上系统(SoC)中可以很容易提 供本文公开的任何硬件元件的全部或部分。SoC表示将计算机或其他电子系统的组件 集成到单个芯片中的集成电路(IC)。SoC可以包含数字信号、模拟信号、混合信号、 以及射频功能,所有的这些都可以在单个芯片衬底上提供。其他实施例可以包括多芯 片模块(multichipmodule,MCM),其中,多个芯片位于单个电子封装体内并且被配 置成通过电子封装体彼此密切地进行交互。在各个其他实施例中,本文所公开的计算 功能可以在专用集成电路(ASIC)、现场可编程门阵列(FPGA)、以及其他半导体芯 片中的一个或多个硅核中实施。
如贯穿本说明书所使用的,术语“处理器”或“微处理器”应当被理解为不 仅包括传统微处理器(如的行业领先的x86和x64架构),而且还包括任何ASIC、 FPGA、微控制器、数字信号处理器(DSP)、可编程逻辑器件、可编程逻辑阵列(PLA)、 微代码、指令集、仿真或虚拟机处理器、或者允许执行指令的任何类似的“图灵完备 (Turing-complete)”装置、装置的组合或逻辑元件(硬件或软件)。
还应注意的是,在某些实施例中,可以省略或合并组件中的一些。在一般意 义上,在附图中所描绘的安排应当被理解为逻辑划分,而物理架构可以包括这些元件 的各种排列、组合和/或混合。应注意的是,可以使用无数可能的设计配置来实现本 文概述的操作目标。因此,相关联基础设施具有大量替换安排、设计选择、装置可能 性、硬件配置、软件实施方式、以及设备选项。
在一般意义上,任何适当配置的处理器都可以执行与数据或微代码相关联的 指令以实现本文详述的操作。本文所公开的任何处理器都可以将元件或物品(例如, 数据)从一种状态或事物变换成另一种状态或事物。在另一示例中,本文概述的一些 活动可以使用固定逻辑或者可编程逻辑(例如,由处理器执行的软件和/或计算机指 令)实施,并且本文标识的元件可以是某种类型的可编程处理器;可编程数字逻辑(例 如,现场可编程门阵列(FPGA)、可擦除可编程只读存储器(EPROM)、电可擦除可 编程只读存储器(EEPROM));包括数字逻辑、软件、代码、电子指令、闪速存储器、 光盘、CD-ROM、DVD ROM、磁卡或者光卡、适合于存储电子指令的其他类型的机 器可读介质的ASIC;或者其任何适当组合。
在操作中,在适当的情况下并基于特定需求,存储装置可以将信息存储在任 何适当类型的有形、非暂态存储介质(例如,随机存取存储器(RAM)、只读存储器 (ROM)、现场可编程门阵列(FPGA)、可擦除可编程只读存储器(EPROM)、电可 擦除可编程ROM(EEPROM)、或微代码);软件、硬件(例如,处理器指令、或微 代码);或在任何其他适当组件、装置、元件、或对象中。此外,基于具体需求和实 施方式,可以在任何数据库、寄存器、表、高速缓存、队列、控制列表、或存储结构 中提供被跟踪、发送、接收、或被存储在处理器中的信息,所有的这些都可以在任何 合适的时帧中引用。在此所公开的存储器或存储元件中的任何一个都应该解释为包含 在广义术语‘存储器(memory)’和‘存储设备(storage)’内。本文中,非暂态存储 介质明确地旨在包括被配置成提供所公开操作或者使处理器执行所公开操作的任何 非暂态专用或可编程硬件。本文中,非暂态存储介质还明确地包括处理器,所述处理 器具有在其上存储的硬件编码的指令以及可选地在硬件、固件或软件中编码的微代码 指令或序列。
实施本文所述的功能的全部或一部分的计算机程序逻辑被具体化为各种形 式,包括但决不限于:硬件描述语言、源代码形式、计算机可执行形式、机器指令或 微代码、可编程硬件、以及各种中间形式(例如,由HDL处理器、汇编器、编译器、 链接器、或定位器生成的形式)。在一个示例中,源代码包括以以下语言实施的一系 列计算机程序指令:与各种操作系统或操作环境一起使用的各种编程语言,如目标代 码、汇编语言、或如OpenCL、FORTRAN、C、C++、JAVA、或HTML等高级语言; 或者如Spice、Verilog、和VHDL等硬件描述语言。源代码可以定义并使用各种数据 结构和通信消息。源代码可以采用计算机可执行形式(例如,经由解释器),或者源 代码可以被转换为计算机可执行形式(例如,经由转换器、汇编器、或编译器)或被 转换为如字节代码等中间形式。在适当的情况下,上述内容中的任何内容都可以用于 构建或描述适当的离散电路或集成电路,无论是以顺序的、组合的、状态机,还是以 其他方式。
在一个示例中,可在相关联电子装置的板上实施附图的任何数量的电路。所 述板可以是可以固持电子装置的内部电子系统的各种组件的通用电路板,并且进一步 地为其他外围装置提供连接器。更具体地,所述板可以提供电连接,通过所述电连接, 所述系统的其他组件可以进行电通信。任何适当的处理器和存储器都可以基于具体配 置需要、处理需求和计算设计而适当地耦合至所述板。如外部存储装置、附加传感器、 用于音频/视频显示的控制器、以及外围装置等其他组件可以经由电缆作为插入卡而 被附接到所述板,或者集成到所述板本身中。在另一示例中,附图的电路可被实施为 独立的模块(例如,具有被配置成执行特定应用或功能的相关联组件和电路系统的装 置)或被实施为到电子装置的专用硬件中的插入模块。
应注意,通过本文所提供的众多示例,可以关于两个、三个、四个,或更多 个电气组件来描述交互。然而,已经仅为了清晰和示例的目的而完成了这一点。应理 解的是,可以以任何适当的方式对系统进行合并或重新配置。连同类似的设计替代方 案,可以以各种可能的配置来组合附图的所示组件、模块以及元件中的任何一个,所 有的这些都在本说明书的宽泛保护范围内。在某些情况下,通过仅引用有限数量的电 气元件,可以更容易地描述给定流程集的功能中的一个或多个功能。应理解的是,附 图的电路及其教导是可容易扩展的,并可以容纳大量组件、以及更复杂/精密的安排 和配置。因此,所提供的示例不应当将保护范围限制为或将电路的宽泛教导约束为潜 在地应用于大量其他架构。
对本领域的技术人员来说可以确定许多其他改变、替代、变化、变更和修改 并且意图是本公开包含落入所附权利要求书的保护范围内的所有这种改变、替代、变 化、变更和修改。为了帮助美国专利和商标局(USPTO)以及此外在本申请上发布的 任何专利的任何读者解释本文所附权利要求书,申请人希望注意,申请人:(a)不旨 在使所附权利要求中的任何权利要求由于其在本文提交日期存在而援引35U.S.C.的 第912节的第(f)段,除非在特定权利要求中明确使用了词语“用于……的装置”或 “用于……的步骤”;并且(b)不旨在通过说明书中的任何陈述来以未在所附权利要 求书中明确地以其他方式反映的任何方式来限制本公开。
示例实施方式
在一个示例中公开了一种处理器,所述处理器包括:执行单元,所述执行单 元包括分支电路系统;分支预测器,所述分支预测器包括用于标识难预测(HTP)分 支的HTP分支过滤器;以及特殊分支预测器,用于从所述HTP分支过滤器接收对 HTP分支的标识,所述特殊分支预测器包括用于预测针对所述HTP分支的分支动作 的卷积神经网络(CNN)分支预测器。
进一步公开了处理器的示例,其中,所述特殊分支预测器包括协处理器或现 场可编程门阵列。
进一步公开了处理器的示例,其中,所述特殊分支预测器是管芯上电路块。
进一步公开了处理器的示例,其中,所述特殊分支预测器用于采用简化的独 热二进制电路系统。
进一步公开了处理器的示例,其中,所述特殊分支预测器包括双层CNN。
进一步公开了处理器的示例,其中,所述特殊分支预测器包括二进制1维卷 积层以及完全连接的二进制层。
进一步公开了处理器的示例,其中,所述1维卷积层用于接收传入(程序计 数器(PC),方向)对,对所述传入对进行掩码,将经掩码的位用作到过滤器响应表 的索引,并且返回L位向量作为响应。
进一步公开了处理器的示例,其中,所述1维卷积层进一步用于将所述响应 推入到N×L位先进先出(FIFO)缓冲器中。
进一步公开了处理器的示例,其中,所述完全连接的二进制层用于对所述 FIFO缓冲器的内容与二进制线性层权重进行XOR,并且将所产生的1的数量计数为 整数总数。
进一步公开了处理器的示例,其中,所述完全连接的二进制层进一步用于对 所述整数总数进行比较以生成选择或不选择分支预测。
进一步公开了处理器的示例,其中,所述特殊分支预测器用于从经训练的 CNN接收元数据。
进一步公开了处理器的示例,其中,所述特殊分支预测器进一步包括CNN 辅助预测器。
还公开了一种芯片上系统的示例,所述芯片上系统包括:输入-输出电路系 统;存储器,用于容纳程序,所述程序包括分支电路系统;以及处理器,所述处理器 包括:执行单元,所述执行单元包括分支电路系统;分支预测器,所述分支预测器包 括用于标识难预测(HTP)分支的HTP分支过滤器;以及特殊分支预测器,用于从 所述HTP分支过滤器接收对HTP分支的标识,所述特殊分支预测器包括用于预测针 对所述HTP分支的分支动作的卷积神经网络(CNN)分支预测器。
进一步公开了芯片上系统的示例,其中,所述特殊分支预测器包括协处理器 或现场可编程门阵列。
进一步公开了芯片上系统的示例,其中,所述特殊分支预测器是管芯上电路 块。
进一步公开了芯片上系统的示例,其中,所述特殊分支预测器用于采用简化 的独热二进制电路系统。
进一步公开了芯片上系统的示例,其中,所述特殊分支预测器包括双层CNN。
进一步公开了芯片上系统的示例,其中,所述特殊分支预测器包括二进制1 维卷积层以及完全连接的二进制层。
进一步公开了芯片上系统的示例,其中,所述1维卷积层用于接收传入(程 序计数器(PC),方向)对,对所述传入对进行掩码,将经掩码的位用作到过滤器响 应表的索引,并且返回L位向量作为响应。
进一步公开了芯片上系统的示例,其中,所述1维卷积层进一步用于将所述 响应推入到N×L位先进先出(FIFO)缓冲器中。
进一步公开了芯片上系统的示例,其中,所述完全连接的二进制层用于对所 述FIFO缓冲器的内容与二进制线性层权重进行XOR,并且将所产生的1的数量计数 为整数总数。
进一步公开了芯片上系统的示例,其中,所述完全连接的二进制层进一步用 于将所述整数总数与阈值进行比较以生成选择或不选择分支预测。
进一步公开了芯片上系统的示例,其中,所述特殊分支预测器用于从经训练 的CNN接收元数据。
进一步公开了芯片上系统的示例,其中,所述特殊分支预测器进一步包括 CNN辅助预测器。
还公开了一种执行难预测(hard-to-predict,HTP)分支预测的计算机实施的 方法的示例,所述方法包括:将分支过滤器应用于分支电路系统以标识HTP分支; 以及根据卷积神经网络(CNN)算法预测针对所述HTP分支的分支动作。
进一步公开了计算机实现的方法的示例,其中,所述CNN算法包括简化的 独热二进制电路系统。
进一步公开了计算机实现的方法的示例,其中,所述CNN算法是双层CNN 算法。
进一步公开了计算机实现的方法的示例,其中,所述双层CNN算法包括二 进制1维卷积层以及完全连接的二进制层。
进一步公开了计算机实现的方法的示例,其中,所述1维卷积层用于接收传 入(程序计数器(PC),方向)对,对所述传入对进行掩码,将经掩码的位用作到过 滤器响应表的索引,并且返回L位向量作为响应。
进一步公开了计算机实现的方法的示例,其中,所述1维卷积层进一步用于 将所述响应推入到N×L位先进先出(FIFO)缓冲器中。
进一步公开了计算机实现的方法的示例,其中,所述完全连接的二进制层用 于对所述FIFO缓冲器的内容与二进制线性层权重进行XOR,并且将所产生的1的数 量计数为整数总数。
进一步公开了计算机实现的方法的示例,所述方法进一步包括将所述整数总 数与阈值进行比较以生成选择或不选择分支预测。
进一步公开了计算机实现的方法的示例,所述方法进一步包括根据来自经训 练CNN的元数据训练所述CNN算法。
进一步公开了设备的示例,所述设备包括用于执行如多个上述示例所述的方 法的装置。
进一步公开了设备的示例,其中,所述装置包括微处理器,所述微处理器包 括特殊分支预测器。
进一步公开了设备的示例,其中,所述特殊分支预测器包括管芯上电路块。
进一步公开了设备的示例,其中,所述特殊分支预测器包括协处理器或现场 可编程门阵列。
进一步公开了芯片上系统的示例,所述芯片上系统包括如多个上述示例所述 的设备。
进一步公开了设备的示例,所述设备进一步包括CNN辅助预测器。
还公开了一种执行分支预测的方法的示例,所述方法包括:标识程序的难预 测(HTP)分支;以及访问卷积神经网络(CNN)分支预测器以预测针对所述HTP 分支的分支动作。
进一步公开了方法的示例,其中,访问所述CNN分支预测器包括采用简化 的独热二进制电路系统。
进一步公开了方法的示例,其中,所述CNN分支预测器包括双层CNN。
进一步公开了方法的示例,其中,所述CNN分支预测器包括二进制1维卷 积层以及完全连接的二进制层。
进一步公开了方法的示例,其中,所述1维卷积层用于接收传入(程序计数 器(PC),方向)对,对所述传入对进行掩码,将经掩码的位用作到过滤器响应表的 索引,并且返回L位向量作为响应。
进一步公开了方法的示例,其中,所述1维卷积层进一步用于将所述响应推 入到N×L位先进先出(FIFO)缓冲器中。
进一步公开了方法的示例,其中,所述完全连接的二进制层用于对所述FIFO 缓冲器的内容与二进制线性层权重进行XOR,并且将所产生的1的数量计数为整数 总数。
进一步公开了方法的示例,其中,所述完全连接的二进制层进一步用于对所 述整数总数进行比较以生成选择或不选择分支预测。
进一步公开了方法的示例,所述方法进一步包括从经训练的CNN接收元数 据。
进一步公开了方法的示例,其中,所述CNN分支预测器进一步包括CNN 辅助预测器。
进一步公开了设备的示例,所述设备包括用于执行如多个前述示例所述的方 法的装置。
进一步公开了设备的示例,其中,用于执行所述方法的所述装置包括处理器, 所述处理器包括分支预测器和特殊分支预测器,所述特殊分支预测器包括所述CNN 分支预测器。
进一步公开了设备的示例,其中,所述特殊分支预测器是协处理器。
进一步公开了设备的示例,其中,所述特殊分支预测器是硬件加速器。
进一步公开了设备的示例,其中,所述设备是计算系统。
进一步公开了至少一种计算机可读介质的示例,所述计算机可读介质包括指 令,所述指令当被执行时实施如多个前述示例所述的方法或实现如多个前述示例所述 的设备。

Claims (25)

1.一种处理器,包括:
执行单元,所述执行单元包括分支电路系统;
分支预测器,所述分支预测器包括用于标识难预测HTP分支的HTP分支过滤器;以及
特殊分支预测器,用于从所述HTP分支过滤器接收对HTP分支的标识,所述特殊分支预测器包括用于预测针对所述HTP分支的分支动作的卷积神经网络CNN分支预测器。
2.如权利要求1所述的处理器,其特征在于,所述特殊分支预测器包括协处理器或现场可编程门阵列。
3.如权利要求1所述的处理器,其特征在于,所述特殊分支预测器是管芯上电路块。
4.如权利要求1所述的处理器,其特征在于,所述特殊分支预测器用于:采用简化的独热二进制电路系统。
5.如权利要求1所述的处理器,其特征在于,所述特殊分支预测器包括双层CNN。
6.如权利要求5所述的处理器,其特征在于,所述特殊分支预测器包括二进制1维卷积层以及完全连接的二进制层。
7.如权利要求6所述的处理器,其特征在于,所述1维卷积层用于:接收传入(程序计数器PC,方向)对,对所述传入对进行掩码,将经掩码的位用作到过滤器响应表的索引,并且返回L位向量作为响应。
8.如权利要求7所述的处理器,其特征在于,所述1维卷积层进一步用于:将所述响应推入到N×L位先进先出FIFO缓冲器中。
9.如权利要求8所述的处理器,其特征在于,所述完全连接的二进制层用于:对所述FIFO缓冲器的内容与二进制线性层权重进行异或XOR,并且将所产生的1的数量计数为整数总数。
10.如权利要求9所述的处理器,其特征在于,所述完全连接的二进制层进一步用于:对所述整数总数进行比较以生成选择或不选择分支预测。
11.如权利要求1至8中任一项所述的处理器,其特征在于,所述特殊分支预测器用于:从经训练的CNN接收元数据。
12.如权利要求1至8中任一项所述的处理器,其特征在于,所述特殊分支预测器进一步包括CNN辅助预测器。
13.一种芯片上系统,包括:
输入-输出电路系统;
存储器,用于容纳程序,所述程序包括分支电路系统;以及
处理器,所述处理器包括:
执行单元,所述执行单元包括分支电路系统;
分支预测器,所述分支预测器包括用于标识难预测HTP分支的HTP分支过滤器;以及
特殊分支预测器,用于从所述HTP分支过滤器接收对HTP分支的标识,所述特殊分支预测器包括用于预测针对所述HTP分支的分支动作的卷积神经网络CNN分支预测器。
14.如权利要求13所述的芯片上系统,其特征在于,所述特殊分支预测器包括协处理器或现场可编程门阵列。
15.如权利要求13所述的芯片上系统,其特征在于,所述特殊分支预测器是管芯上电路块。
16.如权利要求13所述的芯片上系统,其特征在于,所述特殊分支预测器用于:采用简化的独热二进制电路系统。
17.如权利要求13所述的芯片上系统,其特征在于,所述特殊分支预测器包括双层CNN。
18.如权利要求17所述的芯片上系统,其特征在于,所述特殊分支预测器包括二进制1维卷积层以及完全连接的二进制层。
19.如权利要求18所述的芯片上系统,其特征在于,所述1维卷积层用于:接收传入(程序计数器PC,方向)对,对所述传入对进行掩码,将经掩码的位用作到过滤器响应表的索引,并且返回L位向量作为响应。
20.如权利要求19所述的芯片上系统,其特征在于,所述1维卷积层进一步用于:将所述响应推入到N×L位先进先出FIFO缓冲器中。
21.如权利要求20所述的芯片上系统,其特征在于,所述完全连接的二进制层用于:对所述FIFO缓冲器的内容与二进制线性层权重进行异或XOR,并且将所产生的1的数量计数为整数总数。
22.如权利要求21所述的芯片上系统,其特征在于,所述完全连接的二进制层进一步用于:将所述整数总数与阈值进行比较以生成选择或不选择分支预测。
23.如权利要求13至22中任一项所述的芯片上系统,其特征在于,所述特殊分支预测器用于:从经训练的CNN接收元数据。
24.如权利要求13至22中任一项所述的芯片上系统,其特征在于,所述特殊分支预测器进一步包括CNN辅助预测器。
25.一种执行难预测HTP分支预测的计算机实施的方法,所述方法包括:
将分支过滤器应用于分支电路系统以标识HTP分支;以及
根据卷积神经网络CNN算法预测针对所述HTP分支的分支动作。
CN201810712208.4A 2017-06-29 2018-06-26 用于难预测分支的预测器 Pending CN109213524A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/637,562 2017-06-29
US15/637,562 US20190004802A1 (en) 2017-06-29 2017-06-29 Predictor for hard-to-predict branches

Publications (1)

Publication Number Publication Date
CN109213524A true CN109213524A (zh) 2019-01-15

Family

ID=64662075

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810712208.4A Pending CN109213524A (zh) 2017-06-29 2018-06-26 用于难预测分支的预测器

Country Status (3)

Country Link
US (1) US20190004802A1 (zh)
CN (1) CN109213524A (zh)
DE (1) DE102018005099A1 (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109947564A (zh) * 2019-03-07 2019-06-28 阿里巴巴集团控股有限公司 业务处理方法、装置、设备及存储介质
CN112579373A (zh) * 2020-12-08 2021-03-30 海光信息技术股份有限公司 用于分支预测器的验证方法、系统、设备以及存储介质
CN116956098A (zh) * 2023-09-21 2023-10-27 四川吉利学院 一种基于感知分布式对比学习框架的长尾轨迹预测方法
CN117909254A (zh) * 2024-03-20 2024-04-19 北京微核芯科技有限公司 分支预测方法、装置及存储介质
CN117909254B (zh) * 2024-03-20 2024-05-31 北京微核芯科技有限公司 分支预测方法、装置及存储介质

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20200210813A1 (en) * 2018-12-30 2020-07-02 Robert Bosch Gmbh Distributed neural networks for edge devices
WO2020247829A1 (en) * 2019-06-07 2020-12-10 Futurewei Technologies, Inc. Apparatus and method for efficient branch prediction using machine learning
US11630670B2 (en) * 2021-07-21 2023-04-18 Apple Inc. Multi-table signature prefetch
US11803386B2 (en) 2021-09-16 2023-10-31 International Business Machines Corporation Neuron cache-based hardware branch prediction
WO2023129126A1 (en) * 2021-12-28 2023-07-06 Futurewei Technologies, Inc. Machine learning for stride predictor for memory prefetch
CN117238420A (zh) * 2023-11-14 2023-12-15 太原理工大学 一种极薄带力学性能预测方法及装置

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109947564A (zh) * 2019-03-07 2019-06-28 阿里巴巴集团控股有限公司 业务处理方法、装置、设备及存储介质
CN109947564B (zh) * 2019-03-07 2023-04-11 蚂蚁金服(杭州)网络技术有限公司 业务处理方法、装置、设备及存储介质
CN112579373A (zh) * 2020-12-08 2021-03-30 海光信息技术股份有限公司 用于分支预测器的验证方法、系统、设备以及存储介质
CN116956098A (zh) * 2023-09-21 2023-10-27 四川吉利学院 一种基于感知分布式对比学习框架的长尾轨迹预测方法
CN117909254A (zh) * 2024-03-20 2024-04-19 北京微核芯科技有限公司 分支预测方法、装置及存储介质
CN117909254B (zh) * 2024-03-20 2024-05-31 北京微核芯科技有限公司 分支预测方法、装置及存储介质

Also Published As

Publication number Publication date
US20190004802A1 (en) 2019-01-03
DE102018005099A1 (de) 2019-01-03

Similar Documents

Publication Publication Date Title
CN109213524A (zh) 用于难预测分支的预测器
CN104838357B (zh) 向量化方法、系统及处理器
CN109791488A (zh) 用于执行用于复数的融合乘-加指令的系统和方法
CN108268422A (zh) 用于处理非常稀疏和超稀疏矩阵数据的硬件加速器架构
CN108268283A (zh) 用于利用约简操作来支持数据并行循环的计算引擎架构
CN104011673B (zh) 向量频率压缩指令
CN109478139A (zh) 用于共享存储器中的访问同步的装置、方法和系统
CN107250993A (zh) 向量缓存行写回处理器、方法、系统和指令
CN107003844A (zh) 用于矢量广播和xorand逻辑指令的装置和方法
CN106030510A (zh) 三源操作数浮点加法处理器、方法、系统和指令
CN104011671B (zh) 用于执行置换操作的设备和方法
CN104011657A (zh) 用于向量计算和累计的装置和方法
CN107077329A (zh) 用于通过无序硬件软件协同设计处理器中的栈同步指令来实现和维持判定值的栈的方法和设备
CN103999037A (zh) 用于响应于单个指令来执行横向相加或相减的系统、装置和方法
CN108292227A (zh) 用于步进加载的系统、设备和方法
CN104081336A (zh) 用于检测向量寄存器内的相同元素的装置和方法
CN108292224A (zh) 用于聚合收集和跨步的系统、设备和方法
CN104350492A (zh) 在大寄存器空间中利用累加的向量乘法
CN104081341A (zh) 用于多维数组中的元素偏移量计算的指令
CN104335166A (zh) 用于执行混洗和操作(混洗-操作)的系统、装置和方法
CN104115114A (zh) 经改进的提取指令的装置和方法
CN104919432A (zh) 用于将多个位向左移并将多个1拉入较低有效位的指令
CN104011665A (zh) 超级乘加(超级madd)指令
CN104081337A (zh) 用于响应于单个指令来执行横向部分求和的系统、装置和方法
CN107924308A (zh) 数据元素比较处理器、方法、系统和指令

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