큰 폭의 프론트 엔드 아키텍처 개혁

 

인텔의 최신 CPU 마이크로 아키텍처 스카이레이크는 아직 세부 사항이 명확히 알려지지 않았습니다. 그러나 당초 예상보다 훨씬 큰 확장이 더해졌습니다. 이대로라면 인텔 CPU 아키텍처에서 큰 발전이라 선전해도 될 정도입니다.

 

특히 눈에 띄는 건 스카이레이크 프론트엔드의 IA 명령 디코더가 5 유닛이란 점입니다. 이는 인텔 CPU의 계보를 돌아봤을 때 매우 큰 확장입니다. 명령 디코드는 말하자면 CPU의 입구이며, 명령 디코딩 대역이 확장되면 그 다음의 실행 파이프 라인에서 병렬 실행할 수있는 명령 수가 늘어나, 사이클 당 명령 실행 수인 IPC(Instruction-per-Clock)가 늘어납니다. 명령 디코드 수는 CPU에 있어 가장 중요한 요소이며, 4명령 디코드에서 5명령 디코드에 달라진 건 큰 사건입니다.

 

인텔 CPU는 펜티엄 3/바니아스 세대에서 3명령 디코딩 아키텍처를 채용했습니다. 그것이 2006년의 초대 코어 마이크로아키텍처 기반인 메롬에서 4명령 디코드로 확장됐습니다. 이는 인텔이 CPU 브랜드를 바꿀 정도의 큰 변화였습니다. 이후 인텔의 고성능 CPU는 4명령 디코드 아키텍처를 유지해 왔습니다. 그동안 프론트 엔드의 주요 확장은 샌디브릿지에 추가된 uOP 캐시 정도가 고작이었습니다.

 

4명령 디코드가 5명령 디코드로 바뀌면서 스카이레이크의 명령 디코더는 메롬 이후 처음으로 프론트 엔드 아키텍처를 근본적으로 확장했다고 할 수 있습니다. 2006년 이후 9년만에 이루어진 변화지요. CPU 아키텍처 족에서 보면 이번 확장은 코어 마이크로아키텍처 때처럼 대외적으로 내세워도 괜찮을법한 일이나 그렇게 하진 않았습니다. 인텔이 중요한 아키텍처 확장을 감추려는 것처럼 보이기도 합니다.

 

01.png

 

인텔 CPU의 프론트 엔드 아키텍처 변화

 

02.png

 

스카이레이크 다이

 

03.png

 

스카이레이크 마이크로 아키텍처


 

기존의 명령 디코더를 더 확장

 

스카이레이크의 명령 디코더는 복잡한 명령을 디코딩할 수 있는 컴플렉스 디코더가 1개, 간단한 명령을 디코딩할 수 있는 심플 디코더가 4개 있습니다. 그 전까지는 컴플렉스 디코더가 1개, 심플 디코더가 3개였습니다. 스카이레이크에서 심플 디코더가 1개 늘어난 것입니다.

 

컴플렉스 디코더는 간단한 명령을 디코딩할 수 있습니다. 따라서 스카이레이크는 각 사이클마다 최대 5개의 IA 명령을 디코딩하고, 5개의 내부 명령 uOP(Micro-Operations)를 실행 파이프 라인에 발행할 수 있습니다.

 

덧붙여서 디코딩 스테이지에서 컴플렉스 디코더를 늘리진 않았습니다. 모 CPU 제조사의 설계자는 "x86에서는 명령 병렬성을 최대로 발휘할 수 있는 경우가 간단한 명령일 때 뿐입니다. 복잡한 명령은 병렬 처리가 어렵기에 디코더를 늘려봤자 의미가 없습니다."라고 그 배경을 분석했습니다.

 

사실 가변 길이 명령어 포맷에 복잡한 접두사가 많은 x86 명령의 경우, 기술적으로 가장 어려운 것이 명령 디코드 전 단계의 명령을 알맞게 잘라내는 것입니다. 각 아키텍처 명령의 시작 부분이 어디에 있는지를 확인하기가 어렵습니다. 명령 수가 증가할수록 이 작업이 어려워지고, 길이가 바귀고 접두사가 붙으면 명령어를 나누는 알고리즘 자체가 작동하지 않을 수도 있습니다. CPU 아키텍쳐에선 L1 명령 캐시에 불러올 때 명령을 나누는 경우도 있습니다. 이를 스카이레이크에서 어떻게 해결했는지는 아직 알 수 없습니다.

 

또한 스카이레이크는 2개의 컴플렉스 명령을 1개의 uOP로 합치는 Macro-Fusion도 계속 지원합니다. 따라서 Macro-Fusion을 할 수 있는 명령 조합이 왔을 때 최대 여섯 개의 아키텍처 명령을 해독할 수 있을 겁니다. uOPs의 출력은 Macro-Fusion에 의해 1개 줄어들기에 각 사이클마다 5개의 uOPs가 됩니다.

 

또한 스카이레이크는 연산과 로드/스토어를 합친 CISC(Complex Instruction Set Computer) 형 명령을 1개의 uOP로 변환하는 Micro-OPs Fusion도 계속 지원합니다. 따라서 실제로는 디코더에서 출력되는 uOPs의 수준은 하나로 합쳐진 Fused uOPs가 됩니다. 디코더에서 uOPs의 출력은 5개/1사이클 이지만, 디스패치 단계에서 실행 유닛으로 이슈되는 uOPs의 수는 더욱 늘어납니다.

 

04.png

 

05.png

 

 
대폭 강화된 스카이레이크의 uOP 캐시


