CN108475192A - 分散减少指令 - Google Patents
分散减少指令 Download PDFInfo
- Publication number
- CN108475192A CN108475192A CN201580084824.4A CN201580084824A CN108475192A CN 108475192 A CN108475192 A CN 108475192A CN 201580084824 A CN201580084824 A CN 201580084824A CN 108475192 A CN108475192 A CN 108475192A
- Authority
- CN
- China
- Prior art keywords
- variables
- register
- value
- register array
- 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
- 239000006185 dispersion Substances 0.000 title description 2
- 238000003860 storage Methods 0.000 claims description 70
- 238000000034 method Methods 0.000 claims description 67
- 230000004044 response Effects 0.000 claims description 7
- 238000012545 processing Methods 0.000 abstract description 32
- 238000005516 engineering process Methods 0.000 abstract description 10
- 238000010586 diagram Methods 0.000 description 17
- 238000004364 calculation method Methods 0.000 description 13
- 230000000875 corresponding effect Effects 0.000 description 13
- 238000013461 design Methods 0.000 description 11
- 239000000872 buffer Substances 0.000 description 10
- 238000004891 communication Methods 0.000 description 10
- 230000006870 function Effects 0.000 description 10
- 230000002093 peripheral effect Effects 0.000 description 10
- 238000007667 floating Methods 0.000 description 9
- 230000004048 modification Effects 0.000 description 9
- 238000012986 modification Methods 0.000 description 9
- 230000007246 mechanism Effects 0.000 description 7
- 238000004422 calculation algorithm Methods 0.000 description 6
- 230000008569 process Effects 0.000 description 6
- 230000003068 static effect Effects 0.000 description 5
- 238000003491 array Methods 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 4
- 230000014509 gene expression Effects 0.000 description 4
- 238000004519 manufacturing process Methods 0.000 description 4
- 230000000712 assembly Effects 0.000 description 3
- 238000000429 assembly Methods 0.000 description 3
- 230000008859 change Effects 0.000 description 3
- 239000000463 material Substances 0.000 description 3
- 241001269238 Data Species 0.000 description 2
- 230000001133 acceleration Effects 0.000 description 2
- 230000009471 action Effects 0.000 description 2
- 230000001413 cellular effect Effects 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 239000012141 concentrate Substances 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 238000006073 displacement reaction Methods 0.000 description 2
- 238000009826 distribution Methods 0.000 description 2
- 235000013399 edible fruits Nutrition 0.000 description 2
- 230000005611 electricity Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 238000004088 simulation Methods 0.000 description 2
- 238000013519 translation Methods 0.000 description 2
- LHMQDVIHBXWNII-UHFFFAOYSA-N 3-amino-4-methoxy-n-phenylbenzamide Chemical compound C1=C(N)C(OC)=CC=C1C(=O)NC1=CC=CC=C1 LHMQDVIHBXWNII-UHFFFAOYSA-N 0.000 description 1
- 101100285899 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) SSE2 gene Proteins 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 229910002056 binary alloy Inorganic materials 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 239000003795 chemical substances by application Substances 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 230000002596 correlated effect Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 238000012938 design process Methods 0.000 description 1
- 238000004134 energy conservation Methods 0.000 description 1
- 238000002513 implantation Methods 0.000 description 1
- 230000008676 import Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 230000000873 masking effect Effects 0.000 description 1
- 238000002156 mixing Methods 0.000 description 1
- 238000003032 molecular docking Methods 0.000 description 1
- 210000003205 muscle Anatomy 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
- 230000003287 optical effect Effects 0.000 description 1
- 230000032696 parturition Effects 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 238000003825 pressing Methods 0.000 description 1
- 230000008707 rearrangement Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000000547 structure data Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000012546 transfer 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
-
- 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/30018—Bit or string 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/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- 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/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/3888—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple threads [SIMT] in parallel
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
- G06F15/8007—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
-
- 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/483—Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
- G06F7/485—Adding; Subtracting
-
- 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/491—Computations with decimal numbers radix 12 or 20.
- G06F7/498—Computations with decimal numbers radix 12 or 20. using counter-type accumulators
- G06F7/4981—Adding; Subtracting
-
- 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/30025—Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion
-
- 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/30029—Logical and Boolean instructions, e.g. XOR, NOT
-
- 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/30032—Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
-
- 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/30098—Register arrangements
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Advance Control (AREA)
Abstract
描述了单指令多数据(SIMD)技术。处理设备可包括处理器核心和存储器。所述处理器核心可从软件应用接收要对包括第一输入值和寄存器值的第一变量组执行运算并且对包括第二输入值和所述第一寄存器值的第二变量组执行所述运算的请求。所述处理器核心可将对所述第一变量组和所述第二变量组的所述运算向量化。所述处理器核心可并行地对所述第一变量组和所述第二变量组执行所述运算以获得第一运算值和第二运算值。所述处理器核心可对所述第一运算值和所述第二运算值执行水平加法运算并且将结果写入到存储器。
Description
背景技术
可在微处理器系统中实现单指令多数据(SIMD)架构以使得一个指令能够并行地对若干操作数(operand)进行操作。SIMD架构利用在一个寄存器或连续存储器位置内打包多个数据元素的优势。在并行硬件执行情况下,通过一个指令对单独的数据元素执行多个操作以提高微处理器系统的性能。
附图说明
根据在下面给出的详细描述并且根据本发明的各种实施例的附图,将更充分地理解本发明的各种实施例。
图1A图示了根据一个实施例的耦合到处理器以执行单指令多数据(SIMD)运算的存储器设备的图。
图1B图示了根据一个实施例的对值的阵列执行水平加法运算的方法的图。
图1C图示了根据一个实施例的对值的阵列执行水平加法运算的方法的图。
图2图示了根据一个实施例的实现经修改的水平加法运算的单指令多数据(SIMD)指令。
图3A是图示了根据一个实施例的有序(in-order)管线和寄存器重命名级、无序(out-of-order)发布/执行管线的框图。
图3B是图示了根据一个实施例的实现安全存储器重新分割的处理器的微架构的框图。
图4图示了根据一个实施例的包括用于执行安全存储器重新分割的逻辑电路的处理器的微架构的框图。
图5是根据一个实施方式的计算机系统的框图。
图6是根据另一实施方式的计算机系统的框图。
图7是根据一个实施方式的片上系统的框图。
图8图示了根据一个实施方式的计算系统的框图的另一实施方式。
图9图示了根据一个实施方式的计算系统的框图的另一实施方式。
具体实施方式
许多处理器使用向量指令集或单指令多数据(SIMD)指令集来并行地执行多个运算。处理器可并行地执行多个运算,同时对同一条数据或多条数据同时地执行运算。向量化是用于将一次仅对一对操作数进行操作的标量程序转换为可从单个指令运行多个运算的向量程序的操作。例如,向量化是重写循环运算以执行SIMD指令的过程,其中不是处理阵列的单个元素N次,而是它同时地处理阵列的M个元素N/M次。
向量化可包括用于执行收集操作、修改操作和分散操作的指令(诸如稀疏更新指令)。收集操作和分散操作可间接地访问存储器中的寄存器。例如,收集操作使用索引读取并且分散操作使用索引写入。在一个示例中,数据元素可以在非连续存储器位置处。收集操作从存储器位置读取一组数据元素并且将这些数据元素聚合到单个寄存器或高速缓存行中。修改操作修改该组数据元素中的一个或多个数据元素。分散操作将封包数据结构中的数据元素写入到一组非连续或随机存储器位置。
按照惯例,使用SIMD指令集的处理器具有有限的性能提高,因为应用具有不规则的存储器访问模式。例如,存储要求对数据元素进行频繁和随机更新的数据表的应用未被存储在连续存储器位置处并且要求重新排列数据以便充分地利用SIMD指令集。数据的重新排列导致大量的开销并且限制使用SIMD指令集的效率。
附加地,向量化通常假定执行收集操作、修改操作和分散操作的单个指令将访问每个存储器位置不多于一次。在一个示例中,由图像搜索应用中的联合和排序算法(对于i的16个连续值)使用的存储器访问模式可被向量化如下:收集16个Array[a[i]](阵列[a[i]]);做SIMD计算,诸如Array[a[i]] += b[i];并且使新值向后分散。当a[i]的两个值相同时,那么在收集操作和修改操作之后,针对a[i]的第二值的分散操作与a[i]的第一值冲突。a[i]的第一值和第二值之间的冲突导致数据相依性危险。数据相依性危险是其中指令引用仍然尚未完成的前面指令的结果。在一个示例中,SIMD指令可具有其中第一运算是将A和B相加以确定C并且第二运算是使C和D相乘以确定E的数据相依性危险。在此示例中,SIMD指令同时执行第一运算和第二运算并且数据相依性危险是因第二运算依靠第一运算的结果而导致的。数据相依性危险对于SIMD指令集可导致不可预测的结果。在另一示例中,当两个连续值将被写入到同一存储器位置(例如,存储器位置a[i])时,针对第二值的分散操作与针对第一值的分散操作冲突。多个值到同一存储器位置的同时写入可以导致不可预测的答案,例如,通道冲突。
本文中所描述的实施例通过使用水平加法(VHADDCONFLICT)运算以消除SIMD指令集的数据相依性危险来解决上面指出的缺陷。VHADDCONFLICT运算使用用于分散操作的偏移向量来消除对同一存储器位置中的数据寄存器的冲突使用。VHADDCONFLICT运算可使用用于分散操作的偏移向量来减少(合计)同一存储器位置的冲突通道或单元或阵列的值。例如,VHADDCONFLICT运算可以是用于在修改操作期间同时地或并行地计算计算(例如,yi =yi -1 + xi或yi = yi-1 + xi)的顺序模型以计算用于分散操作的单个输出值的SIMD指令。在使用原始偏移向量(合计)的减少之后,可使用掩码处理运算(VPCONFLICTMSK)来生成写入掩码,如在前面段落中更详细地讨论的。掩码用于识别要通过分散操作写入的值,所述值是在通道冲突的情况下的减少值的最后发生或者是用于没有冲突的通道的值。例如,可对诸如Array[a[i]] += b[i]之类的指令执行VHADDCONFLICT运算。按照惯例,针对Array[[a[i]] += b[i]的水平加法具有写入相依性数据危险。采用VHADDCONFLICT运算的SIMD指令可避免导致写入相依性数据危险的冲突通道。
图1A图示了根据一个实施例的耦合到处理器102以执行单指令多数据(SIMD)运算的存储器设备100的图。处理器102可包括存储器接口106、寄存器堆103和高速缓存105。存储器接口106可耦合到寄存器103并耦合到高速缓存105。
存储器接口106可在寄存器堆103或高速缓存105(用于暂时存储)与存储器设备100(用于长期存储)之间移动数据。在一个示例中,处理器可使用寄存器堆103来存储在由处理器102执行的指令或过程期间使用的数据。处理器可使用存储器接口106来将数据(诸如指令或过程的结果)写入到存储器设备100以供将来访问。在另一示例中,寄存器堆103可包括SIMD寄存器104。SIMD寄存器104可存储在SIMD运算期间使用的数据。例如,在收集-修改-分散操作期间,处理器102可使用存储器接口106来从存储器设备100收集数据并且将数据存储在SIMD寄存器104中以在SIMD运算(收集操作)期间被使用,如在前面段落中更详细地讨论的。处理器102可在SIMD运算(修改操作)(诸如加法或乘法运算)期间使用存储在SIMD寄存器104处的数据。当SIMD运算完成时,处理器102可使用存储器接口106来将SIMD运算的结果写回到存储器设备100(分散操作)。在另一示例中,存储器接口106可将SIMD运算的结果存储在高速缓存105中以用于处理器102的其他运算。
图1B图示了根据一个实施例的对值的阵列执行水平加法运算的方法108的图。方法100可以至少部分地由处理器100(图1A)或者可以包括硬件(例如,电路、专用逻辑、可编程逻辑、微码等)、软件(例如,由处理设备执行的指令)、固件或其组合的处理逻辑来执行。
参考图1B,方法108以从软件应用接收要对多个输入值和寄存器值执行一个或多个运算的请求(110)开始。在一个实施例中,寄存器值被存储在存储器中的各个位置处。指令可包括以下各项中的一个或多个:来自软件应用的输入值的输入阵列;多个寄存器值的存储器中的位置的列表;以及运算的列表。在另一实施例中,每个运算可为该运算指定输入阵列的输入值和寄存器值的位置。例如,运算可以是输入值和寄存器值的加法运算。在此示例中,运算可为加法运算指定阵列中的输入值和存储器中的寄存器值的位置。在一个示例中,不同的运算可使用寄存器值和输入值的唯一对。在另一示例中,不同的运算可使用具有不同的输入值的相同的寄存器值。
方法可包括生成存储器单元的阵列,其中每个单元存储比特串(112)。每个比特串包括寄存器值和与该寄存器值相关联的存储器位置。方法可包括将运算的列表向量化(114)。将运算的列表向量化可使得处理器能够并行地执行运算的列表。方法可包括并行地执行运算的列表(116)。例如,处理器可将输入阵列中的第一输入值与存储器阵列中的第一寄存器值相加,将输入阵列中的第二输入值与存储器阵列中的第二寄存器值相加,将输入阵列中的第三输入值与存储器阵列中的第三寄存器值相加,并且依此类推。方法可包括生成运算的列表中的每个运算的结果(118)。结果可包括来自运算的结果值和用于运算的寄存器值的存储器中的位置。方法可包括将运算的结果存储在结果阵列的单元中(120)。例如,第一结果可被存储在结果阵列的第一单元中,第二结果可被存储在结果阵列的第二单元中,并且依此类推。
方法可包括确定结果阵列中的具有冲突存储器位置的单元(122)。冲突存储器位置是其中结果阵列中的多个单元各自引用与寄存器值相关联的同一存储器位置的存储器中的位置。方法可包括对具有同一冲突存储器位置的一组单元执行水平加法运算(124)。当存在具有冲突存储器位置的多组单元时,处理器可对于每组执行水平加法运算。方法可包括将每个水平加法运算的结果存储在该组单元的结果阵列的最后单元中(126)。例如,结果阵列可包括具有冲突存储器位置的2组单元,其中第一组单元包括3个单元并且第二单元包括2个单元。处理器可对于具有冲突存储器位置的第一组3个单元执行水平加法运算。处理器可将水平加法运算的结果存储在该组单元的第三单元(例如,最后单元)中。处理器也可对于具有冲突存储器位置的第二组2个单元执行水平加法运算。处理器可将水平加法运算的结果存储在该组单元的第二单元(例如,最后单元)中。
方法可包括为结果单元中的一个或多个单元生成掩码(128)。掩码可包括写入掩码和不写入掩码。写入掩码可指示将值写入到存储器而不写入掩码可指示不将值写入到存储器。在一个实施例中,处理器可将写入掩码指派给具有冲突存储器位置的结果阵列集的最后单元中的每一个。在另一实施例中,处理器可将写入掩码指派给不具有冲突存储器位置的结果阵列中的单元中的每一个。在另一实施例中,处理器可向不是该集合中的最后单元的具有冲突存储器位置的结果阵列集中的单元指派不写入掩码。例如,对于具有冲突存储器位置的3个单元的集合,该集合的第一和第二单元可被指派不写入掩码并且第三单元可被指派写入掩码。该方法可包括将具有写入掩码的结果阵列中的单元的值写入到存储器位置(130)。
图1C图示了根据一个实施例的对值的阵列执行水平加法运算的方法140的图。方法100可至少部分地由处理器100(图1A)或者可以包括硬件(例如,电路、专用逻辑、可编程逻辑、微码等)、软件(例如,由处理设备执行的指令)、固件或其组合的处理逻辑来执行。
参考图1C,方法140以从软件应用接收要执行运算的请求(142)开始。在一个示例中,请求可包括对第一变量组执行运算,其中第一变量组包括第一输入值和第一寄存器值并且第一寄存器值被存储在第一存储器位置处。在另一示例中,请求可包括对第二变量组执行运算,其中第二变量组包括第二输入值和第一寄存器值并且第一寄存器值被存储在第二存储器位置处。在另一示例中,请求可包括对第三变量组执行运算,其中第三变量组包括第三输入值和第二寄存器值并且第二寄存器值被存储在第三存储器位置处。方法可包括对第一变量组执行运算以获得第一运算值(144)。方法可包括对第二变量组执行运算以获得第二运算值(146)。方法可包括对第三变量组执行运算以获得第三运算值(148)。
在一个实施例中,方法可包括:生成要存储在存储器高速缓存中的存储器单元的存储器阵列并且将第一寄存器值和第一存储器位置存储在存储器阵列中的第一存储器单元中;将第一寄存器值和第一存储器位置存储在存储器阵列中的第二存储器单元中;以及将第二寄存器值和第二存储器位置存储在存储器阵列中的第三存储器单元中。方法也可包括:使用第一存储器单元中的第一寄存器值来对第一变量组执行运算,使用第二存储器单元中的第一寄存器值来对第二变量组执行运算,并且使用第三存储器单元中的第二寄存器值来对第三变量组执行运算。在另一实施例中,可并行地执行对第一、第二和第三变量组执行运算。可并行地执行对第一、第二和第三变量组执行运算,方法可包括,由处理逻辑将对第一变量组的运算、对第二变量组的运算和对第三变量组的运算向量化以并行地对第一、第二和第三变量组执行运算。
方法可包括使第一运算值与第一存储器位置相关联(150)。方法可包括使第二运算值与第二存储器位置相关联(152)。方法可包括使第三运算值与第三存储器位置相关联(154)。方法可包括确定第一存储器位置和第二存储器位置是针对存储器中的同一位置(156)。方法可包括对第一运算值和第二运算值执行水平加法运算以获得结果值(158)。在一个示例中,方法可包括生成要存储在存储器高速缓存中的运算单元的运算阵列并且:将第一运算值和第一存储器位置存储在运算阵列的第一运算单元中;将第二运算值和第二存储器位置存储在运算阵列的第二运算单元中;将第三运算值和第三存储器位置存储在运算阵列的第三运算单元中。在此示例中,方法也可包括:确定用于第一运算单元的第一存储器位置和用于第二运算单元的第二存储器位置是同一存储器位置;以及响应于用于第一运算单元的第一存储器位置和用于第二运算单元的第二存储器位置是同一存储器位置而对第一运算值和第二运算值执行水平加法运算。
方法可包括将结果值写入到第一存储器位置(160)。方法可包括将第三运算值写入到第三存储器位置(162)。在一个示例中,方法可包括将水平加法运算的结果存储在运算阵列的第二运算单元中并且生成用于第二运算单元的第一写入掩码和用于第三运算单元的第二写入掩码。在此示例中,可将具有写入掩码的运算单元中的值写入到与运算单元相关联的存储器位置。
图2图示了根据一个实施例的实现经修改的水平加法运算的SIMD指令。SIMD指令是在图1A或图1B中描述的方法的实施方式的示例。在一个示例中,SIMD指令可在具有8个存储器位置的存储器寄存器上操作。SIMD指令可包括用于生成位图的位图生成操作,其中位图包括指示哪些单元具有冲突存储器位置的位向量。
行210是存储指示存储器中的位置(例如,存储器位置)的值的单元211-218的阵列。单元211中的值表示存储器中的位置0,单元212中的值表示存储器中的位置1,单元213中的值表示存储器中的位置1,单元214中的值表示存储器中的位置0,单元215中的值表示存储器中的位置3,单元216中的值表示存储器中的位置3,单元216中的值表示存储器中的位置3,单元217中的值表示存储器中的位置4,并且单元218中的值表示存储器中的位置3。具有相同的存储器位置名称的单元彼此冲突。例如,单元211与单元214冲突。单元212与单元213冲突。单元215、单元216和单元218彼此冲突。单元217与行210中的任何其他单元不冲突。
行220是存储来自用于对对应的存储器位置211-218处的值进行操作的软件应用的输入值的单元221-228的阵列。行230是存储单元211-218与对应单元221-228之间的运算的结果的单元231-238的阵列。例如,运算可以是存储在与单元211-218和单元221-228相关联的存储器位置处的值的加法。在此示例中,单元231存储作为与单元211相关联的值和存储在单元211处的值的加法的值10。单元232存储作为与单元212相关联的值和存储在222处的值的加法的值11。单元233存储作为与单元213相关联的值和存储在223处的值的加法的值14。单元234存储作为与单元214相关联的值和存储在224处的值的加法的值9。单元235存储作为与单元215相关联的值和存储在225处的值的加法的值31。单元236存储作为与单元216相关联的值和存储在226处的值的加法的值34。单元237存储作为与单元217相关联的值和存储在单元217处的值的加法的值7。单元238存储作为与单元218相关联的值和存储在228处的值的加法的值12。在一个实施例中,当对于与单元211-218相对应的各种存储器位置来说不存在冲突通道时,存储在单元231-238中的每个值可被写回到与单元211-218相对应的存储器位置。
在另一实施例中,当对于与单元211-218相对应的各种存储器位置来说存在冲突通道时,可执行VHADDCONFLICT运算以解析应该被写回到用于冲突通道中的每一个的存储器位置的值。VHADDCONFLICT运算可将一个或多个值视为源值并且将每个冲突存储器位置的加法的结果写入到目的地单元中。例如,VHADDCONFLICT指令消除要分散回到存储器中的同一位置的多个值之间的冲突。例如,单元232和233中的值二者皆与如由单元212和213分别指示的存储器位置1相关联。为了解决冲突通道,可执行VHADDCONFLICT运算以加上存储器位置1的每个值并且将结果值存储在对应于冲突通道的行240的最后单元处。例如,在11(对于单元232)和14(对于单元233)中的值各自对应于存储器位置1的情况下,值11和14可被加在一起以产生被存储在单元243(存储器位置1的最后单元)处的值25。
在另一示例中,单元231和234中的值二者皆与如由单元211和214分别指示的存储器位置0相关联。为了解决冲突通道,可执行VHADDCONFLICT运算以将存储器位置0的每个值加在一起并且将结果得到的值存储在对应于冲突通道的行240的最后单元处。例如,在10(对于单元231)和9(对于单元234)中的值各自对应于存储器位置0的情况下,值10和9可被加在一起以产生被存储在单元244(存储器位置1的最后单元)处的值19。
在另一示例中,单元235、236和238中的值全部与如由单元215、216和218分别指示的存储器位置3相关联。为了解决冲突通道,可执行VHADDCONFLICT运算以将存储器位置3的每个值加在一起并且将结果得到的值存储在对应于冲突通道的行240的最后单元处。例如,在31(对于单元235)、34(对于单元236)和12(对于单元238)中的值各自对应于存储器位置3的情况下,值31、34和12可被加在一起以产生被存储在单元248(存储器位置3的最后单元)处的值77。在另一示例中,单元237中的值是与存储单元4相关联的唯一值,所以单元237处的值可被写入到单元247。
以下伪代码图示了示例VHADDCONFLICT指令。
当VHADDCONFLICT运算已被执行时,可执行VPCONFLICT运算来计算比特值的串,其指示与在当前单元之前的单元相关联的一个或多个存储器位置何时与和当前单元相关联的存储器位置冲突。在当前单元的存储器位置与在先单元的存储器位置相同时存储器位置冲突。处理器可通过将与当前单元相关联的存储器位置与和在先单元相关联的存储器位置相比较来确定当前单元的存储器位置是否与在先单元的存储器位置冲突。
当与当前单元相关联的存储器位置的对应比较示出与和前一个单元相关联的存储器位置冲突时,串中的每个比特被置位。例如,行250的单元251-258中的值是比特值的串。在一个实施例中,串中的每个比特值指示与在当前单元之前的单元相关联的一个或多个存储器位置何时与和当前单元相关联的存储器位置冲突。在一个实施例中,等于1的比特值指示存储与和当前单元相关联的存储器位置冲突的存储器位置的单元。在另一实施例中,0指示存储与和当前单元相关联的存储器位置不冲突的存储器位置的单元。在另一实施例中,单元的比特值的串中的每个比特值的位置指示冲突单元在阵列210中的位置。
例如,单元251与单元211相关并且指示在单元211之前的任何单元是否与单元211冲突。在单元211是阵列210中的第一单元的情况下,没有单元在单元211之前,所以不存在在单元211之前的冲突单元。在一个实施例中,单元251中的比特串值是0。在另一实施例中,单元251中的比特串值是空白的。
单元252与单元212相关并且指示在单元212之前的任何单元是否与单元212冲突。单元211指定存储器中的位置0并且单元212指定存储器中的位置1。在先单元211与当前单元212(例如,比特值为0)不冲突。因此,单元252中的比特串值是0。
单元253与单元213相关并且指示在单元213之前的任何单元是否与单元213冲突。单元211指定存储器中的位置0,单元212指定存储器中的位置1,并且单元213指定存储器中的位置1。在先单元212与当前单元213(例如,比特值为1)冲突并且在先单元211与当前单元213(例如,比特值为0)不冲突。因此,单元253中的比特串值是10。
单元254与单元214相关并且指示在单元214之前的任何单元是否与单元214冲突。单元211指定存储器中的位置0,单元212指定存储器中的位置1,单元213指定存储器中的位置1,并且单元214指定存储器中的位置0。在先单元213与当前单元214(例如,比特值为0)不冲突,单元212与当前单元214(例如,比特值为0)不冲突,并且单元211与当前单元214(例如,比特值为1)冲突。因此,单元254中的比特串值是001。
单元255与单元215相关并且指示在单元215之前的任何单元是否与单元215冲突。单元211指定存储器中的位置0,单元212指定存储器中的位置1,单元213指定存储器中的位置1,单元214指定存储器中的位置0,并且单元215指定存储器中的位置3。在先单元214与当前单元215(例如,比特值为0)不冲突,单元213与当前单元215(例如,比特值为0)不冲突,单元212与当前单元215(例如,比特值为0)不冲突,并且单元211与当前单元215(例如,比特值为0)不冲突。因此,单元255中的比特串值是0000。
单元256与单元216相关并且指示在单元216之前的任何单元是否与单元216冲突。单元211指定存储器中的位置0,单元212指定存储器中的位置1,单元213指定存储器中的位置1,单元214指定存储器中的位置0,单元215指定存储器中的位置3,并且单元216指定存储器中的位置3。在先单元215与当前单元216(例如,比特值为1)冲突,单元214与当前单元216(例如,比特值为0)不冲突,单元213与当前单元216(例如,比特值为0)不冲突,单元212与当前单元216(例如,比特值为0)不冲突,并且单元211与当前单元216不冲突。因此,单元256中的比特串值是10000。
单元257与单元217相关并且指示在单元217之前的任何单元是否与单元217冲突。单元211指定存储器中的位置0,单元212指定存储器中的位置1,单元213指定存储器中的位置1,单元214指定存储器中的位置0,单元215指定存储器中的位置3,单元216指定存储器中的位置3,并且单元217指定存储器中的位置4。在先单元216与当前单元217(例如,比特值为0)不冲突,单元215与当前单元217(例如,比特值为0)不冲突,单元214与当前单元217(例如,比特值为0)不冲突,单元213与当前单元217(例如,比特值为0)不冲突,单元212与当前单元217不冲突,并且单元211与当前单元217不冲突。因此,单元257中的比特串值是00000。
单元258与单元218相关并且指示在单元218之前的任何单元是否与单元218冲突。单元211指定存储器中的位置0,单元212指定存储器中的位置1,单元213指定存储器中的位置1,单元214指定存储器中的位置0,单元215指定存储器中的位置3,单元216指定存储器中的位置3,单元217指定存储器中的位置4,并且单元218指定存储器中的位置3。在先单元217与当前单元218(例如,比特值为0)不冲突,单元216与当前单元218(例如,比特值为1)冲突,单元215与当前单元218(例如,比特值为1)冲突,单元214与当前单元218(例如,比特值为0)不冲突,单元213与当前单元218(例如,比特值为0)不冲突,单元212与当前单元218(例如,比特值为0)不冲突,并且单元211与当前单元218(例如,比特值为0)不冲突。因此,单元258中的比特串值是0110000。
当已经为每个单元251-258生成了比特串时,可执行VPCONFLICT运算以生成掩码来指示存储要在分散操作中写入到存储器的值的单元。在一个实施例中,比特值1指定存储在对应单元241-248中的值将被写入存储器并且比特值0指定存储在对应单元241-248中的值将不被写入存储器。
在一个示例中,行250的单元251-258中的值存储比特值的串。在一个实施例中,单元中的每个比特值指示行240的哪些单元241-248包含与行210的单元211-218相关联的存储器位置的最后值。仅没有冲突的单元和冲突存储器位置的最后单元具有根据它们设置的掩码比特。在一个实施例中,0比特指定单元不存储存储器位置的最后值并且1比特指定单元存储存储器位置的最后值。例如,单元261包括指定单元241不存储存储器位置0的最后顺序值的比特值0。单元262包括指定单元242不存储用于存储器位置1的最后顺序值的比特值0。单元263包括指定单元243存储存储器位置1的最后顺序值(例如,用于存储器位置1的单元211-218的存储器位置的最后值)的比特值1。单元264包括指定单元264存储存储器位置0的最后顺序值(例如,用于存储器位置0的单元211-218的存储器位置的最后值)的比特值1。单元265包括指定单元245不存储存储器位置3的最后值的比特值0。单元266包括指定单元246不存储存储器位置3的最后值的比特值0。单元267包括指定单元247存储存储器位置4的最后顺序值(例如,用于存储器位置4的单元211-218的存储器位置的最后值)的比特值1。单元268包括指定单元248存储存储器位置3的最后顺序值(例如,用于存储器位置3的单元211-218的存储器位置的最后值)的比特值1。
处理设备可执行分散操作来向存储器写入与存储具有值为1的掩码比特的单元261-268相关联的单元241-248中的值。例如,单元261具有值为0的掩码比特,所以存储在单元241处的值10未被写入到存储器位置0。单元262具有值为0的掩码比特,所以存储在单元242处的值11未被写入到存储器位置1。单元263具有值为1的掩码比特,所以存储在单元243处的值25被写入到存储器位置1。单元264具有值为1的掩码比特,所以存储在单元244处的值19被写入到存储器位置0。单元265具有值为0的掩蔽比特,所以存储在单元245处的值31未被写入到存储器位置3。单元266具有值为0的掩码比特,所以存储在单元246处的值34未被写入到存储器位置3。单元267具有值为1的掩码比特,所以存储在单元246处的值7被写入到存储器位置4。单元268具有值为1的掩码比特,所以存储在单元247处的值77被写入到存储器位置3。
图3A是图示了根据本公开的一些实施例的由处理器300实现的有序管线和寄存器重命名级、无序发布/执行管线的框图。图3A中的实线框图示了有序管线,而虚线框图示了寄存器重命名、无序发布/执行管线。具体地,处理器300描绘了根据本公开的至少一个实施例的要包括在处理器中的有序架构核心和寄存器重命名逻辑、无序发布/执行逻辑。
在图3A中,管线包括预取级302、长度解码级304、解码级306、分配级308、重命名级310、调度(也称为分派或发布)级312、寄存器读取/存储器读取级314、执行级316、回写/存储器写入级318、异常处理级322和提交级324。在一些实施例中,级302-324的排序可以不同于图示的并且不限于图3A中所示的具体排序。
图3B是图示了根据一个实施例的实现SNC之间的动态高速缓存哈希变化的处理器300的微架构的框图。处理器300包括耦合到执行引擎单元350的前端单元330,并且两者都耦合到存储器单元370。处理器300可以包括精简指令集计算(RISC)核心、复杂指令集计算(CISC)核心、甚长指令字(VLIW)核心或者混合或替代核心类型。作为又一个选项,处理器300可以包括专用核心,诸如例如网络或通信核心、压缩引擎、图形核心等。在一个实施例中,处理器300可以是多核心处理器或者可以是多处理器系统的一部分。可以在处理器300中实现页面添加和内容复制的实施例。
前端单元330包括耦合到指令高速缓存单元334的分支预测单元332,所述指令高速缓存单元334耦合到指令转换后备缓冲器(TLB) 336,所述指令转换后备缓冲器(TLB)336耦合到指令预取单元338,所述指令预取单元338耦合到解码单元340。解码单元340(也称为解码器)可以对指令进行解码,并且生成从原始指令解码的或者以其他方式反映原始指令或者从原始指令得到的一个或多个微运算、微码入口点、微指令、其他指令或其他控制信号作为输出。解码器340可以使用各种不同的机制来实现。适合的机制的示例包括但不限于查找表、硬件实施方式、可编程逻辑阵列(PLA)、微码只读存储器(ROM)等。指令高速缓存单元334进一步耦合到存储器单元370。解码单元340耦合到执行引擎单元350中的重命名/分配器单元352。
执行引擎单元350包括耦合到引退单元354和一组一个或多个调度器单元356的重命名/分配器单元352。(一个或多个)调度器单元356表示任何数量的不同的调度器,包括保留站(RS)、中央指令窗口等。(一个或多个)调度器单元356耦合到(一个或多个)物理寄存器堆单元358。(一个或多个)物理寄存器堆单元358中的每一个表示一个或多个物理寄存器堆,其中不同的物理寄存器堆存储一个或多个不同的数据类型(诸如标量整数、标量浮点、封包整数、封包浮点、向量整数、向量浮点等)、状态(例如,作为要执行的下一个指令的地址的指令指针)等。(一个或多个)物理寄存器堆单元358与引退单元354重叠以图示可以(例如,使用(一个或多个)重排序缓冲器和(一个或多个)引退寄存器堆;使用(一个或多个)将来文件、(一个或多个)历史缓冲器和(一个或多个)引退寄存器堆;使用寄存器图和寄存器池;等)实现寄存器重命名和无序执行的各种方式。
一般地,架构寄存器从处理器的外部或者从程序设计员的视角是可见的。寄存器不限于任何已知特定类型的电路。各种不同类型的寄存器是适合的,只要它们能够如本文中所描述的那样存储和提供数据即可。适合的寄存器的示例包括但不限于专用物理寄存器,使用寄存器重命名的动态地分配的物理寄存器、专用物理寄存器和动态地分配的物理寄存器的组合等。引退单元354和(一个或多个)物理寄存器堆单元358耦合到(一个或多个)执行集群360。(一个或多个)执行集群360包括一组一个或多个执行单元362和一组一个或多个存储器存取单元364。执行单元362可以执行各种运算(例如,移位、加法、减法、乘法)并且对各种类型的数据(例如,标量浮点、封包整数、封包浮点、向量整数、向量浮点)操作。
虽然一些实施例可以包括专用于特定功能或功能集的许多执行单元,但是其他实施例可以包括仅一个执行单元或全部都执行所有功能的多个执行单元。(一个或多个)调度器单元356、(一个或多个)物理寄存器堆单元358和(一个或多个)执行集群360被示出为可能为多个,因为某些实施例为某些类型的数据/运算创建单独的管线(例如,标量整数管线、标量浮点/封包整数/封包浮点/向量整数/向量浮点管线和/或各自具有它们自己的调度器单元、(一个或多个)物理寄存器堆单元和/或执行集群的存储器存取管线—并且在单独的存储器存取管线的情况下,实现其中仅此管线的执行集群具有(一个或多个)存储器存取单元364的某些实施例)。也应该理解的是,在使用单独的管线的情况下,这些管线中的一个或多个可以是无序发布/执行并且其余部分是有序发布/执行。
存储器存取单元364集耦合到存储器单元370,所述存储器单元370可以包括数据预取器380、数据TLB单元372、数据高速缓存单元(DCU) 374和第2级(L2)高速缓存单元376,仅举几个例子。在一些实施例中,DCU 374也被称为第一级数据高速缓存(LI缓存)。DCU 374可以处理多个未解决的高速缓存未命中并且继续为传入存储和加载服务。它也支持维持高速缓存一致性。数据TLB单元372是用于通过映射虚拟和物理地址空间来改进虚拟地址转换速度的高速缓存。在一个示例性实施例中,存储器存取单元364可以包括加载单元、存储地址单元和存储数据单元,其中的每一个耦合到存储器单元370中的数据TLB单元372。L2高速缓存单元376可以耦合到高速缓存的一个或多个其他级并且最终耦合到主存储器。
在一个实施例中,数据预取器380通过自动地预测程序将要消耗哪一个数据来推测性地向DCU 374加载/预取数据。预取可以指代在处理器实际地要求数据之前将存储在存储器层次(例如,较低级高速缓存或存储器)的一个存储器定位(例如,位置)中的数据转移到更靠近处理器(例如,产生较低存取延迟)的更高级存储器定位。更具体地,预取可以指代在处理器发布对被返回的具体数据的要求之前对从较低级高速缓存/存储器中的一个到数据高速缓存和/或预取缓冲器的数据的早期检索。
处理器300可以支持一个或多个指令集(例如,x86指令集(具有已被添加有较新版本的一些扩展);加利福利尼州桑尼维尔的MIPS Technologies的MIPS指令集;加利福尼亚州桑尼维尔的ARM Holdings的ARM指令集(具有诸如NEON之类的可选附加扩展))。
应该理解的是,核心可以支持多线程(执行两个或更多个并行的运算或线程集),并且可以以各种方式这样做,所述各种方式包括时间分片多线程、同时多线程(其中单个物理核心为该物理核心同时地多线程处理的线程中的每一个提供逻辑核心)或其组合(例如,诸如Intel®超线程技术中的时间分片预取和解码及其后的同时多线程)。
虽然在无序执行的上下文中对寄存器重命名进行描述,但是应该理解的是,可以在有序架构中使用寄存器重命名。虽然所图示的处理器的实施例也包括单独的指令和数据高速缓存单元以及共享L2高速缓存单元,但是替代实施例可以具有用于指令和数据两者的单个内部高速缓存,诸如例如第1级(L1)内部高速缓存或多级内部高速缓存。在一些实施例中,系统可以包括内部高速缓存和在核心和/或处理器外部的外部高速缓存的组合。替换地,所有的高速缓存可以在核心和/或处理器外部。
图4图示了根据一个实施例的包括用于执行SNC之间的动态高速缓存哈希变化的逻辑电路的处理器400的微架构的框图。在一些实施例中,依照一个实施例的指令可被实现来对具有字节、字、双字、四字等的大小的数据元素以及数据类型(诸如单精度和双精度整数及浮点数据类型)操作。在一个实施例中,有序前端401是处理器400的预取要执行的指令并且使它们有准备以被稍后用在处理器管线中的部分。可在处理器400中实现页面添加和内容复制的实施例。
前端401可以包括若干单元。在一个实施例中,指令预取器416从存储器预取指令并且将它们馈送给指令解码器418,所述指令解码器418进而对它们进行解码或解释。例如,在一个实施例中,解码器将接收到的指令解码成机器可执行的称作“微指令”或“微运算”(也称作微op或uops)的一个或多个运算。在其他实施例中,解码器将指令解析成操作码(opcode)以及由微架构使用来执行依照一个实施例的运算的对应数据和控制字段。在一个实施例中,追踪高速缓存430进行解码的uops并且将它们组装成uop队列434中的程序有序序列或追踪以供执行。当追踪高速缓存430遇到复杂指令时,微码ROM 432提供完成运算所需的uops。
一些指令被转换成单个微op,然而其他指令需要若干微op来完成完整运算。在一个实施例中,如果需要多于四个微op来完成指令,则解码器418访问微码ROM 432以做该指令。对于一个实施例,指令可被解码成少量的微op以便在指令解码器418处处理。在另一实施例中,如果需要许多微op来完成运算,则指令可被存储在微码ROM 432内。追踪高速缓存430参考入口点可编程逻辑阵列(PLA)来确定用于从微码ROM 432读取要完成依照一个实施例的一个或多个指令的微码序列的正确的微指令指针。在微码ROM 432针对指令完成对微op定序之后,机器的前端401重新开始从追踪高速缓存430预取微op。
无序执行引擎403是为执行准备指令的地方。无序执行逻辑具有许多缓冲器以使指令流平滑和重新排序以随着它们通过管线往下并得以调度以供执行而优化性能。分配器逻辑给机器分配每个uop为了执行所需要的缓冲器和资源。寄存器重命名逻辑将逻辑寄存器重命名到寄存器堆中的条目上。分配器也在指令调度器:存储器调度器、快速调度器402、慢速/一般浮点调度器404和简单浮点调度器406前面为两个uop队列中的一个中的每个uop分配一个条目,为存储器运算分配一个条目并且为非存储器运算分配一个条目。uop调度器402、404、406基于其相关输入寄存器操作数(operand)源的就绪度和这些uop完成其运算所需要的执行资源的可用性来确定uop何时准备好执行。一个实施例的快速调度器402可在主时钟周期的每一半上调度,而其他调度器每主处理器时钟周期仅可调度一次。调度器对分派端口进行仲裁以对这些uop进行调度以供执行。
寄存器堆408、410位于调度器402、404、406与执行块411中的执行单元412、414、416、418、420、422、424之间。存在分别用于整数和浮点运算的单独的寄存器堆408、410。一个实施例的每个寄存器堆408、410也包括旁路网络,所述旁路网络可绕过或者将仍然尚未被写入到寄存器堆中的刚完成的结果运送到新的相关uops。整数寄存器堆408和浮点寄存器堆410也能够与另一个一起传送数据。对于一个实施例,整数寄存器堆408被分割成两个单独的寄存器堆,一个寄存器堆用于数据的低位32个比特并且第二寄存器堆用于数据的高位32个比特。一个实施例的浮点寄存器堆410具有128比特宽条目,因为浮点指令通常具有宽度从64到128个比特的操作数。
执行块411包含指令被实际地执行所在的执行单元412、414、416、418、420、422、424。这个部分包括寄存器堆408、410,其存储微指令需要执行的整数和浮点数据操作数值。一个实施例的处理器400由如下许多执行单元组成:地址生成单元(AGU) 412、AGU 414、快速ALU 416、快速ALU 418、慢速ALU 420、浮点ALU 422、浮点移动单元424。对于一个实施例,浮点执行块412、414执行浮点、MMX、SIMD和SSE或其他运算。一个实施例的浮点ALU 412包括64比特乘64比特浮点除法器以执行除法、平方根和余数微op。对于本公开的实施例,可以利用浮点硬件处理牵涉浮点值的指令。
在一个实施例中,ALU运算转到高速ALU执行单元416、418。一个实施例的快速ALU416、418可以以半个时钟周期的有效延迟执行快速运算。对于一个实施例,大多数复杂整数运算转到慢速ALU 410,因为慢速ALU 410包括用于长延迟类型的运算(诸如乘法、移位、标志逻辑和分支处理)的整数执行硬件。存储器加载/存储运算由AGU 412、414执行。对于一个实施例,在对64比特数据操作数执行整数运算的上下文中对整数ALU 416、418、420进行描述。在替代实施例中,ALU 416、418、420可被实现来支持包括16、32、128、256等的各种数据比特。类似地,浮点单元412、414可被实现来支持具有各种宽度的比特的一系列操作数。对于一个实施例,浮点单元412、414可与SIMD和多媒体指令相结合地对128比特宽封包数据操作数操作。
在一个实施例中,uops调度器402、404、406在父加载已完成执行之前分派相关运算。随着uops在处理器400中被推测地调度和执行,处理器400也包括用于处理存储器未命中的逻辑。如果数据加载在数据高速缓存中未命中,则在管线中可能存在飞行中的已给调度器留下暂时不正确数据的相关运算。重放机制追踪并重新执行使用不正确数据的指令。仅相关运算需要被重放并且允许独立运算完成。处理器的一个实施例的调度器和重放机制也被设计来捕获用于文本串比较运算的指令序列。
根据一个实施例,处理器400也包括用于实现SNC之间的动态高速缓存哈希变化的逻辑。在一个实施例中,处理器400的执行块411可以包括微控制器(MCU),以根据本文描述执行SNC之间的动态高速缓存哈希变化。
术语“寄存器”可以指代被用作指令的一部分来标识操作数的板上处理器存储定位。换句话说,寄存器可以是(从程序设计员的角度看)从处理器的外部可用的寄存器。然而,实施例的寄存器在含义上不应限于特定类型的电路。相反,实施例的寄存器能够存储和提供数据,并且执行本文中所描述的功能。本文中所描述的寄存器可通过使用任何数量的不同技术的处理器内的电路来实现,诸如专用物理寄存器、使用寄存器重命名的动态地分配的物理寄存器、专用物理寄存器和动态地分配的物理寄存器的组合等。在一个实施例中,整数寄存器存储三十二比特整数数据。一个实施例的寄存器堆也包含用于封包数据的八个多媒体SIMD寄存器。
对于本文中的讨论,寄存器被理解为被设计来保持封包数据的数据寄存器,诸如用来自加利福尼亚州圣克拉拉的英特尔公司的MMX技术实现的微处理器中的64比特宽MMXTM寄存器(在一些情况下也被称为‘mm’寄存器)。这些MMX寄存器(整数和浮点形式两者都可用)可与伴随SIMD和SSE指令的封包数据元素一起操作。类似地,与SSE2、SSE3、SSE4或超越(通常称为“SSEx”)技术有关的128比特宽XMM寄存器也可用于保持此类封包数据操作数。在一个实施例中,在存储封包数据和整数数据时,寄存器不需要在这两种数据类型之间进行区分。在一个实施例中,整数和浮点被包含在相同的寄存器堆或不同的寄存器堆中。此外,在一个实施例中,浮点和整数数据可以被存储在不同的寄存器或相同的寄存器中。
可以按照许多不同的系统类型实现实施例。现在参考图5,示出的是依照实施方式的多处理器系统500的框图。如图5中所示,多处理器系统500是点对点互连系统,并且包括经由点对点互连550耦合的第一处理器570和第二处理器580。如图5中所示,处理器570和580中的每一个可以是多核心处理器,其包括第一和第二处理器核心(即,处理器核心574a和574b以及处理器核心584a和584b),但是在处理器中可以存在潜在更多的核心。依照本发明的实施例,处理器各自可以包括混合写入模式逻辑。可在处理器570、处理器580或两者中实现页面添加和内容复制的实施例。
虽然示出有两个处理器570、580,但是应当理解的是,本公开的范围不限于此。在其他实施方式中,在给定处理器中可以存在一个或多个附加处理器。
处理器570和580被示出分别包括集成存储器控制器单元572和582。处理器570也包括点对点(P-P)接口576和588作为其总线控制器单元的一部分;类似地,第二处理器580包括P-P接口586和588。处理器570、580可以使用P-P接口电路578、588来经由点对点(P-P)接口550交换信息。如图5中所示,IMC 572和582将处理器耦合到相应的存储器,即存储器532和存储器534,其可以是在本地附接到相应的处理器的主存储器的部分。
处理器570、580可以各自使用点对点接口电路576、594、586、598来经由单独的P-P接口552、554与芯片组590交换信息。芯片组590也可以经由高性能图形接口539与高性能图形电路538交换信息。
共享高速缓存(未示出)可以被包括在任何一个处理器中或在两个处理器外部,仍然经由P-P互连与处理器连接,使得如果处理器被置于低功耗模式,则任何一个或两个处理器的本地高速缓存信息可以被存储在共享高速缓存中。
芯片组590可以经由接口596耦合到第一总线516。在一个实施例中,第一总线516可以是外围组件互连(PCI)总线,或诸如PCI Express总线或另一第三代I/O互连总线之类的总线,但是本公开的范围不限于此。
如图5中所示,各种I/O设备514可以耦合到第一总线516以及将第一总线516耦合到第二总线520的总线桥接器518。在一个实施例中,第二总线520可以是低引脚计数(LPC)总线。在一个实施例中,各种设备可以耦合到第二总线520,所述各种设备包括例如键盘和/或鼠标522、通信设备527和存储单元528,所述存储单元528是诸如可以包括指令/代码和数据530的磁盘驱动器或其他大容量存储设备。进一步地,音频I/O 524可以耦合到第二总线520。注意,其他架构是可能的。例如,代替图5的点对点架构,系统可以实现多点总线或其他这种架构。
现在参考图6,示出的是依照本发明的实施例的第三系统600的框图。图5和图6中的相似的元件具有相似的附图标记,并且已经从图5中省略了图5的某些方面,以便避免使图6的其他方面混淆。
图6图示了处理器670、680分别可以包括集成存储器以及I/O控制逻辑(“CL”) 672和682。对于至少一个实施例,CL 672、682可以包括诸如本文中所描述的集成存储器控制器单元。此外。CL 672、682也可以包括I/O控制逻辑。图6图示了存储器632、634耦合到CL 672、682,并且I/O设备614也耦合到控制逻辑672、682。传统I/O设备615耦合到芯片组690。可在处理器670、处理器680或两者中实现页面添加和内容复制的实施例。
图7是可以包括一个或多个核心702的示例性片上系统(SoC) 700。本领域已知用于膝上型电脑、台式机、手持PC、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、手机、便携式媒体播放器、手持设备和各种其他设备电子设备的其他系统设计和配置也是适合的。一般而言,能够并入如本文中所公开的处理器和/或其他执行逻辑的各式各样的系统或电子设备通常是适合的。
图7是依照本公开的实施例的SoC 700的框图。虚线框是更先进SoC上的特征。在图7中(一个或多个)互连单元702耦合到:应用处理器717,其包括一组一个或多个核心702A-N和(一个或多个)共享高速缓存单元706;系统代理单元710;(一个或多个)总线控制器单元716;(一个或多个)集成存储器控制器单元714;一组或一个或多个媒体处理器720,所述媒体处理器720可以包括集成图形逻辑708、用于提供静止和/或视频相机功能性的图像处理器724、用于提供硬件音频加速的音频处理器726以及用于提供视频编码/解码加速的视频处理器728;静态随机存取存储器(SRAM)单元730;直接存储器存取(DMA)单元732;以及用于耦合到一个或多个外部显示器的显示单元740。可在SoC 700中实现页面添加和内容复制的实施例。
接下来转向图8,描绘了依照本公开的实施例的片上系统(SoC)设计的实施例。作为说明性示例,SoC 800被包括在用户设备(UE)中。在一个实施例中,UE指代要由最终用户使用来通信的任何设备,诸如手持电话、智能电话、平板、超薄笔记本、具有宽带适配器的笔记本或任何其他类似的通信设备。UE可以连接到基站或节点,其本质上可对应于GSM网络中的移动站(MS)。可在SoC 800中实现页面添加和内容复制的实施例。
这里,SoC 800包括2个核心—806和807。类似于以上讨论,核心806和807可以符合指令集架构,诸如具有Intel® Architecture CoreTM、先进微器件公司(AMD)处理器、基于MIPS的处理器、基于ARM的处理器设计或其客户以及其许可证或采纳者的处理器。核心806和807耦合到高速缓存控件808,所述高速缓存控件808与总线接口单元809和L2高速缓存810相关联以与系统800的其他部分进行通信。互连811包括片上互连,诸如上面所讨论的IOSF、AMBA或其他互连,其可以实现所描述的公开内容的一个或多个方面。
互连811向其他组件提供通信信道,所述其他组件诸如用于与SIM卡对接的订户身份模块(SIM) 830、用于保持由核心806和807执行的引导代码以初始化并引导SoC 800的引导ROM 835、用于与外部存储器(例如DRAM 860)对接的SDRAM控制器840、用于与非易失性存储器(例如闪存865)对接的闪存控制器845、用于与外围设备对接的外围控件850(例如串行外围接口)、视频编解码器820以及用于显示和接收输入(例如触摸使能输入)的视频接口825、用于执行图形相关计算的GPU 815等。这些接口中的任何一个都可以并入本文中所描述的实施例的各方面。
此外,该系统图示了用于通信的外围设备,诸如蓝牙模块870、3G调制解调器875、GPS 880和Wi-Fi 885。注意如上面所陈述的,UE包括用于通信的无线电设备。结果,可以不全部包括这些外围通信模块。然而,在UE中应该包括用于外部通信的某种形式的无线电设备。
图9图示了示例形式为计算系统900中的机器的图式表示,在所述计算系统900内可以执行用于使机器执行本文中所讨论的方法学中的任何一个或多个的一组指令。在替代实施例中,该机器可以连接(例如,联网)到LAN、内联网、外联网或因特网中的其他机器。该机器可以在客户端-服务器网络环境中的服务器或客户端设备的容量中或者作为对等(或分布式)网络环境中的对等机器操作。该机器可以是个人计算机(PC)、平板PC、机顶盒(STB)、个人数字助理(PDA)、蜂窝电话、web(网络)设备、服务器、网络路由器、交换机或桥接器,或能够执行指定要由该机器执行的动作的一组指令(顺序的或以其他方式)的任何机器。进一步地,虽然图示了仅单个机器,但是术语“机器”也应被认为包括单独地或者联合地执行一组(或多组)指令以执行本文中所讨论的方法学中的任何一个或多个的机器的任何合集。可在计算系统900中实现页面添加和内容复制的实施例。
计算系统900包括经由总线930彼此通信的处理设备902、主存储器904(例如,只读存储器(ROM)、闪速存储器、动态随机存取存储器(DRAM)(诸如同步DRAM (SDRAM)或DRAM(RDRAM)等)、静态存储器906(例如,闪速存储器、静态随机存取存储器(SRAM)等)和数据存储设备918。
处理设备902表示诸如微处理器、中央处理单元等之类的一个或多个通用处理设备。更特别地,处理设备可以是复杂指令集计算(CISC)微处理器、精简指令集计算机(RISC)微处理器、甚长指令字(VLIW)微处理器或实现其他指令集的处理器,或实现指令集的组合的处理器。处理设备902也可以是一个或多个专用处理设备,诸如专用集成电路(ASIC)、现场可编程门阵列(FPGA)、数字信号处理器(DSP)、网络处理器等。在一个实施例中,处理设备902可以包括一个或多个处理器核心。处理设备902被配置成执行处理逻辑926以便执行本文中所讨论的运算。在一个实施例中,处理设备902可以是计算系统的一部分。替换地,计算系统900可包括如本文中所描述的其他组件。应该理解的是,核心可以支持多线程(执行两个或更多个并行的运算或线程集),并且可以以各种方式这样做,包括时间分片多线程、同时多线程(其中单个物理核心为该物理核心同时地多线程处理的线程中的每一个提供逻辑核心)或其组合(例如,诸如Intel®超线程技术中的时间分片预取和解码及其后的同时多线程)。
计算系统900可以还包括通信地耦合到网络920的网络接口设备908。计算系统900也可以包括视频显示单元910(例如,液晶显示器(LCD)或阴极射线管(CRT))、字母数字输入设备910(例如,键盘)、光标控制设备914(例如,鼠标)、信号生成设备916(例如,扬声器)或其他外围设备。此外,计算系统900可以包括图形处理单元922、视频处理单元928和音频处理单元932。在另一实施例中,计算系统900可以包括芯片组(未图示),其指代被设计来与处理设备902一起工作并且控制处理设备902与外部设备之间的通信的一组集成电路或芯片。例如,芯片组可以是主板上的芯片的集合,所述主板将处理设备902链接到甚高速设备,诸如主存储器904和图形控制器,以及将处理设备902链接到外围设备的低速外围总线,诸如USB、PCI或ISA总线。
数据存储设备918可以包括计算机可读存储介质924,在其上存储了具体实现本文中所描述的功能的方法学中的任何一个或多个的软件926的。软件926也可以作为指令926完全或至少部分地驻留在主存储器904内和/或在其由计算系统900执行期间作为处理逻辑926驻留在处理设备902内;主存储器904和处理设备902也构成计算机可读存储介质。
计算机可读存储介质924也可以用于存储诸如关于图1所描述的利用处理设备902的指令926,和/或包含调用以上应用的方法的软件库。虽然计算机可读存储介质924在示例性实施例中被示出为单个介质,但是术语“计算机可读存储介质”应被认为包括存储一组或多组指令的单个介质或多个介质(例如,集中式或分布式数据库,和/或关联的高速缓存和服务器)。术语“计算机可读存储介质”也应被认为包括能够存储、编码或者承载由机器执行并且使机器执行本实施例的方法学中的任何一个或多个的一组指令的任何介质。术语“计算机可读存储介质”因此应被认为包括但不限于固态存储器以及光学和磁介质。
以下示例和另外的实施例有关。
示例1是一种处理器,其包括:1)第一寄存器阵列,其中,第一变量组、第二变量组和第三变量组被存储在第一寄存器阵列中;2)解码器,其用于:a)接收来自应用的要执行单指令多数据(SIMD)运算的请求;并且b)对所述请求进行解码;以及3)执行单元,其用于响应于所述请求而执行以下步骤:a)对第一变量组执行运算,其中,所述第一变量组包括第一输入值和第一寄存器值,并且其中,所述第一寄存器值被存储在所述寄存器阵列中的第一阵列位置处;b)对第二变量组执行所述运算,其中,所述第二变量组包括第二输入值和所述第一寄存器值,并且其中,所述第一寄存器值被存储在所述寄存器阵列中的所述第一阵列位置处;c)将对所述第一变量组和所述第二变量组的所述运算向量化;d)并行地对所述第一变量组执行所述运算并且对所述第二变量组执行所述运算以获得针对所述第一变量组的第一运算值和针对所述第二变量组的第二运算值;e)对所述第一运算值和所述第二运算值执行水平加法运算以获得第一结果值;以及f)将所述第一结果值写入到所述寄存器阵列中的所述第一位置。
在示例2中,根据示例1所述的处理器,其中,所述执行单元还将:a)对第三变量组执行所述运算,其中,所述第三变量组包括第三输入值和第二寄存器值,并且其中,所述第二寄存器值被存储在所述寄存器阵列中的第二阵列位置处;b)对第四变量组执行所述运算,其中,所述第四变量组包括第四输入值和所述第二寄存器值,并且其中,所述第二寄存器值被存储在所述寄存器阵列中的所述第二阵列位置处;c)将对所述第一变量组的所述运算、对所述第二变量组的所述运算、对所述第三变量组的所述运算和对所述第四变量组的所述运算向量化;d)并行地对所述第一变量组执行所述运算,对所述第二变量组执行所述运算,对所述第三变量组执行所述运算,并且对所述第四变量组执行所述运算以获得:i)针对所述第一变量组的所述第一运算值,ii)针对所述第二变量组的所述第二运算值,iii)针对所述第三变量组的第三运算值,以及iv)针对所述第四变量组的第四运算值;e)对所述第三运算值和所述第四运算值执行所述水平加法运算以获得第二结果值;以及f)将所述第二结果值写入到第二寄存器阵列位置中的第二寄存器阵列位置。
在示例3中,根据示例2所述的处理器,其中,所述执行单元还将:a)对第五变量组执行所述运算,其中,所述第五变量组包括第五输入值和第三寄存器值,并且其中,所述第三寄存器值被存储在所述寄存器阵列中的第三阵列位置处;b)将对所述第一变量组的所述运算、对所述第二变量组的所述运算、对所述第三变量组的所述运算、对所述第四变量组的所述运算和对所述第五变量组的所述运算向量化;c)并行地对所述第一变量组执行所述运算,对所述第二变量组执行所述运算,对所述第三变量组执行所述运算,对所述第四变量组执行所述运算,并且对所述第五变量组执行所述运算以获得:i)针对所述第一变量组的所述第一运算值,ii)针对所述第二变量组的所述第二运算值,iii)针对所述第三变量组的所述第三运算值,iv)针对所述第四变量组的所述第四运算值,以及v)针对所述第五变量组的第五运算值;以及d)将所述第五运算值写入到所述寄存器阵列中的第三寄存器位置。
在示例4中,根据示例1所述的处理器,其中,所述执行单元还将:a)从软件应用接收要对第三变量组执行所述运算的请求,其中,所述第三变量组包括第三输入值和第二寄存器值,并且其中,所述寄存器值被存储在所述寄存器阵列中的第二寄存器位置处;b)并行地将对所述第一变量组的所述运算、对所述第二变量组的所述运算和对所述第三变量组的所述运算向量化;c)并行地对所述第一变量组执行所述运算,对所述第二变量组执行所述运算,并且对所述第三变量组执行所述运算以获得:i)针对所述第一变量组的所述第一运算值,ii)针对所述第二变量组的所述第二运算值,以及iii)针对所述第三变量组的第三运算值;以及d)将所述第三运算值写入到所述寄存器阵列中的所述第二寄存器位置。
各种实施例可以具有上述的结构特征的不同组合。例如,也可以相对于本文中所描述的系统实现上述的处理器和方法的所有可选特征,并且可以在一个或多个实施例中的任何地方使用示例中的详情。
示例5是一种处理器,其包括:1)第一寄存器阵列,其中,第一变量组、第二变量组和第三变量组被存储在第一寄存器阵列中;2)解码器,其用于:a)接收来自应用的要执行单指令多数据(SIMD)运算的请求;并且b)对所述请求进行解码;以及3)处理器核心,其用于响应于所述请求:a)对第一变量组执行运算,其中,所述第一变量组包括第一输入值和第一寄存器值,并且其中,所述第一寄存器值被存储在所述第一寄存器阵列的第一寄存器阵列位置处;b)对第二变量组执行所述运算,其中,所述第二变量组包括第二输入值和所述第一寄存器值,并且其中,所述第一寄存器值被存储在所述第一寄存器阵列的第二寄存器阵列位置处;并且c)对第三变量组执行所述运算,其中,所述第三变量组包括第三输入值和第二寄存器值,并且其中,所述第二寄存器值被存储在所述第一寄存器阵列的第三寄存器阵列位置处;d)对所述第一变量组执行所述运算以获得第一运算值;e)对所述第二变量组执行所述运算以获得第二运算值;f)对所述第三变量组执行所述运算以获得第三运算值,其中,对所述第一、第二和第三变量组的所述运算被并行地执行;g)使所述第一运算值与所述第一寄存器阵列位置相关联;h)使所述第二运算值与所述第二寄存器阵列位置相关联;i)使所述第三运算值与所述第三寄存器阵列位置相关联;j)确定所述第一寄存器阵列位置和所述第二寄存器阵列位置是针对同一寄存器阵列位置;k)对所述第一运算值和所述第二运算值执行水平加法运算以获得结果值;l)将所述结果值写入到所述第一寄存器阵列位置;以及m)将所述第三运算值写入到所述第三寄存器阵列位置。
在示例6中,根据示例5所述的处理器,其中,所述处理器核心还将将对所述第一变量组的所述运算、对所述第二变量组的所述运算和对所述第三变量组的所述运算向量化以并行地对所述第一、第二和第三变量组执行所述运算。
在示例7中,根据示例5所述的处理器,其中,所述处理器核心还用于:a)将所述第一寄存器值和所述第一寄存器阵列位置存储在所述第一寄存器阵列位置中;b)将所述第一寄存器值和所述第一寄存器阵列位置存储在所述第二寄存器阵列位置中;并且c)将所述第二寄存器值和所述第二寄存器阵列位置存储在第三寄存器阵列位置中。
在示例8中,根据示例7所述的处理器,其中,所述处理器核心还用于:a)使用所述第一寄存器阵列位置中的所述第一寄存器值来对所述第一变量组执行所述运算,b)使用所述第二寄存器阵列位置中的所述第一寄存器值来对所述第二变量组执行所述运算,并且c)使用所述第三寄存器阵列位置中的所述第二寄存器值来对所述第三变量组执行所述运算。
在示例9中,根据示例5所述的处理器,还包括运算寄存器阵列,其中,所述处理器核心还用于:1)将所述第一运算值和所述第一寄存器阵列位置存储在所述运算寄存器阵列的第一寄存器阵列中;2)将所述第二运算值和所述第二寄存器阵列位置存储在所述运算寄存器阵列的第二寄存器阵列位置中;3)将所述第三运算值和所述第三寄存器阵列位置存储在所述运算寄存器阵列的第三寄存器阵列位置中;并且4)确定针对所述第一寄存器阵列位置的所述第一寄存器阵列位置和所述第二寄存器阵列位置是同一寄存器阵列位置。
在示例10中,根据示例9所述的处理器,其中,所述处理器核心还用于响应于针对所述第一寄存器阵列位置的所述第一寄存器阵列位置和针对所述第二寄存器阵列位置的所述第二寄存器阵列位置是同一寄存器阵列位置而对所述第一运算值和所述第二运算值执行所述水平加法运算。
在示例11中,根据示例10所述的处理器,其中,所述处理器核心还用于:a)将所述水平加法运算的结果存储在所述运算寄存器阵列的所述第二寄存器阵列位置中;b)为第二寄存器阵列位置生成第一写入掩码;c)为第三寄存器阵列位置生成第二写入掩码;以及d)将具有写入掩码的所述第二寄存器阵列位置和所述第三寄存器阵列位置中的值写入到与所述第二寄存器阵列位置和所述第三寄存器阵列位置相关联的存储器设备的存储器位置。
在示例12中,根据示例11所述的处理器,其中,所述第一写入掩码包括指示针对所述第一运算寄存器阵列位置的第一存储器位置和针对所述第二运算寄存器阵列位置的第二存储器位置是同一存储器位置的比特的串。
在示例13中,根据示例12所述的处理器,其中,所述第一存储器位置和所述第二存储器位置在所述存储器设备中的非连续位置处。
在示例14中,根据示例5所述的处理器,其中,所述运算是加法运算。
各种实施例可以具有上述的结构特征的不同组合。例如,也可以相对于本文中所描述的系统来实现上述的处理器和方法的所有可选特征,并且可以在一个或多个实施例中的任何地方使用示例中的详情。
示例15是一种方法,其包括:1)由处理器对第一变量组执行运算以获得第一运算值;2)由所述处理器对第二变量组执行所述运算以获得第二运算值;3)由所述处理器对第三变量组执行所述运算以获得第三运算值,其中,对所述第一变量组的所述运算、对所述第二变量组的所述运算和对所述第三变量组的所述运算被并行地执行;4)由所述处理器使所述第一运算值与寄存器阵列处的第一寄存器阵列位置相关联;5)由所述处理器使所述第二运算值与所述寄存器阵列处的第二寄存器阵列位置相关联;6)由所述处理器使所述第三运算值与所述寄存器阵列处的第三寄存器阵列位置相关联;7)由所述处理器确定所述第一寄存器阵列位置和所述第二寄存器阵列位置是针对所述寄存器阵列处的同一寄存器阵列位置;8)由所述处理器对所述第一运算值和所述第二运算值执行水平加法运算以获得结果值;以及9)由所述处理器将所述结果值和所述第三运算值写入到所述第一寄存器阵列位置。
在示例16中,根据示例15所述的方法,还包括从软件应用接收请求以:a)由所述处理器对所述第一变量组执行所述运算,其中,所述第一变量组包括第一输入值和第一寄存器值,并且其中,所述第一寄存器值被存储在所述第一寄存器阵列位置处;b)由所述处理器对所述第二变量组执行所述运算,其中,所述第二变量组包括第二输入值和所述第一寄存器值,并且其中,所述第一寄存器值被存储在所述第二寄存器阵列处;以及c)由所述处理器对所述第三变量组执行所述运算,其中,所述第三变量组包括第三输入值和所述第二寄存器值,并且其中,所述第二寄存器值被存储在所述第三寄存器阵列位置处。
在示例17中,根据示例15所述的方法,还包括由所述处理器并行地将对所述第一变量组的所述运算、对所述第二变量组的所述运算和对所述第三变量组的所述运算向量化。
在示例18中,根据示例15所述的方法,还包括:1)由所述处理器生成运算单元的运算寄存器阵列;2)由所述处理器将所述第一运算值和所述第一寄存器阵列位置存储在所述运算寄存器阵列的第一运算单元中;3)由所述处理器将所述第二运算值和所述第二寄存器阵列位置存储在所述运算寄存器阵列的第二运算单元中;4)由所述处理器将所述第三运算值和所述第三寄存器阵列位置存储在所述运算寄存器阵列的第三运算单元中;5)由所述处理器确定针对所述第一运算单元的所述第一寄存器阵列位置和针对所述第二运算单元的所述第二寄存器阵列位置是同一寄存器阵列位置;以及6)由所述处理器响应于针对所述第一运算单元的所述第一寄存器阵列位置和针对所述第二运算单元的所述第二寄存器阵列位置是同一寄存器阵列位置而对所述第一运算值和所述第二运算值执行所述水平加法运算。
在示例19中,根据示例18所述的方法,还包括:1)由所述处理器将所述水平加法运算的结果存储在所述运算寄存器阵列的第二运算单元中;2)由所述处理器为所述第二运算单元生成第一写入掩码;3)由所述处理器为所述第三运算单元生成第二写入掩码;以及4)由所述处理器将具有所述第一写入掩码的所述第二运算单元和具有所述第二写入掩码的所述第三运算单元中的值写入到分别与所述第二运算单元和所述第三运算单元相关联的所述寄存器阵列位置。
在示例20中,根据示例19所述的方法,其中,所述第一写入掩码包括指示针对所述第一运算单元的所述第一寄存器阵列位置和针对所述第二运算单元的所述第二寄存器阵列位置是同一寄存器阵列位置的比特的串。
虽然已经相对于有限数量的实施例描述了本发明,但是本领域的技术人员将从其中领会许多修改和变化。意图是,所附权利要求涵盖如落入此发明的真实精神和范围内的所有此类修改和变化。
在本文描述中,阐述了许多具体细节,诸如具体类型的处理器和系统配置、具体硬件结构、具体架构和微架构细节、具体寄存器配置、具体指令类型、具体系统组件、具体测量/高度、具体处理器管线级和操作等的示例,以便提供对本发明的透彻理解。然而,对于本领域的技术人员而言将显而易见的是,不必采用这些具体细节来实践本发明。在其他实例中,尚未详细地描述众所周知的组件或方法,诸如具体和替代处理器架构、用于描述的算法的具体逻辑电路/代码、具体固件代码、具体互连操作、具体逻辑配置、具体制造技术和材料、具体编译器实施方式、代码中的算法的具体表达、具体断电和门控技术/逻辑以及计算机系统的其他具体操作细节,以便避免不必要地使本发明混淆。
参考在具体集成电路中(诸如在计算平台或微处理器中)的SNC之间的动态高速缓存哈希变化对实施例进行描述。这些实施例也可以适用于其他类型的集成电路和可编程逻辑器件。例如,所公开的实施例不限于台式计算机系统或便携式计算机,诸如Intel®UltrabooksTM计算机。并且也可以被用在其他设备中,所述其他设备诸如手持设备、平板、其他薄笔记本、片上系统(SoC)设备和嵌入式应用。手持设备的一些示例包括蜂窝电话、因特网协议设备、数码相机、个人数字助理(PDA)和手持式PC。嵌入式应用通常包括微控制器、数字信号处理器(DSP)、片上系统、网络计算机(NetPC)、机顶盒、网络集线器、广域网(WAN)交换机,或可执行在下面教导的功能和操作的任何其他系统。描述了该系统可以是任何种类的计算机或嵌入式系统。所公开的实施例尤其可以被用于低端设备,例如可穿戴设备(例如,手表)、电子植入物、传感和控制基础设施设备、控制器、监督控制和数据获取(SCADA)系统等。而且,本文中所描述的装置、方法和系统不限于物理计算设备,而是也可以涉及用于能源节约和效率的软件优化。如将在以下描述中变得容易地显而易见的,本文中所描述的方法、装置和系统的实施例(无论是参考硬件、固件、软件还是其组合)对于按性能考虑事项而平衡的“绿色技术”未来至关重要。
尽管参考处理器对本文实施例进行描述,然而其他实施例适用于其他类型的集成电路和逻辑设备。本发明的实施例的类似技术和教导可被应用于可受益于更高的管线吞吐量和改进的性能的其他类型的电路或半导体器件。本发明的实施例的教导适用于执行数据操纵的任何处理器或机器。然而,本发明不限于执行512比特、256比特、128比特、64比特、32比特或16比特数据运算的处理器或机器,并且可被应用于执行数据的操纵或管理的任何处理器和机器。此外,本文描述提供示例,并且附图出于图示的目的示出了各种示例。然而,不应该在限制性含义上解释这些示例,因为它们仅仅旨在提供本发明的实施例的示例,而不是提供本发明的实施例的所有可能的实现方式的详尽列表。
尽管以下示例在执行单元和逻辑电路的上下文中描述指令处理和分发,然而本发明的其他实施例可通过存储在机器可读有形介质上的数据或指令来实现,所述数据或指令当由机器执行时使该机器执行与本发明的至少一个实施例一致的功能。在一个实施例中,与本发明的实施例相关联的功能用机器可执行指令加以具体实现。这些指令可用于使被编程有指令的通用或专用处理器执行本发明的步骤。本发明的实施例可以作为计算机程序产品或软件被提供,所述计算机程序产品或软件可以包括上面存储有指令的机器或计算机可读介质,所述指令可以用于对计算机(或其他电子设备)进行编程以执行根据本发明的实施例的一个或多个操作。替换地,本发明的实施例的操作可能由包含用于执行这些操作的固定功能逻辑的具体硬件组件来执行,或者由编程计算机组件和固定功能硬件组件的任何组合来执行。
可将用于对逻辑进行编程以执行本发明的实施例的指令存储在系统中的存储器内,所述存储器诸如DRAM、高速缓存、闪速存储器或其他储存器。此外,可经由网络或者通过其他计算机可读介质来分发指令。因此机器可读介质可以包括用于以可由机器(例如,计算机)读取的形式存储或者发送信息的任何机制,但是不限于,软盘、光盘、紧致盘只读存储器(CD-ROM)以及磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、磁或光学卡、闪速存储器,或在经由电、光学、声学或其他形式的传播信号(例如,载波、红外信号、数字信号等)通过因特网发送信息时使用的有形机器可读储存器。因此,计算机可读介质包括适合于以可由机器(例如,计算机)读取的形式存储或者发送电子指令或信息的任何类型的有形机器可读介质。
设计可以经历从创建到模拟到制造的各种阶段。表示设计的数据可以以许多方式表示该设计。首先,如在模拟中有用的,可以使用硬件描述语言或另一功能描述语言来表示硬件。附加地,可以在设计过程的某些阶段处产生具有逻辑和/或晶体管门的电路级模型。此外,大多数设计在某个阶段处达到表示硬件模型中的各种设备的物理布局的数据的层级。在使用常规的半导体制作技术的情况下,表示硬件模型的数据可以是指定在用于产生集成电路的掩模的不同掩模层上存在或缺少各种特征的数据。在设计的任何表示中,可以将数据存储在任何形式的机器可读介质中。诸如盘的存储器或磁或光学储存器可以是用于存储经由被调制或者以其他方式生成来发送这种信息的光波或电波来发送的信息。当发送指示或者承载代码或设计的电载波时,在执行电信号的复制、缓冲或重传的范围内,新副本被做出。因此,通信提供商或网络提供商可以在有形机器可读介质上至少暂时地存储具体实现本发明的实施例的技术的物品,诸如编码成载波的信息。
如本文中所使用的模块指代硬件、软件和/或固件的任何组合。作为示例,模块包括与非暂时性介质相关联的硬件(诸如微控制器)以存储被适配成由该微控制器执行的代码。因此,对模块的引用在一个实施例中指代被具体地配置成辨识和/或执行要保持在非暂时性介质上的代码的硬件。此外,在另一实施例中,模块的使用指代包括被具体地适配成由微控制器执行来执行预定操作的代码的非暂时性介质。并且如可推理的,在又一个实施例中,术语模块(在此示例中)可以指代微控制器和非暂时性介质的组合。常常被图示为单独的模块边界通常变化并且可能重叠。例如,第一模块和第二模块可以共享硬件、软件、固件或其组合,同时可能保留某个独立硬件、软件或固件。在一个实施例中,术语逻辑的使用包括硬件,诸如晶体管、寄存器或其他硬件,诸如可编程逻辑器件。
在一个实施例中,短语“被配置成”的使用指代布置、放在一起、制造、提供以出售、导入和/或设计用于执行指定的或确定的任务的装置、硬件、逻辑或元件。在此示例中,不在操作的装置或其元件在它被设计、耦合和/或互连以执行指定的任务的情况下仍然被配置成执行所述指定的任务。作为纯粹说明性示例,逻辑门可以在操作期间提供0或1。但是“被配置成”向时钟提供使能信号的逻辑门不包括可以提供1或0的每一潜在的逻辑门。替代地,逻辑门是以在操作期间1或0输出用于启用时钟的某种方式耦合的逻辑门。再次注意,术语“被配置成”的使用不要求操作,而是替代地集中于装置、硬件和/或元件的潜伏状态,其中在潜伏状态下装置、硬件和/或元件被设计来在该装置、硬件和/或元件正在操作时执行特定任务。
此外,短语‘用于’、“能够/用于”和/或“可操作来”的使用在一个实施例中指代以这样的方式被设计为使得能够以指定的方式使用装置、逻辑、硬件和/或元件的某个装置、逻辑、硬件和/或元件。注意如上述,用于、能够或可操作来的使用在一个实施例中指代装置、逻辑、硬件和/或元件的潜伏状态,其中该装置、逻辑、硬件和/或元件不在操作而是以这样的方式被设计为使得能够以指定的方式使用装置。
如本文中所使用的值包括数字、状态、逻辑状态或二进制逻辑状态的任何已知表示。常常,逻辑电平、逻辑值或逻辑值的使用也被称为l和0的使用,其简单地表示二进制逻辑状态。例如,1指代高逻辑电平并且0指代低逻辑电平。在一个实施例中,诸如晶体管或闪存单元之类的存储单元可以能够保持单个逻辑值或多个逻辑值。然而,已经使用计算机系统中的值的其他表示。例如十进制数字十也可以被表示为二进制值1010和十六进制字母A。因此,值包括能够被保持在计算机系统中的信息的任何表示。
而且,状态可以通过值或这些值的部分来表示。作为示例,诸如逻辑一之类的第一值可以表示默认或初始状态,然而诸如逻辑零之类的第二值可以表示非默认状态。此外,术语复位和置位在一个实施例中分别指代默认值或状态和更新值或状态。例如,默认值可能包括高逻辑值,即复位,然而更新值可能包括低逻辑值,即置位。注意,可以利用值的任何组合来表示任何数量的状态。
上面所阐述的方法、硬件、软件、固件或代码的实施例可以经由存储在可由处理元件执行的机器可访问介质、机器可读介质、计算机可访问介质或计算机可读介质上的指令或代码来实现。非暂时性机器可访问/可读介质包括以可由机器(诸如计算机或电子系统)读取的形式提供(即,存储和/或发送)信息的任何机制。例如,非暂时性机器可访问介质包括随机存取存储器(RAM),诸如静态RAM (SRAM)或动态RAM (DRAM);ROM;磁或光学存储介质;闪速存储器设备;电存储设备;光学存储设备;声学存储设备;用于保持从暂时性(传播)信号(例如,载波、红外信号、数字信号)接收的信息的其他形式的存储设备;等,这些介质或设备将与可以从那里接收信息的非暂时性介质区分开。
可以将用于对逻辑进行编程以执行本发明的实施例的指令存储在系统中的存储器内,所述存储器诸如DRAM、高速缓存、闪速存储器或其他储存器。此外,可经由网络或者通过其他计算机可读介质来分发指令。因此机器可读介质可以包括用于以可由机器(例如,计算机)读取的形式存储或者发送信息的任何机制,但是不限于,软盘、光盘、紧致盘只读存储器(CD-ROM)以及磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、磁或光学卡、闪速存储器,或在经由电、光学、声学或其他形式的传播信号(例如,载波、红外信号、数字信号等)通过因特网发送信息时使用的有形机器可读储存器。因此,计算机可读介质包括适合于以可由机器(例如,计算机)读取的形式存储或者发送电子指令或信息的任何类型的有形机器可读介质。
贯穿本说明书对“一个实施例”或“实施例”的引用意味着结合该实施例所描述的特定特征、结构或特性被包括在本发明的至少一个实施例中。因此,短语“在一个实施例中”或“在实施例中”贯穿本说明书出现在各个地方中不一定全部指代相同的实施例。此外,可以在一个或多个实施例中以任何适合的方式组合这些特定特征、结构或特性。
在上述说明书中,已经参考具体示例性实施例给出了详细描述。然而,将显然的是,在不脱离如所附权利要求书中阐述的本发明的更广精神和范围的情况下,可以对其做出各种修改和改变。本说明书和附图因此将在说明性含义而不是限制性含义上被考虑。此外,实施例和其他示例性语言的上述使用不一定指代相同的实施例或相同的示例,而是可以指代不同的和各别的实施例以及潜在相同的实施例。
在对计算机存储器内的数据比特的运算的算法和符号表示方面呈现详细描述的一些部分。这些算法描述和表示是由数据处理领域的技术人员使用来最有效地将他们的工作的实质传达给本领域的其他技术人员的手段。算法在这里并且通常被认为是导致期望结果的操作的前后一致序列。这些操作是要求对物理量进行物理操纵的操作。通常,但不一定,这些量采取能够被存储、转移、组合、比较并以其他方式操纵的电或磁信号的形式。主要出于常见用法的原因将这些信号称为比特、值、元素、符号、字符、术语、数字等有时已证明是方便的。本文中所描述的块可以是硬件、软件、固件或其组合。
然而,应该记住的是,所有这些和类似的术语都将与适当的物理量相关联,并且仅仅是应用于这些量的方便的标签。除非另外具体地陈述,否则如从以上讨论中显而易见的,应领会的是,在整个说明书中,利用诸如“定义”、“接收”、“确定”、“发布”、“链接”、“关联”、“获得、“认证”、“禁止”、“执行”、“请求”、“传送”等之类的术语的讨论指代计算系统或类似的电子计算设备的动作和过程,所述计算系统或类似的电子计算设备操纵并且将表示为计算系统的寄存器和存储器内的物理(例如,电子)量的数据变换成类似地表示为计算系统存储器或寄存器或其他这种信息存储、传输或显示设备内的物理量的其他数据。
单词“示例”或“示例性”在本文中用于意指用作示例、实例或图示。在本文中描述为“示例”或“示例性”的任何方面或设计不一定被解释为优于其他方面或设计为优选的或有利的。相反,单词“示例”或“示例性”的使用旨在以具体方式呈现构思。如本申请中所使用的,术语“或”旨在意指包括性“或”而不是排他性“或”。也就是说,除非另外指定或者从上下文中清楚,否则“X包括A或B”旨在意指自然包括性排列中的任何一个。也就是说,如果X包括A;X包括B;或者X包括A和B两者,则在上述实例中的任何一个下满足“X包括A或B”。此外,除非另外指定或者从上下文中清楚是针对单数形式,否则如本说明书和所附权利要求中使用的冠词“一”和“一个”通常应该被解释为意指“一个或多个”。而且,除非如此描述,否则术语“实施例”或“一个实施例”或“实施方式”或“一个实施方式”在各处的使用不旨在意指相同的实施例或实施方式。另外,如本文中所使用的术语“第一”、“第二”、“第三”、“第四”等意指为用于区分不同元件的标签,并且可能不一定根据它们的数值名称具有序数含义。
Claims (20)
1.一种处理器,其包括:
第一寄存器阵列,其中,第一变量组、第二变量组和第三变量组被存储在第一寄存器阵列中;
解码器,其用于:
接收来自应用的要执行单指令多数据(SIMD)运算的请求;并且
对所述请求进行解码;以及
执行单元,其用于响应于所述请求而执行以下步骤:
对第一变量组执行运算,其中,所述第一变量组包括第一输入值和第一寄存器值,并且其中,所述第一寄存器值被存储在所述寄存器阵列中的第一阵列位置处;
对第二变量组执行所述运算,其中,所述第二变量组包括第二输入值和所述第一寄存器值,并且其中,所述第一寄存器值被存储在所述寄存器阵列中的所述第一阵列位置处;
将对所述第一变量组和所述第二变量组的所述运算向量化;
并行地对所述第一变量组执行所述运算并且对所述第二变量组执行所述运算以获得针对所述第一变量组的第一运算值和针对所述第二变量组的第二运算值;
对所述第一运算值和所述第二运算值执行水平加法运算以获得第一结果值;以及
将所述第一结果值写入到所述寄存器阵列中的所述第一位置。
2.根据权利要求1所述的处理器,其中,所述执行单元还用于:
对第三变量组执行所述运算,其中,所述第三变量组包括第三输入值和第二寄存器值,并且其中,所述第二寄存器值被存储在所述寄存器阵列中的第二阵列位置处;
对第四变量组执行所述运算,其中,所述第四变量组包括第四输入值和所述第二寄存器值,并且其中,所述第二寄存器值被存储在所述寄存器阵列中的所述第二阵列位置处;
将对所述第一变量组的所述运算、对所述第二变量组的所述运算、对所述第三变量组的所述运算和对所述第四变量组的所述运算向量化;
并行地对所述第一变量组执行所述运算,对所述第二变量组执行所述运算,对所述第三变量组执行所述运算,并且对所述第四变量组执行所述运算以获得:
针对所述第一变量组的所述第一运算值,
针对所述第二变量组的所述第二运算值,
针对所述第三变量组的第三运算值,以及
针对所述第四变量组的第四运算值;
对所述第三运算值和所述第四运算值执行所述水平加法运算以获得第二结果值;以及
将所述第二结果值写入到第二寄存器阵列位置中的第二寄存器阵列位置。
3.根据权利要求2所述的处理器,其中,所述执行单元还用于:
对第五变量组执行所述运算,其中,所述第五变量组包括第五输入值和第三寄存器值,并且其中,所述第三寄存器值被存储在所述寄存器阵列中的第三阵列位置处;
将对所述第一变量组的所述运算、对所述第二变量组的所述运算、对所述第三变量组的所述运算、对所述第四变量组的所述运算和对所述第五变量组的所述运算向量化;
并行地对所述第一变量组执行所述运算,对所述第二变量组执行所述运算,对所述第三变量组执行所述运算,对所述第四变量组执行所述运算,并且对所述第五变量组执行所述运算以获得:
针对所述第一变量组的所述第一运算值,
针对所述第二变量组的所述第二运算值,
针对所述第三变量组的所述第三运算值,
针对所述第四变量组的所述第四运算值,以及
针对所述第五变量组的第五运算值;以及
将所述第五运算值写入到所述寄存器阵列中的第三寄存器位置。
4.根据权利要求1所述的处理器,其中,所述执行单元还用于:
从软件应用接收要对第三变量组执行所述运算的请求,其中,所述第三变量组包括第三输入值和第二寄存器值,并且其中,所述寄存器值被存储在所述寄存器阵列中的第二寄存器位置处;
并行地将对所述第一变量组的所述运算、对所述第二变量组的所述运算和对所述第三变量组的所述运算向量化;
并行地对所述第一变量组执行所述运算,对所述第二变量组执行所述运算,并且对所述第三变量组执行所述运算以获得:
针对所述第一变量组的所述第一运算值,
针对所述第二变量组的所述第二运算值,以及
针对所述第三变量组的第三运算值;以及
将所述第三运算值写入到所述寄存器阵列中的所述第二寄存器位置。
5.一种处理器,其包括:
第一寄存器阵列,其中,第一变量组、第二变量组和第三变量组被存储在第一寄存器阵列中;
解码器,其用于:
接收来自应用的要执行单指令多数据(SIMD)运算的请求;并且
对所述请求进行解码;以及
处理器核心,其用于响应于所述请求:
对第一变量组执行运算,其中,所述第一变量组包括第一输入值和第一寄存器值,并且其中,所述第一寄存器值被存储在所述第一寄存器阵列的第一寄存器阵列位置处;
对第二变量组执行所述运算,其中,所述第二变量组包括第二输入值和所述第一寄存器值,并且其中,所述第一寄存器值被存储在所述第一寄存器阵列的第二寄存器阵列位置处;并且
对第三变量组执行所述运算,其中,所述第三变量组包括第三输入值和第二寄存器值,并且其中,所述第二寄存器值被存储在所述第一寄存器阵列的第三寄存器阵列位置处;
对所述第一变量组执行所述运算以获得第一运算值;
对所述第二变量组执行所述运算以获得第二运算值;
对所述第三变量组执行所述运算以获得第三运算值,其中,对所述第一、第二和第三变量组的所述运算被并行地执行;
使所述第一运算值与所述第一寄存器阵列位置相关联;
使所述第二运算值与所述第二寄存器阵列位置相关联;
使所述第三运算值与所述第三寄存器阵列位置相关联;
确定所述第一寄存器阵列位置和所述第二寄存器阵列位置是针对同一寄存器阵列位置;
对所述第一运算值和所述第二运算值执行水平加法运算以获得结果值;
将所述结果值写入到所述第一寄存器阵列位置;以及
将所述第三运算值写入到所述第三寄存器阵列位置。
6.根据权利要求5所述的处理器,其中,所述处理器核心还用于将对所述第一变量组的所述运算、对所述第二变量组的所述运算和对所述第三变量组的所述运算向量化以并行地对所述第一、第二和第三变量组执行所述运算。
7.根据权利要求5所述的处理器,其中,所述处理器核心还用于:
将所述第一寄存器值和所述第一寄存器阵列位置存储在所述第一寄存器阵列位置中;
将所述第一寄存器值和所述第一寄存器阵列位置存储在所述第二寄存器阵列位置中;并且
将所述第二寄存器值和所述第二寄存器阵列位置存储在第三寄存器阵列位置中。
8.根据权利要求7所述的处理器,其中,所述处理器核心还用于:
使用所述第一寄存器阵列位置中的所述第一寄存器值来对所述第一变量组执行所述运算,
使用所述第二寄存器阵列位置中的所述第一寄存器值来对所述第二变量组执行所述运算,并且
使用所述第三寄存器阵列位置中的所述第二寄存器值来对所述第三变量组执行所述运算。
9.根据权利要求5所述的处理器,还包括运算寄存器阵列,其中,所述处理器核心还用于:
将所述第一运算值和所述第一寄存器阵列位置存储在所述运算寄存器阵列的第一寄存器阵列中;
将所述第二运算值和所述第二寄存器阵列位置存储在所述运算寄存器阵列的第二寄存器阵列位置中;
将所述第三运算值和所述第三寄存器阵列位置存储在所述运算寄存器阵列的第三寄存器阵列位置中;并且
确定针对所述第一寄存器阵列位置的所述第一寄存器阵列位置和所述第二寄存器阵列位置是同一寄存器阵列位置。
10.根据权利要求9所述的处理器,其中,所述处理器核心还用于响应于针对所述第一寄存器阵列位置的所述第一寄存器阵列位置和针对所述第二寄存器阵列位置的所述第二寄存器阵列位置是同一寄存器阵列位置而对所述第一运算值和所述第二运算值执行所述水平加法运算。
11.根据权利要求10所述的处理器,其中,所述处理器核心还用于:
将所述水平加法运算的结果存储在所述运算寄存器阵列的所述第二寄存器阵列位置中;
为第二寄存器阵列位置生成第一写入掩码;
为第三寄存器阵列位置生成第二写入掩码;以及
将具有写入掩码的所述第二寄存器阵列位置和所述第三寄存器阵列位置中的值写入到与所述第二寄存器阵列位置和所述第三寄存器阵列位置相关联的存储器设备的存储器位置。
12.根据权利要求11所述的处理器,其中,所述第一写入掩码包括指示针对所述第一运算寄存器阵列位置的第一存储器位置和针对所述第二运算寄存器阵列位置的第二存储器位置是同一存储器位置的比特的串。
13.根据权利要求12所述的处理器,其中,所述第一存储器位置和所述第二存储器位置在所述存储器设备中的非连续位置处。
14.根据权利要求5所述的处理器,其中,所述运算是加法运算。
15.一种方法,其包括:
由处理器对第一变量组执行运算以获得第一运算值;
由所述处理器对第二变量组执行所述运算以获得第二运算值;
由所述处理器对第三变量组执行所述运算以获得第三运算值,其中,对所述第一变量组的所述运算、对所述第二变量组的所述运算和对所述第三变量组的所述运算被并行地执行;
由所述处理器使所述第一运算值与寄存器阵列处的第一寄存器阵列位置相关联;
由所述处理器使所述第二运算值与所述寄存器阵列处的第二寄存器阵列位置相关联;
由所述处理器使所述第三运算值与所述寄存器阵列处的第三寄存器阵列位置相关联;
由所述处理器确定所述第一寄存器阵列位置和所述第二寄存器阵列位置是针对所述寄存器阵列处的同一寄存器阵列位置;
由所述处理器对所述第一运算值和所述第二运算值执行水平加法运算以获得结果值;以及
由所述处理器将所述结果值和所述第三运算值写入到所述第一寄存器阵列位置。
16.根据权利要求15所述的方法,还包括从软件应用接收请求以:
由所述处理器对所述第一变量组执行所述运算,其中,所述第一变量组包括第一输入值和第一寄存器值,并且其中,所述第一寄存器值被存储在所述第一寄存器阵列位置处;
由所述处理器对所述第二变量组执行所述运算,其中,所述第二变量组包括第二输入值和所述第一寄存器值,并且其中,所述第一寄存器值被存储在所述第二寄存器阵列处;以及
由所述处理器对所述第三变量组执行所述运算,其中,所述第三变量组包括第三输入值和所述第二寄存器值,并且其中,所述第二寄存器值被存储在所述第三寄存器阵列位置处。
17.根据权利要求15所述的方法,还包括由所述处理器并行地将对所述第一变量组的所述运算、对所述第二变量组的所述运算和对所述第三变量组的所述运算向量化。
18.根据权利要求15所述的方法,还包括:
由所述处理器生成运算单元的运算寄存器阵列;
由所述处理器将所述第一运算值和所述第一寄存器阵列位置存储在所述运算寄存器阵列的第一运算单元中;
由所述处理器将所述第二运算值和所述第二寄存器阵列位置存储在所述运算寄存器阵列的第二运算单元中;
由所述处理器将所述第三运算值和所述第三寄存器阵列位置存储在所述运算寄存器阵列的第三运算单元中;
由所述处理器确定针对所述第一运算单元的所述第一寄存器阵列位置和针对所述第二运算单元的所述第二寄存器阵列位置是同一寄存器阵列位置;以及
由所述处理器响应于针对所述第一运算单元的所述第一寄存器阵列位置和针对所述第二运算单元的所述第二寄存器阵列位置是同一寄存器阵列位置而对所述第一运算值和所述第二运算值执行所述水平加法运算。
19.根据权利要求18所述的方法,还包括:
由所述处理器将所述水平加法运算的结果存储在所述运算寄存器阵列的第二运算单元中;
由所述处理器为所述第二运算单元生成第一写入掩码;
由所述处理器为所述第三运算单元生成第二写入掩码;以及
由所述处理器将具有所述第一写入掩码的所述第二运算单元和具有所述第二写入掩码的所述第三运算单元中的值写入到分别与所述第二运算单元和所述第三运算单元相关联的所述寄存器阵列位置。
20.根据权利要求19所述的方法,其中,所述第一写入掩码包括指示针对所述第一运算单元的所述第一寄存器阵列位置和针对所述第二运算单元的所述第二寄存器阵列位置是同一寄存器阵列位置的比特的串。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2015/098654 WO2017107124A1 (en) | 2015-12-24 | 2015-12-24 | Scatter reduction instruction |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108475192A true CN108475192A (zh) | 2018-08-31 |
CN108475192B CN108475192B (zh) | 2023-06-02 |
Family
ID=59086556
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201580084824.4A Active CN108475192B (zh) | 2015-12-24 | 2015-12-24 | 分散减少指令 |
Country Status (4)
Country | Link |
---|---|
US (2) | US10191749B2 (zh) |
EP (1) | EP3394720A4 (zh) |
CN (1) | CN108475192B (zh) |
WO (1) | WO2017107124A1 (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104011644B (zh) | 2011-12-22 | 2017-12-08 | 英特尔公司 | 用于产生按照数值顺序的相差恒定跨度的整数的序列的处理器、方法、系统和指令 |
US10223112B2 (en) | 2011-12-22 | 2019-03-05 | Intel Corporation | Processors, methods, systems, and instructions to generate sequences of integers in which integers in consecutive positions differ by a constant integer stride and where a smallest integer is offset from zero by an integer offset |
WO2013095554A1 (en) | 2011-12-22 | 2013-06-27 | Intel Corporation | Processors, methods, systems, and instructions to generate sequences of consecutive integers in numerical order |
EP3394720A4 (en) * | 2015-12-24 | 2019-11-06 | Intel Corporation | DIFFUSION REDUCTION INSTRUCTION |
US10521207B2 (en) * | 2018-05-30 | 2019-12-31 | International Business Machines Corporation | Compiler optimization for indirect array access operations |
US10929145B2 (en) | 2018-12-28 | 2021-02-23 | Intel Corporation | Mask generation using reduction operators and scatter use thereof |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030050941A1 (en) * | 1998-03-31 | 2003-03-13 | Patrice Roussel | Apparatus and method for performing intra-add operation |
US20140013075A1 (en) * | 2011-12-23 | 2014-01-09 | Mostafa Hagog | Systems, apparatuses, and methods for performing a horizontal add or subtract in response to a single instruction |
CN103827815A (zh) * | 2011-09-26 | 2014-05-28 | 英特尔公司 | 用于提供利用跨越和掩码功能的向量加载和存储的指令和逻辑 |
CN103975302A (zh) * | 2011-12-22 | 2014-08-06 | 英特尔公司 | 矩阵乘法累加指令 |
CN104126170A (zh) * | 2011-12-22 | 2014-10-29 | 英特尔公司 | 打包数据操作掩码寄存器算术组合处理器、方法、系统及指令 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH07141327A (ja) * | 1993-04-13 | 1995-06-02 | Nec Corp | ベクトル処理装置 |
US6115812A (en) * | 1998-04-01 | 2000-09-05 | Intel Corporation | Method and apparatus for efficient vertical SIMD computations |
US7624138B2 (en) * | 2001-10-29 | 2009-11-24 | Intel Corporation | Method and apparatus for efficient integer transform |
US7434034B2 (en) | 2004-09-13 | 2008-10-07 | Ati Technologies Inc. | SIMD processor executing min/max instructions |
US8060728B2 (en) | 2007-05-14 | 2011-11-15 | Apple Inc. | Generating stop indicators during vector processing |
WO2012134321A1 (en) | 2011-03-30 | 2012-10-04 | Intel Corporation | Simd integer addition including mathematical operation on masks |
US9411584B2 (en) | 2012-12-29 | 2016-08-09 | Intel Corporation | Methods, apparatus, instructions, and logic to provide vector address conflict detection functionality |
US9501276B2 (en) | 2012-12-31 | 2016-11-22 | Intel Corporation | Instructions and logic to vectorize conditional loops |
US9639503B2 (en) | 2013-03-15 | 2017-05-02 | Qualcomm Incorporated | Vector indirect element vertical addressing mode with horizontal permute |
EP3394720A4 (en) * | 2015-12-24 | 2019-11-06 | Intel Corporation | DIFFUSION REDUCTION INSTRUCTION |
-
2015
- 2015-12-24 EP EP15911123.6A patent/EP3394720A4/en active Pending
- 2015-12-24 US US15/301,206 patent/US10191749B2/en active Active
- 2015-12-24 CN CN201580084824.4A patent/CN108475192B/zh active Active
- 2015-12-24 WO PCT/CN2015/098654 patent/WO2017107124A1/en active Application Filing
-
2018
- 2018-12-20 US US16/227,383 patent/US10635447B2/en active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030050941A1 (en) * | 1998-03-31 | 2003-03-13 | Patrice Roussel | Apparatus and method for performing intra-add operation |
CN103827815A (zh) * | 2011-09-26 | 2014-05-28 | 英特尔公司 | 用于提供利用跨越和掩码功能的向量加载和存储的指令和逻辑 |
CN103975302A (zh) * | 2011-12-22 | 2014-08-06 | 英特尔公司 | 矩阵乘法累加指令 |
CN104126170A (zh) * | 2011-12-22 | 2014-10-29 | 英特尔公司 | 打包数据操作掩码寄存器算术组合处理器、方法、系统及指令 |
US20140013075A1 (en) * | 2011-12-23 | 2014-01-09 | Mostafa Hagog | Systems, apparatuses, and methods for performing a horizontal add or subtract in response to a single instruction |
Non-Patent Citations (2)
Title |
---|
CHEN JUAN ET AL: "Optimizing SIMD Parallel Computation with Non-Consecutive Array Access in Inline SSE Assembly Language", 《2012 FIFTH INTERNATIONAL CONFERENCE ON INTELLIGENT COMPUTATION TECHNOLOGY AND AUTOMATION》 * |
钱兴隆等: "一种SIMD优化中的向量寄存器部分重用方法", 《万方学位论文库》 * |
Also Published As
Publication number | Publication date |
---|---|
US10191749B2 (en) | 2019-01-29 |
US10635447B2 (en) | 2020-04-28 |
EP3394720A4 (en) | 2019-11-06 |
US20170185414A1 (en) | 2017-06-29 |
EP3394720A1 (en) | 2018-10-31 |
US20190196841A1 (en) | 2019-06-27 |
WO2017107124A1 (en) | 2017-06-29 |
CN108475192B (zh) | 2023-06-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108268386A (zh) | 加速硬件中的存储器排序 | |
CN104954356B (zh) | 保护共享的互连以用于虚拟机 | |
CN106843810B (zh) | 跟踪指令的控制流程的设备、方法以及机器可读介质 | |
CN104995599B (zh) | 使用硬件与软件组合的路径概况分析 | |
CN108446763A (zh) | 可变字长神经网络加速器电路 | |
CN105453071B (zh) | 用来提供向量族群计数功能的方法、设备、指令和逻辑 | |
CN105359129B (zh) | 用于提供用于基因组测序和比对的族群计数功能的方法、装置、指令以及逻辑 | |
CN108292215A (zh) | 用于加载-索引和预取-聚集操作的指令和逻辑 | |
CN108475192A (zh) | 分散减少指令 | |
CN105190538B (zh) | 用于移动消除操作中的标志跟踪的系统和方法 | |
CN106030518B (zh) | 用于整理和退出存储的处理器、方法、系统和装置 | |
CN105745630B (zh) | 用于在集群宽执行机器中的存储器访问的指令和逻辑 | |
CN109564552A (zh) | 增强基于每页当前特权等级的存储器访问许可 | |
CN108369509A (zh) | 用于基于通道的跨步分散操作的指令和逻辑 | |
CN106708753A (zh) | 在使用共享虚拟存储器的处理器中加速操作的装置和方法 | |
CN108369516A (zh) | 用于加载-索引和预取-分散操作的指令和逻辑 | |
CN107209723A (zh) | 用于虚拟化的细粒度地址重新映射 | |
CN108475199B (zh) | 用于执行密钥值查找指令的处理设备 | |
CN108369513A (zh) | 用于加载-索引-和-收集操作的指令和逻辑 | |
CN108351811A (zh) | 调度高度并行的应用 | |
CN108369517A (zh) | 聚合分散指令 | |
CN108292232A (zh) | 用于加载索引和分散操作的指令和逻辑 | |
CN110419030A (zh) | 测量非均匀存储器访问(numa)系统内按节点的带宽 | |
CN108694056A (zh) | 用于基于二进制翻译的微处理器的混合原子性支持 | |
CN108431771A (zh) | 融合乘加(fma)低功能单元 |
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 |