0 Replies Latest reply on Jan 26, 2014 12:40 PM by snake5

    GPU driver startup overhead

    snake5

      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?