2005년 12월 13일 화요일

ATi X1K 계열의 새로운 도약 - 쉐이더 모델3.0 -

쉐이더 모델 3.0


 Nvidia사 와 대비하여 기존의 Radeon 제품이 많은 지적을 받은 부분이 바로 쉐이더 모델 3.0의 지원여부였으며 이에 부응해 ATi는 X1K 제품군에 쉐이더 모델 3.0을 도입하게 되었다. 또한 ATi는 X1K계열의 쉐이더 모델 3.0 기술이 Nvidia와 대비해 동일또는 더 뛰어남을 시사하였으며 쉐이더 모델 3.0의 구현에 있어 ATi는 데이터의 흐름 제어와 128비트(FP32) 렌더링 부분의 최적화를 위해 다음과 같은 기술들을 도입하였다.


Ultra-Threaded 픽셀 쉐이더 엔진


RV530


RV515


메모리 제어 부분에 있어서 내부 지연시간을 줄이기위해 캐쉬와 작업중재 로직을 개선한 것과 같이 쉐이더 모델 3.0의 구현에 있어서도 지연시간과 낭비되는 사이클을 줄이기 위해 도입한 것이 있으니 바로 Ultra-Threaded 픽셀 쉐이더 엔진이다.


Ultra-Threaded 픽셀 쉐이더 엔진은 텍스쳐 어드레스 유닛/텍스쳐 유닛 그리고 픽셀 쉐이더 코어 사이에 위치하여 작업 스케쥴러 역할을 하게 되며 기존의 아키텍쳐와 다른점은 다음과 같다.


 과거의 픽셀 쉐이더 코어의 경우 픽셀 쉐이더에서 준비되지 않은 텍스쳐(텍스쳐 캐쉬에도 존재하지 않는)나 텍스쳐 결과물의 연산이 아직 완료되지 않은 텍스쳐를 호출할 경우 대기시간을 유발하고 많은 작업 사이클이 낭비되는 단점이 있었다.


하지만 Ultra-Threaded 픽셀 쉐이더 엔진은 이러한 문제점을 해결하기 위해 쉐이더 프로그램의 텍스쳐를 요구하는 명령을 받았을 때 기존의 방식과 같이 대기 시간을 갖는게 아니라 요청된 텍스쳐를 처리하던 픽셀 쉐이더 코어는 기존과 같이 잠시 유휴 시간을 갖게 되지만 이상황을 바로 스케쥴러가 감지하여 현제 사용되지 않는 다른 픽셀 쉐이더 코어에서 다른 쓰레드를 처리할 수 있게 하여 지연시간이 없이 작업이 처리될 수 있도록 하여준다.


또한 임시 쓰레드의 경우 다목적 레지스터 어레이에 저장되는데 이는 읽기/쓰기 작업이 동시에 가능하며 높은 대역을 제공하여 픽셀 쉐이더 코어의 빠르고 정확한 쓰레드 전환을 가능하게 도와준다.


ATi 는 이와 함께 픽셀 쉐이더 모델 3.0의 중요한 기능중 하나인 동적 분기(Dynamic Branching)의 향상을 위해 노력하게 되었는데 이는 동적분기를 하게 됨으로써 프로그램이 이미 계산되어진 값의 분기를 가져다 사용할 수 있게하여 연산해야할 쉐이더 코드를 줄여주어 성능을 향상 시킬수 있는 방법이지만 과거의 아키텍쳐상에서는 이러한 연산과정에 오류가 발생할 경우 많은 부하가 걸리고 속도의 저하를 야기하게되는 문제가 있었다.


