CN104025067B - 具有由向量冲突指令和置换指令共享的全连接互连的处理器 - Google Patents

具有由向量冲突指令和置换指令共享的全连接互连的处理器 Download PDF

Info

Publication number
CN104025067B
CN104025067B CN201180076104.5A CN201180076104A CN104025067B CN 104025067 B CN104025067 B CN 104025067B CN 201180076104 A CN201180076104 A CN 201180076104A CN 104025067 B CN104025067 B CN 104025067B
Authority
CN
China
Prior art keywords
vector
instruction
data element
unit
full connection
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.)
Active
Application number
CN201180076104.5A
Other languages
English (en)
Other versions
CN104025067A (zh
Inventor
A·T·福塞斯
D·R·布拉德福德
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of CN104025067A publication Critical patent/CN104025067A/zh
Application granted granted Critical
Publication of CN104025067B publication Critical patent/CN104025067B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30021Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3818Decoding for concurrent execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Advance Control (AREA)
  • Complex Calculations (AREA)

Abstract

一种装置,包括用于解码置换指令和向量冲突指令的解码单元。向量执行单元耦合于该解码单元并包括全连接互连。该全连接互连具有用于接收至少一个源向量的至少四个相应数据元素的至少四个输入。该全连接互连具有至少4个输出。该至少四个输入中的每一个与该至少四个输出中的每一个耦合。该执行单元还包括置换指令执行逻辑,其与所述至少四个输出相耦合并且能够操作以响应于所述置换指令而存储第一向量结果。该执行单元还包括向量冲突指令执行逻辑,其与所述至少四个输出相耦合并且能够操作以响应于所述向量冲突指令而将第二向量结果存储在目的地存储位置中。

Description

具有由向量冲突指令和置换指令共享的全连接互连的处理器
技术领域
本发明的技术领域一般地涉及计算科学,尤其涉及处理器的执行逻辑。
背景技术
两种类型的处理器架构在计算机科学领域中被广泛认可:“标量”和“向量”。标量处理器被设计成执行对单个数据集进行操作的指令,而向量处理器被设计成执行对多个数据集进行操作的指令。图1A和图1B呈现比较性示例,该比较性示例展示了标量处理器与向量处理器之间的基本差异。
图1A示出标量AND(与)指令的示例,其中单个操作数集A和B被“与”在一起以产生单数(或“标量”)结果C(即,AB=C)。相比之下,图1B示出向量AND指令的示例,其中两个操作数集A/B和D/E被并行地分别求与以同时产生向量结果C、F(即,A.AND.B=C和D.AND.E=F)。
如本领域所公知的,通常输入操作数和输出结果两者均存储在专用寄存器中。例如,许多指令将具有两个输入操作数。因此,两个不同的输入寄存器将被用于临时存储相应输入操作数。此外,这些相同指令将产生输出值,该输出值将被临时存储在第三(结果)寄存器中。在图1A和图1B中观察到相应输入101a,b和102a,b以及结果寄存器103a,b。值得注意的是,“标量”对比“向量”表征是容易辨别的。
即,观测到图1A的标量设计的输入寄存器101a和102a仅仅保存标量值(分别为A和B)。同样,还观测到图1A的标量设计的结果寄存器103a仅保存标量值(C)。与之形成对比的是,观察到图1B的向量系统的输入寄存器101b和102b保存向量(在寄存器101b中保存A、D,以及在寄存器102b中保存B、E)。同样,还观测到图1B的向量系统的结果寄存器103a保存向量值(C,F)。根据术语学,图1B的向量系统的寄存器101b、102b和103b中的每一个的内容可被全局地称为“向量”,并且该向量内的各个标量值中的每一个可被称为“元素”。因此,例如,观察到寄存器101b存储“向量”A、D,“向量”A、D由“元素”A和“元素”D组成。
假定向量操作对应于并行执行的多个操作的执行,那么当对输入向量的元素的一个操作依赖于对相同输入向量内的另一元素执行的另一操作时,向量操作上就会出现问题。
附图简述
在附图的图形中作为示例而非限制地说明了本发明,其中类似的附图标记指示类似的元件,并且其中:
图1a、b对比标量和向量处理;
图2示出根据一实施例的可与被设计成检测向量冲突的指令一起执行的方法;
图3示出图2的方法的实施例的伪代码表示;
图4a、b涉及向量冲突指令的第一实施例;
图5a、b(现有技术)涉及vptest指令;
图6a、6b涉及vpand指令;
图7示出处理器核的实施例。
图8是具有向量执行单元的处理器的示例实施例的框图,该向量执行单元包括共享全连接互连(full-connected interconnect)的置换指令执行逻辑和向量冲突指令执行逻辑。
图9是向量置换操作的示例实施例的框图。
图10是向量执行单元的示例实施例的框图,该向量执行单元包括共享全连接互连的置换指令执行逻辑和向量冲突指令执行逻辑。
图11是全连接非阻挡互连(fully-connected non-blocking interconnect)的示例实施例的电路框图。
图12是共享全连接互连的4数据元素置换指令执行逻辑、和4元素向量冲突指令执行逻辑的详细示例实施例的电路框图。
图13是示出将一组4个M位比较器与给定互连输出耦合的示例实施例的进一步细节的电路框图。
图14是共享全连接互连的8数据元素置换指令执行逻辑、和8数据元素向量冲突指令执行逻辑的详细示例实施例的框图。
图15是为置换指令和向量冲突指令共享全连接互连的方法的示例实施例。
图16A是示出根据本发明的实施例的示例性有序流水线以及示例性寄存器重命名、无序发布/执行流水线两者的框图。
图16B是示出根据本发明的实施例的要包括在处理器中的有序架构核的示例性实施例以及示例性寄存器重命名、无序发布/执行架构核两者的框图。
图17A是根据本发明的实施例的单处理器核、连同其与管芯上(on-die)互联网络的连接及其第二级(L2)高速缓存的本地子集的的框图。
图17B是根据本发明的各实施例的图17A中的处理器核的一部分的展开图。
图18是根据本发明的实施例的可具有不止一个核、可具有集成存储器控制器、并且可具有集成图形的处理器的框图。
图19示出根据本发明的一个实施例的系统的框图。
图20示出根据本发明的实施例的第一更具体示例性系统的框图。
图21示出根据本发明的实施例的第二更具体的示例性系统的框图。
图22示出根据本发明的实施例的片上系统(SoC)的框图。
图23是根据本发明的各实施例的对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。
具体实施方式
回忆背景技术中提及,当对输入向量元素的一个操作依赖于对相同输入向量的另一元素执行的另一操作时,向量操作上就会出现问题。会出现这种特定问题的实例是使用“收集(gather)”和“分散(scatter)”指令。
例如,收集指令通过“收集”由数据数组的索引指定的数据值来帮助构造用于随后向量操作的输入向量。例如,如果数据数组“A”具有100个条目,则具有“gather A[15;34;66;78]”形式的收集指令将取数组A的第15、34、66和78索引位置上的数据值。所取的数据值随后可被用于形成用于向量操作的输入向量的数据元素。“分散”指令可被视为“收集”指令的逆指令。具体地,具有“sc atter A[15;34;66;78]”形式的分散指令将存储值(例如,由向量操作所产生的输出向量的相应元素)至数组A的第15、34、66和78索引位置。
因此,具有以下形式的指令序列:
S<=gather A[a;b;c;d];
T<=vector operation on S;
scatter(A[a;b;c;d];T)
将:1)从A的a、b、c和d索引位置取数据操作数;2)对这些操作数执行向量操作;以及3)将结果的元素分别存储在A的a、b、c和d索引位置中。
在一些情况下,被提供给收集(和分散)指令的索引值集反映向量操作内的依赖关系。例如,具有以下形式的指令序列:
S<=gather A[a;b;c;a];
T<=vector operation on S;
scatter(A[a;b;c;a];T)
可反映对最左边A[a]值执行的向量操作依赖于对最右边A[a]值执行的向量操作的结果。即,正确的操作对应于:1)operation(rightmost A[a])=>R;2)oper ation(R)。如果没有采取关于数据依赖关系的预防措施,那么可能获得不正确的结果。具体地,在该示例中,A[a]的最终结果将是operation(A[a])而不是opera tion(R)。
图2提供当在用于向量操作的输入向量内标识出依赖关系时可用于成功地考虑到依赖关系的方法。具体地,图2的方法将适当地避免对相同输入向量内的相同操作数(例如,由至少两个相同值的索引所标识)同时执行操作。相反,将以循环序列来分别地执行操作,其中针对出现多次的索引值的每个分别实例执行每个循环。
例如,如果对于输入向量,相同的索引值出现三次,那么向量操作将被执行三次。以此方式,数据依赖关系得到考虑,因为第二操作使用第一操作的结果作为输入操作数并且第三操作使用第二操作的结果作为输入操作数。
图3示出图2的方法的实施例的伪代码流。图4a、b至图6a、b示出附加细节以帮助讨论图3的伪代码流。参照图2,初始地,标识具有依赖关系的索引(201)。在此,如上所述,具有依赖关系的索引可对应于数组的相同索引,其中这些相同索引定义相同输入向量的不同元素。参照图3,数组的索引被指定为b=7,2,7,1,7。如此,存在三个具有依赖关系的索引,因为最右边、中间和最左边索引值各自具有相同的值(7)。另一初始控制向量是elements_left_mask(元素_左边_掩码)330,其表示b中尚未被用于收集/向量操作/分散过程序列的元素。在流程开始时,elements_left_mask=1 1 1 1 1,其指示b的所有五个元素均尚未被处理。
图3的伪代码示出vconflict(b,b)(向量冲突(b,b))指令300的执行提供indices_having_dependency_relationship(索引_具有_依赖_关系)数据结构301。图4A示出vconflict(b,b)指令的方法401,且图4B示出可被设计到半导体芯片中以执行vconflict(b,b)指令的硬件逻辑设计。如在图4A和图4B所观察到的,vconflict(b,b)指令将输入向量的每个元素与另一输入向量的每个元素相比较并提供每次比较401的结果。在图3的伪代码方法中,vconflict(b,b)指令在对这两个输入利用相同向量(b)的情况下来执行。
图4b的硬件设计可利用规定控制器410的操作的微代码和/或状态机办法来尝试,使得复用器411和分用器412的相应信道选择以正确的一致来操作。具体地,控制器410将左边的索引寄存器413特定的一个索引值复用到比较器主干414中。比较器主干414将选择的索引值与右边的索引寄存器415中的每个索引值相比较。分用器412将比较器主干414的输出引导至输出寄存器416的与左边的索引寄存器413的所选值对准的片段。在替换办法中,比较器主干可具有n*n个比较器使得不需要复用器、分用器或控制器(即,对于出现在输出寄存器416中的比较结果的每个位存在单独的比较器)。
参照图3的indices_having_dependency_relationship数据结构301,注意数据结构301的最左边片段302提供当b的最左边值与b的每个值单独地比较时的比较结果。值得注意的是,在片段302中出现五个结果(对于b的每一个值有一个结果),且片段302内的结果与b的诸值相应地对准。如此,数据结构301的最左边片段302是“10101”,其示出b的最左边值与b的最右边值、b的中间值以及它自己(b的最左边值)具有依赖关系。数据结构301的片段303对应于b的从左边数第二个值(2)的比较,且示出该值2除了它自己外在b中没有依赖关系(即,片段302是01000)。具有值10101的片段304指示b的中间值(7)与它自己以及b的最左边值和最右边值具有依赖关系。具有值00010的片段305指示b的从右边数第二个值只与它自己具有依赖关系。具有值10101的片段306指示b的最右边值(7)与b的最左边值和中间值以及它自己具有依赖关系。
返回图2,一旦具有依赖关系的索引已被标识(例如,如在图3的indices_having_dependency_relationship数据结构301中所表示的),就针对随后向量操作标识非冲突索引集。在图3的伪代码示例中,在indices_permitted_for_exe cution(索引_被准许_用于_执行)数据结构331中表示非冲突索引集。在此,至少部分地通过利用indices_having_dependency_relationship数据结构301和o rder_of_dependency_mask(依赖性_掩码_的_次序)309执行逻辑操作来构造in dices_permitted_for_execution数据结构331。
order_of_dependency_mask309指明应以何种次序来处理具有依赖关系的索引。在图3的特定示例中,从右到左对依赖性进行排序使得具有依赖关系的最右边索引被首先用于向量操作,然后,具有依赖关系的下一个最右边索引被用于随后的向量操作循环,等等。换言之,按从右到左跨过B的次序来为每个向量操作选择具有依赖关系的索引。对于目前示例的b=7,2,7,1,7的特定值,这对应于最右边的值7被用于第一收集/向量操作/分散迭代、中间值7被用于第二收集/向量操作/分散迭代,以及最左边值7被用于第三收集/向量操作/分散迭代。
order_of_dependency_mask 309通过将“1”置于片段在掩码309内的相应位置的“右边”来反映该次序。即,片段310表示b的最右边值。利用上述排序规则(在依赖性序列中右边的值在左边的值之前被执行),最右边值将不具有使其延迟用于向量操作的任何依赖性(即使它被包括在依赖性关系中)(即,它通过第一操作循环被执行)。如此,片段310的值是00000。第二片段311反映了,如果b的从右边数第二个值在b内具有依赖性,那么该依赖性将是对于b的最右边值而言的。如此,它的值是00001。第三片段312反映了,如果b的中间值在b内具有依赖性,那么该依赖性将针对b的从右边数第二个值和/或最右边值。如此,它的值是00011。第四片段313反映了,如果b的从左边数第二个值在b内具有依赖性,那么它将针对b的中间值、从右边数第二个值和/或最右边值。如此,它的值是00111。第五片段314反映了,如果b的最左边值在b内具有依赖性,那么它将针对b的从左边数第二个值、中间值、从右边数第二个值和/或最右边值。如此,它的值是01111。
回忆起在图3的示例中至少部分地通过利用indices_having_dependency_relationship数据结构301和order_of_dependency_mask309执行逻辑操作来构造indices_permitted_for_execution数据结构331。在此,通过执行接受indices_ha ving_dependency_relationship数据结构301和order_of_dependency_mask 309作为输入的vptest指令来构造conflicted_out_indices(冲突_出局_索引)数据结构308。
在图5A和图5B中分别提供了Vptest指令的操作的实施例和用于vptest指令的硬件设计的实施例。在此,参照图5A,比较两个输入向量的相同位置的片段的相同位置的位(501)。标识至少一组相同位置的具有相同逻辑值的位的片段(502),以及应用掩码(503)。
参照图5b,将第一输入向量放置在寄存器510中,并将第二输入向量放置在寄存器511中。利用AND门513将在这两个向量的其相应片段内具有相同位置的位对进行逻辑与(AND)。如果任何AND门产生1,那么将1登记在输出520的片段中,该片段对应于其位被比较的相同位置的片段。例如,控制器514将导致复用器515、516选择片段517和518的位。在此,片段517和518中的每一个对应于寄存器510、511内其相应向量的最左边片段,因此被置于其相应向量内的相同位置。通过AND门513将片段517和518的相同位置的位求与。如果任何一对被求与的位中的每一个具有值1,那么1将被记录在寄存器520的片段519中(经由控制器514控制分用器521的信道选择)。随后对寄存器520的内容应用掩码层522以产生输出523。
对于图3的特定伪代码示例,indices_having_dependency_relationship数据结构301被放置在寄存器510中且order_of_dependency_mask309被放置在寄存器511中。用于这些输入向量的上述图5B的vptest电路设计的操作在寄存器520中产生conflicted_out_indices数据结构308。conflicted_out_indices数据结构308标识哪些索引由于b内的依赖性而从即将到来的向量操作循环中冲突出局。如图3所示,conflicted_out_indices数据结构308具有值10100,其指示b的中间和最左边索引值因为依赖性(其正是b的最右边索引值)将不在即将到来的向量操作中执行。conflicted_out_indices数据结构314的逻辑逆(!_conf licted_out_indices数据结构307)随后对着elements_left_mask 330被掩码。在初始迭代中,elements_left_mask是1 1 1 1 1。如此,寄存器520中的conflic ted_out_indices向量作为indices_permitted_for_execution向量331呈现在输出寄存器523中。
返回图2,随后对被准许用于执行的索引执行向量操作(203)。图3的伪代码示例再次指代收集、向量操作、分散指令序列315。如此,图3示出:i)收集(gather)操作,其选择A中由indices_permitted_for_execution数据结构331标识的值;ii)对A的被收集的值执行向量操作;以及iii)分散(scatter)操作,其将该向量操作的结果存储回在数据结构331中标识的索引中。该向量操作基本上可以是任何向量操作。
参照图2,如果b的所有索引已被用于向量操作,那么过程完成(204),否则重新确定具有依赖关系的索引(201)。在图3的实施例中,通过将eleme nts_left_mask重新定义为从最新近的收集/向量操作/分散序列中冲突出局的元素来更新elements_left_mask(332)。在这种情况下,新的elements_left_mas k 332对应于值1 0 1 0 0,其指示了因为b的中间值和最左边值未被用于上一收集/向量操作/分散序列,所以它们仍然被“留待”处理。因此处理未完成且需要执行另一迭代。包括在依赖性关系中的索引值中的第一个索引值(最右侧的索引值)的执行导致b的索引值之间的依赖性关系的改变。具体而言,因为b的最右侧索引值已经被用于向量操作,所以使用b的中间索引的向量操作不再需要被延迟。indices_having_dependency_relationship数据结构301因此被更新以反映此改变。
在图3的实施例中,通过执行vpand指令来更新indices_having_dependenc y_relationship数据结构301,vpand指令接受indices_having_dependency_relati onship数据结构301和conflicted_out_indices数据结构308作为输入。在图6a中观察到vpand指令的方法的实施例。如在图6A中观察到的,vpand指令接受n位的第一块以及具有多个元素的向量,每个元素具有n位。随后执行此具有n位的第一块对着该向量中的每个元素的按位求与。图6b呈现了可被设计到半导体芯片中的vpand指令的可能逻辑设计。
参考图3,vpand指令的n位的块对应于conflicted_out_indices数据结构308,并且vpand指令的输入向量对应于indices_having_dependency_relationship数据结构301。当将conflicted_out_indices数据结构308对着indices_having_de pendency_relationship数据结构301内的元素中的每一个元素进行按位求与时,产生新的indices_having_dependency_relationship数据结构316。这里,与conf licted_out_indices数据结构308的按位求与具有从indices_having_dependency_r elationship信息中丢弃b的最右侧索引的作用。换言之,如conflicted_out_indi ces数据结构308的左右侧位置中的0所反映的,b的左右侧索引值已被准许在第一向量操作315中被执行。如此,它不再是现有依赖关系的一部分。vpand指令所执行的逻辑求与标识出对b的最右侧索引向量的执行有依赖性的那些索引(其中的下一个索引在下一向量操作中可以自由地使用)。
如此,用新indices_having_dependency_relationship数据结构316(以及原始的order_of_dependency_mask 309)对vptest指令的另一执行产生了新的con flicted_out_indices数据结构317。然而,与初始序列不同,vptest指令的输出用elements_left_mask332进行掩码将导致vptest指令的输出与conflicted_out_ind ices数据结构317的逻辑取反不同。具体而言,新的indices_permitted_for_exe cution 333将具有00100的值,该值对应于b的下一冲突索引去掉了b中已经被执行的索引。如此,仅用b的中间索引来执行319下一轮的收集、向量操作、分散指令序列。再简要参考图2,此时,第二轮遍历过程202刚完成。
然而,在完成操作319之后,从对新更新的elements_left_mask 334的检查可见,仍未将b的所有索引均用于该收集/向量操作/分散过程。如此,b的索引间的依赖关系仍需要进一步检查。
如前面一样,通过用最新的indices_having_dependency_relationship和conflicted_out_indices数据结构316、317作为输入来执行vpand(indices_having_dependency_relationship;conflicted_out_indices)指令来更新indices_having_dependency_relationship数据结构。结果是另一新的indices_having_dependency_relationship数据结构320。此处,vpand指令所执行的逻辑求与标识出对b的中间索引向量的执行有依赖的那些索引(其中的下一个索引(即,b的最左侧索引)在下一向量操作中可以自由地使用)。
如此,用新indices_having_dependency_relationship数据结构320(以及原始的order_of_dependency_mask 309)的vptest指令的另一执行产生另一新的conflicted_out_indices数据结构321。经更新的elements_left_mask 334对着数据结构321的逻辑反进行掩码便对应于另一新的indices_permitted_for_execution 数据结构335 10000。此新的indices_permitted_for_execution数据结构335指示,对于下一收集/向量操作/分散序列,只需要处理b的最左侧索引。再简要参考图2,此时,第三轮遍历过程202刚完成。
如此,仅用b的最左侧索引来执行323最后的收集、向量操作、分散指令序列。随着elements_left_mask336后续更新到00000的值,不需要其他循环并且执行完成。
参考图3的伪代码,注意,如初始vconflict(b,b)指令300所表示的,此特定示例适合于以下情形:在同一向量(此实例中的向量b)中检测到冲突。更一般地,一个或多个索引集合可被用来创建用于向量操作的输入向量(诸如用于图3中观察到的收集/向量操作指令序列的输入向量)。类似地,一个或多个索引集合可被用于将输出向量写到存储器(诸如图3中的分散)。可在诸向量之间检测到用于构造输入向量和/或将输出向量写到存储器的索引之间的冲突,其中诸向量可以相同或不同。同样,图3展示了其中诸向量相同的例子(b和b)。然而,在其他情形下,可以通过比较不同向量(例如:vconflict(b,c))来检测到冲突的索引。例如,第一向量(例如,b)可被用作构建用于后续向量操作的输入向量的基础,而另一向量(例如,c)可被用作将向量操作的结果分散到存储器中的基础。如此,应当理解,vconflict指令可与相同或不同输入向量一起使用。
图7示出一般的处理器核700,该处理器核被认为描述许多不同类型的处理器核架构,例如复杂指令集(CISC)、精简指令集(RISC)和超长指令字(VLIW)。图7的一般处理器核700包括:1)获取单元703,其获取指令(例如,从高速缓存或存储器);2)解码单元704,其解码指令;3)调度器单元705,其确定指令发布到执行单元706的定时和/或次序(注意,调度器是任选的);4)执行单元706,其执行指令;5)引退单元707,其表示指令的成功完成。值得注意的是,处理器核可以部分地或完全地包括或可以不包括微代码708,以控制执行单元706的微操作。
值得注意的是,所述执行单元能够执行vconflict、vptest和vpand指令。支持这些指令的逻辑电路可以跨不同的逻辑执行单元散布、包括在同一执行单元中、或者这些指令中的至少两个指令可以能够从单一执行单元执行。执行单元还支持向量指令。执行单元还可以能够支持gather(收集)和scatter(分散)指令。
趋于限制向量冲突指令被广泛地包括在指令集架构中的一个因素是要高效地实现向量冲突指令往往具有挑战性。向量冲突指令的实现通常涉及相对大量的比较。例如,某些向量冲突指令将输入向量或即源向量的每个元素与同一源向量的每个其他元素进行比较。其他向量冲突指令将一个源向量的每个元素与一不同源向量的每个元素进行比较。尤其是在其中被比较的数据元素的数量相对很高(例如,至少8个)时,这涉及相对大量的比较。而且,随着时间推移,向量寄存器的宽度和存储于其中的数据元素的数量趋向于增加。结果就是,通常需要对元素进行很大程度的路由以便允许这种比较得以进行。提供广泛的互连来并行地或同时地执行对元素的这种路由和/或比较通常会显著增加用于实现向量冲突指令的电路的面积、成本和功耗。相反,串行地执行这类元素路由和/或比较(例如,通过多个微指令)通常要花费大量的处理时间。下面公开了快速而高效地实现向量冲突指令的附加方式。
图8是具有向量执行单元806的处理器800的示例实施例的框图,该向量执行单元包括共享全连接互连(full-connected interconnect)860的置换指令执行逻辑856和向量冲突指令执行逻辑858。该处理器可以是各种复杂指令集计算(CISC)处理器、各种精简指令集计算(RISC)处理器、各种超长指令字(VLIW)处理器、其各种混合、或完全其他类型的处理器中的任何处理器。在一些实施例中,处理器可以是通用处理器(例如,具有在台式、膝上型等计算机中使用的类型的通用微处理器),但这不是必须的。替换地,处理器可以是专用处理器。合适的专用处理器的示例包括但不限于:图形处理器、网络处理器、通信处理器、加密处理器、协处理器、嵌入式处理器、数字信号处理器(DSP)以及控制器(例如,微控制器),仅列举数例。处理器可被包括在计算机系统、服务器、蜂窝电话、机顶盒、和具有一个或多个处理器的各种其他电子设备中。在一些情况下,这些系统具有存储器(例如,动态随机存取存储器(DRAM))。
处理器包括解码单元804。在操作期间,可向解码单元提供置换指令852和向量冲突指令854。置换指令和向量冲突指令可彼此一起被包括在代码序列中,并且可以在大致相同的时间或在完全不同的时间按任何次序来接收。置换指令和向量冲突指令可代表该处理器所认识(例如,通过解码器)的机器指令、宏指令、或控制信号。指令处理装置可具有能够操作以处理所述指令的专用或特定的逻辑(例如,硬件、固件、软件或某种组合(例如,潜在地具有某种固件和/或软件的硬件))。
解码单与能够操作以解码置换指令并且能够操作以解码向量冲突指令。解码单元可将每条所接收的更高级别机器指令解码为一个或多个经解码的指令。特别是,该解码单元可将置换指令解码为一个或多个经解码的置换指令853,并且该解码单元可将该向量冲突指令解码为一个或多个经解码的向量冲突指令855。该一个或多个经解码的指令可代表一个或多个较低级的微操作、微代码进入点、微指令、或其他较低级的指令或控制信号,它们反映和/或衍生自所接收的较高级的指令。这一个或多个较低级指令或控制信号可通过一个或多个较低级(例如,电路级或硬件级)操作来实现较高级指令的操作。该解码单元可以使用各种不同的机制来实现。合适机制的示例包括但不限于微代码只读存储器(ROM)、查找表、硬件实现、可编程逻辑阵列(PLA)、用于实现本领域已知的解码单元的其他机制等。
替换地,不是具有解码单元804,在一个或多个其它实施例中,可代之以使用指令仿真器、转译器、变形器(morpher)、解释器或者其他指令变换逻辑。各种不同类型的指令变换逻辑在本领域中是已知的,并且可在软件、硬件、固件、或者其组合中实现。指令变换逻辑可接收向量冲突和/或置换指令、仿真、转译、变形、解释、或者以其他方式将该指令转换成一个或多个对应的衍生指令或控制信号。在其它实施例中,指令处理装置可具有解码单元和附加的指令变换逻辑两者。例如,指令处理装置可具有指令转换逻辑和解码单元,指令转换逻辑用于将每个向量冲突和置换指令转换为一个或多个衍生指令,而解码单元用于将衍生指令解码为该处理器的原生硬件能够执行的一个或多个较低级指令或控制信号。指令转换逻辑中的一些或全部可位于处理器的其余部分的管芯外,诸如在单独的管芯上或在管芯外的存储器中。
向量执行单元806具有与解码单元804的输出相耦合的输入。经解码的置换指令853和经解码的向量冲突指令855可各自被提供至向量执行单元。换言之,经解码的置换指令和经解码的向量冲突指令两者均被提供至同一向量执行单元。该向量执行单元能够操作以执行或处理经解码的置换指令和经解码的向量冲突指令两者。在各实施例中,向量执行单元可包括向量算术逻辑单元、向量逻辑单元、或另一向量功能单元。例如,该向量执行单元能够响应于置换指令和/或作为置换指令的结果而操作以将结果存储在该置换指令所指示的目的地存储位置(例如,诸向量寄存器850中的一寄存器或另一架构上可见的存储位置)中,其中该结果包括来自一个或多个源向量的、已经如该置换指令所指定的那样置换、混洗(shuffle)、或重新布置的数据元素。作为另一示例,该向量执行单元能够响应于向量冲突指令和/或作为向量冲突指令的结果而将结果存储在该向量冲突指令所指定的目的地存储位置(例如,诸向量寄存器中的一寄存器)中,其中该结果包括对一个或多个源向量的元素所执行的元素间比较的结果(例如,如上面图3中示出并描述的indices_having_dependency_rel ationship数据结构301)。该执行单元可包括能够操作以实现置换指令和向量冲突指令的操作(例如,为每个指令执行一个或多个相关联的微指令)的执行逻辑(例如,硬件(例如集成电路)、固件、软件或组合(例如,潜在地具有某种固件和/或软件的硬件))。
再次参考图8,该执行单元包括置换指令执行逻辑856。该执行单元还包括向量冲突指令执行逻辑858。该置换指令执行逻辑和该向量冲突指令执行逻辑共享全连接互连860。该全连接互连包括至少四个互连输入以及至少四个互连输出,其中每个互连输入与每个互连输出互连。有利地,在向量冲突指令执行逻辑和置换指令执行逻辑之间共享全连接互连可允许快速而高效地实现向量冲突指令和置换指令两者,同时避免在向量冲突指令执行逻辑和置换指令执行逻辑中的每一者被部署在不同执行单元和/或以其他方式使用了分开的专用全连接互连时通常会发生的成本、面积和功率增加。
该处理器还包括向量寄存器850。该向量寄存器与该执行单元双向耦合。该向量寄存器表示板上处理器存储位置。每个向量寄存器能够操作以存储向量(例如,打包的数据)。该向量寄存器代表架构寄存器。短语架构寄存器、寄存器组、以及寄存器在本文中用于表示对软件和/或编程器(例如,软件可见的)可见的寄存器和/或由宏指令指定来标识操作数(operand)的寄存器,除非另外予以指定或清楚明显可知。这些寄存器与给定微架构(例如,临时寄存器、重排序缓冲器、引退(retirement)寄存器等)中的其他非架构式寄存器形成对比。该向量寄存器可使用公知技术在不同的微架构中以不同的方式实现,并且不限于任何已知的特定类型的电路。各种不同类型的寄存器可适用,只要它们能够存储并提供在本申请中描述的数据。合适类型的寄存器的示例包括但不限于专用物理寄存器、使用寄存器重命名的动态分配的物理寄存器、及其组合。
为了避免混淆本描述,已示出和描述了相对简单的处理器。在其他实施例中,处理器可任选地包括其他公知组件,诸如举例而言,指令提取单元、指令调度单元、分支预测单元、指令和数据的高速缓存、指令和数据转译后备缓冲器(translation lookasidebuffer)、预取缓冲器、微指令队列、微指令定序器、总线接口单元、第二或更高级高速缓存、引退单元(retirement unit)、寄存器重命名单元、以及上述的各种不同组合。而且,其他实施例可具有多个不同类型的执行单元,其中至少一个执行单元包括至少部分共享全互连式互连的置换指令执行逻辑和向量冲突指令执行逻辑。其它实施例可具有多个核、逻辑处理器、或执行引擎。所述核、逻辑处理器、或执行引擎的至少一者可包括至少部分共享全互连式互连的置换指令执行逻辑和向量冲突指令执行逻辑。应理解,实际上在处理器中存在这些不同组件的众多不同的可能组合和配置,并且本发明的范围不限于任何已知此类组合或配置。
图9是向量置换操作的示例实施例的框图。该向量置换操作可响应于置换指令和/或作为置换指令的结果而执行。置换指令在本领域中有时被称为混洗指令。该置换指令可显式指定或以其他方式指示源向量964。作为示例,源向量可存储在源分组数据寄存器中或源存储器位置中。所示源向量包括4个源数据元素,它们被标记为A1-A4。这些数据元素可代表整数、浮点数、或其他数据。向量响应于该置换指令和/或作为该置换指令的结果,结果向量被存储。作为示例,结果向量可存储在该置换指令显式指定或以其他方式指示的目的地打包数据寄存器或目的地存储器位置中。该结果包括来自源向量的、已经如该置换指令所指定地被置换、混洗或重新安排的数据元素。具体而言,在图示中,每个结果数据元素可包括源数据元素A1-A4中的任一者。在一些实施例中,结果向量中的每个元素可具有对应的索引,该索引指向该源向量的一数据元素。这仅仅是置换指令的一个解说性示例。其他置换指令在本领域中是已知的。其他置换指令可对具有更多数据元素(例如,8个、16个、32个、64个等)的源向量和/或结果向量执行置换操作,其中源数据元素和结果数据元素的数量相同或不同。而且,所示向量置换操作是对单一源向量执行的向量,尽管也可对来自两个或多个源向量的数据元素执行其他置换操作。
图10是向量执行单元1006的示例实施例的框图,该向量执行单元包括共享全连接互连1060的置换指令执行逻辑1056和向量冲突指令执行逻辑1058。该向量执行单元能够操作以执行置换指令和向量冲突指令两者(例如,执行从这些指令衍生的微指令)。作为示例,该向量执行单元可以是能够操作以比较和置换/混洗数据元素的向量算术逻辑单元(ALU)、向量逻辑单元、或其他类型的向量功能单元。
源向量1064可被输入至该向量执行单元。该源向量具有N个数据元素(A1-AN),其中N是至少为4的整数。在各示例实施例中,N可以是4、8、16、32或64。N不限于是2的幂,尽管实践中通常如此。该向量执行单元包括全连接互连1060。该全连接互连具有N个互连输入1068,以及P个互连输出1072,其中N和P每个是至少为4的不必相等的整数。N个互连输入中的每一个均耦合以接收N个数据元素(A1-AN)中的相应的一不同的数据元素。该N个数据元素中的每个数据元素可以是M位宽的。在各示例实施例中,M位可以是8位、16位、24位、32位、48位或64位。M不必限于2的幂。该全连接互连能够操作以将N个互连输入中的每一个连接到P个互连输出中的每一个。例如,所有N个数据元素(A1-AN)均可以在P个互连输出的每一个处可用。
在一些实施例中,该全连接互连是非阻挡互连。在非阻挡互连中,任何输入可不受约束地被路由至任何输出。通过比较进行阻挡的互连具有中间或分层的复用级或选择级,所述复用级或选择级对可将哪些输入路由到哪些输出施加约束。例如,在阻挡互连中,如果给定输入被路由到给定输出,则它可对另一输入被路由到另一输出施加约束(例如,一中间复用器级可仅能够选择这两个输入之一来传播到输出)。而非阻挡互连不是这样的,而这样为实现向量冲突指令提供了某种优势。替换地,该互连可以是阻挡互连,并且可添加附加的互连来向向量冲突执行逻辑进行馈送以便容纳此互连的阻挡性质所施加的限制/约束。
在一些实施例中,该全连接非阻挡互连包括全交叉(full crossbar)。交叉可按满矩阵的方式将N个输入连接到P个输出。交叉在本领域中有时被称为交叉点互连、交叉点网络、矩阵互连、矩阵网络、完全网格等。在一些实施例中,交叉是该向量执行单元的唯一交叉和/或该向量执行单元仅具有一个互连,其中N个输入全连接到P个输出,其中N和P各自至少为4。
再次参考图示,该执行单元包括向量冲突指令执行逻辑1058和置换指令执行逻辑1056。向量冲突指令执行逻辑和置换指令执行逻辑中的每一个均与该全连接互连耦合。具体而言,该向量冲突指令执行逻辑的输入耦合于该全连接互连的P个互连输出中的每一个。同样,该置换指令执行逻辑的输入耦合于该全连接互连的P个互连输出中的每一个。在图示中,P个互连输出中的每一个均具有相应的分支1074,其中该输出的每条线均被分为两条或更多条线。这些分支中的每个分支的一个分叉(fork)被提供给该向量冲突指令执行逻辑,而这些分支中的每个分支的另一分叉被提供给该置换指令执行逻辑。该互连的输出中的每一个输出均分支到该置换指令执行逻辑和该向量冲突指令执行逻辑。替换地,不是使用此类分支,而是可任选地使用单独的复制线。
该向量冲突指令执行逻辑和置换指令执行逻辑两者均共享并使用该全连接互连。在使用期间,来自源操作数(例如,源向量1064)的数据元素通过该全连接互连被路由、连接、传导、耦合或传达到该向量冲突指令执行逻辑和该置换指令执行逻辑中的每一者。在图示中,为了简明,示出了单个源向量,然而置换指令和向量冲突指令所使用的源向量可以相同,或者在更常见情况下可以不同。即,该向量冲突指令执行逻辑和该置换指令执行逻辑中的每一者均耦合以通过/从该全连接互连接收来自源操作数的数据元素。
利用全连接互连的向量冲突指令执行逻辑能够操作以实现该向量冲突指令的操作。在一些实施例中,该向量冲突指令的操作是要检测源向量内的重复数据元素。在一些实施例中,该向量冲突指令的操作是要测试或比较源向量的每个数据元素以找出与该源向量的所有其他数据元素的相等。在一些实施例中,每个数据元素比较结果可形成第一结果向量1067的数据元素内的位向量。第一结果向量的特定示例是图3的indices_having_dependency_relationship数据结构301。该向量冲突指令执行逻辑可以可操作以响应于该向量冲突指令而将该第一结果向量存储在目的地存储位置(例如,向量寄存器或存储器中的位置)中。
利用全连接互连的置换指令执行逻辑能够操作以实现该置换指令的操作。在一些实施例中,该置换指令可将来自一个或多个源向量(例如,源向量1064)的任何数据元素复制或存储到第二结果向量1066中的任何数据元素。在一些实施例中,该置换操作可以类似于针对图9所讨论的任何操作。该置换指令执行逻辑可以可操作以响应于该置换指令而将该第二结果向量存储在目的地存储位置(例如,向量寄存器或存储器中的位置)中。
在向量冲突指令执行逻辑和置换指令执行逻辑之间共享全连接互连可提供某些优点。举例来说,它可允许快速和高效地实现向量冲突指令和置换指令两者,而同时避免如果向量冲突指令执行逻辑和置换指令执行逻辑中的每一个被部署在不同执行单元中和/或以其他方式使用分开的专用全连接互连的情况下通常会发生的成本、面积和功耗增加。一般而言,该网络的面积和功耗由连线/互连支配。该连线/互连通常很长,通常占据大量的空间,并且用来驱动连线/互连上的信号的电路通常消耗大量的功率。用于实现针对冲突/置换操作的选择和比较的逻辑门(例如,比较器和MUX)通常较小且消耗较少的功率。在置换和冲突检测指令/操作两者间共享连线/互连的一个优点是大部分面积和功率成本被这两个操作分摊或分担。
图11是全连接非阻挡互连(fully-connected non-blocking interconnect)1160的示例实施例的电路框图。所示的全连接非阻挡互连具有4个互连输入1168和4个互连输出1172。应当明白,替换实施例可包括更多输入和更多输出且输入和输出的数量可以相同或不同。
该全连接互连具有4个输入分布线1176。在图示中,这些输入分布线被示出为横线。这些输入分布线可代表金属线、迹线、互连、或其他导电路径。对每个输入可以有一条输入分布线。第一输入1168-1耦合于第一输入分布线1176-1,第二输入1168-2耦合于第二输入分布线1176-2,第三输入1168-3耦合于第三输入分布线1176-3,而第四输入1168-4耦合于第四输入分布线1176-4。在每个输入处提供的数据被跨相应的输入分布线地广播。
每个互连输出1172具有与其耦合的一组相应的抽头线1178。在图示中,这些抽头线组被示出为竖线组。这些抽头线可代表金属线、迹线、互连、或其他导电路径。在所示示例中,有4个输出并且有4组相应的抽头线。一组抽头线内的每条抽头线耦合于输入分布线中一不同的、相应的输入分布线。在图示中,每个抽头线仅耦合于所述输入抽头线中之一者(例如,在图示中,每个抽头线耦合于最靠近其上方端子的输入分布线)。例如,在第一抽头线组1178-1中,第一抽头线1178-1A耦合于第一输入分布线1176-1,第二抽头线1178-1B耦合于第二输入分布线1176-2,第三抽头线1178-1C耦合于第三输入分布线1176-3,而第四抽头线1178-1D耦合于第四输入分布线1176-4。所述各组抽头线的每组抽头线内的一抽头线和/或针对每个输出的一抽头线耦合于所述输入分布线中的每条输入分布线以便将输入数据广播到该输出。
图12是共享全连接互连1260的4数据元素置换指令执行逻辑1256和4元素向量冲突指令执行逻辑1258的详细示例实施例的电路框图。该4数据元素置换和向量冲突指令执行逻辑各自能够对一个或多个源向量1264操作(其中每个源向量具有4个数据元素)以产生结果向量1266、1267(每个结果向量具有4个数据元素)。
源向量1264具有4个源数据元素,它们被标记为A1-A4。该全连接互连被耦合以接收该源向量。该全连接互连具有4个互连输入1268。这些互连输入中的每个互连输入耦合以接收数据元素A1-A4中的一个相应的数据元素。这4个输入中的每一个均与4条输入分布线1276中的一条相应的输入分布线耦合。该全连接互连还具有4个互连输出1272。针对每个互连输出提供一组抽头线。针对每组内的每条输入分布线提供一条抽头线。一组抽头线内的每条抽头线耦合于这些输入分布线中的一条相应的输入分布线。
置换指令执行逻辑1256与该全连接互连耦合。该置换指令执行逻辑包括4个选择器1256-1、1256-2、1256-3、1256-4。每个选择器具有与互连输出1272中的一个不同互连输出耦合的输入。在使用过程中,来自该源向量的数据元素可被路由、连接、耦合、或以其他方式通过该全连接互连传达到选择器。每个选择器1256能够操作以选择4个输入数据元素中的任何元素以存储在第一结果向量1266中的相应结果数据元素中。作为示例,第一选择器1256-1可选择这4个输入源数据元素中的任何一个以存储在第一结果向量的结果数据元素B1中,第二选择器1256-2可选择这4个输入源数据元素中的任何一个以存储在向量结果数据元素B2中,第三选择器1256-3可选择这4个输入源数据元素中的任何一个以存储在第三向量数据元素B3中,而第四选择器1256-4可选择这4个输入源数据元素中的任何一个以存储在向量结果数据元素B4中。选择器可包括硬件、固件、软件或其组合(例如,潜在地具有某种固件和/或软件的硬件)。如图所示,在一些实施例中,每个选择器可包括一4:1(4输入到1输出)复用器(MUX)。每个4:1MUX可由一输入控制或选择信号(未示出)控制,该输入控制或选择信号可从该置换指令所提供的索引得出。替换地,可采用其他选择器电路。
向量冲突指令执行逻辑1258也与该全连接互连耦合。该向量冲突指令执行逻辑包括4组4个比较器1258-1,1258-2,1258-3,1258-4。该4组4个比较器可代表一NxN比较器主干,其中N为4。这4组比较器中的每一组比较器均具有4个比较器(例如,4个物理比较器或4个逻辑比较器)。各组比较器中的每组比较器具有与互连输出1272中的一不同互连输出耦合的输入。在使用过程中,来自该源向量的数据元素可被路由、连接、耦合、或以其他方式通过该全连接互连传达到选择器。每组比较器1258能操作以执行元素间比较并且将比较的结果存储在第二结果向量1267的相应结果数据元素中。这些比较可以并行而不是串行地执行,这可有助于允许快速而高效地实现向量冲突指令。在一些实施例中,每组比较器可操作以将所述输入数据元素中的一不同的相应输入数据元素与所有其他输入数据元素进行比较。例如,第一组比较器1258-1可操作以将A1与A1、A1与A2、A1与A3、以及A1与A4进行比较。如图所示,在一方面,这可包括一数据元素与其自身的无意义的比较(例如,比较A1与A1),或者在另一方面,可以任选地忽略这种无意义比较。在其中忽略这种无意义比较的实施例中,每组比较器可省略一个比较器。在一些实施例中,这些比较器可被实现为异或(XOR)树。
在一些实施例中,这些比较器可被逻辑分开但不物理分开(例如,单一宽物理比较器可代表4个较窄的逻辑比较器)。在一些实施例中,每个数据元素可以是M位宽的(例如,其中M是8位、16位、32位、或64位),并且每个比较器可以是M位宽的,以便能够操作以比较一对M位宽的数据元素。替换地,所述比较器可以比数据元素更窄(例如,小于M位宽),例如以便减少比较器的尺寸/面积和/或比较器消耗的功率量。例如,32位数据元素的最低阶8位或16位子集可被比较。在一些情况下,这可导致假冲突(例如,在数据元素的位子集相等但是整个数据元素不相等时错误地确定数据元素相等),这可通常增加串行的量并且降低性能,但是在功能上是良性的。各组选择器可包括硬件、固件、软件或其组合(例如,潜在地具有某种固件和/或软件的硬件)。
在图示中,该全连接互连的每个输出1272具有多个分支1274,所述分支被用于向向量冲突指令执行逻辑和置换指令执行逻辑两者提供输出。这些分支中的每个分支的每个分叉(fork)被提供给该向量冲突指令执行逻辑,而这些分支中的每个分支的另一分叉被提供给该置换指令执行逻辑。替换地,不是使用分支,而是可任选地使用单独的复制线。
该全连接互连被该置换指令执行逻辑和该向量冲突指令执行逻辑两者共享。有利地,这通常减少用于实现这些指令的逻辑的总的尺寸和功耗。而且,交叉和其他全连接互连通常是线受限(line-limited)而不是器件受限(device-l imited)的,这意味着围绕该全连接互连的面积通常由线的路由支配,而不是由晶体管和其他有源和无源半导体器件/电路支配。如此,通常存在大量的半导体面积来在同一交叉或其他全连接互连上容纳置换指令执行逻辑和向量冲突指令执行逻辑两者。
图13是示出将一组4个M位比较器1380-1,1380-2,1380-3,1380-4与全连接互连的给定互连输出1368耦合的示例实施例的进一步细节的电路框图。代表给定互连输出1368的4条抽头线1378被提供给4条相应的局部路由线1381。不是将4条抽头线提供给4:1M位MUX1356或一组4个M位比较器1380中的仅一者,而是使抽头线1378分支到局部路由线中并且从那里被提供给该4:1M位MUX1356和该组4个M位比较器两者。在该特定图示中,局部路由线终接于4:1M位MUX,而针对4个M位比较器中的每一个提供不同的一组4条局部抽头线1382中的一条,尽管此特定配置不是必须的。还构想将4:1M位MUX或其他选择器和一组比较器连接到给定互连输出的其他方式。
图14是共享全连接互连1460的8数据元素置换指令执行逻辑1456和8数据元素向量冲突指令执行逻辑1458的详细示例实施例的框图。该8数据元素置换和向量冲突指令执行逻辑各自均能够对一个或多个源向量1464进行操作(其中每个源向量具有8个数据元素)以产生结果向量1466、1467(每个结果向量具有8个数据元素)。图14与图12具有一定程度的相似性。为了避免使说明晦涩,以下讨论将着重讨论图14的实施例的不同或附加特征,而不重复所有的相似点。将理解,除另外阐述或因其他原因显而易见,否则针对图12描述的属性和变化也适用于图14。
源向量1464具有被标记为A1-A8的8个源数据元素。该全连接互连具有8个互连输入1468,每个互连输入耦合以接收8个数据元素A1-A8中的一不同的、相应的数据元素。这8个输入中的每一个均与8个输入分布线1476中的一不同的、相应的输入分布线耦合。该全连接互连还具有8个互连输出1472。针对每个互连输出提供一组抽头线1478。针对每组内的每个输入分布线提供一个抽头线。一组抽头线内的每个抽头线与输入分布线中的一条相应的输入分布线耦合。
置换指令执行逻辑1456与该全连接互连1460耦合。该置换指令执行逻辑包括8个选择器1456-1到1456-8。每个选择器具有与互连输出1472中的一个不同互连输出耦合的输入。每个选择器能够操作以选择8个输入数据元素中的任何元素以存储在第一结果向量1466中的相应结果数据元素中。如图所示,在一些实施例中,所述选择器中的每一个选择器可包括一8:1MUX。替换地,可采用其他选择器电路。
向量冲突指令执行逻辑1458也与该全连接互连耦合。该向量冲突指令执行逻辑包括8组8个比较器1458-1到1458-8。各组比较器中的每组比较器具有与互连输出1472中的一个不同互连输出耦合的输入。每组比较器能操作以执行元素间比较并且将比较的结果存储在第二结果向量1467的相应结果数据元素中。在一些实施例中,每组比较器可操作以将所述输入数据元素中的一不同的相应输入数据元素与所有其他输入数据元素进行比较。例如,第一组比较器1458-1可操作以将A1与A1、A1与A2、A1与A3、A1与A4、A1与A5、A1与A6、A1与A7、以及A1与A8进行比较。尽管示出了针对M位数据元素的M位比较器,然而在替换实施例中,该比较器可仅比较M位数据元素的位子集。
这些只是数个说明性示例。为了附图简明,仅示出了4个和8个数据元素以及相关联的4或8宽指令执行逻辑。然而,应该明白,还构想具有超过8个数据元素和超过8宽指令执行逻辑的其他实施例。例如,另一实施例利用16数据元素源向量并且具有16宽指令执行逻辑。作为另一示例,进一步的实施例利用32数据元素源向量并且具有32宽指令执行逻辑。
图15向量是为置换指令和向量冲突指令共享全连接互连的方法1500的示例实施例。该方法可由处理器执行。
该方法包括在框1501接收指示至少第一源向量和指示第一目的地存储位置的置换指令,该第一源向量包括至少4个数据元素。在框1502,通过执行置换指令的向量执行单元的全连接互连来传达该第一源向量的该至少4个数据元素。在一些实施例中,该全连接互连是非阻挡全连接互连。在一些实施例中,该全连接互连是交叉。响应于该置换指令,将第一结果向量存储在第一目的地存储位置。在一些实施例中,该第一结果向量可包括第一多个数据元素且该第一多个数据元素中的每个数据元素可以能够是该第一源向量的该至少4个数据元素中的任何数据元素。
该方法还包括在框1503接收指示至少第二源向量和指示第二目的地存储位置的向量冲突指令,该第二源向量包括至少4个数据元素。在框1504,通过执行向量冲突指令的向量执行单元的全连接互连传达该第二源向量的该至少4个数据元素。响应于该向量冲突指令,可将第二结果向量存储在第二目的地存储位置。在一些实施例中,该第二结果向量包括第二多个数据元素,且该第二多个数据元素中的每个数据元素可包括该第二源向量的相应数据元素与该第二源向量的其他数据元素的比较的结果。
示例性核架构、处理器和计算机架构
处理器核可以用出于不同目的的不同方式在不同的处理器中实现。例如,这样的核的实现可以包括:1)旨在用于通用计算的通用有序核;2)预期用于通用计算的高性能通用无序核;3)主要预期用于图形和/或科学(吞吐量)计算的专用核。不同处理器的实现可包括:包括预期用于通用计算的一个或多个通用有序核和/或预期用于通用计算的一个或多个通用无序核的CPU;以及2)包括主要预期用于图形和/或科学(吞吐量)的一个或多个专用核的协处理器。这样的不同处理器导致不同的计算机系统架构,其可包括:1)在与CPU分开的芯片上的协处理器;2)在与CPU相同的封装中但分开的管芯上的协处理器;3)与CPU在相同管芯上的协处理器(在该情况下,这样的协处理器有时被称为诸如集成图形和/或科学(吞吐量)逻辑等专用逻辑,或被称为专用核);以及4)可以将所描述的CPU(有时被称为应用核或应用处理器)、以上描述的协处理器和附加功能包括在同一管芯上的片上系统。接着描述示例性核架构,随后描述示例性处理器和计算机架构。
示例性核架构
有序和无序核框图
图16A是示出根据本发明的实施例的示例性有序流水线以及示例性寄存器重命名的无序发布/执行流水线两者的框图。图16B是示出根据本发明的实施例的有序架构核的示例性实施例以及包括在处理器中的示例性寄存器重命名的无序发布/执行架构核两者的框图。图16A-B中的实线框示出了有序流水线和有序核,而可选增加的虚线框示出了寄存器重命名的、无序发布/执行流水线和核。给定有序方面是无序方面的子集的情况下,无序方面将被描述。
在图16A中,处理器流水线1600包括提取级1602、长度解码级1604、解码级1606、分配级1608、重命名级1610、调度(也称为分派或发布)级1612、寄存器读取/存储器读取级1614、执行级1616、回写/存储器写入级1618、异常处理级1622、以及提交级1624。
图16B示出处理器核1690,该核1690包括耦合到执行引擎单元1650的前端单元1630,并且两者耦合到存储器单元1670。核1690可以是精简指令集计算(RISC)核、复杂指令集计算(CISC)核、超长指令字(VLIW)核或混合或替换核类型。作为又一选项,核1690可以是专用核,诸如例如网络或通信核、压缩引擎、协处理器核、通用计算图形处理单元(GPGPU)核、或图形核等等。
前端单元1630包括耦合到指令高速缓存单元1632的分支预测单元1634,该指令高速缓存单元1634被耦合到指令转换后备缓冲器(TLB)1636,该指令转换后备缓冲器1636被耦合到指令获取单元1638,指令获取单元1638被耦合到解码单元1640。解码单元1640(或解码器)可解码指令,并生成从原始指令解码出的、或以其他方式反映原始指令的、或从原始指令导出的一个或多个微操作、微代码进入点、微指令、其他指令、或其他控制信号作为输出。解码单元1640可使用各种不同的机制来实现。合适的机制的示例包括但不限于查找表、硬件实现、可编程逻辑阵列(OLA)、微代码只读存储器(ROM)等。在一个实施例中,核1690包括存储(例如,在解码单元1640中或否则在前端单元1630内的)某些宏指令的微代码的微代码ROM或其他介质。解码单元1640耦合至执行引擎单元1650中的重命名/分配器单元1652。
执行引擎单元1650包括重命名/分配器单元1652,该重命名/分配器单元1652耦合至引退单元1654和一个或多个调度器单元(多个)1656的集合。调度器单元1656表示任何数目的不同调度器,包括预留站、中央指令窗等。调度器单元1656被耦合到物理寄存器组单元1658。每个物理寄存器文件(多个)单元1658表示一个或多个物理寄存器文件,其中不同的物理寄存器文件存储一种或多种不同的数据类型,诸如标量整数、标量浮点、打包整数、打包浮点、向量整数、向量浮点、状态(例如,作为要执行的下一指令的地址的指令指针)等。在一个实施例中,物理寄存器文件单元1658包括向量寄存器单元、写掩码寄存器单元和标量寄存器单元。这些寄存器单元可以提供架构向量寄存器、向量掩码寄存器、和通用寄存器。物理寄存器组单元1658与引退单元1654重叠以示出可以用来实现寄存器重命名和无序执行的各种方式(例如,使用记录器缓冲器和引退寄存器组;使用将来的文件、历史缓冲器和引退寄存器组;使用寄存器映射和寄存器池等等)。引退单元1654和物理寄存器文件(多个)单元(多个)1658被耦合到执行群集(多个)1660。执行群集1660包括一个或多个执行单元1662的集合和一个或多个存储器访问单元1664的集合。执行单元1662可以执行各种操作(例如,移位、加法、减法、乘法),以及对各种类型的数据(例如,标量浮点、打包整数、打包浮点、向量整型、向量浮点)执行。尽管某些实施例可以包括专用于特定功能或功能集合的多个执行单元,但其他实施例可包括全部执行所有函数的仅一个执行单元或多个执行单元。调度器单元(多个)1656、物理寄存器文件(多个)单元(多个)1658和执行群集(多个)1660被示为可能有多个,因为某些实施例为某些类型的数据/操作(例如,标量整型流水线、标量浮点/打包整型/打包浮点/向量整型/向量浮点流水线,和/或各自具有其自己的调度器单元、物理寄存器文件(多个)单元和/或执行群集的存储器访问流水线——以及在分开的存储器访问流水线的情况下,实现其中仅该流水线的执行群集具有存储器访问单元(多个)1664的某些实施例)创建分开的流水线。还应当理解,在分开的流水线被使用的情况下,这些流水线中的一个或多个可以为无序发布/执行,并且其余流水线可以为有序发布/执行。
存储器访问单元1664的集合被耦合到存储器单元1670,该存储器单元1670包括耦合到数据高速缓存单元1674的数据TLB单元1672,其中数据高速缓存单元1674耦合到二级(L2)高速缓存单元1676。在一个示例性实施例中,存储器访问单元1664可包括加载单元、存储地址单元和存储数据单元,其中的每一个均耦合至存储器单元1670中的数据TLB单元1672。指令高速缓存单元1634还耦合到存储器单元1670中的二级(L2)高速缓存单元1676。L2高速缓存单元1676被耦合到一个或多个其他级的高速缓存,并最终耦合到主存储器。
作为示例,示例性寄存器重命名的、无序发布/执行核架构可以如下实现流水线1600:1)指令获取1638执行获取和长度解码级1602和1604;2)解码单元1640执行解码级1606;3)重命名/分配器单元1652执行分配级1608和重命名级1610;4)调度器单元1656执行调度级1612;5)物理寄存器组单元1658和存储器单元1670执行寄存器读取/存储器读取级1614;执行群集1660执行执行级1616;6)存储器单元1670和物理寄存器组单元1658执行写回/存储器写入级1618;7)各单元可牵涉到异常处理级1622;以及8)引退单元1654和物理寄存器组单元1658执行提交级1624。
核1690可支持一个或多个指令集合(例如,x86指令集合(具有与较新版本一起添加的某些扩展);加利福尼亚州桑尼维尔市的MIPS技术公司的MIPS指令集合;加利福尼州桑尼维尔市的ARM控股的ARM指令集合(具有诸如NEON等可选附加扩展)),其中包括本文中描述的各指令。在一个实施例中,核1690包括支持打包数据指令集合扩展(例如,AVX1、AVX2)的逻辑,由此允许被许多多媒体应用使用的操作将使用打包数据来执行。
应当理解,核可支持多线程化(执行两个或更多个并行的操作或线程的集合),并且可以按各种方式来完成该多线程化,此各种方式包括时分多线程化、同步多线程化(其中单个物理核为物理核正同步多线程化的各线程中的每一个线程提供逻辑核)、或其组合(例如,时分提取和解码以及此后诸如用超线程化技术来同步多线程化)。
尽管在无序执行的上下文中描述了寄存器重命名,但应当理解,可以在有序架构中使用寄存器重命名。尽管所解说的处理器的实施例还包括分开的指令和数据高速缓存单元1634/1674以及共享L2高速缓存单元1676,但替换实施例可以具有用于指令和数据两者的单个内部高速缓存,诸如例如一级(L1)内部高速缓存或多个级别的内部缓存。在某些实施例中,该系统可包括内部高速缓存和在核和/或处理器外部的外部高速缓存的组合。或者,所有高速缓存都可以在核和/或处理器的外部。
具体的示例性有序核架构
图17A-B示出了更具体的示例性有序核架构的框图,该核将是芯片中的若干逻辑块之一(包括相同类型和/或不同类型的其他核)。这些逻辑块通过高带宽的互连网络(例如,环形网络)与某些固定的功能逻辑、存储器I/O接口和其它必要的I/O逻辑通信,这依赖于应用。
图17A是根据本发明的实施例的连接到管芯上互联网络1702且具有二级(L2)高速缓存的本地子集1704的单个处理器核的框图。在一个实施例中,指令解码器1700支持具有打包数据指令集合扩展的x86指令集。L1高速缓存1706允许对标量和向量单元中的高速缓存存储器的低等待时间访问。尽管在一个实施例中(为了简化设计),标量单元1708和向量单元1710使用分开的寄存器集合(分别为标量寄存器1712和向量寄存器1714),并且在这些寄存器之间转移的数据被写入到存储器并随后从一级(L1)高速缓存1706读回,但是本发明的替换实施例可以使用不同的方法(例如使用单个寄存器集合或包括允许数据在这两个寄存器文件之间传输而无需被写入和读回的通信路径)。
L2高速缓存的本地子集1704是全局L2高速缓存的一部分,该全局L2高速缓存被划分成多个分开的本地子集,即每个处理器核一个本地子集。每个处理器核具有到其自己的L2高速缓存1704的本地子集的直接访问路径。被处理器核读出的数据被存储在其L2高速缓存子集1704中,并且可以被快速访问,该访问与其他处理器核访问其自己的本地L2高速缓存子集并行。被处理器核写入的数据被存储在其子集的L2高速缓存子集1704中,并在必要的情况下从其它子集清除。环形网络确保共享数据的一致性。环形网络是双向的,以允许诸如处理器核、L2高速缓存和其它逻辑块之类的代理在芯片内彼此通信。每个环形数据路径为每个方向1012比特宽。
图17B是根据本发明的各实施例的图17A中的处理器核的一部分的展开图。图17B包括作为L1高速缓存1704的L1数据高速缓存1706A部分,以及关于向量单元1710和向量寄存器1714的更多细节。具体地说,向量单元1710是16宽向量处理单元(VPU)(见16宽ALU1728),该单元执行整型、单精度浮点以及双精度浮点指令中的一个或多个。该VPU通过混合单元1720支持对寄存器输入的混合、通过数值转换单元1,722A-B支持数值转换,并通过复制单元1724支持对存储器输入的复制。写掩码寄存器1726允许断言所得的向量写入。
具有集成存储器控制器和图形器件的处理器
图18是根据本发明的实施例的可具有一个以上核、可具有集成存储器控制器、并且可具有集成图形器件的处理器1800的框图。图18的实线框示出了处理器1800,处理器1800具有单个核1802A、系统代理1810、一组一个或多个总线控制器单元1816,而可选附加的虚线框示出了替换的处理器1800,具有多个核1802A-N、系统代理单元18010中的一组一个或多个集成存储器控制器单元1814以及专用逻辑1808。
因此,处理器1800的不同实现可包括:1)CPU,其中专用逻辑1808是集成图形和/或科学(吞吐量)逻辑(其可包括一个或多个核),并且核1802A-N是一个或多个通用核(例如,通用的有序核、通用的无序核、这两者的组合);2)协处理器,其中核1802A-N是主要预期用于图形和/或科学(吞吐量)的大量专用核;以及3)协处理器,其中核1802A-N是大量通用有序核。因此,处理器1800可以是通用处理器、协处理器或专用处理器,诸如例如网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元)、高吞吐量的集成众核(MIC)协处理器(包括30个或更多核)、或嵌入式处理器等。该处理器可以被实现在一个或多个芯片上。处理器1800可以是一个或多个衬底的一部分,和/或可以使用诸如例如BiCMOS、CMOS或NMOS等的多个加工技术中的任何一个技术将其实现在一个或多个衬底上。
存储器层次结构包括在各核内的一个或多个级别的高速缓存、一个或多个共享高速缓存单元1806的集合、以及耦合至集成存储器控制器单元1814的集合的外部存储器(未示出)。该共享高速缓存单元1806的集合可以包括一个或多个中间级高速缓存,诸如二级(L2)、三级(L3)、四级(L4)或其他级别的高速缓存、末级高速缓存(LLC)、和/或其组合。尽管在一个实施例中,基于环的互连单元1812将集成图形逻辑1808、共享高速缓存单元1806的集合以及系统代理单元1810/集成存储器控制器单元1814互连,但替换实施例可使用任何数量的公知技术来将这些单元互连。在一个实施例中,在一个或多个高速缓存单元1806与核1802-A-N之间维持一致性。
在某些实施例中,核1802A-N中的一个或多个核能够多线程化。系统代理1810包括协调和操作核1802A-N的那些组件。系统代理单元1810可包括例如功率控制单元(PCU)和显示单元。PCU可以是或包括调整核1802A-N和集成图形逻辑1808的功率状态所需的逻辑和组件。显示单元用于驱动一个或多个外部连接的显示器。
核1802A-N在架构指令集合方面可以是同构的或异构的;即,这些核1802A-N中的两个或更多个核可能能够执行相同的指令集合,而其他核可能能够执行该指令集合的仅仅子集或不同的指令集合。
示例性计算机架构
图19-22是示例性计算机架构的框图。本领域已知的对膝上型设备、台式机、手持PC、个人数字助理、工程工作站、服务器、网络设备、网络中枢、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备以及各种其他电子设备的其他系统设计和配置也是合适的。一般来说,能够纳入本文中所公开的处理器和/或其它执行逻辑的大量系统和电子设备一般都是合适的。
现在参见图19,所示为根据本发明一个实施例的系统1900的框图。系统1900可以包括一个或多个处理器1910、1915,这些处理器耦合到控制器中枢1920。在一个实施例中,控制器中枢1920包括图形存储器控制器中枢(GMCH)1990和输入/输出中枢(IOH)1950(其可以在分开的芯片上);GMCH 1990包括存储器1940和协处理器1945耦合到的存储器和图形控制器;IOH 1950将输入/输出(I/O)设备1960耦合到GMCH 1990。替换地,存储器和图形控制器中的一个或两个在处理器(如本文中所描述的)内集成,存储器1940和协处理器1945直接耦合到处理器1910、以及在单一芯片中具有IOH 1950的控制器中枢1920。
附加的处理器1915的任选性在图19中通过虚线来表示。每一处理器1910、1915可包括本文中描述的处理核中的一个或多个,并且可以是处理器1800的某一版本。
存储器1940可以是例如动态随机存取存储器(DRAM)、相变化存储器(PCM)或这两者的组合。对于至少一个实施例,控制器中枢1920经由诸如前端总线(FSB)之类的多点总线(multi-drop bus)、诸如快速通道互连(QPI)之类的点对点接口、或者类似的连接1995与处理器1910、1915进行通信。
在一个实施例中,协处理器1945是专用处理器,诸如例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、或嵌入式处理器等等。在一个实施例中,控制器中枢1920可以包括集成图形加速计。
按照包括架构、微架构、热、功耗特征等等优点的度量谱,物理资源1910、1915之间存在各种差别。
在一个实施例中,处理器1910执行控制一般类型的数据处理操作的指令。嵌入在这些指令中的可以是协处理器指令。处理器1910识别如具有应当由附连的协处理器1945执行的类型的这些协处理器指令。因此,处理器1910在协处理器总线或者其他互连上将这些协处理器指令(或者表示协处理器指令的控制信号)发布到协处理器1945。协处理器1945接受并执行所接收的协处理器指令。
现在参考图20,示出了根据本发明的一个实施例的第一更具体的示例性系统2000的方框图。如图20所示,多处理器系统2000是点对点互连系统,并包括通过点对点互连2050而耦合的第一处理器2070和第二处理器2080。处理器2070和2080中的每一个都可以是处理器1800的某一版本。在本发明的一个实施例中,处理器2070和2080分别是处理器1910和1915,而协处理器2038是协处理器1945。在另一实施例中,处理器2070和2080分别是处理器1910和协处理器1945。
处理器2070和2080被示为分别包括集成存储器控制器(IMC)单元2072和2082。处理器2070还包括作为其总线控制器单元的一部分的点对点(P-P)接口2076和2078;类似地,第二处理器2080包括点对点接口2086和2088。处理器2070、2080可以使用点对点(P-P)电路2078、2088经由P-P接口2050来交换信息。如图20所示,IMC2072和2082将处理器耦合到相应的存储器,即存储器2032和存储器2034,这些存储器可以是本地附连到相应处理器的主存储器的部分。
处理器2070、2080可各自经由使用点对点接口电路2076、2094、2086、2098的各个P-P接口2052、2054与芯片组2090交换信息。芯片组2090可以可选地经由高性能接口2038与协处理器2039交换信息。在一个实施例中,协处理器2038是专用处理器,诸如例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、或嵌入式处理器等等。
共享高速缓存(未示出)可以被包括在任一处理器之内或被包括两个处理器外部但仍经由P-P互连与这些处理器连接,从而如果将某处理器置于低功率模式时,可将任一处理器或两个处理器的本地高速缓存信息存储在该共享高速缓存中。
芯片组2090可经由接口2096耦合至第一总线2016。在一个实施例中,第一总线2016可以是外围部件互连(PCI)总线,或诸如PCI Express总线或其它第三代I/O互连总线之类的总线,但本发明的范围并不受此限制。
如图20所示,各种I/O设备2014可连同总线桥2018一起耦合到第一总线2016,总线桥2018将第一总线2016耦合到第二总线2020。在一个实施例中,诸如协处理器、高吞吐量MIC处理器、GPGPU的处理器、加速计(诸如例如图形加速计或数字信号处理器(DSP)单元)、场可编程门阵列或任何其他处理器的一个或多个附加处理器2015被耦合到第一总线2016。在一个实施例中,第二总线2020可以是低引脚计数(LPC)总线。各种设备可以被耦合至第二总线2020,在一个实施例中这些设备包括例如键盘/鼠标2022、通信设备2027以及诸如可包括指令/代码和数据2028的盘驱动器或其它海量存储设备的存储单元2030。此外,音频I/O2024可以被耦合至第二总线2020。注意,其它架构是可能的。例如,代替图20的点对点架构,系统可实现多点总线或其它此类架构。
现在参考图21,示出了根据本发明的一个实施例的第二更专用的示例性系统2100的方框图。图20和21中的相同元件使用相同附图标记,且在图21中省略了图20的某些方面以避免遮挡图7的其它方面。
图21示出处理器2070、2080可分别包括集成存储器和I/O控制逻辑(“CL”)2072和2082。因此,CL2072、2082包括集成存储器控制器单元并包括I/O控制逻辑。图21示出不仅存储器2032、2034耦合至CL2072、2082,而且I/O设备2114也耦合至控制逻辑2072、2082。传统I/O设备2115被耦合至芯片组2090。
现在参照图22,所示出的是根据本发明一个实施例的SoC2200的框图。图18中的类似元件具有相似的附图标记。另外,虚线框是更先进的SoC的可选特征。在图22中,互连单元(多个)2202被耦合至:应用处理器2210,该应用处理器包括一个或多个核202A-N的集合以及共享高速缓存单元1806;系统代理单元1810;总线控制器单元1816;集成存储器控制器单元1814;一组或一个或多个协处理器2220,其可包括集成图形逻辑、图像处理器、音频处理器和视频处理器;静态随机存取存储器(SRAM)单元2230;直接存储器存取(DMA)单元2232;以及用于耦合至一个或多个外部显示器的显示单元2240。在一个实施例中,协处理器2220包括专用处理器,诸如例如网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、或嵌入式处理器等等。
本文公开的机制的各实施例可以被实现在硬件、软件、固件或这些实现方法的组合中。本发明的实施例可实现为在可编程系统上执行的计算机程序或程序代码,该可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备以及至少一个输出设备。
诸如图20所示的代码2030之类的程序代码可应用于输入指令,以执行本文中所描述的功能并生成输出信息。输出信息可以按已知方式被应用于一个或多个输出设备。为了本申请的目的,处理系统包括具有诸如例如数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器之类的处理器的任何系统。
程序代码可以用高级程序化语言或面向对象的编程语言来实现,以便与处理系统通信。程序代码也可以在需要的情况下用汇编语言或机器语言来实现。事实上,本文中描述的机制不仅限于任何特定编程语言的范围。在任一情形下,语言可以是编译语言或解释语言。
至少一个实施例的一个或多个方面可以由存储在机器可读介质上的表征性指令来实现,该指令表示处理器中的各种逻辑,该指令在被机器读取时使得该机器制作用于执行本文所述的技术的逻辑。被称为“IP核”的这些表示可以被存储在有形的机器可读介质上,并被提供给多个客户或生产设施以加载到实际制造该逻辑或处理器的制造机器中。
这样的机器可读存储介质可以包括但不限于通过机器或设备制造或形成的物品的非瞬态、有形安排,其包括存储介质,诸如硬盘;任何其它类型的盘,包括软盘、光盘、紧致盘只读存储器(CD-ROM)、紧致盘可重写(CD-RW)的以及磁光盘;半导体器件,例如只读存储器(ROM)、诸如动态随机存取存储器(DRAM)和静态随机存取存储器(SRAM)的随机存取存储器(RAM)、可擦除可编程只读存储器(EPRO M)、闪存、电可擦除可编程只读存储器(EEPROM);相变化存储器(PCM);磁卡或光卡;或适于存储电子指令的任何其它类型的介质。
因此,本发明的各实施例还包括非瞬态、有形机器可读介质,该介质包含指令或包含设计数据,诸如硬件描述语言(HDL),它定义本文中描述的结构、电路、装置、处理器和/或系统特性。这些实施例也被称为程序产品。
仿真(包括二进制变换、代码变形等)
在某些情况下,指令转换器可用来将指令从源指令集转换至目标指令集。例如,指令转换器可以变换(例如使用静态二进制变换、包括动态编译的动态二进制变换)、变形、仿真或以其它方式将指令转换成将由核来处理的一个或多个其它指令。指令转换器可以用软件、硬件、固件、或其组合实现。指令转换器可以在处理器上、在处理器外、或者部分在处理器上部分在处理器外。
图23是根据本发明的各实施例的对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。在所示的实施例中,指令转换器是软件指令转换器,但作为替换,该指令转换器可以用软件、固件、硬件或其各种组合来实现。图23以高级语言2302示出了程序,该程序可使用x86编译器2304来编译以生成x86二进制代码2306,该二进制代码可由具有至少一个x86指令集核的处理器2316本地地执行。具有至少一个x86指令集核的处理器2316表示任何处理器,这些处理器能通过兼容地执行或以其他方式处理以下内容来执行与具有至少一个x86指令集核的英特尔处理器基本相同的功能:1)英特尔x86指令集核的指令集的本质部分,或2)被定向为在具有至少一个x86指令集核的英特尔处理器上运行的应用或其它程序的目标代码版本,以便取得与具有至少一个x86指令集核的英特尔处理器基本相同的结果。x86编译器2304表示用于生成x86二进制代码2306(例如,对象代码)的编译器,该二进制代码2306可通过或不通过附加的链接处理在具有至少一个x86指令集核的处理器2316上执行。类似地,图23以高级语言2302示出了程序,该程序可使用替换性指令集编译器2308来编译以生成替换性指令集二级制代码2310,替换性指令集二级制代码2310可由不具有至少一个x86指令集核的处理器2314(诸如,具有可执行加利福尼亚州桑尼威尔的MIPS技术公司的MIPS指令集的处理器和/或执行加利福尼亚州桑尼威尔的ARM控股公司的ARM指令集的处理器)本地地执行。指令转换器2312被用来将x86二进制代码2306转换成可以由不具有x86指令集核的处理器2314原生执行的代码。该转换后的代码不大可能与替换性指令集二进制代码2310相同,因为能够这样做的指令转换器难以制造;然而,转换后的代码将完成一般操作并由来自替换性指令集的指令构成。因此,指令转换器2312通过仿真、模拟或任何其它过程来表示允许不具有x86指令集处理器或核的处理器或其它电子设备执行x86二进制代码2306的软件、固件、硬件或其组合。
在以上描述中,为解释起见,阐明了众多具体细节以提供对本发明的实施例的透彻理解。然而,将对本领域技术人员明显的是,没有这些具体细节中的一些也可实践一个或多个其他实施例。具体实施例不是为了限制本发明而是为了说明。本发明的范围不是由所提供的具体示例确定,而是仅由所附权利要求确定。在其它实例中,以方框图形式而非以细节地示出了公知的电路、结构、设备和操作以避免使说明书的理解变得晦涩。
本领域的技术人员还将意识到可对本文公开的实施例做出修改,诸如对实施例的各组件的配置、形式、功能和操作方式和使用进行修改。在附图中显示且在说明书中描述的关系的所有等效关系都被涵盖在本发明的实施例内。为说明的简单和清楚起见,在附图中示出的元素不一定按比例绘制。例如,为清楚起见,一些元件的尺寸相对其它元件被夸大。在附图中,箭头用于示出耦合和/或连接。
已描述了各种操作和方法。已经以流程图方式以基础方式对一些方法进行了描述,但操作可选择地被添加至这些方法和/或从这些方法中移去。另外,根据示例性实施例,描述操作的特定顺序,但要理解该特定顺序是示例性的。替换实施例可任选地以不同方式执行这些操作、组合某些操作、覆盖某些操作等。
某些操作可由硬件组件执行,或者可体现在机器可执行或电路可执行的指令中,它们可用于使得或至少导致用执行这些操作的指令编程的电路或硬件。电路可包括通用或专用处理器、或逻辑电路,这里仅给出几个示例。这些操作还可任选地由硬件和软件的组合执行。执行单元和/或处理器可包括专门或特定电路,或者其它逻辑,它们对指令或微指令或者衍生自机器指令的一个或多个控制信号作出响应,以执行某些操作。
还应当理解,说明书全文对“一个实施例”、“一实施例”或“一个或多个实施例”的引用例如表示特定特征可包含在本发明实施例的实践中。类似地应当理解,在本说明书中,各个特征有时被一起编组在单个实施例、附图或其描述中以使本公开变得流畅并帮助理解各个创新性方面。然而,该公开方法不应被解释成反映本发明需要比每项权利要求中所明确记载的更多特征的意图。相反,如下面权利要求反映的,各创新性方面可具有比单个公开的实施例的全部特征更少的特征。因此,说明书之后所附的权利要求因此被明确纳入该说明书中,每一项权利要求独自作为本发明单独的实施例。

