读过《三体》的同学都知道。
三体人为了封杀地球的科技水平,派了一个智子来到地球。
质子把全球物理学家的实验结果全部搞乱。
让物理学家没有办法通过实验进一步点亮科技树。
三体人就依靠这种手段把地球的科技水平封杀到不能进化的水平。
这就是降维打击。
这件事情的后果就是,
很多物理学家对这个世界产生了怀疑,从而自杀。
而本文的主人公,数学家马教授,就遭遇了几乎一样的场景。
他最近的科研结果和理论完全对不上。
居然得出了一些诡异所思的结果。
真的不得不让人联想是不是有“智子”在捣乱。
不同的是,他通过自己抽丝剥茧的洞察和计算。
一点一点逼近真相。
最终,造就了芯片历史上最大的赔偿事件。
第一幕:魔鬼藏在素数里
事情的开始发生在一所平平无奇的小规模大学。
麻雀虽小,五脏俱全。
这个大学有个数学专业,
数学专业有位马教授。
他的研究方向是孪生素数猜想。
为了讲清楚马教授的为什么发现有“智子”干扰自己的科研结果
本文稍微简单介绍一下什么是孪生素数猜想?
孪生素数猜想被誉为哥达巴赫猜想的姐妹问题。
我们都熟悉的数学家陈景润和张益唐都研究过类似的问题。
搞过孪生素数猜想的同学们都知道,
素数是只能被1和自身整除的数。
而孪生素数是什么意思?
如果有个素数Q。
Q+2也是素数。
则Q与Q+2是一对素数,称为相差2的挛生素数。
大家很快就能口算一堆的孪生素数。
例如3和5,5和7,11和13,10016957和10016959等等
这些都是都是孪生素数。
什么是孪生素数猜想?
简单来说,就是,是否存在无穷多对孪生素数。
为了解决这个问题,数学家想了很多的方法来证明。
1919年,挪威数学家布隆仿照欧拉的方法,求所有孪生素数的倒数和:
B=(1/3+1/5)+(1/5+1/7)+(1/11+1/13)+…
如果也能证明这个和比任何数都大,就证明了孪生素数有无穷多个了。
在这个方面,有两位中国数学家还是做出了非常牛X的结果。
一个是大名鼎鼎的陈景润。
1966年,中国数学家陈景润证明:存在无穷多个素数p,使p+2是不超过两个素数之积。
而另一个大名鼎鼎的张益唐。
2013年,张益唐证明了存在无数多个素数对(p, q),其中每一对中的素数之差,即p和q的距离,不超过七千万。
成果发表在《数学年刊》。
从此一举成名。
可见,孪生素数这个猜想及其引申问题一直是数论中研究的方向。
看到这个问题,如果读者中有大神要是能够证明这个猜想,
那么也能一举成名。
马教授也是这样的思路,
他要计算孪生素数的倒数之和是不是收敛的。
S=1/5+1/7+…+1/29+1/31+.+1/p+ 1/(p+2)+..
聪明如你,
如何来计算这些值?
是不是可以通过编程来计算。
马教授和读者们一样聪明。
他打算计算机通过程序来加速计算的效率。
本来办公室里面就有6台用于计算的计算机。
但是,还不够。
就在那年的三月份,草长莺飞,
马教授购入了一台当时世界上最先进的计算机。
然后一阵编程之后,又是一轮艰苦的计算过程。
终于在一个晚上,新的结果出来了
马教授的手指悬在键盘上,一头雾水的瞪着屏幕。
屏幕上的数字像一道裂开的深渊,颠覆了过去几个月的值。
“我X,这不科学啊。”
于是他逐一对程序进行排查。
经过深入的对程序的检查。
终于他的目光聚焦在一串数字上。
824633702441;
这串平平无奇的数字,将揭示芯片产业史上最隐秘的BUG。
第二幕:排除法
这个数字毫无疑问,是一个素数。
而马教授做的就是求这个素数的倒数。
然后和其他的孪生素数的倒数加起来,确定是不是趋近于一个收敛的值。
当马教授开始计算1/(824633702441)。
但是算了几次之后,结果总出现诡异的偏差。
起初他以为是自己疯了。
“或许代码有错?”
他熬了两个通宵重写程序,甚至换了编程语言。
随着测试越来越多。
很多马教授就用一个方法找到了规律。
如果我们计算N*(1/N)。
那么这个值就是1;
这个没毛病,任何一个数乘上它的倒数都是1;
但是,如果用这台新计算机(824633702441.0)*(1/824633702441)。
那么结果却不是1。
这个值是 0.999999996274709702;
有误差。
并且,通过编程遍历了很多数。
马教授发现,如果N在以下的范围之内,
824633702418 <= N <= 824633702449,
那么,计算出的结果都和1偏差很大。
另外,马教授还做了一个计算。
也就是计算1/(1/N);这个值应该返回N的原值。
但是,对于上面的范围内的数值来说。
就会返回3072=0x(200)*6
如果说,前面的算是误差,那么后面的结果妥妥就是错误。
马教授在6月份就发现了这个问题,结果用了三个月时间进行问题排除。
包括,软件程序,编译器,芯片组。
终于,让他发现了蛛丝马迹。
当他在办公室的老电脑和新部署的计算机上分别运行同一段代码时。
老电脑运行正确,
而新的计算机的结果却是在小数点后面差。
马教授尝试了不同品牌的新计算机,包括戴尔,gateway,IBM等计算机。
结果,让他发现:
有着同一款芯片的计算机就会出这个问题。
问题到了这里指向就非常明确。
这款芯片可能有问题。
所以他打电话给了这个芯片厂家。
但是,却让他更加的气愤。
第三幕:死不承认
马教授春暖花开的三月时候买了计算机。
夏日炎炎的6月时候,发现了科研结果有问题。
等到秋风萧瑟10月时候,终于定位到和计算机的芯片相关。
马教授给这个芯片公司的技术支持部打电话,
对于这个芯片公司来说,,
这批芯片已经卖出了几百万片了,
不可能有问题。
有问题也只能是马教授自己的问题。
技术支持部门的声音礼貌而冰冷:。
“我们之前没有报告和观察到此类错误。”
“可能是计算机的总线系统有问题,”
“这个不是我们芯片的问题。”
技术支持部门丝毫不承认自己的问题。
“但我的计算已经无数次触发这个错误了!”马教授几乎吼出来。
“那您可能需要检查自己的算法。”电话挂断了。
从春到夏,从夏到秋,马教授大半年的时候消耗在一个问题上。
如今得出了结果。
居然,厂家不承认。
但是,这个芯片厂商是业界巨头。
一个普通人怎么能和行业巨头针锋相对。
马教授在芯片厂家那里没有得到答案。
于是,没有任何办法的马教授,在10月的最后一天。
联系了一个畅销书作家舒曼,
舒曼手头上没有马教授提到的计算机。
但是他联系了一个好友,软件大牛,也是一个不知名软件公司创始人。
这个软件大牛用一段程序很快就确认了马教授的发现。
于是,这个软件大牛就把马教授发现的这个BUG,
发到了业内的技术论坛Canopus上。
这个论坛,有很多的程序员和极客来交流。
“恳请任何人帮马教授验证这个现象。”
很快,无数的论坛爱好者都被这个问题给吸引了,纷纷的开始验算。
四十八小时内,
回复如野火般蔓延。
装有这种芯片的计算机上的错误报告成千上万的被报告出来。
都验证了马教授的计算。
问题再也掩藏不住。
5天之后,电子工程时报报道了这个问题。
并且采访了这家芯片大厂的技术支持的史经理。
史经理满不在乎。
他胸有成竹的解释说道:“这个缺陷不会影响普通用户,只有老马这种极端的用户才会遇到,而老马同志也是用了几个月后才发现的,我们前8位小数点都是对的,而影响到的之后小数点后的第9位。”
最后,史经理总结说道:
“普通用户根本不用担心,你根本不会用到。”
很快,所有的最大的媒体开始报道和转载。
所有的都引用了史经理的话。
“这个漏洞对于普通用户根本不重要。”
并且,这家芯片大厂还表示。
只有90亿分之一的操作会在普通用户的电脑上产生错误。
正常的办公,
或者家用。
根本不会受到影响。
“是否召回装有这个芯片的计算机?”
“我看就没有这个必要了吧。”
第四幕:最后一击
随着事件的发酵,
这个芯片大厂的傲慢。
根本没有打算为购买这种计算机的客户提供解决方案。
对他们来说。
普通客户根本又用不到这么精确的计算。
所以,没有必要来给他们换芯片。
这种傲慢让用户的愤怒如同野火一样,
更多的人加入进来,寻找问题的根源。
这个芯片的问题究竟是什么也逐渐的清晰起来。
终于。
一些程序员找到了这个芯片的问题出在什么地方了。
在程序中,有个除法的例子,
4195835除以3145727。
正确的结果是:

