프로그래밍

[정보] AMD의 64비트 아키텍쳐 x86-64

Subi Lee 2009. 11. 15.
반응형
[정보] AMD의 64비트 아키텍쳐 x86-64
김건중 2000/08/30

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비트 애플리케이션에서 성능이 떨어질 것으로 전망하는 사람들도 많다.

아이태니엄에 관한 정보는 아래 링크에서 볼 수 있다.

[정보]아이태니엄 가이드


64비트 프로세서, 누가 필요로 할까?

물론 64비트 프로세서는 먼저 서버/웍스테이션의 하이엔드 시장을 타겟으로 출시된다. 그러므로 일반 데스크탑 시장에서 64비트 환경은 현재 생각보다 훨씬 늦은 앞으로 3-5년 후라고 보아도 무방하다.

64비트 환경을 당장 필요로 하는 사용자층이 그렇다고 단순 서버 분야만으로 한정되어 있지는 않다. 인텔은 머시드를 발표하면서 이 프로세서를 이용해서 차세대 마이크로프로세서를 설계하는데 사용할 것이라고 발표한 바 있다. 즉 트랜지스터 집적수가 높아지고 아키텍쳐가 갈수록 복잡해지면서 이 칩 설계도 64비트 프로세서 환경을 요구할 것이다.

마찬가지로 기계 설계등의 분야에서 수치해석과 이를 시뮬레이션하는 과정에서도 이와 같은 64비트 환경으로 전환이 큰 속도 향상을 가져올 수 있으며 또한 이 프로세서 적용분야에서는 암호화/보안 같은 애플리케이션도 큰 향상을 가져올 것으로 기대된다.

하지만 현재로서 게임/사무용 오피스 프로그램에서 64비트 환경의 이점은 당장 사용자에게 그리 눈에 띄지 않을 것이다. 가격적인 측면에서 64비트 프로세서가 기존 x86 프로세서에 비해서 엄청나게 비쌀것이기도 하지만 현재 대부분의 게임이 32비트의 프리시전(Precision)으로 충분하기 때문이고 SIMD, MMX 유닛으로 게임에서 실행하는 연산을 일반적인 64비트 프로세서보다 더 효과적으로 실행할 수 있기 때문이다.

AMD의 64비트 전략

32비트 프로세서 시장에서 애슬론으로 펜티엄 III와 치열한 경쟁을 벌이고 있는 AMD는 곧 64비트 프로세서 시장에 뛰어들게 되어 Top-end의 서버/웍스테이션 시장에서도 곧 기존 RISC 프로세서들과 인텔의 아이태니엄과 경쟁하게 된다.

한가지 AMD를 눈여겨 볼 것은 인텔의 IA-64 아키텍쳐가 아닌 고유의 x86-64란 새로운 아키텍쳐를 들고 나온 것이다. 이는 전적으로 AMD가 독자적인 영역에서 인텔과 경쟁을 해야한다는 것을 의미하는데 컴파일러와 소프트웨어 지원에 있어 AMD, 인텔 어느 쪽이 지원을 더 받게 되느냐에 따라서 그 승부가 가려질 승산이 크다.

인텔이 기존 IA-32와의 호환성 문제를 훌훌 털어버리고 IA-64로 무장했음에 비해서 AMD는 조금 더 현실적인 선택을 했다. AMD의 64비트 프로세서, 코드명 K8, "SledgeHammer"는 x86-64 아키텍쳐에 기반한 첫 번째 프로세서가 될 것인데, 이 프로세서는 기본적으로 32비트의 애슬론 코어에 64비트 기능을 추가한 모델이기 때문이다.

IA-64의 경우 64비트 모드를 최적화 시키면서 32비트 펜티엄 4가 가질 몇몇 기능은 구현되어 있지 않고 있으나 AMD는 x86 아키텍쳐 자체를 64비트 프로세스로 끌어오는 관점에서 설계를 하였기 때문에 이 부분에서 32비트 성능 자체는 AMD의 슬레지해머가 아이태니엄에 우세할 것으로 분석되고 있다.

실제로 인텔도 32비트 애플리케이션에서 최적의 성능을 바라면 차세대 펜티엄 4 시스템을 사용할 것을 권장하고 있다. 하지만 반면에 아이태니엄의 후속버전인 McKinley의 경우 32비트 성능에 있어 높은 성능을 낼 것이라고 주장하고 있다. 이 IA-64 칩들은 비순차적 실행같은 펜티엄 4의 향상된 기능들 몇 개를 32비트 호환 모드에 포함되어 있지 않다.

하지만 32비트 호환 성능만이 이 프로세서의 주요 인자가 아님을 잊지 말아야 한다. 만약 64비트 애플리케이션에서 AMD의 슬레지해머가 인텔의 아니태니엄 IA-64보다 못한다면 32비트 모드의 성능 자체가 전혀 무의미해지기 때문이다.


X86-64 아키텍쳐

x86 모드의 지원에 많은 노력을 기울인 흔적이 역력한 x86-64 아키텍쳐의 가장 장점이라면 기존 32비트 애플리케이션의 재 컴파일 없이 바로 사용이 가능하다는 점이라고 하갰다.

