技术专题

HyperThreading(超线程)将深入应用程序

    前言

Intel(英特尔)的HyperThreading(超线程,简称HT)已经炒了好一阵子。事实上,英特尔最近推出的软件编译器中,已经加入了HT技术,英特尔说它将“为英特尔的HT技术铺路”,使其备受瞩目。没错,今年年初HT处理器问世时,却没能成功的一并推出编译器;新的编译器可望平息观察家的疑虑。英特尔表示,使用支持HT的Pentium 4处理器可以提升25%的性能,但最大的限制却来自于编译器。HT是个与程序类型关系非常密切的技术,可以让单颗处理器仿真成多颗处理器的环境,同时运行多个程序;以Pentium 4 3.06GHz来说,不用改变时钟频率,大多数应用程序的性能都可以大幅提升。如果英特尔所言属实,那么HT的好处将会出现在需要大量CPU资源的应用程序上,包括面向大量交易处理的电子交易系统、财务系统、工程与科学系统、游戏、处理特效的软件等等。简言之,需要处理器全速运行的应用程序,都可以享受到HT的好处。而这25%的性能提升,也可以藉由标准的测试软件看出来,例如游戏的每秒帧数。

不过对于不需要太多CPU资源的应用程序来说,HT的好处就不明显,诸如电子表格、字处理、电子邮件等等,都不需要太多的处理器运算能力。除非应用程序使用了多线程,否则HT处理器可以说毫无用武之地。

HyperThread的简述

英特尔用“多任务(multitasking)”这个字眼来解释支持HT的应用程序:一个长期在处理器中运行的线程,占用了处理器的绝大部分资源。在每个进程(process)运行时,处理器都会分给适当的运行时间片(time-slice),每个进程都会分配到一个地址,指向应用程序在内存中的一块空间,这空间包括了程序区、数据区、以及堆栈。并行处理需要两个以上的进程、以及进程间的通讯,好协同运作。而线程(thread)则是在进程间独立运作,共享程序区与数据区,但拥有自己堆栈区的程序。线程所需的系统资源比进程要少。举例来说,进程“内”的通讯就比进程“间”的通讯要来得节省资源。

优点

英特尔宣称,使用线程的应用程序在单CPU或多CPU的计算机上运行时,性能更为增加;线程可以让图形接口响应更快;线程也可以填补I/O与计算间的空档。如果用了多处理器,使用线程的应用程序更能显出其威力。

缺点

英特尔也说,如果在现有的非并行处理应用程序中,加入多线程,那反而会增加应用程序的复杂度。共享资源(例如全局的数据)就会出现并行处理错误,例如存储空间相冲突,或是互相争抢资源等。要检测出这些错误,可能比登天还难;即使多送了一个打印指令,也会隐蔽这些错误,让问题难上加难。

英特尔的HT专利

从刚开始,HT就是一种与应用程序类型息息相关的技术。事实上,我们取得了由英特尔所提供的专利书,其中可以看出英特尔已经、或是即将涉猎的HT应用程序,这些程序都使用了并行处理。“在多线程的并行处理器架构中,微引擎之高速写入(Fast Write Instruction for Micro Engine Used in Multithreaded Parallel Processor Architecture)”一节中,就勾勒出许多HT的应用程序:包括网络、多媒体、以及存储设备等子系统应用程序。这专利的发明者为马萨诸塞州Shrewsbury地区的Donald Hooper,英特尔为该专利的所有人。

其中就详细说明,多线程的处理器可以如何跟媒体存取控制器(MAC,Media Access Control),例如高速以太网络(Gigabit Ethernet)设备沟通。这项专利并没有说明可以提升多少性能,但说明了多线程的网络芯片可以与多种设备,包括交换机(switch)或路由器(router)交换大量的数据。在专利书的例子中,单一路由器可以同时与两组独立的高速网络信道做数据交换,两者并行不悖。换句话说,以前用两个处理芯片才能做到的事,现在只需要一个就够了。(你可能会觉得奇怪,英特尔为何用网络作例子;事实上,英特尔在网络处理器业务上也同样投入了巨资。)就存储系统,例如RAID(磁盘阵列)来说,这项专利也提供了两个以上的硬盘,更佳的容错能力与性能提升。这对注重安全的产业,例如为买方与卖方作中介的电子交易系统就非常有用。这在专利书中也同样着墨甚多。


2001年3月英特尔所提交的手写的HT专利申请书。

