DX12에서 CPU에서 처리하는 시간을 줄인건 명백한 사실이다.
그런데 DX12로 짜면 GPU큐를 꽉 채우기가 진짜 힘들다.
DX12로 포팅한 게임이 성능이 안나오는건 GPU와 게임이 DX12를 제대로 지원을 안해서가 아니고 GPU가 놀게 되는게 문제다. 궁금한 사람들은 GPU-Z라도 띄워서 DX12용 게임을 플레이할때 GPU점유율이 몇%나 나오는지 확인해보라. DX11과 비슷하거나 성능이 조금 더 안나오는 게임이라면 GPU점유율이 11에 비해서 12일때 더 떨어진다.
예전 드라이버에서 GPU큐에 커맨드를 넣어주던걸 DX12에선 프로그래머가 수동으로 해주는데 그걸 십수년 쌓인 노하우+커널모드에서 하는것만큼 똑바로 잘해주기가 어렵다. 그러니까 GPU가 놀게 되고 그래서 성능이 안나온다. 게다가 DX12에선 GPU가 놀면 클럭이 떨어져서 안그래도 GPU가 놀아서 성능이 안나오는데 더 안나오는 결과가 나온다.
일부 게임의 경우 DX12버전을 AMD GPU에서 돌리면 성능이 올라간다 한다.
뭐 AMD 하드웨어가 DX12에 적당한 구조일수도 있긴한데, 그보다는 원래 AMD의 드라이버에서 스케쥴링을 그닥 잘해주지 못했기 때문이 더 클것이다.
사실 AMD GPU성능이 그닥 나쁘진 않았다고 본다.
DX11까지 nvidia 드라이버에선 GPU큐를 꽉꽉 채워주도록 최적화가 잘 되어있는데 AMD는 그만큼 못해줬던거지.
DX12에선 GPU큐를 채워주는 작업도 CommandQueue에 Execute()을 호출해서 수동으로 처리하는지라 nvidia쪽에선 드라이버 버프를 못받으니 상대적으로 AMD가 빨라진것처럼 보이는것이다.
그런데 사실 현재 나와있는 DX12게임들 대부분은 AMD에서 돌리더라도 성능이 아주 약간 올라가거나 거의 차이 없다.
DX12는 기능상 크게 바뀐게 없는데 비해 성능향상은 미비하고 프로그래밍하기엔 완전 지랄같아서 AAA게임 개발사들이라도 굳이 DX12로 출시하려고 할지 난 진짜로 의문이다.
당장 그냥 포팅하면 속도문제는 둘째치고 DX12가 DX11에 비해 GPU메모리를 두배 정도 더 쳐먹는다.
물론 이걸 해결할 방법이 있고 GPU메모리보다 크게 사용할경우(Overcommit)에 대한 가이드라인도 있다. 그런데 이것도 막상 작업하려면 지랄같다. 애초에 DX11에선 이런짓 필요없다.
내가 6개월 넘게 DX12로 작업하고 있는 사람으로서 한마디 하자면 DX12는 실패한 API라고 생각한다.
뭐 13을 위한 밑거름이야 되겠지만. 결국 11->13으로 점프하게 되는 계기가 되지 않을까.
p.s:
하드웨어 벤치 사이트에서 내 글을 무단으로 퍼다가 콜로세움을 세우고 있는 모양인데.
어차피 퍼갈거면 내 발표자료도 퍼가길 바람. 읽어보고 알아서 판단할것.
내 자료 말고 실제로 DX12프로그래밍을 해본 사람이 쓴 개발자료 있으면 나한테 알려주기 바람. 나도 궁금하네. 나 말고 몇이나 DX12프로그래밍을 하는지.
3년이 지난 이 시점에서 DirectX12 게임들 하나둘씩 나오고 있습니다.
아직도 DirectX12가 실패한 API 라고 생각하시는지
아니면 그럼에도 불구하고 해볼만한 가치가 있는 API 인지 megayuchi님 생각이 궁금합니다.
좋아요좋아요
12게임이 나오고 있는데 어전히 11보다 느립니다. 몇년전에도 얘기했지만 ms는 돌이킬 생각이 없으므로 12를 하기는 해야합니다. 실시간 레이트이싱만 해도 12에서만 지원하니까요. 물론 전 12가 실패했다고 생각하면서도 11과 12렌더러 모두 업데이트 하고 있습니다.
좋아요Liked by 1명
글쓴이분은 결국 틀리셨네요.
좋아요좋아요
뭐가 틀렸다는건가요? 여전히 11이 훨씬 빠릅니다. 12를 쓰는건 raytracing때문이에요.
좋아요Liked by 1명