스카이레이크는 디코딩 후 uOPs를 유지하는 uOP 캐시도 여전히 구현하고 있습니다. 복잡한 IA 명령의 디코딩을 생략하고 디코딩 된 uOPs을 캐시해 효율적인 명령 피드를 실현합니다. 전력 소비가 많은 명령 디코딩을 생략하니 절전 효과도 큽니다. uOP 캐시는 x86/x64 시스템 아키텍처의 CPU에서 성능과 전력에 중요한 역할을 합니다.

 

명령 디코드의 확장뿐만 아니라 uOP 캐시도 스카이레이크에서 크게 바뀌었습니다. 스카이레이크는 uOP 캐시가 적중할 경우 최대 6개의 uOP를 실행 파이프 라인에 게시할 수 있습니다. 명령 디코더가 5와이드로 확장됐을 뿐만 아니라 실행 파이프 라인의 명령 피드는 6와이드로 확장됐습니다.

 

06.png

 

프론트엔드에서 uOPs 발행은 기존의 4 uOPs에서 6 uOPs로 1.5배 늘었습니다. 위 그림은 약간의 추측이 포함됐습니다.

 

인텔은 스카이레이크 uOP 캐시에서 uOPs 페치는 최대 6 uOPs/사이클이라 말합니다. 샌디브릿지와 하스웰 등의 기존 아키텍처는 uOP 캐시에서 가져올 때 4 uOPs/사이클이었습니다. 이 부분의 대역폭은 1.5배 증가했지요. 디코더 라인에서 uOP 출력은 최대 5 uOP/사이클이기에 uOP 캐시에 적중하면 6 uOPs/사이클 쪽이 파이프 라인의 하단에 uOP를 더 많이 공급하게 됩니다.

 

CPU의 명령 디코더는 원래 상단의 명령 캐시에서 가져오는 윈도우에 따라 제약됩니다. 캐시에서 명령을 캡처하는 명령어 인출 윈도우가 크면 전력 소모량도 늘어나 낭비도 많이 하게 됩니다. 인텔 CPU는 16-byte씩 캐시에서 로드 디코딩하는 16-byte 페치 창을 지금까지 사용했습니다. 스카이레이크도 명령어 인출은 16-byte 윈도우를 유지하는 것으로 보입니다. IA 명령 셋트는 가변 길이의 명령을 쓰니 명령어 인출 윈도우에서  가져올 수 있는 명령 수를 예측하기가 어렵습니다.

 

반면 디코더 아래쪽의 레벨 0 캐시인 uOP 캐시는 이러한 제한이 없습니다. 디코더에서 uOPs 출력을 캐시하기 위해 페치 대역의 제약이 없습니다. 그러나 인텔의 uOP 캐시는 L1 명령 캐시를 관리하는 히트 로직을 씁니다. 이 점은 내부 명령어 캐시도 마찬가지며 펜티엄 4의 추적 캐시와 크게 다른 점은 컨트롤이 더 간단해졌다는 것입니다.

 

인텔의 설계에 따르면 샌디브릿지/하스웰에선 32-byte 윈도우 단위로 uOP 캐시를 컨트롤했습니다. 반면 스카이레이크의 경우 uOP 캐시는 64 byte 단위로 불러오기 윈도우를 관리할 수 있다고 합니다. 실제 윈도우보다 넓은 명령어 윈도우로 uOPs을 캐시하여 최대 6 uOPs/사이클의 명령 피드를 할 수 있다고 합니다.

 

 

아직 수수께끼로 남은 스카이레이크 아키텍처와 성능


이처럼 스카이레이크의 프론트 엔드에서 uOP 캐시는 명령 디코드를 생략할 수 있을 뿐만 아니라, 가상으로 명령어 인출 대역폭을 늘릴 수 있는 구조입니다. 또한 인텔의 uOP는 전통적으로 길이가 고정돼 있어, 캐시 라인에 저장할 수 있는 명령 수도 정해집니다.(실제로 저장되는 명령 수는 해당 L1 명령 캐시에서 가져오는 윈도우에 포함된 명령 수에 따라 정해집니다)

 

07.png

 

스카이레이크는 uOP 캐시가 적중했을 때 명령 피드의 대역이 기존의 하스웰보다 1.5배로 늘었습니다. 그렇게 생각하면 인텔이 스카이레이크에서 아웃 오브 오더의 리소스를 대폭 강화한 이유도 납득할 수 있습니다. 아웃 오브 오더 엔진에 공급할 수 있는 명령 수/사이클이 크게 늘어나 아웃 오브 오더에 대한 하드웨어 리소스를 늘릴 필요가 생긴 것입니다. IPC(Instruction-per-Clock)를 높이기 위해 이렇게 균형을 잡은 것이지요.

 

그런데 스카이레이크의 벤치마크 결과는 명령 대역을 1.5배 확장한 것으로 보이진 않습니다. 스카이레이크의 숨겨진 비밀은 여기에 아직 남아 있을지도 모릅니다. 스카이레이크 아키텍처를 확장한 목적은 어쩌면 지금가지 그랬던 것처럼 CPU 성능을 향상하는 게 아니라 미세화 공정에서의 생산성 향상에 있을지도 모릅니다.

기글하드웨어(http://gigglehd.com/zbxe)에 올라온 모든 뉴스와 정보 글은 다른 곳으로 퍼가실 때 작성자의 허락을 받아야 합니다. 번역한 뉴스와 정보 글을 작성자 동의 없이 무단 전재와 무단 수정하는 행위를 금지합니다.