威廉·凯亨 编辑

多伦多数学家

威廉·凯亨威廉·凯亨

威廉·凯亨1933年6月生于多伦多。完成中学学业以后,凯亨进入著名的多伦多大学。在那里,他实现了“三级跳”——继1954年取得数学学士学位以后,1956年和1958年又先后获得硕士学位和博士学位。学成以后,凯亨既在母校和加州大学伯克利分校从事过教学和研究,又在Intel、NS、IBM、HP、Apple等著名的计算机元器件公司和整机制造厂家工作过。这些经历使他积累了丰富的工程实践经验,并为计算机科学技术,尤其是在计算机运算技术的发展方面做出了重要贡献。

基本信息

编辑

中文名:威廉·凯亨

外文名:WilliamM.Kahan

国籍:加拿大

出生日期:1933年6月

毕业院校:多伦多大学

职业:数学家

主要成就:获得图灵奖

出生地:多伦多

性别:男

个人简介

编辑

威廉·凯亨威廉·凯亨

继1979年度图灵奖首次授予一位加拿大学者K.E.Iverson之后,1989年度的图灵奖又一次授予加拿大学者威廉·凯亨(WilliamM.Kahan)。

作风严谨

编辑

威廉·凯亨威廉·凯亨

作为一名数学家,凯亨在教学与研究工作中素以作风严密、严谨、严格著称。但为此,他也付出了一定的代价。在本文,值得提一下这样一个小插曲,即凯亨获得图灵奖以后,引发了一场争议和争论。这在图灵奖的历史上是唯一的一次。事情是这样的:ACM于1990年1月宣布凯亨因在浮点运算标准的制定上的贡献而获得图灵奖,并在1990年2月于华盛顿召开的?90CSC(计算机科学会议)上正式向凯亨颁奖。这之后,ACM收到了一名读者对凯亨获奖表示异议的信。按照“言论自由”的原则,ACM把这封信不加评论地发表在《ACM通讯》7月份的“ACM论坛”(ACMForum)这一专栏中。

读者异议

编辑

威廉·凯亨威廉·凯亨

这名读者提出异议的理由主要有两条:一是凭“制定标准”就获奖,条件不足。但对这一点,该读者大概也觉得并不理直气壮,因而并未发挥,匆匆带过。重点在第二条,即凯亨在伯克利大学对学生不公正。不公正表现在哪里呢?该读者说,伯克利大学的大学生绝大多数课程都能取得高分,只有凯亨教授上的数据结构和程序设计课例外,这是其一。其二是该读者自己和其他5~6名同学在进入伯克利的研究生院的初试中,6门笔试课中的5门都顺利通过,只有凯亨教授主持的数值分析课的考试通不过,不得不重考。而他之所以未能通过,是因为他认为解题的步数比运算结果的精度更加重要,凯亨教授不同意他的这种观点。这封读者来信发表以后,10月份出版的《ACM通讯》上,在“ACM论坛”中发表了另一名读者表示不同意见的来信。这名读者认为,上述读者介绍的情况,恰恰说明凯亨教授对学生高标准、严要求,是值得称道的;而解题步数同运算结果精度相比何者更重要,显然正确的一方是凯亨教授。因此这名读者表示,在看了上述读者的信之后,他只是更加增加了对凯亨教授的敬意,而不是相反。争论至此结束。在这个过程中,图灵奖的评奖委员会和凯亨教授本人都没有出来说任何话。这一小插曲也许对我国教育界和学术界有所启示。

凯亨目前仍在伯克利计算机科学系任教授。

主要贡献

编辑

威廉·凯亨威廉·凯亨

大家知道,计算机中的“数”有“定点数”和“浮点数”之分,“定点数”的运算部件的设计和实现比较容易,而“浮点数”的运算部件的设计和实现却复杂得多,困难得多。因此,较早的计算机许多都不配备浮点运算,而是采用IBM的巴科斯(J.Backus,1999年度图灵奖获得者)发明的软件,由定点运算部件去完成浮点运算。但这种做法使浮点运算的速度大大降低,难以满足某些应用的需要。正是凯亨,在Intel工作期间,主持设计与开发了8087芯片,成功地实现了高速、高效的浮点运算部件。目前,以80×86为CPU的计算机,若需完成科学与工程计算方面的课题,必须同时配置8087这种数学协处理器。一些著名的数学软件包,如Mathematica,也必须在配有8087数学协处理器的机器上才能运行。由于有这样的背景,凯亨受命主持制定了二进制的、与基数无关的浮点运算标准,即IEEE754标准和IEEE854标准。这两个标准至今仍为绝大多数的计算机厂商所遵守。

