Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
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 29 30
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 모드에서는 비활성화되어 있었던 걸로 추측할 수 있을것 같다.

'Graphics' 카테고리의 다른 글

[Vulkan] Push constants  (0) 2024.10.01
Early depth testing, Early z pass  (0) 2024.09.17
[Vulkan] Primary Command Buffer vs Secondary Command Buffer  (0) 2024.09.17
DirectX 11 Pipeline Stage  (0) 2022.06.07
Tessellation  (0) 2022.06.06