GPU not fully utilized

graphics cardpcperformancethe-witness

I've been playing The Witness, and I noticed that the game is lagging without fully utilizing my graphics card.

My setup is pretty old at this point (HD 5850 and i7-930). The game remained at a semi-steady 60fps on Normal settings, but there were a few hiccups while running or while quickly panning the camera.

However, my GPU load barely exceeded 60-70% while playing, and my CPU load was around 30%. I didn't see any spikes on the load chart (MSI Afterburner).

For comparison, I tried loading the game on High settings and my GPU usage was at 80+%. I also tried playing Minecraft the other day with a shader pack, and GPU usage sat at 90% the whole time with a steady (albeit <60) fps.

My question: is it normal for a game to lag if your GPU and CPU aren't under full load?

Best Answer

Common scenario when you have a game engine/technical design that is bad. This is very sifnificative of such a problem, as the GPU throughput is not kept up to maximum.

If you consider what is going on, the GPU needs to receive prepared frames from the CPU, but if it doesn't it will not be fully utlized.

The CPU in turn needs to generate said framebuffers and push them for rendering, but if a game engine stalls for some reason (most common is it is single core and todays emphasis on less speed per core is stalling it) or gets stuck waiting for some data or deadlocks, then the framebuffer is not going to be filled in time.

The ideal scenario for performance, is a 1:1 scenario, where the framebuffer to be rendered is ready from the CPU as soon as the GPU is done rendering the previous slice.

My assumption in this case is that the game is largely single threaded (as most applications are) and it actually uses very much CPU on a single core, but still manages to not keep up due to processing being to instense in between the render code (most likely due to sloppy coding).

Measure the load per core and you should see if that may be the case. It could also be wait states in the game loop, so that for some reason, certain ops take a long time to do, therefore utlization of CPU does not go up (as no real workload is done) but it still stalls, due to waiting on something ineffective (like a non-cached resource streaming from disk).