Visual Studio
[Vulkan] Instanced Rendering 시에 Instance Buffer와 Storage Buffer의 성능 비교 본문
[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 |