This is a good article. Click here for more information.

펜티엄 FDIV 버그

Pentium FDIV bug
66MHz Intel Pentium(sSpec=SX837) FDV 버그 포함

펜티엄 FDIV 버그초기 인텔 펜티엄 프로세서의 플로팅 포인트 유닛(FPU)에 영향을 미치는 하드웨어 버그다.버그 때문에 프로세서는 고정밀 숫자의 특정 쌍을 나눌 때 잘못된 이진 부동소수 결과를 반환할 것이다.그 벌레는 토마스 R에 의해 1994년에 발견되었다.좋아, 린치버그 대학의 수학 교수야.[1]FPU의 부동 소수점 분할 알고리즘이 사용하는 조회 테이블에서 값이 누락되어 작은 오류를 획득하는 계산이 이루어졌다.이러한 오류는 대부분의 사용 사례에서 드물게 발생하며 정확한 출력 값에서 작은 편차를 초래하지만, 특정 상황에서는 오류가 자주 발생하고 더 유의한 편차를 초래할 수 있다.[2]

FDIV 버그의 심각성은 논의되고 있다.대부분의 사용자가 거의 마주치지 않지만(Byte 매거진에서는 무작위 파라미터로 90억분의 1의 부동소수 분할이 부정확한 결과를 만들어낼 것으로 추산했다)[3] 결함과 인텔의 초기 처리 모두 기술계로부터 심한 비난을 받았다.

1994년 12월, 인텔은 컴퓨터 칩의 첫 번째 완전한 리콜에서 결함이 있는 프로세서를 회수했다.[4]1995년 1월 인텔은 "외견상 결함이 있는 프로세서의 교체와 관련된 총 비용인 4억7500만 달러의 세전부담금"[5]을 발표했다.

설명

FDIV 버그의 한 징후를 보여주는 그래프.각 데이터 포인트는 y축의 경우 왼쪽의 이전 값보다 최대 3.1789 x−8 10이 높아야 하지만, 지역 4195834.4 < x 4195835.9는 예상 값에서 최대 8.14 x 10이−5 차이가 난다.

인텔은 486DX에 대한 펜티엄 칩의 부동 소수점 분할 계산 속도를 개선하기 위해 스위니, 로버슨, 토처(SRT) 알고리즘으로 시프트 앤드 추월 분할 알고리즘을 대체하기로 했다.SRT 알고리즘은 클럭 사이클당 2비트의 분할 결과를 생성할 수 있는 반면 486의 알고리즘은 1비트만 생성할 수 있다.2,048개의 셀을 가진 프로그램 가능한 논리 배열을 사용하여 구현되며, 이 중 1,066개의 셀은 -2, -1, 0, +1, +2의 5개 값 중 하나로 채워졌어야 한다.펜티엄의 원래 배열을 컴파일할 때, 배열을 칩에 식각하는 장비에 5개의 값이 올바르게 다운로드되지 않았다. 따라서 배열 셀 중 5개는 +2를 포함해야 할 때 0을 포함했다.[6]

결과적으로, 이 다섯 개의 셀에 의존하는 계산은 오류를 얻는다; 이 오류들은 SRT 알고리즘의 재귀적 특성 때문에 반복적으로 누적될 수 있다.병리학적 경우에는 드물지만 오차가 결과의 네 번째 유의 자릿수에 이를 수 있다.오차는 보통 9번째 또는 10번째 유의 자릿수로 제한된다.[3]

분자와 분모의 특정 조합만이 버그를 트리거한다.일반적으로 보고되는 한 예는 4,195,835를 3,145,727로 나누는 것이다.Windows Calculator와 같이 부동 소수점 코프로세서를 사용하는 소프트웨어에서 이 계산을 수행하면 사용자는 자신의 펜티엄 칩이 영향을 받았는지 여부를 발견할 수 있을 것이다.[7]

계산의 올바른 값은 다음과 같다.

프로세서에서 사용하는 16진수 값으로 변환할 때 4,195,835 = 0x4005FB 및 3,145,727 = 0x2FFFF.0x4005FB의 '5'는 '빈' 배열 셀에 대한 액세스를 트리거한다.결과적으로 결함이 있는 펜티엄 프로세서에 의해 반환되는 값은 다음 4자리 이상에서 부정확하다.[8]

검색 및 응답

