잡담

2D 멀티스레드 렌더링

최근에 NanoBoost라는 크로스플랫폼 프레임워크를 만들고 이를 이용해 또 다시 IvySweeper라는 간단한 2D 렌더링 프레임워크를 만들어서 테스트를 해봤다. 구현물은 싱글스레드 DirectX 11 2D 렌더러, 멀티스레드 DirectX 11 2D 렌더러, 싱글스레드 OpenGL 렌더러의 세 종류.

멀티스레드 렌더러를 구현하기 위해서 렌더 큐를 구현했는데, (큐 내 모든 스프라이트 개수) 나누기 (CPU 코어 개수 – 2)를 가지고 순서대로 멀티스레드를 돌렸다. 순차적으로 돌려야만 2D 이미지가 흐트러지지 않고 렌더링이 수행된다.

1. NVIDIA GeForce GTX 970으로 돌렸을 때
1.1. MT DX11: 14000개 렌더링 시 60FPS
1.2. ST DX11: 9000개 렌더링 시 60FPS
1.3. ST OGL: 6000개 렌더링 시 60FPS

2. AMD Radeon RX 480으로 돌렸을 때
2.1. MT DX11: 9000개 렌더링 시 60FPS
2.2. ST DX11: 8000개 렌더링 시 60FPS
2.3. ST OGL: 6000개 렌더링 시 60FPS

멀티스레드와 싱글스레드에서의 성능 차이는 분명 있긴 하지만 NVIDIA에서보다 AMD에서 멀티스레드 DirectX 11 효율이 떨어지는 편. 2D 렌더링에 굳이 DirectX 11의 멀티스레드 렌더링 기법이 필요하냐는 사람들도 있지만 필요하다고 본다. 요즘 2D 게임에도 후처리 기법 등이 많이 사용되는 만큼 드로우콜 호출량도 많아졌기 때문에 멀티스레드 렌더링으로 어느 정도 커버를 해야 되기 때문.

DirectX 12 공부가 끝나면 이를 이용한 효율 테스트도 해봐야지.

광고

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

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

Google photo

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

Twitter 사진

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

Facebook 사진

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

%s에 연결하는 중

This site uses Akismet to reduce spam. Learn how your comment data is processed.