但是,装有这个芯片的计算机,却算出了下面的结果。

这可根本不是史经理说的,
只会影响小数点后第九位的结果。
这个例子中,小数点后第四位已经出错了。
并且,这些结果是必然出现的。
并不是什么90亿分之一的概率。
通过进一步的分析。
极客们发现。
这个芯片计算的是下面的结果。

用二进制表示上面两个数
4,195,835 = 0x4005FB
3,145,727 = 0x2FFFFF
而
4195579 = 0x4004FB
也就是说,二者之间值,差了0x100;
做过芯片的同学立马就能感受到。
这明显是一个芯片的BUG,
而不是一个精度和概率的的问题。
与此同时。
在游戏雷神之锤(quake)中,
如果游戏软件运行在装有这种芯片的电脑上,
也会发现一个诡异的BUG。
在某些关卡上,从特定角度来看,整个画面就全乱套了。
BUG被找到的越来越多。
而这家芯片大厂却是嘴越来越硬。
像是复读机一样。
重复
再重复。
这个芯片只有90亿分之一的错误。
普通消费者不影响。
终于,
有人忍不住了。
这个人就是带头大哥IBM。
IBM决定,暂停和这家芯片大厂的供货。
绝对不用这一批的芯片,装到自己的计算机上。
当然,IBM也不是为了主持正义。
主要是,IBM正在推自己家的Powerpc系列芯片的计算机。
如果有机会,踹竞争对手一脚。
这绝对是一个非常好的时机。
即为广大消费者主持了正义,又暗戳戳的提升自有芯片的计算机份额。
一石二鸟的事情。
真是暗爽啊。
这带头大哥一出现,
那么其他家的计算机公司也暂停了这家芯片大厂的供货。
一时间,世界上几乎所有的计算机公司,都暂停了这批芯片的采购。
消息一出来。
这家芯片大厂的股价狂跌。
终于到了傲慢的厂家撑不住了。
在当年的11月20日。
这家芯片大厂宣布认错
对有问题的芯片进行更换。
而这场芯片更换,
花费了接近4.75亿美金。
至此,马教授的6个月坚持,终于迎来了一个结果。
从春天买入电脑,
到夏天发现问题,
到秋天10月份找这家大厂反馈问题没有结果。
而事件在11月1日发布在网上,
经过了三周左右的发酵。
用户,舆论,竞争对手,业界合作伙伴。
怒火引燃了这家大厂的股价。
第五幕:小作文
台下记者们的闪光灯此起彼伏,
台上芯片大厂CEO正宣布全球召回。
如果处理不当,这个芯片大厂,可能就此陷入倒闭的深渊也说不准。
这次芯片的更换,让这个公司付出了4.75亿美金的代价。
按照当时汇率,接近40亿人民币。
虽然,底下的人都告诉他,这个问题的几率是90亿分之一。
但是还是闹出了如此大的风波,
付出了惨重的代价。
根据这个事件的反思。
这个CEO写了一篇文章。
在文中他写到
“我是最晚知道芯片危机(也就是上面BUG,导致所有计算机厂商暂停供货)含义的人之一,只有在遭受了一场枪林弹雨的指责非难后,我才意识到我们需要适应新环境,如果我们改变方向,就能保住这一众人皆知的品牌,保住用户心中的巨人形象,如果我们知错不改,坚持老路,我们不仅失去与未来客户搞好关系的机会,还给公司的名誉和财务带来严重的破坏。”
还给这篇文章起了一个几乎所有人都耳熟能详的名字。
《只有偏执狂才能生存》
这个CEO叫做安迪.格鲁夫。
这个芯片大厂就是英特尔。
这个出BUG的芯片就是奔腾芯片。
而发现他们问题的马教授,叫过Thomas R. Nicely。
是林奇堡学院的一个数学教授。

