用于结构阵列的向量存储/加载指令的制作方法

文档序号:14943906发布日期:2018-07-17 11:51阅读:189来源:国知局

本公开涉及计算机的处理器,并且更具体地,涉及由这些处理器采用的指令集架构(isa)。



背景技术:

指令集,或指令集架构(isa),是涉及计算机的编程的计算机架构的部分。编程可以涉及计算机的不同方面,包括与指令相关联的原生数据类型、寄存器架构、寻址模式、存储器架构、中断和异常处置,以及外部输入和输出(i/o)。应当指出的是,术语指令在本文中一般是指实现在以处理器的专用执行单元的形式的逻辑电路中的宏指令。

编程语言(诸如c编程语言)通常包括可以进一步包括相同数据类型或不同数据类型的数据元素(诸如变量)的结构数据类型。数据元素的类型可以包括字节、字、双字和四倍字,而取决于实现方式,字节、字、双字和四倍字数据元素可以包括相应的8、16、32和64位。可以通过结构的标识符和针对结构内的数据元素的标识符来访问(例如读取或写入)结构(还称为“数据结构”)的数据元素。结构阵列(aos)包括可以根据阵列的索引进行标识的结构集合。使用aos执行计算的程序通常牵涉在计算循环中访问这样的阵列的数据元素。循环可以包括将组织为aos的数据从寄存器移动到存储器的存储操作或将与aos相关联的数据从存储器移动到寄存器的加载操作。

附图说明

将从以下给出的详细描述和从本公开的各种实施例的附图更加全面地理解本公开。然而,附图不应当被理解成将本公开限制到具体实施例,而是仅仅为了解释和理解。

图1图示了根据本公开的实施例的包括处理器102的片上系统(soc)。

图2图示了根据本公开的实施例的load3和store3指令的示例性操作。

图3图示了根据本公开的另一实施例的包括具有掩蔽逻辑的处理器302的片上系统(soc)。

图4是根据本公开的实施例的将aos从存储器加载到寄存器的方法的框图。

图5a是图示了用于包括其中可以使用本公开的一个实施例的异构核的处理器的微架构的框图。

图5b是图示了根据本公开的至少一个实施例实现的有序管线和寄存器重命名阶段、乱序发布/执行管线的框图。

图6图示了用于包括依照本公开的一个实施例的逻辑的处理器的微架构的框图。

图7是图示了其中可以使用本公开的实施例的系统的框图。

图8是其中本公开的实施例可以操作的系统的框图。

图9是其中本公开的实施例可以操作的系统的框图。

图10是依照本公开的实施例的片上系统(soc)的框图。

图11是依照本公开的soc设计的实施例的框图。

图12图示了计算机系统的一个实施例的框图。

具体实施方式

aos,如通常在不同的编程语言中所限定和使用的,是包含固定数目的相同类型结构对象(在本文中称为“结构”)的容器对象。与aos相关联的每一个结构可以通过唯一的索引值来标识,通过该唯一的索引值可以访问aos。每一个结构,如根据其类型定义所限定的,可以包括可以经由数据元素标识符访问的数据元素(例如变量)。可以实例化aos,使得与aos相关联的每一个数据元素存储数据项,因而使得能够使用aos组织数据项的集合。采用aos的计算通常在计算循环中在数据项上执行,其中aos的每一个结构的数据项在计算循环内经历相同的操作集。

当存储在存储器中时,aos的数据项通常在空间上布置,使得属于相同结构(例如通过相同索引值标识)的数据项被靠近彼此地排列。因此,结构内的每一个数据项可以与可由结构内的位置号码标识的位置相关联。然而,在计算期间,这些数据项可能需要被加载到向量寄存器中以供处理器的向量指令处理。向量寄存器是可以在寄存器位置处存储多于一个数据项以供处理器的指令处理的宽寄存器。寄存器位置是存储一个数据项的向量寄存器中的逻辑位置。寄存器位置可以通过寄存器位置号码(例如数据项从参考寄存器位置的偏移或数目)来标识。在微处理器架构的某些实现方式中,处理器可以是相关联的32个向量寄存器,其中每一个向量寄存器可以包括可以存储某个长度(例如8、16、32或64位长)的多个数据项的512位。每一个向量寄存器跨与aos相关联的多个结构存储属于相同数据元素的数据项。因此,如果aos的结构包括多于一个数据元素,在向量寄存器中相邻存储的aos的数据项在存储于存储器中时未被相邻地存储。跨步(stride)是分离在向量寄存器中相邻存储的存储器中的两个数据项的存储器位置距离,其中存储器位置距离是分离存储器中的这两个数据项的中间数据项的数目。因此,包括具有n个数据元素的结构的aos的数据项在存储于存储器中时可以具有跨步n(例如n=2、3或4)。

例如,包括四个元素(例如可以与位置{0,1,2,3}相关联的struct{doublex,y,z,w})的结构在多种多样的高性能计算(hpc)、图形和客户端应用中是常见的。因此,由编译器生成的机器码可以采用四个聚集指令(诸如像在x86isa中指定的vgatherdpd),而这四个聚集指令中的每一个用于将与aos的一个数据元素相关联的数据项加载到可以每一个存储八项的四个向量寄存器(例如256位向量寄存器zmm0/1/2/3)中的相应一个中。因此,处理器可以执行8*4=32个聚集指令以便为这四个向量寄存器(例如zmm0/1/2/3)完全填入有从存储器相关联的数据项,其中每一个向量寄存器利用所检索到的这些结构的某个位置号码来存储数据项。类似地,当处理器试图将来自向量寄存器(例如zmm0/1/2/3)的数据项存储到存储器中时,处理器可能需要执行8*4个分散指令(如在x86isa中指定的vscatterdpd)以便将存储在这四个向量寄存器中的所有数据项移动到存储器中。因此,存在对于用于在存储器与向量寄存器之间输送数据项(诸如与aos相关联的那些)的更高效的加载指令和存储指令的需要。