Claims (27)

1.一种指令处理装置,包括:
解码单元,其用于对置换指令和向量冲突指令进行解码;以及
向量执行单元,其与所述解码单元耦合并且包括:
a)全连接互连,其具有至少四个输入和至少四个输出,其中所述至少四个输入用于接收至少一个源向量的至少四个相应的数据元素,其中所述至少四个输入中的每个输入与所述至少四个输出中的每个输出相耦合;
b)置换指令执行逻辑单元,其与所述至少四个输出相耦合并且用于响应于所述置换指令而存储第一向量结果;以及
c)向量冲突指令执行逻辑单元,其与所述至少四个输出相耦合并且用于响应于所述向量冲突指令而将第二向量结果存储在目的地存储位置中。
2.如权利要求1所述的指令处理装置,其特征在于,所述全连接互连由所述置换指令执行逻辑单元和所述向量冲突指令执行逻辑单元所共享,并且其中被共享的所述全连接互连将数据元素连接到所述置换指令执行逻辑单元和所述向量冲突指令执行逻辑单元两者。
3.如权利要求1所述的指令处理装置,其特征在于,所述全连接互连包括非阻挡互连。
4.如权利要求1所述的指令处理装置,其特征在于,所述全连接互连包括交叉。
5.如权利要求1所述的指令处理装置,其特征在于,所述置换指令执行逻辑单元包括在所述至少四个输出的每个输出处的用于选择所述至少四个数据元素中的任何数据元素的逻辑,并且其中所述向量冲突指令执行逻辑单元包括在所述至少四个输出的每个输出处的用于将所述至少四个数据元素中的一不同的相应数据元素与所有所述至少四个数据元素进行比较的逻辑。
6.如权利要求5所述的指令处理装置,其特征在于,所述至少四个数据元素包括N个数据元素,其中所述至少四个输出包括N个输出,其中所述数据元素中的每个数据元素包括M位,其中所述置换指令执行逻辑单元包括在所述N个输出的每个输出处的用于选择所述N个数据元素中的任一数据元素的N:1选择器,并且其中所述向量冲突指令执行逻辑单元包括在所述N个输出的每个输出处的用于将所述N个数据元素中的一不同的、相应的M位数据元素与所有N个数据元素进行比较的N个M位比较器。
7.如权利要求6所述的指令处理装置,其中N至少为8。
8.如权利要求6所述的指令处理装置,其中N至少为16而M为32和64中之一。
9.如权利要求1所述的指令处理装置,其特征在于,所述全连接互连是所述向量执行单元中具有全连接到至少四个输出的至少四个输入的唯一的全连接互连。
10.如权利要求1所述的指令处理装置,其特征在于,所述全连接互连的所述输出中的每个输出均分支到所述置换指令执行逻辑单元和所述向量冲突指令执行逻辑单元两者。
11.如权利要求1所述的指令处理装置,其特征在于,所述装置包括通用微处理器,并且其中所述目的地存储位置包括架构上可见的向量寄存器。
12.一种指令执行方法,包括:
接收指示至少第一源向量和指示第一目的地存储位置的置换指令,所述第一源向量包括至少四个数据元素;
通过执行所述置换指令的置换指令执行逻辑单元的全连接互连来传达所述第一源向量的所述至少四个数据元素;
接收指示至少第二源向量和指示第二目的地存储位置的向量冲突指令,所述第二源向量包括至少四个数据元素;
通过执行所述向量冲突指令的向量冲突指令执行逻辑单元的全连接互连来传达所述第二源向量的所述至少四个数据元素。
13.如权利要求12所述的方法,其特征在于,通过所述全连接互连来传达所述第二源向量的所述至少四个数据元素包括通过非阻挡全连接互连来传达所述至少四个数据元素。
14.如权利要求12所述的方法,其特征在于,通过所述全连接互连来传达所述第二源向量的所述至少四个数据元素包括通过交叉来传达所述至少四个数据元素。
15.如权利要求12所述的方法,其特征在于,通过所述全连接互连来传达所述第二源向量的所述至少四个数据元素包括通过所述全连接互连来传达至少8个数据元素。
16.如权利要求12所述的方法,其特征在于,还包括:
响应于所述置换指令而将第一结果向量存储在所述第一目的地存储位置中,所述第一结果向量包括第一多个数据元素,所述第一多个数据元素中的每个数据元素能够是所述第一源向量的所述至少四个数据元素中的任何数据元素;以及
响应于所述向量冲突指令而将第二结果向量存储在所述第二目的地存储位置中,所述第二结果向量包括第二多个数据元素,所述第二多个数据元素中的每个数据元素包括将所述第二源向量中的相应数据元素与所述第二源向量中的其他数据元素进行比较的结果。
17.一种计算机系统,包括:
互连;
处理器,其与所述互连相耦合,所述处理器包括执行单元,所述执行单元包括:
a)全连接互连,其具有至少四个输入和至少四个输出,其中所述至少四个输入用于接收与至少一个源向量的至少四个相应的数据元素,其中所述至少四个输入中的每个输入与所述至少四个输出中的每个输出相耦合;
b)置换指令执行逻辑单元,其与所述至少四个输出相耦合并且用于响应于置换指令而存储第一向量结果;以及
c)向量冲突指令执行逻辑单元,其与所述至少四个输出相耦合并且用于响应于向量冲突指令而将第二向量结果存储在目的地存储位置中;以及
与所述互连相耦合的动态随机存取存储器(DRAM)。
18.如权利要求17所述的计算机系统,其特征在于,所述全连接互连由所述置换指令执行逻辑单元和所述向量冲突指令执行逻辑单元共享以从其接收数据。
19.如权利要求17所述的计算机系统,其特征在于,所述全连接互连包括非阻挡互连。
20.一种指令处理装置,包括:
指令接收单元,被配置为接收指示至少第一源向量和指示第一目的地存储位置的置换指令,所述第一源向量包括至少四个数据元素;
执行单元,其与所述指令接收单元耦合,所述执行单元被配置为响应于所述置换指令,通过所述执行单元中的置换指令执行逻辑单元的全连接互连来传达所述第一源向量的所述至少四个数据元素;
所述指令接收单元还被配置为接收指示至少第二源向量和指示第二目的地存储位置的向量冲突指令,所述第二源向量包括至少四个数据元素;
所述执行单元还被配置为响应于所述向量冲突指令,通过所述执行单元中的向量冲突指令执行逻辑单元的所述全连接互连来传达所述第二源向量的所述至少四个数据元素。
21.如权利要求20所述的指令处理装置,其特征在于,通过所述全连接互连来传达所述第二源向量的所述至少四个数据元素包括通过非阻挡全连接互连来传达所述至少四个数据元素。
22.如权利要求20所述的指令处理装置,其特征在于,通过所述全连接互连来传达所述第二源向量的所述至少四个数据元素包括通过交叉来传达所述至少四个数据元素。
23.如权利要求20所述的指令处理装置,其特征在于,通过所述全连接互连来传达所述第二源向量的所述至少四个数据元素包括通过所述全连接互连来传达至少8个数据元素。
24.如权利要求20所述的指令处理装置,其特征在于:
其中所述执行单元还被配置为响应于所述置换指令而将第一结果向量存储在所述第一目的地存储位置中,所述第一结果向量包括第一多个数据元素,所述第一多个数据元素中的每个数据元素能够是所述第一源向量的所述至少四个数据元素中的任何数据元素;并且
其中所述执行单元还被配置为响应于所述向量冲突指令而将第二结果向量存储在所述第二目的地存储位置中,所述第二结果向量包括第二多个数据元素,所述第二多个数据元素中的每个数据元素包括将所述第二源向量中的相应数据元素与所述第二源向量中的其他数据元素进行比较的结果。
25.如权利要求20所述的指令处理装置,其特征在于,所述指令接收单元是解码单元。
26.一种处理器,包括如权利要求1-11、23-25中任一项所述的指令处理装置。
27.一种计算机系统,包括:
处理器,包括如权利要求1-11、20-25中的任一项所述的指令处理装置;以及
动态随机存取存储器,其与所述处理器相耦合。
CN201180076104.5A 2011-12-29 2011-12-29 具有由向量冲突指令和置换指令共享的全连接互连的处理器 Active CN104025067B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US2011/067982 WO2013101132A1 (en) 2011-12-29 2011-12-29 Processors having fully-connected interconnects shared by vector conflict instructions and permute instructions

