MMX

编辑
本词条由“匿名用户” 建档。
MMX,是Intel于1997年初推出的IA-32指令集的SIMD扩展,其中指令总是同时应用于多个数据。最初的缩写MMX代表Matrix Math Extensions,但被 Intel 出于营销原因改名为 MMX。 MMX 不使用新的物理处理器寄存器,而是重新利用数学协处理器 (FPU) 寄存器。 Intel为处理整数设计了MMX 57新指令,引入了四种新的向量数据格式,MMX指令支持...

MMX,是Intel于1997年初推出的IA-32指令集的SIMD扩展,其中指令总是同时应用于多个数据。最初的缩写MMX代表Matrix Math Extensions,但被 Intel 出于营销原因改名为 MMX。

MMX 不使用新的物理处理器寄存器,而是重新利用数学协处理器 (FPU) 寄存器。 Intel为处理整数设计了MMX 57新指令,引入了四种新的向量数据格式,MMX指令支持饱和运算

在推出之后,MMX 只是犹豫不决地得到了软件行业的支持,仅仅三年后,它就被英特尔自己进一步开发的 SSE 和 AMD 的 3DNow! 所取代! 过时的。 其性能的基准显示范围很广。

多媒体应用需求

编辑

媒体通信领域的要求对计算机系统和处理器提出了不同的新要求。 数据的处理通常可以高度并行化。 例如 B. 在视频编辑中,许多单独像素的操作是相同的。 理论上最佳的是使用应用于所有点的单个命令执行。 所需的操作通常不是简单的单个语句,而是更大的命令链。 例如,在背景前淡入图像是一个复杂的过程,使用 XOR 进行掩蔽,使用 AND 和 NOT 准备背景,并使用 OR 叠加部分图像。 通过提供新的复杂命令来满足这些要求。 如此团结z。 B. MMX 命令PANDN 形式为x = y AND (NOT x) 的反转和AND 运算。

实现

编辑

借助 MMX,英特尔创造了一个使用现有寄存器、新数据格式、扩展指令集以及在不同算术选项(饱和模式和环绕模式)之间进行选择的新概念。 与指令范围无关的微小内部差异存在于各种奔腾处理器的(非官方命名的)版本 MMX 1.0 和 2.0 之间。 MMX 方法在 ASIC(它最初的来源)和现代 PowerPC CPU 的 AltiVec 单元或显卡中得到了更多发展。

新数据格式

为 MMX 创建了四种新的数据格式:PackedByte、PackedWord、PackedDoubleWord 和 QuadWord,使用它们可以同时处理多达 64 位的整数数据包。 原则上,这些格式只是对现有格式的不同名称。 新命名法表明 MMX 不处理单个数据或数字,而是处理数据字段。 基本上,QuadWord 只是一个 64 位字段,可以称为 DoubleLongInt; ShortPackedWord 实际上是一个 ShortPackedInteger。

注册使用

为数据操作创建了额外的 64 位寄存器 MM0 到 MM7,但它们在物理上与 FPU 的 80 位寄存器 R0 到 R7 相同。 MMX只使用十字节宽的FPU寄存器中的八个字节(即只使用FPU值的尾数区域)。 剩下的两个字节被设置为MMX下的十六进制值FFFF。 其他 FPU 寄存器,例如 16 位宽控制、状态和标记寄存器、11 位宽 Op 寄存器和两个 48 位宽指针寄存器,在 MMX 应用程序中没有或在极少数情况下有一个限制或不同解释这里出现的值的含义。

FPU和MMX之间的转换

在切换到 MMX 应用程序之前,您应该首先检查系统是否支持 SIMD 扩展,尤其是 MMX。 这可以通过从 Pentium 开始可用的 CPUID 命令来实现,方法是在 EAX 寄存器中传输值 1。

移动轴,1; 特征标志应该是queriedCPUID; 运行 CPUID 命令TESTedx,00800000h; edx 寄存器中的第 23 位是否已设置?JNZMMX_kompatibel; 如果是,则处理器是 MMX 兼容的

