1.jpg

 

지포스 GTX 970

 

지포스 GTX 970에서 비디오 메모리의 사용량이 3.5GB를 넘으면 메모리 버스의 대역폭이 크게 떨어지는 문제가 발생하고 있습니다. 여기에선 NVIDIA 본사에서 GPU 개발 부문의 수석 부사장 직을 맡은 Jonah M.Alben과의 전화 통화에서 들은 설명을 요약하고자 합니다.

 

이미 알고 계시겠지만 우선 지포스 GTX 970에 무슨 일이 있는지를 정리해 보도록 하지요.

 

 

지포스 GTX 970의 올바른 스펙이 분명하게 밝혀지다


지포스 GTX 970에서 그래픽 메모리 대역폭을 직접 테스트하면, 사용량 3.5GB를 경계로 성능이 크게 줄어들게 되는데요. 그럼 왜 이런 현상이 생기는 것일까요?

 

2014년 9월에 지포스 GTX 980과 GTX 970이 같이 발표됐을 때, NVIDIA는 두 제품이 모두 2세대 맥스웰 아키텍처를 바탕으로 한 GM204 코어를 사용하는 GPU라 했습니다.

 

쉐이더 프로세서인 CUDA 코어의 수는 GM204의 풀스펙인 GTX 980에서 2048개, 하위 모델인 GTX 970에서 1664개이며, 그것과 동작 클럭을 제외한 다른 스펙은 전부 같다고 말한 바 있습니다.

 

2.jpg

 

Jonah M.Alben(SVP, GPU HW Engineering, NVIDIA).

 

그러나 사실 GTX 980과 GTX 970의 차이점은 CUDA 코어의 수가 차이난다는 것 외에도 다른 것이 있습니다. 이것이 3.5GB 문제에서 분명하게 짚고 넘어가야 할 부분이기도 합니다.

 

3.gif

 

이 표는 GTX 980과 GTX 970에 대해 처음에 공개됐을 때의 스펙과 이번에 업데이트된 스펙을 정리한 것인데, GTX 970은 L2 캐시의 용량이 GTX 980보다 256KB 적습니다. 또, L2 캐시에서 픽셀 데이터를 내보내는 역할을 하는 ROP 유닛도, L2 캐시에 맞춰 줄었습니다.

 

맥스웰 아키텍처는 16개의 ROP 유닛을 1개의 ROP 파티션으로 관리하는데, GM204의 경우엔 이 파티션이 4개 들어가 있지만 GTX 970은 1개의 파티션에서 ROP 유닛이 8개가 무효화돼 총 ROP 유닛 수는 56개입니다.

 

이 L2 캐시의 차이가 3.5GB 문제의 원인입니다. 실제로 무슨 일이 일어나는지를 보도록 할까요.

 

4.jpg

 

크로스바 인터페이스를 중심으로 하고 위쪽에 그래픽 처리를 담당하는 연산 유닛(SM), 아래에는 L2 캐시(L2), 메모리 컨트롤러(MC), 그래픽 메모리 칩(DRAM)이 구성됩니다.

 

여기서 크로스 바는 NVIDIA GPU에서 연산 유닛과 L2 캐시를 연결하는 구조를 가리킵니다. 출입구와 출입구를 연결하는 대량의 스위치라고 생각하면 될 것입니다.

 

여기서는 이 출입구를 포트라고 부르는데, 어떤 연산 유닛의 포트와 어떤 L2 캐시의 포트를 연결하고, 다른 연산 유닛은 또 다른 L2 캐시의 포트와 연결하는 식으로, 다수의 포트와 포트를 동시에 연결하는 것이 크로스 바의 특징입니다.

 

5.jpg

 

실제로는 SM이 16포트, L2개 8포트이기에 이보다 더 복잡하지만 여기에선 간단하게 묘사했습니다. 그림 중 주황색 점은 스위치가 켜져 있는 것을 가리키며 이렇게 스위치의 온/오프를 통해 SM과 L2를 연결하는 게 NVIDIA GPU에서 크로스 바의 역할입니다.

 

맥스웰 아키텍처에선 32개의 CUDA 코어가 스케줄러, 로드/스토어 유닛, 슈퍼 팩션 유닛과 함께 하나의 블럭을 형성하며, 그 블럭이 4개 모여 L1 캐시, 텍스처 유닛, 지오메트리 엔진인 폴리모프 엔진 3.0과 함께 맥스웰 스트리밍 멀티프로세서(SMM)를 구성합니다. 그리고 SMM이 4개 모여 미니 GPU인 그래픽 프로세싱 클러스터(GPC)를 구성하는데, GM204는 이 GPC가 4개로 구성돼 있습니다.


GTX 980보다 CUDA 코어 수가 384개 적은 GTX 970의 경우 SMM이 3개 적다는 것인데, 이는 4개 중 3개의 GPC에서 SMM이 하나씩 무효화된 것입니다. 이렇게 만들면 모든 GPC가 작동하도록 균형을 잡을 수 있다는 게 NVIDIA의 설명입니다.

 

6.jpg

 

