Featured image of post Nvidia graphics processing units : 그래픽 카드 성능표

Nvidia graphics processing units : 그래픽 카드 성능표

http://en.wikipedia.org/wiki/Comparison_of_Nvidia_graphics_processing_units

일단 원하는 내용은… Geforce 7600 GT 와 6600 이므로.
 메가(Mega : 100만) 기가( Giga : 10억) 테라(Tera : 1조)

일반적으로 퍼져있는 6600 GT를 최소로 봤을때

vertex 처리 속도는 초당 0.375 GV (기가 버텍스?) …
1기가를 10억개라고 보았을 때, 초당 3억 7천 500만 버텍스 처리 가능. 
30프레임이 나와야 하므로 0.375 를 30으로 나누면 초당 처리할 수 있는 버텍스는 0.0125 기가 버텍스.
즉 1,250만 개의 버텍스( 12.5M , 12500k Vertex ) 를 1/30로 처리할 수 있다는 말입니다. 

그리고 무식하게 3개의 버텍스가 1개의 폴리곤을 만든다면,  12,500,000/ 3 = 4,166,666
즉 416만 트라이앵글을 처리할 수 있다는 말입니다. 하지만 보통 스트립 처리하게 되면, 심한 경우 버텍스 1개당 폴리곤 1개가 생성될 수도 있으므로 1,000만 폴리곤 내외까지는 허가할 수 있으리라고 보이는군요.
(10M,10,000k Tris)

픽셀은 2기가 픽셀을 초당 처리 가능. 20억개이므로 약 6천7백만 픽셀을 1/30에 처리 가능.
픽셀 처리는 다양한 요소가 있습니다만, 특히 알파 블렌딩과 해상도에 영향을 많이 받는 편입니다.
그러므로 뭐 여기까지. (67M Pixel)

텍스쳐는 4기가를 1초에 처리 가능. 그렇다면 0.133 기가를 1/30초에 처리 가능.
약 133 메가 처리가 가능합니다. (133.3M texture)  

즉 6600에서의 최소인 그냥 6600으로 계산해 보면,
Vertex : 0.225 GV
Tris :
Pixel : 1.2GP
Texture : 2.4G
이므로


7600 GS로 계산해 보면


7600 GT 80nm 로 계산해 보면 (숫자 높은것)

참고
설명이 잘 된 zupet 님 글

http://www.gpgstudy.com/forum/viewtopic.php?topic=2800

안녕하세요. 매크로 없는 메비~랍니다.

Vertex Cache란 그래픽 카드의 GPU 내부에 있는 자그마한 캐쉬로 Vertex 정보들을 일정기간 동안 보관해주는 영역입니다. 이 부분은 그래픽카드마다 크기가 다른데 적게는 4개많게는 수십개의 Vertex 정보를 LRU 방식(을 주로 쓴다고 아네요.)으로 관리하는 캐쉬입니다. 그래서 최근에 접근했던 Vertex 정보를 메모리에서 읽어오지 않고 바로 캐쉬에서 불러다 쓰도록 해서 메모리 접근이나 TnL에 대한 패널티를 최소화 시킬 수 있는 부분이죠.

Strip 와 비슷한데 Strip는 이전에 읽었던 2개의 Vertex를 활용해서 1개의 추가 Vertex 정보만 읽어오면 새 폴리건을 그릴 수 있게 되는 것에 반해서 최적화가 잘되었을 경우 이러한 것보다 더 최적화가 되어서 1개의 삼각형당 0.7~0.8개의 Vertex 정보만 읽어오고도 그릴수도 있게 됩니다. 어떻게보면 신기한데 꽤 효과가 있고 그러한 것이 Optimized Mesh론 예제로 DX 예제에 나와 있습니다. (항상 적용되는 것은 아니지만 효과는 있죠.)
http://research.microsoft.com/~hoppe (에서 Mesh Optimization 참고)

Fill Rate 란 그래픽카드의 픽셀 채우기 능력을 가르킨다고 보면 정확합니다. 저는 여기서 조금 더 확장해서 Fill Rate 의 한계를 주는 여러가지 요소를 모두 가르키는 용어로 쓰고 있지만 일단 Fill Rate란 그래픽 카드가 비디오 메모리에(Target Surface에) 얼마나 많은 점을 찍을 수 있느냐의 수치를 가리킵니다.

가령 폴리건이 적은 경우에도 화면을 채우는 면적이 많을 경우 Vertex 정보를 처리하는 것보다 픽셀을 그리는 능력에서 파워가 부족하게 됩니다. 고급 그래픽 카드의 경우는 이러한 픽셀을 그리는 능력(Fill Rate)이 뛰어나고 메모리 대역폭이 넓기 때문에 크게 신경을 쓰지 않고 빠른 3D 출력이 가능하지만 성능이 떨어지는 그래픽 카드들의 경우 이러한 수치가 급격히 낮아집니다.