이러한 문제를 해결하고 동적 분기의 정확한 동작을 위해서 ATi가 고안한 것은 먼저 쓰레드의 사이즈를 줄이는 것 이었다. 그러한 결론에 의해 쓰레드의 크기를 4x4의 픽셀 블록(16픽셀)의 작은 크기로 줄였으며 하나의 경로에 같은 형태의 쓰레드가 전송되야할 확률을 늘려 한번 사용했던 쓰레드의 픽셀셋을 다음의 다른 쓰레드의 픽셀셋 처리에 대치하여 연산해야할 데이터의 양을 줄였다. 또한 이러한 작업을 수월하게 처리하기 위해 X1K계열의 칩은 빠른 접근이 가능한 충분한 양의 레지스터 공간과 효율적이고 지연시간을 최소화한 캐쉬를 보유하고 있다.



이에 추가로 쓰레드 사이즈를 줄이는 작업을 전담하는 분기 실행 유닛을 픽셀 쉐이더 코어에 내장하여 분기 명령 처리시의 픽셀 쉐이더의 부하를 줄여 데이터의 소통을 원할하게 돕고 있다.


픽셀 쉐이더 처리기


Radeon X1K 계열의 픽셀 쉐이더 처리기는 3개의 벡터 컴포넌트를 갖는 2개의 벡터연산과 2개의 실수 연산을 매 사이클 마다 처리할 수 있으며 더불어 앞에서 언급한 것과 같이 각 코어는 분기 실행 전담유닛을 보유하고 있다. 또한 각각의 쉐이더 처리유닛마다 텍스쳐 주소 유닛이 하나씩 할당되어 있으며 이런 픽셀 쉐이더 처리기 4개가 하나의 그룹으로 묶여 쿼드 픽셀 쉐이더 코어를 구성하게 된다. 이러한 구성에따라 X1800에는 4개 X1600에는 3개 X1300에는 1개의 쿼드 픽셀 쉐이더 코어를 내장하게 되었다.


(쿼드 코어 픽셀 쉐이더의 다이어그램.)


버텍스 쉐이더 처리기


버텍스 쉐이더 처리기의 경우 기존의 방식을 그대로 물려 받았으며 달라진 점 이라면 버텍스 쉐이더 3.0 규격을 만족시키기 위해 동적 흐름제어 기능의 지원, 더많은 임시 저장 레지스터의 보유 그리고 좀더 긴 명령어를 처리할 수 있게 되었다는 점이 향상된 부분이다.


(버텍스 쉐이더 처리기의 다이어그램.)


128비트 부동 소수점 렌더링


X1K계열의 카드는 쉐이더 모델 3.0의 적용에 따라 기존의 파이프 라인당 24비트의 컬러 채널을 갖는 방식에서 업그레이드된 32비트의 컬러 채널을 가지며 이로인해 128비트 부동 소수점 형식의 데이터를 처리할 수 있게 되었다.


추가된 비트의 컬러 채널에 대해 현재로서는 24비트의 컬러채널 만으로도 처리하는데 문제가 없었지만 앞으로 많이 다루게 됨직한 무수히 반복되는 복잡한 쉐이더 처리와 같은 상황에서 아주작은 비트의 정밀도 문제로도 반복되는 동안 문제가 커질 수 있기 때문에 이러한 분야의 작업 처리에서 유용한 기술이 될 것으로 보여진다.

2005년 12월 11일 일요일

ATi X1K 계열의 새로운 도약 - 메모리 제어 -

 VGA시장에 최초 90nm 공정의 도입과 함께 X1K 계열의 새로운 기술들은 현제 시장의 추세인 고해상도 고화질 영상 출력물의 요구, 많은 지적을 받았던 쉐이더 모델3.0의 지원(HDR) 그리고 SLI와 같은 GPU의 병렬처리의 지원등의 요구를 만족시키기 위한 기술들을 가지고 출시 되었으며 새로 도입된 기술들 중 우선 메모리 제어부분을 살펴보도록 하자.

X1K계열의 메모리 컨트롤러


링버스 메모리 컨트롤러


ATi는 좀더 유연하고 효율적인 메모리 컨트롤러의 개발을위한 노력에 대한 결과로 링버스 메모리 컨트롤러를 도입하게 되었으며 기존의 기술과 어떤점이 다른지 알아보도록 하자.

기존의 ATi의 기존의 메모리 컨트롤러의 동작 원리는 다음과 같다.


  1. 메모리 클라이언트가 메모리 컨트롤러에 읽기신호를 보냄.
  2. 컨트롤러는 요구 신호의 순서에 따라 정확한 위치의 DRAM을 찾아 메모리 디바이스로 요청신호를 보냄.
  3. 메모리 디바이스는 요청된 데이터를 메모리 컨트롤러로 보냄.
  4. 메모리 컨트롤러로 보내진 데이터를 클라이언트로 보냄.


이와 같은 기존의 방식은 컨트롤러를 중심으로 PCB상에 많은 선들이 밀집되고 경로 설정에 어려움이 있어 512비트의 메모리 인터페이스와 같이 대역이 넓어진 환경을 구현하는데에 있어 매우 비효율적이다.

이런 문제를 해결하기 위해 분산 센터 방식의 링버스 구조의 컨트롤러를 도입하게 되었는데 구조는 다음과 같다.


(링버스 아키텍쳐 다이어그램.)


링버스의 동작 원리는 다음과 같다.


  1. 메모리 클라이언트가 메모리 컨트롤러에 읽기신호를 보냄.
  2. 컨트롤러는 요구 신호의 순서에 따라 정확한 위치의 DRAM을 찾아 메모리 디바이스로 요청신호를 보냄.
  3. 요청된 데이터가 위치한 메모리 디바이스는 데이터를 요청한 클라이언트와 가장 가까운 링스탑으로 요청된 데이터를 링버스에 실어보냄.
  4. 클라이언트는 요청했던 데이터를 링스탑을 통해서 받음.


 이와 같은 방식은 기존의 모든 DRAM을 메모리 컨트롤러와 직접 연결했던 방식과는 달리 링버스를 통해서 연결하는 방식이며 데이터의 이동또한 링버스 상에서 일어나며 링버스는 칩의 최외곽에 위치하여 모든 데이터의 이동 경로상의 문제를 칩의 외곽으로 전담 시켰으며 그로인해 GPU에 간섭을 주지 않는 넓은 대역과 빠른 속도를 제공하게 된다.


X1800의 경우 서로 상반되는 방향으로 동작하며 4개의 링스탑을 갖는 두 개의 256비트 버스로 구성(8채널)되어 512비트의 대역(듀얼 링버스)을 제공하며 X1600의 경우 이것의 절반인 256비트 그리고 X1300의 경우 Pro의 경우 256비트의 대역을 제공하 고 하위 카드는 그 절반 수준의 대역을 제공한다. 또한 X1600과 X1300의 경우 X1800의 절반인 2개의 링스탑(4채널)을 갖는다.


메모리 인터페이스


X1800 의 경우 링버스는 서로 상반된 방향의 듀얼채널 구성으로 512비트의 대역을 제공하며 이중 하나의 링버스는 256비트의 대역을 갖는다. 이는 기존의 하이엔드 카드들이 제공하는 256비트의 대역과 같지만 이를 구성하는데 있어 조금 다른 방법을 사용하고 있다. 기본의 256비트의 버스는 4개의 64비트 채널로 구성되어 있었지만 새로운 버스는 8개의 32비트 채널로 구성되어 있다. 이로 인해 얻어지는 이득은 기존의 버스는 32비트의 데이터가 요구되면 64비트의 대역을 갖는 1개의 채널을 점유해야하기 때문에 나머지 32비트의 공간은 낭비되는 현상이 있었지만 8개의 32비트의 채널로 구성된 새로운 인터페이스는 이런 상황에서 32비트 채널 하나만 할당하고도 32비트 채널이 하나더 남는 이점이 생겨 메모리 공간 낭비를 줄여주게 된다.