本公开的实施例包括采用指令集架构(isa)的处理器,该指令集架构(isa)包括可以在与处理器相关联的向量寄存器和存储器之间高效地输送与aos相关联的n(n>1)个数据项的加载指令(通过load#n来表示)和存储指令(通过store#n来表示)的类。取代于使用标量加载指令将与aos相关联的每一个数据项顺序地加载到n个向量寄存器中,load#n指令(其中n是大于一的整数)可以将属于aos的一个数据元素的n个数据项并发地加载到n个向量寄存器中,因而减小完全填充n个向量寄存器的加载操作的数目。类似地,取代于使用标量存储指令从n个向量寄存器顺序地存储与aos相关联的每一个数据项,store#n指令(其中n是大于一的整数)可以并发地将属于aos的一个数据元素并且跨n个寄存器存储的n个数据项并发地存储到存储器中,因而减小将这些数据项输送至存储器的存储操作的数目。

图1图示了根据本公开的实施例的包括处理器102的片上系统(soc)100。处理器102可以包括制作在诸如soc100之类的半导体芯片组上的逻辑电路。处理器100可以是中央处理单元(cpu)、图形处理单元(gpu)或多核处理器的处理核。如图1中所示,处理器102可以包括指令执行管线104和寄存器空间106。另外,处理器102可以可操作地耦合到可以存储与aos相关联的数据项的存储器108。管线104是可以包括多个管线阶段的逻辑电路,并且每一个阶段包括被制作以执行完全执行处理器102的指令集架构(isa)中所指定的指令所需要的多步过程中的特定步骤的逻辑电路。在一个实施例中,管线104可以包括指令提取/解码阶段110、数据提取阶段112、执行阶段114和写回阶段116。

寄存器空间106是包括与处理器102相关联的不同类型的寄存器的逻辑电路区域。在一个实施例中,寄存器空间106可以包括一组向量寄存器122a至122c,每一个可以包括存储由管线104中所执行的指令处理的数据项的某个数目(称为“长度”)的位。取决于实现方式,该组向量寄存器122a-122c可以包括高达最大数目(例如32)的向量寄存器。例如,取决于实现方式,向量寄存器122a-122c可以是64位、128位、256位或512位向量寄存器。每一个向量寄存器122a-122c可以存储一个或多个数据项。在一个实施例中,处理器102可以是单指令多数据(simd)处理器,即处理器102可以执行一个指令以处理存储在向量寄存器122a-122c中的多个数据项。

可以将程序的源代码编译成在与处理器102相关联的指令集架构(isa)中定义的一系列机器可执行指令。当处理器102开始执行可执行指令时,可以将这些机器可执行指令放置在管线104上以供顺序执行。指令提取/解码阶段110可以检索放置在管线104上的指令并且确定与该指令相关联的标识符。指令标识符可以将所接收的指令与处理器102的isa中指定的一个相关联。

isa中指定的某些指令可以被设计成在向量寄存器122a-122c与存储器108之间输送数据项。数据提取阶段112可以从寄存器空间106检索与要处理的aos相关联的数据项。执行阶段114可以包括执行处理器102的isa中指定的指令的逻辑电路。

在一个实施例中,与执行阶段114相关联的逻辑电路可以包括多个“执行单元”(或功能单元),每一个执行单元包括专用于执行一个相应指令的逻辑电路。由这些执行单元执行的所有指令的集合可以构成与处理器102相关联的指令集。响应于执行指令以处理由数据提取阶段112检索的数据项,写回阶段116可以输出寄存器空间106中的结果。

在一个实施例中,与处理器102相关联的isa可以包括加载指令(load#n118)的类和存储指令(store#n120)的类。load#n118指令在被执行时可以从存储器108向向量寄存器122a-122c输送数据项,而n是大于一的整数并且指示用于加载数据元素的向量寄存器的数目(还称为“跨步”,因为它与存储在存储器中的数据项的跨步相同)。store#n120指令在被执行时可以从向量寄存器122a-122c向存储器108输送数据项。

数目n可以是大于1的整数数目。例如,load#n的类可以包括load3指令和load4指令。处理器102的执行阶段114可以包括load#n执行单元118,以对应地包括被制作以执行load3指令的功能的第一逻辑电路和被制作以执行load4指令的第二逻辑电路。load#n指令,在使用load#n执行单元118执行时,可以将与aos相关联的n个数据项从存储器位置并发地输送至与处理器102相关联的n个向量寄存器122a-122c。

类似地,处理器102的isa还可以包括store#n指令的类。例如,store#n的类可以包括store3指令和store4指令。处理器102的执行阶段114可以包括store#n执行单元118,以对应地包括被制作以执行store3指令的第一逻辑电路和被制作以执行store4指令的第二逻辑电路。store#n指令,在使用store#n执行单元118执行时,可以从与处理器102相关联的n个向量寄存器122a-122c向存储器位置并发地输送n个数据项。

图2图示了根据本公开的实施例的load3和store3指令的示例性操作。可以在程序中如下定义结构类型:

structdatastructuretype{

doublex,y,z

},

其中语言构造描述包括双倍类型的三个数据元素的数据结构。可以使用如下的结构类型定义来实例化100个结构的结构阵列(aos):

datastructuretypearrayofstructure[100]

其中arrayofstructure[100]是包括100个结构实例的阵列,每一个根据datastructuretype来定义,并且每一个结构包括双精度的三个数据项(即x、y和z)。双精度数据项可以每一个通过数个字节来表示。例如,在一些实现方式中,双数据元素可以占据存储器空间的八个字节。

参照图2,在一个实施例中,与arrayofstructure相关联的数据项可能已经被存储在与处理器相关联的存储器中。在存储器中,与arrayofstructure相关联的数据项可以以根据阵列索引的顺序从起始存储器位置(例如位置0)接连地布置。每一个存储器位置存储一个数据项。因此,与arrayofstructure[0]相关联的数据项(x0,y0,z0)可以存储在存储器位置0-2处,其中每一个存储器位置可以与四字节存储器空间相关联;与arrayofstructure[1]相关联的数据项(x1,y1,z1)可以存储在存储器位置3-5处,并且以此类推。load3指令可以将数据项从这些存储器位置加载到与处理器相关联的向量寄存器。取代于以根据数据元素的顺序加载数据项(即将x数据项(x0,x1,x2,x3)中的每一个加载到向量寄存器1中;然后将y数据项(y0,y1,y2,y3)中的每一个加载到向量寄存器2中;并且然后将z数据项(z0,z1,z2,z3)中的每一个加载到向量寄存器3中),load3指令的执行是将与arrayofstructure的一个结构相关联的所有数据元素并发地加载到这些向量寄存器中,其中这三个向量寄存器中的每一个存储相应的一个数据项。

在一个实施例中,处理器可以与通过字母标识符随后是数字标识符来标识的一组向量寄存器(例如32个向量寄存器)相关联。例如,在x86avx架构中,向量寄存器可以被命名为zimm0,zimm1,……,zimm#m,其中zimm是向量寄存器的名称,并且#m是用于标识这些向量寄存器的逻辑顺序的数字标识符。load3指令可以以以下形式来称呼:“load3startvectorregstartmemorylocation”,其中startvectorreg指定从存储器接收数据的第一向量寄存器(例如zimm0),并且startmemorylocation指定在此处存储要加载到向量寄存器中的数据项的序列开头的起始存储器位置。数字3标识存储在存储器中的数据项的跨步,以及因而用于接收数据项的从zmm0开始的三个向量寄存器。因此,当称为load3zimm0memory0时,load3指令可以在每一次执行处将与arrayofstructure的一个结构相关联的这三个数据项加载到zimm0–zimm2中的三个对应位置中。

在如图2中所示的示例中,与存储在存储器位置0-2中的结构arrayofstructure[0]的位置{0,1,2}相关联的数据项{x0,y0,z0}可以被加载到向量寄存器zimm0–zimm2的相应第一位置中,与存储在存储器位置3-5中的结构arrayofstructure[1]的位置{0,1,2}相关联的数据项{x1,y1,z1}可以被加载到向量寄存器zimm0–zimm2的相应第二位置中,并且以此类推,直到zimm0–zimm2被填充有数据项。响应于填满向量寄存器zimm0–zimm2,如果存在要加载到向量寄存器中的更多数据项,load3指令还可以将数据项加载到按顺序接下来的向量寄存器或zimm3–zimm5中。因此,通过执行load3指令100次而不是执行3*100=300个标量聚集指令,与arrayofstructure[100]相关联的数据项可以被加载到向量寄存器中。

相反,可以执行store3指令以将与存储在向量寄存器中的arrayofstructure相关联的数据项输送至存储器位置中。每一个向量寄存器可能已经用于存储与aos的一个数据元素相关联的数据项。例如,如图2中所示,第一向量寄存器(zimm0)可以存储数据项x0–x3,第二向量寄存器(zimm1)可以存储数据项y0–y3,并且第三向量寄存器(zimm2)可以存储数据项z0–z3,其中每一个数据项可以是占据向量寄存器zimm0–zimm2中的8个字节的双倍类型。store3指令可以将数据项从与处理器相关联的向量寄存器存储到存储器位置。取代于以根据链接到每一个向量寄存器的数据元素的顺序存储数据项(例如x0–x3,然后y0–y3,并且然后z0–z3),store3指令的执行可以将与arrayofstructure的一个结构相关联的这三个数据项从三个向量寄存器并发地存储到存储器位置中。

store3指令可以以以下形式来称呼:“store3startmemorylocationstartvectorreg”,其中startvectorreg指定存储与arrayofstructure相关联的数据项的第一向量寄存器(例如zimm0),并且startmemorylocation指定在此处存储要存储在存储器中的数据项的开头的起始存储器位置。因此,当称为store3memory0zimm0时,store3指令可以在每一次执行处将与arrayofstructure的一个结构相关联的三个数据项从zimm0–zimm2中的三个对应位置存储到存储器中。在如图2中所示的示例中,存储在向量寄存器zimm0–zimm2的相应第一位置中的结构arrayofstructure[0]的数据项{x0,y0,z0}可以存储在存储器位置0-2中,存储在向量寄存器zimm0–zimm2的相应第二位置中的结构arrayofstructure[1]的数据项{x1,y1,z1}可以存储在存储器位置3-5中,并且以此类推,直到zimm0–zimm2中的数据项全部被存储在存储器中。在该点处,如果存在要存储到存储器中的更多数据项,store3指令还可以将数据项从zimm3–zimm5存储到存储器中。

图2是当n=3时针对load#n和store#n指令的非限制性示例。本公开的实施例可以包括load#n和store#n指令,其中n是除了3之外的整数。在一些实施例中,n可以是2或4。因此,处理器102的执行单元114可以对应地包括逻辑电路以执行由处理器102采用的isa中所限定的load2、load3、load4、store2、store3和store4指令。

在一个实施例中,可以根据与aos相关联的数据元素的数据类型来进一步指定不同类型的load#n和store#n指令。在一个实施例中,数据元素类型可以是字节(b)、字(w)、双字(d)或四倍字(q)中的任何一个,其中字节包括8位,字取决于架构设计而可以包括16位,双字可以包括32位,并且四倍字可以包括64位。因此,可以将load#n和store#n指令进一步指定为load#n{b/w/d/q}和store#n{b/w/d/q},其中n是跨步,b表示字节数据类型,w表示字数据类型,d表示双字数据类型,并且q表示四倍字数据类型。示例性加载和存储指令可以包括“load2b”、“load2w”、“load2d”、“load2q”、“store2b”、“store2w”、“store2d”、“store2q”等。跨步长度n涉及在数据结构类型中限定的数据元素的数目(因而,用于存储数据项的向量寄存器的数目),并且数据元素的类型(b/w/d/q)确定每一个数据项在向量寄存器中所占据的位数目。

在一些实施例中,load#n指令可以将数据项从存储器加载到向量寄存器中的可准许位置中,并且store#n指令可以将数据项从向量寄存器中的可准许位置存储到存储器中。图3图示了根据本公开的另一实施例的包括具有掩蔽逻辑的处理器302的片上系统(soc)300。如图3中所示的处理器302包括如结合图1描述的处理器102的所有组件。在一个实施例中,处理器302的执行单元还可以包括基于掩码阻挡向量寄存器112a-122c的某些位置的掩蔽逻辑单元304。掩码的每一位可以对应于存储一个数据项的向量寄存器122a-122c的相应数据位置。因此,向量寄存器的数据位置可以包括一系列索引值,每一个可以对应于存储一个数据项的位置。因此,二进制值可以用于指示向量寄存器中的数据位置是否被阻挡。例如,二进制值“0”(或相反地,“1”)可以指示被阻挡,并且二进制值“1”(或相反地“0”)可以指示未被阻挡。在一个实施例中,寄存器空间302可以包括存储适用于load#n和store#n指令的某些掩码的一个或多个掩码寄存器306。每一个掩码寄存器306可以是存储掩码的二进制值的特定或通用寄存器。在另一实施例中,掩码可以作为命令行输入而被引导供给到load#n和store#n指令。

load#n和store#n指令可以扩充有掩码以根据掩码指示向量寄存器122a-122c的某些数据位置被阻挡。在一个实施例中,具有掩蔽的加载指令可以具有以下格式:“load#nstartvectorregstartmemorylocationmaskreg”,其中startvectorreg指代接收数据项的起始向量寄存器,startmemorylocation表示要加载到向量寄存器中的数据项序列的开头的存储器位置,并且maskreg是存储掩码的寄存器。在执行期间,load#n指令首先检查掩码以确定向量寄存器的数据位置是否被阻挡。如果其未被阻挡,load#n从存储器检索n个数据项并且加载到n个向量寄存器中的数据位置中。如果其被阻挡,load#n移动到下n个数据项和下个向量寄存器位置而不将数据项加载到阻挡位置中;因此,可以预留该数据位置处的向量寄存器的内容。

类似地,具有掩蔽的存储指令可以具有以下格式:“store#nstartmemorylocationstartvectorregmaskreg”,其中startvectorreg指代检索数据项的起始向量寄存器,startmemorylocation表示存储来自向量寄存器的数据项序列的开头的存储器位置,并且maskreg是存储掩码的寄存器。在执行期间,store#n指令首先检查掩码以确定向量寄存器的数据位置是否被阻挡。如果其未被阻挡,store#n从n个向量寄存器检索n个数据项并且存储到存储器中。如果其被阻挡,store#n移动到下个向量寄存器位置而不将数据项存储到存储器中。

图4是根据本公开的实施例的将aos从存储器加载到寄存器的方法400的框图。方法400可以通过处理逻辑来执行,该处理逻辑可以包括硬件(例如电路、专用逻辑、可编程逻辑、微代码等)、软件(诸如在处理设备上运行的指令、通用计算机系统或专用机器)、固件或其组合。在一个实施例中,方法400可以部分地由如图1中所示的处理器102和如图3中所示的处理器302的处理逻辑执行。

为了解释的简化,将方法400描绘和描述为一系列动作。然而,依照本公开的动作可以以各种顺序和/或并发地发生,并且其中本文未呈现和描述其它动作。另外,并未所有所图示的动作都可以被执行以实现依照所公开的主题的方法400。此外,本领域技术人员将理解和领会到,方法400可以可替换地被表示为经由状态图或事件的一系列相互关联的状态。

参照图4,在402处,处理器可以开始计算循环的执行以便将存储在与处理器相关联的存储器中的aos加载到与处理器相关联的向量寄存器。

在404处,处理器可以标识与aos相关联的两个或更多数据项,其中所述两个或更多数据项可以存储在存储器中的接连存储器位置中。

在406处,处理器可以标识可以接收从存储器加载的所述两个或更多数据项的向量寄存器。这些向量寄存器可以被组织在有序序列中并且通过具有数字后缀的字母串来标识,诸如在x86avx微架构中指定的zimm0-zimm32向量寄存器。

在408处,处理器可以执行在由处理器采用的isa中限定的load#n指令。load#n指令的执行可以指定来自所标识的向量寄存器的n个向量寄存器,并且指定在此处将与aos相关联的数据项存储在存储器中的存储器位置。因此,load#n指令的执行可以将n个所述两个或更多数据项从存储器位置加载到n个向量寄存器,其中所述n个向量寄存器中的每一个存储相应的一个数据项。

在410处,响应于加载所述n个数据项,处理器可以将存储器位置更新到存储在存储器中的下n个数据项(例如通过向上移动n个存储器位置),并且重复load#n指令的执行以便将与aos的下个结构相关联的n个数据项加载到所述n个向量寄存器中的下个数据位置。可以重复该过程,直到将与aos中的所有结构相关联的数据项加载到向量寄存器中。

图5a是图示了依照本公开的一个实施例的用于实现包括异构核的处理设备的处理器500的微架构的框图。具体地,处理器500描绘了根据本公开的至少一个实施例的要被包括在处理器中的有序架构核和寄存器重命名逻辑、乱序发布/执行逻辑。

处理器500包括耦合到执行引擎单元550的前端单元530,并且二者耦合到存储器单元570。处理器500可以包括精简指令集计算(risc)核、复杂指令集计算(cisc)核、超长指令字(vliw)核或混合或可替换的核类型。作为又一选项,处理器500可以包括专用核,诸如例如网络或通信核、压缩引擎、图形核等。在一个实施例中,处理器500可以是多核处理器或者可以是多处理器系统的部分。

前端单元530包括耦合到指令高速缓存单元534的分支预测单元532,指令高速缓存单元534耦合到指令转译旁路缓冲器(tlb)536,指令转译旁路缓冲器(tlb)536耦合到指令提取单元538,指令提取单元538耦合到解码单元540。解码单元540(还称为解码器)可以解码指令,并且生成作为输出的一个或多个微操作、微代码入口点、微指令、其它指令或其它控制信号(其从原始指令解码或者以其它方式反映原始指令,或者从原始指令导出)。解码器540可以使用各种不同的机制实现。合适的机制的示例包括但不限于,查找表、硬件实现方式、可编程逻辑阵列(pla)、微代码只读存储器(rom)等。指令高速缓存单元534还耦合到存储器单元570。解码单元540耦合到执行引擎单元550中的重命名/分配器单元552。

执行引擎单元550包括耦合到引退单元554和一个或多个调度器单元556的集合的重命名/分配器单元552。(多个)调度器单元556表示任何数目的不同调度器,包括预留站(rs)、中央指令窗等。(多个)调度器单元556耦合到(多个)物理寄存器文件(多个)单元558。(多个)物理寄存器文件单元558中的每一个表示一个或多个物理寄存器文件,其中的不同的物理寄存器文件存储一个或多个不同的数据类型,诸如标量整数、标量浮点、打包整数、打包浮点、向量整数、向量浮点等、状态(例如作为要执行的下一指令的地址的指令指针)等。(多个)物理寄存器文件(多个)单元558被引退单元554叠覆以说明可以以其实现寄存器重命名和乱序执行的各种方式(例如使用(多个)重排序缓冲器和(多个)引退寄存器文件,使用(多个)将来文件、(多个)历史缓冲器和(多个)引退寄存器文件;使用寄存器地图和寄存器池;等)。

在一个实现方式中,处理器500可以与关于图1所描述的处理器102相同。

一般地,架构寄存器从处理器的外侧或从编程者的角度来看是可见的。寄存器不限于任何已知的特定类型的电路。各种不同类型的寄存器是合适的,只要它们能够如本文所描述的那样存储和提供数据即可。合适的寄存器的示例包括但不限于,专用物理寄存器、使用寄存器重命名而动态分配的物理寄存器、专用和动态分配的物理寄存器的组合等。引退单元554和(多个)物理寄存器文件(多个)单元558耦合到(多个)执行集群560。(多个)执行集群560包括一个或多个执行单元562的集合和一个或多个存储器访问单元564的集合。执行单元562可以执行各种运算(例如移位、加法、减法、乘法)和在各种类型的数据(例如标量浮点、打包整数、打包浮点、向量整数、向量浮点)上操作。

虽然一些实施例可以包括专用于特定功能或功能集合的数个执行单元,但是其它实施例可以包括全部执行全部功能的仅一个执行单元或多个执行单元。(多个)调度器单元556、(多个)物理寄存器文件(多个)单元558和(多个)执行集群560被示出为是可能复数的,因为某些实施例创建用于某些类型的数据/操作的分离管线(例如标量整数管线、标量浮点/打包整数/打包浮点/向量整数/向量浮点管线,和/或存储器访问管线,其每一个具有其自身的调度器单元、(多个)物理寄存器文件单元和/或执行集群——并且在分离的存储器访问管线的情况下,实现某些实施例,其中该管线的执行集群仅具有(多个)存储器访问单元564)。还应当理解的是,在使用分离管线的情况下,这些管线中的一个或多个可以是乱序发布/执行,并且其它的是有序的。

存储器访问单元564的集合耦合到存储器单元570,存储器单元570可以包括数据预提取器580、数据tlb单元572,数据高速缓存单元(dcu)574和2级(l2)高速缓存单元576,举几个例子。在一些实施例中,dcu574还称为第一级数据高速缓存(l1高速缓存)。dcu574可以处置多个未解决的高速缓存未命中,并且继续服务即将到来的存储和加载。其还支持维持高速缓存相干性。数据tlb单元572是用于通过映射虚拟和物理地址空间来改进虚拟地址转译速度的高速缓存。在一个示例性实施例中,存储器访问单元564可以包括加载单元、存储地址单元和存储数据单元,其中的每一个耦合到存储器单元570中的数据tlb单元572。l2高速缓存单元576可以耦合到一个或多个其它的高速缓存级并且最终耦合到主存储器。

在一个实施例中,数据预提取器580通过自动预测程序将要消费哪个数据来向dcu574推测性地加载/预提取数据。预提取可以是指,在数据由处理器实际需求之前,向更靠近(例如产生更低访问延时)于处理器的更高级存储器位置输送存储在存储器层级的一个存储器位置(例如较低级高速缓存或存储器)中的数据。更具体地,预提取可以是指,在处理器发布对于正在返回的特定数据的需求之前,从较低级高速缓存/存储器之一向数据高速缓存和/或预提取缓冲器的数据的早期检索。

处理器500可以支持一个或多个指令集(例如x86指令集(具有已经被添加有较新版本的一些扩展);ca森尼维尔市的mips技术的mips指令集;ca森尼维尔市的arm公司的arm指令集(具有诸如neon之类的附加扩展))。

应当理解的是,核可以支持多线程(执行操作或线程的两个或更多并行集合),并且可以以各种方式这样做,包括经时间切片的多线程、同时多线程(其中单个物理核提供用于物理核同时进行多线程的线程中的每一个的逻辑核),或其组合(例如经时间切片的提取和解码以及此后的同时多线程,诸如在intel®超线程技术中)。

虽然在乱序执行的上下文中描述寄存器重命名,但是应当理解的是,寄存器重命名可以使用在有序架构中。虽然处理器的所说明的实施例还包括分离的指令和数据高速缓存单元和共享l2高速缓存单元,但是可替换的实施例可以具有用于指令和数据二者的单个内部高速缓存,诸如例如1级(l1)内部高速缓存,或多级内部高速缓存。在一些实施例中,系统可以包括内部高速缓存和在核和/或处理器外部的外部高速缓存的组合。可替换地,所有高速缓存可以在核和/或处理器外部。

图5b是图示了根据本公开的一些实施例的由图5a的处理设备500实现的有序管线和寄存器重命名阶段、乱序发布/执行管线的框图。图5b中的实线框图示了有序管线,而虚线框图示了寄存器重命名、乱序发布/执行管线。在图5b中,处理器管线500包括提取阶段502、长度解码阶段504、解码阶段506、分配阶段508、重命名阶段510、调度(还称为派遣或发布)阶段512、寄存器读取/存储器读取阶段514、执行阶段516、写回/存储器写入阶段518、异常处置阶段522和提交阶段524。在一些实施例中,阶段502-524的顺序可以不同于所图示的,并且不限于图5b中所示的特定顺序。

图6图示了依照本公开的一个实施例的用于包括混合核的处理器600的微架构的框图。在一些实施例中,依照一个实施例的指令可以被实现成在具有字节、字、双字、四倍字等的大小的数据元素以及诸如单精度和双精度整数以及浮点数据类型之类的数据类型上进行操作。在一个实施例中,有序前端601是提取要执行的指令并且准备它们以供稍后在处理器管线中使用的处理器600的部分。

前端601可以包括若干单元。在一个实施例中,指令预提取器626从存储器提取指令并且将它们馈送至指令解码器628,指令解码器628进而解码或解释它们。例如,在一个实施例中,解码器将所接收到的指令解码成机器可以执行的称为“微指令”或“微操作”(还称为微op或uop)的一个或多个操作。在其它实施例中,解码器将指令解析成操作码(opcode)和对应的数据和控制字段,依照一个实施例,该操作码和对应的数据和控制字段由微架构用于执行操作。在一个实施例中,追踪高速缓存630取经解码的uop并且将它们汇编成程序排序序列或在oup队列634中追踪以供执行。当追踪高速缓存630遭遇复杂指令时,微代码rom632提供完成操作所需要的uop。

将一些指令转换成单个微op,而其它需要若干微op以完成完整的操作。在一个实施例中,如果需要多于四个微op以完成指令,解码器628访问微代码rom632以进行指令。对于一个实施例,可以将指令解码成小数目的微op以用于在指令解码器628处进行处理。在另一实施例中,倘若需要数个微op以完成操作,可以在微代码rom632内存储指令。追踪高速缓存630是指入口点可编程逻辑阵列(pla),依照一个实施例,入口点可编程逻辑阵列(pla)确定正确的微指令指针以用于读取微代码序列以完成来自微代码rom632的一个或多个指令。在微代码rom632完成针对指令的序列化微op之后,机器的前端601继续从追踪高速缓存630提取微op。

乱序执行引擎603是其中准备指令以供执行的地方。乱序执行逻辑具有数个缓冲器以在它们向下去往管线并且被调度以供执行时平滑掉和重排序指令流以优化性能。分配器逻辑分配每一个uop需要以便执行的机器缓冲器和资源。寄存器重命名逻辑将逻辑寄存器重命名到寄存器文件中的条目上。分配器还为两个uop队列(一个用于存储器操作并且一个用于非存储器操作)之一中的每一个uop分配条目,在指令调度器之前:存储器调度器、快速调度器602、缓慢/一般浮点调度器604和简单浮点调度器606。uop调度器602、604、606基于其相关输入寄存器操作数源的就绪性和uop完成其操作所需要的执行资源的可用性而确定uop何时准备好执行。一个实施例的快速调度器602可以在主时钟周期的每一半上进行调度,而其它调度器可以每个主处理器时钟周期仅调度一次。调度器仲裁派遣端口以调度uop以供执行。

寄存器文件608、610坐落在调度器602、604、606和执行块611中的执行单元612、614、616、618、620、622、624之间。存在分别用于整数和浮点操作的分离寄存器文件608、610。一个实施例的每一个寄存器文件608、610还包括旁路网络,其可以绕过或向新的相关uop转发尚未被写入到寄存器文件中的刚完成的结果。整数寄存器文件608和浮点寄存器文件610还能够与其它传送数据。对于一个实施例,将整数寄存器文件608拆分成两个分离的寄存器文件,一个寄存器文件用于数据的低序32位,并且第二寄存器文件用于数据的高序32位。一个实施例的浮点寄存器文件610具有128位宽条目,因为浮点指令典型地具有在宽度方面从64至128位的操作数。

执行块611包含执行单元612、614、616、618、620、622、624,其中实际地执行指令。该区段包括存储微指令需要执行的整数和浮点数据操作数值的寄存器文件608、610。一个实施例的处理器600包括数个执行单元:地址生成单元(agu)612、agu614、快速alu616、快速alu618、缓慢alu620、浮点alu622、浮点移动单元624。对于一个实施例,浮点执行块622、624执行浮点mmx、simd和sse,或其它操作。一个实施例的浮点alu622包括64位乘64位浮点除法器以执行除法、平方根和余数微op。对于本公开的实施例,牵涉浮点值的指令可以利用浮点硬件来处置。

在一个实施例中,alu操作去往高速alu执行单元616、618。一个实施例的快速alu616、618可以执行快速操作(具有半个时钟周期的有效延迟)。对于一个实施例,大多数复杂的整数操作去往缓慢alu620,因为缓慢alu620包括用于长延迟类型的操作(诸如乘法、移位、旗标逻辑和分支处理)的整数执行硬件。存储器负载/存储操作由agu612、614执行。对于一个实施例,在执行64位数据操作数上的整数运算的上下文中描述整数alu616、618、620。在可替换的实施例中,alu616、618、620可以被实现成支持各种数据位,包括16、32、128、256等。类似地,浮点单元622、624可以被实现成支持具有各种宽度的位的操作数范围。对于一个实施例,浮点单元622、624可以结合simd和多媒体指令在128位宽打包数据操作数上进行操作。

在一个实施例中,uop调度器602、604、606在父负载完成执行之前派遣相关操作。由于在处理器600中推测地调度和执行uop,因此处理器600还包括处置存储器未命中的逻辑。如果数据负载在数据高速缓存中未命中,可以存在为调度器留下临时不正确的数据的管线中的飞行中的相关操作。重放机构追踪和重执行使用不正确数据的指令。仅相关操作需要被重放并且允许独立的操作完成。处理器的一个实施例的调度器和重放机构还设计成捕捉用于文本串比较操作的指令序列。

处理器600还包括根据本公开的实施例的实现用于存储器消歧(disambiguation)的存储地址预测的逻辑。在一个实施例中,处理器600的执行块611可以包括用于实现用于存储器消歧的存储地址预测的存储地址预测器(未示出)。

术语“寄存器”可以指用作标识操作数的指令部分的板上处理器存储位置。换言之,寄存器可以是从处理器的外部(从编程者的角度来看)可用的那些。然而,实施例的寄存器不应当在含义上被限于特定类型的电路。而是,实施例的寄存器能够存储和提供数据,并且执行本文所描述的功能。本文所描述的寄存器可以由处理器内的电路使用任何数目的不同技术来实现,诸如专用物理寄存器、使用寄存器重命名而动态分配的物理寄存器、专用和动态分配的物理寄存器的组合等。在一个实施例中,整数寄存器存储三十二位整数数据。一个实施例的寄存器文件还包含用于打包数据的八个多媒体simd寄存器。

对于以下的讨论,将寄存器理解为被设计成持有打包数据的数据寄存器,诸如利用来自加利福尼亚州圣克拉拉的intel公司的mmxtm技术支持的微处理器中的64位宽mmx寄存器(在一些实例中还称为“mm”寄存器)。以整数和浮点形式二者可用的这些mmx寄存器可以关于伴随simd和sse指令的打包数据元素进行操作。类似地,涉及sse2、sse3、sse4或更高(一般地称为:“ssex”)技术的128位宽xmm寄存器也可以用于持有这样的打包数据操作数。在一个实施例中,在存储打包数据和整数数据中,寄存器不需要区分这两种数据类型。在一个实施例中,在相同的寄存器文件或不同的寄存器文件中包含整数和浮点。另外,在一个实施例中,可以在不同的寄存器或相同的寄存器中存储浮点和整数数据。

现在参照图7,所示出的是图示了其中可以使用本公开的实施例的系统700的框图。如图7中所示,微处理器系统700是点对点互连系统,并且包括经由点对点互连750耦合的第一处理器770和第二处理器780。虽然被示出有仅两个处理器770、780,但是要理解的是,本公开的实施例的范围不如此受限。在其它实施例中,在给定处理器中可以存在一个或多个附加的处理器。在一个实施例中,多处理器系统700可以实现如本文所描述的混合核。

处理器770和780被示出分别包括集成存储器控制器单元772和782。处理器770还包括作为其总线控制器单元的部分的点对点(p-p)接口776和778;类似地,第二处理器780包括p-p接口786和788。处理器770、780可以经由点对点(p-p)接口750使用p-p接口电路778、788交换信息。如图7中所示,imc772和782将处理器耦合到相应的存储器,即存储器732和存储器734,其可以是本地附接到相应处理器的主存储器的部分。

处理器770、780可以每一个经由各个p-p接口752、754使用点对点接口电路776、794、786、798与芯片组790交换信息。芯片组790还可以经由高性能图形接口739与高性能图形电路738交换信息。

共享高速缓存(未示出)可以被包括在处理器中或在两个处理器外部,但是经由p-p互连与处理器连接,使得如果将处理器置于低功率模式中,任一或两个处理器的本地高速缓存信息可以存储在共享高速缓存中。

芯片组790可以经由接口796耦合到第一总线716。在一个实施例中,第一总线716可以是外围组件互连(pci)总线,或诸如pciexpress总线或另一第三代i/o互连总线之类的总线,尽管本公开的范围不如此受限。

如图7中所示,各种i/o设备714可以耦合到第一总线716,连同总线桥718,总线桥718将第一总线716耦合到第二总线720。在一个实施例中,第二总线720可以是低引脚数(lpc)总线。各种设备可以耦合到第二总线720,包括例如键盘和/或鼠标722、通信设备727和存储单元728,诸如盘驱动器或其它大容量存储设备,所述其它大容量存储设备在一个实施例中可以包括指令/代码和数据730。另外,音频i/o724可以耦合到第二总线720。要指出的是,其它架构是可能的。例如,取代于图7的点对点架构,系统可以实现多跳总线或其它这样的架构。

现在参照图8,所示出的是其中本公开的一个实施例可以操作的系统800的框图。系统800可以包括一个或多个处理器810、815,其耦合到图形存储器控制器中枢(gmch)820。在图8中以断线指代附加处理器815的可选性质。在一个实施例中,处理器810、815实现根据本公开的实施例的混合核。

每一个处理器810、815可以是如以上所描述的电路、集成电路、处理器和/或硅集成电路的某个版本。然而,应当指出的是,不太可能集成图形逻辑和集成存储器控制单元将存在于处理器810、815中。图8图示了gmch820可以耦合到存储器840,存储器840可以是例如动态随机存取存储器(dram)。对于至少一个实施例,dram可以与非易失性高速缓存相关联。

gmch820可以是芯片组或芯片组的部分。gmch820可以与(多个)处理器810、815通信并且控制(多个)处理器810、815与存储器840之间的交互。gmch820还可以充当(多个)处理器810、815与系统800的其它元件之间的加速总线接口。对于至少一个实施例,gmch820经由诸如前侧总线(fsb)895之类的多跳总线与(多个)处理器810、815通信。

另外,gmch820耦合到显示器845(诸如平板或触摸屏显示器)。gmch820可以包括集成图形加速器。gmch820还耦合到输入/输出(i/o)控制器中枢(ich)850,ich850可以用于将各种外围设备耦合到系统800。例如在图8的实施例中所示出的是外部图形设备860,其可以是耦合到ich850的分立图形设备,连同另一外围设备870。

可替换地,在系统800中还可以存在附加的或不同的处理器。例如,(多个)附加的处理器815可以包括与处理器810相同的(多个)附加处理器、与处理器810异构或非对称的(多个)附加处理器、加速器(诸如例如图形加速器或数字信号处理(dsp)单元)、现场可编程门阵列或任何其它处理器。在包括架构、微架构、热学、功耗特性等的度量的一连串度量方面,可以存在(多个)处理器810、815之间的各种差异。这些差异可以将其自身有效地表明为处理器810、815之中的非对称性和异构性。对于至少一个实施例,各种处理器810、815可以驻留在相同的管芯封装中。

现在参照图9,所示出的是其中本公开的实施例可以操作的系统900的框图。图9图示了处理器970、980。在一个实施例中,处理器970、980可以实现如以上所描述的混合核。处理器970、980可以分别包括集成存储器和i/o控制逻辑(“cl”)972和982,并且分别经由点对点(p-p)接口978和988之间的点对点互连950与彼此互相通信。处理器970、980每一个经由点对点互连952和954通过如所示的相应p-p接口976至994和986至998与芯片组990通信。对于至少一个实施例,cl972、982可以包括集成存储器控制器单元。cl972、982可以包括i/o控制逻辑。如所描绘的,耦合到cl972、982和i/o设备914的存储器932、934还耦合到控制逻辑972、982。遗留i/o设备915经由接口996耦合到芯片组990。

实施例可以实现在许多不同的系统类型中。图10是依照本公开的实施例的soc1000的框图。虚线框是更高级的soc上的可选特征。在图10中,(多个)互连单元1012耦合到:应用处理器1020,其包括一个或多个核1002a-n的集合和(多个)共享高速缓存单元1006;系统代理单元1010;(多个)总线控制器单元1016;(多个)集成存储器控制器单元1014;一组或一个或多个媒体处理器1018,其可以包括集成图形逻辑1008、用于提供静止和/或视频相机功能的图像处理器1024、用于提供硬件音频加速的音频处理器1026,以及用于提供视频编码/解码加速的视频处理器1028;静态随机存取存储器(sram)单元1030;直接存储器访问(dma)单元1032;以及用于耦合到一个或多个外部显示器的显示单元1040。在一个实施例中,存储器模块可以被包括在(多个)集成存储器控制器单元1014中。在另一实施例中,存储器模块可以被包括在可以用于访问和/或控制存储器的soc1000的一个或多个其它组件中。应用处理器1020可以包括用于实现如本文的实施例中所描述的混合核的存储地址预测器。

存储器层级包括核内的一级或多级高速缓存、一组或一个或多个共享高速缓存单元1006和耦合到集成存储器控制器单元1014的集合的外部存储器(未示出)。共享高速缓存单元1006的集合可以包括一个或多个中级高速缓存,诸如2级(l2)、3级(l3)、4级(l4)或其它级高速缓存、末级高速缓存(llc)和/或其组合。

在一些实施例中,核1002a-n中的一个或多个能够进行多线程。系统代理1010包括协调和操作核1002a-n的那些组件。系统代理单元1010可以包括例如功率控制单元(pcu)和显示单元。pcu可以是或包括为了调整核1002a-n和集成图形逻辑1008的功率状态所需要的逻辑和组件。显示单元用于驱动一个或多个外部连接的显示器。

核1002a-n在架构和/或指令集方面可以是同构或异构的。例如,核1002a-n中的一些可以是有序的,而其它是乱序的。作为另一示例,核1002a-n中的两个或更多可以能够执行相同指令集,而其它可以能够执行仅该指令集的子集或不同的指令集。

应用处理器1020可以是通用处理器,诸如从加利福尼亚州圣克拉拉的intel公司可得到的core™i3、i5、i7、2双核和四核xeon™、itanium™、atomtm或quark™处理器。可替换地,应用处理器1020可以来自另一公司,诸如arm有限公司、mips等。应用处理器1020可以是专用处理器,诸如例如网络或通信处理器、压缩引擎、图形处理器、协处理器、嵌入式处理器等。应用处理器1020可以实现在一个或多个芯片上。应用处理器1020可以是使用数个处理工艺技术(诸如例如biscmos、cmos或nmos)中的任何一个的一个或多个衬底的部分和/或可以实现在其上。

图11是依照本公开的片上系统(soc)设计的实施例的框图。作为具体的说明性示例,在用户设备(ue)中包括soc1100。在一个实施例中,ue是指要由最终用户用于通信的任何设备,诸如手持电话、智能电话、平板电脑、超薄笔记本电脑、具有宽带适配器的笔记本电脑或任何其它类似的通信设备。通常ue连接到基站或节点,其在本质上潜在地对应于gsm网络中的移动站(ms)。

在此,soc1100包括2个核——1106和1107。核1106和1107可以遵从指令集架构,诸如基于intel®架构coretm的处理器、先进微型装置公司(amd)处理器、基于mips的处理器、基于arm的处理器设计或其消费者以及其被许可方或采用方。核1106和1107耦合到与总线接口单元1109和l2高速缓存1110相关联以与系统1100的其他部分通信的高速缓存控制1108。互连1110包括片上互连,诸如iosf、amba或以上讨论的其它互连,其潜在地实现所描述的公开内容的一个或多个方面。在一个实施例中,核1106、1107可以实现如在本文的实施例中描述的混合核。

互连1110提供去到其它组件的通信信道,诸如订户身份模块(sim)1130以与sim卡对接、启动rom1135以持有供核1106和1107执行以初始化和启动soc1100的启动代码、sdram控制器1140以与外部存储器(例如dram1160)对接、闪存控制器1145以与非易失性存储器(例如闪存1165)对接、外围控制1150(例如串行外围接口)以与外设对接、视频编解码器1120和视频接口1125以显示和接收输入(例如支持触摸的输入)、gpu1115以执行图形相关计算等。这些接口中的任何一个可以合并本文所描述的本公开的各方面。此外,系统1100图示了用于通信的外设,诸如蓝牙模块1170、3g调制解调器1175、gps1180和wi-fi1185。

图12图示了计算机系统1200的示例形式中的机器的图解表示,其内可以执行用于使得机器执行本文所讨论的方法中的任何一个或多个的指令集。在可替换的实施例中,机器可以连接(例如联网)到lan、内联网、外联网或因特网中的其它机器。该机器可以以客户端-服务器网络环境中的服务器或客户端设备的容量操作,或者作为对等(或分布式)网络环境中的对等机器。该机器可以是个人计算机(pc)、平板pc、机顶盒(stb)、个人数字助理(pda)、蜂窝电话、web(网络)器具、服务器、网络路由器、交换机或桥接器、或能够执行(顺序的或以其它方式)指定要由该机器采取的动作的指令集的任何机器。另外,虽然仅图示了单个机器,但是术语“机器”还应当被认为包括单独地或联合地执行指令集(或多个指令集)以执行本文所讨论的方法中的任何一个或多个的任何机器集合。

计算机系统1200包括处理设备1202、主存储器1204(例如只读存储器(rom)、闪速存储器、动态随机存取存储器(dram)(诸如同步dram(sdram)或dram(rdram)等)、静态存储器1206(例如闪速存储器、静态随机存取存储器(sram)等)和数据存储设备1218,其经由总线1230与彼此通信。

处理设备1202表示一个或多个通用处理设备,诸如微处理器、中央处理单元等。更特别地,处理设备可以是复杂指令集计算(cisc)微处理器、精简指令集计算机(risc)微处理器、超长指令字(vliw)微处理器或实现其它指令集的处理器,或实现指令集的组合的处理器。处理设备1202还可以是一个或多个专用处理设备,诸如专用集成电路(asic)、现场可编程门阵列(fpga)、数字信号处理器(dsp)、网络处理器等。在一个实施例中,处理设备1202可以包括一个或处理核。处理设备1202配置成执行处理逻辑1226以用于执行本文所讨论的操作和步骤。在一个实施例中,处理设备1202与关于图1所描述的处理器架构100相同,如本文关于本公开的实施例所描述的。

计算机系统1200还可以包括通信耦合到网络1220的网络接口设备1208。计算机系统1200还可以包括视频显示单元1210(例如液晶显示器(lcd)或阴极射线管(crt)、文字数字输入设备1212(例如键盘)、光标控制设备1214(例如鼠标)和信号生成设备1216(例如扬声器)。另外,计算机系统1200可以包括图形处理单元1222、视频处理单元1228和音频处理单元1232。

数据存储设备1218可以包括机器可访问存储介质1224,其上存储软件1226,软件1226实现本文所描述的功能的方法中的任何一个或多个,诸如实现用于如以上所描述的存储器消歧的存储地址预测。软件1226还可以完全或至少部分地驻留在主存储器1204内作为指令1226和/或在处理设备1202内作为其通过计算机系统1200的执行期间的处理逻辑1226;主存储器1204和处理设备1202还构成机器可访问存储介质。

机器可读存储介质1224还可以用于存储实现用于混合核的存储地址预测的指令1226,诸如根据本公开的实施例所描述的。虽然在示例实施例中将机器可访问存储介质1128示出为单个介质,但是术语“机器可访问存储介质”应当被理解成包括存储所述一个或多个指令集的单个介质或多个介质(例如集中式或分布式数据库,和/或相关联的高速缓存和服务器)。术语“机器可访问存储介质”还应当被理解成包括能够存储、编码或承载指令集以用于由机器执行并且使得机器执行本公开的方法中的任何一个或多个的任何介质。术语“机器可访问存储介质”应当相应地被理解成包括但不限于固态存储器以及光学和磁性介质。

以下示例关于另外的实施例。示例1是一种处理器,包括多个向量寄存器,以及操作耦合到所述多个向量寄存器的执行单元,执行单元包括实现加载指令以用于向两个或更多向量寄存器中加载与存储在存储器中的数据结构相关联的两个或更多数据项的逻辑电路,其中所述两个或更多向量寄存器中的每一个要存储与数据结构内的某个位置号码相关联的数据项。

在示例2中,示例1的主题还可以提供,所述多个向量寄存器中的每一个包括多个寄存器位置以存储多个数据项,并且其中向量寄存器的每一个寄存器位置通过寄存器位置号码来标识。

在示例3中,示例1和2中的任何一个的主题还可以提供,逻辑电路执行加载指令以将所述两个或更多数据项加载到与所述两个或更多向量寄存器内的相同寄存器号码相关联的相应寄存器位置中。

在示例4中,示例1的主题还可以提供,逻辑电路执行加载指令以向所述两个或更多向量寄存器中并发地加载所述两个或更多数据项。

在示例5中,示例1的主题还可以提供,存储器存储包括多个数据结构的结构阵列,并且其中处理器重复地执行加载指令以向所述两个或更多向量寄存器中加载所述多个数据结构。

在示例6中,示例1和5中的任何一个的主题还可以提供,加载指令的每一次执行向所述两个或更多向量寄存器中加载与所述多个数据结构中的相应一个相关联的两个或更多数据项。

在示例7中,示例6的主题还可以提供,所述两个或三个向量寄存器中的每一个存储与所述多个数据结构内的相同位置号码相关联的多个数据项。

在示例8中,示例1的主题还可以包括,掩蔽逻辑和存储位图的掩码寄存器,其中位图中的每一位指代与所述多个向量寄存器的寄存器位置相关联的掩蔽旗标,其中实现加载指令的逻辑电路响应于确定掩蔽旗标表示阻挡状态,制止执行用于向所述两个或更多向量寄存器中加载所述两个或更多数据项的加载指令。

示例9是一种处理器,包括多个向量寄存器,以及操作耦合到所述多个向量寄存器的执行单元,执行单元包括实现存储指令以用于向存储器中存储与存储在两个或更多向量寄存器中的数据结构相关联的两个或更多数据项的逻辑电路,其中所述两个或更多向量寄存器中的每一个存储与数据结构内的某个位置号码相关联的数据项。

在示例10中,示例9的主题还可以提供,所述多个向量寄存器中的每一个包括多个寄存器位置以存储多个数据项,并且其中向量寄存器的每一个寄存器位置通过寄存器位置号码来标识。

在示例11中,示例9和10中的任何一个的主题还可以提供,所述多个向量寄存器中的每一个包括多个寄存器位置以存储多个数据项,并且其中向量寄存器的每一个寄存器位置通过寄存器位置号码来标识。

在示例12中,示例9的主题还可以提供,逻辑电路执行存储指令以将所述两个或更多数据项并发地存储到存储器中。

在示例13中,示例9的主题还可以提供,所述两个或更多向量寄存器存储多个数据结构,其中所述两个或三个向量寄存器中的每一个存储与所述多个数据结构内的相同位置号码相关联的多个数据项,并且其中处理器重复地执行存储指令以将所述多个数据结构存储到存储器中。

在示例14中,示例9的主题还可以提供,掩蔽逻辑和存储位图的掩码寄存器,其中位图中的每一位指代针对所述多个向量寄存器中的寄存器位置的掩蔽旗标,其中实现存储指令的逻辑电路响应于确定掩蔽旗标表示阻挡状态,制止执行用于向存储器中存储所述两个或更多数据项的存储指令。

示例15是一种片上系统(soc),包括存储器、多个向量寄存器,以及操作耦合到所述多个向量寄存器的第一执行单元,第一执行单元包括实现加载指令以用于向两个或更多向量寄存器中加载与存储在存储器中的数据结构相关联的两个或更多数据项的第一逻辑电路,其中所述两个或更多向量寄存器中的每一个要存储与数据结构内的某个位置号码相关联的数据项。

在示例16中,示例15的主题还可以包括第二执行单元,所述第二执行单元包括实现存储指令以用于向存储器中存储与存储在所述两个或更多向量寄存器中的数据结构相关联的所述两个或更多数据项的第二逻辑电路。

在示例17中,示例15和16中的任何一个的主题还可以包括掩蔽逻辑和存储位图的掩码寄存器,其中位图中的每一位指代针对所述多个向量寄存器中的寄存器位置的掩蔽旗标。

在示例18中,示例17的主题还可以提供,实现加载指令的第一逻辑电路响应于确定掩蔽旗标表示阻挡状态,制止执行用于向所述两个或更多向量寄存器中加载所述两个或更多数据项的加载指令。

在示例19中,示例17的主题还可以提供,实现存储指令的第二逻辑电路响应于确定掩蔽旗标表示阻挡状态,制止执行用于向存储器中存储所述两个或更多数据项的存储指令。

示例20是一种方法,包括通过处理器标识与存储在存储器中的接连存储器位置处的结构阵列相关联的两个或更多数据项,标识与处理器相关联的两个或更多向量寄存器,以及执行实现在处理器的执行单元中的加载指令,以从存储器向所述两个或更多向量寄存器内的相应寄存器位置中并发地加载所述两个或更多数据项,其中所述两个或更多数据项中的相应一个存储在所述两个或更多向量寄存器中的相应一个中。

在示例21中,示例20的主题还可以包括,在执行加载指令之前,检查存储在掩码寄存器中的掩蔽旗标以确定相应寄存器位置是否被阻挡,并且响应于确定掩码旗标指示相应寄存器位置被阻挡,制止执行加载指令。

示例22是一种装置,包括用于执行示例20和21中的任何一个的方法的部件。

示例23是一种具有存储在其上的程序代码的机器可读非暂时性介质,所述程序代码在被执行时,执行包括以下的操作:通过处理器标识与存储在存储器中的接连存储器位置处的结构阵列相关联的两个或更多数据项,标识与处理器相关联的两个或更多向量寄存器,以及执行实现在处理器的执行单元中的加载指令,以从存储器向所述两个或更多向量寄存器内的相应寄存器位置中并发地加载所述两个或更多数据项,其中所述两个或更多数据项中的相应一个存储在所述两个或更多向量寄存器中的相应一个中。

在示例24中,示例23的主题可以包括,在执行加载指令之前,检查存储在掩码寄存器中的掩蔽旗标以确定相应寄存器位置是否被阻挡,并且响应于确定掩码旗标指示相应寄存器位置被阻挡,制止执行加载指令。

虽然已经关于有限数目的实施例描述了本公开,但是本领域技术人员将从其领会到众多修改和变型。意图在于,随附权利要求覆盖如落在本公开的真实精神和范围内的所有这样的修改和变型。

设计可以经历各种阶段,从创建到仿真到制造。表示设计的数据可以以数个方式表示该设计。首先,如在仿真中有用的,可以使用硬件描述语言或另一功能描述语言来表示硬件。此外,可以在设计过程的一些阶段处产生具有逻辑和/或晶体管门的电路级模型。另外,大多数设计在某个阶段处到达表示硬件模型中的各种设备的物理放置的数据级。在其中使用常规的半导体制造技术的情况下,表示硬件模型的数据可以是指定各种特征在不同的掩模层上的存在或缺失的数据,所述不同的掩模层针对用于产生集成电路的掩模。在设计的任何表示中,可以在任何形式的机器可读介质中存储数据。诸如盘之类的存储器或磁性或光学储存可以是存储经由被调制或以其它方式生成以传输这样的信息的光波或电波传输的信息的机器可读介质。当传输指示或承载代码或设计的电学载波时,在执行电信号的拷贝、缓冲或重传的程度上,做出新的副本。因此,通信提供商或网络提供商可以在有形、机器可读介质上至少临时地存储体现本公开的实现例的技术的制品,诸如编码到载波中的信息。

如本文所使用的模块是指硬件、软件和/或固件的任何组合。作为示例,模块包括硬件,诸如微控制器,其与非暂时性介质相关联以存储适配成与微控制器执行的代码。因此,在一个实施例中,对模块的引用是指硬件,其被具体地配置成识别和/或执行要在非暂时性介质上持有的代码。另外,在另一实施例中,模块的使用是指包括代码的非暂时性介质,其被具体地适配成由微控制器执行以执行预定操作。并且如可以推断的,在又一实施例中,术语模块(在该示例中)可以是指微控制器和非暂时性介质的组合。通常,被图示为分离的模块边界经常是不同的并且潜在叠覆。例如,第一和第二模块可以共享硬件、软件、固件或其组合,而同时潜在地保留某个独立的硬件、软件或固件。在一个实施例中,术语逻辑的使用包括硬件,诸如晶体管、寄存器或其它硬件,诸如可编程逻辑器件。

短语“配置成”在一个实施例中的使用是指布置、放在一起、制造、供应销售、导入和/或设计装置、硬件、逻辑或元件以执行所指定或确定的任务。在该示例中,不在操作的装置或其元件仍旧“配置成”执行所指定的任务,如果它被设计、耦合和/或互连以执行所述指定任务的话。作为纯粹说明性的示例,逻辑门可以在操作期间提供0或1。但是“配置成”向时钟提供启用信号的逻辑门不包括可以提供1或0的每一个潜在逻辑门。而是,逻辑门是以某种方式耦合的一个,在操作期间1或0输出将启用时钟。再一次要指出的是,术语“配置成”的使用不要求操作,而是聚焦于装置、硬件和/或元件的潜在状态,其中在该潜在状态中,装置、硬件和/或元件被设计成当装置、硬件和/或元件在操作时执行特定任务。

另外,短语“以”、“能够/能够以”和或“可操作于”在一个实施例中的使用是指以这样的方式设计成以指定方式启用装置、逻辑、硬件和/或元件的使用的某个装置、逻辑、硬件和/或元件。如以上所指出的,以、能够以、可操作于在一个实施例中的使用是指装置、逻辑、硬件和/或元件的潜在状态,其中该装置、逻辑、硬件和或元件不在操作,但是以这样的方式设计成以指定方式启用装置的使用。

如本文所使用的,值包括数字、状态、逻辑状态或二进制逻辑状态的任何已知表示。通常,逻辑电平、逻辑值或逻辑性值的使用还称为1和0,其简单地表示二进制逻辑状态。例如,1是指高逻辑电平,并且0是指低逻辑电平。在一个实施例中,存储单元,诸如晶体管或闪存单元,可以能够持有单个逻辑值或多个逻辑值。然而,已经使用了值在计算机系统中的其它表示。例如,十进制数字10还可以被表示为二进制值910和十六进制字母a。因此,值包括能够被持有在计算机系统中的信息的任何表示。

而且,状态可以通过值或值的部分来表示。作为示例,第一值,诸如逻辑一,可以表示默认或初始状态,而第二值,诸如逻辑零,可以表示非默认状态。此外,术语复位和置位,在一个实施例中,分别是指默认和经更新的值或状态。例如,默认值潜在地包括高逻辑值,即复位,而经更新的值潜在地包括低逻辑值,即置位。要指出的是,值的任何组合可以用于表示任何数目的状态。

以上阐述的方法、硬件、软件、固件或代码的实施例可以经由存储在机器可访问、机器可读、计算机可访问或计算机可读介质上的指令或代码来实现,所述指令或代码可由处理元件执行。非暂时性机器可访问/可读介质包括以可由诸如计算机或电子系统之类的机器读取的形式提供(即存储和/或传输)信息的任何机构。例如,非暂时性机器可访问介质包括随机存取存储器(ram),诸如静态ram(sram)或动态ram(dram);rom;磁性或光学存储介质;闪速存储器设备;电学存储设备;光学存储设备;声学存储设备;用于持有从暂时性(传播)信号(例如载波、红外信号、数字信号)接收的信息的其它形式的存储设备;等,要将其从可以从其接收信息的非暂时性介质区分开。

用于将逻辑编程为执行本公开的实施例的指令可以存储在系统中的存储器(诸如dram、高速缓存、闪速存储器或其它储存)内。另外,指令可以经由网络或通过其它计算机可读介质的方式进行分发。因此,机器可读介质可以包括用于以可由机器(例如计算机)可读的形式存储或传输信息的任何机构,但不限于软盘、光盘、致密盘只读存储器(cd-rom)和磁光盘、只读存储器(rom)、随机存取存储器(ram)、可擦除可编程只读存储器(eprom)、电可擦除可编程只读存储器(eeprom)、磁卡或光卡、闪速存储器或有形、机器可读储存,其使用在通过因特网经由电学、光学、声学或其它形式的传播信号(例如载波、红外信号、数字信号等)的信息传输中。相应地,计算机可读介质包括适合于以可由机器(例如计算机)读取的形式存储或传输电子指令或信息的任何类型的有形机器可读介质。

贯穿本说明书对“一个实施例”或“实施例”的引用意味着结合该实施例描述的特定特征、结构或特性被包括在本公开的至少一个实施例中。因此,短语“在一个实施例中”或“在实施例中”在贯穿本说明书的各种地方中的出现未必都是指相同的实施例。另外,可以以任何合适的方式在一个或多个实施例中组合特定特征、结构或特性。

在前述说明书中,已经参照具体的示例性实施例给出了详细描述。然而,将明显的是,可以对其作出各种修改和改变而不脱离于如在随附权利要求中阐述的本公开的更宽精神和范围。相应地,说明书和附图要以说明性含义而不是约束性含义来对待。另外,实施例和其它例示语言的前述使用未必是指相同的实施例或相同的示例,而是可以是指不同且分立的实施例,以及潜在地相同的实施例。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1