가령 Texture의 크기에 따라 Fill Rate가 크게 영향을 받을 수 있습니다. 작은 삼각형을 그리는데 큰 텍스쳐(512 * 512)를 사용해서 축소해서 그림을 그리게 되면 20 픽셀짜리 삼각형 하나를 그리기 위해서 그래픽 카드는 1MB 짜리 텍스쳐를 랜덤하게 접근하여 데이터를 읽어오게 됩니다. 일단 메모리는 Random Access 지만 Random 하게 접근하기 위해서는 상당한 패널티가 주어질 수 있습니다. 따라서 작은 삼각형이 1MB 의 공간을 랜덤하게 접근해서 데이터를 읽어올 경우 20픽셀어치의 텍스쳐만 필요하다고 하지만 경우에 따라서는 1MB 의 텍스쳐 데이터를 모두 읽어올 수도 있습니다.

또 그 반대의 경우로 화면에 어떤식으로 데이터를 접근하냐에 따라 크게 달라질 수 있습니다. 가령 알파 블렌딩을 적용한 1600 * 1200 짜리 텍스쳐를 통채로 화면에 덥어 씌운다고 생각해봅니다. 그럼 일단 1600 * 1200 만큼 화면 데이터를 읽어와야 하고(7.68MB) 알파 블렌딩을 한 다음 다시 그만큼 데이터를 써 넣어야 합니다. 텍스쳐는 1MB 짜리를 읽어서 1600 * 1200에 전부 덮어 씌운다고 하면 7.68 * 2 + 1 = 16.36MB/Frame 만큼의 데이터가 메모리를 통해서 읽고/씌여져야합니다.

화면 전체를 덥는 텍스쳐는 고작 2개의 삼각형이지만 16GB/s의 대역폭을 갖는 그래픽 카드에서 저러한 작업을 시키면 무려 1ms의 시간을 저 한장을 씌우는데 사용하게 됩니다. 만약 반투명을 잔뜩 쓴 이펙트를 화면 전반에 걸쳐서 덕지덕지 붙이게 되면 이펙트만으로 프레임이 급속도로 떨어지게 됩니다. 이러한 경우가 자주 있는 것은 아니지만 캐릭터가 마법을 쓰거나 스킬을 쓸때 전 화면이나 큰 면적의 알파 블렌딩을 두세겹씩 겹쳐쓰는 경우는 자주 볼 수 있습니다. 또한 전화면 파티클 같은 경우도 같은 결과가 나오겠죠.

조금 일반적인 예를 들어보자면 10* 10짜리 공간을 채우는 2개의 삼각형들로 화면을 가득 채운다고 생각해 봅니다. 그럼 1600 * 1200 짜리 화면을 채우기 위해서는 38,400 개의 삼각형이 필요하게 됩니다. GeForce FX 5950 의 경우 3.8GTexel/s 이므로 Fill Rate로 계산을 하면 이러한 작업을 초당 1979 번 정도 수행할 수 있습니다. (빠르다 -_-a ) 그런데 그에 비해서 이러한 화면을 그리는데 들어가는 삼각형은 약 76 M Tri/s 정도가 됩니다. Strip 로 전부 그려진다고 하면 거의 1 Vertex/Triangle 이 되고 (최적화될 경우 그것보더 덜 필요하죠) 그럼 76MVertex/s 가 되는데 5950의 Vertex 처리 능력은 356M Vertex/s 나 됩니다. 그렇다면 Vertex 처리기의 약 1/5의 성능만을 쓰고 Fill Rate에 제한을 받아버리는 결과가 나옵니다.

Fill Rate는 생각보다 민감한 문제입니다. 고화질 텍스쳐를 위해서 텍스쳐 해상도가 늘어나고 많은 데이터에 접근하게되면 데이터에 접근하는 만큼 대역폭. Fill Rate가 제한을 받게 되니까요. Z 버퍼에 접근하는 것도 대역을 소모하게 되고 텍스쳐 한장한장이 대역폭을 일정량 이상 먹게 되니 요즘의 3D는 삼각형 숫자보다는 Fill Rate 쪽에 더 민감하다고 생각해야 합니다.

근데 1600*1200 이면 1,920,000 픽셀이고, 한 픽셀당 24비트라고 하면 46,080,000 비트가 되고,
이걸 메가로 환산하면 5.493164 메가바이트(MB)  가 되지 않나요? 어째서 7.68 메가가 되지요?
알파 블렌딩이니까 32비트로 계산해야 하는걸 잊었었네요 :) 감사합니다 JOHN_DOE 님.

Hugo로 만듦
JimmyStack 테마 사용 중