From: 프로그래머가 몰랐던 멀티코어 CPU 이야기

부동소수점 처리는 대규모 과학 계산에 많이 쓰이기에 이 부분의 성능은 특히 중요하다. 그래서 많은 엔지니어가 여러 기법을 동원해서 성능 향상을 꾀해왔다. 그런데 이 과정에서 실수가 발생해 큰 사고가 난 적도 있다. 바로 유명한 펜티엄 프로세서의 FDIV(floating division) 버그다. 과거에는 RISC 형태의 컴퓨터가 부동소수점 계산을 더 빠르게 계산했다. 그래서 펜티엄 설계자들은 이전 세대 486DX에 쓰인 부동소수점 처리기보다 더 빠른 장치를 만들고자 새로운 알고리즘을 도입했다. 그들은 전통적인 방식 대신 SRT라는 알고리즘을 도입했다. 이 알고리즘은 테이블을 이용해 빠르게 계산하는 것이 특징이다. 이 테이블은 총 2,048 크기의 행렬로 표현되었는데 실제 값이 들어있는 경우는 1,066개였다. 그런데 인텔의 한 엔지니어가 이 테이블을 만들다가 실수로 5개의 항목을 빠뜨렸다. 이 부분이 테스트 과정에서 발견되지 못했고, 실제 칩으로 만들어져 그대로 팔리기 시작했다. 사실 이 버그를 일상 생활에서 만날 확률은 지극히 낮아 그렇게 치명적이지는 않았다. 그러나 엄밀한 계산이 필요한 분야에서 이런 버그는 결코 무시할 수 없었다. 이 FDIV 버그는 1994년 한 교수에 의해 최초로 발견 되었다. 이전 프로세스의 결과 값과 펜티엄 칩의 결과 값이 서로 다름을 확인한 것이다. 결국 인텔은 막대한 비용을 들여 펜티엄 칩을 회수해야만 했다. 1

From: 초난감 기업의 조건

문제는 펜티엄의 FPU(Floating-Point Unit, 부동소수점 처리 장치)에 있었다. FPU는 시간이 많이 드는 소수점 계산을 처리함으로써 소프트웨어 속력을 높여주는 장치이다. 인텔 사가 내놓았던 이전 마이크로프로세서와는 달리, 새 58…아니…펜티엄은 FPU를 칩 내로 통합했다. 그 전에는, 빠른 계산이 필요한 경우, 수치연산 보조 프로세서(math coprocessor)라는 칩을 별도로 구매해서 PC 내에 설치했다. 사실 대다수 사용자들은 FPU가 필요하지 않았다. FPU 수치 연산을 활용하는 소프트웨어 패키지 역시 소수에 불과했다. 하지만 수치 연산이 중요한 사람들은 FPU를 별도로 구매하거나 FPU 기능이 있는 칩을 구매했다. 수학하는 사람들 성향이 그렇듯이, 그들은 칩이 내놓는 답에도 아주 까다로웠다.

이렇게 까다로운 사람들 중 한 명이 버지니아 주 린치버그 대학의 수학과 교수 토마스 나이스리였다. 1994년 여름 자신의 펜티엄 PC로 대규모 소수 역수의 합을 계산하던 중, 나이스리 교수는 계산 결과가 예상한 정답과 크게 다르다는 사실을 발견했다. 486을 탑재한 예전 PC에서 계산한 결과, 오류가 생기는 원인은 펜티엄으로 좁혀졌다. 486이 내놓은 답은 정확했다.

펜티엄이 문제라는 확실한 증거를 수집한 나이스리 교수는 즉시 인텔에게 찾아낸 결과에 대해 오류를 문의했다. 하지만 토끼 인간들2을 먹이고 보살피느라 정신이 팔려있던 인텔은 그의 요청을 묵살했다. 이에 나이스리 교수는 인터넷에 다른 사람들도 같은 오류를 경험했는지 물어보는 글을 올렸다. 나이스리 교수가 조용히 물러나지 않으리라는 사실을 깨달은 인텔은 교수를 '컨설턴트'로 고용 하겠다고 제안했고, 나이스리 교수는 더 이상 이 문제를 거론하지 않겠다는 비밀 유지 계약서에 서명했다. 하지만 나이스리 교수와 인텔 사로서는 놀랄 노릇이지만 비밀은 다 새나가고 말았다. 실제 펜티엄이 일으키는 오류는 (까다로운 수학자들을 제외하고는) 아주 눈치채기 어려웠다. 팬티엄에는 수치 계산 속력을 높이려고 숫자를 저장해 둔 검색 테이블이 있었는데, 누군가 이 표를 만들면서 한자리에 0을 넣어 버렸다. 즉,

\[123456789\]

이어야 할 행이

\[123456089\]

이 되어버렸다.

이처럼 0을 잘못 넣은 탓에, 계산이 소수점 네 자리 이상인 경우 펜티엄은 틀린 답을 내놓았다. 예를 들어, 다음 계산은

\(5505001 / 294911 = 18.666651973\) (FPU가 있는 486)

다음과 같은 결과를 내놓았다.

\(5505001 / 294911 = 18.666600093\) (펜티엄) 3

인텔의 손해

제인과 존은 약속을 지켰고, 인텔을 상대로 집단 소송 여러 건이 걸렸다. 이 즈음에 회사는 드디어 홍보 마케팅 시스템에서 IPU(Idiot Processing Unit, 바보 처리 장치)를 빼내고 백기를 들었다. 요청하는 고객에게는 무조건 펜티엄 칩을 교환해 주겠다고 약속했고, 문제가 있는 칩은 모두 페기처분 하겠다고 공표했다. 이 모든 난리법석이 진정되기까지 인텔이 입은 손해는 대략 50억 불에 달했다. 4

참고문헌

  • 프로그래머가 몰랐던 멀티코어 CPU 이야기 / 김민장 저 / 한빛미디어 / 초판 2쇄 2010년 09월 27일
  • 초난감 기업의 조건 / 박재호 역 / 에이콘출판사 / 2007년 11월 20일

주석

  1. 프로그래머가 몰랐던 멀티코어 CPU 이야기. Story 03. 48쪽. 

  2. 토끼 인간은 인텔의 펜티엄 광고에 나온 반도체 작업복을 입고 춤추는 사람들을 말한다. 춤을 엄청 잘 췄다. Pentium II MMX 광고 영상 

  3. 초난감 기업의 조건. 8장. 260쪽. 

  4. 초난감 기업의 조건. 8장. 269쪽.