汇聚和散布多个数据元素的制作方法

文档序号:6623540阅读:180来源:国知局
汇聚和散布多个数据元素的制作方法
【专利摘要】本发明涉及汇聚和散布多个数据元素。根据第一方面,可以通过以下步骤来实现高效的数据传输操作:由处理器设备解码指定在第一存储单元和第二存储单元之间的多个数据元素的传输操作的单个指令;发出所述单个指令以由所述处理器中的执行单元来执行;在所述单个指令的执行期间检测异常的发生;并且响应于所述异常,在传送所述异常之前将未决的陷阱或中断传送到异常处理器。
【专利说明】汇聚和散布多个数据元素
[0001] 本申请是申请日为2010年12月22日、申请号为201010603703. 5、发明名称为"汇 聚和散布多个数据元素"的中国发明专利申请的分案申请。

【技术领域】
[0002] 本公开涉及处理器领域。

【背景技术】
[0003] 为了提高多媒体应用以及具有类似特性的其它应用的效率,已经在微处理器系统 中实现了单指令多数据(SIMD)架构,以允许一条指令能够在多个操作数上并行操作。具体 地说,SIMD架构利用了将许多数据元素打包在一个寄存器或连续的存储器单元内的优点。 通过并行的硬件执行,由一条指令在不同的数据元素上执行多个操作,这通常会导致显著 的性能优势。
[0004] 在涉及不规则的存储器访问模式的应用中很难获得SIMD性能提升。例如,某些 数据表需要频繁并随机地更新数据元素,所述数据元素可能或者可能没有存储在连续的存 储器单元中,存储这种数据表的应用通常需要对数据进行重排列,以便充分地使用SIMD硬 件。数据的这种重排列会导致大量的开销,因此限制了从SIMD硬件获得的效率。
[0005] 随着SMD向量宽度的增加(S卩,在其上执行单个操作的数据元素的数量),由于 与重排列在非连续存储器存储设备中存储的数据元素相关联的开销,应用开发者(和编辑 者)发现越来越难以充分使用SIMD硬件。
[0006] 在附图和以下描述中阐述了本发明的一个或多个实施例的细节。根据说明书和附 图以及根据权利要求,其它特征、目的和优势将变得显而易见。

【专利附图】

【附图说明】
[0007] 图1和图2是计算系统的示意性的说明。
[0008] 图3是在处理器流水线中的阶段的框图。
[0009] 图4是系统中的数据流的示意性的说明。
[0010] 图5说明了在汇聚操作中的数据流的示例。
[0011] 图6说明了在散布操作中的数据流的示例。
[0012] 图7说明了用于打包/拆包以及辅助地址产生的有限状态机、和用于加载/存储 的微码。
[0013] 图8是用于动态汇聚/散布机制的示例性实现的流程图。

