CN107003839A - 用于移位和乘法器的指令和逻辑 - Google Patents
用于移位和乘法器的指令和逻辑 Download PDFInfo
- Publication number
- CN107003839A CN107003839A CN201580063499.3A CN201580063499A CN107003839A CN 107003839 A CN107003839 A CN 107003839A CN 201580063499 A CN201580063499 A CN 201580063499A CN 107003839 A CN107003839 A CN 107003839A
- Authority
- CN
- China
- Prior art keywords
- instruction
- logic
- parameters
- numeral
- processor
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000006073 displacement reaction Methods 0.000 claims abstract description 32
- 238000000034 method Methods 0.000 claims description 52
- 230000015654 memory Effects 0.000 description 100
- 239000000047 product Substances 0.000 description 61
- 238000012856 packing Methods 0.000 description 58
- 238000003860 storage Methods 0.000 description 53
- 238000010586 diagram Methods 0.000 description 42
- 238000012545 processing Methods 0.000 description 37
- 230000006870 function Effects 0.000 description 35
- 230000007246 mechanism Effects 0.000 description 21
- 230000008569 process Effects 0.000 description 21
- 239000000872 buffer Substances 0.000 description 16
- 238000004891 communication Methods 0.000 description 16
- 238000005516 engineering process Methods 0.000 description 16
- 238000004519 manufacturing process Methods 0.000 description 16
- 238000013461 design Methods 0.000 description 13
- 238000007667 floating Methods 0.000 description 13
- 239000003795 chemical substances by application Substances 0.000 description 12
- 230000008878 coupling Effects 0.000 description 10
- 238000010168 coupling process Methods 0.000 description 10
- 238000005859 coupling reaction Methods 0.000 description 10
- 230000006399 behavior Effects 0.000 description 8
- 238000006243 chemical reaction Methods 0.000 description 7
- 230000008707 rearrangement Effects 0.000 description 7
- 238000007906 compression Methods 0.000 description 6
- 230000014509 gene expression Effects 0.000 description 6
- 230000005540 biological transmission Effects 0.000 description 5
- 230000008859 change Effects 0.000 description 5
- 230000006835 compression Effects 0.000 description 5
- 230000002093 peripheral effect Effects 0.000 description 5
- 238000004088 simulation Methods 0.000 description 5
- 230000003068 static effect Effects 0.000 description 5
- 238000004422 calculation algorithm Methods 0.000 description 4
- 230000000295 complement effect Effects 0.000 description 4
- 238000013500 data storage Methods 0.000 description 4
- 238000010606 normalization Methods 0.000 description 4
- 239000007787 solid Substances 0.000 description 4
- 241000894007 species Species 0.000 description 4
- 241001269238 Data Species 0.000 description 3
- 230000001133 acceleration Effects 0.000 description 3
- 230000008901 benefit Effects 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 3
- 238000009826 distribution Methods 0.000 description 3
- 230000005611 electricity Effects 0.000 description 3
- 238000013507 mapping Methods 0.000 description 3
- 238000003032 molecular docking Methods 0.000 description 3
- 238000002360 preparation method Methods 0.000 description 3
- 238000013139 quantization Methods 0.000 description 3
- 239000004065 semiconductor Substances 0.000 description 3
- XLYOFNOQVPJJNP-UHFFFAOYSA-N water Substances O XLYOFNOQVPJJNP-UHFFFAOYSA-N 0.000 description 3
- 241000208340 Araliaceae Species 0.000 description 2
- 235000005035 Panax pseudoginseng ssp. pseudoginseng Nutrition 0.000 description 2
- 235000003140 Panax quinquefolius Nutrition 0.000 description 2
- 101100285899 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) SSE2 gene Proteins 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 2
- 230000009471 action Effects 0.000 description 2
- HUTDUHSNJYTCAR-UHFFFAOYSA-N ancymidol Chemical compound C1=CC(OC)=CC=C1C(O)(C=1C=NC=NC=1)C1CC1 HUTDUHSNJYTCAR-UHFFFAOYSA-N 0.000 description 2
- 230000015572 biosynthetic process Effects 0.000 description 2
- 230000003139 buffering effect Effects 0.000 description 2
- 238000000151 deposition Methods 0.000 description 2
- 239000004744 fabric Substances 0.000 description 2
- 235000008434 ginseng Nutrition 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 239000004973 liquid crystal related substance Substances 0.000 description 2
- 230000033001 locomotion Effects 0.000 description 2
- 229910052754 neon Inorganic materials 0.000 description 2
- GKAOGPIIYCISHV-UHFFFAOYSA-N neon atom Chemical compound [Ne] GKAOGPIIYCISHV-UHFFFAOYSA-N 0.000 description 2
- 230000001737 promoting effect Effects 0.000 description 2
- 238000005070 sampling Methods 0.000 description 2
- 239000000758 substrate Substances 0.000 description 2
- 230000009466 transformation Effects 0.000 description 2
- 238000011282 treatment Methods 0.000 description 2
- 239000011800 void material Substances 0.000 description 2
- 241000256844 Apis mellifera Species 0.000 description 1
- 239000010752 BS 2869 Class D Substances 0.000 description 1
- 101000912503 Homo sapiens Tyrosine-protein kinase Fgr Proteins 0.000 description 1
- 102000001332 SRC Human genes 0.000 description 1
- 108060006706 SRC Proteins 0.000 description 1
- 235000012377 Salvia columbariae var. columbariae Nutrition 0.000 description 1
- 102100026150 Tyrosine-protein kinase Fgr Human genes 0.000 description 1
- 238000009412 basement excavation Methods 0.000 description 1
- 238000010009 beating Methods 0.000 description 1
- 229910002056 binary alloy Inorganic materials 0.000 description 1
- 239000006227 byproduct Substances 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 240000001735 chia Species 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 230000006837 decompression Effects 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 238000012938 design process Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000018109 developmental process Effects 0.000 description 1
- 235000013399 edible fruits Nutrition 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005538 encapsulation Methods 0.000 description 1
- 230000002349 favourable effect Effects 0.000 description 1
- 102000054766 genetic haplotypes Human genes 0.000 description 1
- 238000009499 grossing Methods 0.000 description 1
- 238000003384 imaging method Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 210000003127 knee Anatomy 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 239000003550 marker Substances 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 238000002156 mixing Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000013442 quality metrics Methods 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 238000001228 spectrum Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000003786 synthesis reaction Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000001052 transient effect Effects 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
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/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/52—Multiplying; Dividing
- G06F7/523—Multiplying only
- G06F7/527—Multiplying only in serial-parallel fashion, i.e. one operand being entered serially and the other in parallel
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/52—Multiplying; Dividing
- G06F7/523—Multiplying only
- G06F7/53—Multiplying only in parallel-parallel fashion, i.e. both operands being entered in parallel
- G06F7/5306—Multiplying only in parallel-parallel fashion, i.e. both operands being entered in parallel with row wise addition of partial products
-
- 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/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- 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/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
-
- 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3818—Decoding for concurrent execution
- G06F9/3822—Parallel decoding, e.g. parallel decode units
-
- 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/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3851—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
-
- 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/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3856—Reordering of instructions, e.g. using queues or age tags
-
- 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
-
- 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/3887—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
-
- 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
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Optimization (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Physics (AREA)
- Multimedia (AREA)
- Computing Systems (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
Abstract
处理器包括包含解码器的前端、包含移位和乘法器(SSM)的执行单元、以及引退单元。解码器包括识别乘法指令以将第一数字和第二数字相乘的逻辑。执行单元包括基于指令访问基于第二数字的查找表以确定多个移位参数和一个或多个标志参数的逻辑。SSM包括使用移位参数来移位第一数字以确定多个部分乘积以及使用标志参数来确定部分乘积的符号的逻辑。SSM还包括对部分乘积求和以产生该乘法指令的结果的逻辑。
Description
技术领域
本公开涉及处理逻辑、微处理器以及相关联的指令集架构的领域,所述指令集架构当由处理器或其它处理逻辑执行时执行逻辑、数学或其它功能操作。
相关技术的描述
多处理器***正变得越来越普遍。多处理器***的应用包含动态域分区一直下来到桌面计算。为了利用多处理器***,要执行的代码可以分离成多个线程以用于由各种处理实体执行。每个线程可以彼此并行执行。此外,为了增加处理实体的效用,可以采用无序执行。当使对此类指令的输入可用时,无序执行可以执行指令。从而,在代码序列中稍后出现的指令可在代码序列中较早出现的指令之前执行。
附图说明
在附图的图中通过示例而非限制的方式图示了实施例:
图1A是根据本公开的实施例用可以包含执行指令的执行单元的处理器形成的示例性计算机***的框图;
图1B图示了根据本公开的实施例的数据处理***;
图1C图示了用于执行文本字符串比较操作的数据处理***的其它实施例;
图2是根据本公开的实施例的针对可以包含执行指令的逻辑电路的处理器的微架构的框图;
图3A图示了根据本公开的实施例的多媒体寄存器中的各种打包(packed)数据类型表示;
图3B图示了根据本公开的实施例的可能寄存器中的数据存储格式;
图3C图示了根据本公开的实施例的多媒体寄存器中的各种有符号和无符号的打包数据类型表示;
图3D图示了操作编码格式的实施例;
图3E图示了根据本公开的实施例的具有40比特或更多比特的另一可能操作编码格式;
图3F图示了根据本公开的实施例的又另一可能操作编码格式;
图4A是图示了根据本公开的实施例的有序流水线和寄存器重命名阶段、无序发布/执行流水线的框图;
图4B是图示了根据本公开实施例的要包含在处理器中的有序架构核以及寄存器重命名逻辑、无序发布/执行逻辑的框图;
图5A是根据本公开的实施例的处理器的框图;
图5B是根据本公开的实施例的核的示例实现的框图;
图6是根据本公开的实施例的***的框图;
图7是根据本公开的实施例的第二***的框图;
图8是根据本公开的实施例的第三***的框图;
图9是根据本公开的实施例的片上***的框图;
图10图示了根据本公开的实施例的可以执行至少一个指令的包含中央处理单元和图形处理单元的处理器;
图11是图示根据本公开的实施例的开发IP核的框图;
图12图示了根据本公开的实施例的可如何由不同类型的处理器仿真第一类型的指令;
图13图示了根据本公开的实施例对比使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图;
图14是根据本公开的实施例的处理器的指令集架构的框图;
图15是根据本公开的实施例的处理器的指令集架构的更详细框图;
图16是根据本公开的实施例的用于处理器的指令集架构的执行流水线的框图;
图17是根据本公开的实施例的用于利用处理器的电子设备的框图;
图18是根据本公开的实施例的具有用于移位和乘法器(SSM)的硬件的***的一部分的框图;
图19是根据本公开的实施例的具有被乘数的特定值范围的移位和(shift-sum)乘法器模块的图示;
图20是根据本公开的实施例的具有被乘数的其他特定值范围的移位和乘法器模块的图示;和
图21是根据本公开的实施例的用于移位和乘法的方法的实施例的流程图。
具体实施方式
下面的描述描述了一种指令和处理逻辑,用于硬件支持用于在处理器、虚拟处理器、封装、计算机***或其他处理装置内或与处理器、虚拟处理器、计算机***或其他处理装置相关联的移位和乘法器。此外,可以使用量化的最近相邻查找表来进行移位和乘法器的使用。在下面的描述中,阐述了诸如处理逻辑、处理器类型、微架构条件、事件、启用机制等的许多具体细节,以便提供对本公开的实施例的更全面理解。然而,本领域技术人员将认识到,没有这样的具体细节也可实践实施例。此外,一些众所周知的结构、电路等未详细示出,以避免不必要地模糊本公开的实施例。
尽管参考处理器描述了如下实施例,但其它实施例可应用于其它类型集成电路和逻辑器件。本公开的实施例的类似技术和教导可应用于可受益于更高流水线吞吐量和改进性能的其它类型电路或半导体器件。本公开实施例的教导可应用于执行数据操纵的任何处理器或机器。然而,实施例不限于执行512比特、256比特、128比特、64比特、32比特或16比特数据操作的处理器或机器,并且可应用于在其中可以执行数据操纵或管理的任何处理器和机器。此外,如下描述提供了示例,并且附图为了图示的目的而图示了各种示例。然而,这些示例不应被视为限制意义,因为它们仅仅旨在提供本公开的实施例的示例,而不是提供本公开的实施例的所有可能实现的详尽列表。
尽管以下示例在执行单元和逻辑电路的上下文中描述了指令处置和分发(distribute),但本公开的其它实施例可以通过存储在机器可读有形介质上的数据或指令来实现,所述指令当由机器执行时使机器执行与本公开的至少一个实施例一致的功能。在一个实施例中,与本公开的实施例相关联的功能体现在机器可执行指令中。指令可用于使可以利用指令进行编程的通用或专用处理器执行本公开的步骤。本公开的实施例可以被提供为计算机程序产品或软件,该产品或软件可以包括机器或计算机可读介质,其上存储有可用于对计算机(或其它电子设备)进行编程以执行根据本公开的实施例的一个或多个操作的指令。而且,本公开的实施例的步骤可能由包含用于执行所述步骤的固定功能逻辑的特定硬件组件执行,或者由编程的计算机组件和固定功能硬件组件的任何组合执行。
可以将用于对逻辑进行编程以执行本公开的实施例的指令存储在***中的存储器内,诸如DRAM、高速缓存、闪存或其它存储装置内。而且,指令可以经由网络或通过其它计算机可读介质分发。从而,机器可读介质可以包含用于存储或传送由机器(例如计算机)可读形式的信息的任何机制,但不限于软盘、光盘、压缩盘只读存储器(CD-ROM)和磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、磁卡或光卡、闪存或在因特网上经由电、光、声或其它形式传播信号(例如载波、红外信号、数字信号等)传送信息中使用的有形机器可读存储装置。相应地,计算机可读介质可以包含适合于存储或传送由机器(例如计算机)可读形式的电子指令或信息的任何类型有形机器可读介质。
设计从创建到模拟到制造可以经过各种阶段。表示设计的数据可以用多种方式表示该设计。首先,如在模拟中可能有用的,可以使用硬件描述语言或另一功能描述语言来表示硬件。此外,在设计过程的某些阶段,可以产生具有逻辑和/或晶体管栅的电路级模型。而且,设计在某一阶段可以达到表示硬件模型中各种设备的物理布置的数据级。在其中使用一些半导体制造技术的情况下,表示硬件模型的数据可以是指定在用于产生集成电路的掩模的不同掩模层上存在或缺乏各种特征的数据。在设计的任何表示中,数据可以存储在任何形式的机器可读介质中。诸如盘之类的磁或光存储装置或者存储器可以是机器可读介质,以存储经由调制或以其它方式生成以传送信息的光波或电波传送的信息。在传送指示或携带代码或设计的电载波时,就执行电信号的复制、缓冲或重新传送而言,可以进行新的拷贝。从而,通信提供商或网络提供商可以在有形机器可读介质上至少暂时存储体现本公开的实施例的技术的制品,诸如编码到载波中的信息。
在现代处理器中,可以使用若干不同执行单元来处理和执行各种代码和指令。一些指令可能更快地完成,而其它指令可能花了若干时钟周期完成。指令的吞吐量越快,处理器的总体性能越好。从而,使许多指令尽可能快地执行会是有利的。然而,可能存在具有更大复杂性并且在执行时间和处理器资源方面要求更多的某些指令,如浮点指令、加载/存储操作、数据移动等。
当在因特网、文本和多媒体应用中使用更多计算机***时,已经随时间引入了附加处理器支持。在一个实施例中,指令集可与一个或多个计算机架构相关联,包含数据类型、指令、寄存器架构、寻址模式、存储器架构、中断和异常处置以及外部输入和输出(I/O)。
在一个实施例中,指令集架构(ISA)可由一个或多个微架构实现,微架构可以包含用于实现一个或多个指令集的处理器逻辑和电路。相应地,具有不同微架构的处理器至少可以共享部分公共指令集。例如,Intel® Pentium 4处理器、Intel® Core™处理器以及来自加利福尼亚州桑尼维尔的Advanced Micro devices公司的处理器实现了几乎相同版本的x86指令集(具有已经用较新版本添加的一些扩展),但具有不同的内部设计。类似地,由其它处理器开发公司(诸如ARM控股公司、MIPS或他们的许可方或采纳方)设计的处理器至少可共享一部分公共指令集,但可以包含不同处理器设计。例如,ISA的相同寄存器架构可使用新的或公知的技术在不同微架构中以不同方式实现,包括专用物理寄存器、使用寄存器重命名机制(例如,使用寄存器别名表(RAT)、重新排序缓冲器(ROB)和引退寄存器文件)的一个或多个动态分配的物理寄存器。在一个实施例中,寄存器可以包括一个或多个寄存器、寄存器架构、寄存器文件或可以或可以不由软件程序员寻址的其它寄存器集。
指令可以包含一个或多个指令格式。在一个实施例中,除了其它之外,指令格式还可以指示要指定的各种字段(比特数、比特的位置等)、要执行的操作以及在其上将执行操作的操作数。在另外实施例中,一些指令格式可由指令模板(或子格式)进一步定义。例如,给定指令格式的指令模板可以定义成具有指令格式字段的不同子集,和/或定义成具有不同解释的给定字段。在一个实施例中,指令可以使用指令格式(并且如果定义了,则在那个指令格式的指令模板中的给定一个模板中)表述,并且指定或指示操作和在其上将执行操作的操作数。
科学、金融、自动向量化通用、RMS(识别、挖掘和合成)以及视觉和多媒体应用(例如,2D/3D图形、图像处理、视频压缩/解压缩、语音识别算法和音频操纵)可要求对大量数据项执行相同操作。在一个实施例中,单指令多数据(SIMD)是指使得处理器对多个数据元素执行操作的指令的类型。在逻辑上可将寄存器中的比特划分成多个固定大小或可变大小数据元素(每个元素表示单独的值)的SIMD技术可使用在处理器中。例如,在一个实施例中,可将64比特寄存器中的比特组织为包含4个单独16比特数据元素的源操作数,每个元素表示单独的16比特值。此类型的数据可称为“打包”数据类型或“向量”数据类型,并且此数据类型的操作数可称为打包数据操作数或向量操作数。在一个实施例中,打包数据项或向量可以是在单个寄存器内存储的打包数据元素的序列,并且打包数据操作数或向量操作数可以是SIMD指令(或“打包数据指令”或“向量指令”)的源或目的地操作数。在一个实施例中,SIMD指令指定要对两个源向量操作数执行的单向量操作,以生成相同或不同大小的具有相同或不同数量的数据元素和以相同或不同的数据元素顺序的目的地向量操作数(也称为结果向量操作数)。
例如由具有包括x86、MMX™、流式传输SIMD扩展(SSE)、SSE2、SSE3、SSE4.1以及SSE4.2指令的指令集的Intel® Core™处理器,诸如ARM Cortex®系列处理器的具有包括向量浮点(VFP)和/或NEON指令的指令集的ARM处理器和诸如由中国科学院的计算技术研究所(ICT)开发的龙芯系列处理器的MIPS处理器采用的SIMD技术已经在应用性能方面实现了相当大的改进(Core™和MMX™是加利福尼亚州圣克拉拉的Intel Corporation的注册商标或商标)。
在一个实施例中,目的地和源寄存器/数据可以是表示对应数据或操作的源和目的地的常规术语。在一些实施例中,它们可以通过具有与所描绘的那些名称或功能不同的名称或功能的寄存器、存储器或其它存储区域来实现。例如,在一个实施例中,“DEST1”可以是临时存储寄存器或其它存储区域,而“SRC1”和“SRC2”可以是第一和第二源存储寄存器或其它存储区域并以此类推。在其它实施例中,两个或更多个SRC和DEST存储区域可以对应于相同存储区域(例如,SIMD寄存器)内的不同数据存储元素。在一个实施例中,例如通过将对第一和第二源数据执行的操作的结果写回到用作目的地寄存器的两个源寄存器中的一个,源寄存器之一也可充当目的地寄存器。
图1A是根据本公开的实施例的利用可以包括执行指令的执行单元的处理器所形成的示例性计算机***的框图。根据本公开,诸如在本文描述的实施例中,***100可以包括诸如处理器102的组件,以采用包括执行用于处理数据的算法的逻辑的执行单元。***100可表示基于从加利福尼亚州圣克拉拉的Intel Corporation可用的PENTIUM® III、PENTIUM®4、Xeon™、Itanium®、XScale™和/或StrongARM™微处理器的处理***,尽管也可使用其它***(包括具有其它微处理器的PC、工程工作站、机顶盒等)。在一个实施例中,示例***100可以执行从华盛顿州雷德蒙德的Microsoft Corporation可用的一版本的Windows™操作***,尽管也可使用其它操作***(例如,UNIX和Linux)、嵌入式软件和/或图形用户界面。因此,本公开的实施例不限于硬件电路和软件的任何特定组合。
实施例并不限于计算机***。本公开的实施例可在诸如手持设备和嵌入式应用的其它设备中使用。手持设备的一些示例包括蜂窝电话、因特网协议设备、数码相机、个人数字助理(PDA)以及手持PC。嵌入式应用可以包括微控制器、数字信号处理器(DSP)、片上***、网络计算机(NetPC)、机顶盒、网络集线器、广域网(WAN)交换机或可执行根据至少一个实施例的一个或多个指令的任何其它***。
计算机***100可以包含处理器102,处理器102可以包含一个或多个执行单元108以执行按照本公开一个实施例执行至少一个指令的算法。一个实施例可以在单个处理器桌上型计算机或服务器***的上下文中描述,而其它实施例可以包括在多处理器***中。***100可以是“集线器”***架构的示例。***100可以包括用于处理数据信号的处理器102。处理器102可以包含复杂指令集计算机(CISC)微处理器、精简指令集计算(RISC)微处理器、超长指令字(VLIW)微处理器、实现指令集组合的处理器或任何其它处理器设备,诸如例如数字信号处理器。在一个实施例中,处理器102可以耦合到处理器总线110,其可在处理器102与***100中的其它组件之间传送数据信号。***100的元件可以执行对于本领域熟知的技术人员众所周知的常规功能。
在一个实施例中,处理器102可以包含一级(L1)内部高速缓存存储器104。取决于架构,处理器102可以具有单个内部高速缓存或多级内部高速缓存。在另一个实施例中,高速缓存存储器可以驻留在处理器102外部。取决于具体实现和需要,其它实施例也可以包含内部和外部高速缓存的组合。寄存器文件106可以将不同类型的数据存储在包含整数寄存器、浮点寄存器、状态寄存器和指令指针寄存器的各种寄存器中。
包含执行整数和浮点操作的逻辑的执行单元108也驻留在处理器102中。处理器102也可以包含存储某些宏指令的微代码的微代码(ucode)ROM。在一个实施例中,执行单元108可以包含处置打包指令集109的逻辑。通过在通用处理器102的指令集中包括打包指令集109,连同执行指令的相关联电路,可以使用通用处理器102中的打包数据执行由许多多媒体应用使用的操作。从而,通过使用处理器的数据总线的完全宽度来对打包数据执行操作,可以加速和更有效地执行许多多媒体应用。这可以消除跨处理器的数据总线传输更小数据单元来一次一个数据元素地执行一个或多个操作的需要。
执行单元108的实施例也可用在微控制器、嵌入式处理器、图形设备、DSP以及其它类型逻辑电路中。***100可以包含存储器120。可以将存储器120实现为动态随机存取存储器(DRAM)设备、静态随机存取存储器(SRAM)设备、闪存设备或其它存储器设备。存储器120可以存储由数据信号表示的可由处理器102执行的指令和/或数据。
***逻辑芯片116可以耦合到处理器总线110和存储器120。***逻辑芯片116可以包含存储器控制器集线器(MCH)。处理器102可以经由处理器总线110来与MCH 116通信。MCH116可以提供到存储器120的高带宽存储器路径118,所述存储器120用于指令和数据存储以及用于图形命令、数据和文本的存储。MCH 116可以在处理器102、存储器120和***100中的其它组件之间引导数据信号,并在处理器总线110、存储器120和***I/O 122之间桥接数据信号。在一些实施例中,***逻辑芯片116可以提供用于耦合到图形控制器112的图形端口。MCH 116可以通过存储器接口118耦合到存储器120。图形卡112可以通过加速图形端口(AGP)互连114耦合到MCH 116。
***100可以使用专有集线器接口总线122将MCH 116耦合到I/O控制器集线器(ICH)130。在一个实施例中,ICH 130可以经由本地I/O总线提供到一些I/O设备的直接连接。本地I/O总线可以包含用于将外设连接到存储器120、芯片集和处理器102的高速I/O总线。示例可以包含音频控制器、固件集线器(闪速BIOS)128、无线收发器126、数据存储装置124、包含用户输入和键盘接口的传统I/O控制器、诸如通用串行总线(USB)之类的串行扩展端口和网络控制器134。数据存储设备124可以包括硬盘驱动器、软盘驱动器、CD-ROM设备、闪存设备或其它大容量存储设备。
对于***的另一个实施例,根据一个实施例的指令可与片上***一起使用。片上***的一个实施例包括处理器和存储器。一个此类***的存储器可以包含闪存。闪存可以位于与处理器和其它***组件相同的管芯上。此外,诸如存储器控制器或图形控制器的其它逻辑块也可以位于片上***上。
图1B图示了实现本公开的实施例的原理的数据处理***140。本领域技术人员将容易认识到,本文描述的实施例可以利用替代处理***来进行操作而不脱离本公开实施例的范围。
根据一个实施例,计算机***140包括用于执行至少一个指令的处理核159。在一个实施例中,处理核159表示任何类型架构的处理单元,包含但不限于CISC、RISC或VLIW型架构。处理核159还可适合于以一个或多个工艺技术的制造,并且通过充分详细地表示在机器可读介质上,可适合于促进所述制造。
处理核159包括执行单元142、寄存器文件集合145和解码器144。处理核159还可以包含对理解本公开的实施例不必要的附加电路(未示出)。执行单元142可以执行由处理核159接收的指令。除了执行典型处理器指令之外,执行单元142还可以执行打包指令集143中的指令,以用于执行对打包数据格式的操作。打包指令集143可以包含用于执行本公开的实施例的指令以及其它打包指令。执行单元142可通过内部总线耦合到寄存器文件145。寄存器文件145可以表示处理核159上的用于存储包含数据的信息的存储区域。如先前所提到的,要理解,存储区域可以存储可能不关键的打包数据。执行单元142可以耦合到解码器144。解码器144可将由处理核159接收的指令解码成控制信号和/或微代码入口点。响应于这些控制信号和/或微代码入口点,执行单元142执行适当的操作。在一个实施例中,解码器可以解释指令的操作码,其将指示应该对在指令内指示的对应数据执行什么操作。
处理核159可与总线141耦合,以用于与各种其它***设备通信,所述其他***设备例如可以包括但不限于:同步动态随机存取存储器(SDRAM)控制146、静态随机存取存储器(SRAM)控制147、突发闪存接口148、个人计算机存储卡国际协会(PCMCIA)/致密闪存(CF)卡控制149、液晶显示器(LCD)控制150、直接存储器存取(DMA)控制器151以及替代总线主接口152。在一个实施例中,数据处理***140还可以包括I/O桥154以用于经由I/O总线153与各种I/O设备通信。此类I/O设备例如可以包含但不限于通用异步接收器/传送器(UART)155、通用串行总线(USB) 156、蓝牙无线UART 157和I/O扩展接口158。
数据处理***140的一个实施例提供移动、网络和/或无线通信以及可以执行包含文本字符串比较操作的SIMD操作的处理核159。处理核159可以利用各种音频、视频、成像和通信算法编程,包含:离散变换,诸如Walsh-Hadamard变换、快速傅里叶变换(FFT)、离散余弦变换(DCT)以及它们的相应逆变换;压缩/解压缩技术,诸如色彩空间变换、视频编码运动估计或视频解码运动补偿;以及调制/解调(MODEM)功能,诸如脉冲译码调制(PCM)。
图1C图示了执行SIMD文本字符串比较操作的数据处理***的其它实施例。在一个实施例中,数据处理***160可以包含主处理器166、SIMD协处理器161、高速缓存存储器167和输入/输出***168。输入/输出***168可选地可以耦合到无线接口169。SIMD协处理器161可以执行包含根据一个实施例的指令的操作。在一个实施例中,处理核170可适合于以一个或多个工艺技术的制造,并且通过充分详细地表示在机器可读介质上,可适合于促进制造包含处理核170的所有或部分数据处理***160。
在一个实施例中,SIMD协处理器161包括执行单元162和寄存器文件集合164。主处理器165的一个实施例包括解码器165以识别指令集163中的指令--包含根据一个实施例以用于由执行单元162执行的指令。在其它实施例中,SIMD处理器161还包括解码器165的至少部分以解码指令集163中的指令。处理核170还可以包含对理解本公开实施例可能不必要的附加电路(未示出)。
在操作中,主处理器166执行数据处理指令流,其控制包含与高速缓存存储器167和输入/输出***168的交互在内的通用类型的数据处理操作。嵌入在数据处理指令流内的可以是SIMD协处理器指令。主处理器166的解码器165将这些SIMD协处理器指令识别为应该由附连的SIMD协处理器161执行的类型。相应地,主处理器166在协处理器总线166上发布这些SIMD协处理器指令(或表示SIMD协处理器指令的控制信号)。从协处理器总线166,可以由任何附连的SIMD协处理器接收这些指令。在此情况下,SIMD协处理器161可以接受并执行预期用于它的任何接收到SIMD协处理器指令。
数据可以经由无线接口169接收以便由SIMD协处理器指令处理。对于一个示例,语音通信可以以数字信号的形式接收,其可由SIMD协处理器指令处理以重新生成代表语音通信的数字音频采样。对于另一个示例,压缩的音频和/或视频可以数字比特流形式接收,其可由SIMD协处理器指令处理以重新生成数字音频采样和/或运动视频帧。在处理核170的一个实施例中,可以将主处理器166和SIMD协处理器161集成到包括执行单元162、寄存器文件集合164和识别指令集163中的指令(包含根据一个实施例的指令)的解码器165的单个处理核170中。
图2是根据本公开的实施例的用于可以包含执行指令的逻辑电路的处理器200的微架构的框图。在一些实施例中,可以实现根据一个实施例的指令,以对具有字节、字、双字、四字等大小以及诸如单和双精度整数和浮点数据类型之类的数据类型的数据元素进行操作。在一个实施例中,有序前端201可以实现处理器200的一部分,该部分可以获取要执行的指令,并且准备在处理器流水线中以后要使用的指令。前端201可以包含若干单元。在一个实施例中,指令预获取器226从存储器中获取指令,并将指令馈送到指令解码器228,解码器228继而解码或解释这些指令。例如,在一个实施例中,解码器将接收的指令解码成机器可以执行的称为“微指令”或“微操作”(也称为micro op或uop)的一个或多个操作。在其它实施例中,解码器将指令解析成操作码和对应的数据以及控制字段,它们可由微架构使用以执行根据一个实施例的操作。在一个实施例中,追踪高速缓存230可以将解码的uop汇编成uop队列234中的程序排序的序列或追踪以供执行。当追踪高速缓存230遇到复杂指令时,微代码ROM 232提供完成该操作所需的uop。
可以将一些指令转换成单个micro-op,而其它指令需要若干micro-op来完成整个操作。在一个实施例中,如果需要多于四个micro-op来完成指令,则解码器228可以访问微代码ROM 232以执行指令。在一个实施例中,指令可以被解码成小数量的micro-op,以用于在指令解码器228处进行处理。在另一个实施例中,可以将指令存储在微代码ROM 232内--如果需要多个micro-op来完成操作的话。追踪高速缓存230指的是入口点可编程逻辑阵列(PLA),以确定正确的微指令指针,以用于读取微代码序列,从而完成来自微代码ROM 232的根据一个实施例的一个或多个指令。在微代码ROM 232完成针对指令的micro-op排序后,机器的前端201可以恢复从追踪高速缓存230获取micro-op。
无序执行引擎203可以准备指令以用于执行。无序执行逻辑具有多个缓冲器,以在指令沿流水线向下并且被调度用于执行时平滑处理和重新排序指令的流以优化性能。分配器逻辑分配每个uop为了执行而需要的机器缓冲器和资源。寄存器重命名逻辑将逻辑寄存器重命名到寄存器文件中的条目上。在指令调度器:存储器调度器、快速调度器202、慢速/通用浮点调度器204和简单浮点调度器206前面,分配器还为两个uop队列--一个用于存储器操作,并且一个用于非存储器操作--之一中的每个uop分配条目。uop调度器202、204、206基于其相关性输入寄存器操作数源的准备度和uop完成其操作需要的执行资源的可用性,确定uop何时准备就绪执行。一个实施例的快速调度器202可以在主时钟周期的每半个周期上进行调度,而其它调度器可以每主处理器时钟周期仅调度一次。调度器对于分派端口进行裁决以调度uop以便执行。
寄存器文件208、210可以布置在调度器202、204、206与执行块211中的执行单元212、214、216、218、220、222、224之间。寄存器文件208、210中的每个分别执行整数操作和浮点操作。每个寄存器文件208、210可以包含旁路网络,其可以旁路尚未写入寄存器文件中的刚刚完成的结果或者将其向新的相关uop转发。整数寄存器文件208和浮点寄存器文件210可以相互传递数据。在一个实施例中,将整数寄存器文件208分成两个单独的寄存器文件,一个寄存器文件用于数据的低位32比特,而第二寄存器文件用于数据的高位32比特。浮点寄存器文件210可以包含128比特宽条目,因为浮点指令通常具有从64比特到128比特宽的操作数。
执行块211可以包含执行单元212、214、216、218、220、222、224。执行单元212、214、216、218、220、222、224可以执行指令。执行块211可以包含存储微指令需要执行的整数和浮点数据操作数值的寄存器文件208、210。在一个实施例中,处理器200可以包括多个执行单元:地址生成单元(AGU)212、AGU 214、快速算术逻辑单元(ALU)216、快速ALU 218、慢速ALU220、浮点ALU 222、浮点移动单元224。在另一个实施例中,浮点执行块222、224可以执行浮点、MMX、SIMD和SSE或其它操作。在又另一个实施例中,浮点ALU 222可以包含64比特×64比特浮点除法器以执行除法、平方根和余数micro-op。在各种实施例中,涉及浮点值的指令可以利用浮点硬件来处置。在一个实施例中,ALU操作可以传到高速ALU执行单元216、218。高速ALU 216、218可以通过时钟周期一半的有效等待时间而执行快速操作。在一个实施例中,最复杂的整数操作去到慢速ALU 220,因为慢速ALU 220可以包括用于长等待时间类型操作的整数执行硬件,如乘法器、位移、标记逻辑和分支处理。存储器加载/存储操作可以由AGU212、214执行。在一个实施例中,整数ALU 216、218、220可以对64比特数据操作数执行整数操作。在其它实施例中,可以实现ALU 216、218、220以支持各种数据比特大小,包含16、32、128、256等。类似地,可以实现浮点单元222、224以支持具有各种宽度比特的一系列操作数。在一个实施例中,浮点单元222、224可以结合SIMD和多媒体指令对128比特宽打包数据操作数进行操作。
在一个实施例中,在父加载(parent load)已经完成执行之前,uop调度器202、204、206分派相关操作。当在处理器200中推测性地调度和执行uop时,处理器200还可以包含处置存储器丢失的逻辑。如果数据加载在数据高速缓存中丢失,则流水线中可以存在执行中(in flight)相关操作,其为调度器留下了暂时不正确的数据。重放机制跟踪和重新执行使用不正确数据的指令。可能只需要重放相关操作,并且可以允许完成独立的操作。处理器的一个实施例的调度器和重放机制也可以设计成捕捉用于文本字符串比较操作的指令序列。
术语“寄存器”可以指代可用作识别操作数的部分指令的板载处理器存储位置。换言之,寄存器可以是从处理器的外部可使用的那些寄存器(从程序员的角度而言)。然而,在一些实施例中,寄存器可能不限于特定类型的电路。相反,寄存器可以存储数据、提供数据、并且执行本文中描述的功能。本文中描述的寄存器可由处理器内的电路使用任何数量的不同技术实现,例如专用物理寄存器、使用寄存器重命名的动态分配物理寄存器、专用和动态分配物理寄存器的组合等。在一个实施例中,整数寄存器存储32比特整数数据。一个实施例的寄存器文件也包含用于打包数据的8个多媒体SIMD寄存器。对于下面的讨论,可以将寄存器理解为设计成保持打包数据的数据寄存器,诸如来自加利福尼亚州圣克拉拉的IntelCorporation的以MMX技术实现的微处理器中的64比特宽MMX™寄存器(在一些实例中也称为“mm”寄存器)。在整数和浮点形式两者中可用的这些MMX寄存器可以与伴随SIMD 和SSE指令的打包数据元素一起操作。类似地,与SSE2、SSE3、SSE4或更高版本(一般称为“SSEx”)技术有关的128比特宽XMM寄存器可以保持此类打包数据操作数。在一个实施例中,在存储打包数据和整数数据中,寄存器无需区分两种数据类型。在一个实施例中,整数和浮点可以包含在相同寄存器文件或不同寄存器文件中。此外,在一个实施例中,浮点和整数数据可以存储在不同寄存器或相同寄存器中。
在以下附图的示例中,可以描述多个数据操作数。图3A图示了根据本公开的实施例的在多媒体寄存器中的各种打包数据类型表示。图3A图示了用于128比特宽操作数的打包字节310、打包字320和打包双字(dword) 330的数据类型。此示例的打包字节格式310可以是128比特长,并且包含16个打包字节数据元素。字节例如可以定义为8比特的数据。针对每个字节数据元素的信息可以存储在针对字节0的比特7到比特0、针对字节1的比特15到比特8、针对字节2的比特23到比特16以及最后针对字节15的比特120到比特127。因此,在寄存器中可以使用所有可用比特。此存储布置增加了处理器的存储效率。此外,利用访问的16个数据元素,现在可以并行对16个数据元素执行一个操作。
通常,数据元素可以包括与相同长度的其它数据元素一起存储在单个寄存器或存储器位置中的个体数据段。在与SSEx技术有关的打包数据序列中,XMM寄存器中存储的数据元素的数量可以是128比特除以个体数据元素的以比特为单位的长度。类似地,在与MMX和SSE技术有关的打包数据序列中,MMX寄存器中存储的数据元素的数量可以是64比特除以个体数据元素的以比特为单位的长度。虽然图3A中图示的数据类型可以为128比特长,但本公开的实施例也可以利用64比特宽或其它大小的操作数操作。此示例的打包字格式320可以为128比特长,并且包含8个打包字数据元素。每个打包字包含16比特的信息。图3A的打包双字格式330可以为128比特长,并且包含4个打包双字数据元素。每个打包双字数据元素包含32比特的信息。打包四字可以为128比特长,并且包含2个打包四字数据元素。
图3B图示了根据本公开的实施例的可能寄存器中的数据存储格式。每个打包数据可以包括多于一个独立数据元素。图示了三个打包数据格式;打包半341、打包单342和打包双343。打包半341、打包单342和打包双343的一个实施例包含固定点数据元素。对于另一个实施例,打包半341、打包单342和打包双343的一个或多个可以包含浮点数据元素。打包半341的一个实施例可以为128比特长,包含8个16比特数据元素。打包单342的一个实施例可以为128比特长,并且包含4个32比特数据元素。打包双343的一个实施例可以为128比特长,并且包含2个64比特数据元素。将认识到,此类打包数据格式可以进一步扩展到其它寄存器长度,例如,96比特、160比特、192比特、224比特、256比特或更多。
图3C图示了根据本公开的实施例的在多媒体寄存器中的各种有符号和无符号的打包数据类型表示。无符号的打包字节表示344图示了在SIMD寄存器中的无符号的打包字节的存储。针对每个字节数据元素的信息可以存储在针对字节0的比特7到比特0、针对字节1的比特15到比特8、针对字节2的比特23到比特16以及最后针对字节15的比特120到比特127。因此,在寄存器中可以使用所有可用比特。此存储布置可以增加处理器的存储效率。此外,利用访问的16个数据元素,现在可以并行方式对16个数据元素执行一个操作。有符号的打包字节表示345图示了有符号的打包字节的存储。要注意的是,每个字节数据元素的第8比特可以是符号指示符。无符号的打包字表示346图示了在SIMD寄存器中可以如何存储字7到字0。有符号的打包字表示347可以类似于无符号的打包字寄存器中的表示346。要注意的是,每个字数据元素的第16比特可以是符号指示符。无符号的打包双字表示348示出了如何存储双字数据元素。有符号的打包双字表示349可以类似于无符号的打包双字寄存器中的表示348。要注意的是,必需的符号比特可以是每个双字数据元素的第32比特。
图3D图示了操作编码(操作码)的实施例。此外,格式360可以包括寄存器/存储器操作数寻址模式,其与万维网(www) intel.com/design/litcentr上从加利福尼亚州圣克拉拉Intel Corporation可获得的“IA-32 Intel架构软件开发员手册第2卷:指令集参考”(IA-32 Intel Architecture Software Developer's Manual Volume 2: InstructionSet Reference)中描述的操作码格式的类型相对应。在一个实施例中,指令可以通过字段361和362中的一个或多个字段编码。可以识别高达每指令两个操作数位置,包括高达两个源操作数标识符364和365。在一个实施例中,目的地操作数标识符366可以与源操作数标识符364相同,而在其它实施例中,它们可以不同。在另一个实施例中,目的地操作数标识符366可以与源操作数标识符365相同,而在其它实施例中,它们可以不同。在一个实施例中,通过源操作数标识符364和365识别的源操作数之一可通过文本字符串比较操作的结果被改写,而在其它实施例中,标识符364对应于源寄存器元素,并且标识符365对应于目的地寄存器元素。在一个实施例中,操作数标识符364和365可以识别32比特或64比特源和目的地操作数。
图3E图示了根据本公开的实施例的具有40或更多个比特的另一可能操作编码(操作码)格式。操作码格式370与操作码格式360相对应,并且包括可选前缀字节378。根据一个实施例的指令可以通过字段378、371和372的一个或多个字段编码。通过源操作数标识符374和375以及通过前缀字节378,可以识别高达每指令两个操作数位置。在一个实施例中,前缀字节378可以用于识别32比特或64比特源和目的地操作数。在一个实施例中,目的地操作数标识符376可以与源操作数标识符374相同,而在其它实施例中,它们可以不同。对于另一个实施例,目的地操作数标识符376可以与源操作数标识符375相同,而在其它实施例中,它们可以不同。在一个实施例中,指令对通过操作数标识符374和375识别的一个或多个操作数进行操作,并且通过操作数标识符374和375识别的一个或多个操作数可以通过指令的结果被改写,而在其它实施例中,通过标识符374和375识别的操作数可以写入另一寄存器中的另一数据元素。操作码格式360和370允许由MOD字段363和373和由可选比例-索引-基础和位移字节部分地指定的寄存器到(to)寄存器、存储器到寄存器、寄存器接(by)存储器、寄存器接寄存器、寄存器接中间、寄存器到存储器寻址。
图3F图示了根据本公开的实施例的又另一可能操作编码(操作码)格式。64比特单指令多数据(SIMD)算术操作可以通过协处理器数据处理(CDP)指令执行。操作编码(操作码)格式380描绘了具有CDP操作码字段382和0064 389的一个此类CDP指令。CDP指令的类型,对于另一个实施例,操作可以通过字段383、384、387和388的一个或多个字段编码。可以识别高达每指令三个操作数位置,包括高达两个源操作数标识符385、390和一个目的地操作数标识符386。协处理器的一个实施例可以对8、16、32和64比特值进行操作。在一个实施例中,可以对整数数据元素执行指令。在一些实施例中,可以使用条件字段381,有条件地执行指令。对于一些实施例,源数据大小可由字段383编码。在一些实施例中,可以对SIMD字段进行零(Z)、负(N)、进位(C)和溢出(V)检测。对于一些指令,饱和的类型可以由字段384编码。
图4A是根据本公开的实施例的图示了有序流水线和寄存器重命名阶段、无序发布/执行流水线的框图。图4B是根据本公开的实施例的图示了有序架构核和要包括在处理器中的寄存器重命名逻辑、无序发布/执行逻辑的框图。图4A中的实线框图示了有序流水线,而虚线框图示了寄存器重命名、无序发布/执行流水线。类似地,图4B中的实线框图示了有序架构逻辑,而虚线框图示了寄存器重命名逻辑和无序发布/执行逻辑。
在图4A中,处理器流水线400可以包括获取阶段402、长度解码阶段404、解码阶段406、分配阶段408、重命名阶段410、调度(也称为分派或发布)阶段412、寄存器读取/存储器读取阶段414、执行阶段416、写回/存储器写入阶段418、异常处置阶段422以及提交阶段424。
在图4B中,箭头标示在两个或更多个单元之间的耦合,并且箭头的方向指示在那些单元之间数据流的方向。图4B示出了处理器核490,包括耦合到执行引擎单元450的前端单元430,并且两者均可以耦合到存储器单元470。
核490可以是精简指令集计算(RISC)核、复杂指令集计算(CISC)核、超长指令字(VLIM)核或混合或替代核类型。在一个实施例中,核490可以是专用核,诸如例如网络或通信核、压缩引擎、图形核或者诸如此类。
前端单元430可以包括耦合到指令高速缓存单元434的分支预测单元432。指令高速缓存单元434可以耦合到指令转化(translation)后备缓冲器(TLB) 436。TLB 436可以耦合到指令获取单元438,其耦合到解码单元440。解码单元440可以对指令进行解码,并且生成作为输出的一个或多个微操作、微代码入口点、微指令、其它指令或其它控制信号,它们可以从原始指令解码或者以其它方式反映原始指令或者可以从原始指令得到。解码器可以使用各种不同的机制来实现。适合机制的示例包括但不限于查找表、硬件实现、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等。在一个实施例中,指令高速缓存单元434可以还耦合到存储器单元470中的2级(L2)高速缓存单元476。解码单元440可以耦合到执行引擎单元450中的重命名/分配器单元452。
执行引擎单元450可以包括耦合到引退单元454和一个或多个调度器单元456的集合的重命名/分配器单元452。调度器单元456表示任何数量的不同调度器,包括预留站、中央指令窗口等。调度器单元456可以耦合到物理寄存器文件单元458。每个物理寄存器文件单元458表示一个或多个物理寄存器文件,这些文件的不同文件存储一个或多个不同数据类型,如标量整数、标量浮点、打包整数、打包浮点、向量整数、向量浮点、等,状态(例如,作为要执行的下一指令的地址的指令指针)等。物理寄存器文件单元458可以被引退单元154重叠以图示在其中可以实现寄存器重命名和无序执行的各种方式(例如,使用一个或多个重新排序缓冲器和一个或多个引退寄存器文件;使用一个或多个将来文件、一个或多个历史缓冲器和一个或多个引退寄存器文件;使用寄存器映射和寄存器池等)。通常,架构寄存器可从处理器外部或者从程序员的角度而言是可见的。寄存器可能不限于任何已知特定类型的电路。各种不同类型的寄存器只要如本文中所述存储和提供数据,它们便是适合的。适合的寄存器的示例包括但不限于专用物理寄存器、使用寄存器重命名的动态分配物理寄存器、专用和动态分配物理寄存器的组合等。引退单元454和物理寄存器文件单元458可以耦合到执行集群460。执行集群460可以包括一个或多个执行单元集合162和一个或多个存储器存取单元集合464。执行单元462可以并且在各种类型的数据(例如,标量浮点、打包整数、打包浮点、向量整数、向量浮点)上执行各种操作(例如,移位、加法、减法、乘法)。虽然一些实施例可以包括专用于特定功能或功能的集合的多个执行单元,但是其它实施例可以只包括一个执行单元或全部执行所有功能的多个执行单元。调度器单元456、物理寄存器文件单元458和执行集群460被示出为可能是多个,这是因为某些实施例为某些类型的数据/操作创建单独的流水线(例如,标量整数流水线、标量浮点/打包整数/打包浮点/向量整数/向量浮点流水线和/或存储器存取流水线,每个流水线具有其自己的调度器单元、物理寄存器文件单元和/或执行集群--并且在单独的存储器存取流水线的情况下,可以实现其中仅此流水线的执行集群具有存储器存取单元464的某些实施例)。还应理解的是,在使用单独流水线的情况下,这些流水线的一个或多个可以是无序发布/执行,并且其余的流水线是有序的。
存储器存取单元464的集合可以耦合到存储器单元470,其可以包括耦合到数据高速缓存单元474的数据TLB单元472,数据高速缓存单元474耦合到2级(L2)高速缓存单元476。在一个示例性实施例中,存储器存取单元464可以包括负载单元、存储地址单元和存储数据单元,它们中的每个可以耦合到存储器单元470中的数据TLB单元472。L2高速缓存单元476可以耦合到一个或多个其它级的高速缓存,并且最终耦合到主存储器。
通过示例的方式,示例性寄存器重命名、无序发布/执行核架构可以如下实现流水线400:1)指令获取438可以执行获取阶段402和长度解码阶段404;2)解码单元440可以执行解码阶段406;3)重命名/分配器单元452可以执行分配阶段408和重命名阶段410;4)调度器单元456可以执行调度阶段412;5)物理寄存器文件单元458和存储器单元470可以执行寄存器读取/存储器读取阶段414;执行集群460可以执行执行阶段416;6)存储器单元470和物理寄存器文件单元458可以执行写回/存储器写入阶段418;7)各种单元在异常处置阶段422的执行中可以被涉及;以及8)引退单元454和物理寄存器文件单元458可以执行提交阶段424。
核490可支持一个或多个指令集(例如,x86指令集(其中已添加了更新版本的一些扩展)、加利福尼亚州桑尼维尔的MIPS科技公司的MIPS指令集、加利福尼亚州桑尼维尔的ARM控股公司的ARM指令集(具有诸如NEON的可选附加扩展)。
应理解的是,核可以以多种方式支持多线程(执行两个或更多个并行的操作或线程的集合)。例如通过包括时间片多线程、同时多线程(其中,单个物理核提供针对物理核在同时进行多线程的每个线程的逻辑核)或其组合,可以执行多线程支持。此类组合例如可以包括时间片获取和解码以及之后的同时多线程,诸如在Intel®超线程技术中。
虽然寄存器重命名可以在无序执行的上下文中描述,但是应理解的是,可以在有序架构中使用寄存器重命名。虽然处理器的图示实施例也可以包括单独的指令和数据高速缓存单元434/474以及共享L2高速缓存单元476,但是其它实施例可以具有诸如例如1级(L1)内部高速缓存的用于指令和数据两者的单个内部高速缓存,或多个级的内部高速缓存。在一些实施例中,***可以包括内部高速缓存和可在核和/或处理器外部的外部高速缓存的组合。在其它实施例中,所有高速缓存可在核和/或处理器的外部。
图5A是根据本公开的实施例的处理器500的框图。在一个实施例中,处理器500可以包括多核处理器。处理器500可以包括通信地耦合到一个或多个核502的***代理510。此外,核502和***代理510可以通信地耦合到一个或多个高速缓存506。核502、***代理510和高速缓存506可以经由一个或多个存储器控制单元552通信地耦合。此外,核502、***代理510和高速缓存506可以经由存储器控制单元552通信地耦合到图形模块560。
处理器500可以包括用于将核502、***代理510和高速缓存506以及图形模块560互连的任何适合机制。在一个实施例中,处理器500可以包括基于环形的互连单元508以将核502、***代理510和高速缓存506以及图形模块560互连。在其它实施例中,处理器500可以包括用于将此类单元互连的任何数量的公知技术。基于环形的互连单元508可以利用存储器控制单元552以促进互连。
处理器500可以包括存储器层级,该层级包括核内的一个或多个级的高速缓存、诸如高速缓存506的一个或多个共享高速缓存单元或耦合到集成存储器控制器单元552的集合的外部存储器(未示出)。高速缓存506可以包括任何适合的高速缓存。在一个实施例中,高速缓存506可以包括诸如2级(L2)、3级(L3)、4级(L4)或其它级的高速缓存的一个或多个中间级高速缓存、末级高速缓存(LLC)和/或其组合。
在各种实施例中,一个或多个核502可以执行多线程。***代理510可以包括用于协调和操作核502的组件。***代理单元510例如可以包括功率控制单元(PCU)。PCU可以是或者包括用于调节核502的功率状态所需的逻辑和组件。***代理510可以包括用于驱动一个或多个外部连接的显示器或图形模块560的显示引擎512。***代理510可以包括用于针对图形的通信总线的接口1214。在一个实施例中,接口1214可通过快速PCI (PCIe)来实现。在其它的实施例中,接口1214可通过快速PCI图形(PEG)来实现。***代理510可以包括直接媒体接口(DMI) 516。DMI 516可以在计算机***的母板或其它部分上的不同桥之间提供链路。***代理510可以包括用于提供PCIe链路到计算***的其它元件的PCIe桥1218。PCIe桥1218可以使用存储器控制器1220和一致性逻辑1222来实现。
核502可以以任何适合的方式实现。核502可以在架构和/或指令集方面是同构或异构的。在一个实施例中,一些核502可以是有序的,而其它核可以是无序的。在另一个实施例中,两个或更多个核502可以执行相同指令集,而其它核可以只执行该指令集的子集或不同指令集。
处理器500可以包括诸如可以从加利福尼亚州圣克拉拉的Intel Corporation获得的Core™ i3、i5、i7、2 Duo和Quad、Xeon™、Itanium™、XScale™或StrongARM™处理器之类的通用处理器。处理器500可以从诸如ARM Holdings, Ltd、MIPS等的另一公司提供。处理器500可以是专用处理器,诸如例如网络或通信处理器、压缩引擎、图形处理器、协处理器、嵌入式处理器或诸如此类。处理器500可以在一个或多个芯片上实现。处理器500可以是使用诸如例如BiCMOS、COMS或NMOS的多个处理技术的任何技术的一个或多个基板的一部分,和/或可以在该一个或多个基板上实现。
在一个实施例中,高速缓存506的一个给定高速缓存可以由核502的多个核共享。在另一个实施例中,高速缓存506的一个给定高速缓存可以专用于核502之一。高速缓存506到核502的指派可以由高速缓存控制器或其它适合机制处理。通过实现给定高速缓存506的时间片,可以由两个或更多个核502共享高速缓存506的一个给定高速缓存。
图形模块560可以实现集成图形处理子***。在一个实施例中,图形模块560可以包括图形处理器。此外,图形模块560可以包括媒体引擎565。媒体引擎565可以提供媒体编码和视频解码。
图5B是根据本公开的实施例的核502的示例实现的框图。核502可以包括通信地耦合到无序引擎580的前端570。核502可以通过高速缓存层级503通信地耦合到处理器500的其它部分。
前端570可以以任何适合的方式实现,诸如,如上所述,部分或完全由前端201实现。在一个实施例中,前端570可以通过高速缓存层级503来与处理器500的其它部分进行通信。在又一个实施例中,前端570可以从处理器500的部分获取指令,并且在指令传递到无序执行引擎580时准备处理器流水线中以后要使用的指令。
无序执行引擎580可以以任何适合的方式实现,诸如,如上所述,部分或完全通过无序执行引擎203来实现。无序执行引擎580可以准备从前端570接收到的指令以供执行。无序执行引擎580可以包括分配模块1282。在一个实施例中,分配模块1282可以分配处理器500的资源或诸如寄存器或缓冲器的其它资源以执行给定指令。分配模块1282可以在诸如存储器调度器、快速调度器或浮点调度器之类的调度器中进行分配。此类调度器可以在图5B中由资源调度器584表示。分配模块1282可以完全或部分地通过结合图2描述的分配逻辑来实现。资源调度器584可以基于给定资源的源的准备度和执行指令需要的执行资源的可用性,确定指令何时准备就绪以执行。资源调度器584可以例如通过如上所讨论的调度器202、204、206来实现。资源调度器584可以对一个或多个资源调度指令的执行。在一个实施例中,此类资源可以在核502的内部,并且例如可以示出为资源586。在另一个实施例中,此类资源可以在核502的外部,并且例如可以由高速缓存层级503访问。资源例如可以包括存储器、高速缓存、寄存器文件或寄存器。核502内部的资源可以由图5B中的资源586表示。在必需时,可以例如通过高速缓存层级503来协调写入资源586或从中读取的值和处理器500的其它部分。在指令是指派的资源时,可将它们置于重新排序缓冲器588中。重新排序缓冲器588可以在指令执行时跟踪指令,并且可以基于处理器500的任何适合准则来选择性地将其执行重新排序。在一个实施例中,重新排序缓冲器588可以识别可独立执行的指令或一系列指令。此类指令或一系列指令可以与其它此类指令并行执行。核502中的并行执行可以通过任何适合数量的单独执行块或虚拟处理器执行。在一个实施例中,给定核502内的多个虚拟处理器可以访问诸如存储器、寄存器和高速缓存的共享资源。在其它实施例中,处理器500内的多个处理实体可访问共享资源。
高速缓存层级503可以以任何适合的方式实现。例如,高速缓存层级503可以包括诸如高速缓存572、574的一个或多个更低或中级高速缓存。在一个实施例中,高速缓存层级503可以包括通信地耦合到高速缓存572、574的LLC 595。在另一个实施例中,LLC 595可以在处理器500的所有处理实体可访问的模块590中实现。在另外的实施例中,模块590可在来自Intel公司的处理器的非核模块中实现。模块590可以包括执行核502所必需的、但可能不在核502内实现的处理器500的部分或子***。除LLC 595外,模块590例如还可以包括硬件接口、存储器一致性协调器、处理器间互连、指令流水线或存储器控制器。通过模块590--并且更具体地说通过LLC 595,可以对可用于处理器500的RAM 599进行访问。此外,核502的其它实例可以类似地访问模块590。可以部分地通过模块590来促进核502的实例的协调。
图6-图8可以图示出适合于包含处理器500的示例性***,而图9可以图示出可以包含一个或多个核502的示例性片上***(SoC)。在本领域已知的用于膝上型计算机、桌面型计算机、手持PC、个人数字助理、工程设计工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备和各种其它电子设备的其它***设计和实现也可以是适合的。一般而言,结合处理器和/或本文所公开的其它执行逻辑的大量***或电子设备通常可以是适合的。
图6图示了根据本公开的实施例的***600的框图。***600可以包含一个或多个处理器610、615,它们可以耦合到图形存储器控制器集线器(GMCH) 620。在图6中用虚线标示附加处理器615的可选性质。
每个处理器610、615可以是某版本的处理器500。然而,应该指出,在处理器610、615中可能不存在集成图形逻辑和集成存储器控制单元。图6图示了GMCH 620可以耦合到存储器640,存储器640例如可以是动态随机存取存储器(DRAM)。对于至少一个实施例,DRAM可以与非易失性高速缓存相关联。
GMCH 620可以是芯片集,或者芯片集的一部分。GMCH 620可以与处理器610、615通信,并控制处理器610、615与存储器640之间的交互。GMCH 620也可以充当处理器610、615与***600的其它元件之间的加速总线接口。在一个实施例中,GMCH 620经由多站总线诸如前侧总线(FSB)695来与处理器610、615通信。
而且,GMCH 620可以耦合到显示器645(诸如平板显示器)。在一个实施例中,GMCH620可以包含集成图形加速器。GMCH 620可以进一步耦合到输入/输出(I/O)控制器集线器(ICH) 650,其可用于将各种***设备耦合到***600。外部图形设备660可以包含连同另一***设备670耦合到ICH 650的分立图形设备。
在其它实施例中,在***600中也可存在附加的或不同的处理器。例如,附加处理器610、615可以包含可与处理器610相同的附加处理器、可与处理器610异构或不对称的附加处理器、加速器(诸如例如图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列或任何其它处理器。在品质度量谱(包含架构、微架构、热、功耗特性等)方面,在物理资源610、615之间可能存在各种差异。这些差异在处理器610、615之间可有效地将它们自己标明为不对称并且异构。对于至少一个实施例,各种处理器610、615可以驻留在同一管芯封装中。
图7图示了根据本公开的实施例的第二***700的框图。如图7中所示,多处理器***700可以包含点对点互连***,并且可以包括经由点对点互连750耦合的第一处理器770和第二处理器780。处理器770和780中的每个可以如一个或多个处理器610、615一样,是某一版本的处理器500。
虽然图7可以图示出两个处理器770、780,但要理解到,本公开的范围不限于此。在其它实施例中,在给定处理器中可以存在一个或多个附加处理器。
分别示出包含集成存储器控制器单元772和782的处理器770和780。处理器770还可以包含点对点(P-P)接口776和778作为其总线控制器单元的一部分;类似地,第二处理器780可以包含P-P接口786和788。处理器770、780可以经由点对点(P-P)接口750使用P-P接口电路778、788交换信息。如图7中所示,IMC 772和782可以将处理器耦合到相应存储器,即存储器732和存储器734,它们在一个实施例中可以是本地附连到相应处理器的主存储器的部分。
处理器770、780可以各自经由个体P-P接口752、754使用点对点接口电路776、794、786、798来与芯片集790交换信息。在一个实施例中,芯片集790还可以经由高性能图形接口739来与高性能图形电路738交换信息。
共享高速缓存(未示出)可以包含在任一处理器中或两个处理器外,仍经由P-P互连来与处理器连接,使得任一或两个处理器的本地高速缓存信息可以存储在共享高速缓存中--如果处理器被置于低功率模式的话。
芯片集790可以经由接口796耦合到第一总线716。在一个实施例中,第一总线716可以是***组件互连(PCI)总线,或诸如快速PCI总线的总线,或另一个第三代I/O互连总线,尽管本公开的范围不限于此。
如图7中所示,各种I/O设备714可以耦合到第一总线716,连同将第一总线716耦合到第二总线720的总线桥718。在一个实施例中,第二总线720可以是低管脚计数(LPC)总线。在一个实施例中,各种设备可以耦合到第二总线720,例如包含键盘和/或鼠标722、通信设备727和诸如盘驱动器或可以包含指令/代码和数据730的其它大容量存储设备之类的存储单元728。进一步说,音频I/O 724可以耦合到第二总线720。要指出,其它架构是可能的。例如,代替图7的点对点架构,***可以实现多站总线或其它此类架构。
图8图示了根据本公开的实施例的第三***800的框图。图7和图8中的相似的元件带有相似的参考标记,并且已经从图8中省略了图7的某些方面,以避免使图8的其它方面模糊不清。
图8图示了处理器870、880可以分别包含集成存储器和I/O控制逻辑(“CL”) 872和882。对于至少一个实施例,CL 872、882可以包含集成存储器控制器单元,诸如上面结合图5和图7所描述的。此外,CL 872、882也可以包含I/O控制逻辑。图8图示了不仅存储器832、834可以耦合到CL 872、882,而且I/O设备814也可以耦合到控制逻辑872、882。传统I/O设备815可以耦合到芯片集890。
图9图示了根据本公开的实施例的SoC 900的框图。图5中的相似元件带有相似参考标记。而且,虚线框可以表示更高级SoC上的可选特征。互连单元902可以耦合到:应用处理器910,其可以包含一个或多个核902A-N的集合以及共享高速缓存单元906;***代理单元910;总线控制器单元916;集成存储器控制器单元914;媒体处理器920集合或一个或多个媒体处理器920,其可以包含集成图形逻辑908、用于提供静止和/或视频相机功能性的图像处理器924、用于提供硬件音频加速的音频处理器926以及用于提供视频编码/解码加速的视频处理器928;SRAM单元930;DMA单元932;以及用于耦合到一个或多个外部显示器的显示单元940。
图10图示了按照本公开的实施例的可以执行至少一个指令的包含中央处理单元(CPU)和图形处理单元(GPU)的处理器。在一个实施例中,执行根据至少一个实施例的操作的指令可由CPU执行。在另一个实施例中,指令可由GPU执行。在又另一个实施例中,指令可以通过由GPU和CPU执行的操作组合执行。例如,在一个实施例中,可以接收和解码根据一个实施例的指令以用于在CPU上执行。然而,解码指令内的一个或多个操作可由CPU执行,并且结果返回到GPU用于指令的最后引退。相反,在一些实施例中,CPU可充当主处理器,并且GPU可充当协处理器。
在一些实施例中,受益于高度并行吞吐量处理器的指令可由GPU执行,而受益于处理器(其受益于深流水线架构)性能的指令可由CPU执行。例如,图形、科学应用、金融应用和其它并行工作负荷可受益于GPU的性能,并相应地执行,而更多顺序应用(诸如操作***内核或应用代码)可能更适合于CPU。
在图10中,处理器1000包含CPU 1005、GPU 1010、图像处理器1015、视频处理器1020、USB控制器1025、UART控制器1030、SPI/SDIO控制器1035、显示设备1040、存储器接口控制器1045、MIPI控制器1050、闪存控制器1055、双数据速率(DDR)控制器1060、安全性引擎1065和I2S/I2C控制器1070。其它逻辑和电路可以包含在图10的处理器中,包含更多CPU或GPU以及其它***接口控制器。
至少一个实施例的一个或多个方面可以由存储在表示处理器内的各种逻辑的机器可读介质上的代表性数据来实现,其当由机器读取时使机器制造执行本文描述的技术的逻辑。称为“IP核”的此类表示可以存储在有形机器可读介质(“带”)上,并供应给各种消费者或制造设施,以加载到实际上制造逻辑或处理器的制造机器中。例如,诸如由ARM控股公司开发的Cortex™族处理器和中国科学院计算技术研究所(ICT)开发的龙芯IP核的IP核可许可或销售到各种客户或被许可人,如Texas Instruments、Qualcomm、Apple或Samsung,并且在由这些客户或被许可人生产的处理器中实现。
图11图示了根据本公开的实施例图示开发IP核的框图。存储装置1130可以包含模拟软件1120和/或硬件或软件模型1110。在一个实施例中,表示IP核设计的数据可以经由存储器1140(例如硬盘)、有线连接(例如因特网)1150或无线连接1160提供给存储装置1130。由模拟工具和模型生成的IP核信息然后可以被传送到制造设施,在此它可由第三方制造以执行根据至少一个实施例的至少一个指令。
在一些实施例中,一个或多个指令可以对应于第一类型或架构(例如x86),并且在不同类型或架构(例如ARM)的处理器上转化或仿真。根据一个实施例,指令因此可以在任何处理器或处理器类型(包含ARM、x86、MIPS、GPU)或其它处理器类型或架构上执行。
图12图示了根据本公开的实施例的由不同类型的处理器可如何仿真第一类型的指令。在图12中,程序1205包含可以与根据一个实施例的指令执行相同或基本上相同功能的一些指令。然而,程序1205的指令可以是与处理器1215不同或不兼容的类型和/或格式,意味着程序1205中的类型的指令可能不能够由处理器1215本机地执行。然而,在仿真逻辑1210的帮助下,程序1205的指令可被转化成可由处理器1215本机地执行的指令。在一个实施例中,仿真逻辑可体现在硬件中。在另一个实施例中,仿真逻辑可体现在有形、机器可读介质中,其包含将程序1205中的类型的指令转化成由处理器1215本机可执行的类型的软件。在其它实施例中,仿真逻辑可以是固定功能或可编程硬件以及存储在有形、机器可读介质上的程序的组合。在一个实施例中,处理器包含仿真逻辑,而在其它实施例中,仿真逻辑存在于处理器外部,并且可由第三方提供。在一个实施例中,处理器可通过执行在处理器中包含的或与处理器相关联的微代码或固件来加载体现在包含软件的有形、机器可读介质中的仿真逻辑。
图13图示了按照本公开的实施例的对比使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。在所图示出的实施例中,指令转换器可以是软件指令转换器,尽管指令转换器可以用软件、固件、硬件或它们的各种组合实现。图13示出了可以使用x86编译器1304编译高级语言1302的程序以生成x86二进制代码1306,其可由具有至少一个x86指令集核1316的处理器本机地执行。具有至少一个x86指令集核1316的处理器表示任何处理器:所述任何处理器可以通过兼容地执行或以其他方式处理(1)Intel x86指令集核的指令集的实质部分或(2)定向为在具有至少一个x86指令集核的Intel处理器上运行的应用或其它软件的对象代码版本以便实现与具有至少一个x86指令集核的Intel处理器基本上相同的结果,来执行与具有至少一个x86指令集核的Intel处理器基本上相同的功能。x86编译器1304表示可操作以生成x86二进制代码1306(例如对象代码)的编译器,二进制代码1306可以在具有或没有附加联接处理的情况下在具有至少一个x86指令集核1316的处理器上执行。类似地,图13示出以高级语言1302的程序可以使用替代指令集编译器1308编译以生成替代指令集二进制代码1310,其可以由没有至少一个x86指令集核1314的处理器(例如,具有执行加利福尼亚州桑尼维尔的MIPS 科技公司的MIPS指令集,和/或执行加利福尼亚州桑尼维尔的ARM控股公司的ARM指令集的核的处理器)本机地执行。指令转换器1312可以用于将x86二进制代码1306转换成可由没有x86指令集核1314的处理器本机地执行代码。这个转换的代码不太可能与替代指令集二进制代码1310相同;然而,转换的代码将完成通用操作,并且由来自替代指令集的指令组成。从而,指令转换器1312表示通过仿真、模拟或任何其它过程而允许不具有x86指令集处理器或核的处理器或其它电子设备执行x86二进制代码1306的软件、固件、硬件或其组合。
图14是根据本公开的实施例的处理器的指令集架构1400的框图。指令集架构1400可以包含任何适合数量或种类的组件。
例如,指令集架构1400可以包含处理实体,诸如一个或多个核1406、1407和图形处理单元1415。核1406、1407可以通过任何适合的机制(诸如通过总线或高速缓存)通信地耦合到其余指令集架构1400。在一个实施例中,核1406、1407可以通过L2高速缓存控制1408通信地耦合,L2高速缓存控制1408可以包含总线接口单元1409和L2高速缓存1410。核1406、1407和图形处理单元1415可以通过互连1410彼此通信地耦合,并耦合到指令集架构1400的剩余部分。在一个实施例中,图形处理单元1415可以使用视频代码1420,其定义其中具体视频信号将被编码和解码以供输出的方式。
指令集架构1400还可以包含任何数量或种类的接口、控制器或用于与电子设备或***的其它部分对接或通信的其它机制。此类机制可以促进与例如外设、通信设备、其它处理器或存储器的交互。在图14的示例中,指令集架构1400可以包含液晶显示器(LCD)视频接口1425、订户接口模块(SIM)接口1430、引导ROM接口1435、SDRAM控制器1440、闪存控制器1445和串行外设接口(SPI)主单元1450。LCD视频接口1425例如可从GPU 1415并且例如通过移动工业处理器接口(MIPI)1490或高清多媒体接口(HDMI)1495向显示器提供视频信号的输出。此类显示器例如可以包含LCD。SIM接口1430可以提供对或从SIM卡或设备的访问。SDRAM控制器1440可以提供对或从诸如SDRAM芯片或模块的存储器的访问。闪存控制器1445可以提供对或从诸如闪存存储器或RAM的其它实例的存储器的访问。SPI主单元1450可以提供对或从诸如蓝牙模块1470、高速3G调制解调器1475、全球定位***模块1480或实现诸如802.11的通信标准的无线模块1485的通信模块的访问。
图15是根据本公开的实施例的处理器的指令集架构1500的更详细框图。指令架构1500可以实现指令集架构1400的一个或多个方面。而且,指令集架构1500可以图示出用于执行处理器内指令的模块和机制。
指令架构1500可以包含通信地耦合到一个或多个执行实体1565的存储器***1540。而且,指令架构1500可以包含通信地耦合到执行实体1565和存储器***1540的高速缓存和总线接口单元,诸如单元1510。在一个实施例中,将指令加载到执行实体1564可由一个或多个执行阶段来执行。此类阶段例如可以包含指令预获取阶段1530、双指令解码阶段1550、寄存器重命名阶段155、发布阶段1560和写回阶段1570。
在一个实施例中,存储器***1540可以包括执行的指令指针1580。执行的指令指针1580可以存储识别一批指令内的最旧的、未分派的指令的值。最旧的指令可对应于最低程序命令(program order)(PO)值。PO可以包括唯一编号的指令。这样的指令可以是由多条线段(strand)表示的线程内的单个指令。排序指令中可以使用PO,以确保代码的正确执行语义。可以通过诸如评估递增到指令中编码的PO而不是绝对值的机制来重建PO。这种重建的PO可以被称为“RPO”。虽然本文可以参考PO,但是这样的PO可以与RPO互换使用。线段可以包括依赖于彼此的数据的指令序列。该线段可以由二进制翻译器在编译时刻来布置。执行线段的硬件可以根据各种指令的PO而按顺序执行给定线段的指令。线程可以包括多个线段,使得不同线段的指令可以彼此依赖。给定线段的PO可以是线段中最旧的指令的PO,其尚未从发布阶段被分派到执行。因此,给定多条线段的线程,包括由PO排序的指令的每个线段,执行的指令指针1580可以存储线程中最旧的--由最小编号所图示的--PO。
在另一个实施例中,存储器***1540可以包含引退指针1582。引退指针1582可以存储识别最后引退的指令的PO的值。引退指针1582例如可由引退单元454设置。如果尚没有指令引退,则引退指针1582可以包含空值。
执行实体1565可以包含通过其处理器可以执行指令的任何适合数量和种类的机制。在图15的示例中,执行实体1565可以包含ALU/乘法单元(MUL)1566、ALU 1567和浮点单元(FPU)1568。在一个实施例中,此类实体可以利用在给定地址1569内包含的信息。执行实体1565与阶段1530、1550、1555、1560、1570组合可共同形成执行单元。
单元1510可以用任何适合的方式实现。在一个实施例中,单元1510可以执行高速缓存控制。在此类实施例中,单元1510从而可以包含高速缓存1525。在另外的实施例中,高速缓存1525可以实现为具有任何适合大小(诸如0、128k、256k、512k、1M或2M字节的存储器)的L2统一高速缓存。在另一个另外的实施例中,高速缓存1525可以实现在纠错代码存储器中。在另一个实施例中,单元1510可以执行到处理器或电子设备的其它部分的总线对接。在此类实施例中,单元1510从而可以包含用于通过互连、处理器内总线、处理器间总线或其它通信总线、端口或线路进行通信的总线接口单元1520。总线接口单元1520可以提供对接以便例如执行生成存储器和输入/输出地址,以便在执行实体1565与指令架构1500外部的***部分之间转送数据。
为了进一步促进其功能,总线接口单元1520可以包含用于生成中断和到处理器或电子设备的其它部分的其它通信的中断控制和分发单元1511。在一个实施例中,总线接口单元1520可以包含处置用于多个处理核的高速缓存访问和一致性的探听控制单元1512。在另外的实施例中,为了提供此类功能性,探听控制单元1512可以包含处置不同高速缓存之间信息交换的高速缓存到高速缓存传送单元。在另一个另外的实施例中,探听控制单元1512可以包含一个或多个探听过滤器1514,其监视其它高速缓存(未示出)的一致性,使得高速缓存控制器(诸如单元1510)不用必须直接执行此类监视。单元1510可以包含用于同步指令架构1500的动作的任何适合数量的定时器1515。此外,单元1510可以包含AC端口1516。
存储器***1540可以包含用于存储指令架构1500的处理需要的信息的任何适合的数量和种类的机制。在一个实施例中,存储器***1504可以包含用于存储信息的加载存储单元1530,诸如写入到存储器或寄存器或从存储器或寄存器读回的缓冲器。在另一个实施例中,存储器***1504可以包含转化后备缓冲器(TLB)1545,其提供了物理地址与虚拟地址之间的地址值的查找。在又另一个实施例中,总线接口单元1520可以包含用于促进访问虚拟存储器的存储器管理单元(MMU)1544。在又另一个实施例中,存储器***1504可以包含预获取器1543,用于在指令实际需要被执行之前从存储器请求此类指令以便减少等待时间。
执行指令的指令架构1500的操作可以通过不同阶段来执行。例如,使用单元1510指令预获取阶段1530可以通过预获取器1543访问指令。检索的指令可以存储在指令高速缓存1532中。预获取阶段1530可以实现用于快速环路模式的选项1531,其中执行形成环路的一系列指令,环路是足够小的以在给定高速缓存内适合。在一个实施例中,可以执行此类执行无需从例如指令高速缓存1532访问附加指令。预获取什么指令的确定例如可以由分支预测单元1535做出,分支预测单元1535可以访问全局历史1536中的执行指示、目标地址1537的指示或确定接下来将执行代码的哪个分支1557的返回栈1538的内容。此类分支可以有可能作为结果而被预获取。分支1557可以通过如下所述的其它操作阶段产生。指令预获取阶段1530可以提供指令以及有关将来指令的任何预测到双指令解码阶段。
双指令解码阶段1550可以将接收的指令转化成可以执行的基于微代码的指令。双指令解码阶段1550每时钟周期可以同时解码两个指令。而且,双指令解码阶段1550可以将其结果传到寄存器重命名阶段1555。此外,双指令解码阶段1550可以从其解码和微代码的最终执行中确定任何结果分支。此类结果可以输入到分支1557中。
寄存器重命名阶段1555可以将对虚拟寄存器或其它资源的参考转化成对物理寄存器或资源的参考。寄存器重命名阶段1555可以包含寄存器池1556中此类映射的指示。寄存器重命名阶段1555可以更改所接收的指令,并将结果发送到发布阶段1560。
发布阶段1560可以向执行实体1565发布或分派命令。此类发布可以按无序方式执行。在一个实施例中,多个指令可以在执行之前保持在发布阶段1560。发布阶段1560可以包含用于保持此类多个命令的指令队列1561。可以基于任何可接受的准则,诸如用于执行给定指令的资源的可用性或适用性,由发布阶段1560向特定处理实体1565发布指令。在一个实施例中,发布阶段1560可以重新排序指令队列1561内的指令,使得所接收的第一指令可能不是所执行的第一指令。基于指令队列1561的排序,可以将附加分支信息提供给分支1557。发布阶段1560可以将指令传到执行实体1565以用于执行。
在执行时,写回阶段1570可以将数据写入到寄存器、队列或指令集架构1500的其它结构中,以传递给定命令的完成。取决于在发布阶段1560中布置的指令顺序,写回阶段1570的操作可以使得附加指令能够被执行。指令集架构1500的性能可以由追踪单元1575监视或调试。
图16是根据本公开的实施例的用于处理器的指令集架构的执行流水线1600的框图。执行流水线1600例如可以图示出图15的指令架构1500的操作。
执行流水线1600可以包含步骤或操作的任何适合的组合。在1605中,可以进行接下来要执行的分支的预测。在一个实施例中,此类预测可以基于先前指令的执行及其结果。在1610中,对应于预测的执行分支的指令可被加载到指令高速缓存中。在1615中,可以获取指令高速缓存中的一个或多个此类指令以供执行。在1620中,可以将已经获取的指令解码成微代码或更特定的机器语言。在一个实施例中,可同时解码多个指令。在1625中,可以重新指派解码指令内对寄存器或其它资源的参考。例如,可以参考对应物理寄存器替换对虚拟寄存器的参考。在1630中,指令可以被分派给队列以供执行。在1640中,可以执行指令。可以按任何适合的方式执行此类执行。在1650中,可以向适合的执行实体发布指令。执行指令的方式可以取决于执行指令的特定实体。例如,在1655中,ALU可以执行算术函数。ALU可以对于其操作利用单个时钟周期以及两个移位器。在一个实施例中,可以采用两个ALU,并且从而在1655中可以执行两个指令。在1660中,可以进行结果分支的确定。程序计数器可用于指明分支将被做到的目的地。1660可以在单个时钟周期内执行。在1665中,浮点算术可由一个或多个FPU执行。浮点操作可能需要执行多个时钟周期,诸如2个到10个周期。在1670中,可以执行乘法和除法操作。此类操作可在4个时钟周期中执行。在1675中,可以执行对寄存器或流水线1600其它部分的加载和存储操作。操作可以包含加载和存储地址。此类操作可在4个时钟周期中执行。在1680中,写回操作可以根据需要由1655-1675的结果操作执行。
图17是根据本公开的实施例的用于利用处理器1710的电子设备1700的框图。电子设备1700例如可以包括笔记本、超级本、计算机、塔式服务器、机架服务器、刀片服务器、膝上型计算机、桌上型计算机、平板电脑、移动设备、电话、嵌入式计算机或任何其它适合的电子设备。
电子设备1700可以包括通信地耦合到任何适合数量或种类的组件、外设、模块或设备的处理器1710。此类耦合可以通过任何适合种类的总线或接口来实现,如I2C总线、***管理总线(SMBus)、低引脚计数(LPC)总线、SPI、高清晰音频(HDA)总线、串行高级技术附件(SATA)总线、USB总线(版本1、2、3)或通用异步接收器/传送器(UART)总线。
此类组件例如可以包括显示器1724、触摸屏1725、触摸板1730、近场通信(NFC)单元1745、传感器集线器1740、热传感器1746、快速芯片集(EC) 1735、可信平台模块(TPM)1738、BlOS/固件/闪存存储器1722、DSP1760、诸如固态磁盘(SSD)或硬盘驱动器(HDD)的驱动器1720、无线局域网(WLAN)单元1750、蓝牙单元1752、无线广域网(WWAN)单元1756、全球定位***(GPS)、诸如USB 3.0摄像机的摄像机1754、或例如以LPDDR3标准实现的低功率双倍数据率(LPDDR)存储器单元1715。这些组件每个可以以任何适合的方式实现。
此外,在各种实施例中,其它组件可以通过上面讨论的组件通信地耦合到处理器1710。例如,加速计1741、环境光传感器(ALS) 1742、罗盘1743和陀螺仪1744可以通信地耦合到传感器集线器1740。热传感器1739、风扇1737、键盘1746和触摸板1730可以通信地耦合到EC 1735。扬声器1763、耳机1764和麦克风1765可以通信地耦合到音频单元1764,音频单元继而可通信地耦合到DSP 1760。音频单元1764例如可以包括音频编解码器和D类放大器。SIM卡1757可以通信地耦合到WWAN单元1756。诸如WLAN单元1750和蓝牙单元1752以及WWAN单元1756的组件可以以下一代形状因素(NGFF)实现。
图18是根据本公开的实施例的具有用于移位和乘法器(SSM)的硬件的***1800的一部分的框图。在一个实施例中,可以用查找表来进行此类SSM的操作。在另外的实施例中,此类查找表可以包括量化的最近邻查找表。***1800可以执行将两个或多个数字一起相乘的指令。在一个实施例中,可以通过使用SSM模块1816来执行指令。在另一个实施例中,用于乘法的指令可以具体指明由诸如SSM模块1816之类的SSM的执行。在又另一个实施例中,可以由SSM模块1816执行用于乘法的指令而不由指令专门指明(与其他乘法逻辑、电路或执行单元相反)。在仍另一个实施例中,用于乘法的指令可以由指明由SSM模块1816执行的指令进行解码、解释或替换。
SSM模块1816可以在***1800的任何合适的部分中实现。此外,***1800可以包括SSM模块1816的任何合适的数量和种类的实现。在一个实施例中,SSM模块1816可以在处理器1802中实现。在另一个实施例中,SSM模块1816可以在核1812中实现。在另一个另外实施例中,SSM模块1816可以在执行单元1814中实现。SSM模块1816可以以任何合适的方式来实现。SSM模块1816可以由逻辑、模拟电路或数字电路的任何合适的组合来实现,以执行本文所描述的功能性。SSM模块1816可以被实现为模块。下面将结合图19进一步详细讨论SSM模块1816的实现的示例实施例。
处理器1802可以部分地通过图1-图17的元件的任何合适的组合来实现。处理器1802可以包括前端1806,其可以使用解码器1808从指令流1804接收和解码指令。解码的指令可以被解码为一个或多个uop。可以通过分派器1810分派或调度uop以供执行,并由分配器1811将其分配给特定核1814或执行单元1814。在执行之后,指令可以由引退单元1820引退。尽管本文描述了各种操作由处理器1802的特定组件执行,但是可以由处理器1802的任何合适的部分来执行该功能性。
用于使用SSM模块1816的乘法指令可以由任何合适的源引起。乘法指令可以由处理器1802从指令流1804接收。此外,指令流1804中的指令虽然没有被具体标识为乘法指令,但可引发或引起乘法指令的执行。在这种情况下,实际的乘法指令可以由例如解码器1808从在处理器1802处接收到的指令中生成。此外,解码器1808可以从否则没有具体指明由SSM执行的乘法指令中生成指明由SSM执行的乘法指令。此外,解码器1808可以将指明由SSM执行的指令解码为用于将因子格式化并执行乘法运算的一系列解码指令。可以使用任何合适的指令形式来指明由SSM的执行。例如,标示为“MULT-SSM”的指令可以是正常乘法指令的变形,其中,“MULT-SSM”指令指明要由SSM执行的执行。在另一示例中,诸如“MULT”的正常乘法指令可以包括其将被SSM执行的参数、掩码、标志或其他指明。在又另一示例中,解码器1808可以基于可以由例如SSM模块1816执行乘法的识别,将正常乘法解码为用于“MULT-SSM”(或等效物)的指令。在仍又另一示例中,解码器1808可以将“MULT-SSM”指令解码为格式化指令和由SSM执行乘法的指令。在一个实施例中,这样的格式化指令可以包括将乘法因子缩放到用于SSM模块1816以进行操作的适当范围。在仍另一个实施例中,这样的格式化指令可以包括应用signoid函数来近似一个范围内的期望值。可以生成两个或多个“MULT-SSM”指令以将三个或更多个因子一起相乘。
假设由SSM模块1816执行的乘法指令包括乘数“X”和被乘数“w”这两个因子,则SSM模块1816的操作可以被指明为“X * w”。X可以包括实数。在各种实施例中,w的值可以被限制到指明的范围。在一个实施例中,w可以被定义为在范围[0…1]中的数字的集合。在另一个实施例中,w可以被定义为在范围[0…k]中的数字的集合。在这样的实施例中,SSM模块1816可以通过首先将X乘以k来执行乘法运算,并且然后通过相对于k将其归一化而将w处置为范围[0…1]内的数字。因此,SSM模块1816可以将x乘以X*k的结果乘积,以获得期望的结果。在各种其他实施例中,w可以从应用signoid函数而来,以近似w范围内的期望值。
在一个实施例中,可以仅使用移位操作和加法来实现SSM模块1816的操作,以便当w在[0…1]范围内时将X乘以w。在另外的实施例中,这种移位操作可以仅包括右移操作。在又另一个另外的实施例中,这样的加法可以包括负数,相当于减法。当w在[0…k]范围内时为了实现X乘以w的乘法,SSM模块1816可以首先相乘X*k,并且然后将结果乘以现在在范围[0…1]内的归一化的w值。因此,这个最后一步,其中X*k的结果乘以范围[0…1]的w,可以仅使用移位操作和加法来执行。如果k是2的整数对数,则可以用大小log2k的移位来执行与k的乘法和归一化。
在一个实施例中,w可以被定义为[-b…b]范围中的数字的集合,其中b等于2。在另外的实施例中,w可以被定义为[-b*k…b*k]范围中的数字的集合。在这样的实施例中,SSM模块1816可以通过首先将X乘以k、并且然后将w处置为范围[-b…b] 内的数字来执行乘法运算。因此,SSM模块1816可以将w乘以X*k的结果乘积,以获得期望的结果。
在一个实施例中,可以仅使用移位操作和加法来实现SSM模块1816的操作,以便当w在[-b…b]范围内时将X乘以w。在另外的实施例中,这种移位操作可以仅包括右移操作。在又另一个另外的实施例中,这样的加法可以包括负数,相当于减法。当w在[-b*k…b*k]范围内时,为了实现X*w的乘法,SSM模块1816可以首先相乘X*k,并且然后将结果乘以现在在[-b…b]范围内的归一化的w值。因此,这个最后一步,其中X*k的结果乘以范围[-b…b]的w,可以仅使用移位操作和加法来执行。如果k是2的整数对数,则可以用大小log2k的移位来执行与k的乘法和归一化。
在各种实施例中,可以通过产生加在一起的部分乘积来执行X和w相乘。可以通过将X向右移动指定次数来产生每个部分乘积,其中指定数可以在部分乘积之间不同。此外,每个部分和可以通过保持部分和为正或使其为负而产生。SSM模块1816的精度可以取决于所产生的部分和的数量。在一个实施例中,可以通过查找表来提供部分乘积的数量、部分乘积将被移位的次数以及部分乘积是正还是负的。查找表可以包括在SSM模块1816中或在SSM模块1816可访问的处理器1802的区域中。查找表可以通过w的值来索引。结果可以包括因子S1、S2、S3等的指定,指示给定的部分乘积将例如向右移位的多少次数。结果还可以包括因子F1、F2、F3等的指定,指示给定的部分乘积将是正还是负。在一些实施例中,可以将第一部分乘积假设为正。在一个实施例中,查找表可以包括w的量化的可能值,并且可以实现该表以返回离乘法指令的w很靠近(最近邻)的w的量化的可能值。
SSM模块1816可以将部分乘积加在一起以提供X*w的估计值。SSM模块1816可以将总和输出到***1800的存储器、寄存器、高速缓存或任何其他合适的部分,诸如存储器子***1818。
在一个实施例中,其中SSM模块1816可以被实现来计算乘积Y=X*w,其中w是[0…1](或从[0…k]归一化的),SSM模块1816的操作可以被指定为
其中d是要用于计算X*w的部分乘积的数量。c的值可以是(d-1)。“>>”操作表示并操作将输入(诸如X)向右移位指定次数(诸如Sx)。正如由F的相应值是偶数还是奇数来指定的,每个部分乘积可以是正的或负的。这个操作的数学等价物可以给出为:
。
如上所讨论的,SSM模块1816可以基于w的指定值从查找表获得移位参数和标志参数。SSM模块1816可以实现任何合适数量的部分乘积。数量不断增加的部分乘积可增加计算的估计的精度,因为越来越小的部分乘积可有助于更精细的粒度。部分乘积数量的增加可能需要较大的查找表来产生大量可变数量的移位和标志参数。此外,数量不断增加的部分乘积可能需要增加的逻辑量、移位器数量、加法器数量以及执行计算所需的区间大小。如果使用两个移位器(并且因此生成两个部分乘积),则查找表中的w的近似可能具有小于或等于八分之一的误差。与普通乘法电路相反,使用两个移位器实现14×14比特乘法器可以将必需的门的数量从大约970个门减少到70个门。如果使用三个移位器,则查找表中的w的近似可能具有小于或等于三十二分之一的误差。与普通乘法电路相反,使用三个移位器实现14×14比特乘法器可将必需的门的数量减少大约85%。因此,可以在基于精度和空间节省之间的权衡来创建SSM 1814时确定用于实现SSM 1814的移位器的数量。
在另一个实施例中,其中SSM模块1816可以被实现来计算乘积Y=X*w,其中w是[-b…b](或从[-b*k…b*k]归一化的),SSM模块1816的操作可以被指定为
其中c是用于计算X*w的部分乘积的数量。这个操作的数学等价物可以给出为:
。
图19是根据本公开的实施例的SSM模块1900的图示,其中w在(或从[0...k]归一化而来的)范围[0…1]内。在某些情况下,可以使用signoid函数来近似在w范围中的期望值。可以传递signoid函数及其参数而不是w。SSM模块1900可以完全或部分地实现SSM模块1816。
SSM模块1900可以包括控制逻辑1902,以确定是否需要执行任何预处理,诸如将X乘以k或相对于k对w进行归一化。控制逻辑1902可以通过例如将X或w的值向右或向左移位多次(log2w)来执行这种乘法或归一化。此外,控制逻辑1902可以在查找表(LUT)1904A中查找w的值。下面更详细地讨论LUT 1904A。LUT 1904A可以通过任何合适的数据结构、布隆过滤器或用于有效地返回值的其他机制来实现。可以返回不同的S和F参数的值。S和F参数的数量可以取决于SSM模块1900在估计X*w的乘积时将使用的部分乘积的数量。每个S可能是正整数。每个F可能是零或一。
控制逻辑1902可以将X和S与F参数路由到SSM 1906。SSM 1906可以以任何合适的方式来实现。在一个实施例中,SSM 1906的实现可以取决于w是否在范围[0…1]或诸如[-b…b]的另一个范围内。在另一个实施例中,SSM 1906的实现可以取决于SSM 1906要计算多少部分乘积。如果提供小于最大数量的F和S参数,则SSM 1906可以启用或禁用其自身的一些部分。默认情况下,禁用可以包括针对未使用的部分乘积指派零值,为此不提供F或S参数。启用可以包括计算部分乘积,其中根据需要提供S和F以计算部分乘积。
第一部分乘积可以由移位器1910A产生,该移位器1910A将X的比特向右逻辑地移位由S1指定的次数。这可具有将X除以(2^S1)的效果。移位器1910A(和其他移位器)可以以任何合适的方式实现,以将X向右逻辑地移位指定数量(诸如S1)次。例如,移位器1910A中可以包括多个移位机制,并且可以实现这种机制的指定的S1数量。下一个部分乘积可以由移位器1910B产生,该移位器1910B将X向右移动由S1指定的次数;通过一个指数模块1912A,其将负一提升到F1幂;并利用乘法器1914A将两个结果相乘。指数模块1912A(和其他指数模块)可以以任何合适的方式实现,以便如果F1是奇数则产生负一,而如果F1是偶数则产生正一。在一些实施例中,指数模块1912A和乘法器1914A可以由逻辑控制来实现,以便如果F1是奇数,则执行按位“非”(NOT)或补码(complement)运算,以使移位器1910B的输出变为负。如果F1是偶数,则移位器1910B的输出可以不变地被路由到加法器1916A。随后的部分乘积可以通过类似的组合来计算。可以将每个部分乘积路由到加法器1916A,所述加法器1916A可以对部分乘积进行相加。加法器1916A的输出可以是估计的乘积,乘法计算的结果。
图20是根据本公开的实施例的SSM模块1900的图示,其中w在(或从[-b*k…b*k]归一化而来的)范围[-b…b]内。SSM模块1900可以完全或部分地实现SSM模块1816。
SSM模块1900可以包括控制逻辑1902,以确定是否需要执行任何预处理,诸如将X乘以k或相对于k对w进行归一化。控制逻辑1902可以通过例如将X或w的值向右或向左移位多次(log2w)来执行这种乘法或归一化。此外,控制逻辑1902可以在LUT 1904B中查找w的值。LUT 1904B可以通过任何合适的数据结构、布隆过滤器或用于有效地返回值的其他机制来实现。LUT 1904A的具体值可以与LUT 1904B的值不同。此外,SSM 1908可以与SSM 1906不同地实现。因此,控制逻辑1902可以评估w的范围并访问LUT和SSM中的适当的LUT和SSM。可以返回不同S和F参数的值。S和F参数的数量可以取决于SSM模块1900在估计X*w的乘积时将使用的部分乘积的数量。每个S可能是正整数。每个F可能是零或一。在一个实施例中,S和F参数的数量可以相等。
控制逻辑1902可以将X和S与F参数路由到SSM 1908。SSM 1908可以以任何合适的方式来实现。在一个实施例中,SSM 1908的实现可以取决于w是否在范围[0…1]或诸如[-b…b]的另一个范围内。在图20的示例中,该范围被推定为b [-b。。。b]。在另一个实施例中,SSM 1908的实现可以取决于SSM 1906要计算多少部分乘积。如果提供小于最大数量的F和S参数,则SSM 1908可以启用或禁用其自身的一些部分。默认情况下,禁用可以包括针对未使用的部分乘积指派零值,为此不提供F或S参数。启用可以包括计算部分乘积,其中根据需要提供S和F以计算部分乘积。
第一部分乘积可以由移位器1910D产生,该移位器1910D将X的比特向右逻辑地移位由S1指定的次数;通过一个指数模块1912D,其将负一提升到F1幂;并利用乘法器1914D将两个结果相乘。可以使用相应的移位器、指数模块和乘法器以类似的方式产生其他部分乘积。可以将每个部分乘积路由到加法器1916B,所述加法器1916B可以对部分乘积进行相加。加法器1916B的输出可以是估计乘积,乘法计算的结果。
LUT的内容可以根据给定SSM要使用的部分乘积的数量来确定。LUT的内容可以存储在存储器中。在各种实施例中, LUT可以提供对函数空间在图19的情况下的G:N-->[0,1]和在图20的情况下的G:N--> [-b,b](或[-2,2])的按分段的常数近似。范围[-2…2]可以由图20中所示的架构产生。给定函数空间G的值,或者给定对应于w的分数输出的值,可以返回移位和标志参数。
可以以任何合适的方式确定给定LUT的值。例如,给定上面的数学方程式表示使用移位和标志参数的结果计算,可以计算由每个S参数和每个F参数的不同值的排列(permutation)集合所产生的值。例如,将X设置为一,可以为SSM 1906或SSM 1908计算不同的Y值。不同的值因此可以表示w的分数值。可能对结果进行排序。所有S和F参数的所有可能值的全部排列集合可能具有冗余结果,这意味着S和F的两个不同组合可能导致相同的分数输出。可以使用约束来消除对于LUT的可能冗余值。例如,在双移位SSM中,可以应用约束S1<S2来消除S和F的某些排列。在另一个示例中,如果S1=S2,则可以应用F1必须等于一的约束来消除S和F的一些排列。
下面是表示遵循上述步骤计算出的针对在[0…1]范围内的w的LUT的示例实施例的表格。在这里为了显示完整的表格,假定了双移位SSM。
表1--采样LUT值。
因此,例如,如果w等于0.54,则控制逻辑1902可以访问LUT 1904A,发现最接近于0.54的邻居是编号为35的条目,并且返回该S1 = 1,S2 = 5,F1 = 0。这些值可以提供给SSM1906,其可以产生近似为X*0.54的输出。
此外,w可以是函数的结果。例如,w可以是函数“f(n)”,其中n是无符号整数,并且f(n)是将无符号整数映射到区间[0…1]中实数的signoid函数。例如,f(n)可以给出为
其中a和b是常数。当n从0变化到1000时,f可以形成从0到1的s形图。LUT可以映射n的值和f的结果值。例如:
表2--给定值N的采样值。
如果映射,这些数据点将示出函数f(N)的量化的步长函数表示。取决于特定的LUT和SSM,这些输出值继而可以与适当的移位和标志参数相关联。例如,基于具有预期w范围[0…1]的SSM,采用以下三移位和双标志LUT:
表3--与给定值N的采样值f相关联的采样LUT值。
给定表3中的上述示例LUT值,考虑其中X为725、N为305的示例。表中最接近的值可以包括针对300的条目。为了计算X*F(N),可以对于N为305的相关联的值而查询LUT。由此LUT可以得出参数,使得S1为三,S2为六,S3为九,F1为1,F2为零。这恰好对应于0.11的值,它是f(300)的近似值。当SSM对数字725执行适当的移位和符号转换时,结果可以是82。因此,在各种实施例中,可以使用signoid函数来访问LUT以近似在w的范围中的所需值。
图21是根据本公开的实施例的用于移位和乘法的方法2100的实施例的流程图。方法2100可以在任何适当的点开始,并且可以以任何合适的顺序执行。在一个实施例中,方法2100可以从2105开始。在各种实施例中,方法2200可以在诸如处理器1802的处理器或诸如SSM 1906或SSM 1908的SSM的执行期间执行。此外,方法2100可以通过处理器1804的元件或其他元件的任何合适的组合来执行。
在2105处,可以接收或解码用于执行的指令。在2110处,可以确定该指令是适合于由SSM执行的乘法指令。乘法可以包括或可以转换为X和w的乘法。在2115处,可以将指令分派给SSM以供执行并且将资源分配给该指令。
在2120处,为了将指令分派到正确的SSM(或正确地启用SSM),可以确定w是在范围[0…k]还是[-b*k…b*k]中。如果w是在范围[0…k]中,则方法2100可以进行到2125。如果w是在范围[-b*k…b*k]中,则方法2100可以进行到2150。
在2125处,如果k不是值1,那么可以使用例如移位器将k与X相乘。此外,可以相对于k对w进行归一化,使得w在范围[0…1]中。在2130处,可以在LUT中查找w的结果值。可以根据SSM要使用的部分乘积的数量以及通过w的范围来设置LUT。可以从LUT中检索适当数量的移位和标志参数。
在2135处,在SSM中,对于部分乘积,可以将从2125得到的X的值向右移位S1次,其中由LUT指定S1。在2140处,可以将从2125得到的X的值向右移位S2次,其中由LUT指定S2。此类移位的结果可以乘以(-1^F1),其中由LUT指定F1;这可以用按位补码函数来执行。这可能导致另一部分乘积。在2145处,可以以与2140中描述的相同的方式、但是利用随后的S和F参数来计算附加的部分乘积。方法2100可以进行到2170。
在2150处,b可以是2,并且如果k不是值1,则可以使用例如移位器将k与X相乘。而且可以相对于k对w进行归一化,使得w在范围[-b…b](或[-2…2])中。在2155处,可以在LUT中查找w的结果值。可以根据SSM要使用的部分乘积的数量以及通过w的范围来设置LUT。可以从LUT中检索适当数量的移位和标志参数。
在2160处,在SSM中,可以将从2150得到的X的值向右移位S1次,其中由LUT指定S1。此类移位的结果可以乘以(-1^F1),其中由LUT指定F1;这可以用按位补码函数来执行。这可能导致部分乘积。在2165处,可以以与2160中描述的相同的方式、但是利用随后的S和F参数来计算附加的部分乘积。方法2100可以进行到2170。
在2170处,可以将部分乘积相加,并且在2175处,作为X*w的估计乘积返回结果。方法2100可以可选地重复或终止。
方法2100可以由任何合适的标准发起。此外,尽管方法2100描述了特定元件的操作,但是方法2100可以由任何合适的组合或元件类型执行。例如,方法2100可以由图1-图20中所图示的元件或可操作以实现方法2100的任何其它***来实现。同样地,对于方法2100的优选初始化点和包括方法2100的元件的顺序可以取决于选择的实现。在一些实施例中,一些元件可以被可选地省略、重新组织、重复或组合。
本文公开的机制的实施例可以在硬件、软件、固件或此类实现方法的组合中实现。本公开的实施例可以被实现为在包括至少一个处理器、存储***(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备和至少一个输出设备的可编程***上执行的计算机程序或程序代码。
程序代码可以应用于输入指令以执行本文所描述的功能并生成输出信息。可以以已知的方式将输出信息应用于一个或多个输出设备。为了本申请的目的,处理***可以包括具有例如诸如数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器之类的处理器的任何***。
程序代码可以以高级过程或面向对象的编程语言来实现以与处理***通信。如果期望的话,程序代码还可以用汇编或机器语言来实现。事实上,本文描述的机制的范围不限于任何特定的编程语言。在任何情况下,语言可以是编译或解释语言。
至少一个实施例的一个或多个方面可以通过存储在机器可读介质上的代表性指令来实现,所述代表性指令表示处理器内的各种逻辑,所述逻辑当由机器读取时使得机器制造逻辑以执行本文所描述的技术。称为“IP核”的此类表示可以存储在有形的机器可读介质上,并且供应给各种客户或制造设施以加载到实际制作逻辑或处理器的制造机器中。
此类机器可读存储介质可以包括但不限于由机器或设备制造或形成的制品的非暂时性、有形布置,包括存储介质诸如硬盘、任何其它类型的盘,包括软盘、光盘、压缩盘只读存储器(CD-ROM)、可重写压缩盘(CD-RW)和磁光盘、半导体器件(诸如只读存储器(ROM)、诸如动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)之类的随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、闪存、电可擦除可编程只读存储器(EEPROM)、磁卡或光卡或任何其它类型的适合于存储电子指令的介质。
相应地,本公开的实施例还可以包括包含指令或包含诸如硬件描述语言(HDL)的设计数据的非暂时性有形机器可读介质,其定义结构、电路、设备、处理器和/或本文描述的***特征。此类实施例也可以被称为程序产品。
在一些情况下,指令转换器可用于将指令从源指令集转换为目标指令集。例如,指令转换器可以转化(例如,使用静态二进制转化,包括动态编译的动态二进制转化)、变形、仿真或以其它方式将指令转换为要由核处理的一个或多个其它指令。指令转换器可以以软件、硬件、固件或其组合来实现。指令转换器可以在处理器上、处理器外或部分在处理器上且部分在处理器外。
因此,公开了用于根据至少一个实施例执行一个或多个指令的技术。虽然已经在附图中描述和示出了某些示例性实施例,但是要理解,此类实施例仅仅是对其它实施例的说明而不是限制,并且此类实施例不限于所示和所描述的特定构造和布置,因为本领域普通技术人员在研究本公开时可以想起各种其它修改。在诸如此类的技术领域中--其中成长快并且不容易预见进一步的进展,如在不脱离本公开的原理或随附权利要求的范围的情况下通过实现技术进步所促进的,所公开的实施例可以在布置和细节上容易地可修改。
Claims (20)
1.一种处理器,包括:
包括解码器的前端,所述解码器包括用于识别乘法指令以将第一数字和第二数字相乘的第一逻辑;
执行单元,包括:
用于执行所述乘法指令的第二逻辑;
用于基于所述指令来访问基于所述第二数字的查找表以确定多个移位参数和一个或多个标志参数的第三逻辑;和
移位和乘法器(SSM),包括:
第四逻辑,用于使用所述移位参数来移位所述第一数字以确定多个部分乘积,以及使用所述标志参数来确定所述部分乘积的符号;和
第五逻辑,用于对所述部分乘积求和以产生所述乘法指令的结果;以及
包括用于引退所述指令的第六逻辑的引退单元。
2. 根据权利要求1所述的处理器,其中:
所述移位参数和标志参数包括第一移位参数、第二移位参数和第一标志参数;和
所述SSM还包括:
第六逻辑,用于将所述第一数字向右逐位移位等于所述第一移位参数的次数以生成第一部分乘积;
第七逻辑,用于将所述第二数字向右逐位移位等于所述第二移位参数的次数以生成第二部分乘积;和
第八逻辑,用于基于所述第一标志参数来将所述第二部分乘积设置为正或负。
3.根据权利要求2所述的处理器,其中,所述执行单元还包括第九逻辑,用于访问所述查找表并且基于所述第二数字的值范围来检索所述第一移位参数、第二移位参数和第一标志参数,所述值范围从零到一。
4. 根据权利要求1所述的处理器,其中:
每个移位参数对应于相关联的标志参数;和
所述SSM还包括:
第六逻辑,用于将给定的移位参数向右逐位移位等于所述给定的移位参数的次数以生成给定的部分乘积;和
第七逻辑,用于基于与所述给定的移位参数相关联的所述标志参数来将所述给定的部分乘积设置为正或负。
5.根据权利要求4所述的处理器,其中,所述执行单元还包括第八逻辑,用于访问所述查找表并且基于所述第二数字的值范围来检索相关联的移位参数和标识参数,其中所述值范围从负二到二。
6.根据权利要求1所述的处理器,其中,所述执行单元还包括第六逻辑,用于利用所述表中与所述第二数字的值最接近的确定条目来访问所述查找表。
7. 根据权利要求1所述的处理器,其中,所述查找表针对所述第二数字的给定值来定义:
所述第一数字将被向右旋转多少次以生成所述乘法指令的相关联的部分乘积;和
所述相关联的部分乘积的符号。
8.一种方法,包括在处理器内:
识别和解码乘法指令以将第一数字和第二数字相乘;
基于所述指令,访问基于所述第二数字的查找表以确定多个移位参数和一个或多个标志参数;和
使用所述移位参数来确定多个部分乘积以移位所述第一数字以及使用所述标志参数来确定部分乘积的符号;和
对所述部分乘积求和以产生所述乘法指令的结果;和
引退所述指令。
9. 根据权利要求8所述的方法,其中:
所述移位参数和标志参数包括第一移位参数、第二移位参数和第一标志参数;和
所述方法还包括:
将所述第一数字向右逐位移位与所述第一移位参数相对应的次数以生成第一部分乘积;
将所述第二数字向右逐位移位与所述第二移位参数相对应的次数以生成第二部分乘积;和
基于所述第一标志参数来将所述第二部分乘积设置为正或负。
10.根据权利要求9所述的方法,还包括访问所述查找表并且基于所述第二数字的值范围来检索所述第一移位参数、第二移位参数和第一标志参数,所述值范围从零到一。
11. 根据权利要求8所述的方法,其中:
每个移位参数对应于相应的标志参数;和
所述方法还包括:
将给定的移位参数向右逐位移位与所述给定的移位参数相对应的次数以生成给定的部分乘积;和
基于与所述给定的移位参数相对应的所述标志参数来将所述给定的部分乘积设置为正或负。
12.根据权利要求8所述的方法,还包括:包括第八逻辑,用于访问所述查找表并且基于所述第二数字的值范围来检索相对应的移位参数和标识参数,所述值范围从负二到二。
13.根据权利要求8所述的方法,还包括通过确定所述表中与所述第二数字的值最接近的条目来访问所述查找表。
14.一种***,包括:
包括解码器的前端,所述解码器包括用于识别乘法指令以将第一数字和第二数字相乘的第一逻辑;
执行单元,包括:
用于执行所述乘法指令的第二逻辑;
用于基于所述指令来访问基于所述第二数字的查找表以确定多个移位参数和一个或多个标志参数的第三逻辑;和
移位和乘法器(SSM),包括:
第四逻辑,用于使用所述移位参数来移位所述第一数字以确定多个部分乘积,以及使用所述标志参数来确定所述部分乘积的符号;和
第五逻辑,用于对所述部分乘积求和以产生所述乘法指令的结果;以及
包括用于引退所述指令的第六逻辑的引退单元。
15. 根据权利要求14所述的***,其中:
所述移位参数和标志参数包括第一移位参数、第二移位参数和第一标志参数;和
所述SSM还包括:
第六逻辑,用于将所述第一数字向右逐位移位等于所述第一移位参数的次数以生成第一部分乘积;
第七逻辑,用于将所述第二数字向右逐位移位等于所述第二移位参数的次数以生成第二部分乘积;和
第八逻辑,用于基于所述第一标志参数来将所述第二部分乘积设置为正或负。
16.根据权利要求15所述的***,其中,所述执行单元还包括第九逻辑,用于访问所述查找表并且基于所述第二数字的值范围来检索所述第一移位参数、第二移位参数和第一标志参数,所述值范围从零到一。
17. 根据权利要求14所述的***,其中:
每个移位参数对应于相关联的标志参数;和
所述SSM还包括:
第六逻辑,用于将给定的移位参数向右逐位移位等于所述给定的移位参数的次数以生成给定的部分乘积;和
第七逻辑,用于基于与所述给定的移位参数相关联的所述标志参数来将所述给定的部分乘积设置为正或负。
18.根据权利要求17所述的***,其中,所述执行单元还包括第八逻辑,用于访问所述查找表并且基于所述第二数字的值范围来检索相关联的移位参数和标识参数,其中所述值范围从负二到二。
19.根据权利要求14所述的***,其中,所述执行单元还包括第六逻辑,用于利用所述表中与所述第二数字的值最接近的确定条目来访问所述查找表。
20. 根据权利要求14所述的***,其中,所述查找表针对所述第二数字的给定值来定义:
所述第一数字将被向右旋转多少次以生成所述乘法指令的相关联的部分乘积;和
所述相关联的部分乘积的符号。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/578,605 US9678749B2 (en) | 2014-12-22 | 2014-12-22 | Instruction and logic for shift-sum multiplier |
US14/578605 | 2014-12-22 | ||
PCT/US2015/061584 WO2016105713A1 (en) | 2014-12-22 | 2015-11-19 | Instruction and logic for shift-sum multiplier |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107003839A true CN107003839A (zh) | 2017-08-01 |
CN107003839B CN107003839B (zh) | 2020-12-11 |
Family
ID=56129458
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201580063499.3A Expired - Fee Related CN107003839B (zh) | 2014-12-22 | 2015-11-19 | 用于移位和乘法器的指令执行方法、处理器和*** |
Country Status (5)
Country | Link |
---|---|
US (1) | US9678749B2 (zh) |
EP (1) | EP3238023A4 (zh) |
CN (1) | CN107003839B (zh) |
TW (1) | TWI588740B (zh) |
WO (1) | WO2016105713A1 (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111160541A (zh) * | 2017-12-14 | 2020-05-15 | 中科寒武纪科技股份有限公司 | 集成电路芯片装置及相关产品 |
CN111913686A (zh) * | 2020-05-29 | 2020-11-10 | 无锡市优利康电气有限公司 | 一种定点cpu的快速开平方计算的方法 |
CN112181354A (zh) * | 2020-10-12 | 2021-01-05 | 上海芯旺微电子技术有限公司 | 一种移位饱和同步处理的方法及其应用 |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9678749B2 (en) * | 2014-12-22 | 2017-06-13 | Intel Corporation | Instruction and logic for shift-sum multiplier |
US10606587B2 (en) * | 2016-08-24 | 2020-03-31 | Micron Technology, Inc. | Apparatus and methods related to microcode instructions indicating instruction types |
US10162633B2 (en) * | 2017-04-24 | 2018-12-25 | Arm Limited | Shift instruction |
CN109284827A (zh) | 2017-07-19 | 2019-01-29 | 阿里巴巴集团控股有限公司 | 神经网络计算方法、设备、处理器及计算机可读存储介质 |
US20220197595A1 (en) * | 2020-12-21 | 2022-06-23 | Intel Corporation | Efficient multiply and accumulate instruction when an operand is equal to or near a power of two |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050027832A1 (en) * | 2003-07-31 | 2005-02-03 | International Business Machines Corporation | Method and apparatus for performing device configuration rediscovery |
US20050228845A1 (en) * | 2004-04-12 | 2005-10-13 | Mathstar, Inc. | Shift and recode multiplier |
US20060155793A1 (en) * | 2005-01-11 | 2006-07-13 | Via Telecom Co., Ltd. | Canonical signed digit (CSD) coefficient multiplier with optimization |
EP1866741A2 (en) * | 2005-03-31 | 2007-12-19 | Nxp B.V. | Canonical signed digit multiplier |
US20090024643A1 (en) * | 2005-07-22 | 2009-01-22 | X-Engines, Inc | Multi-Level Compressed Look-up Tables Formed by Logical Operations to Compress Selected Index Bits |
US20120066283A1 (en) * | 2010-09-13 | 2012-03-15 | Electronics And Telecommunications Research Institute | Divider and method of operating the same |
CN103268214A (zh) * | 2013-04-19 | 2013-08-28 | 荣成市鼎通电子信息科技有限公司 | 基于查找表的深空通信中准循环矩阵高速乘法器 |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5446651A (en) * | 1993-11-30 | 1995-08-29 | Texas Instruments Incorporated | Split multiply operation |
US5509129A (en) * | 1993-11-30 | 1996-04-16 | Guttag; Karl M. | Long instruction word controlling plural independent processor operations |
US5646877A (en) * | 1995-05-25 | 1997-07-08 | Texas Instruments Incorporated | High radix multiplier architecture |
US6298369B1 (en) | 1998-09-30 | 2001-10-02 | Stmicroelectronics, Inc. | High speed multiplier |
CA2294554A1 (en) * | 1999-12-30 | 2001-06-30 | Mosaid Technologies Incorporated | Method and circuit for multiplication using booth encoding and iterative addition techniques |
US6912557B1 (en) * | 2000-06-09 | 2005-06-28 | Cirrus Logic, Inc. | Math coprocessor |
US6651079B1 (en) * | 2000-07-18 | 2003-11-18 | Agere Systems Inc. | High speed pipeline multiplier with virtual shift |
US6941446B2 (en) | 2002-01-21 | 2005-09-06 | Analog Devices, Inc. | Single instruction multiple data array cell |
JP4988627B2 (ja) * | 2008-03-05 | 2012-08-01 | ルネサスエレクトロニクス株式会社 | フィルタ演算器及び動き補償装置 |
US8364902B2 (en) | 2009-08-07 | 2013-01-29 | Via Technologies, Inc. | Microprocessor with repeat prefetch indirect instruction |
US8463834B2 (en) | 2009-11-03 | 2013-06-11 | Arm Limited | Floating point multiplier with first and second partial product shifting circuitry for result alignment |
US8667042B2 (en) | 2010-09-24 | 2014-03-04 | Intel Corporation | Functional unit for vector integer multiply add instruction |
US10241810B2 (en) | 2012-05-18 | 2019-03-26 | Nvidia Corporation | Instruction-optimizing processor with branch-count table in hardware |
US9678749B2 (en) * | 2014-12-22 | 2017-06-13 | Intel Corporation | Instruction and logic for shift-sum multiplier |
-
2014
- 2014-12-22 US US14/578,605 patent/US9678749B2/en not_active Expired - Fee Related
-
2015
- 2015-11-19 EP EP15873931.8A patent/EP3238023A4/en not_active Withdrawn
- 2015-11-19 WO PCT/US2015/061584 patent/WO2016105713A1/en active Application Filing
- 2015-11-19 CN CN201580063499.3A patent/CN107003839B/zh not_active Expired - Fee Related
- 2015-11-19 TW TW104138326A patent/TWI588740B/zh not_active IP Right Cessation
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050027832A1 (en) * | 2003-07-31 | 2005-02-03 | International Business Machines Corporation | Method and apparatus for performing device configuration rediscovery |
US20050228845A1 (en) * | 2004-04-12 | 2005-10-13 | Mathstar, Inc. | Shift and recode multiplier |
US20060155793A1 (en) * | 2005-01-11 | 2006-07-13 | Via Telecom Co., Ltd. | Canonical signed digit (CSD) coefficient multiplier with optimization |
EP1866741A2 (en) * | 2005-03-31 | 2007-12-19 | Nxp B.V. | Canonical signed digit multiplier |
US20090024643A1 (en) * | 2005-07-22 | 2009-01-22 | X-Engines, Inc | Multi-Level Compressed Look-up Tables Formed by Logical Operations to Compress Selected Index Bits |
US20120066283A1 (en) * | 2010-09-13 | 2012-03-15 | Electronics And Telecommunications Research Institute | Divider and method of operating the same |
CN103268214A (zh) * | 2013-04-19 | 2013-08-28 | 荣成市鼎通电子信息科技有限公司 | 基于查找表的深空通信中准循环矩阵高速乘法器 |
Non-Patent Citations (1)
Title |
---|
方湘艳等: "模乘算法的快速移位实现方法", 《武汉理工大学学报》 * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111160541A (zh) * | 2017-12-14 | 2020-05-15 | 中科寒武纪科技股份有限公司 | 集成电路芯片装置及相关产品 |
CN111160541B (zh) * | 2017-12-14 | 2023-05-19 | 中科寒武纪科技股份有限公司 | 集成电路芯片装置及相关产品 |
CN111913686A (zh) * | 2020-05-29 | 2020-11-10 | 无锡市优利康电气有限公司 | 一种定点cpu的快速开平方计算的方法 |
CN111913686B (zh) * | 2020-05-29 | 2021-12-07 | 无锡市优利康电气有限公司 | 一种定点cpu的快速开平方计算的方法 |
CN112181354A (zh) * | 2020-10-12 | 2021-01-05 | 上海芯旺微电子技术有限公司 | 一种移位饱和同步处理的方法及其应用 |
CN112181354B (zh) * | 2020-10-12 | 2021-08-10 | 上海芯旺微电子技术有限公司 | 一种移位饱和同步处理的方法及其应用 |
Also Published As
Publication number | Publication date |
---|---|
US9678749B2 (en) | 2017-06-13 |
US20160179514A1 (en) | 2016-06-23 |
TWI588740B (zh) | 2017-06-21 |
TW201643694A (zh) | 2016-12-16 |
CN107003839B (zh) | 2020-12-11 |
EP3238023A4 (en) | 2018-05-30 |
EP3238023A1 (en) | 2017-11-01 |
WO2016105713A1 (en) | 2016-06-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108292215B (zh) | 用于加载-索引和预取-聚集操作的指令和逻辑 | |
CN108369509B (zh) | 用于基于通道的跨步分散操作的指令和逻辑 | |
CN107003921B (zh) | 具有有限状态机控制的可重配置测试访问端口 | |
CN108369516B (zh) | 用于加载-索引和预取-分散操作的指令和逻辑 | |
CN108292229B (zh) | 用于重新出现的相邻聚集的指令和逻辑 | |
TWI738674B (zh) | 與快取控制操作有關的處理器、系統及非暫時性機器可讀媒體 | |
KR101923289B1 (ko) | 스토어들을 소팅 및 리타이어링하기 위한 명령어와 로직 | |
CN108351863A (zh) | 用于可编程结构层级结构和高速缓存的指令和逻辑 | |
CN107003839A (zh) | 用于移位和乘法器的指令和逻辑 | |
TW201729078A (zh) | 用於以通道為基礎的跨步儲存操作之指令及邏輯 | |
CN105745630B (zh) | 用于在集群宽执行机器中的存储器访问的指令和逻辑 | |
CN108369513A (zh) | 用于加载-索引-和-收集操作的指令和逻辑 | |
TW201723817A (zh) | 用於取得多重向量元素操作之指令及邏輯 | |
TWI590079B (zh) | 用於處理計算的向量格式的指令及邏輯 | |
CN108369518A (zh) | 用于位字段寻址和***的指令和逻辑 | |
TW201729077A (zh) | 用於設置多重向量元素操作之指令及邏輯 | |
CN108351785A (zh) | 用于部分减少操作的指令和逻辑 | |
TW201723815A (zh) | 用於偶數與奇數向量取得操作之指令及邏輯 | |
CN107077421A (zh) | 用于页表游走改变位的指令和逻辑 | |
CN108292271A (zh) | 用于向量置换的指令和逻辑 | |
CN108351778A (zh) | 用于检测浮点抵消效应的指令和逻辑 | |
CN108292218A (zh) | 用于向量位字段压缩和扩展的指令和逻辑 | |
CN106030520A (zh) | 用于软件预获取指令的过滤的指令和逻辑 | |
KR20160113677A (ko) | 다수의 스트랜드들로부터 명령어들을 디스패칭하기 위한 프로세서 로직 및 방법 | |
CN105723329B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20201211 Termination date: 20211119 |
|
CF01 | Termination of patent right due to non-payment of annual fee |