벤치리뷰·뉴스·정보/아키텍처·정보분석

[분석정보] AMD Kaveri의 메모리 아키텍처와 향후의 APU 진화

tware 2014. 1. 29. 19:00

 

Kaveri의 새로운 일관성 버스 onion+"

 

 AMD의 새로운 APU "Kaveri (카베리, A10 / A8-7xxx)"는 HSA (Heterogeneous System Architecture) 프로그래밍 모델을 실현하는데 주안점을 두고 설계되었다. HSA 중에서도 가장 중요한 특징인 메모리 모델 "hUMA (heterogeneous Uniform Memory Access : 휴마)"를 실현한 점은 Kaveri의 최대 포인트다. 이것에 의해 CPU 코어와 GPU 코어는 일관성 (coherency)이 유지된 상태에서 같은 메모리 공간을 공유 가능하게 되었다. 프로그래머는 포인터를 보내는 정도로, CPU와 GPU 사이에 데이터를 공유 가능하게 되었다. GPU의 프로그래밍을 쉽게 한다라는, HSA의 목적을 향해서 크게 전진한 것이 Kaveri다.

 

hUMA에서의 데이터 공유

 

 다만 hUMA를 실현하는 뒷면의 메커니즘을 보면 아직 Kaveri 아키텍처는 궁극의 APU에 이르지 못한 것을 알 수 있다. hUMA를 신속히 제공하는 것을 주목적으로서, 가능한 아키텍처의 확장을 피했다. 반대로 말하면, AMD APU는 더 구조적으로 발전의 여지가 있다. CPU와 GPU의 궁극의 통합을 위해, AMD는 아직도 전진을 계속한다. Kaveri을 보면 향후의 APU가 어떻게 진화해 가는지 알 수 있다.

 

Kaveri의 다이 레이아웃

 

 AMD는 APU의 내부 버스 아키텍처를 단계적으로 진화시켰다. 최초의 APU 인 Llano (라노)는 CPU 코어와 GPU 코어를 물리적으로 하나의 실리콘 다이 (반도체 본체)에 통합했다. 그리고 GPU 코어에서 DRAM 컨트롤러에 액세스하는 버스를 2 계통 마련했다. 첫 번째 버스는 "Radeon Memory Bus (Garlic : 갈릭)"으로 이것은 GPU 코어에서 메모리 컨트롤러에 광대역의 직접 액세스를 실현한다. 두 번째 버스는 "Fusion Compute Link (Onion : 오니언)"으로 독립(외장) GPU가 I / O 컨트롤러를 통해 CPU와 연결되어 있던 버스를 온다이에 구현한 것 같은 버스이다. onion 버스는 GPU 코어에서 CPU 캐시에 스눕 / 프로브 가능한 I / O 일관성 형 버스다.

 

Llano의 진화 점


 하지만 Llano의 단계에서도 CPU 코어와 GPU 코어의 각각은 분리된 메모리 영역을 가지며 그동안 액세스는 제한되어 있었다. GPU 측에서 액세스는 페이지 폴트 (Page Fault)의 핸들이 가능하지 않기 때문에, CPU의 메모리 주소 공간에서 GPU가 액세스 할 수 있는 영역은 스토리지로 스왑하지 않도록 제어해야 했다.

 

 

Trinity, Richland의 진화 점


 2세대 APU의Trinity (트리니티)에서 IOMMU (I / O Memory Management Unit)를 확장한 IOMMUv2로 전환해서 페이지 폴트의 핸드링을 가능하도록 했다. 이것에 의해 스토리지에 스왑하는 메모리 영역에 접근하는 경우도 메모리를 다시 부를 수 있게 되었다. Llano까지와 같은  스왑의 제어는 필요가 없어졌다. 또한 onion는 256-bit 폭으로 확장했다. (Trinity 발표시 문서에서는 128-bit 였다).

 Kaveri 에서는 이 구조가 크게 바뀌어, GPU 코어와 CPU 코어 사이에 새롭게 "일관성 버스 (Coherent Bus)"가 마련됐다. 이 버스는 양방향에 메모리 코히런트가 갖춰진 버스다. 한편, 기존의 onion은 비 일관성 버스 (Non-Coherent Bus)로 고쳐졌다. 즉, GPU에서 CPU 경유의 메모리 액세스는 일관성을 갖춘 버스와 갖추지 않은 버스의 2 계열이 함께 있게 되었다. 모두 256-bit 폭이다.

 

Kaveri의 진화 점

 

 

Kaveri 아키텍처

 

 AMD에 따르면, 일관된 버스의 코드 네임은 onion + (오니언 플러스)"라고 한다. 이것은 PlayStation 4 (PS4)의 코히런트 버스와 같은 코드 네임으로, 기술적인 내용도 동일하다고 보여진다. 덧붙여, AMD는 또 하나의 "C​​hive (차이브)"라고 ​​부르는 버스 기술이 있다. onion +와 마찬가지로 GPU 코어에서 CPU와 일관성을 취한 메모리 액세스 버스지만 기술적으로 다르다고 한다. "게임기 측의 기술에 대해서는 말할 수 없지만, Chive는 onion +와는 조금 다른 버스"라고 AMD의 Joe Macri 씨 (Corporate VP & Product CTO of AMD Global Business Unit)는 말한다. 차이는 아마도 메모리 관리 유닛 "MMU (Memory Management Unit)"아키텍처에 있다고 보여진다.

 


Onion + 버스를 더하는 정도로 캐시 플러시 문제를 해결


 기존의 APU에서는 GPU 코어는 CPU의 캐시를 스눕 할수 있지만, CPU 코어는 GPU의 캐시를 스눕 할 수 없다. GPU -> CPU의 단방향 캐쉬 coherency 밖에 유지되지 않는 "I / O 일관성"형 모델을 취하고 있다. GPU는 CPU에 어떤 데이터가 캐시되어 있는지를 알 수 있는데, CPU는 GPU에 어떤 데이터가 캐시되어 있는지를 모른다.

 GPU가 읽어들인 메모리 영역에 CPU가 액세스하는 경우에, 해당 데이터가 GPU의 캐시에 있는지 어떤지 CPU는 모른다. GPU가 메모리에 기록하지 않으면 일관성을 취할 수 없다. 따라서 일단 GPU의 캐시를 소프트웨어 제어로 플러시시켜 공유 메인 메모리에 다시 기록 할 필요가 있다. 캐시 플러시는 기회 비용이 높고 무거운 처리이기 때문에 성능을 깎아 버린다. 기존의 APU는 이것이 큰 문제였다.

 

Kaveri GPU의 메모리 계층

 

  Kaveri는 이 문제를 매우 간단한 장치로 해결한다. 사실, Kaveri 에서도 여전히 CPU 측은 GPU의 캐시를 스눕 수 없다. 아직 I / O 일관성 형 모델이다. 그러나 GPU 캐시 플러시의 필요를  없앴다.

 Kaveri에서는 GPU가 일관된 버스 (Onion +)로 메모리에 액세스하는 경우 GPU의 L2 캐시를 우회한다. GCN (Graphics Core Next) 아키텍처의 GPU 코어는 위의 그림과 같이 L1 캐시는 write-through이므로, 라이트 백 L2만 회피하면 GPU 코어의 캐시를 플러시 할 필요가 없어진다. 메인 메모리는 일관성이 유지되고 있기 때문에 onion +로 성능 손실없이 코히렌시 액세스가 가능하게 된다. AMD가 onion +를 일관된 버스라고 부르는 이유는 여기에 있다.

 

Kaveri의 인터커넥트

 

 한편, 기존의 onion 버스는 GPU의 L2 캐시에 캐시된다. 지금의 onion 버스에서는 일관성이 유지되지 않는다. 일관성을 유지할 필요가 있는 메모리 액세스는 일관된 버스 (Onion +) 쪽을 사용하기 때문이다. 따라서 onion 액세스에서도 GPU 캐시의 플러시 필요가 없어진다.

 참고로, onion과 onion +의 어느 버스를 사용하는지는 GPU의 로드 / 스토어 명령 태그로 판별된다. 태그는 프로그램에서 명시적으로 부가하는 것이 아니라 액세스하는 메모리 영역에 의해 자동으로 부가된다고 한다.

 조금 재미있는 것은,이 경우 onion 경유의 캐시는 버츄얼 (가상) 주소를 기반으로 행한다고 보이는 것이다. 일반적으로 GPU의 L2 캐시는 DRAM 컨트롤러 1개와 1 대 1로 대응하기 때문에 피지컬 (물리) 주소 기반의 캐싱인 것이다. 즉, GPU의 MMU는 L2보다 GPU 코어 측에있다. 그러나 onion 액세스에서는, 주소 변환은 GPU 코어의 외부 IOMMU에서 행해지기 때문에 L2에 캐시될 때는 가상 주소 기반이 될 것이다. APU에서는 GPU L2 캐시는 하이브리드로 주소 공간을 제어하고 있는 것으로 보인다.

 