Publications (2)

Publication Number Publication Date
CN104025067A CN104025067A (zh) 2014-09-03
CN104025067B true CN104025067B (zh) 2017-12-26

Family

ID=48698366

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201180076104.5A Active CN104025067B (zh) 2011-12-29 2011-12-29 具有由向量冲突指令和置换指令共享的全连接互连的处理器

Country Status (5)

Country Link
US (1) US10678541B2 (zh)
EP (1) EP2798504A4 (zh)
CN (1) CN104025067B (zh)
TW (1) TWI525537B (zh)
WO (1) WO2013101132A1 (zh)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9619236B2 (en) * 2011-12-23 2017-04-11 Intel Corporation Apparatus and method of improved insert instructions
CN104025067B (zh) 2011-12-29 2017-12-26 英特尔公司 具有由向量冲突指令和置换指令共享的全连接互连的处理器
US9665368B2 (en) * 2012-09-28 2017-05-30 Intel Corporation Systems, apparatuses, and methods for performing conflict detection and broadcasting contents of a register to data element positions of another register
US10545757B2 (en) * 2012-12-28 2020-01-28 Intel Corporation Instruction for determining equality of all packed data elements in a source operand
US9292298B2 (en) * 2013-07-08 2016-03-22 Arm Limited Data processing apparatus having SIMD processing circuitry
US9606803B2 (en) * 2013-07-15 2017-03-28 Texas Instruments Incorporated Highly integrated scalable, flexible DSP megamodule architecture
US9904548B2 (en) * 2014-12-22 2018-02-27 Intel Corporation Instruction and logic to perform a centrifuge operation
US9891913B2 (en) * 2014-12-23 2018-02-13 Intel Corporation Method and apparatus for performing conflict detection using vector comparison operations
US9785437B2 (en) * 2014-12-23 2017-10-10 Intel Corporation Method and apparatus for performing a vector bit reversal and crossing
US10203955B2 (en) * 2014-12-31 2019-02-12 Intel Corporation Methods, apparatus, instructions and logic to provide vector packed tuple cross-comparison functionality
GB2540944B (en) * 2015-07-31 2018-02-21 Advanced Risc Mach Ltd Vector operand bitsize control
US10423411B2 (en) 2015-09-26 2019-09-24 Intel Corporation Data element comparison processors, methods, systems, and instructions
EP3428792B1 (en) * 2017-07-10 2022-05-04 Arm Ltd Testing bit values inside vector elements
US11163564B1 (en) * 2018-10-08 2021-11-02 Verisilicon Microelectronics (Shanghai) Co., Ltd. Vector compare and store instruction that stores index values to memory

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101208658A (zh) * 2005-04-08 2008-06-25 艾色拉公司 数据访问和置换单元

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6178500B1 (en) * 1998-06-25 2001-01-23 International Business Machines Corporation Vector packing and saturation detection in the vector permute unit
JP5052713B2 (ja) * 1998-10-09 2012-10-17 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ 条件付き命令を備えるベクトルデータプロセッサ
US6557096B1 (en) 1999-10-25 2003-04-29 Intel Corporation Processors with data typer and aligner selectively coupling data bits of data buses to adder and multiplier functional blocks to execute instructions with flexible data types
US7155601B2 (en) * 2001-02-14 2006-12-26 Intel Corporation Multi-element operand sub-portion shuffle instruction execution
US6922716B2 (en) * 2001-07-13 2005-07-26 Motorola, Inc. Method and apparatus for vector processing
US7305540B1 (en) 2001-12-31 2007-12-04 Apple Inc. Method and apparatus for data processing
EP1512100A2 (en) 2002-05-24 2005-03-09 Koninklijke Philips Electronics N.V. A scalar/vector processor
US7051186B2 (en) 2002-08-29 2006-05-23 International Business Machines Corporation Selective bypassing of a multi-port register file
US8060728B2 (en) * 2007-05-14 2011-11-15 Apple Inc. Generating stop indicators during vector processing
US20090150648A1 (en) * 2007-12-06 2009-06-11 Eric Oliver Mejdrich Vector Permute and Vector Register File Write Mask Instruction Variant State Extension for RISC Length Vector Instructions
US9513905B2 (en) * 2008-03-28 2016-12-06 Intel Corporation Vector instructions to enable efficient synchronization and parallel reduction operations
CN101510082A (zh) 2009-03-19 2009-08-19 大连理工大学 Epa分布式控制系统功能块程序建模及优化方法
US8972698B2 (en) * 2010-12-22 2015-03-03 Intel Corporation Vector conflict instructions
CN104025067B (zh) 2011-12-29 2017-12-26 英特尔公司 具有由向量冲突指令和置换指令共享的全连接互连的处理器

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101208658A (zh) * 2005-04-08 2008-06-25 艾色拉公司 数据访问和置换单元

