DX12 비동기 쉐이더 논쟁

게임, 하드웨어 관련 모사이트들에서 비동기쉐이더 어쩌고 N사 GPU를 가루가 되도록 까고 있길래 뭔 소린가 찾아봤다.

일단 용어와 구현을 전혀 이해하지자기들이 뭔말하는지 모르고 떠들고 있다.
비동기 쉐이더란 용어는 AMD가 사용하는 용어이다.
NVIDIA GPU의 비동기처리는 CUDA에서 이미 하고 있다.
DX12에서도 그 용어를 사용하지 않는다.

그리고 그들이 말하는 소위 비동기 쉐이더란걸 DX12에서 적극 활용하려면 CommandQueue를 여러개 써야한다. CommandQueue안의 모든 Command List는 순서가 보장(serialize)되기 때문이다.
여러개의 CommandQueue에다 Command List를 넣고 얘네들을 동시에 Execute()해야 실질적으로 그들이 말하는 비동기 쉐이더를 사용하는게 된다.
근데 CommandQueue를 여러개 쓸 상황이 거의 없다.게다가 게임에선 그쪽이 병목도 아니다.

DX12에선 렌더링이 끝날때까지 리소스 상태를 변경하면 안되고 렌더링이 끝나서 리소스 상태 변경이 가능한 시점을 어플리케이션이 판단해야한다. 따라서 Command Queue가 여러개가 되고 동시에 처리하려면 굉장히 복잡해진다. 하지만 그에 비해 얻는건 별로 없다.

DX12 와서야 비동기 처리 관련된 기능들이 API로 노출되어 있어서 DX11에선 그런 처리를 못한다고 생각들을 한다.
사실은 드라이버에서 최대한 다 하고 있다. 근데 어플리케이션 프로그래머가 수동으로 드라이버보다 잘할 수가 없다. 그래서 대부분의 경우 DX11이 더 빠르다.

그들은 DX12에서 AMD가 더 빠르다고 믿고 싶겠지만, 진실은 nvidia든 AMD든 실제 게임에선 DX11이 더 빠르다는 것이다.
어차피 그 비동기 기능들이 성능향상의 열쇠가 되지 못한다. 적어도 PC에선 그러하다.
프로그래머가 죽을동 살동 노력해서 비동기 처리로 성능향상 5%을 끌어냈을때쯤이면 2배빠른 GPU가 이전 버전보다 싼 가격에 출시되어있다.

지금 내 인디게임(데모)를 DX12로 만들고 있는 입장에서 난 DX12가 망한 API라고 생각하는데 그럼에도 계속 이걸로 진행하는 이유는 12를 안하면 아마 13을 못할것이기 때문이다. 11을 모르면 12를 못하고 10을 모르면 11을 못하거든.

p.s:
그 바보같은 비동기 쉐이더 논쟁은 이쪽에 잘 정리되어있음.
https://m.reddit.com/r/nvidia/comments/3j5e9b/analysis_async_compute_is_it_true_nvidia_cant_do/

 

p.s 2:
하드웨어 벤치 사이트에서 내 글을 무단으로 퍼다가 콜로세움을 세우고 있는 모양인데.
어차피 퍼갈거면 내 발표자료도 퍼가길 바람. 읽어보고 알아서 판단할것.

내 자료 말고 실제로 DX12프로그래밍을 해본 사람이 쓴 개발자료 있으면 나한테 알려주기 바람. 나도 궁금하네. 나 말고 몇이나 DX12프로그래밍을 하는지.

 


DX12 비동기 쉐이더 논쟁”에 대한 답글 5개

  1. 즉 게임 개발자가 드라이버보다 성능을 뽑아낼수있도록 할수있으면 DX12가 좋고 아니면 DX11이 좋다는거맞나요,,

    좋아요

      1. 그치만..책임자체를 드라이버 제작자가아닌..게임개발자에게 넘기는건 좋지않은 API라고 보네요
        다이렉트를 아직은 안팠지만. (2-3년후에 팔계획..) 일반 게임개발자가 드라이버개발자보다. 비동기구현을 잘만들수있다는 보장이 그리 없을테고.. ;;;

        좋아요

    1. 좋거나 나쁘거나 그런 문제는 아니고요.
      일단 DX12는 MS에서 권장하는 API는 아닙니다. DX11이 기본이고 성능을 최대한 뽑아내고 싶으며 DX12를 사용해라..라는 겁니다.
      실제로 DirectX의 기능중 Direct3D하나만 DX12에 들어있고 나머지(D2D,DWrite등)는 아예 들어있지도 않습니다. 이 기능들은 DX11을 사용해야합니다.
      일반 개발자보다는 엔진 개발사에서 최대한 활용하라는 의미의 API죠.

      좋아요

답글 남기기

댓글을 게시하려면 다음의 방법 중 하나를 사용하여 로그인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중