린치버그 대학의 수학 교수인 토마스 그레이는 프리임, 트윈 프리임, 프라임 트리플, 프라임 쿼드러플을 열거하는 코드를 작성했다.Cell은 자신의 컴퓨터 그룹에 펜티엄 시스템을 추가한 직후인 1994년 6월 13일 계산에서 일부 불일치를 잘 알아챘지만, 1994년 10월 19일까지 다른 요소(프로그래밍 오류, 마더보드 칩셋 등)를 제거할 수 없었다.[1]1994년 10월 24일, 그는 이 문제를 인텔에 보고했다.[9]보도에 따르면 인텔은 1994년 6월까지 독자적으로 이 문제를 인식하게 되었고, 현 시점에서 이 문제를 해결하기 시작했으나, 어떠한 세부 사항도 공개하거나 해당 CPU를 회수하지 않기로 선택했다고 한다.[10]

1994년 10월 30일, 그레이는 486-DX4s, Pentiums, Pentium clones에 대한 결함에 대한 테스트 보고서를 요청하면서 다양한 학술 연락처에 버그를 설명하는 이메일을 보냈다.[9]이 버그는 다른 사람들에 의해 빠르게 확인되었고, 그 소식은 인터넷에 빠르게 퍼졌다.이 버그는 가장 자주 사용되는 명령인 부동 소수점 분할용 x86 어셈블리 언어 니모닉에서 "펜티엄 FDIV 버그"라는 이름을 얻었다.[9]

이 이야기는 1994년 11월 7일 알렉산더 울프의 '인텔이 펜티엄 FPU 결함을 고친다'는 전자공학타임스의 기사에서 처음 언론에 등장했고,[11] 이후 11월 22일 방송된 코너에서 CNN에 의해 픽업되었다.그것은 또한 뉴욕 타임즈와 보스턴 글로브에 의해 보도되어 후자의 1면을 장식했다.[10][12]

이때 인텔은 부동소수점 결함을 인정하면서도 심각하지 않고 대부분의 사용자에게 영향을 미치지 않을 것이라고 주장했다.인텔은 영향을 받았다는 것을 증명할 수 있는 사용자들에게 프로세서를 교체하겠다고 제안했다.그러나 대부분의 독립적인 추정이 이 버그가 대부분의 사용자에게 매우 제한적인 영향을 미칠 것이라는 것을 발견했음에도 불구하고, 그것은 회사에 상당한 부정적인 언론을 야기시켰다.IBM은 인텔 CPU가 포함된 PC 판매를 중단했고, 인텔의 주가는 크게 하락했다.[13]IBM의 결정에 대한 동기는 업계 일각에서 의문을 제기했다. IBM은 그 당시 PowerPC CPU를 생산했고, 잠재적으로 회사로서 펜티엄이나 인텔에 대한 평판 훼손으로부터 이익을 얻을 수 있었다.그러나 이번 결정으로 PC 장비의 기업 구매자들은 기존 펜티엄 CPU의 교체를 요구하게 되었고, 곧이어 다른 PC 제조업체들은 결함이 있는 펜티엄 칩의 교체를 "묻지마"하기 시작했다.[4]

인텔의 대응에 대한 불만이 커지자, 회사는 12월 20일 요청 시 결함이 있는 펜티엄 프로세서를 모두 교체할 것을 제안했다.[14]1995년 1월 17일 인텔은 "외견상 결함이 있는 프로세서의 교체와 관련된 총 비용인 4억 7천 5백만 달러의 세전 부담금"[9]을 발표했다.이는 2020년 7억5200만달러에 해당한다.[15]인텔은 리셀러와 OEM이 리콜 프로그램에 참여하지 못하도록 해 최종 사용자가 칩을 직접 교체해야 한다는 비판을 받았다.지원 웹 페이지에 게시된 인텔의 명분은 "결함이 자신의 애플리케이션 정확도에 영향을 미치는지 여부를 판단하는 것은 최종 사용자의 개별적인 결정"이었다.[13]

1995년 사이언스지에 실린 기사는 컴퓨터 버그를 발견하는 데 있어서 숫자 이론 문제의 가치를 설명하고 브런이 그 버그를 발견했을 때 브런이 연구했던 수학적인 배경과 역사를 알려주고 있다.[16]

FDIV 버그에 대한 인텔의 대응은 문제가 고객에게 미치는 실제적인 영향을 간과한 홍보 효과의 사례로 언급되어 왔다.[17]대부분의 사용자들이 일상적인 컴퓨터 작업에서 이 결함을 경험할 것 같지는 않았지만, 고객이 칩이 영향을 받는다고 보장할 수 없다면 교체하지 않겠다는 회사의 초기 반응은 소수의 업계 전문가들로부터 밀어내기(pushback)를 야기했다.그 후의 홍보는 CPU에 대한 소비자 신뢰를 뒤흔들었고, 이 문제에 영향을 받지 않을 것 같은 사람들로부터도 행동에 대한 요구를 이끌어냈다.앤드류 그로브 당시 인텔 최고경영자(CEO)는 월스트리트저널(WSJ)에 "우리가 놓친 문제의 핵심은 누군가에게 걱정해야 할 것, 걱정해서는 안 될 것, 해야 할 것, 해야 할 것 또는 해서는 안 될 것을 말하는 것으로 추정했다"고 말했다고 전했다.[4]

버그와 그에 따른 리콜 여파로 반도체 업계 전반에서 하드웨어 부동소 운영에 대한 정식 검증 활용이 눈에 띄게 증가했다.버그의 발견에 자극받아 1996년 SRT 알고리즘에 적용 가능한 "워드 레벨 모델 검사"라는 기술이 개발되었다.[18]인텔은 이후 CPU 아키텍처의 개발에서 형식적인 검증을 광범위하게 사용했다.펜티엄 4호 개발에서는 상징적인 궤적 평가와 정리 증명이 이용되어 만약 감지되지 않았다면 유사한 리콜 사건으로 이어질 수 있었던 많은 버그를 찾아냈다.[19]공식 검증을 1차 유효성 검사 방법으로 사용한 첫 인텔 마이크로아키텍처(MicroArchitecture)는 2008년 개발된 네할렘이다.Halem)[20]이다.

영향을 받는 모델

FDV 버그는 D1 이전의 스텝 레벨에서 60, 66 MHz P5 800, 그리고 75, 90, 100 MHz P54C 600에 영향을 미친다.120 MHz P54C와 P54CQS CPU는 영향을 받지 않는다.[21][22]

소프트웨어 패치

버그를 해결하기 위해 제조사들이 다양한 소프트웨어 패치를 생산했다.IEEE 계산 과학 & 엔지니어링의 논문에 요약된 한 가지 특정 알고리즘은 0을 잘못 포함하는 프로그래밍 가능한 논리 배열 셀에 대한 접근을 촉발하는 분자와 분모를 확인하고, 발견될 경우 두 숫자를 15/16으로 곱하는 것이다.이것은 그들을 '버기' 범위 밖으로 끌어낸다.그러나 이 작업을 수행하면 상당한 속도 저하가 발생하며, 경우에 따라 계산을 수행하는 데 걸리는 시간이 두 배가 된다.[8]

소프트웨어 회사들이 직면한 주요 과제는 기존 소프트웨어에 대한 수정사항을 이행하는 것인데, 이 수정사항의 대부분은 자신의 통제 밖에 있는 도서관에 의존하고 있었다.울프램 리서치 등 일부 기업은 FDV opcode를 불법 지시로 대체하기 위해 기존 실행 파일의 기계코드를 직접 패치하는 방식을 택했다.이렇게 하면 예외 핸들러(패치가 적용된)가 잡을 수 있는 예외를 트리거할 수 있다.여기서부터 임의 코드가 실행되어 버그를 처리할 수 있다.[2]

Microsoft는 Windows 버전에서 Windows XP까지의 운영 체제 수준 해결 방법을 제공했다.유틸리티가 운영 체제에 포함되어 버그가 있는지 확인하고, 발견된 경우 FPU를 비활성화했다.[23][24]

참고 항목