Also Published As

Publication number Publication date
WO2013101132A1 (en) 2013-07-04
CN104025067A (zh) 2014-09-03
US20140181466A1 (en) 2014-06-26
EP2798504A1 (en) 2014-11-05
US10678541B2 (en) 2020-06-09
TWI525537B (zh) 2016-03-11
TW201346733A (zh) 2013-11-16
EP2798504A4 (en) 2016-07-27

Similar Documents

Publication Publication Date Title
CN104025067B (zh) 具有由向量冲突指令和置换指令共享的全连接互连的处理器
CN104050026B (zh) 使对共享存储器存取的同步松弛的处理器、方法及系统
CN104756090B (zh) 提供扩展的缓存替换状态信息
CN104050012B (zh) 指令模拟处理器、方法和系统
CN104077107B (zh) 利用经掩码的全寄存器访问实现部分寄存器访问的处理器、方法和系统
CN104603746B (zh) 由读和写掩码控制的向量移动指令
CN105453030B (zh) 向较宽的寄存器进行依赖于模式的部分宽度加载的处理器、方法和系统
CN104049953B (zh) 用于合并操作掩码的未经掩码元素的装置、方法、系统和制品
CN104603745B (zh) 用于独立数据上递归计算的向量化的读和写掩码更新指令
CN108475193A (zh) 字节排序指令和四位组排序指令
CN104137060B (zh) 高速缓存协处理单元
CN104903867B (zh) 用于将寄存器的内容广播到另一个寄存器的数据元素位置的系统、装置和方法
CN108268278A (zh) 具有可配置空间加速器的处理器、方法和系统
CN108351830A (zh) 用于存储器损坏检测的硬件装置和方法
CN108369509A (zh) 用于基于通道的跨步分散操作的指令和逻辑
CN108268282A (zh) 用以检查和存储对存储器地址是否在持久存储器中的指示的处理器、方法、系统和指令
CN108292215A (zh) 用于加载-索引和预取-聚集操作的指令和逻辑
CN109791487A (zh) 用于将多个数据元素加载到除紧缩数据寄存器之外的目的地存储位置的处理器、方法、系统和指令
CN109313556A (zh) 可中断和可重启矩阵乘法指令、处理器、方法和系统
CN107408036A (zh) 用户级分叉与结合处理器、方法、系统和指令
CN104011663B (zh) 掩码寄存器上的广播操作
CN104969199B (zh) 实施黑名单分页结构指示值的处理器、方法,以及系统
CN108369516A (zh) 用于加载-索引和预取-分散操作的指令和逻辑
CN106708753A (zh) 在使用共享虚拟存储器的处理器中加速操作的装置和方法
CN105745630B (zh) 用于在集群宽执行机器中的存储器访问的指令和逻辑

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant