GN⁺: 인텔의 4억 7,500만 달러 실수: 펜티엄 디비전 버그의 실리콘 문제
(righto.com)인텔의 펜티엄 FDIV 버그
-
배경: 1993년, 인텔은 고성능 펜티엄 프로세서를 출시하였음. 펜티엄은 이전의 인텔 486 프로세서보다 빠른 부동소수점 나눗셈 알고리듬을 포함하여 많은 개선점을 가졌음. 그러나 1년 후, 수학 교수인 Nicely가 쌍둥이 소수의 역수를 연구하던 중 펜티엄이 부동소수점 나눗셈을 수행할 때 잘못된 결과를 생성하는 문제를 발견하였음.
-
버그의 발견과 영향: 인텔은 이 문제를 "매우 사소한 기술적 문제"로 간주했으나, 이 버그는 큰 미디어 이슈가 되었음. 인텔은 결국 모든 결함이 있는 펜티엄 칩을 교체하기로 결정하였고, 이는 회사에 4억 7천 5백만 달러의 비용을 초래하였음.
-
버그의 원인: 펜티엄의 나눗셈 알고리듬은 조회 테이블을 사용함. 인텔은 1994년에 이 버그의 원인이 스크립트 오류로 인해 테이블에서 다섯 개의 항목이 누락되었다고 발표했으나, 실제로는 수학적 실수로 인해 16개의 항목이 누락되었음. 이 중 다섯 개의 누락된 항목이 FDIV 버그를 유발하였음.
-
부동소수점 숫자의 개요: 부동소수점 숫자는 매우 큰 숫자와 매우 작은 숫자를 표현할 수 있음. 인텔의 8087 부동소수점 보조 프로세서 칩은 IEEE 754 표준을 개발하는 데 기여하였고, 펜티엄을 포함한 대부분의 컴퓨터가 이 표준을 구현하였음.
-
SRT 나눗셈: 펜티엄은 SRT 알고리듬을 사용하여 나눗셈을 수행하며, 이는 표준 이진 나눗셈보다 두 배 빠름. SRT 알고리듬은 비정상적인 접근 방식을 사용하여 몫 자릿수를 선택하는 것을 용이하게 함.
-
조회 테이블의 구조: 펜티엄의 조회 테이블은 2048개의 항목을 포함하며, 다섯 개의 항목이 누락되어 FDIV 버그를 유발함. 이 테이블은 프로그래머블 로직 배열(PLA)로 구현되어 있음.
-
버그의 수학적 경계: 나눗셈 알고리듬의 핵심 단계는 부분 나머지를 제수로 나누어 몫 자릿수를 얻는 것임. 이 과정에서 잘못된 q 값이 선택되면 알고리듬이 복구할 수 없음.
-
캐리-세이브와 캐리-룩어헤드 덧셈기: 펜티엄의 나눗셈 회로는 캐리-세이브 덧셈기를 사용하여 덧셈과 뺄셈을 효율적으로 수행함. 이 덧셈기는 FDIV 버그를 유발하는 데 중요한 역할을 함.
-
버그 수정: 인텔은 테이블의 모든 사용되지 않는 항목을 2로 채워 버그를 수정하였음. 이는 잘못된 항목에 접근할 가능성을 제거하고, PLA 방정식을 단순화하여 PLA를 더 작게 만듦.
Hacker News 의견
-
작성자는 Pentium 버그에 대해 질문이 있으면 답변할 준비가 되어 있음
- Intel의 대응이 흥미로웠으며, 모든 사용자의 프로세서를 교체하지 않아 부정적인 언론이 많았음
- Amazon Colorsoft의 경우, 결함을 조용히 교체하여 문제를 해결한 사례를 언급함
- Apple AirPods Pro의 크랙 문제도 조용히 교체하여 해결한 사례를 언급함
-
Intel의 백서에서는 일반 사용자가 27,000년에 한 번 문제를 겪을 것이라고 주장했으나, IBM은 고객이 며칠마다 문제를 겪을 수 있다고 분석함
- Intel은 단일 사용자를 고려한 반면, IBM은 지원 요청을 고려한 것으로 보임
- 대량의 요청을 처리할 때, 작은 확률의 문제도 자주 발생할 수 있음
-
실제 사용 중 버그를 발견한 사람은 한 명뿐이었음
- 학생들에게 잘못된 계산기를 제공한 연구를 언급하며, 오류를 인식하는 것과 영향을 받는 것은 다르다고 설명함
- 대부분의 사람들은 컴퓨터의 출력이 정확한지 확인하지 않음
-
고객의 CPU를 제어할 수 없었기 때문에, 라이브러리에 특별한 코드를 추가하여 문제를 해결해야 했던 경험을 공유함
-
Intel의 테이블 생성 알고리즘 문제를 지적하며, PR에서 이를 사소한 문제로 설명했지만 실제로는 더 큰 문제였음을 강조함
-
Intel이 테이블의 미사용 항목을 모두 2로 채운 이유에 대해 궁금해함
- 더 안전한 방법은 5개의 항목만 수정하는 것이었을 것이라고 언급함
- 수정된 테이블이 더 간단한데, 처음부터 그렇게 하지 않은 이유를 궁금해함