위 그림에서 연하게 표시된 것이 무효화된 SMM이지요. 이렇게 설명한 것은 이번이 처음이며 사실 이는 3.5GB 문제와 직접적인 관계는 없습니다. 관계가 있는 건 이 그림에서 아래쪽 절반 부분입니다.

 

맥스웰 아키텍처에선 256KB를 단위로 하는 L2 캐시가 메모리 컨트롤러에 각각 연결된 뒤, 메모리 컨트롤러가 용량 512MB(4Gbit) GDDR5 SDRAM 메모리 칩과 연결되는 형식으로 돼 있습니다. 위 그림을 보면 2개의 L2 캐시가 2개의 메모리 컨트롤러 단위로 그룹을 이루는 걸 알 수 있는데 이는 메모리 인터페이스 64비트에 해당됩니다.

 

풀스펙 GTX 980에선 L2 캐시가 크로스바에 8개의 포트로 연결됩니다. 앞서 설명한 대로 각 포트는 동시에 SMM에 연결되기에 최선의 경우 8개의 포트가 동시에 SMM과 연결되며 8개의 GDDR SDRAM으로 총 4GB의 그래픽 메모리에 동시 접속 가능합니다. GTX 980의 경우 8포트를 동시에 써서 4GB의 메모리에 액세스하면 최대한의 메모리 대역폭이 나온다고 합니다.

 

7.jpg

 

그에 비해 L2 캐시의 용량이 풀스펙보다 256KB 적은 GTX 970의 경우 8블럭인 L2 캐시 중 1개의 블럭이 무효화됩니다. GM204는 L2 캐시가 1블럭 무효화되도 256비트 메모리 인터페이스를 실현해 GTX 970으로 판매할 수 있는 다이가 나오도록 L2 캐시와 메모리 컨트롤러를 가로 방향으로 연결하는 Buddy Interface를 씁니다. 이것은 제조상의 이유에서라고 할 수 있겠습니다.


이것은 케플러 아키텍처의 GPU에선 없던 구조로서 케플러 세대에선 제조의 문제로 인해 L2 캐시에서 동작하지 않는 다이가 1블럭이 생겼을 때, 해당 64비트 메모리 컨트롤러 자체를 무효화하지 않으면 GPU로 쓸 수가 없었습니다.

 

8.jpg

 

그에 비해 GTX 970에선 이 Buddy Interface를 사용해 L2 캐시가 1블럭 무효화 됐을 경우 남은 1블럭이 2개의 메모리 컨트롤러를 담당하도록 설계했습니다. 이 그림을 보면 L2 캐시가 2블럭이 무두 있는 곳에선 Buddy Interface이 무효화되며, L2 캐시가 1블록 비활성화된 곳에선 Buddy Interface가 활성화 됐음을 알 수 있습니다. 어느 L2 캐시가 무효화돼도 다이는 문제 없이 작동하는 설계라 할 수 있겠습니다.

 

참고로,크로스 바의 포트와 L2 캐시와 메모리 컨트롤러를 접속하는 버스의 대역폭은 GDDR5 SDRAM보다 2배의 스펙을 지니고 있습니다. 그래서 L2 캐시가 1블럭 비활성화되도 L2 캐시와 크로스바 사이의 대역폭에서 병목 현상이 생기진 않습니다.

 

그럼 어떤 때 문제가 생기느냐 하면, 4GB인 그래픽 메모리 전역에 병렬로 액세스하는 경우입니다.

 

GTX 970의 경우 크로스바와 L2 캐시를 연결하는 포트는 7개밖에 없어 7개의 포트를 병렬로 연결해 총 4GB의 그래픽 메모리 전부에 액세스하지만, 이 때 Buddy Interface를 통해 접속되는 DRAM이 전체의 발목을 잡는 꼴이 되버립니다.

그래서 GTX 970은 7개의 포트 바로 아래에 총 3.5GB의 그래픽 메모리와 Buddy Interface로 연결되는 0.5GB 그래픽 메모리라는 식으로, 메모리를 2개의 세그먼트로 나눠 관리하고 있습니다. 이건 앞에서 설명한 그대로지요.

 

3.5GB의 그래픽 메모리의 경우 7개의 포트를 평범하게 구동할 수 있으니 최대 대역폭이 나옵니다. 허나 남은 0.5GB의 경우 L2 캐시를 1블럭밖에 차지하지 못하기에 3.5GB에 비해 1/7 정도의 대역폭만 나옵니다. 그러나 두개를 서로 분리했기에 3.5GB를 쓸 때 발목을 잡는 일은 없습니다. 이것이 세그먼트 분리의 장점입니다.

 

덧붙여서 NVIDIA는 3.5GB를 Lower segment, 0.5GB를 Upper segment라 표현하는데 이는 문자 그대로 0.5GB가 상위 메모리 주소로 할당된다는 것입니다. 그래픽 메모리는 하위 메모리 주소를 우선적으로 사용하며, 대역폭이 1/7밖에 안 되는 상위 세그먼트를 쓰는 경우는 비교적 적습니다.

 

9.jpg

 

