x86,
그 성능한계는 언제쯤이나?
이전에
관련 분석가들의 전망대로 라면 x86은 이미 5년전 쯤에 그 수명을 다했어야 했다.
그러나
이러한 전망은 x86코어를 갈수록 개선시키고 발전시킨 결과 , 앞으로도 쉽사리 그
자취를 감출 것 같지는 않다. x86은 20년의 세월을 거치면서 아주 초기에 계산기용도로
4비트로 시작하여 16비트, 그리고 현재는 32비트로 진화해왔는데, 이 때부터 x86의
한계론이 일기 시작하는 시점이라고 보아도 무방할 듯 하다.
32비트의
메모리 어드레싱을 지원하게된 386은 전체 세그먼트 레지스터를 모두 같은 어드레스
공간에 할당하게 됨으로서 이론적으로 4GB 이상의 메모리를 지원하게 된다. 하지만
이와 동시에 적은 레지스터로 인해서 성능향상의 한계에 도달했다는 의견이 도출되게
된다.
386은 부동 소수 연산 유닛(코 프로세서)을 내장한 486으로 발전하게 되며 이곳에서
펜티엄, 펜티엄 프로(이 칩은 당시에 대용량의 풀 스피드 온다이 L2 캐쉬를 장착한
칩으로 오히려 시대를 너무 앞질러가 빛을 보지 못한 프로세서로 알려져 있다.),
그리고 펜티엄 II, 펜티엄 III로 진화를 거듭해왔다. 하지만 386 이후로 MMX와 SSE가
추가된 것 이외에 사실 구조적으로 그다지 변화한 것이 많은 것은 아니다
현재
성능을 제한시키는 x86 프로세서의 요소는 무엇일까?
-복잡한
디코딩 과정
현재
x86 명령어들의 길이가 전부 틀리며 또한 그 포맷도 여러 가지가 있다. 이로 인해서
x86 CPU의 디코딩 과정이 매우 복잡하게 된다. 높은 클럭으로 동작하는 x86 CPU의
경우 효율을 높이기 위해서 단일 클럭사이클에 작업을 수행하도록 해야 하는데, 디코딩
자체로 많은 부분을 차지하게 될 경우 더욱 많은 클럭사이클을 필요로 하게되거나
CPU의 파이프라인 자체에 많은 단계를 거쳐야 할 수도 있다.
-레지스터
부족
IA-32의
경우 가용 범용 레지스터는 8개뿐이다. 이는 현재 수퍼 스케일러 CPU에 비해서 너무
작은 수인데, 현재 수퍼 스케일러 CPU의 경우 한 클럭 사이클당 6개의 명령어를 처리할
수 있음에 비해서 레지스터가 너무 작은 것이다. 이는 현재 레지스터 리네이밍(Register
Renaming)의 방법과 특정 레지스터를 추가함으로서 이 문제를 해결하려 하고 있다.
하지만 이렇게 함으로서 더욱 복잡해지고 이로서 파이프라인 길이가 더 길어지게
된다. 물론 파이프라인이 길어질 경우 캐쉬 미스가 발생하면 이에 대한 패널티는
더욱 커지게 된다.
-메모리
레퍼런스
X86명령어는
모두 메모리 어드레스를 참조하여 메모리에서 데이터를 불러오게 된다. 현재 고성능
RISC CPU의 경우 Load/Store 명령어를 사용하여 이 것만이 메모리 어드레스를 참조하게
된다. 현재 프로세서 클럭이 메모리의 수배로 빠르게 동작하는 것을 감안하면 이
RISC의 Load/Store 모델이 더욱 효율적인 방법임을 알 수가 있다.
-부동
소수 성능
x87
FPU는 현존하는 FPU중 가능 느린 성능으로 유명하기도 하다. x87 명령어의 경우 많은
사이클을 낭비하는 FXCH 명령어를 사용해서 연산 데이터를 저장하는데, 이 저장하는
스택에 있어 성능 저하의 요인이 된다. 물론 이 데이터를 저장할 수 있는 레지스터가
충분히 많을 경우 이와 같은 스택 방법을 쓰지 않아도 된다.
-4GB의
메모리 제한
현재
대부분의 사용자가 128MB의 메인 메모리를 사용하고 있기 때문에 4GB의 메모리 제한이라는
것은 자체적으로 볼땐 성능 저하의 요인이라고 말할 수 없는 부분이기도 하지만,
약 6-7년전에 8, 16MB의 메모리를 사용하는 것이 현재 128MB를 사용하는 것에 비하면
16배가 증가한 것이다. 그러므로 x86의 경우 다음 10년간 이 부분에서도 한계를 맞을
수도 있다. 그리고 대형 서버의 경우 이미 1 GB의 메모리 이상이 장착되고 있으므로
이 부분에서 4GB의 메모리 한계는 벌써 도달했다고 볼 수 있다.
-다이
크기
레지스터
리네이밍, 고용량 버퍼, 비순차적 실행(Out of Order Execution), 브랜치 예측등의
기능추가와 트릭으로 인해서 x86 코어는 그 성능을 꾸준히 개선시켜왔지만 이로서
다이 크기가 커지게 되었다. 즉, x86의 한계를 극복하기 위한 그 자체만으로 트랜지스터
집적도가 높아지게 되고 이로서 다이 크기가 늘어나게 된 것이다.
이와
같은 제한 사항 때문에 기존 x86의 호환성을 과감히 탈피하고 새로운 아키텍쳐를
도입하려는 시도가 현재 활발하게 진행중이다.
64비트
프로세서
64비트
프로세서란 64비트의 어드레스와 64비트의 레지스터를 가지고 있는 CPU를 의미한다.
64비트 어드레스 라인으로 인해서 64비트 프로세서는 160억 기가바이트의 메모리를
관리할 수 있게 된다. 현재 인텔은 올해 중으로 Merced란 코드명으로 불렸던 IA-64의
새로운 아키텍쳐를 도입한 아이태니엄(Itanium)을 출시할 예정이다.
이
IA-64 아키텍쳐는 VLIW(Very Long Instruction Word, 트랜스메타의 랩탑용 프로세서인
크루소 역시 이 아키텍쳐에 기반하여 x86을 Code Morphing 소프트웨어로 에뮬레이션하는
방법을 따르고 있다.) 프로세서 구조와 흡사한 EPIC(Explicit Parallel Instruction
Computing) 아키텍쳐에 기반하고 있는데, 이것은 기존 데스크탑 프로세서가 명령어를
스케쥴링하는 것을 관리함에 비해서 컴파일러가 이를 관리하는 방법을 택하고 있다.
이로서 아키텍쳐 전체가 심플해지고 빠르게 되며 프로세서가 스케쥴링으로 프로세싱
효율을 높이는 것보다 더욱 효율적인 성능을 내도록 애플리케이션이 작성될 수 있지만
이로서 컴파일러가 복잡해지므로 소프트웨어 개발이 이전보다 어려워질 것으로 추정된다.
물론 디버깅도 같이 어려워지게 된다.
물론 x86에 기초한 아키텍쳐에서 출발한 것이 아니고 완전히 새로운 것이기 때문에 성능 향상을 꾀할 수 있지만, 반면에 여기서 대두되는 것은 기존 방대한 x86 소프트웨어 지원을 포기해야 하는 장단점이 동시에 존재하게 된다.
물론 이러한 IA-32와의 호환성에 있어 x86이 쌓아온 많은 소프트웨어 지원은 그냥
무시하기엔 그 비중이 너무 크다. 인텔의 아이태니엄은 하드웨어 에뮬레이션으로 IA-32 소프트웨어를 무리 없이 구동할 수 있을
것으로 인텔이 주장하고 있지만, 이 성능이 내이티브 IA-32 머신보다 높게 나올 수 있을 지는 아직 미지수이고, 오히려
IA-64의 32 에뮬레이션으로 32비트 애플리케이션에서 성능이 떨어질 것으로 전망하는 사람들도 많다.
아이태니엄에 관한 정보는 아래 링크에서 볼 수 있다.
[정보]아이태니엄 가이드
댓글