펜티엄에는 3을 곱하는 복잡한 회로가 포함되어 있음
(righto.com)- 1993년 Intel은 고성능 Pentium 프로세서를 출시했음
- Pentium의 회로를 분석하던 중, 3으로 곱하는 복잡한 회로를 발견
- 이 회로는 Pentium의 부동소수점 곱셈기 회로의 일부로, 64비트 숫자를 8진수 기반으로 곱셈함
-
8진수 기반 곱셈의 필요성
- 이진수 곱셈은 개념적으로 간단하지만 느림
- Pentium은 8진수 기반으로 곱셈하여 회로를 줄이고 속도를 높임
- 8진수 곱셈은 0에서 7까지의 숫자로 곱해야 하므로 복잡함
-
Booth 알고리듬과 ×3 회로
- Booth 알고리듬을 사용하여 곱셈을 최적화함
- ×3 회로는 부동소수점 곱셈에서 특별한 경우로 처리되어야 함
- 이 회로는 빠르게 작동해야 하며, 캐리 룩어헤드와 같은 기술을 사용하여 성능을 극대화함
-
캐리 룩어헤드와 병렬 프리픽스 덧셈기
- 캐리 룩어헤드 덧셈기는 모든 캐리 비트를 병렬로 계산하여 덧셈을 빠르게 수행
- 병렬 프리픽스 덧셈기를 사용하여 8비트 청크로 캐리 룩어헤드를 구현
- Kogge-Stone 알고리듬을 사용하여 지연을 최소화하고 회로를 효율적으로 구성
-
캐리 셀렉트 덧셈기
- 캐리 셀렉트 덧셈기는 두 개의 덧셈을 동시에 수행하여 캐리가 결정되면 즉시 결과를 제공
- Pentium은 ×3 회로에서 각 8비트 청크에 대해 캐리 셀렉트 덧셈기를 사용
-
BiCMOS 출력 드라이버
- ×3 회로의 출력은 높은 전류가 필요하며, BiCMOS 공정을 사용하여 신호 지연을 줄임
- BiCMOS는 CMOS와 바이폴라 트랜지스터를 결합하여 높은 성능을 제공
-
결론
- Pentium의 ×3 회로는 복잡한 설계로, 과거의 마이크로프로세서보다 더 많은 트랜지스터를 사용함
- 이는 프로세서의 복잡성이 얼마나 증가했는지를 보여주는 예시
Hacker News 의견
-
Trinary 컴퓨터 에뮬레이션에서 3의 거듭제곱으로 나누는 것을 비트 시프트와 덧셈으로 변환하는 방법이 있음
- 1/3을 1/2 - 1/2(1/3)으로 표현할 수 있음
- 이를 무한히 반복하여 1/3 = -(-1/2)^N으로 표현 가능함
- 2와 3의 임의의 거듭제곱 쌍으로도 가능함
- 이를 통해 고정된 시간 내에 상수로 나누는 회로를 덧셈기와 뺄셈기로만 구성할 수 있음
-
Cinematronics 아케이드 게임 프로세서는 두 개의 12비트 누산기를 가짐
- 곱셈 명령은 24비트 값으로 시프트하고 메모리 내용을 더함
- 8개의 곱셈을 연속으로 실행하여 24비트 결과를 얻음
- 주로 게임 객체의 좌표 회전을 위한 2x2 행렬 곱셈에 사용됨
- 1970년대 중반에 7400 시리즈 부품을 사용하여 5MIPS의 최고 처리량을 가짐
-
Peter Kogge는 Stanford에서 박사 학위를 받았고, IBM 펠로우로서 다중 코어 CPU를 발명한 인물임
-
주소 계산에서 3으로 곱하는 것은 흔한 작업임
- LEA 명령어를 사용하여 단일 사이클 내에 수행할 수 있음
- 트랜지스터 예산을 사용하는 것이 좋은 선택이었음
-
곱셈기에서 7로 곱하는 대신 8을 곱하고 1을 빼는 방법이 있음
- 이는 캐리 룩어헤드 회로와 유사함
- 7 = 8-1, 6 = 8-2, 5 = 8-3, 4 = 8-4로 표현 가능함
-
×3 곱셈기는 약 9000개의 트랜지스터를 포함하며, 이는 1976년의 Z80 마이크로프로세서보다 많음
- 이는 프로세서 복잡성의 엄청난 성장을 보여줌
- 오늘날 실리콘 반도체 기술의 한계에 도달했으며, 더 스마트하게 작동해야 할 때임
-
radix-8 부스 곱셈기는 x3 회로가 필요함
- 이는 fmax를 밀어내기 위한 영역/성능 트레이드오프임
-
8086: 29,000
- 386: 275,000
- 486: 1.2 million
- Pentium: 3.1 million
- NSA는 2000년 이후에 참여함
-
radix-8 곱셈의 단점은 0에서 7까지의 숫자로 곱하는 것이 복잡함
- 2로 곱하는 것은 비트를 왼쪽으로 1비트 이동하는 것과 같음
- 4로 곱하는 것은 비트를 왼쪽으로 2비트 이동하는 것과 같음
- 7로 곱하는 것은 8을 곱하고 1을 빼는 방법으로 해결 가능함
- ×3은 2x와 1x의 합 또는 4x와 1x의 차로 계산할 수 있음
- ×6을 쉽게 계산할 수 있다면, ×3은 그 값을 오른쪽으로 시프트하여 얻을 수 있음