奔腾浮点除错误
奔腾浮点除错误(英语:Pentium FDIV bug)是英特尔公司的旧版本Pentium浮点运算器的一个错误。错误起源于奔腾系列的浮点除(FDIV)指令。这错误所引发的后续效应导致了英特尔的公关灾难,并导致英特尔在1994年受到4.75亿美元的损失。[1]
发现
1994年10月,美国弗吉尼亚州林奇堡学院数学系教授托马斯·雷·奈斯利为研究孪生质数,发现用电脑处理长除法时一直出错[2] 。他用一个数字去除以824,633,702,441时,答案一直是错误的。事后发现原因是英特尔为了加速运算,将整个乘法表刻录在处理器上面,但是2048个乘法数字中,有5个输入错误。这些错误其实不容易出现,在运算过程中,它会自动修复错误,只有几个二进制的数字组,才会造成完全错误的结果。
影响
根据工程师指出,大约90亿个长除法中会有一个错误[3]。依照计算,平均故障间隔(MTBF)大概是七百年,所以几乎是不可能发生。但是同样有人声称实际上遭遇到这个错误的频率要高得多。英特尔公司后来召回了有缺陷的产品。
受影响型号
此问题仅在原先Pentium处理器的某些型号上出现[4]。该错误只在某些Pentium系列处理器低于120 MHz的时钟速度出现[4]。在受影响的型号上,英特尔处理器频率ID程序会检查是否存在此错误。
下面列出了10个受影响的处理器。这些处理器的39个S-spec并未列在英特尔处理器规格网页中。
Family | Model | Stepping | Core stepping | Clock rate | 前端总线速率 | S-spec |
---|---|---|---|---|---|---|
5 | 1 | 3 | B1 | 60 MHz | 60 MHz | Q0352, Q0412, SX753 |
5 | 1 | 3 | B1 | 66 MHz | 66 MHz | Q0353, Q0413, SX754 |
5 | 1 | 5 | C1 | 60 MHz | 60 MHz | Q0466, SX835, SZ949 |
5 | 1 | 5 | C1 | 66 MHz | 66 MHz | Q0467, SX837, SZ950 |
Family | Model | Stepping | Core stepping | Clock rate | 前端总线速率 | S-spec |
---|---|---|---|---|---|---|
5 | 2 | 1 | B1 | 75 MHz | 50 MHz | Q0601 |
5 | 2 | 1 | B1 | 90 MHz | 60 MHz | Q0542, Q0613, Q0543, SX879, SX885, SX909, SX874 |
5 | 2 | 1 | B1 | 100 MHz | 66 MHz | Q0563, Q0587, Q0614, SX886, SX910 |
5 | 2 | 2 | B3 | 75 MHz | 50 MHz | Q0606, SX951 |
5 | 2 | 2 | B3 | 90 MHz | 60 MHz | Q0628, Q0611, Q0612, SX923, SX922, SX921, SX942, SX943, SX944, SZ951 |
5 | 2 | 2 | B3 | 100 MHz | 66 MHz | Q0677, SX960 |
参考文献
- ^ 1994 - Annual Report. Intel. June 20, 2020 [June 20, 2020]. (原始内容存档于February 26, 2017).
- ^ Nicely, Thomas. Pentium FDIV flaw FAQ. trnicely.net. August 19, 2011 [June 18, 2019]. (原始内容存档于2019-06-18).
- ^ An error in a lookup table created the infamous bug in Intel's latest processor. [1995-03-01]. (原始内容存档于2006-12-19).
- ^ 4.0 4.1 FDIV Replacement Program: Frequently asked questions. Intel. 2009-03-20 [2009-11-10]. Solution ID CS-012748. (原始内容存档于2009-05-11).