snake5

GPU driver startup overhead

Discussion created by snake5 on Jan 26, 2014

I'm working on a software stack for fast and portable (both in terms of platform support and ease of copying around) software that is partially based on hardware-accelerated 3D APIs. Today I decided to investigate a performance issue that has been bothering me for quite some time - the applications weren't starting up as quickly as I wanted them to. Initially, I recorded cold startup timings and noticed that a great deal of time was spent inside graphics initialization, window creation, things like that.

 

Then I thought I could dig deeper into the OS (which in this case is Windows 8.1) side of things by using Process Monitor. What I found out is that apparently the display driver reloaded settings many times in the process, thus being responsible for at least 0.4 (and sometimes a lot more) seconds of loading time. The log is attached to this post, "driver-load-log.csv" - look for "{4d36e968-e325-11ce-bfc1-08002be10318}" in the file to see all registry accesses and how many times they're duplicated. Also check "atiumdva.cap" and how many times the exact same section of the file is re-read.

 

I also attached the software I used to generate the log. The "sgs-sdl-debug.exe" executable file will tell the timings of various sections in the console, more info about those can be found by looking at the source (snake5/sgs-sdl · GitHub), specifically - SS_CreateWindow (SDL_CreateWindow), which is the main bottleneck of startup.

 

What I would like to understand is - why exactly does the driver reload the same information many times during startup? Is there anything wrong done by my or SDL2 code? And most importantly, how to fix this?

Outcomes