Специалист по истории электроники и обратной разработке Кен Ширрифф (Ken Shirriff) рассказал, что ему удалось обнаружить транзисторы в процессорах Intel Pentium первого поколения, которые вызвали «ошибку FDIV», обошедшуюся производителю в $475 млн в 1994 году.
Источник изображения: oldbytes.space/@kenshirriff
Ошибка FDIV (Floating Point Division) заключалась в том, что процессоры некорректно выполняли операцию деления чисел с плавающей запятой. Эксперт вооружился микроскопом и изучил ответственную за эту ошибку программируемую логическую матрицу (PLA). Процессор Intel Pentium на архитектуре P5 изготавливался по техпроцессу 800 нм — кристалл содержит 3,1 млн транзисторов, причём их расположение действительно можно изучить под микроскопом и идентифицировать блоки операций на кристалле. С современными процессорами, у которых десятки миллиардов транзисторов, это невозможно.
Блок операций с плавающей запятой на процессорах Pentium работал быстрее, чем на чипах тех времён, благодаря алгоритму деления SRT, который позволял производить деление со скоростью два бита на такт. Чтобы он функционировал корректно, на кристалле разместили таблицу из 2048 ячеек со значениями «-2», «-1», «0», «1» и «2» в 112 строках. Значения выражались наличием или отсутствием транзисторов в ячейках. Но в пяти записях таблицы отсутствовали важные транзисторы, в результате чего значения по умолчанию оказывались «0» вместо правильных «2». Из-за этого вычисления с плавающей точкой давали неверный результат.
Ошибку FDIV обнаружил профессор математики Линчбургского колледжа Томас Найсли (Thomas R. Nicely), но в Intel поначалу назвали её несущественной и заявили, что она может проявляться лишь раз в 27 тыс. лет. В IBM, однако, установили, что она может происходить каждые 24 дня и прекратили продажи процессоров Pentium. В итоге Intel отозвала все процессоры и понесла убыток в $475 млн. Примечательно, что в результате исследования Ширрифф выявил отсутствие не 5 точек данных, как предполагалось ранее, а 16, и 11 не обнаруженных ранее не вызывали ошибок «по чистому везению», отметил инженер. Intel же в итоге быстро исправила ошибку, заполнив все неиспользуемые записи на платах значениями «2», и это сработало.
Источник: 3DNews