컴퓨터 관련 글

필레이트에 대해서

Bret Hanson 2013. 5. 22. 21:24

필레이트는 ROP 수와 클럭과 포멧의 버퍼 용량을 곱해서 나온 결과로 계산합니다. 그런데 필레이트는 메모리 대역폭에서 영향을 받는데 바로 포멧의 버퍼 및 블랜딩 입니다. FP16 64-bit 버퍼는 8Byte가 필요하기 때문에 Int8 32-bit 버퍼보다 대역폭을 두 배 정도나 잡아먹습니다. FP32 128-bit 버퍼, 이거는 할말이 없어서 그 포멧의 용량이 16Byte가 필요하기 때문에 32-bit 버퍼보다 대역폭은 무려 4배 정도나 잡아먹습니다. (살인적인 메모리 대역폭이 필요해서 괜히 FP32를 1/2(지포스는 1/4로 동작)로 작동한건 아니라는) 밑의 그림을 보시면 해외 사이트의 라데온 5870의 필레이트 벤치에서 램 클럭만 낮춰도 떨어지는 결과가 나왔는데, 특히 FP16과 블랜딩에서 대역폭에 민감한 결과가 나왔으니까요.(블랜딩은 아마도 ROP의 처리 과정에서 레이턴시로 인해서 아주 약간 떨어진걸로 보임) 해외 리뷰의 결론은 3DMark Vantage - Color Fillrate에서 메모리 대역폭의 한계라고 하더군요. 참고로 3DMark Vantage의 Color Fillrate는 FP16 블랜딩을 사용합니다.

 

ps. 680이 7970과 동일하게 나온건 아마도 클럭 때문인 걸로 알고 있지만, 지포스의 ROP의 특성상 컬러 압축 및 블랜딩 효율이 좋은 구조임.

 

 

 

확실히 블랜딩에서 라데온은 지포스보다 대역폭에 더 민감합니다. 왜냐하면 밑의 그림에서 벤치 결과를 보면 알겠지만, GTX 680의 블랜딩이 필레이트와 동일하게 나오는 반면(Int8, FP16) HD7970은 대역폭이 높여야 겨우 680과 비슷한 수준으로 나옵니다. 7870과 7850은 거의 똑같이 나오는데 바로 동일한 메모리 대역폭으로 인한 한계 때문인것 같습니다.

 

한가지 알게된게 필레이트 작동 방식을 보니 라데온은 FP16에서 풀스피드로 작동하고, 지포스는 FP16에서 1/2로 작동하더군요. 제 생각에는 지포스가 1/2로 작동하게 되는 이유가 아마도 메모리 대역폭의 한계 때문인것 같습니다. 예전의 R6xx 계열도 역시 FP16을 1/2으로 작동했지만, R7xx 계열부터 현 세대까지 FP16을 풀스피드로 작동하게 됩니다. R7xx 계열은 GT200 보다 ROP 수가 적다보니 FP16을 풀스피드로 작동하는건 당연하니까요. 라데온의 FP16 포멧이 풀스피드로 작동하게 되다 보니 클럭보다 메모리 대역폭에서 먼저 한계가 오는게 이유이긴 합니다. (5870을 통해서 확실히 입증됨) 만약 ROP 32개에 FP16을 풀스피드에 클럭을 1GHz로 작동해버리면 메모리 대역폭이 이론상으로 256GB/s가 필요하게 되니까요.

 

그런데 FP32 블랜딩에서는 지포스에서 상당한 약세로 나온 결과가 나왔는데, 아마도 ROP 유닛에 있는 FP32 부분의 면적을 줄여서 그런건 아닐까 합니다. 사실 그 현상은 G80때부터 있었던 현상이라 지포스 다음세대의 ROP는 어떻게 강화할지가 궁금하군요.

 

ps. 어짜피 FP32 블랜딩은 게임에서 잘안쓰이지만 FP16 블랜딩은 게임에서 자주 쓰임.

 

 