除了以上主要贡献外,凯亨在科学、工程、财会计算的数值算法的设计、误差分析、验证与自动诊断方面也有卓越的贡献,他是该领域中世界公认的权威,曾发表过许多有价值的论文。尤其是在矩阵计算方面,凯亨有极高的学术造诣。

浮点运算

什么是浮点数

威廉·凯亨威廉·凯亨

要了解什么是浮点数,首先要了解什么是整数。数和计算通常是按“整数”或“浮点数”进行划分的。整数计算使用计算的所有位(如32位)记录整数“值”。而浮点计算则使用计算的一部分位表示“值”(如23位),另一部分位表示指数(8位)。由于一部分位用来表示指数,所以浮点计算得出的值可以比整数计算得出的值大很多或是小很多。换句话说,对于给定数量的位,浮点计算的精度没有整数计算高,但浮点计算结果的范围却比整数计算大很多。

哪些处理器执行单元用于浮点运算

大多数人会认为所有的浮点运算都通过处理器中的浮点单元完成。总体说来是这样的,但不是所有的浮点单元都一样,所有的浮点指令也不尽相同。同样,许多人认为所有的SIMD(单指令多数据流)指令都是由SIMD单元完成的。然而事实并非如此。有些SIMD指令执行整数运算,而有些则执行浮点运算。同样,执行浮点运算的SIMD指令使用的执行单元与非SIMD浮点指令(如x87浮点指令)相同。

何谓不同的浮点指令集

在增加MMX或SSE/SSE2/SSE3指令集之前,x86架构中的所有浮点计算都被认为是x87指令。这意味着他们使用特定的80x87寄存器堆栈并且是80位扩展精度计算。所有x87指令都有一个和目标操作数(例如单条指令,单个数据)。

x87寄存器位于堆栈中,而非平面寄存器文件(flatregisterfile)。这意味着,访问x87寄存器要比下述XMM寄存器复杂一些。

采用MMX技术的英特尔®奔腾®处理器中增加了MMX指令。MMX是第一个增加到x86指令集中的SIMD指令。MMX指令是纯整数运算;不过使用的是80位x87寄存器堆栈。

英特尔®奔腾®III处理器中增加了SSE指令集。SSE增加了支持单精度浮点运算能力的SIMD指令,它使用8个新的XMM128位寄存器(在64位模式中运算时,新的处理器中有16个XMM寄存器),它们被布置在一个平面寄存器文件中(这意味着可随时访问任何寄存器,并且不使用x87寄存器所用的堆栈协议)。增加的SIMD整数运算也是SSE指令集的一部分。x87寄存器无需执行SSE浮点指令,但是执行浮点运算的那些SSE指令仍使用x87指令所使用的浮点执行单元(FP-add、FP-Mul和FP-Div)。这意味着您不能同时执行SSEFP-Multiply和x87FP-Multiply。

英特尔®奔腾®4处理器和英特尔®至强®处理器中增加了SSE2指令。SSE2增加了支持双精度浮点运算能力的SIMD指令,它使用SSE指令所使用的128位XMM寄存器(增加的SIMD整数运算也是SSE2指令集的一部分)。许多新的SSE2指令与原来的MMX指令相似;但是新的SSE2指令能够使用“更加易用”的XMM寄存器,而非“较难用”的x87寄存器堆栈。双精度浮点SSE2指令继续使用x87浮点执行单元。

含超线程(HT)技术的英特尔®奔腾®4处理器和英特尔®至强®处理器(例如90纳米Northwood和Prestonia)中增加了SSE3指令。SSE3指令只是增加了几个SSE或SSE2指令集中所没有的较为独特的指令,但并未增加任何重 要的新功能。

而在英特尔®全线台式机处理器酷睿®、酷睿2®处理器、移动平台上的迅驰®处理器以及服务器上全新的英特尔®至强®处理器上采用的酷睿®架构中,英特尔在原有的SSE3指令集的基础上新增了SSE优化,包括酷睿2®处理器架构加速的SSE,SSE2和SSE3双操作(operationstwo-fold)。经过优化的架构可以在单时钟周期内执行一条128位SSE,SSE2或SSE3指令。

下一代SSE4指令集将集成在2007年下半年发布的下一代45nm产品中,其中包括代号Nehalem的英特尔第二代酷睿®架构。SSE4增加了50条性能增强指令。这些指令优化矢量编译、媒体、文本和字符串处理以及程序目标加速。

