Really, what is a "poorly-optimized" game?

Dankk

Diamond Member
Jul 7, 2008
5,558
25
91
Tonight I booted up Assassin's Creed III, and loaded the first big level of the game (Boston) to see how it would fare on my FX-8350 CPU. I know that AC3 (among other Ubisoft titles) is notorious for being poorly-optimized on PC, and I'm also aware that in CPU benchmarks, the FX-8350 ranks rather low in this game.

But, I was curious. I wanted to see it for myself. I wanted to experience the so-called "Boston FPS Drop" on my own setup.

At first, I was pleasantly surprised. Standing on an in-game rooftop and monitoring my CPU usage, AC3 appeared to be distributing its load fairly evenly across all 8 cores, without totally pegging any single core (although a couple of cores came close at about 90% usage). My thought process was: "Wow! Perhaps my CPU can handle this game after all, if it's not being maxed out. That must mean I am GPU-bottlenecked instead."

So then I fired up GPU-Z to monitor my graphics load, and... nope. My graphics card is not being fully-utilized. Not even close. On average, while running around the city, GPU usage averaged at a measly 40%-50%.

Which brings me to my main question, I guess: What is the real bottleneck here? Is it the game's fault? Poor programming?

Ideally, shouldn't I be seeing either my GPU usage or CPU usage being maxed out? But, in the case of Assassin's Creed III, neither are being used fully. I would understand if it was a single-threaded game, but from what I can see, the game appears to be using all cores (with not a single core being completely maxed out). How effectively, I don't know; but it does seem to be utilizing all of them.

So does this mean the game is poorly-optimized? Is my logic correct here, or am I over-simplifying things? If I'm wrong, please explain why my reasoning is poor. Serious, legitimate question. I'm really not sure how this stuff works.

For proof, here's an overly-obtuse screenshot of the three different monitoring utilities I was using while playing the game. Standing at a high point in the level and rendering lots of scenery. Notice how the GPU usage is sitting only at 42%, and how my CPU usage isn't terribly high either. (Also keep in mind that I am NOT running any CPU-intensive background processes to skew this.)

0I1n1MG.png
 

ShintaiDK

Lifer
Apr 22, 2012
20,378
145
106
You cant use Windows taskmgr load graphs in any way to see how well threaded a game or application is.
 

Waywocket

Junior Member
Oct 9, 2014
4
0
0
And why is that please? Just asking.

Because Windows (in common with all general-purpose operating systems) distributes load so as to keep each core/CPU roughly equally utilised (unless you're forcing CPU affinity). Rather than lock a process on to one core, every time the scheduler makes a decision about what process should get a timeslice and where, it will give it to the lowest loaded core at that time. Unless your system is completely evenly loaded, this will rarely be the core that the process is running on right now, causing it to effectively bounce around many times per second.

This means that if you have, say a quad core system, running a single-threaded CPU-bound process, the graph will show all four cores at roughly 25%.

What you want is to find a program which will let you inspect the threads in a process, and tell you the total CPU time that each has consumed; then you can tell if there are several which are very close, or if there's one which has the lion's share and a few others which have only done a little work. I believe Process Explorer can do this, but I've not used it in a while so my memory could be faulty.

NB: This explanation is simplified, since - although I have reasonable knowledge about a number of schedulers and scheduling policies - I have very little knowledge about the specifics of Windows' task scheduler, so I've kept it to the the general overview.
 

psolord

Golden Member
Sep 16, 2009
1,913
1,192
136
Thanks guys.

Yes I 've seen examples of games occupying 25% of each core on a quad core and I thought exactly that this should be due to scheduling.

Still, when we see games running at 80% on all cores, but giving us the desired framerate, doesn't that mean that the game at question is both heavier and better threaded?

Similarly, when we see 50% on all cores, but low framerate, doesn't that mean that the game is badly threaded, hence the optimization the OP is talking about?

So task manager is not useless, just not very accurate?
 

tviceman

Diamond Member
Mar 25, 2008
6,734
514
126
www.facebook.com
Load up just about any Ubisoft game (sans far cry series) and that is your definition of poorly optimized. They are also notorious for showing off games at E3 with graphics way better than the final version ends up with (like Crysis 1).
 

AtenRa

Lifer
Feb 2, 2009
14,001
3,357
136
This means that if you have, say a quad core system, running a single-threaded CPU-bound process, the graph will show all four cores at roughly 25%.

I dont believe this happens on Win 8.1. Take a look at Civilization V on Win 8.1Pro 64bit and FX8350.

As you can see Cores 6 and 7 are parked, same happens with my Core i7 3770K.

2iuwac6.jpg
 

Mushkins

Golden Member
Feb 11, 2013
1,631
0
0
As for your comment about "shouldn't my GPU or my CPU be pegged at max for a clear bottleneck?"

The answer is "maybe". It all depends on the game, and your hardware, and your settings. If you turn AA up to 16x, resolution up to 4k, and turn on bloom, max shadows, etc, you're going to see your GPU pegged at 100% (and probably enjoy a nice slideshow of a video experience). If your CPU is simply not powerful enough to handle the game, you're going to see that pegged around 100% and this time it will be the processes waiting that's causing massive load times and poor framerates. It can be any combination of the two.

A "poorly optimized" game also falls into one of two categories:

A) It fails to properly take advantage of available resources in the positive direction. Your CPU is pegged at 40% and your GPU doesn't even kick up the fan, but you're still getting all sorts of framerate dips, slowdows, and long load times. You can throw all the resources you want at it, but it simply doesn't know how to utilize them efficiently. This is usually a deficiency of the base game engine, and you'll see similar results across *all* games created with that engine, typically you start to see this when the engine was written with consoles in mind (hence the "bad console port") or when the engine finally starts showing its age and simply was not designed to take advantage of modern GPU/CPU feature sets.

