정확히는 AMD(구 ATI) GPU가 무척이나 싫어지게 된 계기들.
– 2001년쯤이었나.개발자료좀 찾으러 ATI홈피에 들어갔는데 당췌 찾을수가 없음. 개발자한테 공개하는 샘플이나 문서가 없었거나 내가 못찾았거나 둘중의 하나겠지.
반면 nvidia는 첫페이지에서 쉽게 찾을 수 있었음. 그 당시에도 nvidia는 nvidia SDK란걸 배포하고 있었다. 당장 개발자를 위한 지원및 연구란 측면에서 비교해보면 nvidia의 GPU Gems( https://developer.nvidia.com/gpugems/GPUGems/gpugems_pref01.html )란 책만 봐도 차이가 팍팍 남. AMD는? 그딴거 없다.
– 2003년 아니면 2004년쯤. 최초의 Shader지원 그래픽카드 Geforce 3가 나왔을때 비슷한 급으로 ATI에서 Radeon 8500이 나왔음. 같이 일하던 프로그래머가 8500을 신청해서 사용했음. 우리팀 특성상 듀얼 CPU(듀얼코어아님)가 장착된 PC를 사용했는데 그 아저씨 PC에서 계속 블루스크린 뜸. 보니까 ATI드라이버가 멀티 프로세서를 지원하지 못함. 결국 그 아저씨 클럭 빠른 싱글 CPU PC로 갈아탔음.
– 2004년쯤일텐데. 내 Geforce 3 그래픽카드의 쿨러가 나갔고 그 여파로 비디오램 손상. AS보내고 그래픽 카드가 없어서 ATI제품을 잠깐 사용. 몇일간 잘 쓰다가 드라이버 업데이트를 했음. Windows 2000아니면 2003서버를 사용하고 있었는데 로그인 화면까진 잘 나옴 로그인 하고 카탈리스트 서비스가 뜨고 나면 화면이 퍽 하고 나감. 아이 니미.
듀얼 CPU라 그랬을수도 있고 2003서버라 그랬을수도 있고. 결국 창고 구석에서 Trident 카드를 하나 주워와서 한동안 사용.
그리고 이건 꼭 AMD잘못인건 아닌데, 라데온 계열 GPU들은 Lock걸면 죽도록 느려짐.
그 사례 하나를 들자면, 12년전에 내가 만든 엔진은 소프트웨어 스키닝을 사용했음.
처음 만들 당시엔 DirectX 8기반이었는데 매트릭스 팔레트 따위나 지원원했고 Shader를 이용한 스키닝이 불가능했음. 아니 불가능한건 아닌데 상수 레지스터 개수가 너무 적어서 실사용이 불가능한 정도. 어차피 Shader지원되는 GPU도 거의 없었다. 그래서 SSE를 사용해서 어셈코드로 스키닝 코드를 작성했다. 대신에 VeretexBuffer Cache란걸 만들어서 애니메이션+스키닝 처리가 완료된 버텍스 데이터를 GPU 메모리 상에서 바로 재활용했다. 라데온에선 좀 느렸지만 nvidia그래픽카드에선 상당히 빨랐음.어차피 그 시절 GPU들 성능이 고만고만해서 큰 문제는 없었다.
그러던것이 2008년쯤인가 그 엔진을 사용한 L모 온라인 게임에서 문제가 됐음.
당시 최신 그래픽 카드 라데온 5870에서 10프레임 이하로 떨어진다는 보고가 들어옴.
듣자마자 바로 알았지. 스키닝 문제네.
CPU 에서 스키닝 처리 한담에 GPU 메모리에 Lock걸고 갱신해야되는데 그럼 죽도록 느려짐. 실시간으로 Lock걸고 쓰는건 원래 GPU프로그래밍에서 피해야할 사항인건 맞는데 nvidia GPU들은 같은 상황에서 거의 안느려짐. 하드웨어 아키텍쳐 차이가 아니고 드라이버에서 그런 경우 대비해서 처리해주는 것으로 알고 있음.
AMD 제품들은 드라이버에서 뭐 해주는게 없는지 가이드라인대로 안만들면 확.실.하게 느려짐. 잘못 짜면 바로 문제가 드러나고.
Shader코드에 버그가 있어도 nvidia에선 어떻게든 그럴싸하게 나오고 AMD에선 바로 티가 나서 버그 잡으려고 일부러 라데온 꽂고 작업한 적도 있음.
개발자 입장에서야 AMD GPU로 개발하면 모든 상황에 대비할 수 있으니 좋은 점도 있겠지만 유져 입장에서는 내부적인거야 알바 없고 좌우간 빠르고 잘 도는게 장땡.
애초에 얘네들 소프트웨어감각이 없어서 요샌 안그러지만 예전엔 자기네 GPU에 트랜지스터 몇개 넣었는지만 줄창 광고하고 다녔음. 그걸로 뭘 할 수 있느냐가 중요하지. 딱 제조업 마인드.
하여간 그런 기억들 때문에 AMD GPU는 절대로 내 돈 주고는 안삼.