한가지 알게된게 480이 실제로 필레이트에서 5870보다 낮게 나오는 이유가 래스터 엔진의 전체 픽셀과 SM 갯수로 인한 병목현상인 것 같습니다. 원래 ROP가 48개에 클럭이 701MHz라 하면 이론상 필레이트가 33.6GP/s가 나오고 5870보다 높아야 되는데 실제로 그렇게 안나오는걸 봐서는 의아합니다. 460도 ROP가 32개지만 실제로 필레이트가 9GP/s 안팎으로 보면 이것도 역시 래스터 엔진과 SM 갯수로 인한 병목현상으로 보입니다. 680은 래스터 엔진의 전체 픽셀 수 및 SM 갯수와 ROP 수가 완전히 일치가 되어서 필레이트는 이론적으로 낼수가 있으까요. 그렇지만 Titan은 ROP가 48개인데도 불구하고 래스터 엔진이 5개이면서(40픽셀로 처리함) SM 갯수가 14개 밖에 되지 않으니 필레이트에서 왠지 병목현상이 생길것 같은 예감일것 같습니다.

 

※ 필레이트에서 980과 970의 격차가 심한걸 봐서는 SM 갯수로 인한 병목현상이 명확히 드러남.

※ 페르미 및 캐플러 아키텍쳐에서 픽셀 수는 SM 갯수의 의해서 좌우가 된걸로 알고 있지만, 아키텍쳐 구조를 보자면 SM이 래스터 엔진으로 거쳐서 다시 SM으로 거친 다음에 ROP로 가는 방식인것 같음.

※ 1060 같은 경우는 래스터 엔진이 2개이기 때문에 래스터 엔진 1개당 16 픽셀로 처리하기 때문에 실제 ROP 작동 갯수가 32개임.

※ GF104 같은 경우는 래스터 엔진이 2개이기 때문에 래스터 엔진 1개당 8 픽셀로 처리하기 때문에 실제 ROP 작동 갯수가 16개임.

※ 맥스웰부터는 래스터 엔진 1개당 16 픽셀로 처리함.

 

 

ROP의 특성상 방대한 비디오 램 대역폭을 엑세스하는 방식이라 대역폭 문제는 어쩔수 없나 봅니다. 왜냐하면 지오메트리를 처리하고 처리된 삼각형을 픽셀로 변환시키고(트라이앵글 셋업), 래스터라이저에서 픽셀(2D)로 변환시킨 다음, 텍스쳐 맵핑, 세이더 처리 등을 하고 난뒤 ROP로 가게되고 최종적으로 비디오 메모리(프레임 버퍼)로 내보내게 됩니다. (메모리 쓰기에서 영향받음) 여기서 비디오 메모리로 내보낼때 필요한 대역폭이 나오게 됩니다.

 

ps. 원래 픽셀을 채울때 비디오 메모리로 내보내는데, 바로 여기서 '필레이트 = 대역폭'이란 공식이 나오게 된것 같음: 제가 터득한게 바로 이거였음.

 

