CN116339615A - 在第一次读取易失性存储器时读取所有零数据或随机数据 - Google Patents
在第一次读取易失性存储器时读取所有零数据或随机数据 Download PDFInfo
- Publication number
- CN116339615A CN116339615A CN202211475305.9A CN202211475305A CN116339615A CN 116339615 A CN116339615 A CN 116339615A CN 202211475305 A CN202211475305 A CN 202211475305A CN 116339615 A CN116339615 A CN 116339615A
- Authority
- CN
- China
- Prior art keywords
- memory
- instruction
- memory address
- examples
- register
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 230000015654 memory Effects 0.000 title claims abstract description 234
- 238000000034 method Methods 0.000 claims abstract description 23
- 230000004044 response Effects 0.000 claims abstract description 11
- 238000007667 floating Methods 0.000 description 17
- 238000012545 processing Methods 0.000 description 15
- 238000010586 diagram Methods 0.000 description 11
- 230000006870 function Effects 0.000 description 11
- 238000006073 displacement reaction Methods 0.000 description 9
- 230000000295 complement effect Effects 0.000 description 7
- 239000003795 chemical substances by application Substances 0.000 description 5
- 238000004891 communication Methods 0.000 description 4
- 230000007246 mechanism Effects 0.000 description 4
- 238000013519 translation Methods 0.000 description 4
- 230000006835 compression Effects 0.000 description 3
- 238000007906 compression Methods 0.000 description 3
- 238000004519 manufacturing process Methods 0.000 description 3
- 230000003068 static effect Effects 0.000 description 3
- 238000003491 array Methods 0.000 description 2
- 230000003416 augmentation Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 230000001066 destructive effect Effects 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 238000010187 selection method Methods 0.000 description 2
- 238000004088 simulation Methods 0.000 description 2
- 239000000758 substrate Substances 0.000 description 2
- VOXZDWNPVJITMN-ZBRFXRBCSA-N 17β-estradiol Chemical compound OC1=CC=C2[C@H]3CC[C@](C)([C@H](CC4)O)[C@@H]4[C@@H]3CCC2=C1 VOXZDWNPVJITMN-ZBRFXRBCSA-N 0.000 description 1
- 239000008186 active pharmaceutical agent Substances 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000000873 masking effect Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 239000003607 modifier Substances 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 229910052754 neon Inorganic materials 0.000 description 1
- GKAOGPIIYCISHV-UHFFFAOYSA-N neon atom Chemical compound [Ne] GKAOGPIIYCISHV-UHFFFAOYSA-N 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000001105 regulatory effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
- G06F3/0607—Improving or facilitating administration, e.g. storage management by facilitating the process of upgrading existing storage systems, e.g. for improving compatibility between host and storage device
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1668—Details of memory controller
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0658—Controller construction arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
-
- 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/58—Random or pseudo-random number generators
- G06F7/588—Random number generators, i.e. based on natural stochastic processes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0893—Caches characterised by their organisation or structure
- G06F12/0895—Caches characterised by their organisation or structure of parts of caches, e.g. directory or tag array
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Human Computer Interaction (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Computational Mathematics (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
Abstract
本公开总体涉及在第一次读取易失性存储器时读取所有零数据或随机数据。描述了用于在第一次读取存储器时写入零值或随机值的技术。一种示例包括与易失性存储器进行交互并且响应于所执行的利用存储器地址的指令来确定该存储器地址是否第一次被访问以及当存储器地址是第一次被访问时,返回随机值或零值之一,并且当存储器地址不是第一次被访问时,返回存储在存储器地址的值。
Description
技术领域
本公开总体涉及在第一次读取易失性存储器时读取所有零数据或随机数据。
背景技术
包括电话、服务器和个人计算机在内的计算机都利用存储器来存储数据。该存储器包括随机存取存储器、缓存存储器、非易失性存储器等,存储在程序执行期间要使用的数据。
发明内容
根据本公开的第一实施例,提供了一种装置,包括:核心,用于执行利用存储器地址的指令;存储器控制器,用于与易失性存储器进行交互,所述存储器控制器用于响应于所执行的利用存储器地址的指令来确定所述存储器地址是否第一次被访问,以及当所述存储器地址是第一次被访问时,返回随机值或零值之一,并且当所述存储器地址不是第一次被访问时,返回存储在所述存储器地址的值。
根据本公开的第二实施例,提供了一种系统,包括:易失性存储器,用于存储数据;核心,用于执行利用存储器地址的指令;存储器控制器,用于与所述易失性存储器进行交互,所述存储器控制器用于响应于所执行的利用存储器地址的指令来确定所述存储器地址是否第一次被访问,以及当所述存储器地址是第一次被访问时,返回随机值或零值之一,并且当所述存储器地址不是第一次被访问时,返回存储在所述存储器地址的值。
根据本公开的第三实施例,提供了一种方法,包括:执行利用存储器地址的指令;与易失性存储器进行交互,并且响应于所执行的利用存储器地址的指令来确定所述存储器地址是否第一次被访问,以及当所述存储器地址是第一次被访问时,返回随机值或零值之一,并且当所述存储器地址不是第一次被访问时,返回存储在所述存储器地址的值。
附图说明
将参照附图来描述根据本公开的各种示例,其中:
图1图示了涉及处理易失性存储器的第一次读取的处理器和/或片上系统的各方面的示例。
图2(A)-图2(B)图示了第一次读取的数据结构的示例。
图3图示了包括关于第一次读取的信息的缓存的示例。
图4图示了用于处理第一次读取的方法的示例。
图5图示了示例性系统的示例。
图6图示了可以具有多于一个核心、可以具有集成存储器控制器并且可以具有集成图形的处理器的示例的框图。
图7(A)是图示出根据示例的示例性有序管线和示例性寄存器重命名、无序发出/执行管线两者的框图。
图7(B)是图示出根据示例的有序架构核心的示例性示例和要包括在处理器中的示例性寄存器重命名、无序发出/执行架构核心两者的框图。
图8图示了执行单元电路的示例,例如图7(B)的执行单元电路。
图9是根据一些示例的寄存器架构的框图。
图10图示了指令格式的示例。
图11图示了寻址字段的示例。
图12图示了第一前缀的示例。
图13(A)-图13(D)图示了如何使用第一前缀1001(A)的R、X和B字段的示例。
图14(A)-图14(B)图示了第二前缀的示例。
图15图示了第三前缀的示例。
图16图示了根据示例与将源指令集中的二进制指令转换为目标指令集中的二进制指令的软件指令转换器的使用相对比的框图。
具体实施方式
本公开涉及用于在对易失性存储器的第一次读取请求时使用随机数据或全零的方法、装置、系统和非暂态计算机可读存储介质。具体地,在第一次读取存储器时,存储器控制器根据实现方式来返回全零或随机数据值。
通常,在从特定易失性存储器地址第一次读取时,该地址的内容是不确定的。因此,来自该地址的数据值是不可信的。为了使该值值得信赖,必须首先将数据写入该地址,这需要至少一条额外的指令。
本文详细描述了允许对易失性存储器的第一次读取采用更可信的方法的系统、装置等的示例。具体地,在第一次读取时,存储器控制器将返回零值或随机值。在某些示例中,要返回哪种类型的值是可配置的。例如,可以使用指令来配置使用。
图1图示了涉及处理易失性存储器的第一次读取的处理器和/或片上系统的各方面的示例。多个核心103(0)-103(N)包括指令处理资源(示例性管线稍后详述),其包括使用本地缓存104(0)-104(N)。在一些示例中,核心中的至少一个是图形处理单元(GPU)、加速器处理单元(APU)等。核心103(0)-103(N)还利用共享缓存105。共享缓存105可以是最后一级缓存(LLC),例如L3、L4等缓存。
存储器控制器107用于访问主存储器111(例如,随机存取存储器(RAM))。具体地,存储器控制器107控制对主存储器111的读取和写入。在一些示例中,存储器控制器107集成在处理器101内。在其他示例中,存储器控制器107在处理器的外部。
在一些示例中,存储器控制器107维护用于第一次读取的数据结构的存储装置117。虽然被示为集成到存储器控制器107中,但在一些示例中,用于第一次读取的数据结构的存储装置117在存储器控制器107的外部,但可由存储器控制器107访问。在一些示例中,数据结构是使用内容可寻址存储器(CAM)来实现的。
图2(A)-图2(B)图示了第一次读取的数据结构的示例。在图2(A)中,示例性第一次读取的数据结构200包括多个条目,其中每个条目包括易失性存储器地址201和与该地址是否在之前已被读取有关的信息203。在该示例中,条目需要读取状态的指示。在图2(B)中,示例性第一次读取的数据结构200包括多个条目,其中每个条目包括易失性存储器地址201。在一些示例中,该变体仅跟踪那些先前已被读取的地址并且随着存储器地址被读取而增长。在某些示例中,该变体仅跟踪那些先前未被读取的地址并且随着存储器地址被读取而缩小。
主存储器111包括在特定存储器地址存储数据的多个数据块。
平台控制器109用于访问非易失性存储器131(例如,硬盘、二级存储器(2LM)等)。具体地,平台控制器109控制对非易失性存储器131的读取和写入。非易失性存储器131包括存储数据的多个数据块。
随机数生成器(RNG)电路113生成要存储的随机数。注意,在某些示例中,该电路是一个或多个核心的一部分。这些数被存储在随机数存储装置115中。在一些示例中,存储器控制器107维护随机数存储装置115中的随机数的列表或至少随机数的数目。
如图所示,随机数存储装置115靠近执行集群760。在一些示例中,随机数存储装置115是执行集群的一部分。在一些示例中,随机数存储装置115用专用寄存器来实现。在其他示例中,随机数存储装置115被实现为便签本(scratch pad)。此外,在一些示例中,通过CPUID叶(leaf)来指示对此类寄存器使用的支持。
随机数可以在引导时、在较少的处理器密集时间期间等生成。在一些示例中,何时生成随机数是可通过指令来配置的。
图3图示了包括关于第一次读取的信息的缓存的示例。具体地,示出了缓存301的条目。缓存用作更快且更接近执行资源的存储器。在理想的世界中,所需地址处的数据已经在缓存级别,这意味着不需要访问主存储器111或非易失性存储器131。当对某个地址处的数据进行请求时,该请求会去往缓存和主存储器两者。当存在缓存命中时,存储器控制器107的存储器访问请求通常被取消。当缓存未命中时,则将访问更远的存储器。
如图所示,缓存行的元数据包括有效位305和标签307。有效位305指示行当前是否正在存储有效的存储器子集。标签307标识该行的缓存块持有哪个存储器子集。通常,标签307存储在缓存行中存储的地址范围的高阶位,并允许缓存行跟踪其数据块来自存储器中何处。当然,缓存行还存储数据309。在一些示例中,缓存行被扩展为包括对数据309的至少一个数据块的第一次读取的指示303。第一次读取的该指示303显示了是否存储随机数据或零值(取决于实现方式),或者是否存储正常数据。在一些示例中,第一次读取的指示303是位图,其指出数据309中的何处具有什么类型的数据。在一些示例中,第一次读取的指示303编码数据309在哪里具有什么类型的数据。在一些示例中,第一次读取的指示303是单个位,其指示在数据309中的某处存在随机数据或零数据。
在一些示例中,某些方面被集成为处理器101和/或片上系统121的一部分。
图4图示了用于处理第一次读取的方法的示例。在一些示例中,该方法的一些方面由存储器控制器、缓存控制器(用于处理缓存行)、随机数生成器和/或核心中的一个或多个来执行。
在一些示例中,在400处,使用随机数生成器来生成一个或多个随机数并将其存储在随机数存储装置中。
在一些示例中,在401处,接收对存储器地址处的数据的存储器请求。该请求可以是针对从存储器加载,或针对指令的操作数(例如,来自存储器的用于算术或布尔运算的数据)的请求。存储器请求可以由存储器控制器和/或缓存控制器来接收。
在403处,确定这是否是对存储器地址的第一次请求。在一些示例中,缓存控制器对一个或多个缓存级别做出该确定。在一些示例中,存储器控制器做出该确定。注意,这两种类型的控制器都可能被涉及(并且通常是)。通过查看缓存行条目和/或第一次读取的数据结构来做出确定。
当确定地址之前没有被读取,并且指令是加载时,在一些示例中,在405处,全零或随机值被写入作为数据。如上所述,在一些示例中,哪个类型的值要写入是可配置的。随机数来自随机数存储装置。注意,该值也可能被缓存。缓存行条目和/或第一次读取的数据结构也被更新以反映写入。在一些示例中,选择要使用的随机值使得不总是使用相同的随机值。例如,使用的选择方法诸如随机、伪随机、最近最少使用、最不频繁使用之类。
当确定地址先前没有被读取,并且指令是非加载操作时,在一些示例中,在406处,提供零或随机值作为数据。如上所述,在一些示例中,要写入哪种类型的值是可配置的。随机数来自随机数存储装置。注意,该值也可能被缓存。缓存行条目和/或第一次读取的数据结构也被更新以反映写入。在一些示例中,选择要使用的随机值使得不总是使用相同的随机值。例如,使用的选择方法诸如随机、伪随机、最近最少使用、最不频繁使用之类。
当确定地址先前已被读取时,在407处,获取来自存储器地址的数据。在409处,写入(例如,针对加载)或使用(非加载指令)获取的数据。
下文详述其中可以体现上述示例的示例性架构、管线、核心、系统、指令格式等。
示例性计算机架构
下面详细描述了示例性计算机架构。现有技术中已知的用于笔记本电脑、台式机、手持PC、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、手机、便携式媒体播放器、手持设备和各种其他电子设备的其他系统设计和配置也是适用的。通常,能够并入本文公开的处理器和/或其他执行逻辑的大量系统或电子设备通常是合适的。
图5图示了示例性系统的示例。多处理器系统500是点对点互连系统并且包括多个处理器,包括经由点对点互连550耦合的第一处理器570和第二处理器580。在一些示例中,第一处理器570和第二处理器580是同质的。在一些示例中,第一处理器570和第二处理器580是异构的。
处理器570和580被示为分别包括集成存储器控制器(IMC)单元电路572和582。处理器570还包括作为其互连控制器单元的一部分的点对点(P-P)接口576和578;类似地,第二处理器580包括P-P接口586和588。处理器570、580可以使用P-P接口电路578、588经由点对点(P-P)互连550来交换信息。IMC 572和582将处理器570、580耦合到相应的存储器,即存储器532和存储器534,它们可以是本地连接到相应处理器的主存储器的部分。
处理器570、580可以各自使用点对点接口电路576、594、586、598经由单独的P-P互连552、554与芯片组590交换信息。芯片组590可以可选地经由高性能接口592与协处理器538交换信息。在一些示例中,协处理器538是专用处理器,例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器等。
共享缓存(未示出)可以被包括在任一处理器570、580中,或者在两个处理器之外,但经由P-P互连与处理器连接,从而使得任一个或两个处理器的本地缓存信息可以在处理器被置于低功率模式中的情况下被存储在该共享缓存中。
芯片组590可以通过接口596耦合到第一互连516。在一些示例中,第一互连516可以是外围组件互连(PCI)互连,或诸如PCI Express互连或另一种I/O互连之类的互连。在一些示例中,互连之一耦合到功率控制单元(PCU)517,其可以包括电路、软件和/或固件以执行关于处理器570、580和/或协处理器538的功率管理操作。PCU 517向电压调节器提供控制信息以使电压调节器产生适当的调节电压。PCU 517还提供控制信息以控制产生的工作电压。在各种示例中,PCU 517可以包括各种功率管理逻辑单元(电路)以执行基于硬件的功率管理。这种功率管理可以完全由处理器控制(例如,由各种处理器硬件控制,并且可以由工作负载和/或功率、热或其他处理器约束来触发)和/或功率管理可以响应于外部源(例如,平台或功率管理源或系统软件)来执行。
PCU 517被示为作为与处理器570和/或处理器580分离的逻辑而存在。在其他情况下,PCU 517可以在处理器570或580的给定一个或多个核心(未示出)上执行。在某些情况下,PCU 517可以实现为微控制器(专用或通用)或其他被配置为执行其自己的专用功率管理代码(有时称为P代码)的控制逻辑。在其他示例中,要由PCU 517执行的功率管理操作可以在处理器的外部实现,例如通过单独的功率管理集成电路(PMIC)或处理器外部的另一个组件。在其他示例中,要由PCU 517执行的功率管理操作可以在BIOS或其他系统软件中实现。
各种I/O设备514可以耦合到第一互连516,以及将第一互连516耦合到第二互连520的互连(总线)桥518。在一些示例中,一个或多个附加处理器515,例如协处理器、高吞吐量MIC处理器、GPGPU、加速器(例如,图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列(FPGA)或任何其他处理器,耦合到第一互连516。在一些示例中,第二互连520可以是低引脚数(LPC)互连。各种设备可以耦合到第二互连520,包括例如键盘和/或鼠标522、通信设备527和存储单元电路528。在一些示例中,存储单元电路528可以是磁盘驱动器或可以包括指令/代码和数据530的其他大容量存储设备。此外,音频I/O 524可以耦合到第二互连520。注意,除了上述点对点架构之外的其他架构也是可能的。例如,代替点对点架构,诸如多处理器系统500之类的系统可以实现多点互连或其他这样的架构。
示例性核心架构、处理器和计算机架构
可以按不同的方式、为了不同的目的以及在不同的处理器中实现处理器核心。例如,这些核心的实现方式可以包括:1)通用有序核心,旨在用于通用计算;2)高性能通用无序核心,旨在用于通用计算;3)专用核心,主要旨在用于图形和/或科学(吞吐量)计算。不同处理器的实现方式可以包括:1)CPU,包括旨在用于通用计算的一个或多个通用有序核心和/或旨在用于通用计算的一个或多个通用无序核心;以及2)协处理器,包括主要旨在用于图形和/或科学(吞吐量)的一个或多个专用核心。这样的不同处理器导致不同的计算机系统架构,这些架构可以包括:1)协处理器,与CPU位于分开的芯片上;2)协处理器,与CPU位于同一封装件中分开的管芯上;3)协处理器,与CPU位于同一管芯上(在此情况下,这种协处理器有时被称为专用逻辑,例如集成图形和/或科学(吞吐量)逻辑,或者被称为专用核心);以及4)片上系统,其可以在同一管芯上包括所描述的CPU(有时称为(一个或多个)应用核心或者(一个或多个)应用处理器)、上述的协处理器、以及额外的功能。接下来描述示例性核心架构,然后是对示例性处理器和计算机架构的描述。
图6示出了处理器600的示例的框图,该处理器600可以具有多于一个核心,可以具有集成的存储器控制器,并且可以具有集成的图形。实线框说明了具有单个核心602A、系统代理610、一组一个或多个互连控制器单元电路616的处理器600,而虚线框的可选添加说明了具有多个核心602(A)-(N)、系统代理单元电路610中的一组一个或多个集成存储器控制器单元电路614和专用逻辑608、以及一组一个或多个互连控制器单元电路616的替代处理器600。注意,处理器600可以是图5的处理器570或580或协处理器538或515之一。
因此,处理器600的不同实现方式可以包括:1)CPU,其中专用逻辑608是集成图形和/或科学(吞吐量)逻辑(其可以包括一个或多个核心,未示出)并且核心602(A)-(N)是一个或多个通用核心(例如,通用有序核心、通用无序核心或者两者的组合);2)协处理器,其中核心602(A)-(N)是大量的主要旨在用于图形和/或科学(吞吐量)的专用核心;以及3)协处理器,其中核心602(A)-(N)是大量的通用有序核心。因此,处理器600可以是通用处理器、协处理器或专用处理器,例如,网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元电路)、高吞吐量集成众核(many integrated core,MIC)协处理器(包括30个或更多个核心)、嵌入式处理器,等等。该处理器可以被实现在一个或多个芯片上。处理器600可以是一个或多个衬底的一部分和/或可以利用若干个工艺技术中的任何一者被实现在一个或多个衬底上,这些技术例如是BiCMOS、CMOS或NMOS。
存储器层次体系包括核心602(A)-(N)内的缓存单元电路604(A)-(N)的一个或多个级别、一组一个或多个共享缓存单元电路606、以及耦合到该组集成存储器控制器单元电路614的外部存储器(未示出)。该组一个或多个共享缓存单元电路606可以包括一个或多个中间级别缓存(例如,第2级(L2)、第3级(L3)、第4级(L4))或者诸如最后一级缓存(lastlevel cache,LLC)之类的其他级别的缓存,和/或这些的组合。虽然在一些示例中基于环的互连网络电路612互连专用逻辑608(例如,集成图形逻辑)、该组共享缓存单元电路606以及系统代理单元电路610,但替代示例也可以使用任何数目的公知技术来互连这种单元。在一些示例中,在一个或多个共享缓存单元电路606和核心602(A)-(N)之间维持一致性。
在一些示例中,核心602(A)-(N)中的一个或多个能够进行多线程处理。系统代理单元电路610包括协调和操作核心602(A)-(N)的那些组件。系统代理单元电路610可以包括例如功率控制单元(PCU)电路和/或显示单元电路(未示出)。PCU可以是或可以包括调节核心602(A)-(N)和/或专用逻辑608(例如,集成图形逻辑)的功率状态所需的逻辑和组件。显示单元电路用于驱动一个或多个外部连接的显示器。
核心602(A)-(N)在架构指令集方面可以是同质的或异构的;也就是说,核心602(A)-(N)中的两个或更多个可能能够执行相同的指令集,而其他核心可能仅能够执行该指令集的子集或不同的指令集。
示例性核心架构
有序和无序核心框图
图7(A)是示出根据示例的示例性有序管线和示例性寄存器重命名、无序发出/执行管线两者的框图。图7(B)是示出根据示例的有序架构核心的示例性示例和要包括在处理器中的示例性寄存器重命名、无序发出/执行架构核心两者的框图。图7(A)-图7(B)中的实线框图示了有序管线和有序核心,而可选地添加的虚线框图示了寄存器重命名、无序发出/执行管线和核心。鉴于有序方面是无序方面的子集,将描述无序方面。
在图7(A)中,处理器管线700包括取得阶段702、可选长度解码阶段704、解码阶段706、可选分配阶段708、可选重命名阶段710、调度(也称为分发或发出)阶段712、可选的寄存器读取/存储器读取阶段714、执行阶段716、写回/存储器写入阶段718、可选的异常处置阶段722和可选的提交阶段724。可以在这些处理器管线阶段中的每一个中执行一个或多个操作。例如,在取得阶段702期间,从指令存储器中取得一条或多条指令,在解码阶段706期间,可以解码一条或多条取得的指令,可以生成使用转发的寄存器端口的地址(例如,加载存储单元(LSU)地址),并且可以执行分支转发(例如,立即数偏移或链接寄存器(LR))。在一个示例中,解码阶段706和寄存器读取/存储器读取阶段714可以组合成一个管线阶段。在一个示例中,在执行阶段716期间,可以执行解码的指令,可以执行到高级微控制器总线(AHB)接口的LSU地址/数据管线,可以执行乘法和加法运算,可以执行带有分支结果的算术运算等。
作为示例,示例性寄存器重命名、无序发出/执行核心架构可以如下实现管线700:1)指令取得738执行取得阶段702和长度解码阶段704;2)解码单元电路740执行解码阶段706;3)重命名/分配器单元电路752执行分配阶段708和重命名阶段710;4)调度器单元电路756执行调度阶段712;5)物理寄存器堆单元电路758和存储器单元电路770执行寄存器读取/存储器读取阶段714;执行集群760执行执行阶段716;6)存储器单元电路770和物理寄存器堆单元电路758执行写回/存储器写入阶段718;7)在异常处置阶段722中可能涉及各种单元(单元电路);以及8)引退单元电路754和物理寄存器堆单元电路758执行提交阶段724。
图7(B)示出了处理器核心790,包括耦合到执行引擎单元电路750的前端单元电路730,并且两者都耦合到存储器单元电路770。核心790可以是精简指令集计算(RISC)核心,复杂指令集计算(CISC)核心、超长指令字(VLIW)核心、或混合或替代核心类型。作为又一选项,核心790可以是专用核心,例如网络或通信核心、压缩引擎、协处理器核心、通用计算图形处理单元(GPGPU)核心、图形核心等。
前端单元电路730可以包括耦合到指令缓存单元电路734的分支预测单元电路732,指令缓存单元电路734耦合到指令转换后备缓冲器(TLB)736,TLB 736耦合到指令取得单元电路738,指令取得单元电路738耦合到解码单元电路740。在一个示例中,指令缓存单元电路734被包括在存储器单元电路770中而不是前端单元电路730中。解码单元电路740(或解码器)可以对指令进行解码,并且生成一个或多个微操作、微代码入口点、微指令、其他指令或其他控制信号作为输出,这些微操作、微代码入口点、微指令、其他指令或其他控制信号从原始指令解码或以其他方式反映或源自原始指令。解码单元电路740还可以包括地址生成单元电路(AGU,未示出)。在一个示例中,AGU使用转发的寄存器端口来生成LSU地址,并且可以进一步执行分支转发(例如,立即数偏移分支转发、LR寄存器分支转发等)。解码单元电路740可以使用各种不同的机制来实现。合适机制的示例包括但不限于查找表、硬件实现方式、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等。在一个示例中,核心790包括微代码ROM(未示出)或存储某些宏指令的微代码的其他介质(例如,在解码单元电路740中或以其他方式在前端单元电路730内)。在一个示例中,解码单元电路740包括微操作(micro-op)或操作缓存(未示出)以保存/缓存在解码阶段或处理器管线700的其他阶段期间生成的解码操作、微标签或微操作。解码单元电路740可以耦合到执行引擎单元电路750中的重命名/分配器单元电路752。
执行引擎电路750包括耦合到引退单元电路754和一组一个或多个调度器电路756的重命名/分配器单元电路752。调度器电路756代表任意数量的不同调度器,包括预约站、中央指令窗口等。在一些示例中,调度器电路756可以包括算术逻辑单元(ALU)调度器/调度电路、ALU队列、算术生成单元(AGU)调度器/调度电路、AGU队列等。调度器电路756耦合到物理寄存器堆电路758。每个物理寄存器堆电路758代表一个或多个物理寄存器堆,不同的物理寄存器堆存储一个或多个不同的数据类型,例如标量整数、标量浮点、压缩整数、压缩浮点、向量整数、向量浮点、状态(例如,作为要执行的下一个指令的地址的指令指针)等。在一个示例中,物理寄存器堆单元电路758包括向量寄存器单元电路、写入掩码寄存器单元电路和标量寄存器单元电路。这些寄存器单元可以提供架构向量寄存器、向量掩码寄存器、通用寄存器等。物理寄存器堆单元电路758与引退单元电路754(也称为引退队列或退休队列)重叠,来说明可以实现寄存器重命名和无序执行的各种方式(例如,使用(一个或多个)重排序缓冲区((一个或多个)ROB)和(一个或多个)引退寄存器堆;使用(一个或多个)未来文件、(一个或多个)历史缓冲区和(一个或多个)引退寄存器堆;使用寄存器映射和寄存器池等)。引退单元电路754和物理寄存器堆电路758耦合到(一个或多个)执行集群760。(一个或多个)执行集群760包括一组一个或多个执行单元电路762和一组一个或多个存储器访问电路764。执行单元电路762可以对各种类型的数据(例如,标量浮点、压缩整数、压缩浮点、向量整数、向量浮点)执行各种算术、逻辑、浮点或其他类型的操作(例如,移位、加法、减法、乘法)。尽管一些示例可以包括专用于特定功能或功能组的多个执行单元或执行单元电路,但其他示例可以仅包括一个执行单元电路或全部执行所有功能的多个执行单元/执行单元电路。调度器电路756、物理寄存器堆单元电路758和(一个或多个)执行集群760被示为可能是多个,因为某些示例为某些类型的数据/操作创建单独的管线(例如,标量整数管线、标量浮点/压缩整数/压缩浮点/向量整数/向量浮点管线、和/或存储器访问管线,每个管线都有自己的调度器电路、物理寄存器堆单元电路和/或执行集群-并且在单独的存储器访问管线的情况下,实现了某些示例,其中只有该管线的执行集群具有存储器访问单元电路764)。还应该理解,在使用单独的管线的情况下,这些管线中的一个或多个可能是无序发出/执行的,而其余的是有序的。
在一些示例中,执行引擎单元电路750可以执行到高级微控制器总线(AHB)接口(未示出)的加载存储单元(LSU)地址/数据管线,以及地址阶段和写回、数据阶段加载、存储和分支。
该组存储器访问电路764耦合到存储器单元电路770,存储器单元电路770包括耦合到数据缓存电路774的数据TLB单元电路772,数据缓存电路774耦合到第2级(L2)缓存电路776。在一个示例性示例中,存储器存取单元电路764可以包括加载单元电路、存储地址单元电路和存储数据单元电路,它们中的每一个都耦合到存储器单元电路770中的数据TLB电路772。指令缓存电路734进一步耦合到存储器单元电路770中的第2级(L2)缓存单元电路776。在一个示例中,指令缓存734和数据缓存774被组合成L2缓存单元电路776、第3级(L3)缓存单元电路(未示出)和/或主存储器中的单个指令和数据缓存(未示出)。L2缓存单元电路776耦合到一个或多个其他级别的缓存并最终耦合到主存储器。
核心790可以支持一个或多个指令集(例如,x86指令集(具有已经添加了较新版本的一些扩展);MIPS指令集;ARM指令集(具有可选的附加扩展,例如NEON)),包括本文描述的(一个或多个)指令。在一个示例中,核心790包括支持压缩数据指令集扩展(例如,AVX1、AVX2)的逻辑,从而允许由许多多媒体应用使用的操作使用压缩数据来执行。
示例性执行单元电路
图8图示了执行单元电路的示例,例如图7(B)的执行单元电路762。如图所示,执行单元电路762可以包括一个或多个ALU电路801、向量/SIMD单元电路803、加载/存储单元电路805、和/或分支/跳转单元电路807。ALU电路801执行整数算术和/或布尔运算。向量/SIMD单元电路803对压缩数据(例如,SIMD/向量寄存器)执行向量/SIMD操作。加载/存储单元电路805执行加载和存储指令以将数据从存储器加载到寄存器或从寄存器存储到存储器。加载/存储单元电路805也可以产生地址。分支/跳转单元电路807根据指令引起分支或跳转到存储器地址。浮点单元(FPU)电路809执行浮点算术。执行单元电路762的宽度取决于示例而变化并且可以在16位到1,024位的范围内。在一些示例中,两个或更多个较小的执行单元被在逻辑上组合以形成更大的执行单元(例如,两个128位执行单元被在逻辑上组合以形成256位执行单元)。
示例性寄存器架构
图9是根据一些示例的寄存器架构900的框图。如图所示,存在从128位到1,024位的宽度变化的向量/SIMD寄存器910。在一些示例中,向量/SIMD寄存器910在物理上是512位,并且根据映射,仅使用一些低位。例如,在一些示例中,向量/SIMD寄存器910是512位的ZMM寄存器:低256位用于YMM寄存器,而低128位用于XMM寄存器。因此,存在寄存器的覆盖。在一些示例中,向量长度字段在最大长度和一个或多个其他较短的长度之间进行选择,其中每个这样较短的长度是前一个长度的一半长度。标量运算是对ZMM/YMM/XMM寄存器中最低阶数据元素位置执行的运算;根据示例,高阶数据元素位置要么保持如它们在指令之前一样,要么归零。
在一些示例中,寄存器架构900包括写入掩码/断言寄存器915。例如,在一些示例中,有8个写入掩码/断言寄存器(有时称为k0到k7),每个寄存器是16位、32位、64位或128位大小。写入掩码/断言寄存器915可以允许合并(例如,允许在任何操作的执行期间保护目的地中的任何元素集合免于更新)和/或归零(例如,归零向量掩码允许在任何操作的执行期间将目的地中的任何元素集合归零)。在一些示例中,给定写入掩码/断言寄存器915中的每个数据元素位置对应于目的地的数据元素位置。在其他示例中,写入掩码/断言寄存器915是可缩放的并且由用于给定向量元素的设定数量的使能位组成(例如,每64位向量元素有8个使能位)。
寄存器架构900包括多个通用寄存器925。这些寄存器可以是16位、32位、64位等并且可以用于标量运算。在某些示例中,这些寄存器由名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP和R8到R15引用。
在一些示例中,寄存器架构900包括标量浮点寄存器945,其用于使用x87指令集扩展或作为MMX寄存器对32/64/80位浮点数据进行标量浮点运算以对64位压缩整数数据执行操作,以及保存在MMX和XMM寄存器之间执行的某些操作的操作数。
一个或多个标志寄存器940(例如,EFLAG、RFLAG等)存储用于算术、比较和系统操作的状态和控制信息。例如,一个或多个标志寄存器940可以存储条件代码信息,例如进位、奇偶校验、辅助进位、零、符号和溢出。在一些示例中,一个或多个标志寄存器940被称为程序状态和控制寄存器。
分段寄存器920包含用于访问存储器的分段点。在一些示例中,这些寄存器由名称CS、DS、SS、ES、FS和GS引用。
机器特定寄存器(MSR)935控制和报告处理器性能。大多数MSR935处理与系统相关的功能并且不能被应用程序访问。机器检查寄存器960由用于检测和报告硬件错误的控制、状态和错误报告MSR组成。
一个或多个指令指针寄存器930存储指令指针值。(一个或多个)控制寄存器955(例如,CR0-CR4)确定处理器(例如,处理器570、580、538、515和/或600)的操作模式和当前执行任务的特性。调试寄存器950控制并允许监视处理器或核心的调试操作。
存储器管理寄存器965指定在保护模式存储器管理中使用的数据结构的位置。这些寄存器可能包括GDTR、IDRT、任务寄存器和LDTR寄存器。
替代示例可以使用更宽或更窄的寄存器。此外,替代示例可以使用更多、更少或不同的寄存器堆和寄存器。
指令集
指令集架构(ISA)可以包括一种或多种指令格式。给定的指令格式可以定义各种字段(例如,位的数量、位的位置)以指定要执行的操作(例如,操作码)和要执行该操作的(一个或多个)操作数和/或(一个或多个)其他数据字段(例如,掩码)。一些指令格式通过指令模板(或子格式)的定义进一步细分。例如,给定指令格式的指令模板可以定义为具有指令格式字段的不同子集(包含的字段通常以相同的顺序,但至少有些具有不同的位位置,因为包含的字段较少)和/或定义为对给定字段进行不同的解释。因此,ISA的每条指令都使用给定的指令格式(如果已定义,则在该指令格式的给定指令模板中)表示,并包括用于指定操作和操作数的字段。例如,示例性ADD指令具有特定操作码和指令格式,该指令格式包括操作码字段以指定该操作码和操作数字段以选择操作数(源1/目标和源2);并且在指令流中出现此ADD指令将在选择特定操作数的操作数字段中具有特定内容。
示例性指令格式
本文描述的(一个或多个)指令的示例可以以不同的格式来体现。此外,下文详述了示例性系统、架构和管线。(一个或多个)指令的示例可以在这样的系统、架构和管线上执行,但不限于这些详细说明。
图10图示了指令格式的示例。如图所示,指令可以包括多个组成部分,包括但不限于用于以下项的一个或多个字段:一个或多个前缀1001、操作码1003、寻址信息1005(例如,寄存器标识符、存储器寻址信息等)、位移值1007、和/或立即数1009。注意,一些指令使用格式的部分或全部字段,而其他指令可能仅使用操作码1003的字段。在一些示例中,所示顺序是这些字段将被编码的顺序,然而,应当理解,在其他示例中,这些字段可以以不同的顺序编码、组合等。
(一个或多个)前缀字段1001在使用时修改指令。在一些示例中,一个或多个前缀用于重复字符串指令(例如,0xF0、0xF2、0xF3等),以提供部分覆盖(例如,0x2E、0x36、0x3E、0x26、0x64、0x65、0x2E、0x3E等),以执行总线锁定操作,和/或更改操作数(例如,0x66)和地址大小(例如,0x67)。某些指令需要强制前缀(例如,0x66、0xF2、0xF3等)。这些前缀中的某些可能被认为是“遗留”前缀。其他前缀(其一个或多个示例在本文中详述)指示和/或提供进一步的能力,例如指定特定寄存器等。其他前缀通常跟在“遗留”前缀之后。
操作码字段1003用于至少部分地定义在指令解码时要执行的操作。在一些示例中,在操作码字段1003中编码的主操作码的长度为1、2或3个字节。在其他示例中,主操作码可以是不同的长度。附加的3位操作码字段有时被编码在另一个字段中。
寻址字段1005用于寻址指令的一个或多个操作数,例如存储器或一个或多个寄存器中的位置。图11图示了寻址字段1005的示例。在该图示中,示出了可选的Mod R/M字节1102和可选的缩放、索引、基址(SIB)字节1104。Mod R/M字节1102和SIB字节1104用于对指令的多达两个操作数进行编码,每个操作数是直接寄存器或有效存储器地址。注意,这些字段中的每一个是可选的,因为并非所有指令都包含这些字段中的一个或多个。MOD R/M字节1102包括MOD字段1142、寄存器字段1144、和R/M字段1146。
MOD字段1142的内容区分存储器访问和非存储器访问模式。在一些示例中,当MOD字段1142具有值b11时,使用寄存器直接寻址模式,否则使用寄存器间接寻址。
寄存器字段1144可以对目的地寄存器操作数或源寄存器操作数进行编码,或者可以对操作码扩展进行编码并且不用于对任何指令操作数进行编码。寄存器索引字段1144的内容直接或通过地址生成指定源或目的操作数的位置(在寄存器中或在存储器中)。在一些示例中,寄存器字段1144用来自前缀(例如,前缀1001)的附加位来补充以允许更大的寻址。
R/M字段1146可以用于对引用存储器地址的指令操作数进行编码,或可以用于对目的地寄存器操作数或源寄存器操作数进行编码。注意,在一些示例中,R/M字段1146可以与MOD字段1142组合以指示寻址模式。
SIB字节1104包括要在地址生成中使用的缩放字段1152、索引字段1154和基址字段1156。缩放字段1152指示缩放因子。索引字段1154指定要使用的索引寄存器。在一些示例中,索引字段1154用来自前缀(例如,前缀1001)的附加位来补充以允许更大的寻址。基址字段1156指定要使用的基础寄存器。在一些示例中,基址字段1156用来自前缀(例如,前缀1001)的附加位来补充以允许更大的寻址。实际上,缩放字段1152的内容允许缩放索引字段1154的内容以用于存储器地址生成(例如,用于使用2缩放*索引+基址的地址生成)。
一些寻址形式利用位移值来生成存储器地址。例如,存储器地址可以根据2缩放*索引+基址+位移、索引*缩放+位移、r/m+位移、指令指针(RIP/EIP)+位移、寄存器+位移等来生成。位移可以是1-字节、2-字节、4-字节等值。在一些示例中,位移字段1007提供该值。另外,在一些示例中,位移因子使用被编码在寻址字段1005的MOD字段中,该MOD字段指示通过将disp8与缩放因子N相乘来计算位移值的压缩位移方案,该缩放因子N是基于向量长度、b位的值和指令的输入元素大小来确定的。位移值存储在位移字段1007中。
在一些示例中,立即数字段1009指定指令的立即数。立即数可以编码为1字节值、2字节值、4字节值等。
图12图示了第一前缀1001(A)的示例。在一些示例中,第一前缀1001(A)是REX前缀的示例。使用此前缀的指令可以指定通用寄存器、64位压缩数据寄存器(例如,单指令、多数据(SIMD)寄存器或向量寄存器)和/或控制寄存器和调试寄存器(例如,CR8-CR15和DR8-DR15)。
使用第一前缀1001(A)的指令可以使用3位字段来指定多达三个寄存器,具体取决于格式:1)使用Mod R/M字节1102的reg字段1144和R/M字段1146;2)使用Mod R/M字节1102和SIB字节1104,包括使用reg字段1144和基址字段1156和索引字段1154;或3)使用操作码的寄存器字段。
在第一前缀1001(A)中,位位置7:4被设置为0100。位位置3(W)可以用于确定操作数大小,但不能单独确定操作数宽度。因此,当W=0时,操作数大小由代码段描述符(CS.D)确定,当W=1时,操作数大小为64位。
注意,添加另一位允许寻址16(24)个寄存器,而MOD R/M reg字段1144和MOD R/MR/M字段1146单独各自只能寻址8个寄存器。
在第一前缀1001(A)中,位位置2(R)可以是MOD R/M reg字段1144的扩展,并且可以在该字段编码通用寄存器、64位压缩数据寄存器(例如,SSE寄存器)、或者控制或调试寄存器时用于修改Mod R/M reg字段1144。当Mod R/M字节1102指定其他寄存器或定义扩展操作码时,忽略R。
位位置1(X)X位可以修改SIB字节索引字段1154。
位位置B(B)B可以修改Mod R/M R/M字段1146或SIB字节基址字段1156中的基址;或者它可以修改用于访问通用寄存器(例如,通用寄存器925)的操作码寄存器字段。
图13(A)-图13(D)示出了如何使用第一前缀1001(A)的R、X和B字段的示例。图13(A)示出了当SIB字节1104不用于存储器寻址时,来自第一前缀1001(A)的R和B用于扩展MODR/M字节1102的reg字段1144和R/M字段1146。图13(B)示出了当SIB字节1104不被使用时(寄存器-寄存器寻址),来自第一前缀1001(A)的R和B用于扩展MOD R/M字节1102的reg字段1144和R/M字段1146。图13(C)示出了当SIB字节1104用于存储器寻址时,来自第一前缀1001(A)的R、X和B用于扩展MOD R/M字节1102的reg字段1144以及索引字段1154和基址字段1156。图13(D)示出了当寄存器被编码在操作码1003中时,来自第一前缀1001(A)的B用于扩展MOD R/M字节1102的reg字段1144。
图14(A)-图14(B)示出了第二前缀1001(B)的示例。在一些示例中,第二前缀1001(B)是VEX前缀的示例。第二前缀1001(B)编码允许指令具有多于两个的操作数,并允许SIMD向量寄存器(例如,向量/SIMD寄存器910)长于64位(例如,128位和256位)。第二前缀1001(B)的使用提供了三操作数(或更多)的语法。例如,前面的两个操作数指令执行了诸如A=A+B之类的操作,这会覆盖源操作数。使用第二前缀1001(B)使操作数能够执行非破坏性操作,例如A=B+C。
在一些示例中,第二前缀1001(B)以两种形式出现-双字节形式和三字节形式。双字节的第二前缀1001(B)主要用于128位、标量和一些256位指令;而三字节的第二前缀1001(B)提供了对第一前缀1001(A)和3字节操作码指令的紧凑替换。
图14(A)图示了第二前缀1001(B)的双字节形式的示例。在一个示例中,格式字段1401(字节0 1403)包含值C5H。在一个示例中,字节11405包括位[7]中的“R”值。该值是第一前缀1001(A)的相同值的补码。位[2]用于指示向量的长度(L)(其中值0是标量或128位向量,值1是256位向量)。位[l:0]提供与一些遗留前缀扩展性等效的操作码(例如,00=无前缀、01=66H、10=F3H和11=F2H)。显示为vvvv的位[6:3]可以用于:1)编码第一源寄存器操作数,以反转(1s补码)形式指定,并且对具有2个或更多源操作数的指令有效;2)编码目的地寄存器操作数,以1s补码形式指定用于某些向量移位;或者3)不编码任何操作数,字段被保留并且应该包含一定的值,例如1111b。
使用此前缀的指令可以使用Mod R/M R/M字段1146来对引用存储器地址的指令操作数进行编码,或者对目的地寄存器操作数或源寄存器操作数进行编码。
使用该前缀的指令可以使用Mod R/M reg字段1144来编码目的地寄存器操作数或源寄存器操作数,被视为操作码扩展并且不用于对任何指令操作数进行编码。
对于支持四个操作数vvvv的指令语法,Mod R/M R/M字段1146和Mod R/M reg字段1144对四个操作数中的三个进行编码。然后立即数1009的位[7:4]用于对第三源寄存器操作数进行编码。
图14(B)图示了第二前缀1001(B)的三字节形式的示例。在一个示例中,格式字段1411(字节0 1413)包含值C4H。字节1 1415在位[7:5]中包括“R”、“X”和“B”,它们是第一前缀1001(A)的相同值的补码。字节1 1415的位[4:0](显示为mmmmm)包括要根据需要对一个或多个隐含的前导操作码字节进行编码的内容。例如,00001表示0FH前导操作码,00010表示0F38H前导操作码,00011表示前导0F3AH操作码,等等。
字节2 1417的位[7]的使用类似于第一前缀1001(A)的W,包括帮助确定可提升的操作数大小。位[2]用于指示向量的长度(L)(其中值0是标量或128位向量,值1是256位向量)。位[l:0]提供与一些遗留前缀扩展性等效的操作码(例如,00=无前缀、01=66H、10=F3H和11=F2H)。显示为vvvv的位[6:3]可以用于:1)对第一源寄存器操作数进行编码,以反转(1s补码)形式指定,并且对具有2个或更多源操作数的指令有效;2)编码目的地寄存器操作数,以1s补码形式指定用于某些向量移位;或者3)不编码任何操作数,字段被保留,应该包含一定的值,例如1111b。
使用该前缀的指令可以使用Mod R/M R/M字段1146来编码引用存储器地址的指令操作数,或者编码目的地寄存器操作数或源寄存器操作数。
使用该前缀的指令可以使用Mod R/M reg字段1144来编码目的地寄存器操作数或源寄存器操作数,被视为操作码扩展并且不用于编码任何指令操作数。
对于支持四个操作数vvvv的指令语法,Mod R/M R/M字段1146和Mod R/M reg字段1144对四个操作数中的三个进行编码。然后立即数1009的位[7:4]用于对第三源寄存器操作数进行编码。
图15示出了第三前缀1001(C)的示例。在一些示例中,第一前缀1001(A)是EVEX前缀的示例。第三前缀1001(C)是四字节前缀。
第三前缀1001(C)可以在64位模式下编码32个向量寄存器(例如,128位、256位和512位寄存器)。在一些示例中,使用写入掩码/操作掩码的指令(参见前面图中寄存器的讨论,例如图9)或使用此前缀的预测。操作掩码寄存器允许条件处理或选择控制。操作掩码指令(其源/目的地操作数是操作掩码寄存器并处理操作掩码寄存器的内容作为单个值)使用第二前缀1001(B)进行编码。
第三前缀1001(C)可以编码特定于指令类的功能(例如,具有“加载+操作”语义的压缩指令可以支持嵌入式广播功能,具有舍入语义的浮点指令可以支持静态舍入功能,具有非舍入算术语义的浮点指令可以支持“抑制所有异常”功能等)。
第三前缀1001(C)的第一字节是格式字段1511,在一个示例中,其值为62H。后续字节被称为有效负载字节1515-1519,共同形成P[23:0]的24位值,以一个或多个字段的形式提供特定能力(在此详述)。
在一些示例中,有效载荷字节1519的P[1:0]与低两个mmmmm位相同。P[3:2]在一些示例中是保留的。当与P[7]和Mod R/M reg字段1144组合时,位P[4](R')允许访问高16个向量寄存器集。当不需要SIB字节寻址时,P[6]还可以提供对高16个向量寄存器的访问。P[7:5]由R、X和B组成,它们是向量寄存器、通用寄存器、存储器寻址的操作数说明符修饰符位(operand specifier modifier bit),并且当与Mod R/M寄存器字段1144和Mod R/M R/M字段1146组合时,允许访问超出低8个寄存器的下一组8个寄存器。P[9:8]提供与一些遗留前缀扩展性等效的操作码(例如,00=无前缀、01=66H、10=F3H和11=F2H)。在一些示例中,P[10]是固定值1。显示为vvvv的P[14:11]可以用于:1)对第一源寄存器操作数进行编码,以反转(1s补码)形式指定,并且对具有2个或更多源操作数的指令有效;2)编码目的地寄存器操作数,以1s补码形式指定用于某些向量移位;或者3)不编码任何操作数,字段被保留,应该包含一定的值,例如1111b。
P[15]类似于第一前缀1001(A)和第二前缀1011(B)的W,并且可以用作操作码扩展位或操作数大小提升。
P[18:16]指定操作掩码(写入掩码)寄存器(例如,写入掩码/断言寄存器915)中的寄存器的索引。在一个示例中,特定值aaa=000具有特殊行为,这意味着对于特定指令不使用操作掩码(这可以通过多种方式实现,包括使用硬连线到所有指令的操作掩码或绕过掩码硬件的硬件)。当合并时,向量掩码允许在执行任何操作(由基础操作和增广操作指定)期间保护目的地中的任何元素集免受更新;在另一个示例中,保留目的地的每个元素的旧值,其中相应的掩码位为0。相反,当归零时,向量掩码允许在执行任何操作(由基础操作和增广操作指定)期间将目的地中的任何元素集归零;在一个示例中,当对应的掩码位具有0值时,目的地的元素被设置为0。此功能的子集是能够控制正在执行的操作的向量长度(即,被修改的元素的跨度,从第一个到最后一个);然而,被修改的元素不一定是连续的。因此,操作掩码字段允许部分向量操作,包括加载、存储、算术、逻辑等。虽然描述了其中操作掩码字段的内容选择多个操作掩码寄存器中包含要使用的操作掩码的一个操作掩码寄存器(因此操作掩码字段的内容间接标识要执行的掩码)的示例,替代示例替代地或附加地允许掩码写入字段的内容直接指定要执行的掩码。
P[19]可以与P[14:11]组合以便以非破坏性源语法对第二源向量寄存器进行编码,该非破坏性源语法可以使用P[19]访问高16个向量寄存器。P[20]编码多种功能,这些功能在不同类别的指令中有所不同,并且会影响向量长度/舍入控制说明符字段(P[22:21])的含义。P[23]表示支持合并-写入掩码(例如,当设置为0时)或支持归零和合并-写入掩码(例如,当设置为1时)。
下表详述了使用第三前缀1001(C)的指令中的寄存器编码的示例性示例。
表1:64位模式下的32寄存器支持
[2:0] | REG.TYPE | 公共用途 | |
REG | Mod R/M reg | GPR,向量 | 目的地或源 |
VVVV | VVVV | GPR,向量 | 第2源或目的地 |
RM | Mod R/M R/M | GPR,向量 | 第1源或目的地 |
基址 | Mod R/M R/M | GPR | 存储器寻址 |
索引 | SIB.index | GPR | 存储器寻址 |
VIDX | SIB.index | 向量 | VSIB存储器寻址 |
表2:32位模式下的编码寄存器说明符
[2:0] | REG.TYPE | 公共用途 | |
REG | Mod R/M Reg | k0-k7 | 源 |
VVVV | VVVV | k0-k7 | 第2源 |
RM | Mod R/M R/M | k0-k7 | 第1源 |
{k1} | aaa | k01-k7 | 操作掩码 |
表3:操作掩码寄存器说明符编码
程序代码可以应用于输入指令以执行本文所述的功能并生成输出信息。可以以已知方式将输出信息应用于一个或多个输出设备。出于本申请的目的,处理系统包括具有处理器的任何系统,例如数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器。
程序代码可以以高级过程或面向对象的编程语言来实现以与处理系统通信。如果需要,程序代码也可以用汇编语言或机器语言来实现。事实上,本文描述的机制在范围上不限于任何特定的编程语言。在任何情况下,语言可以是编译语言或解释语言。
本文公开的机制的示例可以以硬件、软件、固件或此类实现方法的组合来实现。示例可以实现为在包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备和至少一个输出设备的可编程系统上执行的计算机程序或程序代码。
至少一个示例的一个或多个方面可以通过存储在机器可读介质上的代表性指令来实现,该机器可读介质表示处理器内的各种逻辑,当被机器读取时使机器制造逻辑以执行本文描述的技术。这种称为“IP核心”的表示可以存储在有形的机器可读介质上,并提供给各种客户或制造设施,以加载到实际制造逻辑或处理器的制造机器中。
这样的机器可读存储介质可以包括但不限于由机器或设备制造或形成的物品的非暂态有形布置,包括存储介质,例如硬盘,任何其他类型的盘,包括软盘、光盘、压缩盘只读存储器(CD-ROM)、压缩盘可重写(CD-RW)和磁光盘,半导体器件,例如只读存储器(ROM)、随机存取存储器(RAM),例如动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)、可擦除可编程只读存储器(EPROM)、闪存、电可擦除可编程只读存储器(EEPROM)、相变存储器(PCM)、磁卡或光卡,或任何其他类型的适合存储电子指令的介质。
因此,示例还包括包含指令或包含例如硬件描述语言(HDL)的设计数据的非暂态有形机器可读介质,其定义了本文描述的结构、电路、装置、处理器和/或系统特征。这样的示例也可以称为程序产品。
仿真(包括二进制翻译、代码变形等)
在一些情况下,指令转换器可以用于将指令从源指令集转换为目标指令集。例如,指令转换器可以将指令翻译(例如,使用静态二进制翻译、包括动态编译的动态二进制翻译)、变形、仿真或以其他方式转换为要由核心处理的一个或多个其他指令。指令转换器可以以软件、硬件、固件或它们的组合来实现。指令转换器可以在处理器上、处理器外或部分在处理器上且部分在处理器外。
图16图示了根据示例与将源指令集中的二进制指令转换为目标指令集中的二进制指令的软件指令转换器的使用相对比的框图。在图示的示例中,指令转换器是软件指令转换器,尽管可替代地,指令转换器可以以软件、固件、硬件或它们的各种组合来实现。图16示出了可以使用第一ISA编译器1604来编译高级语言的程序1602以生成第一ISA二进制代码1606,该第一ISA二进制代码1606可以由具有至少一个第一指令集核心的处理器1616本地执行。具有至少一个第一ISA指令集核心的处理器1616表示任何这样的处理器:这种处理器可以通过兼容地执行或以其他方式处理(1)第一ISA指令集核心的指令集的实质部分或者(2)目标为在具有至少一个第一ISA指令集核心的英特尔处理器上运行的应用或其他软件的目标代码版本,来执行与具有至少一个第一ISA指令集核心的英特尔处理器基本上相同的功能,以便实现与具有至少一个第一ISA指令集核心的处理器基本上相同的结果。第一ISA编译器1604表示可操作以生成第一ISA二进制代码1606(例如,目标代码)的编译器,第一ISA二进制代码1606在带有或不带有额外的链接处理的情况下可在具有至少一个第一ISA指令集核心的处理器1616上被执行。类似地,图16示出了可以使用替代指令集编译器1608来编译高级语言的程序1602以生成替代指令集二进制代码1610,该替代指令集二进制代码1610可以由没有第一ISA指令集核心的处理器1614本地执行。指令转换器1612用于将第一ISA二进制代码1606转换成可以由没有第一ISA指令集核心的处理器1614本地执行的代码。这个转换后的代码不太可能与替代指令集二进制代码1610相同,因为能够做到这一点的指令转换器是难以制作的;然而,转换后的代码将实现一般操作并且由来自替代指令集的指令构成。因此,指令转换器1612表示通过仿真、模拟或任何其他过程允许不具有第一ISA指令集处理器或核心的处理器或其他电子设备执行第一ISA二进制代码1606的软件、固件、硬件或者其组合。
对“一个示例”、“示例”等的引用表明所描述的示例可以包括特定的特征、结构或特性,但是每个示例可能不一定包括特定的特征、结构或特性。此外,这些短语不一定指的是同一个示例。此外,当结合示例描述特定特征、结构或特性时,认为在本领域技术人员的知识范围内,结合其他示例影响这种特征、结构或特性,无论是否明确描述。
此外,在上述各种示例中,除非另外特别指出,否则诸如短语“A、B或C中的至少一个”之类的分离性语言旨在被理解为表示A、B或C,或其任何组合(例如,A、B和/或C)。因此,分离性语言不旨在也不应被理解为暗示给定示例需要A中的至少一种、B中的至少一种、或C中的至少一种各自存在。
下面详细描述可以在其中体现上述示例的示例性架构、管线、核心、系统、指令格式等。
示例包括但不限于:
1.一种装置,包括:
核心,用于执行利用存储器地址的指令;
存储器控制器,用于与易失性存储器进行交互,所述存储器控制器用于响应于所执行的利用存储器地址的指令来确定所述存储器地址是否第一次被访问,以及
当所述存储器地址是第一次被访问时,返回随机值或零值之一,并且
当所述存储器地址不是第一次被访问时,返回存储在所述存储器地址的值。
2.如示例1所述的装置,还包括:
随机数生成器,用于生成随机值。
3.如示例1-2中任一项所述的装置,其中,返回随机值还是零值是通过指令的执行来设置的。
4.如示例1-3中任一项所述的装置,还包括:随机数存储装置,用于存储至少一个要使用的随机数。
5.如示例1-4中任一项所述的装置,其中,所执行的利用存储器地址的指令是加载指令。
6.如示例1-5中任一项所述的装置,还包括:第一次读取的数据结构,用于存储与所述易失性存储器的特定地址的第一次读取有关的信息。
7.如示例1-4以及6中任一项所述的装置,其中,所执行的利用存储器地址的指令是在所述存储器地址处具有操作数的非加载指令。
8.一种系统,包括:
易失性存储器,用于存储数据;
核心,用于执行利用存储器地址的指令;
存储器控制器,用于与所述易失性存储器进行交互,所述存储器控制器用于响应于所执行的利用存储器地址的指令来确定所述存储器地址是否第一次被访问,以及
当所述存储器地址是第一次被访问时,返回随机值或零值之一,并且
当所述存储器地址不是第一次被访问时,返回存储在所述存储器地址的值。
9.如示例8所述的系统,还包括:
随机数生成器,用于生成随机值。
10.如示例8-9中任一项所述的系统,其中,返回随机值还是零值是通过指令的执行来设置的。
11.如示例8-10中任一项所述的系统,还包括:随机数存储装置,用于存储至少一个要使用的随机数。
12.如示例8-11中任一项所述的系统,其中,所执行的利用存储器地址的指令是加载指令。
13.如示例8-12中任一项所述的系统,还包括:第一次读取的数据结构,用于存储与所述易失性存储器的特定地址的第一次读取有关的信息。
14.如示例8-9中任一项所述的系统,其中,所执行的利用存储器地址的指令是在所述存储器地址处具有操作数的非加载指令。
15.一种方法,包括:
执行利用存储器地址的指令;
与易失性存储器进行交互,并且响应于所执行的利用存储器地址的指令来确定所述存储器地址是否第一次被访问,以及
当所述存储器地址是第一次被访问时,返回随机值或零值之一,并且
当所述存储器地址不是第一次被访问时,返回存储在所述存储器地址的值。
16.如示例15所述的方法,还包括:
用随机数生成器生成随机值。
17.如示例15-16中任一项所述的方法,其中,返回随机值还是零值是通过指令的执行来设置的。
18.如示例15-17中任一项所述的方法,还包括:存储至少一个要使用的随机数。
19.如示例15-16中任一项所述的方法,其中,所执行的利用存储器地址的指令是加载指令。
20.如示例15-18中任一项所述的方法,其中,所执行的利用存储器地址的指令是在所述存储器地址处具有操作数的非加载指令。
因此,说明书和附图被认为是说明性的而不是限制性的。然而,显然可以对其进行各种修改和改变,而不背离如权利要求中所述的本公开的更广泛的精神和范围。
Claims (20)
1.一种装置,包括:
核心,用于执行利用存储器地址的指令;
存储器控制器,用于与易失性存储器进行交互,所述存储器控制器用于响应于所执行的利用存储器地址的指令来确定所述存储器地址是否第一次被访问,以及
当所述存储器地址是第一次被访问时,返回随机值或零值之一,并且
当所述存储器地址不是第一次被访问时,返回存储在所述存储器地址的值。
2.如权利要求1所述的装置,还包括:
随机数生成器,用于生成随机值。
3.如权利要求1至2中任一项所述的装置,其中,返回随机值还是零值是通过指令的执行来设置的。
4.如权利要求1至2中任一项所述的装置,还包括:随机数存储装置,用于存储至少一个要使用的随机数。
5.如权利要求1至2中任一项所述的装置,其中,所执行的利用存储器地址的指令是加载指令。
6.如权利要求1至2中任一项所述的装置,还包括:第一次读取的数据结构,用于存储与所述易失性存储器的特定地址的第一次读取有关的信息。
7.如权利要求1至2中任一项所述的装置,其中,所执行的利用存储器地址的指令是在所述存储器地址处具有操作数的非加载指令。
8.一种系统,包括:
易失性存储器,用于存储数据;
核心,用于执行利用存储器地址的指令;
存储器控制器,用于与所述易失性存储器进行交互,所述存储器控制器用于响应于所执行的利用存储器地址的指令来确定所述存储器地址是否第一次被访问,以及
当所述存储器地址是第一次被访问时,返回随机值或零值之一,并且
当所述存储器地址不是第一次被访问时,返回存储在所述存储器地址的值。
9.如权利要求8所述的系统,还包括:
随机数生成器,用于生成随机值。
10.如权利要求8至9中任一项所述的系统,其中,返回随机值还是零值是通过指令的执行来设置的。
11.如权利要求8至9中任一项所述的系统,还包括:随机数存储装置,用于存储至少一个要使用的随机数。
12.如权利要求8至9中任一项所述的系统,其中,所执行的利用存储器地址的指令是加载指令。
13.如权利要求8至9中任一项所述的系统,还包括:第一次读取的数据结构,用于存储与所述易失性存储器的特定地址的第一次读取有关的信息。
14.如权利要求8至9中任一项所述的系统,其中,所执行的利用存储器地址的指令是在所述存储器地址处具有操作数的非加载指令。
15.一种方法,包括:
执行利用存储器地址的指令;
与易失性存储器进行交互,并且响应于所执行的利用存储器地址的指令来确定所述存储器地址是否第一次被访问,以及
当所述存储器地址是第一次被访问时,返回随机值或零值之一,并且
当所述存储器地址不是第一次被访问时,返回存储在所述存储器地址的值。
16.如权利要求15所述的方法,还包括:
用随机数生成器生成随机值。
17.如权利要求15至16中任一项所述的方法,其中,返回随机值还是零值是通过指令的执行来设置的。
18.如权利要求15至16中任一项所述的方法,还包括:存储至少一个要使用的随机数。
19.如权利要求15至16中任一项所述的方法,其中,所执行的利用存储器地址的指令是加载指令。
20.如权利要求15至16中任一项所述的方法,其中,所执行的利用存储器地址的指令是在所述存储器地址处具有操作数的非加载指令。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/560,635 | 2021-12-23 | ||
US17/560,635 US20230205685A1 (en) | 2021-12-23 | 2021-12-23 | Read all zeros or random data upon a first read from volatile memory |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116339615A true CN116339615A (zh) | 2023-06-27 |
Family
ID=86877942
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211475305.9A Pending CN116339615A (zh) | 2021-12-23 | 2022-11-23 | 在第一次读取易失性存储器时读取所有零数据或随机数据 |
Country Status (2)
Country | Link |
---|---|
US (1) | US20230205685A1 (zh) |
CN (1) | CN116339615A (zh) |
-
2021
- 2021-12-23 US US17/560,635 patent/US20230205685A1/en active Pending
-
2022
- 2022-11-23 CN CN202211475305.9A patent/CN116339615A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
US20230205685A1 (en) | 2023-06-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20220206805A1 (en) | Instructions to convert from fp16 to bf8 | |
US20220206743A1 (en) | Instructions to convert from fp16 to bf8 | |
CN114662048A (zh) | 用于共轭转置和乘法的装置和方法 | |
CN117083806A (zh) | 用于字典压缩加速器的方法和装置 | |
EP4016290A1 (en) | Efficient multiply and accumulate instruction when an operand is equal to or near a power of two | |
US20230205685A1 (en) | Read all zeros or random data upon a first read from volatile memory | |
US20230221958A1 (en) | Memory controller with arithmetic logic unit and/or floating point unit | |
US20230205522A1 (en) | Conversion instructions | |
US20230205527A1 (en) | Conversion instructions | |
US20240004660A1 (en) | Conditional load and/or store | |
EP4202659A1 (en) | Conversion instructions | |
EP4202656A1 (en) | Random data usage | |
EP4202658A1 (en) | Zero cycle memory initialization | |
EP4141657A1 (en) | Bfloat16 square root and/or reciprocal square root instructions | |
US20220308998A1 (en) | Apparatus and method to reduce bandwidth and latency overheads of probabilistic caches | |
US20240103865A1 (en) | Vector multiply-add/subtract with intermediate rounding | |
EP4016289A1 (en) | Efficient divide and accumulate instruction when an operand is equal to or near a power of two | |
US20240004648A1 (en) | Vector unpack based on selection information | |
US20240004661A1 (en) | Add with rotation instruction and support | |
US20220413861A1 (en) | Dual sum of quadword 16x16 multiply and accumulate | |
CN115729618A (zh) | Bfloat16算术指令 | |
TW202405646A (zh) | 16位腦浮點(bfloat16)算術指令 | |
CN115729619A (zh) | Bfloat16比较指令 | |
CN115878182A (zh) | 将状态标志的子集从控制和状态寄存器拷贝到标志寄存器 | |
WO2022066355A1 (en) | Loop support extensions |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication |