올바른 그래픽 카드 벤치마크 방법

올바른 그래픽 카드 벤치마크 방법



그래픽 카드는 성능뿐만 아니라 기능 평가도 중요하다. 이것은 모든 그래픽 카드가 모든 기능을 100% 지원하는 것이 아니며, 게임이나 기타 프로그램의 지원은 가능하지만 이펙터(Effector) 및 높은 화질을 얻기 위한 기능의 차이로 화질에서 많은 차이를 가지게 된다. 3차원 그래픽의 각 부분별로 지원 기능에 대한 차이와 평가 방법을 고려해 보도록 하겠다.
 


3차원 그래픽 성능 측정을 위한 기본 상식


3차원 그래픽의 처리 순서는 4단계로 구분을 한다. 폴리곤의 변환 처리를 지원하는 지오메트리 연산 부분과 초기 텍스쳐를 폴리곤에 맞도록 변환하는 필터링 그리고 폴리곤을 픽셀로 분리하여 텍스쳐를 대치시키는 맵핑 그리고 마지막 단계는 최종적으로 얻어진 텍셀(Texture mapped pixel, TEXEL)을 프레임 버퍼에 출력하고 이때, 각종 효과를 부여하는 버퍼렁(Buffering) 단계이다. 각 단계는 처리 방법과 기능에 따라서 다시 여러 단계로 구분하게 된다.
 


지오메트리(Geometry)


Transformation, Lighting, Clipping, Setup 단계로 구분한다. Transformation은 폴리곤을 시점의 위치에 맞게 회전/이동/확대/축소 연산을 의미한다. 최종적으로 시점 벡터와 폴리곤의 Z 벡터를 일치시키게 된다. Lighting은 폴리곤과 광원의 위치와 방향/특성 그리고 색상의 정보를 폴리곤의 각 꼭지점(Vertex)에 부여해주게 된다. 광원 특성은 최종적으로 폴리곤을 픽셀로 분리하는 과정에서 각각의 픽셀의 위치에 따라서 세부적인 밝기를 부여하게 된다. 광원 처리를 마치고 나면 Clipping 작업이 이어진다. 모든 폴리곤이 화면에 출력되지는 않으며 일반적으로 화면의 크기에 따라서 보이지 않는 폴리곤이나 부분적으로 잘려진 폴리곤이 존재하게 된다. 따라서 모든 폴리곤이나 폴리곤의 전체를 모두 처리할 필요가 없이 선택하는 작업이 필요하게 된다. Clipping 작업에서는 화면 밖의 폴리곤을 제거하고 또한 화면에 걸쳐진 폴리곤을 분리하는 연산을 수행하게 된다. Setup은 최종적인 폴리곤을 그래픽 카드에서 다음 작업의 처리를 위한 픽셀 분리 작업(Rasterization), 배면 폴리곤 제어(Culling), 사각형 이상의 폴리곤을 삼각형으로 변환(Tessellation)하는 작업을 거친다.


이러한 처리 과정이 순서적으로 일어나지는 않는다. 경우에 따라서 Clipping과 Culling 작업을 먼저 처리하여, 실제 변환처리할 폴리곤의 개수를 최소화시키고 이것에 Lighting, Tessellation, Rasterization 과정을 거치는 경우도 있기 때문이다.
 


필터링(Filtering)과 맵핑(Mapping)


필터링과 텍스쳐 맵핑은 동치에 처리되는 작업이다. 먼저, 픽셀로 변환된 폴리곤에는 사용할 텍스쳐 번호와 텍스쳐의 상대적인 X/Y 위치 그리고 방향 벡터를 가지고 있다. 이 정보를 근거로 픽셀이 위치는 텍스쳐 내의 상대적인 위치를 계산하고 이를 기초로 텍스쳐에서 맵핑에 사용할 텍스쳐 컬러 정보를 얻어서 픽셀에 대입시키는 작업이다. 이때, 폴리곤의 크기에 맞게 텍스쳐의 크기도 축소/확대의 과정이 필요하다. 일반적으로 비트맵 이미지를 축소/확대하게 되면 화질이 감소되게 된다. 화질의 감소를 최소화하기 위한 각종의 처리 기법이 사용된다. 대표적으로 Point Sampling은 단순하게 픽셀을 반복하거나 선택적으로 취하는 방법을 사용하며 기본적인 비트맵 그래픽의 확대 또는 축소 기법으로 화질이 가장 떨어지는 방법이다. Linear Filtering 방식은 픽셀을 새로 만들 때, 취해지는 텍셀의 위치에 따라서 인접한 두 개의 픽셀에 대하여 가중 평균을 사용하는 방식이다. 일반 적으로 확대 과정에서는 부드러운 화질을 얻을 수 있지만 선명도가 급격히 감소하는 특징을 가지고 있다. Tri-linear Filtering은 MIP Mapping 과정에서 적용하는 방식으로 폴리곤의 크기보다 큰 텍스쳐와 작은 텍스쳐를 각각 Linear Filtering으로 픽셀을 생성하고 이 픽셀을 폴리곤의 위치에 따라서 Linear 필터링하는 방식이다. Anisotropic filtering 방식은 두 개 이상의 픽셀범위를 다중 인터폴레이션 하는 방법으로 기존의 선형 필터링에 비하여 연산량은 많아지지만 보다 정확한 픽셀을 새로 유추하여 처리하기 때문에 선명도가 뛰어난 장점을 갖게된다.


밉맵핑은 여러 개의 텍스쳐를 마련하여 폴리곤에 가장 근접한 텍스쳐를 이용하여 맵핑 처리를 하는 방법으로 필터링 과정에서 비트맵의 크기 변화를 최소화하여 화질의 저하를 최소화하는 방식이다. 이 방식에는 텍스쳐의 확대와 축소에 각각 따른 알고리즘을 적용할 수 있다. 즉, Linear MIP Linear 또는 Nearest MIP Linear 등이다. 따라서 성능과 화질의 최적의 위치를 지원할 수 있다. 참고로 최근 그래픽 프로세서들은 MIP Mapping에 최적화된 성능을 발휘할 수 있도록 코어가 설계되어 있다. 따라서 일반 맵핑의 경우에 적절한 성능을 발휘하지 못한다. 이것은 텍스쳐의 크기가 폴리곤의 크기에 비하여 2배 이하의 크기와 1/2 이상의 크기만 필터링이 가능하기 때문이다. 예를 들어 nVIDIA RivaTNT 등에서 보면 Auto MIP Map Generation 기능을 가지고 있으며, 이것은 RivaTNT 제품군에서는 2배 이상의 텍스쳐는 두 번의 필터링을 거쳐야 하는 문제점 때문이다. 이처럼 텍스쳐의 크기를 제한하게 되면 연산에 필요한 내부 렌더링 코어의 구성이 보다 간단해질 수 있기 때문에 기본 성능의 향상에 많은 도움이 될 수 있다.



버퍼링(Buffering)


버퍼링이란 기본적으로 렌더링 과정을 거쳐서 생성된 픽셀을 프레임 버퍼에 출력하는 기능을 말한다. 이때, 깊이 버퍼의 정보에 따라서 픽셀의 선명도를 변화시키는 안개 효과(Fog Effect)나 밝기를 변화시키는 큐잉(Cueing)과 같은 이펙터가 처리된다. 또한 픽셀이 프레임 버퍼에 출력되기 위해서는 픽셀의 깊이 값이 이미 프레임 버퍼에 출력되어 있는 픽셀에 비하여 작아야 된다. 이것은 3차원 공간상에서 물체는 앞에 존재하는 물체에 의해서 뒤에 있는 물체가 가리워져 보이지 않는 영역이 존재하며, 이러한 가리워진 면이나 선을 처리하기 위해서 사용된다. 모든 그래픽 보드가 깊이 버퍼를 사용하지는 않으며 NEC/VideoLogic PowerVR 시리즈에서는 한계 영역 렌더링 방식으로 깊이 버퍼를 필요로 하지 않는다. 최근 등장한 방식으로 다중 프레임 버퍼와 프레임 연산 기능이 이슈화되고 있으며 3Dfx사에서 T-buffer라는 명칭으로 지원되고 있다. 이 방식에서는 생성되는 프레임들이 여러 단계에 거쳐서 각각의 버퍼에 저장이 되고 이 버퍼는 각종 연산을 통해서 새로운 이미지가 얻어지며, 최종적으로 얻어진 이미지가 화면으로 출력된다. 따라서 하나의 게임 화면을 얻기 위해서는 여러 장의 프레임을 만들어야 하기 때문에 상대적으로 일반 처리 방식에 비하여 프레임 성능이 낮다. 하지만 멀티 프레임 버퍼를 기능을 이용하는 경우에 모션 블러, 안티 얼리어싱, 포컬 이펙터가 지원이 되며 이것은 낮은 해상도에서도 높은 해상도에서 얻어지는 그래픽 화질을 얻을 수 있고 낮은 프레임 레이트에서도 높은 프레임 레이트의 그래픽과 같은 부드러운 화질을 얻을 수 있기 때문에 멀티 프레임 버퍼에 으해서 성능이 낮아져도 크게 문제될 것이 없다. 오히려 각종 디지털 이펙터를 통한 보다 고급 이미지를 얻을 수 있는 장점을 갖게 된다.
 


참고 : nVIDIA GeForce256


nVIDIA GeForce256 그래픽 보드는 120MHz 코어 클럭을 가지고 있으며 클럭당 4개의 픽셀을 처리할 수 있다. 멀티 텍스쳐 맵핑의 경우에는 2개의 픽셀을 처리할 수 있으므로 최근 그래픽 게임이 멀티 텍스쳐 맵핑을 주로 사용한다는 점을 고려하면 최대로 처리 가능한 성능은 240M Pixel/sec 정도이다.


한 개의 픽셀을 처리하기 위해서는 멀티 텍스쳐 맵핑의 경우에 텍스쳐 캐쉬를 고려해도 픽셀당 2개의 텍스쳐 샘플을 사용해야 하므로 32비트 컬러 텍스쳐 모드에서는 8바이트의 데이터 억세스가 필요하다. 더불어 픽셀을 출력하기 전에 깊이 버퍼의 값을 읽어서 비교한 후 픽셀을 출력하기 위해서는 다시 깊이 버퍼 값을 기록하게 된다. 이때, 기록될 확율이 50% 라고 가정하고 32비트 깊이 버퍼를 사용하면 6바이트의 데이터 억세스가 필요하다. 실제로 픽셀이 출력될 확율은 50% 이므로 32비트 컬러 모드를 사용한다면 2바이트의 억세스가 필요하다. 최종적으로 한 개의 픽셀을 처리하기 위해서는 16바이트의 데이터 억세스가 필요하다. 결과적으로 128비트 그래픽 버스 시스템에서는 240MHz의 메모리 성능을 필요로 한다.


램댁(RAMDAC)은 프레임 정보를 읽어서 아날로그 신호로 변환하여 모니터로 출력하는 역할을 한다. 이?, 하나의 픽셀은 4바이트의 데이터를 억세스 하게 된다. 만약, 1280x1024 해상도를 사용한다면 화면당 1280K 픽셀로 구성되며 5M Bytes 구성된다. 85Hz 수직 수파수에서는 425MB/s의 대역을 사용하게 된다. 128비트 버스를 가진 그래픽 시스템을 기준으로 하면 클럭당 16바이트의 데이터를 전송할 수 있으므로 27MHz에 해당한다.


다음으로 중요한 점은 텍스쳐 매핑에 사용할 텍스쳐 정보와 3차원 폴리곤에 대한 기본 정보를 그래픽으로 전송하는 성능도 필요하다.


하나의 폴리곤은 대략적으로 86바이트의 정보를 사용한다. GeForce256의 최대 성능인 15M 폴리곤을 전송하기 위해서는 1290M Bytes의 대이터 전송이 필요하며, 이 성능은 Strip 폴리곤을 사용하는 경우에만 구현이 되는 성능이므로 실제 전송 지오메트리 데이터는 645M Bytes에 해당한다. 이것을 1초에 전송하므로 이를 위해서 사용되는 그래픽 메모리의 성능은 128비트 그래픽 버스 시스템을 기준으로 40MHz에 해당한다.


텍스쳐를 그래픽 메모리로 로딩하는 과정은 프로그램에 따라서 다르다. 일반 게임들은 2-4M 텍스쳐를 사용하기 때문에 한번 로딩된 텍스쳐가 계속 사용되고 겨우 몇M의 정보만이 변경이 되기 때문에 실제 텍스쳐 버퍼를 로딩하기 위해서 사용되는 그래픽 메모리 사용량은 상대적으로 무척 작다. 따라서 본 계산에서는 제외하도록 하겠다.


GeForce256 그래픽 카드의 경우에 1280x1024 해상도에서 초당 200 프레임을 처리할 수 있으며, 복잡도가 3정도인 게임을 고려하면 67 프레임을 구현할 수 있다. 이때 사용되는 메모리 성능은 128비트 버스 시스템이므로 307MHz의 메모리 성능이 필요하다. 물론, 텍스쳐 로딩을 위해서 약간의 성능이 필요하므로 310-320MHz 정도의 메모리 클럭이 필요하다.


GeForce256 그래픽 보드에는 160MHz SDR SDRAM을 사용하는 제품과 150MHz DDR SDRAM을 사용하는 제품이 있으며 DDR SDRAM은 일반 SDR SDRAM에 비하여 두배의 성능을 가지므로 300MHz에 해당한다. 위의 결과를 보면 GeForce256 그래픽 보드는 DDR SDRAM을 갖춘 그래픽 보드에서만 정상적인 성능을 발휘할 수 있는 제품이며, SDR SDRAM을 갖춘 시스템은 16비트 컬러 그래픽이나 저해상도 또는 16비트 텍스쳐 그래픽과 낮은 폴리곤 그래픽에서만 성능을 발휘할 수 있다. 다행히도 최근 게임들은 16비트 이하의 텍스쳐와 낮은 폴리곤 개수를 사용하기 때문에 어느 정도 성능을 구현하고 있을 뿐이다.