Kaveri GPU의 전체도

 

 

캐싱이나 MMU 액세스로 손실이 생기는 Kaveri


 AMD가 Kaveri에 더한 onion +의 개량이 멋진 것은, 프로그램 측에서 보면 지극히 단순하게 CPU 코어와 GPU 코어 사이의 메모리 코히렌시가 유지되어 보이는 것이다. 메모리 공간의 페이지 테이블이 공유되고 있을 뿐만 아니라 일관성도 유지되고 있기 때문에 안전하게 데이터를 공유 할 수있다. 코히렌시 메커니즘은 하드웨어 기반이기 때문에 성능도 높다.

 참고로, G​​PU 코어 측의 세 번째 MMU 인 GPU MMU도 페이지 테이블은 공유한다. GPU MMU와 CPU 측의 MMU는 같은 페이지 테이블을 동기시켜, 이곳이 기존의 APU와 Kaveri의 큰  차이가 된다. 그 결과, GPU와 CPU는 동일한 가상 메모리 공간을 공유하는 것이 가능해져, 다른 메모리 공간 사이의 데이터 전송은 완전히 필요가 없어졌다.

 

hUMA와 HSA로 변화하는 것

 

 

hUMA의 중요한 요소


 이처럼 Kaveri에서는 페이지 테이블의 동기화와 일관된 버스 (Onion +)에 의해, hUMA의 사용하기 쉬운 프로그래밍 모델이 실현되었다.

 다만 현재 아키텍처에서는 손실도 있다. 우선 onion+ 의 일관된 액세스는 GPU 측의 L2 캐시는 이용할 수 없다. 따라서 캐싱이 효과있는 워크로드의 경우 L2 캐시를 사용하는 경우보다 성능이 떨어진다. 이것은 워크로드에 따라 다르지만 CPU 코어끼리와 같이 캐쉬 일관성이 유지되는 아키텍처와 달리 성능에 차이가 나올 가능성이 있다.

 다른 하나는 메모리 관리 유닛을 공유하는 제약이다. Kaveri 아키텍처에서는 일관된 버스 (Onion+)와 비 일관된 버스 (Onion) 모두 IOMMU를 사용한다. 2개의 버스는 물리적으로 독립되어 있어 병렬로 동작 할 수 있지만, IOMMU를 공유하기 위한 제약도 있다. 2개의 버스가 동시에 IOMMU에 액세스 할 수 없으며, 일관된 또는 비 일관된 어느 한쪽의 버스로만 엑세스 해야 한다. 한쪽의 버스가 IOMMU에 액세스하는 사이에 다른 한쪽의 버스는 차단된다고 AMD는 설명한다.

 IOMMU는 가상 - 물리 메모리 사이의 변환 주소의 캐시인 "Translation Lookaside Buffer (TLB) "와 페이지 테이블 워커 (Page Table Walker)로 구성되어있다. 페이지 테이블 자신은 이미 설명했듯이 CPU 측의 MMU가 참조하는 페이지 테이블과 동기화 되어 있다. 일관된 버스와 비 일관된 버스는 각각 소용량에 액세스가 빠른 L1 TLB를 독립적으로 갖추고 있다. 각 버스가 L1 TLB에 히트한 경우 경합은 발생하지 않는다.

 그러나 L1 TLB를 미스한 경우는 두 버스로도, 더 크고 대기 시간이 긴 공유 L2 TLB에 액세스하는 구조로 되어 있다. 공유 L2와 개별 L1는 CPU 코어의 캐시와 유사한 구조이다. 또한 L2 TLB도 미스한 경우 IOMMU 페이지 테이블 워커에 의해 공유하는 페이지 테이블을 참조한다.

 그렇지만 페이지 테이블 탐사에도 해당 페이지 테이블 테이블 엔트리를 찾을 수 없는 경우는, 페이지 폴트가 되어 CPU에 제어를 던진다. 페이지 폴트가 발생했을 때 IOMMU는 OS가 예외 처리를 행하는 해당 페이지를 물리 메모리로 되돌리는 것을 기다린다. 페이지 폴트가 해소 될 때 까지의 사이는 IOMMU 자체가 스택하기 위해, 코히런트와 넌코히런트 양 버스는 모두 IOMMU에 액세스 할 수 없다고 한다.

 이러한 제한은 IOMMU를 코히런트 버스의 메모리 주소 변환에 사용하고 있기 때문에 발생한다. AMD는 자원의 중복이나 아키텍처의 복잡화를 피하기 위해 기존의 IOMMU를 사용하는 방법을 택한 것으로 보인다. 참고로, Microsoft의 Xbox one APU는 GPU 코어와 CPU 사이의 버스 IOMMU를 사용하지 않고 다른 MMU를 신설하는 방식을 취했다고 설명했다.

 