B) It fails to properly take advantage of available resources in the negative direction. You can run Crysis 3 at 1440p and jack up all the settings with a beautiful 100 FPS, but this random indie game is pegging your CPU and GPU way higher than it should be and still runs poorly at only 1080p (stuttering, low FPS, graphical glitches, etc). In this case, it *wants* more resources even though it shouldn't need them for what it's doing. Rendering a handful of low res 2d Isometric walls should not take more horsepower than rendering an entire 3d cityscape, but for some reason it does. This is also most commonly an engine-based deficiency, but it's more the result of poor coding practices and inelegant "hacks" to make things work. Later iterations of the engine and game patches that clean up certain portions of code will usually see considerable performance gains for software that falls into this category. This scenario typically happens when a game is rushed to a deadline, or is developed by a smaller studio or indie team that may have less experience/less skilled resources working on the code.
 

Waywocket

Junior Member
Oct 9, 2014
4
0
0
I dont believe this happens on Win 8.1. Take a look at Civilization V on Win 8.1Pro 64bit and FX8350.

As you can see Cores 6 and 7 are parked, same happens with my Core i7 3770K.

2iuwac6.jpg

That's very interesting. I've never looked on a machine with more than 4 cores, so it's hard to say if it's specific to Windows 8.1 or if it would look like that on earlier versions - probably the former.

My speculation would be that those cores are actually getting put into the lowest sleep-state, thus effectively powered down most of the time, because the system recognises that it simply doesn't need to use them at all. That would make sense since Windows 8 and 8.1 coincide with a serious push by Microsoft to get into the mobile market, and are supposed to be more power efficient.

If it is indeed due to improvements in power-aware scheduling, then it's good to see it in action.
 

AtenRa

Lifer
Feb 2, 2009
14,001
3,357
136
That's very interesting. I've never looked on a machine with more than 4 cores, so it's hard to say if it's specific to Windows 8.1 or if it would look like that on earlier versions - probably the former.

My speculation would be that those cores are actually getting put into the lowest sleep-state, thus effectively powered down most of the time, because the system recognises that it simply doesn't need to use them at all. That would make sense since Windows 8 and 8.1 coincide with a serious push by Microsoft to get into the mobile market, and are supposed to be more power efficient.

If it is indeed due to improvements in power-aware scheduling, then it's good to see it in action.

Yes Win 8 and later scheduler is more optimized for AMDs CMT and Intels HT architectures. The scheduler can park (low c-state) cores that are not being used by the system or any apps.
 

BrightCandle

Diamond Member
Mar 15, 2007
4,762
0
76
If you are looking at the task manager then you need to take that 100% of usable CPU and divide by the number of cores you have, in your case 8. So now 12.5% is what Windows would call 1 cores worth of usage. So if you see the game with 40% GPU load and 25% load on the CPU in task manager then you can roughly estimate its capable of utilising only 2 cores.

But the whole "poorly optimised" thing is a bit more than just CPU v GPU usage. Its a really vague term thrown at games that generally don't run very well. I don't think its a useful term to be using really, I would rather be specific about what is happening as much of its not optimisation its a design choice by the developers causing players issues.
 

Yuriman

Diamond Member
Jun 25, 2004
5,530
141
106
If you are looking at the task manager then you need to take that 100% of usable CPU and divide by the number of cores you have, in your case 8. So now 12.5% is what Windows would call 1 cores worth of usage. So if you see the game with 40% GPU load and 25% load on the CPU in task manager then you can roughly estimate its capable of utilising only 2 cores.

But the whole "poorly optimised" thing is a bit more than just CPU v GPU usage. Its a really vague term thrown at games that generally don't run very well. I don't think its a useful term to be using really, I would rather be specific about what is happening as much of its not optimisation its a design choice by the developers causing players issues.


Generally speaking though, games that give low GPU % usage usually scale almost linearly with CPU clockspeed, even if task manager graphs don't show the CPU being fully utilized. It's *usually* a single-thread throughput bottleneck, and TM is not suited for showing these.

That's not to say a game is necessarily unplayable if its bottleneck is on the CPU.
 

skipsneeky2

Diamond Member
May 21, 2011
5,035
1
71
Titanfall, this game uses the source engine and demands more vram then BF4 while running worst. My gtx650 can't play this game even on 768p low without stuttering and erratic dips under 60 while BF4 averages well over 100 with all low 768p.

GTA4 is stating the obvious as well.
 

kasakka

Senior member
Mar 16, 2013
334
1
81

I don't think it's that bad. As far as I know it's mostly CPU heavy due to the physics of cars and people, both of which are more advanced than what many other games have.

While it certainly didn't run well on the hardware that was available when it was released, it had settings that add so many cars on the road that it becomes awkward to play and also a fairly long draw distance at max.

Overall I felt it ran just fine at 1080p on something like a GTX260 at the time. On my previous GTX 560 Ti it just flew even with mods (excluding Icehancer) and with my GTX 770 I can throw even more at it. Yet I got more boost in that game from updating from Core 2 Quad to a Core i5.

Considering GTA V looks much better and runs about the same on consoles, the developers probably just found better ways to do things. So in that sense GTA IV could be considered poorly optimized, but it was that way for all platforms rather than just PC.
 

sm625

Diamond Member
May 6, 2011
8,172
137
106
You are definitely cpu bottlenecked. You can tell this from the fact that your gpu usage is only 50%. You're not going to see your CPU max out at 100%, because it has eight cores and it is near impossible to write a game engine that can make use of 8 threads perfectly. So you will be cpu bottlenecked long before your cpu usage reaches 100%. On an 8 core cpu, it is actually possible to be cpu bottlenecked even with your cpu usage at 13%.
 

toyota

Lifer
Apr 15, 2001
12,957
1
0
I don't think it's that bad. As far as I know it's mostly CPU heavy due to the physics of cars and people, both of which are more advanced than what many other games have.

While it certainly didn't run well on the hardware that was available when it was released, it had settings that add so many cars on the road that it becomes awkward to play and also a fairly long draw distance at max.

Overall I felt it ran just fine at 1080p on something like a GTX260 at the time. On my previous GTX 560 Ti it just flew even with mods (excluding Icehancer) and with my GTX 770 I can throw even more at it. Yet I got more boost in that game from updating from Core 2 Quad to a Core i5.

Considering GTA V looks much better and runs about the same on consoles, the developers probably just found better ways to do things. So in that sense GTA IV could be considered poorly optimized, but it was that way for all platforms rather than just PC.
its a pos when it comes to optimization. regardless of how much gpu power you have, NO cpu in the world can keep framerates from dipping into the 40s on max settings. heck mid to upper 30s happened at times even with my oced 2500k. you have to completely turn off shadows to stay above 60 fps even with an oced 2500k.
 
Last edited:

hawtdawg

Golden Member
Jun 4, 2005
1,223
7
81
not the game so much, but the PhysX performance in BL2 was [redacted] awful. They seem to have vastly improved it in the Pre-Sequel