XBOX 360의 eDRAM를 보면 알수 있는데 렌더링을 담당하는 역할을 하고 256GB/s의 엄청난 대역폭을 사용합니다.(AA, Z 버퍼 등은 메모리 대역폭을 소비함.

 

결국 필레이트는 ROP의 효율 및 대역폭 문제로 봅니다.(지포스의 SM 갯수도 포함) 대체로 필레이트의 병목현상의 요소는 이렇습니다.

 

- ROP 유닛 갯수로 인한 한계

- ROP 효율로 인한 한계

- 코어클럭으로 인한 한계

- 비디오 메모리 대역폭으로 인한 한계

- 페르미 기반에서 SM 갯수의 병목으로 인한 한계

- 포멧의 작동 방식으로 인한 한계(지포스는 FP16을 1/2로 동작, FP32를 1/4로 동작)

 

결론은 ROP 수를 무작정 늘리게 되면 메모리 대역폭이 따라가지 못하여 효율이 악화되어 다이 면적도 낭비가 됩니다. 그래서 대역폭 효율을 높이기 위해 컬러 압축 기술이 필요한 이유이기도 합니다. 그리고 맥스웰부터는 타일 렌더링 기술을 도입하여 대역폭 효율이 올라갔다는 점입니다.

 

※ 필레이트의 공식

비디오 램 대역폭 = ROP Units * GPU Clock * Color Format Buffer

 

R8G8B8A8(Int8) = 4Byte(LDR에서 자주 쓰이는 포멧) -> 게임에서 유사 HDR을 이 포멧을 쓰임

R11G11B10_FLOAT(FP10) = 4Byte(XBox360 및 DX 10에서 새로 추가된 저사양 32bit HDR 포멧)

R16G16B16A16_FLOAT(FP16) = 8Byte(HDR에서 자주 쓰이는 포멧) -> 이거 게임에서 자주 많이 쓰임

R16G16B16A16(Int16) = 8Byte(DX 10.1에서 새로 추가된 16비트 정수 포멧)

R32G32B32A32_FLOAT(FP32) = 16Byte(DX 10에서 새로 추가된 128bit HDR 포멧) -> 이거 게임에서 잘 안 쓰이고 컬러 압축 성능이 좋아야 함

 

UNORM: 부호가 없는 노멀 정수

SNORM: 부호가 있는 노멀 정수

 

※ 추가

GCN 1.1부터는 블랜딩 효율을 강화시켰는데, 밑의 그림을 보시면 알수 있습니다.

 

 

그림을 보시면 아시겠지만, 라데온의 블랜딩 효율은 지포스와 동일하게 나옵니다. FP16 및 모든 32비트 포멧을 전부다 강화했지만, FP32 블랜딩을 희생시켰으니까요. GT200부터 블랜딩 효율을 강화시킨 이후로 다른 포멧 부분을 강화시키지 않았는데(캐플러 계열부터 필레이트에서만 FP10을 풀스피드로 동작), 앞으로 나올 차세대 지포스는 왠지 블랜딩에서 부족한 포멧부분을 강화시킬것 같은 느낌이 들더군요.

 

이때까지 역대 라데온의 ROP 강화를 보자면, R7xx부터는 Alpha Fog를 없애고 Z/Stencil 유닛을 2배로 증가하고 AA 성능 개선 및 FP16을 풀스피드로 동작하게 됩니다. 라데온 5xxx 계열부터는 FP10을 풀스피드로 동작하게 되고(라데온 4xxx 계열은 FP10을 1/2로 동작), Cayman부터는 Int16 포멧의 강화 및 FP32-1,2ch 부분에서 풀스피드로 동작하게 됩니다. 7970의 등장으로 블랜딩 효율은 6970보다 높아졌지만 메모리 대역폭에 지나치게 의존적인 구조라서 지포스 보다 효율이 낮게 나오게 됩니다. 그래서 290x에서는 ROP의 2배 증가와 함께 블랜딩 효율을 강화시키게 됩니다. 미세 공정의 차세대 라데온에서 FP32 블랜딩만 강화시킬것 같은 생각이 들더군요.

 

그런데 이번에 나온 통가 코어는 GCN 1.2로 업데이트 하면서 컬러 압축 기술이 추가 되었다고 하네요. Hardware.fr 사이트의 285 벤치 결과를 보니 블랜딩 효율은 거의 타히티와 맞먹는 수준으로 나왔으니까요. 밑의 그림을 보시면 알겠지만, 필레이트에서는 클럭 차이로 인해 7870이 285보다 우위에 있음에도 불구하고 블랜딩 쪽에서는 285가 7870보다 훨씬 우수한 결과가 나왔으니까요. 게다가 FP16 블랜딩에서는 압도적으로 280x 보다 뛰어난 결과가 나오기도 하니까요.(FP32 블랜딩은 강화된 비중이 없다보니 대역폭 문제로 인해 타히티가 우위임) 또한 필레이트의 FP16에서 285가 280x와 맞먹는걸 봐서는 컬러 압축 기술 때문으로 추측이 됩니다.

 

 

또한 3DMark Vantage - Color Fillrate 벤치에서 확실히 진가가 드러나니까요. 통가가 기존의 770 및 280x를 압도하는 성능이 보이기도 하는데요. 대역폭에서 절대적인 영향을 미치는 이 항목에서 컬러 압축 덕분이니까요. 확실한건 4850에서는 메모리 클럭만 높여도 fps가 올라가지만 코어클럭만 높여도 fps가 전혀 올라가지 않는 반면, 560Ti는 컬러 압축이 들어가 있어서 동일한 메모리 클럭으로 코어 클럭을 높여도 fps가 약간 올라가는 구조가 되는건 이해가 갑니다. 즉 코어 클럭만 높여도 수치가 올라가고 대역폭에서 한계가 오면 상승이 안되지만, 코어 클럭을 높임과 동시에 메모리 클럭을 높이면 수치가 올라가는 현상이 생기더군요.

 

 

그런데 맥스웰 기반인 GTX 980에서는 놀라운 점이 있는데, 바로 3세대 델타 컬러 압축 기술입니다.

 



위의 그림을 보시면 알겠지만 기존의 페르미와 캐플러는 2:1 비율로 컬러 데이터를 압축하지만, 980에서는 8:1 비율로 컬러 데이터를 압축이 가능해집니다. 그러므로 필레이트가 요구하는 대역폭도 상당히 대폭 낮출수 있으니까요. 밑의 그림에 있는 필레이트 벤치에서 확실히 드러납니다.

 

 

980의 고클럭 덕분에 68GP/s 까지 이르렀는데, 32bit 컬러 포멧 기준으로 해서 68GP/s로 동작하기 위해 필요한 대역폭은 272GB/s 정도가 필요한데 컬러 압축으로 인해 필레이트 성능이 이제야 제성능을 낼수 있으니까요.

 

한가지 알게된 점은 980과 970의 격차가 확실히 드러나는데, 원인은 970의 컷팅된 SM 갯수 때문에 그런것 같습니다. 이게 페르미 때부터 가졌던 고질적인 문제지만, 그렇다고 실게임에서는 이처럼 영향을 받지가 않으니까요. 델타 컬러 압축이 존재하는 이유가 ROP 수가 늘어나면 대역폭이 상당히 요구되기 때문에 그렇습니다. 그러므로 메모리 대역폭 이용률을 높여 텍스쳐 메모리 성능 향상 등에서는 상당히 도움이 되니까요.(압축비가 높아져야 하는 이유도 역시 존재함) Color Fillrate 벤치에서 확실히 입증된게 이것 때문이니까요. 밑의 그림을 보니 290x가 블랜딩 효율을 강화했음에도 불구하고 285보다 쳐지는건 컬러 압축 기능이 없어서 대역폭 만큼 나오기 때문입니다. 처음엔 블랜딩 강화로 인해 대폭 높아지는줄 알았는데 나중에 가서야 컬러 압축 기술 덕분에 성능 향상할수 있었다는걸 알게되네요. 컬러 압축 기술은 생각 보다 대단한 기술로 보이더군요. 그러므로 ROP 수를 증가할려면 고대역폭 및 압축 성능을 대폭 증가한 상태에서 이루어져야 되니까요. 압축은 연산 성능을 받쳐주지 않으면 안되니까요. 파스칼 때부터는 4세대 델타 컬러 압축을 도입했는데, 이것은 컬러 압축 성능을 강화시킨게 핵심입니다. 왜냐하면 파스칼이 공정 미세화로 인해 전력이 줄어들 만큼 클럭이 대폭 높임으로 인한 필레이트 상승에서 비롯된 것입니다. 클럭이 높아짐에 따라 필레이트가 높아졌으니 이에 요구하는 대역폭이 증가하기 때문에 컬러 압축 성능을 강화시킨게 파스칼의 주 핵심입니다.

 

 

다음, 필레이트에서 필요한 대역폭 요구량은 밑의 그림에 있습니다.(일본 사이트 자료에서 퍼왔음) 필레이트에서 요구하는 대역폭은 제가 생각했던거와 똑같이 일치가 되네요. 차세대 콘솔에서도 컬러 압축 기술이 있으면 대역폭 효율이 좋아질것 같은 생각이 들더군요. 특히 모바일 및 APU에서는 더욱더 중요합니다.