미래는 양방향 캐시 coherency를 실현


 GPU를 통합하는 궁극의 수단은 CPU와 GPU 사이에 완전한 양방향 캐쉬 coherency를 취할 수 있도록 설계하는 것이다. CPU 코어끼리와 같이, CPU 코어와 GPU 코어 사이에서도 양방향 캐시 스눕을 실현하면 GPU 코어도 캐시하며 일관성을 유지할 수 있다. 소중한 GPU 캐시도 살리는 것이 가능하다. 또 MMU도 IOMMU와는 분리하여 GPU 측에 일관된 액세스를 위한 MMU를 신설하면 MMU 경합도 피할 수 있다.

 

AMD의 Joe Macri 씨 (Corporate VP & Product CTO of AMD Global Business Unit)


 그러나 Kaveri에서 AMD는 이러한 아키텍처를 취하지 않았다. 그 이유를 AMD의 Macri 씨는 다음과 같이 설명한다. "APU의 내부 아키텍처 (architecture)가 복잡해지는 것을 억제, 대문자 A로 시작하는 쪽의 아키텍처, 즉 HSA (Heterogeneous System Architecture)를 실현하는 것에 집중했다 .HSA의 제품을 신속하게 시장에 내는 것이 중요했다. " HSA 프로그래밍 모델을 서둘러 실현하는 것이 우선으로, 내부 버스나 MMU의 아키텍처를 복잡하게 하는 것을 피한다는 의미다. 그렇게 보면 Kaveri의 아키텍처 선택은 납득이 간다.

 "우리는 HSA에 대해서는 완전하게 순수할 필요가 있다. 그 위에, 성능과 복잡함의 균형을 잡아야 했다. 현재의 소프트웨어를 보고 균형을 정했다. 뛰어난 프로그래머라면 일관된 버스에서 그렇게 많은 액세스는 하지 않을 것이다. 왜냐하면, 필요한 데이터의 대부분은 비일관성으로 해결되기 때문이다. 그래서 일관된 버스를 위해 쓸데없이 복잡성을 추가하는 것은 지금은 이득이 없다고 생각했다.

 캐쉬 coherency가 기술적으로 매우 어려운 있는가 하면, 그렇지는 않다. 문제는 캐시 프로브 메커니즘이 하나 이상 수준의 복잡성을 더해 버리는 것이다. 이번에는 가능한 복잡하지 않고 엔지니어링 팀에 대한 요청을 누르고, 가능한 빨리 개발하는 것을 우선했다 "(Macri 씨).

 AMD가 Kaveri에서는 개발 기간이 길어질수 밖에 없는 위험을 피하고, HSA 모델을 가장 간단하게 실현 가능한 궁리를 한 것을 알 수있다. 또 그 배경에는 GPU 컴퓨트 워크로드 분석이  지금의 단계에서는 복잡성을 늘리는 것으로도 합당하지 않다고 판단한 것도 알 수 있다. 캐싱이나 MMU 액세스의 다중화를 행하지 않더라도 현재의 워크로드에서는 큰 문제가 없는 것으로 보는 것 같다.

 이렇게 말 하지만, AMD는 Kaveri을 완성형으로 생각하는 것은 아니다. HSA 프로그래밍 모델에 대해서는 완성의 시작인 APU이지만, 아직도 개량을 더해 간다고 AMD의 Macri 씨는 분명히 말했다.

 "GPU 캐시의 프로브는 시기가 익으면 구현한다. Kaveri에 이은 세대군 (generations)에서 실현되는 것으로 보는 것이 자연 스러울 것이다. 그것이 진화라는 것이다. 캐시 프로브는 CPU 코어끼리는 실현되고 있으며, (GPU 코어의 트래픽이 많아도) 프로브 필터에서 엑세스를 줄이는 것이 가능하다. Kaveri에서는 최초의 버전이기에 복잡성을 늘리는 것에, 한 획을 뺀 정도이다. MMU에 대해서도 같다. 미래의 버전에서는 해결되어 블로킹이 발생하지 않도록 될 것이다 "(Macri 씨).

 AMD의 향후 APU에는 이 외에 GPU 컴퓨트 컨텍스트 스위칭이나 그래픽 처리의 선점(Preemptive) 작업 전환이 더해진다. GPU 컴퓨트의 컨텍스트 스위칭은 GPU의 컨텍스트 중 그래픽과 컴퓨트를 분리, 컴퓨팅 컨텍스트만을 메모리에 저장하는 것으로, 신속한 컨텍스트 스위칭을 커널 실행 도중에도 할 수 있도록 한다. 이것도 더 세밀하게 작업 전환을 실현하기 위한 필수 기능이다.

 그 위에 앞으로는, APU의 궁극의 과제인 메모리 대역의 확장이 기다린다. AMD는 스택 메모리의 JEDEC (반도체의 표준화 단체) 규격인 "HBM (High Bandwidth Memory)"에 열심히 몰두하고 있다. Intel이 자사 개발 eDRAM "Crystalwell"로 실현한 것 같은 초 광대역 액세스를 표준 메모리로 실현한다. 메모리 대역의 제약이 느슨해지면 AMD는 APU의 GPU 코어를 공정 미세화와 함께 강화하기 쉬워진다.

 