HT处理器与HT编译器最近才出现,之前这项专利只是预告了英特尔的雄心壮志。英特尔在稍早的Xeon服务器处理器与现在的Pentium 4处理器中,都加入了HT功能。现在推出了多种程序语言的编译器,Windows与Linux等操作系统上都找得到,英特尔可能会像专利书上所说的一样,涉足多种处理器市场。看看英特尔不断的在非PC市场上(例如通讯与存储部门)加码,就可以略知一二。

同步但高速的视频编辑线程

就一般个人计算机来说,视频编辑是最耗费CPU的应用程序,也是HT可以大展身手的地方。英特尔在一份白皮书中指出,理论上CPU可以一边读取未压缩的视频数据,实时的加入特效,一边同时写入磁盘驱动器;这些动作可以不间断的一气呵成,而且在同一个应用程序中就可以做到。英特尔说,如果这个特效是要实时显示出来的,那更可以看出其性能提高。每个帧的显示时间都是有限的,在下一个帧送进CPU前,特效就可以处理完成。

要成功的使用多线程,有几项信息非常重要。例如说,如果针对某一帧所做的特效非常复杂,那么该函数必须符合HT的运算规则。根据帧的大小,每个帧都可以被分为多个小的部分,再利用线程来同步处理;英特尔把这称为“数据分解问题(data decomposition problem)”,将时间分给每个线程。在任何线程问题中,第一个要处理的就是最耗时间的那部分程序。在我们视频编辑的例子中,特效本身是最耗时间的程序,再来才是读写帧的时间。主线程会在设置阶段,将目前的帧分解成四个部分,如图7(a)所示。数据设置完以后,主线程就会唤醒其它三个线程,然后四个线程(加上主线程本身)会开始运行自己的部分。每个线程运行完后,就会停在障碍(barrier)点,等待其它有关的线程任务的完成。所有线程都完成以后,主线程就会统一发号施令,将帧写到磁盘上,然后再读取下一个帧,如图7(b)与7(c)所示。

测量性能

HT特效应用程序会因为无法全力运行视频算法则,而有所限制。以我们特效处理的例子来说,80%的时间都在做运算,而读/写的时间各占了10%。假设在最完美的情形下,这类应用程序的预期性能永远不会大于5。在四个线程情形下,性能永远不会大于2.5,因为串行传输的部分仍然占了20%,而并行处理则占了80%。这是四个线程情形下,性能的上限。而在实际情形下,由于系统的其它负荷,其性能永远会低于2.5。

多线程的编译器

英特尔表示,其HT编译器工具可用于所有应用程序上。Windows与Linux的Intel C++ 7.0与Intel Fortran编译器可以提高Itanium 2、Xeon、以及Pentium 4的应用程序性能;与其它厂商的编译器比起来,性能可以增加40%。7.0编译器专为HT设计,包括了自动并行处理的选项,能自动在程序中寻找可以充分利用多线程能力的地方。同时这编译器也支持OpenMP,一个可以简化建立与管理多线程应用程序的标准。

CERN对这编译器极为激赏

位于瑞士日内瓦的欧洲核子研究机构(CERN,European Organization for Nuclear Research),也是互连网的诞生地(详见CERN - Public home)。里面的一位科学家表示,他移植了80万行C++与90万行C原始码,原本需要一个星期时间的工作,只花了一个下午就解决了。“由于GNUGCC的兼容性,以及英特尔的编译器,我们没有遇到多少困难,”CERN的资深科学家Fons Rademakers说,“虽然架构很大,但我们的应用程序在32MByte的iPaq以及Itanium系统上,都运作得很好。”他的程序名为ROOT,是个需要作大量数据分析的程序:


充分利用HT应用程序

最后,除非你平常就需要大量的运算,例如视频编辑、3D游戏等,否则不要期望HT能为你的生活带来什么改变;而且真正支持HT的应用程序还未上市。已经支持HT的应用程序,其实是无心插柳之作:例如Adobe的Photoshop与微软的Windows Media Decoder在推出之前,都为了查错的原因,而在上市前加入了多线程功能。不过有了英特尔的新编译器,程序设计师很快就可以充分利用HT功能,写出支持HT的单机应用程序,或能在Xeon处理器上运行的网络应用程序。简单的说,使用多线程的PC,以及支持HT功能的Pentium 4计算机,将可以让用户同时做视频编辑,听网络广播,定时的从网络上收取NBA最新战况;但却不会有太多的性能倍增的感受。不过要注意,运行电子表格或上网等,即使利用了HT功能,性能跟以前还是一样。所以说,在程序设计师全面使用英特尔的新编译器前,最好的HT应用程序是不会出现的。

CopyRight © 2003