Intel: взгляд изнутри (Джексон) - страница 269

"Когда проект близился к завершению и каждая из команд заверяла меня, что ошибок нет, я предлагал немедленно выплатить 100 дол. любому, кто обнаружит ошибку", — вспоминает он. К удивлению Дхама, некоторые откликнулись на его предложение, и ему пришлось выплатить несколько сотен долларов. Но выявление ошибки было прекрасной новостью.

"Это обходится гораздо дешевле, чем обнаружить ошибку позже или позволить покупателю найти ее вместо нас, — объяснял он слушателям бизнес-школы во время изучения этого случая вскоре после выпуска чипа, — В процессорах Pentium к потребителям не попало никаких ошибок".

К сожалению, Дхам ошибался. В мае 1994 года, по прошествии целого года после того, как первые образцы Pentium завершили двенадцатинедельное путешествие по цехам Intel, тесты на надежность, продолжавшиеся и после запуска нового чипа в производство, выявили проблему: Pentium давал неверные результаты при длинном делении. Из-за необходимости проверить три миллиона кремниевых транзисторов для обнаружения источника проблемы выяснение причины заняло еще несколько недель, т. е. Дхам смог доложить руководству Intel о результатах поисков ошибки только в конце июня или в начале июля. Его доклад стал печальным свидетельством того, что новый подход, состоявший в создании "команды интерфейсов", не оправдал возлагаемых на него надежд.

Метод, используемый в чипе Pentium для длинного деления, был описан двадцать пять лет назад в академическом журнале по вычислительной технике, издаваемом Институтом инженеров по электротехнике и радиоэлектронике. Чтобы получить результат деления числа х на число у, нужно взять первые четыре двоичные цифры числа у и первые семь двоичных цифр числа x и сделать предположение путем поиска приблизительного ответа в таблице умножения. Затем предполагаемое число умножить на у и посмотреть, насколько вы близки к точному ответу. Если разность равна нулю, это означает, что предположение оказалось точным; если нет, нужно разделить y для получения разности, сделав еще одно предположение по числам в таблице. Шаг за шагом, предположение будет все точнее, а разность — все меньше, пока, наконец, вы не получите ответ с точностью до пятнадцати знаков после запятой.

Для ускорения процесса деления справочная таблица была в кремнии заложена в сам чип. К сожалению, пять из 2048 чисел в таблице оказались неправильными. Ошибка была не слишком заметна, поскольку сам метод выполнения длинного деления подразумевал автоматическое исправление ошибки. Но очень малое число комбинаций двоичных чисел все же приводило к неправильному конечному результату.