2014년 1월 29일 기사

 

 

[분석정보] AMD가 발표한 메인 스트림 APU Llano의 아키텍처

 

 

[분석정보] AMD GPU 통합 CPU Llano의 CPU 코어 기술을 발표

 

 

[분석정보] AMD가 확장판 K10 코어 기반의 APU Llano 를 첫 공개

 

 

[분석정보] 보여진 AMD의 차기 CPU Llano의 실상

 

 

[분석정보] 메모리가 큰 벽이 되는 AMD의 퓨전 (FUSION) 프로세서

 

 

[정보분석] CPU와 GPU의 메모리 공간을 통일하는 AMD의 hUMA 아키텍처

 

 

[분석정보] AMD의 차세대 APU Kaveri (카베리)는 아키텍처의 전환점

 

 

[CES 2014] AMD 차기 APU "Kaveri"의 개요 및 성과를 공개

 

 

[벤치리뷰] 아키텍처를 쇄신한 A10-7850K 벤치 마크 보고서

 

 

[벤치리뷰] 4세대 APU 카베리 성능과 전력

 

 

[분석정보] GPU 컴퓨팅 기능을 강화한 Skylake의 GPU

 

 

[분석정보] 인텔의 차세대 마이크로 아키텍처 스카이레이크

 

 

Haswell과 Broadwell, DirectX 12관련의 중요한 차이가 있다

 

 

[분석정보] 인텔 데스크탑 eDRAM 버전을 포함한 브로드웰 패밀리 설명

 

 

[분석정보] 라라비 (Larrabee)의 비장의 카드 공유 가상 메모리

 

 

[분석정보] 테라 바이트 대역의 차세대 메모리 HBM이 2015년에 등장

 

 

[분석정보] 하스웰 eDRAM에 JEDEC 차세대 DRAM으로 대항하는 AMD의 메모리 전략

 

 

[분석정보] CPU와 메모리의 속도 차이를 해소하는 캐시의 기초지식

 

 

[분석정보] AMD가 ISSCC에서 Steamroller 코어의 개요를 발표

 

 

[분석정보] Steamroller (스팀롤러) 가 사라진 AMD 로드맵의 변화와 차세대 게임기의 행방