出的这个bug就是芯片中信添加了FDIV部件,属于FPU的一部分。
(芯片具体的问题剖析,我后面再找时间单独来写)

安迪.格鲁夫这本书《只有偏执狂才能生存》开篇就讲了这个让他寝食难安的BUG。
正是这个BUG,让如日中天的英特尔陷入一场危机。
但是他还是执着于这个BUG有90亿分之一的概率。
但是,我们上面分析了,
这明显是一个必现的BUG。
只要用到这些除法,
对于这些具体的数字,
就会产生巨大的偏差。
而不是英特尔分析,90亿分之一的几率。
另外,多说一句,
这个BUG和只有偏执狂才能生存有什么关系。
其实,我个人觉得这个偏执狂这个翻译有点不是很准确。
这是这本书的英文名字《Only the Paranoid Survive》
Paranoid的翻译。

这个对于安迪格鲁夫一个少年时代从纳粹迫害下,东躲西藏的犹太人来说。
这个单词,更多有那种多疑恐惧,战战兢兢,。
也就是能够首先从风向中嗅到危险的意思在里面。
就像大草原上的羚羊,嗅到狮子的气味一样。
有敏锐的感知危险的嗅觉。
格鲁夫叹息道:“老板总是最后一个知道真相的人。”
其实,这是大厂的傲慢引发了这场危机。
如果在马教授第一次给英特尔反馈这个BUG时。
如果技术支持部门能够认真对待这个反馈这个问题。
而不是一味的用90亿分之一概率来说服消费者,
并且用复读机一样压制舆论。
这场危机也许不会发生。
来源于歪睿老哥,作者歪睿老哥
半导体工程师半导体行业动态,半导体经验分享,半导体成果交流,半导体信息发布。半导体培训/会议/活动,半导体社群,半导体从业者职业规划,芯片工程师成长历程。278篇原创内容公众号