提升的SSE4.2
SSE4指令集被认为是2001年以来Intel最重要的指令集扩展,包含54条指令。 Intel在Penryn处理器中加入了对SSE4.1的支持,共增加了47条新指令,提升了处理器在图形、3D图像与游戏、视频编码与影音处理等方面的性能表现。本次在Nehalem处理器中,进一步支持了SSE4.2指令集。SSE4.2完整的实现了SSE4指令集,相对于SSE4.1加入了7条新指令。
SSE4.2指令集
SSE4.2新加入的几条新指令有两类。第一类是字符串与文本新指令STTNI,STTNI包含了四条具体的指令。STTNI指令可以对两个16位的数据进行匹配操作,以加速在XML分析方面的性能。据Intel表示,新指令可以在XML分析方面取得3.8倍的性能提升。第二类指令是面向应用的加速指令ATA。ATA包括冗余校验的CRC32指令、计算源操作数中非0位个数的POPCNT指令,以及对于打包的64位算术运算的SIMD指令。CRC32指令可以取代上层数据协议中经常用到的循环冗余校验,据Intel表示其加速比可以达到6.5~18.6倍;POPCNT用于提高在DNA基因配对、声音识别等包含大数据集中进行模式识别和搜索等操作的应用程序性能。
Intel也公布了支持新指令集的开发工具。这些工具涵盖了主流的编译开发环境。目前已明确支持SSE4.2的开发环境包括:Intel C++ Compiler 10.X、微软的Visual Studio 2008 VC++、GCC 4.3.1、Sun Studio Express等。程序员可以直接使用高级编程语言编程,编译器会自动生成优化结果。当然程序员也可以用内嵌汇编的方式来达到目的。
在软件开发和服务器领域,虚拟机也使用的越来越广泛。Intel从2005年发布自家的虚拟化技术,以减少软件的虚拟机相关开销并更广泛的支持操作系统。减少软件的虚拟机相关开销、提高虚拟机性能可以通过以下两种方式来实现:减少虚拟机与外界的转换和映射等操作,或者减少转换和映射的延迟。Nehalem对这两方面都进行了改进。一方面,Nehalem减少了转换的延迟。而另一方面,Intel使用了两种新技术来减少虚拟机与外界的转换操作。
第一个技术是扩展页表。由于虚拟机上运行的进程是虚拟的,因此在需要查找进程的页面时,无法通过直接访问内存得到,而是必须将需要的地址通知虚拟机,虚拟机再根据自身的内存映射情况将映射后的地址告诉主机。主机进行地址转换操作后将转换后的内存地址通知虚拟机,虚拟机最后再通知需要这个数据的页面。整个过程十分繁琐。Nehalem在存储管理单元中支持了扩展页表VPT。虚拟机上的进程需要访问页面时,可以直接到主机中进行映射,跳过了虚拟机这一层,这样就大大简化了访问的过程。同时,由于硬件的可靠性要比软件高很多,因此这一技术的加入也消除了从虚拟机退出最重要的原因。
第二个技术是虚拟处理器ID(VPID)。在之前的系统中,虚拟机上的进程是虚拟出来的,硬件并不知道虚拟机上运行的进程号码。硬件无法得知进程运行的情况,也就无法很好的管理进程的内存映射和占用情况。虚拟机上的进程需要访问自身的页面时,往往最后被告知页表的表项不在TLB中,于是不得不从内存中取出页表,以得到页面的位置信息和所需的数据,过程非常缓慢。而加入VPID后,由于每个硬件可以直接看到虚拟机上运行的每个进程,因此其虚拟进程号可以和页表的映射信息被一起放在TLB中,这样就提高了TLB的命中率,减少了因为TLB失效导致过多内存访问的情况。