CPU微体系结构对浮点运算的影响

以下是四核英特尔至强5300处理器(Woodcrest)上其中一个内核的微体系结构图表。您将注意到FP-Mul/FP-Div和FP-Add单元(在图表中显示为Fadd和Fmul/Fdiv)处于不同的输出端口(因此支持每时钟周期发出和撤销两条浮点运算)。

综述

尽管所有的浮点运算都在一个执行单元内运行,但是不同的指令用于执行不同的运算精度。了解什么运算单元能运算什么指令会让你明白具体每个处理器理论上的浮点运算能力(FLOPS)意味着什么。简单的计算一个处理器有多少浮点运算单元并不能准确的告诉你该处理器的浮点运算能力。你需要了解浮点运算单元的计算宽度,每个浮点运算单元能执行的指令,每个指令运算的精度以及在一个时钟指令内每个指令能执行的数量。

浮点运算与英特尔

对于计算机而言,计算复杂程度越大,要求的内存值也就越多,计算所用的时间也就越长,同时也需要更多的晶体管来支持计算。在上世纪九十年代前,这确实是一个难题,怎样能让计算机更轻松的处理越来越复杂的运算?直到一个人的出现,难题迎刃而解了,他就是浮点计算的先驱——威廉·凯亨(WilliamM.Kahan)。

计算机中的“数”有“定点数”和“浮点数”之分,“定点数”的运算部件的设计和实现比较容易,而“浮点数”的运算部件的设计和实现却复杂得多,并且困难得多。因此,较早的计算机许多都不配备浮点运算,而是采用IBM的巴科斯(J.Backus,1999年度图灵奖获得者)发明的软件,由定点运算部件去完成浮点运算。可这种做法使浮点运算的速度大大降低,也就难以满足某些应用的需要了。

就是在这种情况下,威廉·凯亨,这位1933年6月出生在多伦多,曾经供职于英特尔的人解决了这个问题。威廉·凯亨在完成中学学业以后,进入著名的多伦多大学。在那里,他实现了“三级跳”——继1954年取得数学学士学位以后,1956年和1958年又先后获得硕士学位和博士学位。学成以后,凯亨在母校和加州大学伯克利分校从事过教学和研究工作。在英特尔供职期间,凯亨主持设计与开发了8087芯片,成功地实现了高速、高效的浮点运算部件。直到目前,以80×86为CPU的计算机,若需完成科学与工程计算方面的课题,也必须同时配置8087这种数学协处理器。同时,一些著名的数学软件包,如Mathematica,也必须在配有8087数学协处理器的机器上才能运行。由于他的突出贡献,凯亨后来又受命主持制定了二进制的、与基数无关的浮点运算标准,即IEEE754标准和IEEE854标准。而这两个标准至今仍为绝大多数的计算机厂商所遵守。也正是由于这两个标准,ACM于1990年1月宣布凯亨因在浮点运算标准的制定上的贡献而获得图灵奖。

严密、严谨、严格、追求更进一步是威廉·凯亨的一贯作风,也是他留给英特尔在不断研发新的计算机浮点运算技术道路上的一笔精神财富。英特尔与浮点运算有着不解之缘,不论是从创始还是到一路走来的发展,英特尔都在贡献着自己最大的力量,相信在明天,英特尔依然会伴随着浮点计算的不断发展继续前行。

性能指标评测说明

SPECfp™_rate_base2006是一项计算密集型性能指标评测,用于衡量计算机系统在运行大量并行任务时的浮点吞吐性能。性能指标评测包括从实际最终用户应用开发而来的一组十四个浮点工作负载。通过将性能指标评测的拷贝数量设置成操作系统可识别的逻辑硬件内核数量而同时运行多个性能指标评测拷贝来测量系统吞吐率。报告的性能得分是按工作/小时测量的系统吞吐率的衡量标准。得分越高表示性能越好。

SPECfp2006:当采用全面优化的编译程序进行编译时的17个标配比率的几何平均值。每一个比率代表一个浮点运算基准测试。

SPECfp_base2006:当基准测试采用最低优化的编译程序进行编译时的17个标配比率的几何平均值。

SPECfp_rate2006:当基准测试采用全面优化的编译程序进行编译时的17个标配吞吐率的几何平均值。

SPECfp_rate_base2006:当基准测试采用最低优化的编译程序进行编译时的17个标配吞吐率的几何平均值。