이로인해 X1600의 경우 4개의 32비트 채널로 구성되어 있으며 X1300의 경우 4개, 2개, 1개의 채널을 갖는 제품이 존재하며 그밖에 더욱 향상된 HyperMemory 2 기술이 적용된 제품또한 선보일 예정이다.


(기존의 메모리 채널 구성과의 비교도.)


내부 지연 시간을 없애다


 ATi는 메모리의 효율을 높이기위해 메모리 내부 지연시간을 최대한 줄여야 한다는 결론하에 새로운 방식의 캐쉬 운용 및 작업중재기의 도입을 이문제의 해결책으로 내놓게되었다 .


 먼저 캐쉬운용에 있어서 기존의 ATi 그래픽카드의 캐쉬는 직접사상캐쉬(Direct mapped cache)방식을 사용하여왔다. 이방식은 그래픽 메모리에 미리 정의된 블록상에 매핑된 데이터의 묶음을 그대로 이용해야 하는 방식이다. 이러한 방식은 정의된 데이터 묶음을 그대로 사용해야 함으로 인해 지연시간의 발생과 캐쉬 적중률 하락 그리고 메모리 대역의 낭비와 같은 문제가 있었다.


 이에 대안으로 X1K계열의 카드에서는 텍스쳐, 색상, 깊이 그리고 스텐실 버퍼에 완전연관사상캐쉬(Fully associative cache)방식을 사용하게 되었는데 이방식은 캐쉬의 어떤 라인이라도 외부 메모리의 빈공간이면 어느곳에나 매핑이 가능하다는 장점이 있어서 캐쉬의 동작 지연시간을 줄이고 적중률을 높일 수 있다.


(직접사상캐쉬와 완전연관사상캐쉬의 비교도.)


이와 함께 좀더 지능적이며 프로그래밍 가능한 메모리 우선순위 중재기 로직이 도입되었는데  이는 메모리의 읽기/쓰기와 관련한 모든 작업의 우선순위를 퍼포먼스 향상을 위해 조절해주는 역할을 한다.


 중재기 로직의 기본 동작 원리는 클라이언트의 데이터 소모량과 지연정도에 따라 좀더 높은 요구도를 갖는 클라이언트에 높은 우선순위를 주어 처리하는 방식인데 이방식엔 두가지 중요한 요소가 있으며 다음과 같다. 먼저 클라이언트의 중요도는 어플리케이션을 기반으로 프로그래밍 되어지며 그와함께 메모리의 효율성을 체크하여 가장 최적의 처리를 하게 되는데 이또한 어플리케이션을 기반으로 처리하게 되며 이 두가지 상태를 체크하는 방식은 추후 드라이버의 업데이트를 통해 지속적으로 개선될 수 있는 사항이며 특별한 어플리케이션 을 위해 Catalyst A.I를 통한 트윅 또한 가능하게 된다.


(A.I. 성능향상의 열쇠?)


이러한 프로그래밍 가능한 중재기를 도입은 메모리 효율을 극대화 시킬 수  있게 도움을 주었을 뿐만 아니라 쉐이더 처리유닛의 성능 향상에도 기여하고 있다.


(메모리 중재기 동작 다이어그램.)


압축기술의 업그레이드


ATi는 기존의 압축 기술인 3Dc를 한단계 업그레이드한 3Dc+를 X1K계열의 제품에 도입하여 기존의 두 개의 8비트 정수 컴포넌트로 구성된 노멀맵과 텍스쳐의 4:1압축을 지원 했던것에 대비 단일 8비트 정수 컴포넌트에대해 2:1압축의 지원이 가능하게 되었다. 또한 Hyper Z의 개선으로 기존의 Radeon 제품보다 약50%더 많은 보 이지 않는 영역을 제거할 수 있게 되었으며 Z/스텐실 버퍼의 압축을 최대 8:1까지 지원하여 고화질3D 영상과 안티알리아싱의 사 용 그리고 비등방성 필터링 사용시 대역 사용에 있어 좀더 효율적인 환경을 제공 하게 되었다.