【具体实施方式】
[0014] 汇聚和散布操作重排列所存储的数据元素以供SMD硬件使用。汇聚操作从存储 器读取一组数据元素并且将它们打包在一起,通常将它们打包到单个寄存器或高速缓存行 中。散布操作通过将打包数据结构中的数据元素散布到一组非连续的或随机的存储器单元 来执行相反的操作。除了与访问一级或多级存储器相关联的延迟之外,在汇聚或散布操作 期间的中断,例如由于反复的页故障(page fault),可能显著地增加与这些操作相关联的 开销,这是因为由操作带来的任何进展通常在返回到操作的开始之前被丢弃。美国专利申 请No. 2009/0172364(其多个部分已并入本文)公开了汇聚、散布和预取的实现,当这些操 作被中断时可以保存操作的状态。因此,当重新启动操作时,可以不需要重复整个操作。
[0015]根据第一方面,可以通过以下步骤来实现高效的数据传输操作:由处理器设备解 码单个指令,该单个指令指定在第一存储单元和第二存储单元之间的针对多个数据元素 的传输操作;发出所述单个指令以由处理器中的执行单元来执行;在所述单个指令的执行 期间检测异常(exception)的发生;并且响应于所述异常,在传送所述异常之前,将未决 (pending)的陷讲(trap)或者中断(interrupt)传送到异常处理器。
[0016] 为了讨论以下实施例、实现和示例,使用了说明性的术语。对这种说明性的术语中 的某些的定义如下。
[0017] 计算机系统或数据处理设备或系统可以被理解为是指用于访问数据和/或通信 的各种设备或系统中的任意一种。示例包括但并不限于一个或多个以下设备的任意组合: 膝上型电脑、笔记本电脑;台式电脑、个人数字助理、手持电脑、个人管理器;掌上电脑、便 携式电脑、手机/传真设备、游戏机、数字平板设备、电子书、和数字视频或数字音频记录器 /播放器。
[0018] 寄存器是能够存储并提供数据的任意设备。以下描述关于数据格式的寄存器的其 它功能。寄存器不是必须与处理器包括在同一管芯上或者包括在相同的封装中。
[0019]诸如"处理"、"计算"、"运算"、"确定"等术语是指计算机或计算系统或类似的电子 计算设备的动作和/或处理,其对表示为计算系统的寄存器和/或存储器内的物理(例如, 电子)量的数据进行操纵和/或将所述数据变换为类似地表示为计算系统的存储器、寄存 器或其它这种信息存储、传输或显示设备内的物理量的其它数据。此外,术语"多个"可以 在整个说明书中用以描述两个或更多个部件、设备、元件、参数等等。此外,术语"异常"和 "故障"(fault)可以互换地使用以指代使得当前操作挂起(suspension)的事件。其类型 包括寻址异常、数据异常、操作异常、上溢溢出异常、保护异常、下溢溢出异常。
[0020] 应当理解,本文公开的教导可以用在各种应用中。本文公开的电路和技术可以用 在许多装置中,例如个人计算机(PC)、无线设备或台、视频或数字游戏设备或系统、图像采 集、处理、产生、和/或可视化系统或显示器、数字显示系统、通信系统等,虽然并不限于此。
[0021] 图1示出了包括通过前端总线和/或系统总线互连的处理器、存储器、和输入/输 出设备的系统。图2示出了包括通过多个点对点接口互连的处理器、存储器、和输入/输出 设备的系统。可以使用其它处理器架构,并且可以使用在处理器内传送数据的其它技术。
[0022] 具体参考图1,系统100包括两个处理器140和160,所述两个处理器用于执行 在第一和第二存储单元之间的针对多个数据元素的传输操作(例如,vscatter、vgather、 vscatterpf和vgatherpf)。虽然为了清楚起见仅示出了两个处理器,但是系统100可以包 括多于两个处理器或仅包括一个处理器。处理器140和160包括一级(LI)高速缓存142、 162,所述一级高速缓存用于汇聚或散布数据。在一些实施例中,处理器140和160经由后 端总线耦合到对应的二级(L2)高速缓存。图1中的系统具有经由系统总线106经由总线 接口 144、164、112、108连接的多个功能单元。在一个实施例中,系统总线106可以是前端 总线(FSB),其与Intel?公司制造的Pentium?类型微处理器一起使用。在其它实施例中, 可以使用其它互连。
[0023] 在一些实现中,其它部件在第一组和第二组存储单元之间执行汇聚、散布、和/ 或预取操作。例如,系统1〇〇包括存储器控制器134,所述存储器控制器134允许处理器 140U60对去往和来自系统存储器110的数据进行读取、写入、汇聚和/或散布。在一些实 现中,可以使用执行诸如汇聚功能这样的功能的其它部件、和其它内部和外部存储器。其 它实施例包括使用闪速存储器的基本输入/输出系统(BIOS)可擦除可编程只读存储器 (EPROM) 136。存储器控制器134包括总线接口 108以允许存储器对要被传送到与系统总 线106耦合的功能单元的数据和来自所述功能单元的数据进行读取和写入。存储器控制器 134还可以通过高性能图形接口 139与高性能图形电路138连接。在某些实施例中,高性 能图形接口 139可以是高级图形端口 AGP接口。存储器控制器134可以将来自系统存储器 110的读取数据通过高性能图形接口 139指引到高性能图形电路138。
[0024] 现在参考图2,系统200包括多个处理器,为了清楚起见仅示出了其中的两个处理 器270、280。处理器270、280中的每一个包括本地存储器通道中心(MCH)272、282以与存储 器202、204连接,以汇聚和/或散布数据。处理器270、280使用点对点接口电路278、288, 经由点对点接口 250交换数据。处理器270、280中的每一个使用点对点接口电路276、294、 286、298,经由分开的点对点接口 252、254与芯片组290交换数据。芯片组290还经由高性 能图形接口 292与高性能图形电路238交换数据。
[0025] 在图1中,总线桥132允许在系统总线106和总线116之间进行数据交换,所述总 线在一些实施例中是工业标准架构(ISA)总线或外设部件互连(PCI)总线。在图2中,芯 片组290经由总线接口 296与总线216交换数据。在任一系统中,在总线116、216上可以 存在各种输入/输出1/〇设备114、214(例如,音频1/0 124、224)。另一总线桥118、218在 一些实施例中可以用于允许在总线116、216和总线120、220之间进行数据交换。总线120、 220在一些实施例中可以是小型计算机系统接口(SCSI)总线、集成驱动器电子(IDE)总线、 或通用串行总线(USB)总线。另外的I/O设备可以与总线220连接。这些I/O设备可以包 括例如:键盘和光标控制设备122、222 (包括鼠标)、通信设备126、226 (包括调制解调器和 网络接口)、以及数据存储设备128、228。软件代码130、230被存储在数据存储设备128、 228中。数据存储设备128、228是固定磁盘、软盘驱动器、光盘驱动器、磁光盘驱动器、磁带、 或非易失性存储器(包括闪速存储器)。
[0026] 参考图3,处理器流水线300可以由图1或2的处理器或其它处理器来操作。处理 器流水线300是乱序流水线。可以使用其它流水线部件或装置。
[0027] -级(LI)高速缓存阶段302将指令和/或数据存储在一级(LI)高速缓存中(图 1中的142、162)。预取/提取阶段304从一级(LI)高速缓存或另一个位置提取和/或预 取指令。指令缓冲阶段306将指令临时地缓冲在一个或多个缓冲器中。指令分发阶段308 将指令向流水线下游发送。解码阶段310从程序获得程序级指令,并且根据程序指令生成 一条或多条机器级指令。寄存器重命名阶段312在执行之前将逻辑寄存器映射到实际的物 理寄存器。乱序(〇〇〇)定序器阶段314基于在源寄存器中的数据的可用性来调度各种机器 指令来执行。源寄存器等待数据的这些指令可以延迟执行,而源寄存器具有可用数据的其 它指令可以提前执行。在一些实施例中,这些指令可以被调度以并行执行。
[0028] 寄存器堆读取阶段316读取物理(例如,源)寄存器。执行单元阶段318将机器 指令输入到一个或多个执行单元。高级加载地址表(ALAT)阶段330在执行机器指令(例 如,高级加载指令、对应的测试指令、和任意插入存储(intervening store)指令)时,修改 条目。撤出阶段320更新机器状态,并且写入物理目的寄存器。
[0029] 图3中所示的流水线阶段仅是一个示例,并且在各种处理器流水线实施例中在功 能和顺序两方面都可以改变。与本文公开的实施例一起使用的处理器不需要使用流水线。
[0030] 参考图4,数据被存储在参考图1和2描述的系统中,例如,在高速缓存存储器416 和/或外部存储器435中。数据被从以下单元汇聚和/或散布到以下单元:连续的单元418 和420和/或不连续或不相邻单元422和424 (例如,在外部存储器435中)。
[0031] 高速缓存存储器416通常在处理器内部,并且外部存储器435通常在处理器(例 如,处理器140、160、270和/或280,参考图1和2之一描述了每一个)外部。然而,在各种 实施例中,高速缓存存储器416和/或外部存储器435中的每一个可以在处理器内部或外 部。外部存储器435可以包括或者可以类似于例如202、204、110或其它存储器。
[0032] 汇聚操作从两个或更多个不连续存储器单元422和424 (例如,在外部存储器435 中)读取数据,并且将数据连续地存储到寄存器存储器,例如目的寄存器415。汇聚数据到 目的寄存器415的状态被记录或者写入到掩码寄存器(mask register) 410。类似地,散布 操作从寄存器存储器(例如目的寄存器415)加载数据,并且将数据存储到两个或更多个非 连续存储器单元422和424 (例如,在外部存储器435中)。散布目的寄存器415的数据的 状态被记录或者被写入到掩码寄存器410。
[0033] 寄存器存储器(例如,目的、掩码和/或其它寄存器存储器)可以是通常在处理器 内的相对较小的存储空间。比起在处理器的其它存储单元中存储的内容,寄存器存储器的 内容可以被更快地访问。目的寄存器415(例如,加载寄存器)可以是计数器装置、指针装 置、随机存取装置(RAM)、随机存取存储程序机器模型(RASP)或其它存储器。掩码寄存器 410(例如,阴影寄存器(shadow register))具有数据字段、元素、或占位符、保存"0"和"1" 标记或值、遮蔽或跟踪目的寄存器415的状态或存储容量。
[0034] 可以实现汇聚和散布操作以访问数据元素,特别是在具有广泛散布的数据元素的 应用中。可以汇聚散布的数据元素从而以连续的方式存储或存储在单个单元中,例如存储 在目的寄存器415中,和/或散布到两个或更多个非连续的存储器单元。在一个实施例中, 汇聚指令读取、拷贝、复制、传输、或连续地将来自两个或更多个不连续存储器单元422和 424 (例如,在高速缓存存储器416和/或外部存储器435中)的每个数据元素写入到目的 寄存器415,并且对于散布指令而言,执行相反的操作。这种汇聚处理过程被称为"打包"数 据元素和/或"打包"目的寄存器415。通过将数据元素打包进单个单元(例如,目的寄存 器415),处理器(例如,图1和2)可以共同地、同时地、一致地、和/或顺次地加载、处理、监 视、或者以另外的方式使用数据,以在最小数量的周期(例如,一个周期)内在数据上执行 操作。
[0035]汇聚和/或散布操作可以被中断,可能是因为尝试访问不连续存储器单元延迟了 相应操作的进展。在一些实施例中,汇聚和/或散布操作的状态被保存。因此,当操作被重 新启动时,不需要重复整个汇聚和/或散布操作。在例如掩码寄存器410中存储关于哪个 数据元素已被和未被汇聚或散布的记录允许操作从中断的点继续进行。
[0036]汇聚操作可以从高速缓存存储器416和/或外部存储器435中的两个或更多个连 续或不连续的存储器单元汇聚一组数据元素(例如,16个)中的每一个。汇聚操作使用指 向高速缓存存储器416中的高速缓存行的指针作为输入或者包括所述指针。当数据跨越 高速缓存行边界而散布时,或者当没有提供高速缓存行地址时,汇聚操作从外部存储器435 获取数据,这会花费相对长的时间。对于每一个数据元素,汇聚操作被指向高速缓存存储器 416,并且如果汇聚不成功,则继续从外部存储器435访问数据。在一些实施例中,操作跳过 高速缓存存储器416并且直接访问外部存储器435。
[0037]汇聚操作将数据元素存储或打包到目的寄存器415 (例如,加载寄存器)。目的寄 存器415包括多个(例如,16个)独立的数据元素,例如,用于单个汇聚操作。目的寄存器 415中的数据元素或向量包括从数据元素被提取自其的存储器复制的数据和/或指向从其 提取数据元素的存储器单元的指针。
[0038]汇聚操作访问高速缓存存储器416、本地存储器或处理器内部的存储器,以在访问 外部存储器435之前读取或获取每个数据元素。按照存储器页或存储器的其它单位,在高 速缓存存储器416中安排数据元素。数据元素被打包在存储器(例如,在连续的存储器单 元418和420)中,或者替代地,将它们存储在不连续或不相邻的单元(例如,在不连续的存 储器单元422和424中)。通常,当两个或更多个数据元素被存储在不连续或不相邻的存储 器单元422和424中时,使用汇聚操作。数据元素可以是字节(例如,8比特)、字(例如,2 字节)、双字(例如,32比特)或数据的其它尺寸或单位。
[0039]汇聚操作的速率取决于所汇聚的元素的一致性的程度。例如,所汇聚的元素的一 致性的程度是对其中存储了所述数据元素的不同的高速缓存行的数量的度量,例如,在高 速缓存存储器416中。以更高的一致性存储的元素(例如,使用高速缓存存储器416中的 更少的高速缓存行存储的元素)被以更少的时间或更少的操作周期来汇聚或获取。例如, 当所有数据元素完全一致时(例如,在同一高速缓存行上),汇聚操作在单个周期中取得数 据。然而,所汇聚的元素可能不完全一致。例如,元素可以散布在多个(例如,2个或3个) 高速缓存行中,所以可以在多次(例如,2次或3次)对(例如,1级(LI)或中央处理单元 (CPU))高速缓存存储器416的访问中被汇聚。
[0040] 目的寄存器415可以是向量寄存器、加载寄存器或其它寄存器存储器,用于临时 地存储或打包从两个或更多个不相邻存储器单元访问或汇聚的数据。例如,对于一组数据 (例如,16个向量),目的寄存器415可以是汇聚操作的目的地,并且高速缓存存储器416和 /或外部存储器435可以是源(例如,其可以是连续的418和420或不连续的422和424)。
[0041] 图5说明了一个实施例,其中,汇聚指令有条件地加载一组数据元素(例如,对于 512位SMD,多达十六个32位或八个64位浮点数据元素),并且将这些数据元素打包到目 的寄存器515中。通过在通用寄存器525中传递的基地址520、作为立即数传递的比例因子 (scale) 530、作为SMD寄存器传递的变址(index)寄存器510 (其保存打包的变址)、和可 选的偏移量(没有示出)来指定元素。只有在数据元素的对应的掩码位是1时,才加载数 据元素。该实现中的掩码寄存器是专用掩码寄存器,或者掩码寄存器可以是SIMD寄存器, 并且元素的掩码位是来自该掩码寄存器的对应元素的符号位。掩码元素被视为与变址元素 尺寸相同。如果元素的掩码位没有被设置,则目的寄存器(SIMD寄存器)的对应元素保持 不变。在汇聚操作完成后,整个掩码寄存器被汇聚指令设置为0,除非汇聚指令的执行被异 常中断。
[0042] 在一个实施例中,当用于汇聚预定的一组数据的汇聚操作在完成之前被终止时, 目的寄存器515临时地存储或保留已经收集的数据(例如,预定的一组数据的一部分子 集)。
[0043] 以下伪代码包括本文描述的操作的说明性示例。可以使用其它伪代码、语言、操 作、操作的顺序、和/或数字。
[0044] 以下伪代码说明了汇聚指令(例如,被写为"vgather")可以如何操作的示例。
[0045]