이것이 제대로 된 GTX 970의 블럭 다이어그램입니다. 반투명으로 표시한 부분은 발표 시점에 제대로 알려졌던 무효화 부분이며, 빨간색으로 표시한 부분이 이번에 알려진 무효화 블럭입니다.

 

 

왜 실제 게임에서는 3.5GB 문제가 잘 드러나지 않는가


이것이 3.5GB 문제의 원인입니다. 물론 이것만으로는 이해가 잘 안 되는 부분도 있습니다. 에를 들면 상위 0.5GB에서 메모리 버스 대역폭이 저하하는데도 불구하고 실제 게임에서 성능 저하가 GTX 970의 몇%(NVIDIA는 1~3%라 이야기하며 실제 테스트에선 3~4% 정도)에 그치느냐는 점입니다.

 

이는 앞서 설명한 메모리 관리법을 보면 잘 알 수 있습니다. 실제로 Upper segment에 해당되는 0.5GB를 쓰는 경우가 드물며, 여기에 대해 NVIDIA는 가급적이면 3.5GB를 쓰도록 드라이버에서 설정돼 있다고 밝혔습니다. 일부 소문에선 이러한 조치가 지포스 347.25 드라이버 이후에 들어간 게 아니냐는 지적도 있으나, NVIDIA는 GTX 970이 나왔을 때부터 일관되게 설정된 것이라 말합니다.

 

"MOD를 대량으로 불러들여 메모리 사용량이 높은 게임에서도 3.5GB 문제는 최대한 드러나지 않도록 설계했습니다. 만약 저희가 설명한 것 그 이상으로 성능이 크게 떨어진다면 가르쳐 주세요. 그건 드라이버 레벨에서 대응이 가능할 것이라 봅니다."

 

그럼 NVIDIA는 왜 30일이 되서야 리뷰어즈 가이드의 스펙 정보를 업데이트한 것일까요. 여기에 대해 일각에선 12월의 판매 경쟁에서 앞서기 위함이라는 말도 있으나 NVIDIA는 그것을 부정했습니다.

 

"제가 이 문제를 알게 된 것이 3주 전의 일이며 NVIDIA의 제품 마케팅 팀이 대책을 세운 것도 1주 반 정도 전의 일입니다. GTX 970의 스펙이 틀린 건 완벽하게 우리의 실수입니다. 케플러에서 맥스웰로 가면서 Buddy Interface를 쓰는 등 메모리 쪽의 스펙이 바뀌었지만 그것이 엔지니어링 팀에서 마케팅 팀으로 잘 전달되지 않았고, 마케팅 팀이 메모리 쪽의 스펙은 케플러에서 변하지 않았다고 판단해 잘못된 정보가 나왔습니다. 정보의 교환이 제대로 되지 않아 생긴 일입니다."

 

 

NVIDIA. 가능한 이번 문제에 대응할 것


이유야 어떻든 간에 GTX 970은 2014년 9월에 발표됐을 때와는 다른 스펙을 지닌 GPU라는 게 밝혀졌습니다. L2 캐시의 용량은 2048KB가 아니라 1792KB이며, ROP 유닛 수는 64개가 아니라 56개입니다. 대충 4개월 동안 NVIDIA는 잘못된 스펙에 따라 GTX 970을 마케팅했고 GPU를 출하했다는 이야기입니다.

 

다만 여기에도 복잡한 부분이 있습니다. NVIDIA의 공식 제품 정보 페이지를 보면 L2 캐시 용량이나 ROP 유닛 수가 공개되지 않았습니다. 어디까지나 리뷰어를 위한 참고용 정보입니다. 또 앞서 말한대로 메모리 컨트롤러는 줄어들지 않았으니, 그래픽 메모리 용량 4GB, 메모리 인터페이스 256비트라는 표기 스펙이 잘못된 것은 아닙니다.

 

물론 GTX 970 사용자가 이런 설명을 납득할 수 있는지는 다른 이야기지만요.

 

10.jpg

 

그리고 이 문제는 보다 일찍 발견될 수 있던 것이기도 합니다. CUDA의 개발 키트에서 CUDA 기기의 성능을 조사하는 명령인 devicequerydrv가 GTX 970이 나왔을 때부터 제대로 된 L2 캐시 용량(1835008bytes=1792KB)을 보고했기 때문입니다. NVIDIA의 마케팅 팀이나 매체에서 이걸 발견했다면 보다 빠르게 3.5GB 문제가 알려졌을지도 모릅니다.

 

전화 통화의 끝부분에서 Alben은 "GTX 970은 가격 대 성능비가 뛰어난 제품이며 우리가 내세우는 성능은 틀림 없이 제공한다고 확신합니다. 이번에 3.5GB 문제로 사용자들이 걱정하도록 만들었으나 이 문제에 대해 가능한 진지하게 대응하는 것이 우리의 책임이라 생각합니다"고 밝혔습니다.

 

앞으로 사용자에 대한 지원은 엔지니어링을 총괄하는 직책에 있으니 자신의 분야가 아닌지라 말할 것이 없다고 밝혔으나, 기술적인 의문의 경우 사용자들에게 가능한 많은 정보를 공개하겠다고도 했습니다. 

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