如果您想在对 MMX 功能进行正面测试后使用它,下一步是使用 FXSAVE 命令将 FPU 数据保存在 512 字节的内存区域中。 MMX 应用程序通过每个寄存器中 MMX 未使用的两个字节来保护,即。 H。 FPU 应用程序。 但是,没有明确的命令来切换到 MMX 应用程序。 状态 NaN(不是数字)被发送到 MMX 应用程序期间可能发生的任何 FPU 命令。 令人不安的 FPU 命令通常相对不受影响。

应用程序终止后,之前由 FXSAVE 保存的 FPU 数据应该是 w被恢复。 MMX 命令 EMMS 不是强制性的,也不总是必需的,它也存在以向挂起的 FPU 应用程序发出 MMX 释放信号。 这也可以在 MMX 应用程序中使用 - 例如 B. MMX 应用程序调用 API,API 又使用 FPU 命令 - 可能是必要的。

在操作系统中的使用

在多任务操作系统中,当上下文发生变化时,所有寄存器的内容都必须保存在一个特殊的内存区域中。 由于更改此内存区域必须得到所有操作系统的支持,因此使用了一个“技巧”,即使没有操作系统支持也允许 MMX:MMX 寄存器从外部映射到 FPU 的八个浮点寄存器。 这意味着一旦程序使用 MMX,实际的 FPU 寄存器就不再可用。 较新的指令集扩展(例如 SSE)使用它们自己的寄存器,因此需要操作系统的支持。 MMX 寄存器与浮点寄存器的重叠也可以在较新的处理器中关闭。

饱和模式和环绕模式

MMX 指令集包含使​​用饱和模式的指令和工作在环绕模式的指令。例如,MMX 命令 PADDB 在环绕模式下添加两个打包字节,而 PADDSB 在饱和模式下执行相同操作。

饱和模式意味着当一个数字超过其xxx或最小值时不会溢出,而是假定该xxx或最小可能值。

一个应用示例:以图像的淡出效果为例,可以将具有32位色深的两个像素同时变暗一定值。 有了饱和度,你就不必检查像素是否已经是黑色(例如: 0 − 2 = 0 {\displaystyle 0-2=0} 或 5 − 88 = 0 {\displaystyle 5-88=0} )。 这和几个值的并行处理可以显着提高计算速度

在环绕模式下,在发生溢出或下溢时不考虑进位。

操作数规范

编辑

FPU 和 MMX 应用程序之间的一个关键区别在于指令如何获取它们的操作数。 许多 FPU 指令后没有明确的操作数。 它们通过堆栈指针(堆栈顶部)从状态寄存器的第 11 位到第 13 位获取命令。 另一方面,MMX 指令使用指令后明确指定的操作数,就像 CPU 指令一样。

MMX 指令可以有零个、一个或两个源操作数和目标操作数。 这些可以是 MMX 寄存器 (MMX)、通用寄存器 (Reg)、内存位置 (Mem) 或各种大小(8、16、32 或 64 位)的常量 (Const)。

SIMD扩展

时间行为

编辑

大多数 MMX 指令只在一个处理器周期内处理。 乘法指令在结果可用之前需要三个周期; 但是,可以在每个周期之后将新的乘法添加到流水线中。

指令集

编辑

总共有 24 条新指令可以处理不同的数据类型,从而达到 Intel 指定的 57 条指令。 这 24 条指令中的一些仅在对符号和溢出类型的不同考虑上有所不同,因此原则上只剩下 15 条基本操作。

由于 MMX 使用打包数据,大多数指令以 P 开头,以区别于以 F 开头的 FPU 指令。除了前导 P 之外,MMX 指令还可以选择由字母 B、W、D 或 Q 组成数据格式,类似 CPU 的命令字和 S 用于有符号或 US 用于无符号饱和模式。

内容由匿名用户提供,本内容不代表vibaike.com立场,内容投诉举报请联系vibaike.com客服。如若转载,请注明出处:https://vibaike.com/376361/

(11)
词条目录
  1. MMX
  2. 多媒体应用需求
  3. 实现
  4. 新数据格式
  5. 注册使用
  6. FPU和MMX之间的转换
  7. 在操作系统中的使用
  8. 饱和模式和环绕模式
  9. 操作数规范
  10. 时间行为
  11. 指令集

轻触这里

关闭目录

目录