专利名称::微处理器以及预取数据至微处理器的方法
技术领域:
:本发明是关于微处理器,特别是关于微处理器中的预先提取(prefetching)。
背景技术:
:美国专利第6,832,296号揭露了适用于x86架构的预取指令(prefetchinstruction),上述预取指令利用重复前置码(REPprefix)将存储器中的多条序列快取线(cachelines)预先提取至处理器的高速缓存中。换言之,处理器的通用暂存器中具有多条由计数值(count)所指定的序列快取线。然而,程序设计者知道会有想要预先提取存储器中的非连续快取线的情况,其中非连续快取线代表这些快取线的位置是任意的。若一个程序想要预先提取多条非连续快取线,则此程序必须包含多个上述美国专利所提及的预取(REPPREFETCH)指令。然而,这会增加程序码长度(codesize)并使得处理器需要执行多个指令而不是单一指令。因此,我们需要一种改良的预取指令用以解决这些问题。
发明内容本发明提供一种微处理器,该微处理器包括一指令解码器。指令解码器用以解码一指令集中的多个指令,其中指令集包括一重复预取间接指令。重复预取间接指令包括多个地址操作数以及一计数值。微处理器使用地址操作数来计算一预取表中的一第一项目的一地址,其中预取表具有多个项目,并且预取表中的各个项目包括一预取地址。计数值用以指定欲被预取的多条快取线的数量,其中快取线的每一者的存储器地址是由项目中的一者中的预取地址所指定。本发明提供另一种微处理器,该微处理器位于具有一系统存储器的一系统中。微处理器包括一指令解码器、一计数暂存器以及一控制逻辑电路。指令解码器用以解码一预取指令,预取指令指定一计数值与用以指向一表格的一地址,其中计数值表示欲从系统存储器中预取的多条快取线的数量,并且表格用以储存快取线的多个存储器地址。计数暂存器用以储存一剩余计数值,剩余计数值表示欲被预取的快取线的一剩余数量,其中计数暂存器一开始即具有被指定在预取指令中的计数值。控制逻辑电路耦接至指令解码器与计数暂存器,控制逻辑电路使用计数暂存器与从表格中所提取的存储器地址,用以控制微处理器将表格中的快取线的存储器地址提取至微处理器,并且控制微处理器将系统存储器中的快取线预取至微处理器的一高速缓存。本发明提供另一种预取数据至微处理器的方法,该微处理器位于具有一系统存储器的一系统中。上述方法包括解码一预取指令,预取指令指定一计数值与用以指向一表格的一地址,其中计数值表示欲从系统存储器中预取的多条快取线的数量,并且表格用以储存快取线的多个存储器地址。上述方法还包括储存一剩余计数值,其中剩余计数值表示欲被预取的快取线的一剩余数量,并且剩余计数值的一初始值为被指定在预取指令中的计数值。上述方法还包括使用剩余计数值与表格中的存储器地址,用以将系统存储器中的快取线预取至微处理器的一高速缓存。为让本发明的上述和其它目的、特征、和优点能更明显易懂,下文特举出较佳实施例,并配合所附图式,作详细说明如下。图1为本发明实施例的微处理器的方块图;图2为已知技术的奔腾III预取指令的方块图;图3为已知技术的奔腾III字串指令的方块图;图4为已知技术的重复预取指令的方块图;图5为本发明实施例的重复预取间接指令的方块图;图6为本发明实施例的预取表的方块图7为图1中的微处理器执行图5中的重复预取间接指令的操作流程图;图8为本发明另一实施例的微处理器的方块图;图9为本发明另一实施例的重复预取间接指令的方块图;图10为本发明另一实施例的预取表的方块图11为图8中的微处理器执行图9中的重复预取间接指令的操作流程图。[主要元件标号说明]100--微处理器;102指令解码器;104--暂存器文件;106延伸计数暂存器;108-4刀始预取表项目地址;114地址产生器;116、118、146多工器;122预取表项目地址暂存器124--重复预取计数暂存器;126加法器;128--递减器;144控制逻辑电路;154--高速缓存;166响应缓冲器;172--总线接口单元;186第一预取表项目地址188--重复预取计数值;194预取地址;197--第二预取表项目地址;400重复预取指令;404、504运算码字段;406--ModR/M字节;500、900重复预取间接指令508--地址操作数;600--预取表;602预取地址;604--快取线;896延伸来源索引暂存器899--偏移暂存器;902偏移量;1004其它数据。具体实施例方式为了解决上述问题,本发明提供一新的预取指令使得程序设计者能够在存储器中建立一预取表(如图6的预取表600与图10的预取表1000),其中预取表600中的各个项目(entry)用以指定欲被预先提取的快取线的预取地址。此外,本发明所提供的新的预取指令可使程序设计者能够指定欲被处理器所预先提取的多条非连续快取线。在本发明中,是以重复预取间接(REPPREFETCHINDIRECT)指令500(参考图5)来表示上述新的预取指令。图1为本发明实施例的微处理器100的方块图,此微处理器100能够执行一重复预取间接指令。由于微处理器100在许多方面与美国专利第6,832,296号的图1中的微处理器100(之后简称“已知微处理器”)类似,因此本文是以引用方式将“已知微处理器”并入本文中。但值得注意的是,本发明所揭露的微处理器100具有额外特征_能够执行重复预取间接指令。以下列出本发明的微处理器100与已知微处理器的差别第一,微处理器100以预取表项目地址(PrefetchTableEntryAddress;PTEA)暂存器122取代已知微处理器中的重复预取地址(ItepeatPrefetchAddress;RPA)暂存器122,用以储存目前所使用的预取表600的项目的地址。因此,预取表项目地址暂存器122提供一第一预取表项目地址186至多工器(MUX)146,而已知微处理器则提供一预取地址。第二,多工器146被改造用以额外接收来自高速缓存154的预取地址194。第三,多工器116被改造用以额外接收来自高速缓存154的第二预取表项目地址197。第四,加法器126被改造用以将第一预取表项目地址186增加一个存储器地址大小(例如4字节),而不是增加一条快取线大小。图2为已知技术的奔腾III预取指令的方块图。图3为已知技术的奔腾III字串指令的方块图。图4为已知技术的重复预取指令的方块图。图5为本发明实施例的重复预取间接指令的方块图。重复预取间接指令500在许多方面与图4的已知微处理器的重复预取指令400类似。以下将列出本发明的重复预取间接指令500与重复预取指令400的差别之处。重复预取间接指令500的运算码字段504的值不同于重复预取指令400的运算码字段404的值,使得指令解码器102能够区分这两个指令。在另一实施例中,重复预取间接指令500与重复预取指令400共享相同的运算码的值,不过重复预取间接指令500包含一额外的前置码用以与重复预取指令400区别。此外,重复预取间接指令500的地址操作数(addressoperands)508用来指定初始的预取表600项目的存储器地址,而不是指定初始的预取地址。图6为本发明实施例的预取表的方块图。预取表600包含多个项目,各个项目包含一预取地址602用以指向存储器中的快取线604,换言之,预取地址602为快取线604的存储器地址。如图6所示,预取表600中的预取地址602是彼此相邻。因此,图1中的加法器126将第一预取表项目地址186增加一个存储器地址大小,用以指向预取表600中的下一个预取地址602。在另一实施例中(参考图811),预取表600的预取地址602是非连续(non-sequential)的。请参考图7,图7为图1中的微处理器100执行重复预取间接指令500的操作流程图。流程从步骤702开始。在步骤702中,指令解码器102将重复预取间接指令500解码。流程前进至步骤704。在步骤704中,地址产生器114产生由重复预取间接指令500中的ModR/M字节406与地址操作数508所指定的有效地址(初始预取表项目地址)108。初始预取表项目地址108代表预取表600中的第一个项目的存储器地址。流程前进至步骤706。在步骤706中,控制逻辑电路144将延伸计数(ExtendedCount;ECX)暂存器106中的计数值(即欲被预先提取的快取线的数量)复制到重复预取计数(RepeatPrefetchCount;RPC)暂存器124中。此外,地址产生器114将初始预取表项目地址108加载至预取表项目地址暂存器122。计数值是通过位于重复预取间接指令500之前的一指令加载至延伸计数暂存器106。流程前进至步骤708。在步骤708中,微处理器100从预取表600中提取由第一预取表项目地址186所指定的预取地址602。值得注意的是,预取地址602可能已经位于高速缓存154中。仔细而言,在本实施例中,当微处理器100从预取表600中提取第一个预取地址602时,与第一预取表项目地址186有关的整条快取线会被提取。因此,在提取初始的预取表600的项目中的初始的预取地址602之后,预取表600中的后几个预取地址602可能会位于高速缓存154中,而此现象会随着预取动作的执行而持续。若预取地址602尚未位于高速缓存154中,则总线接口单元172会将系统存储器中的预取地址602提取至响应缓冲器(responsebuffer)166,用以依序地将预取地址602引退至高速缓存154中。在另一实施例中,为了避免使用预取地址602来破坏(pollute)高速缓存154,预取地址602并没有被引退至高速缓存154。相反地,响应缓冲器166(或其它中间储存(intermediatestorage)位置)将此预取地址602提供至多工器146用以完成步骤712到步骤716的动作,当完成步骤712到步骤716后再将预取地址602丢弃(discard)。流程前进至步骤712。在步骤712中,高速缓存154查找(lookup)于步骤708中所提取的预取地址602,其中高速缓存154(或响应缓冲器166或其它中间储存位置)将此预取地址602作为预取地址194用以提供至多工器146。流程前进至判断步骤714。在判断步骤714中,若预取地址194出现于(hitsin)高速缓存154,则流程前进至步骤718。若预取地址194未出现于高速缓存154,则流程前进至步骤716。在步骤716中,总线接口单元172将系统存储器中由预取地址194所指定的快取线604预先提取至响应缓冲器166,响应缓冲器166接着将预先提取的快取线604写入至高速缓存154。流程前进至步骤718。在步骤718中,控制逻辑电路144控制递减器(decrementer)128与多工器118用以将重复预取计数暂存器124中的数值递减1。此外,控制逻辑电路144控制加法器126与多工器116用以将预取表项目地址暂存器122中的数值增加一个存储器地址大小。流程前进至判断步骤722。在判断步骤722中,控制逻辑电路144判断重复预取计数值188是否为零。若为零,则流程结束;若不为零,则流程回到步骤708用以完成预取下一条快取线604的动作。虽然图7中并未描述关于本发明的微处理器100的其它实施例,但这些实施例以下所描述的特征,例如在转译查询缓冲器(TranslationLookasideBuffer;TLB)发生遗漏(miss)时停止预取动作,并且在失去仲裁(arbitration)或未到达自由请求缓冲器(freerequestbuffer)的次临界数量时重新执行预取动作。请参考图8,图8为本发明中微处理器100的另一实施例的方块图,此微处理器100能够执行一重复预取间接指令900。图8的微处理器100在许多方面与图1的微处理器100类似。然而,图8的微处理器100用以执行图9中的重复预取间接指令900。重复预取间接指令900包含一偏移量(offsetvalue)902用以指定各个预取表600的项目之间的距离。偏移量902有助于程序设计者在存储器中建立如图10所示的预取表1000,其中图10中的预取表1000具有非连续位置的预取地址602,相关细节将在以下做进一步说明。请参考回图8,相较于图1的微处理器100,图8的微处理器100包括一偏移暂存器(offsetregister)899。偏移暂存器899从暂存器文件(registerfile)104的延伸来源索引(ExtendedSourceIndex;ESI)暂存器896中接收图9的偏移量902,并且将所接收的偏移量902提供至加法器126,使得加法器126将预取表项目地址暂存器122中的数值增加一个偏移量902,以便提供下一个预取表项目地址至预取表项目地址暂存器122。偏移量902被通过位于重复预取间接指令900之前的一指令加载至延伸来源索引暂存器896。请参考图11,图11为图8中的微处理器100执行重复预取间接指令900的操作流程图。图11与图7的操作流程图类似,以下将列出两者之间的差别。步骤1106取代了步骤706,并且在步骤1106中,控制逻辑电路144将延伸计数暂存器106中的计数值(即欲被预先提取的快取线的数量)复制到重复预取计数暂存器124中。此外,地址产生器114将初始预取表项目地址108加载至预取表项目地址暂存器122。控制逻辑电路144将偏移量902加载至偏移暂存器899。步骤1118取代了步骤718,并且在步骤1118中,控制逻辑电路144控制递减器128与多工器118用以将重复预取计数暂存器124中的数值递减1。此外,控制逻辑电路144控制加法器126与多工器116用以将预取表项目地址暂存器122中的数值增加一个偏移量902,而不是增加一个存储器地址大小。请参考图10,图10为本发明中预取表的另一实施例的方块图。假设预取表1000为一具有多个区间(buckets)或数据结构的开放式散列表(openhashtable)。各个区间包含两个字段,分别为8字节散列值(对应至图10中的“其它数据1004”)与4字节存储器地址(对应至图10中的“预取地址602”),其中该4字节存储器地址为一散列对象指针(hashobjectpointer)。散列表区间散列值8字节散列对象指针4字节区间[1]散列值8字节散列对象指针4字节区间[2]散列值8字节散列对象指针4字节在本实施例中,可利用延伸来源索引暂存器896中的数值8来执行重复预取间接指令900,并且重复预取间接指令900会略过8字节散列值字段用以提取散列对象指针作为预取地址602。现有的程序中普遍具有此类型的数据结构(即使数值大小会变动)。使程序设计者能够指定偏移量902的优点有助于程序设计者或编译器使用现有的数据结构(例如散列表_预取表1000),而不需要另外为重复预取间接指令900建立一预取表。在另一实施例中,程序设计者可在另一个通用暂存器中指定一延迟值(delayvalue)。若延迟值非为零(non-zero),则微处理器100在执行重复预取间接指令900时会延迟各个预取一快取线604的迭代(iteration),其中延迟量是等于被指定在延迟值中的指令的数量。本发明虽以各种实施例揭露如上,然其仅为范例参考而非用以限定本发明的范围,任何本领域技术人员,在不脱离本发明的精神和范围内,当可做些许的更动与润饰。举例而言,可使用软件来实现本发明所述的装置与方法的功能、构造、模块化、模拟、描述及/或测试。此目的可通过使用一般程序语言(例如C、C++)、硬件描述语言(包括Verilog或VHDL硬件描述语言等等)、或其它可用的程序来实现。该软件可被设置在任何计算机可用的媒体,例如半导体、磁盘、光盘(例如⑶-R0M、DVD-R0M等等)中。本发明实施例中所述的装置与方法可被包括在一半导体智慧财产权核心(semiconductorintellectualpropertycore),例如以硬件描述语言(HDL)实现的微处理器核心中,并被转换为硬件型态的集成电路产品。此外,本发明所描述的装置与方法可通过结合硬件与软件的方式来实现。因此,本发明不应该被本文中的任一实施例所限定,而当视所附的权利要求范围与其等效物所界定者为准。特别是,本发明是实现于一般用途计算机的微处理器装置中。最后,任何本领域技术人员,在不脱离本发明的精神和范围内,当可作些许更动与润饰,因此本发明的保护范围当视所附的权利要求范围所界定者为准。权利要求一种微处理器,包括一指令解码器,用以解码一指令集中的多个指令,其中上述指令集包括一重复预取间接指令;以及上述重复预取间接指令,包括多个地址操作数,上述微处理器使用上述地址操作数来计算一预取表中的一第一项目的一地址,其中上述预取表具有多个项目,并且上述预取表中的各个项目包括一预取地址;以及一计数值,用以指定欲被预取的多条快取线的数量,其中上述快取线的每一者的存储器地址是由上述项目中的一者中的上述预取地址所指定。2.根据权利要求1所述的微处理器,其中上述重复预取间接指令还包括一运算码,上述运算码与一奔腾III预取指令运算码不同。3.根据权利要求2所述的微处理器,其中上述重复预取间接指令还包括一奔腾III重复字串指令前置码,上述奔腾III重复字串指令前置码是位于上述运算码之前。4.根据权利要求2所述的微处理器,其中上述重复预取间接指令还包括一奔腾III预取指令运算码;一奔腾III重复字串指令前置码;以及一第二前置码,其中上述奔腾III重复字串指令前置码与第二前置码是位于上述运算码之前,其中上述第二前置码用以区分上述重复预取间接指令与一重复预取指令。5.根据权利要求1所述的微处理器,其中上述预取表中的上述项目是位于多个非连续存储器位置。6.根据权利要求1所述的微处理器,其中上述重复预取间接指令还包括一偏移量,用以指定上述预取表中的各个项目之间的一距离,其中上述偏移量是通过位于上述重复预取间接指令之前的一指令加载至一通用暂存器。7.根据权利要求1所述的微处理器,其中上述重复预取间接指令还包括一延迟值,其中上述微处理器在执行上述重复预取间接指令时是以一延迟量来延迟各个预取上述快取线中的一者的迭代,其中上述延迟量是等于上述延迟值中所指定的一指令数量,其中上述延迟值是通过位于上述重复预取间接指令之前的一指令加载至一通用暂存ο8.根据权利要求1所述的微处理器,还包括一暂存器文件,耦接至上述指令解码器,上述暂存器文件包括一奔腾III架构暂存器文件的一延伸计数暂存器,其中上述计数值是储存于上述延伸计数暂存器中,其中上述计数值是通过位于上述重复预取间接指令之前的一指令加载至上述延伸计数暂存器;其中上述地址操作数被指定在一分段地址偏移地址格式中,并且上述分段地址偏移地址格式符合一奔腾III架构分段地址偏移地址格式,其中一个或多个暂存器符合多个奔腾III数据区段延伸来源索引暂存器。9.一种微处理器,上述微处理器位于具有一系统存储器的一系统中,上述微处理器包括一指令解码器,用以解码一预取指令,上述预取指令指定一计数值与用以指向一表格2的一地址,其中上述计数值表示欲从上述系统存储器中预取的多条快取线的数量,并且上述表格用以储存上述快取线的多个存储器地址;一计数暂存器,用以储存一剩余计数值,上述剩余计数值表示欲被预取的上述快取线的一剩余数量,其中上述计数暂存器一开始即具有被指定在上述预取指令中的上述计数值;以及一控制逻辑电路,耦接至上述指令解码器与上述计数暂存器,上述控制逻辑电路使用上述计数暂存器与从上述表格中所提取的上述存储器地址,用以控制上述微处理器将上述表格中的上述快取线的上述存储器地址提取至上述微处理器,并且控制上述微处理器将上述系统存储器中的上述快取线预取至上述微处理器的一高速缓存。10.根据权利要求9所述的微处理器,其中上述快取线在上述系统存储器中的顺序为非连续。11.根据权利要求9所述的微处理器,还包括一递减器,耦接至上述计数暂存器,上述控制逻辑电路控制上述递减器用以根据预取上述快取线中的每一者来递减上述剩余计数值。12.根据权利要求9所述的微处理器,还包括一地址暂存器,用以储存一项目地址,其中上述项目地址指向正被预取的上述快取线中的一者的上述存储器地址,其中上述控制逻辑电路一开始即将上述预取指令所指定的上述地址加载至上述地址暂存器,其中上述控制逻辑电路根据预取上述快取线中的每一者来更新位于上述地址暂存器中的上述项目地址;以及一加法器,耦接至上述地址暂存器,用以根据预取上述快取线中的每一者来增加一加数至地址暂存器中的上述项目地址以便产生一总合,其中上述控制逻辑电路使用上述总合来更新上述地址暂存器。13.根据权利要求9所述的微处理器,其中上述预取指令还指定一偏移量,上述偏移量用以指定上述表格中的各个存储器地址之间的一距离。14.根据权利要求9所述的微处理器,其中上述控制逻辑电路用以将上述表格中的上述快取线的上述存储器地址提取至上述高速缓存。15.根据权利要求9所述的微处理器,其中上述控制逻辑电路用以将上述表格中的上述快取线的上述存储器地址提取至上述微处理器的一储存器,并且禁止将上述存储器地址引退至上述高速缓存,其中上述储存器不同于上述高速缓存,其中不同于上述高速缓存的上述储存器包括一响应缓冲器。16.根据权利要求9所述的微处理器,其中上述预取指令还指定一延迟值,其中上述控制逻辑电路器以一延迟量来延迟预取上述快取线中的每一者的步骤,其中上述延迟量等于上述延迟值中所指定的一指令数量。17.根据权利要求9所述的微处理器,其中上述预取指令指定一运算码,上述运算码与一奔腾III预取指令运算码不同,其中上述预取指令还指定一奔腾III重复字串指令前置码,上述奔腾III重复字串指令前置码位于上述运算码之前,其中上述预取指令指定一奔腾III预取指令运算码与一一第二前置码,其中上述奔腾III预取指令运算码位于一奔腾III重复字串指令前置码之后,上述第二前置码位于上述运算码之前,并且上述第二前置码用以区分上述预取指令与一重复预取指令。18.一种预取数据至微处理器的方法,上述微处理器位于具有一系统存储器的一系统中,上述方法包括解码一预取指令,上述预取指令指定一计数值与用以指向一表格的一地址,其中上述计数值表示欲从上述系统存储器中预取的多条快取线的数量,并且上述表格用以储存上述快取线的多个存储器地址;储存一剩余计数值,其中上述剩余计数值表示欲被预取的上述快取线的一剩余数量,并且上述剩余计数值的一初始值为被指定在上述预取指令中的上述计数值;以及使用上述剩余计数值与上述表格中的上述存储器地址,用以将上述系统存储器中的上述快取线预取至上述微处理器的一高速缓存。19.根据权利要求18所述的预取数据至微处理器的方法,其中上述快取线在上述系统存储器中的顺序为非连续。20.根据权利要求18所述的预取数据至微处理器的方法,上述方法还包括储存一项目地址,其中上述项目地址指向正被预取的上述快取线中的一者的上述存储器地址,并且上述项目地址的一初始值为上述预取指令所指定的上述地址。21.根据权利要求20所述的预取数据至微处理器的方法,其中上述储存上述项目地址的步骤还包括根据预取上述快取线中的一者来增加一加数至上述项目地址。22.根据权利要求18所述的预取数据至微处理器的方法,其中上述预取指令还指定一偏移量,上述偏移量用以指定上述表格中的各个存储器地址之间的一距离。23.根据权利要求18所述的预取数据至微处理器的方法,上述方法还包括将上述表格中的上述快取线的上述存储器地址提取至上述高速缓存。24.根据权利要求18所述的预取数据至微处理器的方法,上述方法还包括将上述表格中的上述快取线的上述存储器地址提取至上述微处理器的一储存器,并且禁止将上述存储器地址引退至上述高速缓存,其中上述储存器不同于上述高速缓存。25.根据权利要求18所述的预取数据至微处理器的方法,上述方法还包括以一延迟量来延迟预取上述快取线中的每一者的步骤,其中上述延迟量等于上述延迟值中所指定的一指令数量。26.根据权利要求18所述的预取数据至微处理器的方法,其中上述预取指令指定一运算码,上述运算码与一奔腾III预取指令运算码不同,其中上述预取指令还指定一奔腾III重复字串指令前置码,上述奔腾III重复字串指令前置码位于上述运算码之前,其中上述预取指令指定一奔腾III预取指令运算码与一一第二前置码,其中上述奔腾III预取指令运算码位于一奔腾III重复字串指令前置码之后,上述第二前置码位于上述运算码之前,并且上述第二前置码用以区分上述预取指令与一重复预取指令。全文摘要本发明提供一种微处理器,包括一指令解码器用以解码一指令集中的多个指令,其中指令集包括一重复预取间接指令。重复预取间接指令包括多个地址操作数以及一计数值,微处理器使用地址操作数来计算一预取表中的一第一项目的一地址,其中预取表具有多个项目,并且预取表中的各个项目包括一预取地址。计数值用以指定欲被预取的多条快取线的数量,其中快取线的每一者的一存储器地址是由项目中的一者中的预取地址所指定。文档编号G06F9/32GK101882063SQ20101024378公开日2010年11月10日申请日期2010年7月30日优先权日2009年8月7日发明者约翰·M·吉尔,罗德尼·E·虎克申请人:威盛电子股份有限公司