【权利要求】
1. 一种用于实现数据传输操作的方法,包括: 由处理器设备解码指定在第一存储单元和第二存储单元之间的多个数据元素的传输 操作的单个指令; 发出所述单个指令以由所述处理器中的执行单元来执行; 响应于所述单个指令的执行,在所述第一和第二存储单元之间发起所述多个数据元素 中的数据元素的传输; 在所述单个指令的执行期间检测异常的发生;以及 在传送所述异常之前,将与所发起的所述数据元素的传输相关联的任何未决的陷阱或 中断传送到异常处理器。
2. 根据权利要求1所述的方法,还包括: 如果所述数据元素的传输成功地完成,则更新与所述数据元素相对应的掩码元素,所 述掩码元素的更新用于指示当恢复所述单个指令的执行时不传输所述数据元素。
3. 根据权利要求1和2中的任意一项所述的方法,还包括: 基于用于指示是所述单个指令的第一实现还是第二实现将更好地执行的预测器值,在 所述第一实现和所述第二实现之间进行选择。
4. 根据权利要求3所述的方法,还包括: 基于在所述单个指令的执行期间超过了所访问的存储单元的阈值次数,更新所述预测 器值。
5. 根据权利要求3所述的方法,其中,所述第一实现包括: 确定第一数据元素和第二数据元素将被存储到重叠的存储单元; 跳过与所述第一数据元素相关联的初始的存储操作;以及 执行针对所述第一和第二数据元素的随后的存储操作。
6. 根据权利要求5所述的方法,其中,所述重叠的存储单元包括高速缓存行。
【文档编号】G06F17/30GK104317791SQ201410401488
【公开日】2015年1月28日 申请日期:2010年12月22日 优先权日:2009年12月22日
【发明者】C·J·休斯, Y-K(Y.K.)·陈, M·博姆, J·W·布兰特, M·J·巴克斯顿, M·J·查尼, S·陈努帕蒂, J·科巴尔, M·G·狄克逊, M·B·吉尔卡尔, J·C·霍尔, H·(S)·井户, P·拉赫纳, G·奈格, C·J·纽伯恩, R·S·帕塔萨拉蒂, B·L·托尔, R·瓦伦丁, J·G·维德迈尔 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1