3차원 그래픽 벤치 마크 프로그램을 이용한 벤치 마크


3차원 그래픽 가속 기능을 갖는 그래픽 보드를 사용한다고 해도 100% 모든 그래픽 처리를 그래픽 보드에서 전담하는 것은 아니다. 초기 그래픽 처리 과정과 3차원 그래픽 보드에서 사용되지 않는 일반 그래픽 처리는 CPU를 이용하기 때문이다. 따라서 CPU 성능에 의해서 그래픽 보드의 성능이 달라지는 현상이 발생하며 그래픽 보드에 따라서 CPU 의존도는 현저하게 차이를 갖게 된다. 대표적인 예로 GeForce256 그래픽 보드는 하드웨어 T&L 기능을 이용하는 경우에 14M Strip Polygon과 6-8M Individual Polygon을 처리할 수 있으며, T&L 기능이 없이 CPU를 이용하는 경우에 4-5M Strip Polygon과 2-3M Individual Polygon을 지원한다. 즉, T&L 기능 여부에 따라서도 그래픽 성능은 현저하게 차이가 난다.


그래픽 카드의 성능은 CPU의 성능과 게임의 종류가 중요한 변수가 된다. 따라서 그래픽 보드에서 T&L 기능의 지원 여부와 CPU의 종류에 따른 3차원 그래픽 연산 명령어(SSE, 3DNow!)를 지원하는지 여부가 중요하다.


기본 성능 평가 3차원 그래픽 보드에서는 초당 처리할 수 있는 폴리곤의 개수와 렌더링이 가능한 텍셀의 개수로 성능을 표현하다. 초기의 그래픽 보드에서는 텍셀과 픽셀이 동일하였지만 멀티 텍스쳐 맵핑과 같이 하나의 픽셀을 생성하기 위해서 두 개의 텍셀을 사용하는 경우가 있기 때문에 기본 성능은 텍셀이 된다.


컴퓨터 게임은 순수한 그래픽 이외에도 인공지능, 입출력 제어, 사운드 처리를 위해서 높은 CPU 점유율을 가지게 되며, 따라서 일반 게임에서도 그래픽 보드에서 최대로 처리할 수 있는 그래픽 성능뿐만 아니라 CPU에 의해서 지원이 가능한 그래픽 성능도 차이를 보이게 된다. 따라서 특정 시스템에 의존된 성능을 측정하는 경우가 아니라면 최신 고속의 CPU를 이용하여 CPU에 의한 성능 감소를 줄이고 의존도를 낮춰야 하며, 상대적으로 그래픽 카드의 의존도를 극대화해야 한다.
 


참고 : 오버클럭에 의한 CPU 비정상적인 설정


최근 프로세서의 오버 클럭은 버스 클럭에 의해서만 가능하다. 이때, 버스 클럭은 시스템 전체의 성능의 변화에 큰 영향을 주게 된다. 따라서 단순히 CPU의 성능만을 변수로 작용시키지 않는다. 따라서 얻어지는 결과는 다른 프로세서 시스템에 대한 상대 지표가 될 수 없다. 그래픽 보드의 버스 속도에 대한 의존도를 측정하거나 또는 프로세서 시스템의 극대화가 필요한 경우가 아니라면 피해야할 측정 방법이다. 벤치마크와 성능 평가에서는 무엇 보다도 재현성이 중요하다.



프로그램에 따라서 측정할 수 있는 기본 성능과 실제 환경 성능 그리고 그래픽 가속기와 드라이버에서 지원되는 항목이 다르며, 모든 항목을 측정할 수 있다고 하여도 측정 항목에 따라서 장단점이 있다. 따라서 한 개의 성능 평가 항목에 대하여 2개 이상의 프로그램을 이용하여 성능을 측정하여 기록한다.


[표] 대표적인 3차원 그래픽 성능 평가 프로그램에서의 평가 항목






















































































































Direct3D


OpenGL


T&L


Function


Polygon


Fillrate


Realword


Function


Polygon


Fillrate


Realworld


S/W


H/W


FPSIMD


3DMark2000


Yes


Yes


Yes




Yes


Yes


Yes










3DWinBench2000


Yes


Yes




Yes






Yes










GLPerf
















Yes


Yes


Yes




ViewPerf






















Yes


OpenGVF RWB






















Yes


Indy3D
















Yes






Yes


Glaze3D
















Yes


Yes


Yes




OpenGL에서 T&L을 구분하여 성능을 평가할 수 없으며, DirectX 프로그램에서 부분적으로 선택이 가능하다. 실제 일반 DirectX 프로그램에서는 T&L을 아직 지원하지 못한다. 하드웨어의 지원 여부에 따라서 자동적으로 최적의 동작 조건이 설정된다.