CN109144569A - 用于减少短整数乘法数量的系统、装置和方法 - Google Patents
用于减少短整数乘法数量的系统、装置和方法 Download PDFInfo
- Publication number
- CN109144569A CN109144569A CN201810750640.2A CN201810750640A CN109144569A CN 109144569 A CN109144569 A CN 109144569A CN 201810750640 A CN201810750640 A CN 201810750640A CN 109144569 A CN109144569 A CN 109144569A
- Authority
- CN
- China
- Prior art keywords
- source operand
- square
- data value
- processor
- data
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 30
- 241001269238 Data Species 0.000 claims abstract description 8
- 239000013598 vector Substances 0.000 claims description 72
- 238000006073 displacement reaction Methods 0.000 claims description 10
- 230000000295 complement effect Effects 0.000 claims description 6
- 230000015654 memory Effects 0.000 description 57
- 238000003860 storage Methods 0.000 description 27
- 238000012545 processing Methods 0.000 description 22
- 238000010586 diagram Methods 0.000 description 21
- 238000004891 communication Methods 0.000 description 10
- 238000005516 engineering process Methods 0.000 description 10
- 238000012856 packing Methods 0.000 description 10
- 210000004027 cell Anatomy 0.000 description 9
- 210000004940 nucleus Anatomy 0.000 description 8
- 230000006870 function Effects 0.000 description 7
- 239000003795 chemical substances by application Substances 0.000 description 6
- 230000004087 circulation Effects 0.000 description 6
- 230000006835 compression Effects 0.000 description 6
- 238000007906 compression Methods 0.000 description 6
- 238000013461 design Methods 0.000 description 5
- 230000007246 mechanism Effects 0.000 description 5
- 230000008569 process Effects 0.000 description 5
- 238000013519 translation Methods 0.000 description 4
- 230000014509 gene expression Effects 0.000 description 3
- 238000004519 manufacturing process Methods 0.000 description 3
- 230000003068 static effect Effects 0.000 description 3
- 230000006399 behavior Effects 0.000 description 2
- 230000015572 biosynthetic process Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000009826 distribution Methods 0.000 description 2
- 239000000284 extract Substances 0.000 description 2
- 238000007667 floating Methods 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 238000002156 mixing Methods 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 239000000758 substrate Substances 0.000 description 2
- 230000001052 transient effect Effects 0.000 description 2
- 230000007704 transition Effects 0.000 description 2
- 241000208340 Araliaceae Species 0.000 description 1
- 235000005035 Panax pseudoginseng ssp. pseudoginseng Nutrition 0.000 description 1
- 235000003140 Panax quinquefolius Nutrition 0.000 description 1
- 101100285899 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) SSE2 gene Proteins 0.000 description 1
- 230000005856 abnormality Effects 0.000 description 1
- 229910002056 binary alloy Inorganic materials 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 239000012141 concentrate Substances 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000006837 decompression Effects 0.000 description 1
- 238000005538 encapsulation Methods 0.000 description 1
- 235000008434 ginseng Nutrition 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 229910052754 neon Inorganic materials 0.000 description 1
- GKAOGPIIYCISHV-UHFFFAOYSA-N neon atom Chemical compound [Ne] GKAOGPIIYCISHV-UHFFFAOYSA-N 0.000 description 1
- 230000006911 nucleation Effects 0.000 description 1
- 238000010899 nucleation Methods 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 230000003252 repetitive effect Effects 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000003786 synthesis reaction Methods 0.000 description 1
- 230000000007 visual effect Effects 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/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- 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/533—Reduction of the number of iteration steps or stages, e.g. using the Booth algorithm, log-sum, odd-even
-
- 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
- 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/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
- G06F9/30038—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3893—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
- G06F9/3895—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator for complex operations, e.g. multidimensional or interleaved address generators, macros
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 Physics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Computational Mathematics (AREA)
- Computing Systems (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
Abstract
公开一种用于减少短整数乘法数量的系统、装置和方法。描述用于仅使用一次乘法来计算第一源操作数数据值的平方、第二源操作数数据值的平方以及第一和第二源操作数数据的乘法的系统、方法和装置。
Description
本申请是国际申请日为2014年03月14日、中国国家阶段申请号为201410095756.9、题为“用于减少短整数乘法数量的系统、装置和方法”的发明专利申请的分案申请。
技术领域
本发明领域一般涉及计算机处理器架构,尤其涉及在被执行时产生特定结果的指令。
背景技术
指令集或指令集架构(ISA)是与编程有关的计算机架构的一部分,且可包括本机数据类型、指令、寄存器架构、寻址模式、存储器架构、中断和异常处理以及外部输入和输出(I/O)。应注意术语“指令”在本文中一般指的是宏指令——提供给处理器以供执行的指令——与从处理器的解码器解码宏指令得到的微指令或微操作相反。
附图说明
在附图各图中通过示例而不是限制说明了本发明,其中类似标记指示相似元素,且其中:
图1示出SQRMUL指令的示例性执行。
图2是用于执行一个或多个指令的处理器(处理器核)的示例性实施例的框图。
图3示出处理器中SQRMUL指令的执行的实施例。
图4和图5示出处理SQRMUL指令的方法的实施例。
图6示出在图4和5的流程之间进行选择的示例性方法。
图7是根据本发明的一个实施例的寄存器架构700的框图。
图8A是示出根据本发明的实施例的示例性有序流水线以及示例性寄存器重命名、无序发布/执行流水线的框图。
图8B是示出根据本发明的实施例的要包括在处理器中的有序架构核示例性实施例以及示例性寄存器重命名、无序发布/执行架构核的框图。
图9A-B示出更具体的示例性有序核架构的框图,该核可以是芯片中的若干逻辑块之一(包括相同类型和/或不同类型的其它核)。
图10是根据本发明的实施例的可具有一个以上核、可具有集成存储器控制器、并且可具有集成图形器件的处理器1000的框图。
图11-14是示例性计算机架构的框图。
图15是根据本发明实施例的使用软件指令转换器将源指令集中的二进制指令转换为目标指令集中的二进制指令的框图。
具体实施方式
在下面的描述中,阐述了很多具体细节。然而,应当理解,本发明的实施例可在没有这些具体细节的情况下实践。在其他情况下,没有详细示出已知的电路、结构、以及技术,以便不至于使本描述变得模糊。
在说明书中对“一个实施例”、“一实施例”、“示例实施例”等的引用指示所描述的实施例可以包括特定特征、结构或特性,但并不一定每个实施例都包括该特定特征、结构或特性。此外,这样的短语不一定是指同一个实施例。此外,当结合实施例描述特定特征、结构或特性时,认为本领域技术人员知道结合无论是否明确描述的其他实施例来实现这些特征、结构或特性。
概览
指令集架构与微架构不同,微架构是实现ISA的处理器的内部设计。具有不同微架构的处理器可共享公共指令集。例如,英特尔奔腾四(Pentium 4)处理器、英特尔酷睿(Core)处理器、以及来自加利福尼亚州桑尼威尔(Sunnyvale)的高级微设备有限公司(Advanced Micro Devices,Inc.)的诸多处理器执行几乎相同版本的x86指令集(在更新的版本中加入了一些扩展),但具有不同的内部设计。例如,ISA的相同寄存器架构在不同的微架构中使用已知的技术以不同方法来实现,包括专用物理寄存器、使用寄存器重命名机制(诸如,如美国专利No.5,446,912所述,使用寄存器假名表(RAT)、重排序缓冲器(ROB)、以及引退寄存器文件;如果美国专利No.5,207,132所述,使用多个寄存器映射和池)的一个或多个动态分配物理寄存器,等等。除非另行指出,否则短语寄存器架构、寄存器文件和寄存器是指对软件/程序员可见的那些以及指令指定寄存器的方式。在期望特殊性的情况下,形容词逻辑、架构或软件可见可用于指示寄存器架构中的寄存器/文件,同时不同的形容词将用于指定给定微架构中的寄存器(例如,物理寄存器、重排序缓冲器、引退寄存器、寄存器池)。
指令集包括一种或多种指令格式。给定的指令格式定义多个字段(位数、位的位置)以特别指定待执行的操作以及待执行操作的操作数。给定的指令利用给定的指令格式来表达,并且指定操作和操作数。指令流是特定的指令序列,其中序列中的每个指令是指令按照指令格式的存在。
科学应用、金融应用、自动向量化通用应用、RMS(识别、挖掘和合成)应用/视觉和多媒体应用(诸如,2D/3D图形、图像处理、视频压缩/解压缩、语音识别算法和音频处理)通常需要对大量数据项进行相同的操作(称为“数据并行性”)。单指令多数据(SIMD)指的是使得处理器在多个数据项上执行相同操作的指令类型。SIMD技术尤其适用于处理器,这些处理器可以将寄存器中的多个位(bit)逻辑地划分到多个固定大小的数据元素中,每个数据元素表示单独的值。例如,64位寄存器中的位可被指定为源操作数,该源操作数作为四个单独的16位数据元素被操作,每个数据元素表示单独的16位值。作为另一个示例,256位寄存器中的位可被指定为源操作数,该源操作数作为四个单独的64位打包数据元素(四字(Q)尺寸数据元素)、八个单独的32位打包数据元素(双字(D)尺寸数据元素)、十六个单独的16位打包数据元素(字(W)尺寸数据元素)、或三十二个单独的8位打包数据元素(字节(B)尺寸数据元素)被操作。该数据类型可被称为打包数据类型或向量数据类型,并且该数据类型的操作数被称为打包数据操作数或向量操作数。换句话说,打包数据项或向量指的是打包数据元素的序列;并且打包数据操作数或向量操作数是SIMD指令(也称为打包数据指令或向量指令)的源操作数或目的地操作数。
作为示例,一种SIMD指令类型指定将要以垂直方式在两个源向量操作数上执行的单个向量操作,以生成相同大小的、具有相同数量的数据元素、具有相同数据元素次序的目的地向量操作数(也被称为结果向量操作数)。源向量操作数中的数据元素被称为源数据元素,而目的地向量操作数中的数据元素被称为目的地或结果数据元素。这些源向量操作数具有相同尺寸且包含相同宽度的数据元素,因此它们包含相同数量的数据元素。两个源向量操作数中的相同位位置中的源数据元素形成数据元素对(也称为相对应的数据元素;即,每个源操作数的数据元素位置0中的数据元素相对应,每个源操作数的数据元素位置1中的数据元素相对应,等等)。SIMD指令指定的操作在这些源数据元素对中的每对上单独执行,以生成匹配数量的结果数据元素,并且因此每对源数据元素具有相对应的结果数据元素。因为操作是垂直的,且因为结果向量操作数尺寸相同,具有相同数量的数据元素,且结果数据元素以与源向量操作数相同的数据元素顺序存储,结果数据元素在结果向量操作数中的位位置与源向量操作数中的相对应源数据元素对相同。除示例性SIMD指令类型外,存在各种其它类型的SIMD指令(例如,仅具有一个源向量操作数或具有两个以上的源向量操作数;以水平方式操作;生成不同尺寸的结果向量操作数,具有不同尺寸的数据元素和/或具有不同的数据元素顺序)。应理解,术语目的地向量操作数(或目的地操作数)被定义为执行由指令指定的操作的直接结果,包括该目的地操作数在位置处的存储(在寄存器中或在该指令指定的存储器地址处),使得它可由另一个指令访问作为源操作数(通过另一个指令对该相同位置的指定)。
例如由CoreTM处理器(具有包括x86、MMXTM、流SIMD扩展(SSE)、SSE2、SSE3、SSE4.1、SSE4.2指令的指令集)所使用的SIMD技术在应用性能上带来了极大的提高(CoreTM和MMXTM是加利福尼亚州圣克拉拉市的英特尔公司的注册商标或商标)。另外的SIMD扩展集称为高级向量扩展(AVX)(AVX1和AVX2)并且使用VEX编码方案,已经发行和/或出版(例如,参见64和IA-32架构软件开发者手册,2011年10月;以及高级向量扩展编程参考,2011年6月)。
一些常规数学运算,诸如a2+a*b+b2和a[i]=b[i]2,对矩阵和长数字乘法而言十分常见。这种数学运算使用大量乘法指令,这些乘法指令在现代CPU的等待时间方面仍然代价昂贵。例如,令a、b是以B为基的无符号整数。计算a2+a*b+b2的代码是:
1:a_sq=a*a;
2:a_times_b=a*b;
3:b_sq=b*b;
4:三个乘法相加
对于现代CPU,每个乘法耗用约5个循环,因此3个乘法的总等待时间为15个循环。
以下是指令集中通常被称为平方-乘法(square-multiply,SQRMUL)指令的指令实施例以及可以用于改进等待时间的系统、架构、指令格式等的实施例。SQRMUL的执行计算第一源操作数数据值的平方、第二源操作数数据值的平方、以及第一和第二源操作数数据的乘法,并且将全部三个计算存储在单个目的地操作数中。
图1示出SQRMUL指令的示例性执行。两个源寄存器101和103分别持有值A和B。这些值由执行逻辑107处理,以产生A2、A*B、以及B2。这些结果被存储在目的地寄存器105中。该寄存器可以是通用寄存器(例如双字尺寸寄存器)或者(具有用于存储所计算值的数据元素位置)打包数据寄存器。虽然示出特定顺序,但是可以使用任何其它顺序来存储所计算的值。
图2是用于执行一个或多个SQRMUL指令204的处理器(处理器核)200的示例性实施例的框图。在一些实施例中,处理器可以是通用处理器(例如,用在台式机、膝上型计算机、服务器等计算机中的类型)。替换地,处理器可以是专用处理器。合适的专用处理器的例子包括但不限于,网络处理器、通信处理器、加密处理器、图形处理器、协处理器、嵌入式处理器、数字信号处理器(DSP)、以及控制器,这里仅给出几个示例。处理器可以是各种复杂指令集计算(CISC)处理器、各种精简指令集计算(RISC)处理器、各种超长指令字(VLIW)处理器、上述处理器的各种混合、或者完全其他类型的处理器中的任一个。
处理器200包括架构上可见的寄存器(例如,架构寄存器文件)205。架构寄存器还可在本文中被简称为寄存器。除非另行指出或显而易见,短语架构寄存器、寄存器文件和寄存器在本文中被用于指代这样的寄存器:该寄存器对于被宏指令或汇编语言指令指定来标识操作数的软件和/或编程器和/或寄存器而言是可见。这些寄存器与给定微架构(例如,由指令使用的临时寄存器、重排序缓冲器、引退(retirement)寄存器等)中的其他非架构或非架构可视的寄存器形成对比。寄存器通常表示管芯上处理器存储位置。所例示的架构寄存器包括打包数据寄存器206。打包数据寄存器中的每一个可操作用于存储打包或向量数据。所例示的架构寄存器还包括打包数据操作掩码寄存器207。打包数据操作掩码寄存器中的每一个可操作用于存储打包数据操作掩码。在本说明书中这些寄存器可被称为写掩码寄存器。打包数据操作数可被存储在打包数据寄存器207中。
处理器还包括执行逻辑208。执行逻辑可操作用于执行或处理一个或多个SQRMUL指令204。在一些实施例中,执行逻辑可包括特定逻辑(例如,可能与固件组合的特定电路或硬件)以执行这些指令。
示例性SQRMUL格式
该指令的示例性格式是“SQRMUL DEST,SOURCE 1,SOURCE 2”,其中所有这些操作数是寄存器。在一些实施例中,寄存器是通用寄存器。这些寄存器可以采用任何尺寸,包括但不限于,8位、16位、32位、64位和128位。在其它实施例中,寄存器可以是浮点寄存器或打包数据寄存器。在其它实施例中,源是通用寄存器,且目的地是打包数据寄存器。在大多数实施例中,源寄存器存储无符号的整数。
执行SQRMUL的示例性方法
图3示出处理器中SQRMUL指令的执行的实施例。在301,获取具有第一和第二源寄存器操作数、目的地寄存器操作数、和操作码的SQRMUL指令。
在303,通过解码逻辑解码SQRMUL指令。
在305,检索/读取源操作数的值。例如,读取源寄存器。
在307,由执行资源(诸如一个或多个功能单元)执行所解码的SQRMUL指令(或者包括这种指令的操作,诸如微操作),以计算第一源操作数数据值的平方、第二源操作数数据值的平方、以及第一和第二操作数数据的乘法,并且将全部三个计算存储在单个目的地操作数中。
在309,所计算的值被存储到目的地存储器操作数中。这些值可以以特定顺序存储,诸如从最不重要到最重要(A2,A*B,到B2)或者相反顺序,等等。在一些实施例中,所计算的值被存储在打包数据寄存器的数据元素中。
尽管已经单独地示出307和309,但在一些实施例中,它们可作为指令执行的一部分一起执行。
图4和图5示出处理SQRMUL指令的方法的实施例。在这些实施例中,L被定义为以位计的通用寄存器尺寸(32或64),a和b分别是以B为基的第一和第二操作数的无符号整数,N等于以位为单位的log2(B)。在以下示例中,a或A表示存储在第一源中的数据,b或B表示存储在第二源中的数据。在一些实施例中,移位(或类似操作)多个位。
图4示出处理SQRMUL指令的方法的实施例。这是一般情况,其中L>=6N。在该实施例中,假设之前已经执行操作301-305中的一些或全部,然而未示出它们以免混淆以下给出的细节。例如,未示出获取和解码,也未示出操作数检索。
在401,构建临时变量t。在一些实施例中,该临时变量通过将A左移位2N并用B对移位的值进行OR(或)运算来构建。换言之,t=(A<<2*N)|B。通常,这耗用两个时钟循环。所得的t值为A*22N+B。
在403,计算临时变量的平方。这创建了第二临时变量t=t*t=A2*24N+2AB*22N+B2。在一些情况下,该乘法耗用5个循环。
在405,从第二临时变量提取A2、A*B、和B2。通过将第二临时变量右移位4N来提取A2。换言之,A2=t>>4N。通过将第二临时变量与((1左移位2N)减1)的值进行AND(与)运算并且右移位2N加1,来提取A*B。换言之,A*B=(t&(1<<2N-1))>>(2N+1)。最后,通过将第二临时变量与((2左移位N)减1)的值的1(数个1)补码进行AND(与)运算,来提取B2。换言之,B2=t&~(2<<N-1)。在一些系统中,这总共耗用2-3个循环。
在407,存储所提取的值。在一些实施例中,将A2、A*B、和B2分别存储在双字的低、中和高四分之一中。在其它实施例中,将这些值存储在打包数据寄存器的独立数据元素中。
图5示出处理SQRMUL指令的方法的实施例。这是一般情况,其中4N=L。在该实施例中,假设之前已经执行操作301-305中的一些或全部,然而未示出它们以免混淆以下给出的细节。例如,未示出获取和解码,也未示出操作数检索。
在501,构建临时变量t。在一些实施例中,该临时变量通过将A左移位2N并用B对移位的值进行OR(或)运算来构建。换言之,t=(A<<2*N)|B。通常,这耗用两个时钟循环。所得的t值为A*22N+B。
在503,计算临时变量的平方并将其存储在第一和第二位置。这创建存储A2*24N+2AB*22N+B2的位置。在一些情况下,该乘法耗用5个循环。在一些实施例中,第一和第二位置是寄存器。
在505,提取A2、A*B、和B2。A2是存储在第一位置中的值。换言之,A2=位置1。通过将存储在第二位置中的数据右移位(2N加1),提取A*B。换言之,A*B=位置2>>(2N+1).最终,通过将第二位置的内容与(22N减1)的值的1(数个1)补码进行AND(与)运算,提取B2。换言之,B2=位置2&~(2<<2N-1)。在一些系统中,这总共耗用1个循环。
在507,存储所提取的值。在一些实施例中,将A2、A*B、和B2分别存储在双字的低、中和高四分之一中。在其它实施例中,将这些值存储在打包数据寄存器的独立数据元素中。
图6示出在图4和5的流程之间进行选择的示例性方法。在601,判定4N=L是否成立。如果是,在603,使用图5的流程。如果否,在605,使用图4的流程。
虽然以上是针对SQRMUL指令进行描述的,但是在不支持SQRMUL的处理器中,以上代码序列可以由乘法指令执行。
示例性寄存器架构
图7是根据本发明的一个实施例的寄存器架构700的框图。在所示的实施例中,存在512位宽的32个向量寄存器710,这些寄存器被标注为zmm0至zmm31。较低的16个zmm寄存器的较低阶256位覆盖在寄存器ymm0-16上。较低的16个zmm寄存器的较低阶128位(ymm寄存器的较低阶128位)覆盖在寄存器xmm0-15上。
通用寄存器725-在所示的实施例中,存在与现有x86寻址模式一起使用以对存储器操作数寻址的十六个64位通用寄存器。通过名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、以及R8至R15来标注这些寄存器。
与MMX打包整数平坦寄存器文件750重叠的标量浮点堆栈寄存器文件(x87堆栈)745,在所示的实施例中,x87堆栈是用于使用x87指令集扩展对32/64/80位浮点数据执行标量浮点操作的8元素堆栈,而MMX寄存器用于对64位打包整数数据执行操作、以及保留操作数用于在MMX和XMM寄存器之间执行的一些操作。
本发明的替换实施例可使用更宽或更窄的寄存器。另外,本发明的替换实施例可使用更多、更少、或不同的寄存器文件和寄存器。
示例性核架构、处理器、以及计算机架构
处理器核可以以不同的方式、出于不同的目的、并且在不同的处理器中实现。举例而言,这些核的实现可包括:1)期望用于通用计算的通用有序核;2)期望用于通用计算的高性能通用无序核;3)期望主要用于图形和/或科学(吞吐量)计算的专用核。不同处理器的实现可包括:1)包括期望用于通用计算的一个或多个通用有序核和/或期望用于通用计算的一个或多个通用无序核的CPU;以及2)包括期望主要用于图形和/或科学(吞吐量)的一个或多个专用核的协处理器。这些不同的处理器导致不同的计算机系统架构,可包括:1)与CPU分开的单独芯片上的协处理器;2)与CPU相同的封装中的单独管芯上的协处理器;3)与CPU相同的管芯上的协处理器(在此情况下,这种协处理器有时被称为专用逻辑,诸如集成图形和/或科学(吞吐量)逻辑、或者专用核);以及4)在相同管芯上可包括所述CPU(有时被称为应用核或应用处理器)、上述协处理器、以及附加功能的芯片上的系统。接着描述示例性核架构,随后描述示例性处理器和计算机架构。
示例性核架构
有序和无序核框图
图8A是示出根据本发明的实施例的示例性有序流水线以及示例性寄存器重命名、无序发布/执行流水线的框图。图8B是示出根据本发明的实施例的要包括在处理器中的有序架构核示例性实施例以及示例性寄存器重命名、无序发布/执行架构核的框图。图8A-B中的实线框示出有序流水线和有序核,而任选增加的虚线框示出寄存器重命名、无序发布/执行流水线和核。假设有序方面是无序方面的子集,将描述无序方面。
在图8A中,处理器流水线800包括获取级802、长度解码级804、解码级806、分配级808、重命名级810、调度(也称为分派或发布)级812、寄存器读取/存储器读取级814、执行级816、回写/存储器写入级818、异常处理级822、以及提交级824。
图8B示出处理器核890,该核包括耦合到执行引擎单元850的前端单元830,并且两者都耦合到存储器单元870。核890可以是精简指令集计算(RISC)核、复杂指令集计算(CISC)核、超长指令字(VLIW)核或混合或其他核类型。作为另一选项,核890可以是专用核,诸如举例而言,网络或通信核、压缩引擎、协处理器核、通用计算图形处理单元(GPGPU)核、图形核等。
前端单元830包括耦合到指令高速缓存单元834的分支预测单元832,该指令高速缓存单元834耦合到指令翻译后备缓冲器(TLB)836,该指令TLB 836耦合到指令获取单元338,该指令获取单元838耦合到解码单元840。解码单元840(或解码器)可对指令进行解码,并且生成从原始指令解码、或以其他方式反映原始指令、或从原始指令派生的一个或多个微操作、微代码进入点、微指令、其他指令、或者其他控制信号作为输出。解码单元840可使用各种不同的机构来实现。合适机构的示例包括但不限于,查找表、硬件实现、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等。在一个实施例中,核890包括微代码ROM或者存储用于特定微指令的微代码(例如,在解码单元840中或者在前端单元830内)的其他介质。解码单元840耦合至执行引擎单元850中的重命名/分配器单元852。
执行引擎单元850包括耦合到引退单元854的重命名/分配器单元852、以及一组一个或多个调度器单元856。调度器单元856表示任何数量的不同调度器,包括:预约站、中央指令窗口等等。调度器单元856耦合至物理寄存器文件单元858。每个物理寄存器文件单元858表示一个或多个物理寄存器文件,其中不同的物理寄存器文件存储一种或多种不同的数据类型,诸如标量整数、标量浮点、打包整数、打包浮点、向量整数、向量浮点、状态(例如,作为要执行的下一指令的地址的指令指针)等。在一个实施例中,物理寄存器文件单元858包括向量寄存器单元和标量寄存器单元。这些寄存器单元可提供架构向量寄存器、向量掩码寄存器、以及通用寄存器。物理寄存器文件单元858由引退单元854重叠,以示出其中可实现寄存器重命名和无序执行(例如,使用重排序缓冲器和引退寄存器文件;使用特征文件、历史缓冲器、以及引退寄存器文件;使用寄存器映射和寄存器池等)的各种方式。引退单元854和物理寄存器文件单元858耦合到执行集群860。执行集群860包括一组一个或多个执行单元862以及一组一个或多个存储器访问单元864。执行单元862可执行各种操作(例如,位移、加法、减法、乘法),并且对各种类型的数据(例如,标量浮点、打包整数、打包浮点、向量整数、向量浮点)执行。尽管一些实施例可包括专属于专用功能或功能集的大量执行单元,但是其他实施例可包括仅一个执行单元或者全部用于执行所有功能的多个执行单元。调度器单元856、物理寄存器文件单元858、以及执行集群860被示为可能是多个,因为特定实施例为特定类型的数据/操作创建分离的流水线(例如,标量整数流水线、标量浮点/打包整数/打包浮点/向量整数/向量浮点流水线、和/或各自具有其自己的调度器单元、物理寄存器文件单元和/或执行集群的存储器访问流水线;并且在分离的寄存器访问流水线的情况下,实现其中仅该流水线的执行集群具有存储器访问单元864的特定实施例)。还应当理解,在使用分离的流水线的情况下,这些流水线中的一个或多个可以是无序发布/执行,而其他流水线可以是有序的。
一组存储器访问单元864耦合到存储器单元870,该存储器单元870包括耦合到数据高速缓存单元874的数据TLB单元872,该数据高速缓存单元874耦合到第二级(L2)高速缓存单元876。在一个示例性实施例中,存储器访问单元864可包括加载单元、存储地址单元和存储数据单元,其中的每一个均耦合至存储器单元870中的数据TLB单元872。指令高速缓存单元834还耦合到存储器单元870中的二级(L2)高速缓存单元876。L2高速缓存单元876耦合到一个或多个其他级别的高速缓存,并且最终耦合到主存储器。
作为示例,示例性寄存器命名、无序发布/执行核架构可如下地实现流水线800:1)指令获取838执行获取和长度解码级802和804;2)解码单元840执行解码级806;3)重命名/分配器单元852执行分配级808和重命名级810;4)调度器单元856执行调度级812;5)物理寄存器文件单元858和存储器单元870执行寄存器读取/存储器读取级814;执行集群860执行执行级816;6)存储器单元870和物理寄存器文件单元858执行回写/存储器写入级818;7)各个单元可涉及异常处理级822;以及8)引退单元854和物理寄存器文件单元858执行提交级824。
核890可支持一个或多个指令集(例如,x86指令集(具有已经使用较新版本增加的一些扩展)、加利福尼亚州森尼维尔市MIPS技术公司的MIPS指令集、加利福尼亚州森尼维尔市的ARM控股公司的ARM指令集(具有诸如NEON之类的任选的附加扩展)),包括本文中所描述的指令。在一个实施例中,核890包括支持打包数据指令集扩展(例如,AVX1、AVX2和/或先前描述的一些形式的一般向量友好指令格式(U=0和/或U=1))的逻辑,从而允许很多多媒体应用使用的操作能够使用打包数据来执行。
应当理解,核可支持多线程(执行两组或两组以上的平行操作或线程集),并且可以通过包括分时多线程、同时多线程(其中单个物理核为每一线程提供物理核,物理核是同时多线程的)、或者其组合(例如,分时获取和解码以及此后诸如在Hyperthreading技术中的同时多线程)的各种方式实现。
尽管在无序执行的上下文中描述了寄存器重命名,但是应当理解寄存器重命名可在有序架构中使用。尽管处理器的所示实施例还包括单独的指令和数据高速缓存单元834/874以及共享的L2高速缓存单元876,但是替换实施例可具有用于指令和数据两者的单个内部高速缓存,诸如举例而言,一级(L1)内部高速缓存、或多级内部高速缓存。在一些实施例中,该系统可包括内部高速缓存和外部高速缓存的组合,该外部高速缓存在核和/或处理器外部。替换地,所有高速缓存可在核和/或处理器外部。
专用示例性有序核架构
图9A-B示出更具体的示例性有序核架构的框图,该核可以是芯片中的若干逻辑块之一(包括相同类型和/或不同类型的其它核)。依据应用,逻辑块通过高带宽互连网络(例如,环形网络)与一些固定功能逻辑、存储器I/O接口、以及其他必要的存储器I/O逻辑进行通信。
图9A是根据本发明的实施例的连接到片上互联网络902且具有二级(L2)高速缓存的本地子集904的单个处理器核的框图。在一个实施例中,指令解码器900支持具有打包数据指令集扩展的x86指令集。L1高速缓存906允许对高速缓存存储器进行低等待时间访问而进入标量和向量单元。尽管在一个实施例中(为了简化设计)标量单元908和向量单元910使用分离的寄存器集合(分别是标量寄存器912和向量寄存器914)并且在两者之间传输的数据被写入存储器且随后读取回到一级(L1)高速缓存906或从L1高速缓存906读取,但是本发明的替换实施例可使用不同的方法(例如,使用单个寄存器集合或者包括允许数据在不写入和读回的情况下在两个寄存器文件之间传输的通信路径)。
L2高速缓存的本地子集904是分成分离的本地子集(每个处理器核一个本地子集)的全局L2高速缓存的一部分。每个处理器核具有到L2高速缓存的其自己的本地子集904的直接访问路径。由处理器核读取的数据被存储在其L2高速缓存子集904中,并且可与访问其自己的本地L2高速缓存子集的其他处理器核并行地快速存取。由处理器核写入的数据被存储在其自己的L2高速缓存子集904中,并且如果必要则从其他子集清除(flush)。环形网络确保共享数据的一致性。环形网络是双向的以允许在芯片内诸如处理器核、L2高速缓存、以及其他逻辑块之类的代理相互通信。每个环形数据路径是每个方向1012位宽。
图9B是根据本发明的实施例的图9A中的处理器核的一部分的展开图。图9B包括L1高速缓存906的L1数据高速缓存906A部分、以及关于向量单元910和向量寄存器914的更多细节。具体地,向量单元910是16宽向量处理单元(VPU)(参见16宽ALU 928),该向量处理单元执行整数、单精度浮动和双精度浮动的指令中的一个或多个。VPU支持在存储器输入上使用拌和(swizzle)单元920拌和寄存器输入、使用数字转换单元922A-B数字转换、以及使用复制单元924复制。
具有集成存储器控制器和图形器件的处理器
图10是根据本发明的实施例的可具有一个以上核、可具有集成存储器控制器、并且可具有集成图形器件的处理器1000的框图。图10的实线框示出了处理器1000,处理器1000具有单个核1002A、系统代理1010、一组一个或多个总线控制器单元1016,而可选附加的虚线框示出了替代的处理器1000,具有多个核1002A-N、系统代理单元1010中的一组一个或多个集成存储器控制器单元1014以及专用逻辑1008。
由此,处理器1000的不同实现可包括:1)具有作为集成图形和/或科学(吞吐量)逻辑(该逻辑可包括一个或多个核)的专用逻辑1008、以及作为一个或多个通用核(例如,通用有序核、通用无序核、两者的组合)的核1002A-N的CPU;2)具有作为期望主要用于图形和/或科学(吞吐量)的大量专用核的核1002A-N的协处理器;以及3)具有作为大量通用有序核的核1002A-N的协处理器。由此,处理器1000可以是通用处理器、协处理器、或专用处理器,诸如举例而言,网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元)、高吞吐量许多集成核(MIC)协处理器(包括30个或30个以上的核)、嵌入式处理器等。处理器可在一个或多个芯片上实现。处理器1000可以是一个或多个衬底的一部分,和/或在一个或多个衬底上使用大量处理技术(诸如举例而言,BiCMOS、CMOS、或NMOS)中的任一种技术实现。
存储器等级(hierarchy)包括核内的一级或多级高速缓存、一组或者一个或多个共享高速缓存单元1006、以及耦合到一组集成存储器控制器单元1014的外部存储器(未示出)。一组共享高速缓存单元1006可包括一个或多个中级高速缓存(诸如二级(L2)、三级(L3)、四级(L4))或其他级高速缓存、最后一级高速缓存(LLC)、和/或其组合。尽管在一个实施例中,基于环的互连单元1012使集成图形逻辑1008、一组共享高速缓存单元1006、以及系统代理单元1010/集成存储器控制器单元1014互连,但是替换实施例可使用任意数量的公知技术来互连这些单元。在一个实施例中,在一个或多个高速缓存单元1006与核1002A-N之间维持一致性。
在一些实施例中,核1002A-H中的一个或多个核能够多线程。系统代理1010包括协调和操作核1002A-N的那些组件。系统代理单元1010可包括例如功率控制单元(PCU)和显示单元。PCU可以是或者包括调整核1002A-N的功率状态必需的逻辑和组件、以及集成图形逻辑1008。显示单元用于驱动一个或多个外部连接的显示器。
核1002A-N在架构指令集方面可以是同质的或者异质的,即核1002A-N中的两个或两个以上核可以能够执行相同的指令集,而其他核可以能够只执行该指令集的子集或者不同的指令集。
示例性计算机架构
图11-14是示例性计算机架构的框图。在本领域中已知的用于膝上型计算机、台式计算机、手持个人计算机(PC)、个人数字助理、工程工作站、服务器、网络设备、网络中枢、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备、以及各种其他电子设备的其他系统设计和配置也是合适的。一般而言,能够结合处理器和/或其他执行逻辑的各种各样系统或电子设备通常是合适的。
现在参考图11,所示出的是根据本发明一个实施例的系统1100的框图。系统1100可包括一个或多个处理器1110、1115,这些处理器耦合到控制器中枢1120。在一个实施例中,控制器中枢1120包括图形存储器控制器中枢(GMCH)1190和输入/输出中枢(IOH)1150(它们可在分离的芯片上),GMCH 1190包括耦合到存储器1140和协处理器1145的存储器和图形控制器,IOH 1150使输入/输出(I/O)设备1160耦合到GMCH 1190。替换地,存储器和图形控制器中的一个或两个集成到处理器(如本文中所描述的)中,存储器1140和协处理器1145直接耦合到处理器1110、以及在单个芯片中具有IOH1150的控制器中枢1120。
附加处理器1115的任选特征在图11中用虚线指示。每个处理器1110、1115可包括本文中所描述的处理核中的一个或多个,并且可以是一些版本的处理器1000。
存储器1140可以是例如动态随机存取存储器(DRAM)、相变存储器(PCM)、或者两者的组合。对于至少一个实施例,控制器中枢1120经由诸如前侧总线(FSB)之类的多点总线(multi-drop bus)、诸如快速通道互连(QPI)之类的点对点接口、或者类似的连接1195与处理器1110、1115进行通信。
在一个实施例中,协处理器1145是专用处理器,诸如举例而言,高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器等。在一个实施例中,控制器中枢1120可包括集成图形加速器。
按照包括架构、微架构、热、功耗特征等等优点的度量谱,物理资源1110、1115之间存在多种差别。
在一个实施例中,处理器1110执行控制通用类型的数据处理操作的指令。协处理器指令可被嵌入这些指令内。处理器1110将这些协处理器指令识别为应由附连的协处理器1145执行的类型。因此,处理器1110在协处理器总线或者其他互连上向协处理器1145发布这些协处理器指令(或者表示协处理器指令的控制信号)。协处理器1145接受和执行接收到的协处理器指令。
现在参照图12,所示出的是根据本发明实施例的更具体的第一示例性系统1200的框图。如图12所示,多处理器系统1200是点对点互连系统,并且包括经由点对点互连1250耦合的第一处理器1270和第二处理器1280。处理器1270和1280中的每一个可以是某个版本的处理器1000。在本发明的一个实施例中,处理器1270和1280分别是处理器1110和1115,而协处理器1238是协处理器1145。在另一实施例中,处理器1270和1280分别是处理器1110和协处理器1145。
处理器1270和1280分别被示为包括集成存储器控制器(IMC)单元1272和1282。处理器1270还包括作为其总线一部分的控制器单元点对点(P-P)接口1276和1278;类似地,第二处理器1280包括P-P接口1286和1288。处理器1270、1280可使用P-P接口电路1278、1288经由点对点(P-P)接口1250交换信息。如图12所示,IMC 1272和1282使处理器分别耦合到存储器,即存储器1232和存储器1234,这些存储器可以是在本地附连到相应处理器的主存储器的部分。
处理器1270、1280可各自使用点对点接口电路1276、1294、1286、1298经由各个P-P接口1252、1254与芯片组1290交换信息。芯片组1290可任选地经由高性能接口1239与协处理器1238交换信息。在一个实施例中,协处理器1238是专用处理器,诸如举例而言,高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器等。
共享高速缓存(未示出)可被包括在任一处理器中或者在两个处理器外部,但是经由P-P互连与处理器连接,由此如果处理器置于低功率模式中,则任一或两个处理器的本地高速缓存信息可被存储在共享高速缓存中。
芯片组1290可经由接口1296耦合到第一总线1216。在一个实施例中,第一总线1216可以是外围组件互连(PCI)总线、或者诸如PCI Express总线或另一第三代I/O互连总线之类的总线,但是本发明的范围不限于此。
如图12所示,各种I/O设备1214可与总线桥1218一起耦合到第一总线1216,该总线桥1218使第一总线1216耦合到第二总线1220。在一个实施例中,诸如协处理器、高吞吐量MIC处理器、GPGPU的加速器(诸如举例而言,图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列、或者其他处理器之类的一个或多个附加处理器1215耦合到第一总线1216。在一个实施例中,第二总线1220可以是低引脚数(LPC)总线。在一个实施例中,多个设备可以耦合到第二总线1220,包括例如键盘和/或鼠标1222、通信设备1227以及可以包括指令/代码和数据1230的存储单元1228(诸如盘驱动器或其它海量存储设备)。此外,音频I/O1224可耦合到第二总线1220。注意,其他架构是可能的。例如,代替图12的点对点架构,系统可实现多点总线或者其他此类架构。
现在参考图13,示出了根据本发明的实施例的第二更具体的示例性系统1300的框图。图12和13中的类似元素使用类似附图标记,且在图13中省略了图12的某些方面以避免混淆图13的其它方面。
图13示出处理器1270、1280可分别包括集成存储器和I/O控制逻辑(“CL”)1272和1282。因此,CL 1272和1282包括集成存储器控制器单元且包括I/O控制逻辑。图13示出不仅存储器1232、1234耦合到CL 1272、1282,而且I/O设备1314也耦合到控制逻辑1272、1282。传统I/O设备1315耦合到芯片组1290。
现在参照图14,所示出的是根据本发明实施例的SoC 1400的框图。图14中的类似元件具有相似的附图标记。同样,虚线框是更多高级SoC上的任选特征。在图14中,互连单元1402耦合至:应用处理器1410,包括一组一个或多个核202A-N以及共享高速缓存单元1006;系统代理单元1010;总线控制器单元1016;集成存储器控制器单元1014;一组一个或多个协处理器1420,可以包括集成图形逻辑、图像处理器、音频处理器、视频处理器;静态随机存取存储器(SRAM)单元1430;直接存储器存取(DMA)单元1432;以及显示单元1440,用于耦合至一个或多个外部显示器。在一个实施例中,协处理器1420包括专用处理器,诸如举例而言,网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、嵌入式处理器等。
本文中所公开的机构的实施例可以在硬件、软件、固件、或者这些实现方法的组合中实现。本发明的实施例可被实现为在可编程系统上执行的计算机程序或程序代码,这些可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备、以及至少一个输出设备。
诸如图12所示的代码1230之类的程序代码可应用于输入指令,以执行本文中所描述的功能并生成输出信息。输出信息可以以已知的方式应用于一个或多个输出设备。出于本申请的目的,处理系统包括具有处理器(诸如举例而言,数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)、或微处理器)的任何系统。
程序代码可以以高级过程或面向对象编程语言实现,以与处理系统进行通信。如果期望,程序代码则还可以以汇编或机器语言实现。实际上,本文中所描述的机构在范围上不限于任何特定编程语言。在任何情况下,该语言可以是编译或解释语言。
至少一个实施例的一个或多个方面可通过存储在机器可读介质上的代表性指令来实现,该机器可读介质表示处理器内的各种逻辑,这些指令在由机器读取时使得该机器制备逻辑以执行本文中所描述的技术。称为“IP核”的这些表示可被存储在有形的机器可读介质上且供应给各种客户或制造设施以加载到实际上制作逻辑或处理器的制备机器。
这种机器可读存储介质可包括但不限于,由机器或设备制造或形成的制品的非瞬态有形排列,包括:诸如硬盘,包括软盘、光盘、压缩盘只读存储器(CD-ROM)、压缩盘可重写(CD-RW)存储器、以及磁电-光盘的任何其他类型的盘之类的存储介质;诸如只读存储器(ROM)、随机存取存储器(RAM)(诸如动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM))、可擦除可编程只读存储器(EPROM)、闪存、电可擦除可编程只读存储器(EEPROM)、相变存储器(PCM)之类的半导体器件;磁或光卡;或者适于存储电子指令的任何其他类型的介质。
因此,本发明的实施例还包括包含指令或者包含设计数据(诸如硬件描述语言(HDL))的非瞬态有形机器可读介质,该非瞬态有形机器可读介质定义本文中所描述的结构、电路、装置、处理器、和/或系统特征。这些实施例还可被称为程序产品。
仿真(包括二进制翻译、代码变形等)
在一些情况下,指令转换器可用于将来自源指令集的指令转换成目标指令集。例如,指令转换器可将指令翻译(例如,使用静态二进制翻译、包括动态编译的动态二进制翻译)、变形、仿真、或者以其他方式转换成由核处理的一个或多个其他指令。指令转换器可以在软件、硬件、固件、或者其组合中实现。指令转换器可在处理器上、在处理器以外、或者部分在处理器上且部分在处理器以外。
图15是对比根据本发明实施例的使用软件指令转换器将源指令集中的二进制指令转换为目标指令集中的二进制指令的框图。在所示的实施例中,指令转换器是软件指令转换器,但是替换地指令转换器可以以软件、固件、硬件、或者其各种组合实现。图15示出以高级语言1502的程序可使用x86编译器1504进行编译以生成x86二进制代码1506,该x86二进制代码1506可由具有至少一个x86指令集核的处理器1516在本机上执行。具有至少一个x86指令集核1516的处理器表示可通过兼容地执行或者以其他方式处理(1)因特尔x86指令集核的指令集的实质部分或者(2)以在具有至少一个x86指令集核的因特尔处理器上运行为目标的对象代码版本的应用或其他软件来执行与具有至少一个x86指令集核的因特尔处理器基本相同的功能以实现与具有至少一个x86指令集核的英特尔处理器基本相同的结果的任何处理器。x86编译器1504表示可操作用于生成在具有或者没有附加链接处理的情况下可在具有至少一个x86指令集核1516的处理器上执行的x86二进制代码1506(例如,对象代码)的编译器。类似地,图15示出以高级语言1502的程序可使用替换指令集编译器1508进行编译,以生成可由不具有至少一个x86指令集核的处理器1514(例如,具有执行加利福尼亚州森尼维尔市MIPS技术公司的MIPS指令集和/或执行加利福尼亚州森尼维尔市ARM控股公司的ARM指令集的核的处理器)在本机上执行的替换的指令集二进制代码1510。该指令转换器1512被用于将x86二进制代码1506转换为可由不具有x86指令集核的处理器1514在本机上执行的代码。该经转换的代码不太可能与替换指令集二进制代码1510一样,因为难以制造能完成这样的指令转换器;然而,经转换的代码将完成通用操作,并由替换指令集的指令所构成。由此,指令转换器1512表示通过仿真、模拟、或者任何其他处理允许不具有x86指令集处理器或核的处理器或者其他电子设备执行x86二进制代码1506的软件、固件、硬件、或者其组合。
本发明的实施例包括包含解码平方-乘法(SQRMUL)指令的解码逻辑、执行逻辑的装置,SQRMUL指令包括第一源操作数、第二源操作数和目的地操作数,执行逻辑用于:计算第一源操作数数据值的平方,计算第二源操作数数据值的平方,计算第一和第二操作数数据的乘法,并将结果存储在目的地操作数中,其中计算仅使用一个乘法运算。
在该装置的一些实施例中,以下的一个或多个彼此结合或彼此独立地实现:i)目的地操作数是通用寄存器;ii)第一源操作数数据值的平方存储在目的地操作数的低阶位上,第二源操作数数据值的平方存储在目的地操作数的高阶位上,并且第一和第二操作数数据的乘法存储在目的地操作数的中阶位上;iii)目的地操作数是打包数据寄存器,且三个计算中的每一个存储在打包数据寄存器的不同数据元素中;iv)执行逻辑通过产生临时变量、对临时变量进行平方以及将临时变量右移位4N位来计算第一源操作数数据值的平方,该临时变量是通过将第一源操作数的数据值左移位2N并由第二源操作数的数据值对移位的值进行OR(或)运算来产生的,其中N为log2(数据值的基);v)执行逻辑通过产生临时变量、对临时变量进行平方、将平方的临时变量与((2左移位2N)减1)的值进行AND(与)、以及右移位2N加1来计算第一源操作数和第二源操作数数据值的乘法,该临时变量是通过将第一源操作数的数据值左移位2N并由第二源操作数的数据值对移位的值进行OR(或)运算来产生的,其中N为log2(数据值的基);vi)执行逻辑通过产生临时变量、对临时变量进行平方、将平方的临时变量与((1左移位N)减1)的值的1(数个1)补码进行AND(与)运算来计算第二源操作数数据值的平方,该临时变量是通过将第一源操作数的数据值左移位2N并由第二源操作数的数据值对移位的值进行OR(或)运算来产生的,其中N为log2(数据值的基)。
本发明的实施例包括在计算机处理器中执行平方-乘法(SQRMUL)指令的方法,SQRMUL指令包括第一源操作数、第二源操作数和目的地操作数,该方法包括:计算第一源操作数数据值的平方,计算第二源操作数数据值的平方,计算第一和第二操作数数据的乘法,并将结果存储在目的地操作数中,其中计算仅使用一个乘法运算。
在该方法的一些实施例中,以下的一个或多个彼此结合或彼此独立地实现:i)目的地操作数是通用寄存器;ii)第一源操作数数据值的平方存储在目的地操作数的低阶位上,第二源操作数数据值的平方存储在目的地操作数的高阶位上,并且第一和第二操作数数据的乘法存储在目的地操作数的中阶位上;iii)目的地操作数是打包数据寄存器,且三个计算中的每一个存储在打包数据寄存器的不同数据元素中;iv)通过产生临时变量、对临时变量进行平方以及将临时变量右移位4N位来计算第一源操作数数据值的平方,该临时变量是通过将第一源操作数的数据值左移位2N并由第二源操作数的数据值对移位的值进行OR(或)运算来产生的,其中N为log2(数据值的基);v)通过产生临时变量、对临时变量进行平方、将平方的临时变量与((2左移位2N)减1)的值进行AND(与)运算、以及右移位2N加1来计算第一源操作数和第二源操作数数据值的乘法,该临时变量是通过将第一源操作数的数据值左移位2N并由第二源操作数的数据值对移位的值进行OR(或)运算来产生的,其中N为log2(数据值的基);vi)通过产生临时变量、对临时变量进行平方、将平方的临时变量与((1左移位N)减1)的值的1(数个1)补码进行AND(与)运算来计算第二源操作数数据值的平方,该临时变量是通过将第一源操作数的数据值左移位2N并由第二源操作数的数据值对移位的值进行OR(或)运算来产生的,其中N为log2(数据值的基)。
本发明的实施例包括有形机器可读存储介质,该存储介质包括由处理器执行时使处理器执行方法的代码,该方法执行平方-乘法(SQRMUL)指令,该SQRMUL指令包括第一源操作数、第二源操作数和目的地操作数,该方法包括:计算第一源操作数数据值的平方,计算第二源操作数数据值的平方,计算第一和第二操作数数据的乘法,并将结果存储在目的地操作数中,其中计算仅使用一个乘法运算。
在该有形机器可读介质的一些实施例中,以下的一个或多个彼此结合或彼此独立地实现:i)目的地操作数是通用寄存器;ii)第一源操作数数据值的平方存储在目的地操作数的低阶位上,第二源操作数数据值的平方存储在目的地操作数的高阶位上,并且第一和第二操作数数据的乘法存储在目的地操作数的中阶位上;iii)目的地操作数是打包数据寄存器,且三个计算中的每一个存储在打包数据寄存器的不同数据元素中;iv)通过产生临时变量、对临时变量进行平方以及将临时变量右移位4N位来计算第一源操作数数据值的平方,该临时变量是通过将第一源操作数的数据值左移位2N并由第二源操作数的数据值对移位的值进行OR(或)运算来产生的,其中N为log2(数据值的基);v)通过产生临时变量、对临时变量进行平方、将平方的临时变量与((2左移位2N)减1)的值进行AND(与)运算、以及右移位2N加1来计算第一源操作数和第二源操作数数据值的乘法,该临时变量是通过将第一源操作数的数据值左移位2N并由第二源操作数的数据值对移位的值进行OR(或)运算来产生的,其中N为log2(数据值的基);vi)通过产生临时变量、对临时变量进行平方、将平方的临时变量与((1左移位N)减1)的值的1(数个1)补码进行AND(与)运算来计算第二源操作数数据值的平方,该临时变量是通过将第一源操作数的数据值左移位2N并由第二源操作数的数据值对移位的值进行OR(或)运算来产生的,其中N为log2(数据值的基)。
Claims (10)
1.一种装置,包括:
用于解码平方-乘法(SQRMUL)指令的解码逻辑,所述SQRMUL指令包括第一源操作数、第二源操作数和目的地操作数;
执行逻辑,用于:
计算第一源操作数数据值的平方,
计算第二源操作数数据值的平方,
计算第一和第二操作数数据的乘法,其中所述计算仅使用一个乘法运算;以及
将结果存储在目的地操作数中。
2.如权利要求1所述的装置,其特征在于,目的地操作数是通用寄存器。
3.如权利要求1所述的装置,其特征在于,第一源操作数数据值的平方存储在目的地操作数的低阶位上,第二源操作数数据值的平方存储在目的地操作数的高阶位上,并且第一和第二操作数数据的乘法存储在目的地操作数的中阶位上。
4.如权利要求1所述的装置,其特征在于,目的地操作数是打包数据寄存器,并且三个计算中的每一个被存储在打包数据寄存器的不同数据元素中。
5.如权利要求1所述的装置,其特征在于,执行逻辑用于通过以下来计算第一源操作数数据值的平方,
通过将第一源操作数的数据值左移位2N并由第二源操作数的数据值对移位的值进行OR运算,产生临时变量,
对临时变量进行平方,以及
将临时变量右移位4N位,其中N为log2(数据值的基)。
6.如权利要求1所述的装置,其特征在于,执行逻辑用于通过以下来计算第一源操作数和第二源操作数的数据值的乘法,
通过将第一源操作数的数据值左移位2N并由第二源操作数的数据值对移位的值进行OR运算,产生临时变量,
对临时变量进行平方,
将平方的临时变量与((2左移位2N)减1)的值进行AND运算,
右移位2N位加1,其中N为log2(数据值的基)。
7.如权利要求1所述的装置,其特征在于,执行逻辑用于通过以下来计算第二源操作数数据值的平方,
通过将第一源操作数的数据值左移位2N并由第二源操作数的数据值对移位的值进行OR运算,产生临时变量,
对临时变量进行平方,
将平方的临时变量与((1左移位N)减1)的值的1补码进行AND运算,其中N为log2(数据值的基)。
8.一种在计算机处理器中执行平方-乘法(SQRMUL)指令的方法,SQRMUL指令包括第一源操作数、第二源操作数和目的地操作数,所述方法包括:
计算第一源操作数数据值的平方,
计算第二源操作数数据值的平方,
计算第一和第二操作数数据的乘法,其中所述计算仅使用一个乘法运算;以及
将结果存储在目的地操作数中。
9.如权利要求8所述的方法,其特征在于,目的地操作数是通用寄存器。
10.如权利要求8所述的方法,其特征在于,第一源操作数数据值的平方存储在目的地操作数的低阶位上,第二源操作数数据值的平方存储在目的地操作数的高阶位上,并且第一和第二操作数数据的乘法存储在目的地操作数的中阶位上。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/840,985 | 2013-03-15 | ||
US13/840,985 US9207941B2 (en) | 2013-03-15 | 2013-03-15 | Systems, apparatuses, and methods for reducing the number of short integer multiplications |
CN201410095756.9A CN104049940B (zh) | 2013-03-15 | 2014-03-14 | 用于减少短整数乘法数量的系统、装置和方法 |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410095756.9A Division CN104049940B (zh) | 2013-03-15 | 2014-03-14 | 用于减少短整数乘法数量的系统、装置和方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109144569A true CN109144569A (zh) | 2019-01-04 |
Family
ID=50554842
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810750640.2A Pending CN109144569A (zh) | 2013-03-15 | 2014-03-14 | 用于减少短整数乘法数量的系统、装置和方法 |
CN201410095756.9A Active CN104049940B (zh) | 2013-03-15 | 2014-03-14 | 用于减少短整数乘法数量的系统、装置和方法 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410095756.9A Active CN104049940B (zh) | 2013-03-15 | 2014-03-14 | 用于减少短整数乘法数量的系统、装置和方法 |
Country Status (6)
Country | Link |
---|---|
US (1) | US9207941B2 (zh) |
JP (1) | JP5798650B2 (zh) |
KR (1) | KR101539173B1 (zh) |
CN (2) | CN109144569A (zh) |
DE (1) | DE102014003696A1 (zh) |
GB (1) | GB2514225B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9207941B2 (en) * | 2013-03-15 | 2015-12-08 | Intel Corporation | Systems, apparatuses, and methods for reducing the number of short integer multiplications |
WO2017177369A1 (zh) | 2016-04-12 | 2017-10-19 | 深圳市浩瀚卓越科技有限公司 | 一种稳定器的跟踪拍摄控制方法及系统 |
US20190102199A1 (en) * | 2017-09-30 | 2019-04-04 | Intel Corporation | Methods and systems for executing vectorized pythagorean tuple instructions |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20010018699A1 (en) * | 1999-11-30 | 2001-08-30 | Maher Amer | System and method for computing a square of a number |
US6490607B1 (en) * | 1998-01-28 | 2002-12-03 | Advanced Micro Devices, Inc. | Shared FP and SIMD 3D multiplier |
CN1577257A (zh) * | 2003-06-30 | 2005-02-09 | 英特尔公司 | 具有取整和移位的单指令多数据整数高位乘法 |
CN101042639A (zh) * | 2005-12-30 | 2007-09-26 | 英特尔公司 | 乘法器 |
CN101082860A (zh) * | 2007-07-03 | 2007-12-05 | 浙江大学 | 一种乘累加装置 |
US20120254588A1 (en) * | 2011-04-01 | 2012-10-04 | Jesus Corbal San Adrian | Systems, apparatuses, and methods for blending two source operands into a single destination using a writemask |
CN104049940B (zh) * | 2013-03-15 | 2018-08-10 | 英特尔公司 | 用于减少短整数乘法数量的系统、装置和方法 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4700319A (en) * | 1985-06-06 | 1987-10-13 | The United States Of America As Represented By The Secretary Of The Air Force | Arithmetic pipeline for image processing |
US5207132A (en) | 1991-10-16 | 1993-05-04 | Textron Inc. | Elliptical lobed drive system |
US5446912A (en) | 1993-09-30 | 1995-08-29 | Intel Corporation | Partial width stalls within register alias table |
JP3531402B2 (ja) * | 1997-03-14 | 2004-05-31 | 三菱電機株式会社 | 2乗回路 |
US7539714B2 (en) * | 2003-06-30 | 2009-05-26 | Intel Corporation | Method, apparatus, and instruction for performing a sign operation that multiplies |
US7676535B2 (en) * | 2005-09-28 | 2010-03-09 | Intel Corporation | Enhanced floating-point unit for extended functions |
US9069547B2 (en) * | 2006-09-22 | 2015-06-30 | Intel Corporation | Instruction and logic for processing text strings |
US8504807B2 (en) * | 2009-12-26 | 2013-08-06 | Intel Corporation | Rotate instructions that complete execution without reading carry flag |
FR2972064B1 (fr) * | 2011-02-25 | 2013-03-15 | Inside Secure | Procede de cryptographie comprenant une operation d'exponentiation |
-
2013
- 2013-03-15 US US13/840,985 patent/US9207941B2/en active Active
-
2014
- 2014-03-06 JP JP2014043808A patent/JP5798650B2/ja active Active
- 2014-03-11 GB GB1404236.0A patent/GB2514225B/en active Active
- 2014-03-13 DE DE102014003696.0A patent/DE102014003696A1/de active Pending
- 2014-03-14 CN CN201810750640.2A patent/CN109144569A/zh active Pending
- 2014-03-14 CN CN201410095756.9A patent/CN104049940B/zh active Active
- 2014-03-14 KR KR1020140030310A patent/KR101539173B1/ko active IP Right Grant
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6490607B1 (en) * | 1998-01-28 | 2002-12-03 | Advanced Micro Devices, Inc. | Shared FP and SIMD 3D multiplier |
US20010018699A1 (en) * | 1999-11-30 | 2001-08-30 | Maher Amer | System and method for computing a square of a number |
CN1577257A (zh) * | 2003-06-30 | 2005-02-09 | 英特尔公司 | 具有取整和移位的单指令多数据整数高位乘法 |
CN101042639A (zh) * | 2005-12-30 | 2007-09-26 | 英特尔公司 | 乘法器 |
CN101082860A (zh) * | 2007-07-03 | 2007-12-05 | 浙江大学 | 一种乘累加装置 |
US20120254588A1 (en) * | 2011-04-01 | 2012-10-04 | Jesus Corbal San Adrian | Systems, apparatuses, and methods for blending two source operands into a single destination using a writemask |
CN104049940B (zh) * | 2013-03-15 | 2018-08-10 | 英特尔公司 | 用于减少短整数乘法数量的系统、装置和方法 |
Non-Patent Citations (2)
Title |
---|
伞景辉等: "基于FPGA的乘法器实现结构分析与仿真", 《微处理机》 * |
王得利等: "兼容X86指令的32位乘法器的分析与设计", 《计算机应用研究》 * |
Also Published As
Publication number | Publication date |
---|---|
US20140281395A1 (en) | 2014-09-18 |
GB201404236D0 (en) | 2014-04-23 |
GB2514225A (en) | 2014-11-19 |
JP2014182811A (ja) | 2014-09-29 |
CN104049940A (zh) | 2014-09-17 |
KR101539173B1 (ko) | 2015-07-27 |
JP5798650B2 (ja) | 2015-10-21 |
GB2514225B (en) | 2017-10-04 |
DE102014003696A1 (de) | 2014-09-18 |
KR20140113537A (ko) | 2014-09-24 |
CN104049940B (zh) | 2018-08-10 |
US9207941B2 (en) | 2015-12-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104603766B (zh) | 经加速的通道间的向量归约指令 | |
CN104781803B (zh) | 用于架构不同核的线程迁移支持 | |
CN104866537B (zh) | 用于特征搜索的系统、装置和方法 | |
CN104025020B (zh) | 用于执行掩码位压缩的系统、装置以及方法 | |
CN109614076A (zh) | 浮点到定点转换 | |
CN104603746B (zh) | 由读和写掩码控制的向量移动指令 | |
CN104137058B (zh) | 用于十进制浮点数据逻辑提取的方法和装置 | |
CN107003844A (zh) | 用于矢量广播和xorand逻辑指令的装置和方法 | |
CN104903867B (zh) | 用于将寄存器的内容广播到另一个寄存器的数据元素位置的系统、装置和方法 | |
CN106708753A (zh) | 在使用共享虚拟存储器的处理器中加速操作的装置和方法 | |
CN108292215A (zh) | 用于加载-索引和预取-聚集操作的指令和逻辑 | |
CN107092465A (zh) | 用于提供向量混合和置换功能的指令和逻辑 | |
CN104011671B (zh) | 用于执行置换操作的设备和方法 | |
CN109062608A (zh) | 用于独立数据上递归计算的向量化的读和写掩码更新指令 | |
TWI641993B (zh) | 用以反轉與置換在一遮罩暫存器內的位元之設備及方法(二) | |
CN106502624A (zh) | 用于提供向量横向多数表决功能的处理器、设备和处理系统 | |
CN107077329A (zh) | 用于通过无序硬件软件协同设计处理器中的栈同步指令来实现和维持判定值的栈的方法和设备 | |
CN104350461B (zh) | 具有不同的读和写掩码的多元素指令 | |
CN104077107A (zh) | 利用经掩码的全寄存器访问实现部分寄存器访问的处理器、方法和系统 | |
CN104919432A (zh) | 用于将多个位向左移并将多个1拉入较低有效位的指令 | |
CN104011663A (zh) | 掩码寄存器上的广播操作 | |
CN107003849A (zh) | 用于执行冲突检测的方法和装置 | |
CN107077331A (zh) | 用于执行矢量位反转的方法和装置 | |
CN108363668A (zh) | 线性存储器地址变换和管理 | |
CN107003847A (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 | ||
WD01 | Invention patent application deemed withdrawn after publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20190104 |