64비트 애플리케이션의 경우 당연히 마찬가지로 고유의 컴파일러가 필요하며 이로 작성된 애플리케이션을 필요로 한다.

AMD의 x86-64 아키텍쳐에서 추가된 사항들을 보면 다음과 같다.

- 64비트 플랫 버추얼 어드레싱(Flat Virtual Addressing)

- 8개의 새로운 범용 레지스터(GPR, General Purpose Register)

- SSE(SIMD Extensions)용 8개의 새로운 레지스터

- 64비트의 GPR과 명령어 포인터

x86-64 아키텍쳐는 이전 x86용 운영체제와 애플리케이션의 바이너리를 지원하는 레거시(Legacy) 모드를 지원하며 64비트용으로 다시 컴파일된 코드와 기존의 애플리케이션을 모두 지원하는 새로운 모드를 지원한다.

X86-64는 Long 모드와 x86모드인 Legacy 모드를 지원하게 되는데 이 두 사항을 비교해 보면 다음과 같다.

x86-64의 동작 모드

모드

필요한 운영체제

애플리케이션

재컴파일 필요

어드레스

 크기 (bit)

연산자

 크기(bit)

레지스터

 확장

GRP

비트폭(bit)

Long

모드

64비트 모드

새 64비트 운영체제

64

32

64

호환

모드

아니오

32

아니오

32

16

Legacy 모드

32bit, 16 bit OS

아니오

32

32

아니오

32

16

16

64비트로 확장된 Long 모드의 경우 64비트 모드와 기존 32/16비트 애플리케이션을 지원하는 호환 모드 두가지로 구성되어 있다. 이 이외에도 완전히 x86과 동일하게 동작하는 레거시 모드로서 이 모드시에는 기존 32bit/16bit 바이너리만을 지원하게 된다. Long 모드의 경우에는 즉 이 x86-64의 아키텍쳐에 의해서 새롭게 컴파일된 운영체제 하에서 기존 16/32비트 애플리케이션을 재컴파일 하지 않고 그대로 사용 가능하게 된다.

Long 모드의 x86에서는 x86 보호 모드(Protected mode)만을 지원하고 x86 리얼 모드, 가상 8086 모드는 지원하지 않으며 이는 Legacy 모드에서만 지원한다.

64비트 모드의 레지스터 익스텐션(Register Extension)

64비트 모드의 기존 x86에 비해서 가장 큰 이점이라면 가용할 수 있는 레지스터의 수와 비트폭이 넓어진다는 것이다. 아래 그림에서 보듯이 범용 레지스터 GPR의 경우 R8-R15까지 8개의 레지스터가 추가되었으며 기존 RAX ~ RSP의 레지스터의 경우 레거시 모드의 x86 레지스터로서 Long 모드와 호환 모드에서 모두 지원한다. 물론 확장된 레지스터의 경우 64비트 모드에서만 지원되며 기존 x86 범용 레지스터의 경우 64비트모드에서는 64비트로 확장된다. 이것의 경우 기존 16비트에서 32비트로 이전했던 것과 매우 흡사한 것을 알 수 있다.

또한 MM0/ST0 ~ MM7/ST7의 MMX와 부동 소수의 32비트 레지스터를 그대로 존속시키며 추가로 128비트의 SSE (Streaming SIMD Extension) 레지스터가 8개가 더 추가되었다. (XMM8 ~ XMM15) 그리고 64비트 모드에서 명령어 포인터(Instruction Pointer) 레지스터가 64비트로 비트폭이 넓어졌다.

호환 모드의 경우 운영체제에서 기존 16/32비트의 x86 애플리케이션을 실행할 수 있도록 바이너리 호환을 지원하도록 한다. 이러한 구형 애플리케이션이 실행될 경우 64비트의 운영체제는 구형 애플리케이션을 재 컴파일할 필요 없이 Long 모드에서 실행될 수 있도록 한다.  이 호환 모드에서는 16/32비트 애플리케이션이 실행될 경우 마치 애플리케이션 입장에서 보면 이전 x86 보호 모드 환경에서 동작하는 것처럼 되게 된다.

그렇다면 이 모드간의 전환을 프로세서에서 어떻게 알게 될까?

이것은 REX라는 애플리케이션 코드의 접두에 위치한 바이트로서 명령어가 32비트, 혹은 64비트 모드로 동작할 것인지 알려주게 된다.

레거시 모드는 현존하는 32비트 x86 아키텍쳐와 완벽하게 동일하게 운영된다.

AMD의 x86-64와 관련된 소프트웨어 개발자들을 위한 자료는 아래 링크의 AMD 웹사이트에서 받을 수 있다.

-X86-64 Overview


AMD의 x86-64 프로세서 SledgeHammer

K8, SledgeHammer란 코드명의 프로세서가 AMD가 첫 번째로 이 아키텍쳐를 적용한 프로세서가 될 것이다. 이 프로세서는 2001년에 출시될 예정이나 아직까지 그 출시 시기가 정확하지는 않다. 이전에 해외에서 이미 K8의 샘플 실리콘이 테스트를 위해서 몇몇 주요 업체에 출시가 되었다는 루머가 있었지만 이것을 AMD 측에서는 강력히 부인하고 있다.

