词条 | 3DNow |
释义 | § 概要 简史 1996年,Intel Pentium处理器率先加入了MMX指令集,极大地提高了多媒体处理能力,但仅支持整数运算,浮点运算仍然要使用传统的x87协处理器指令。随后在1998年,AMD推出了包含21条新指令的3DNow!指令集(据说是3D No Waiting!的缩写),并用于其K6-2处理器,使之成为第一个能够执行浮点SIMD指令的x86处理器,实现了x86架构下最快的浮点单元,四倍于x87协处理器。 3DNow!指令集赢得了业界的广泛支持,包括微软DX7都对其进行了优化,AMD处理器的游戏性能得以第一次超越Intel,K6-2和随后的K6-III成为市场上的热门产品。 1999年,AMD Athlon处理器发布,3DNow!指令集也增加了5条新指令,成为扩展3DNow!,但是同年Intel又推出了SSE指令集,在提供3DNow!几乎所有功能的同时大大提高了单精度浮点处理速度,还完全支持IEEE754标准,3DNow!优势不再。 之后主流操作系统和软件都开始支持SSE指令集并为其优化,AMD 2000年的新款Athlon处理器(代号雷鸟)中也加入了SSE。之后的时间里,AMD开始致力于AMD64架构的开发,SIMD指令集方面则跟随Intel,连续添加了SSE2、SSE3,不再改进3DNow!。 § 指令集 3DNow!和扩展3DNow!的26条指令从功能上可以分为以下五类: 单精度浮点运算指令 此类指令的操作数均为64位,其高32位和低32位分别是IEEE754格式的单精度浮点数。大部分指令一次可接受两个这样的操作数,并得到两个单精度浮点数的结果。它们的汇编语言助记符都以PF开头。 3DNow!还包含有计算单精度倒数和开方倒数的指令,并可以依程序需要,得到12位精度和24位精度的结果。这些指令一次只能处理一个单精度浮点数。 增强的MMX指令 PAVGUSB用于求64位紧缩字节(8×8位字节)的平均值,可用于视频编码中的像素平均和图像缩放等。可能是意识到这个功能的重要性,Intel在SSE中添加了功能完全相同的PAVGB指令。 PMULHRW则用来补充MMX指令PMULHW的不足,在紧缩无符号字(4×16位字)相乘时可以得到比后者更准确的结果。 数据类型转换指令 PF2ID、PI2FD等4条指令用于完成整数和单精度浮点数之间的相互转换。 数据预取指令 PREFETCH/PREFETCHW指令用于把将要使用到的数据从主存提前装入缓存中,以减少访问主存的指令执行时的延迟。Intel在SSE中添加了类似的PREFETCHTx指令 快速退出MMX状态指令 FEMMS指令与MMX中的EMMS功能相同,用于退出MMX状态。在K6-2和K6-III处理器中,FEMMS比EMMS更快;在Athlon及更新的处理器中,FEMMS等同于EMMS。 § AMD官方宣布放弃3DNow!指令集 AMD通过官方博客宣布,这些新处理器中将不会再设置“3DNow! Instructions”的功能标志位,也就是CPUID扩展功能字的第31位不再为1。开发人员今后必须在使用之前首先检查当前处理器是否还支持3DNow!,避免导致程序运行失败,如需要相关指令可应用更新的SSE系列指令集。 不过例外的是,3DNow!版本的PREFETCH、PREFETCHW指令现在已经自成一体,AMD也计划今后继续提供支持。它们在CPUID规范中的功能标志位是3DNowPrefetch。 但是AMD并没有公布具体哪些处理器将会放弃支持3DNow!,估计会涉及即将推出的Fusion APU加速处理器和明年的“推土机”架构产品。[1] |
随便看 |
百科全书收录594082条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。