FISTTP, ADDSUBPS, ADDSUBPD, MOVSLDUP, MOVSHDUP, MOVDDUP, LDDQU, HADDPS, HSUBPS, HADDPD, HSUBPD, MONITOR, MWAIT
这些指令主要被使用在以下的范围:
- x87 到整数的转换
- 复杂的算法
- 视频编码
- 图形
- 线程同步
这些指令与Prescott 的其它改进部分并不相同,因为如果你想从中获得好处的话,就必须更新软件。应用程序也必须重新使用这些指令进行编译或封装,那么这些指令究竟有什么亮点呢?
FISTTP 在x87浮点到整数的转换中非常有用,这主要适用于在浮点运算中没有使用SSE 的应用程序。
ADDSUBPS, ADDSUBPD, MOVSLDUP, MOVSHDUP 和 MOVDDUP 主要是应用于“complex arithmetic”(复杂运算/复数运算)领域的指令。这些指令主要被设计为减少在进行复杂运算时候所产生的延迟。比如MOVE 指令,它主要用于把值装载到寄存器和与其它寄存器进行相加。其它的复杂运算指令在进行Fourier 转换和回旋操作的时候特别有用 - 在信号处理存储(例如音频编辑)或者繁重的频率计算使用非常普遍(例如声音的辨认)。
LDDQU 指令是Intel 引以为傲的地方,它可以帮助加速视频编码,目前它已经被集成到了DivX 5.1.1 codec 。更多关于这个指令的信息,建议参考Intel 的开发者文档。
根据开发者反馈的信息,Intel 决定增加以下的指令用于3D 应用程序(例如游戏):HADDPS、HSUBPS、HADDPD、HSUBPD。Intel 告诉我们,开发者们对此期盼已久,这些指令的出现简直让他们欣喜若狂,为此我专门访问了Epic Games Inc 的主要负责人(虚幻,虚幻竞技场,虚幻竞技场2003和2004 的作者) 。下面是我们的对话:
问:自从SSE 规范发布起,很多3D 程序员一直都希望能够有个点生成指令(就像阴影汇编语言中的dp4指令),而HADDP 正是点生成的运作。那么新3D 指令的发布,对你们的意义如何?
答:点生成是任何3D 程序场景最基本的操作,例如BSP 往返移动、游戏场景等。场景的转换,冲突检测等是衡量CPU 运算性能的重要组成部分。这些指令非常有用,并使游戏的性能获得很大改观。这些指令并非每个开发工程师都渴望需要的,但对于Intel 能够听取开发人员的意见则值得称赞。
最后我们还有两个线程同步指令 - monitor和mwait 。这两个指令协同使用,能够改进超线程的性能。根据设备驱动程序产生的空闲线程或者非生产性的线程,这些指令能够检测是否一个线程应该被发送到操作系统核心,然后通知操作系统在完成更重要的线程之后,关注这些线程。不过要值得注意的是,monitor 和mwait 都需要操作系统的支持,这意味我们只有等待Longhorn 或者windows 支持这两个指令的下个版本Service Pack 。
Intel 没有说明是否经过简单的操作系统服务包更新就可以支持这些指令;而只是表示他们正在努力与Microsoft 合作,以期能够尽早获得支持。