참조

  1. ^ a b Edelman, Alan (January 1, 1997). "The Mathematics of the Pentium Division Bug" (PDF). SIAM Review. 39 (1): 54–67. Bibcode:1997SIAMR..39...54E. doi:10.1137/S0036144595293959. Retrieved April 11, 2021.
  2. ^ a b "'A Discussion of and Fix for the Pentium FDIV Bug' from the Notebook Archive (2002)". notebookarchive.org. Wolfram Research, Inc. Retrieved April 11, 2021.
  3. ^ a b Tom R. Halfhill (March 1995). "An error in a lookup table created the infamous bug in Intel's latest processor". BYTE. No. March 1995. Archived from the original on February 9, 2006. Retrieved December 19, 2006.
  4. ^ a b c Carlton, Jim; Yoder, Stephen K. (December 21, 1994). "Computers: Humble Pie: Intel to Replace its Pentium Chips". The Wall Street Journal (Eastern ed.). p. B1.
  5. ^ "1994 - Annual Report". Intel. June 20, 2020. Archived from the original on February 26, 2017. Retrieved June 20, 2020.
  6. ^ Sharangpani, H. P.; Barton, M. L. (November 30, 1994). Statistical Analysis of Floating Point Flaw in the Pentium Processor (1994) (PDF) (Report). Intel Corporation. Retrieved April 11, 2021.
  7. ^ "Pentium FDIV bug – a Picture". Kansas University Institute for Policy and Social Research. November 30, 1994. Retrieved November 3, 2010.
  8. ^ a b Coe, T.; Mathisen, T.; Moler, C.; Pratt, V. (1995). "Computational aspects of the Pentium affair" (PDF). IEEE Computational Science and Engineering. 2 (1): 18–30. doi:10.1109/99.372929. Retrieved April 13, 2021.
  9. ^ a b c d Nicely, Thomas (August 19, 2011). "Pentium FDIV flaw FAQ". trnicely.net. Archived from the original on June 18, 2019. Retrieved June 18, 2019.
  10. ^ a b Markoff, John (November 24, 1994). "COMPANY NEWS; Flaw Undermines Accuracy of Pentium Chips". The New York Times. Retrieved April 11, 2021.
  11. ^ Alexander Wolfe (November 9, 1994). "Intel fixes a Pentium FPU glitch". Electronic Engineering Times.
  12. ^ Moler, Cleve (Winter 1995). "A Tale of Two Numbers" (PDF). MATLAB News and Notes. MathWorks. Retrieved April 21, 2021.
  13. ^ a b Yeraswork, Zewde (March 30, 2011). "Lessons Learned: Pentium Flaws Aid Intel In Sandy Bridge Chipset Recall". CRN. Retrieved April 11, 2021.
  14. ^ "Intel adopts upon-request replacement policy on Pentium processors with floating point flaw; Will take Q4 charge against earnings". Business Wire. December 20, 1994. Archived from the original on July 10, 2012. Retrieved December 24, 2006.
  15. ^ Johnston, Louis; Williamson, Samuel H. (2022). "What Was the U.S. GDP Then?". MeasuringWorth. Retrieved February 12, 2022. 미국 국내총생산 디플레이터 수치는 Measurement Worth 시리즈를 따른다.
  16. ^ Cipra, Barry Arthur (January 13, 1995). "How number theory got the best of the Pentium chip". Science. 267 (5195): 175. Bibcode:1995Sci...267..175C. doi:10.1126/science.267.5195.175. PMID 17791336. S2CID 19898103.
  17. ^ Price, D. (April 1995). "Pentium FDIV flaw-lessons learned". IEEE Micro. 15 (2): 86–88. doi:10.1109/40.372360.
  18. ^ Clarke, E. M.; Khaira, M.; Zhao, X. (1996). "Word level model checking—avoiding the Pentium FDIV error". Proceedings of the 33rd Annual Conference on Design Automation Conference – DAC '96. Dac '96: 645–648. doi:10.1145/240518.240640. ISBN 0897917790. S2CID 2500033. Retrieved April 29, 2021.
  19. ^ O'Leary, J. (2004). "Formal verification in intel cpu design". Proceedings. Second ACM and IEEE International Conference on Formal Methods and Models for Co-Design, 2004. MEMOCODE '04.: 152. doi:10.1109/MEMCOD.2004.1459841. ISBN 0-7803-8509-8. Retrieved April 29, 2021.
  20. ^ Kaivola, Roope; Ghughal, Rajnish; Narasimhan, Naren; Telfer, Amber; Whittemore, Jesse; Pandav, Sudhindra; Slobodová, Anna; Taylor, Christopher; Frolov, Vladimir; Reeber, Erik; Naik, Armaghan (2009). "Replacing Testing with Formal Verification in Intel $^{\scriptsize\circledR}$ CoreTM i7 Processor Execution Engine Validation". Computer Aided Verification. 5643: 414–429. doi:10.1007/978-3-642-02658-4_32.
  21. ^ "P5 (586) Fifth-Generation Processors Microprocessor Types and Specifications InformIT". www.informit.com. June 8, 2001. Retrieved April 13, 2021.
  22. ^ "FDIV Replacement Program: Frequently asked questions". Intel. March 20, 2009. Solution ID CS-012748. Archived from the original on May 11, 2009. Retrieved November 10, 2009.
  23. ^ Slob, Arie. "Windows 95 Troubleshooting: How to Check for a Faulty Math Coprocessor". www.helpwithwindows.com. Retrieved April 23, 2019.
  24. ^ "Pentnt". Microsoft TechNet. Microsoft. September 11, 2009. Retrieved April 23, 2019.

외부 링크