Pentium FDIV bag

Pentium -{FDIV}- баг је компјутерски баг у јединици за рачунање са покретним зарезом (енг. -{floating point unit}-, -{FPU}-). Баг узрокује погрешнан резултат при дељењу реалних вредности. Открио га је 1994-е године професор Томас Р. Најсли са Линчберг колеџа.[1] Интел је приписао грешку недостајећим вредностима у лукап табели која је коришћена при дељењу.[2]
Озбиљност -{FDIV}- бага је упитна. Иако су се обични корисници ретко сусретали са овом грешком (Часопис Бајт процењује да се 1 у 9 милијарди дељења са случајним параметрима изврши нетачно),[3] и пропуст и Интелова иницијална реакција на ситуацију су оштро критиковани од стране заједнице.
У децембру 1994. године, Интел је повукао дефектне процесоре. У јануару 1995. године, Интел је најавио "накнаду од 475 милиона долара од зараде (пре пореза), што је наводно укупан износ трошкова у вези са заменом процесора са грешком."[1]
Опис
На погођеним чиповима се користио Свинијев, Робертсонов и Тошеров (СРТ) алгоритам за дељење. Он се реализује као програмибилно логичко поље са 2048 ћелија, од којих је 1066 требало да буде испуњено једном од пет вредности: Шаблон:Nowrap. На чиповима са грешком, пет елемената који је требало да садрже вредност +2 су недостајали, и уместо тога је повратна вредност била 0.[3]
Хронологија
Томас Најсли, професор математике на Линчберг колеџу, је написао код за тражење простих бројева, близанаца простих бројева, тројки простих бројева, и четворки простих бројева. Најсли је приметио неке недоследности у израчунавањима 13. јуна 1994. године, непосредно након што је убацио Пентиум систем у његову групу рачунара, али није могао да елиминише друге факторе (као што су грешке у програму, матична плоча, чипсет и сл) до 19. октобра 1994. године. 24. октобра 1994. године је пријавио проблем Интелу. Према Најслију, његов контакт у Интелу је касније признао да је Интел био свестан проблема од маја 1994. године, када је Том Краљевиц, студент Пурдју Универзитета који је радио за Интел у Хилсбору, Орегону, открио пропуст током тестирања FPU јединице за ново Р6 језгро које је први пут употребљено у Пентиум про архитектури.
30. октоба 1994-е, Најсли је послао имејл описом грешке које открио у Пентиумовој јединици за рад са покретним зарезом његовим разним контактима, тражећи додатна тестирања грешке на 486-DX4s, Пентиуму и Пентиумовим клоновима.[1]
Недостатак у Пентиумовом FPU-у је брзо верификован од стране других људи широм интернета и постао познат, као и Пентиум -{FDIV}- буг (FDIV је инструкција за дељење у покретном зарезу у x86 асемблеру). Пронађен је пример када је резултат дељења био погрешан за око 61 делова на милион.[1]
Прича се први пут појавила у штампи 7. новембра 1994. године у чланку објављеном у -{Electronic Engineering Times}-, "Интел исправља Пентиум FPU квар" (енг. -{"Intel fixes a Pentium FPU glitch"}-) Александра Вулфа.[4]
Причу је касније преузео ЦНН у сегменту емитованом 21. новембра 1994.[1] То је ову грешку довело међу ширу јавност.
Јавно, Интел је признао ману у њиховим јединицама за рад са бројевима у покретном зарезу, али је тврдио да није озбиљна и неће утицати на већину корисника. Интел је нудио да замени процесоре корисника који су могли да докажу да грешка постоји у њиховом процесору. Међутим, иако је већина независних процена тврдило да је грешка малог значаја и да ће имати занемарљив утицај на већину корисника, она је изазвала велико негодовање јавности. Компаније као што су ИБМ (чији се ИБМ 5x86C микропроцесор у то време такмичио са Интел Пентиум линијом) су се придружили осудама.
Дана 20. децембра 1994. године, Интел је понудио да замени све Пентиум процесоре с грешком свима који то затраже, као одговор на растући притисак јавности.[5] Иако се испоставило да је само мали део власника Пентиум процесора вратио своје чипове, финансијски утицај на компанију је био значајан. 17. јануара 1995. године, Интел је најавио "накнаду у износу од $475 милиона долара од зараде (пре пореза), што је наводно укупан износ трошкова у вези са заменом процесора са грешком"[1] Неки неисправни чипови су касније претворени у Интелове привеске за кључеве.[6]
Чланак из 1995. године у Сајенсу описује значај проблема из области теорије бројева у откривању грешака и даје математичко образложење и историју Бранове константе, проблема на коме је Најсли радило када је открио грешку.[7]
Погођени модели
Овај проблем се јавља само на неким моделима оригиналног Пентиум процесора.[8] Грешка је постојала само у неким процесорима Пентиум породице са фреквенцијом часовника мањом од 120 MHz.[8] На погођеним моделима, алат Processor Frequency ID Utility може да провери постојање овог бага.
Десет погођених процесора су наведени у наставку.
| Породица | Модел | Ревизија | Ревизија језгра | Фреквенција часовника | FSB брзина | S-spec |
|---|---|---|---|---|---|---|
| 5 | 1 | 3 | Б1 | 60 МHz | 60 MHz | Q0352, Q0412, SX753 |
| 5 | 1 | 3 | Б1 | 66 MHz | 66 MHz | Q0353, Q0413, SX754 |
| 5 | 1 | 5 | С1 | 60 MHz | 60 MHz | Q0466, SX835, SZ949 |
| 5 | 1 | 5 | С1 | 66 MHz | 66 MHz | Q0467, SX837, SZ950 |
| Породица | Модел | Ревизија | Ревизија језгра | Фреквенција часовника | FSB брзина | S-spec |
|---|---|---|---|---|---|---|
| 5 | 2 | 1 | Б1 | 75 MHz | 50 MHz | Q0601 |
| 5 | 2 | 1 | Б1 | 90 MHz | 60 MHz | Q0542, Q0613, Q0543, SX879, SX885, SX909, SX874 |
| 5 | 2 | 1 | Б1 | 100 MHz | 66 MHz | Q0563, Q0587, Q0614, SX886, SX910 |
| 5 | 2 | 2 | Б3 | 75 MHz | 50 MHz | Q0606, SX951 |
| 5 | 2 | 2 | Б3 | 90 MHz | 60 MHz | Q0628, Q0611, Q0612, SX923, SX922, SX921, SX942, SX943, SX944, SZ951 |
| 5 | 2 | 2 | Б3 | 100 MHz | 66 MHz | Q0677, SX960 |
Неки Интел 80486 OverDrive и Пентиум OverDrive процесори су такође подложни -{FDIV}- грешци, као и F00F грешци.
Методе детекције
Универзални
Присутност грешке се може проверити ручно, извршавањем следећег израчунавања у било којој апликацији која користи процесорску репрезентацију бројева са покретним зарезом, као што су калкулатор за Windows или Мајкрософт Ексел у Windows-у 95/98.
Тачна вредност је:
Када се претвара у хексадекадну вредност коју користи процесор, 4195835 = 0x4005FB и 3145727 = 0x2FFFFF. '5' у запису 0x4005 изазива грешку у логичком колу. Као резултат тога, вредност коју враћа Пентиум процесор у одређеним ситуацијама је погрешна на четири или више цифара:[9][10]