Notice
Recent Posts
Recent Comments
Link
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Tags
more
Archives
Today
Total
관리 메뉴

Visual Studio

[Vulkan] Instanced Rendering 시에 Instance Buffer와 Storage Buffer의 성능 비교 본문

Graphics

[Vulkan] Instanced Rendering 시에 Instance Buffer와 Storage Buffer의 성능 비교

emacser 2024. 10. 23. 03:30

테스트를 위해 주어진 개수만큼 오브젝트를 범위내 랜덤 위치, 랜덤 회전값으로 배치시키도록 구성했다.

쉐이더는 Blinn-phong 모델을 구현하였다.

 

Debug, 인스턴스 100000개, Instance Buffer(= Second Vertex Buffer, Binding 1)

 

평균 25.52 fps

 

 

 

 

 

Debug, 인스턴스 100000개, Storage Buffer

 

평균 25.78 fps

 

 

 

 

 

 

Debug 모드에서는 Instance Buffer와 Storage Buffer가 큰 차이가 없었다.

이제 Release 모드에서 해보자.

 

Release, 인스턴스 100000개, Instance Buffer

 

평균 60.06 fps

 

 

 

 

 

Release, 인스턴스 100000개, Storage Buffer

 

평균 99.62 fps

 

 

 

 

 

놀랍게도 Release에서는 Storage Buffer를 사용했을 때 약 65.87%로 눈에 띄는 성능 향상이 있었다.

 

혹시 CPU단의 무거운 로직이(std::execution::par를 사용하여 병렬로 돌리고 있었음) Storage Buffer를 사용했을 때 우연히 캐시 적중률이 높아서 성능이 향상된 것이 아닌가 하여 해당 로직의 시간을 측정해보았지만, 큰 차이가 없었다.

 

따라서 Release 모드에서 Instance Buffer, 즉 Vertex Binding 1에 input rate를 per instance로 하여 인스턴스의 정보를 담고 있는 버퍼를 업로드하였을 때보다 Storage Buffer에 업로드하였을 때 실제로 성능 향상이 있었던 것이다.

 

자세한 이유는 잘 모르겠지만 Storage Buffer를 일반 Vertex Buffer로 업로드하였을 때보다 빠르게 동작하도록 하는 GPU 피쳐가 Debug 모드에서는 비활성화되어 있었던 걸로 추측할 수 있을것 같다.