Profanity isn't allowed in the technical forums.
-- stahlhart
 
Last edited by a moderator:

escrow4

Diamond Member
Feb 4, 2013
3,339
122
106
An 8350 will be bottlenecked in any single game that needs single threaded grunt. Which is most of them. Look at the Evil Within, an 8350 was 32/40 FPS wise, whilst a 4770 cracked 60+. FX is just horrific for the vast bulk of games.
 

mindbomb

Senior member
May 30, 2013
363
0
0
You can't use the load graphs, but if you make sure the game is cpu limited, and then multiply the cpu usage of the process times the total amount of cores the cpu has, that would tell you how many cpu cores are beneficial. So this game seems to use 43% of an 8 core or about 3-4 cores. From that you can deduce things like hyperthreading on a core i3 dual core probably is very beneficial in this case, but hyperthreading on a core i7 quad core won't be.
 
Last edited:

Dankk

Diamond Member
Jul 7, 2008
5,558
25
91

What exactly am I looking at here?

As for your comment about "shouldn't my GPU or my CPU be pegged at max for a clear bottleneck?"

The answer is "maybe". It all depends on the game, and your hardware, and your settings. If you turn AA up to 16x, resolution up to 4k, and turn on bloom, max shadows, etc, you're going to see your GPU pegged at 100% (and probably enjoy a nice slideshow of a video experience). If your CPU is simply not powerful enough to handle the game, you're going to see that pegged around 100% and this time it will be the processes waiting that's causing massive load times and poor framerates. It can be any combination of the two.

A "poorly optimized" game also falls into one of two categories:

A) It fails to properly take advantage of available resources in the positive direction. Your CPU is pegged at 40% and your GPU doesn't even kick up the fan, but you're still getting all sorts of framerate dips, slowdows, and long load times. You can throw all the resources you want at it, but it simply doesn't know how to utilize them efficiently. This is usually a deficiency of the base game engine, and you'll see similar results across *all* games created with that engine, typically you start to see this when the engine was written with consoles in mind (hence the "bad console port") or when the engine finally starts showing its age and simply was not designed to take advantage of modern GPU/CPU feature sets.

B) It fails to properly take advantage of available resources in the negative direction. You can run Crysis 3 at 1440p and jack up all the settings with a beautiful 100 FPS, but this random indie game is pegging your CPU and GPU way higher than it should be and still runs poorly at only 1080p (stuttering, low FPS, graphical glitches, etc). In this case, it *wants* more resources even though it shouldn't need them for what it's doing. Rendering a handful of low res 2d Isometric walls should not take more horsepower than rendering an entire 3d cityscape, but for some reason it does. This is also most commonly an engine-based deficiency, but it's more the result of poor coding practices and inelegant "hacks" to make things work. Later iterations of the engine and game patches that clean up certain portions of code will usually see considerable performance gains for software that falls into this category. This scenario typically happens when a game is rushed to a deadline, or is developed by a smaller studio or indie team that may have less experience/less skilled resources working on the code.

I feel like this is a pretty reasonable overall explanation. Thanks for the write-up.

Titanfall, this game uses the source engine and demands more vram then BF4 while running worst. My gtx650 can't play this game even on 768p low without stuttering and erratic dips under 60 while BF4 averages well over 100 with all low 768p.

GTA4 is stating the obvious as well.

I know DICE gets a lot of crap for Battlefield 4 (much of it deservedly so), but I gotta hand it to them, BF4 is one of the most well-optimized games I've ever played. The fact that I can play it on Ultra settings at 1080p with a mediocre FX-8350 and Radeon 7870, and achieve 60fps at almost all times, really is saying something, considering how good it looks. But I suspect Mantle most likely plays a big part in that.


An 8350 will be bottlenecked in any single game that needs single threaded grunt. Which is most of them. Look at the Evil Within, an 8350 was 32/40 FPS wise, whilst a 4770 cracked 60+. FX is just horrific for the vast bulk of games.

The Evil Within though, like many Ubi titles, seems to have been well-established already as a very bad port; has it not? I haven't played it for myself yet, but I plan on it very soon (I have it installed on Steam). It would be nice to unlock the framerate and get 60fps, but if if it's not a consistent 60fps then I suppose I might have to settle with the default 30.