현재 K7 코어를 애슬론, 듀론으로 분류해 놓은 것과 같이 슬레지해머도 캐쉬 크기, 코어 클럭 주파수와 FSB를 달리하여 그 타겟을 다양화 할 것으로 추정된다.

현재 이슈화되고 있는 것은 그렇다면 K8을 지원할 칩셋을 어디에서 출시하겠냐는 것이다. VIA는 현재 AMD를 지원해주는 가장 든든한 파트너인데 VIA의 경우 이미 기업의 전략을 보급형/주류 데스크탑으로 밝힌 바 있기 때문에 이에 대해서 당장 VIA가 이를 지원하기 위해서 자사의 리소스를 투자할 지는 미지수이다. (현재 VIA는 SMP를 지원하는 하이엔드 급 칩셋을 내놓고는 있고, 이 칩셋을 이용한 서버 솔루션도 속속들이 출시 예정중이긴 하다). 즉 이러한 경황으로 볼 때 AMD가 자체적으로 SledgeHammer를 지원하는 칩셋을 개발할 가능성이 가장 높으며 이는 올해 말이나 내년 초경에 SledgeHammer에 관한 조금 더 자세한 로드맵이 나와 보아야 알 수 있을 것이다.

AMD의 CEO Jerry Sanders는 서버 분야 이외의 데스크탑용 64비트 CPU로 "ClawHammer"를 출시할 것이라고 발표한 바 있으나 이에 대한 기술적인 스펙은 아직까지는 공개되지 않고 있다.

슬레지해머는 약 1.5GHz의 속도 부근으로 출시될 것으로 현재까지는 분석되고 있다. d; 칩은 출시당시에는 0.18미크론 공정으로 출시되며 이후에 0.15, 13미크론으로 공정을 개선시킬 것이며 이 칩 역시 AMD의 독일 드레스덴 공장에서 출시될 것으로 전망된다.

패키징 역시 소켓 타입으로 출시될 것으로 추정되고 있으며 L2 캐쉬의 경우 512KB에서 2MB 까지 고용량으로 출시될 것으로 전망된다.

이 슬레지해머에는 이미 AMD에서 발표한 바 있는 LDT(Lighting Data Transport) 기술이 접목된다. 이 기술은 AMD가 표준화 하려고 애쓰는 기술로서 고 대역폭과 관련된 PCI, AGP같은 모든 주변기기를 묶으려고 하는 것인데, 현재로서 40개가 넘은 협력업체가 이와 관련되어 있다고 한다.  트랜스메타와 AMD와의 기술 협력에 관한 것도 이 LDT에 관한 기술 라이선스에 관련되어 있다.

LDT 다이어그램

슬레지해머의 FSB는 어떻게 될까? 현재 200MHz의 FSB인 애슬론 코어보다는 높은 FSB를 가지게 될것으로 전망되고 있는데 EV6버스가 연구소에서는 400MHz까지 가능했었다고 알려지고 있다. 현재로서는 약 266 - 350MHz의 FSB로 출시될 가능성이 높다고 한다.

IA-64 Vs X86-64 그 승자는?

하지만 AMD의 64비트 프로세서 SledgeHammer는 실제 Itanium이 상용화를 바로 앞두고 있고, 이후 IA-64 버전인 McKinley까지 로드맵에 나와 있는 것, 그리고 마이크로소프트와 리눅스 진영으로부터 지원을 받고 있는 것에 비하면 시장 진출시기가 인텔에 비해서 늦고, 인텔 만큼의 소프트웨어 지원을 받아낼 수 있는 지도 미지수이다.

기본적으로 64비트 프로세서 환경은 32비트 호환성보다 64비트 환경 자체에서 성능이 우선되기 때문에 각각의 플랫폼에 최적화된 고성능의 컴파일러를 만들어내는 것이 최우선적이라고 하겠다.

AMD로서는 마이크로소프트와 리눅스 양측에서 지원을 절실히 필요로 할 것이며 이로서 이 프로세서가 32비트 환경이 완전히 사라지기 전까지 훌륭한 가교 역할을 해낼 수 있을 것인지 판단할 수 있을 것으로 보인다.

현재 AMD는 리눅스 진영을 위한 개발자 사이트 x86.org(www.x86-64.org)를 지원하고 있다. 이 사이트를 통해서 x86-64의 GNU/리눅스 배포판을 다운로드 받을 수있을 것이라고 하며 현재 이 아키텍쳐에 관한 기술적인 문서를 배포하고 있으며 메일링 리스트를 운영하고 있다. 현재 이 아키텍쳐를 시뮬레이션할 수 있는 툴이 곧 출시될 것이라고 하며 GCC와 Binutil의 테스트 버전을 이사이트를 통해서 다운로드 받을 수 있고 대표적 리눅스 업체중 하나인 독일의 SuSE가 x86-64 리눅스 출시를 위해서 노력하고 있다고 한다.


출처: http://www.kbench.com/hardware/print.jsp?no=6280
반응형

댓글