Jump to content

How to determine if a CPU bottlenecks the GPU?

tikker
Go to solution Solved by manikyath,

i'm gonna type this rant one more time: (because this time people seem to actually be interested in it...)

 

"bottlenecking" is a fine balance between a piece of software, the different areas of your computer it uses, and how powerful those different areas are.

bottlenecking is something that *always* happens, because theres always one piece of hardware thats the limiting factor. (a perfectly balanced system doesnt exist)

 

the "bottleneck" thats most known on the net is when your CPU isnt fast enough to let the game use 100% of your GPU: a CPU bottleneck.

when your CPU is strong enough to do this, you *technically* have a GPU bottleneck, the GPU is the limiting factor of how fast your game runs. (this is what most gamers are after)

 

theres also more areas where a computer can bottleneck than CPU and GPU: imagine extracting a 20GB zip archive on a system with 8GB RAM.

the system will be unable to load the entire archive in RAM for processing, and it'll have to spend time on dynamically loading and unloading parts of the archive, making the process slower than it could, resulting in a "RAM bottleneck"

 

then we come to the hidden parts of the computer no one really talks about: the different busses in your system:

if you're running an 18core xeon thats magically OC'ed to 10GHz, and a fury X on steroids, plugged ina PCI-e 4x slot. (the reason i say specificly fury x is because AMD allows down to 4x pci-e, nvidia only down to 8x)

theres a big chance that 4x pci-e slot will not be able to keep up with the talk between the CPU and GPU, allowing neither to run at 100% load.

 

theres less extreme places where this happens, mostly in badly coded games (minecraft had it going on for a while...) this is the point people think "my computer is broken" while in fact its an issue hidden deep inside the system, thats not really measurable trough conventional means.

--

if you've made it this far, i'm sure by now you've realised there is no clear-cut way of deciding if something will "bottleneck" or not. but it gets worse:

within one game, there could be scenes that load the CPU more, and scenes that load the GPU more. as well as the fact theres no two games with the same balance between CPU load, GPU load, and other loads. (even within one engine, theres a clear difference between HL2 and HL2: lost coast)

 

you can always "guesstimate" if a system will be balanced for your specific workload, but its never a clear answer. the only reason to know for sure is by testing.

 

i'd also like to add that theres no single "balanced system" that is ideal for everything. i spent a while with an i7 4770 and a GT640.

more often than not the 4770 was the "bottleneck" in my system, rather than the GT640, even in games.

 

i'd also like to add that benchmarks arent a clear answer to if a game will run fine on specific hardware or not, because generally benchmarks are performed with all settings maxed out, to create a "fair comparison"

 

in a lot of cases theres one or two settings you can turn down to make a game MUCH more playable on a system with a weak GPU, or in some cases even in cases with a weak CPU.

 

to give you an example: my GT640 ran league of legends at a clean 60FPS (1440p), while barely looking different from "all the way maxed out" that ran at a fairly horrible 20FPS.

Recently I became curious in bottlenecking. I realize that if I take the lowest tier CPU and combine it with the best GPU out there, it will bottleneck. What got me wondering is how exactly this bottlenecking works and how you can determine if your system is bottlenecked. I came across this article and what I got from it, if I understand correctly, a CPU basically should not be at full load when gaming? Does this mean it cannot deliver the frames to the GPU fast enough and work piles up or does it go deeper?

 

This brings me to a second question. Is there a way to check (or eyeball) bottlenecking? I see a question pop up every now and then if component X will bottleneck component Y. I've never been quite able to answer these questions, not even for myself. Is this something you learn with experience, or are there benchmarks or similar to look at and determine this?

 

 

Crystal: CPU: i7 7700K | Motherboard: Asus ROG Strix Z270F | RAM: GSkill 16 GB@3200MHz | GPU: Nvidia GTX 1080 Ti FE | Case: Corsair Crystal 570X (black) | PSU: EVGA Supernova G2 1000W | Monitor: Asus VG248QE 24"

Laptop: Dell XPS 13 9370 | CPU: i5 10510U | RAM: 16 GB

Server: CPU: i5 4690k | RAM: 16 GB | Case: Corsair Graphite 760T White | Storage: 19 TB

Link to comment
Share on other sites

Link to post
Share on other sites

Imagine your CPU is running @100% LOAD and your GPU only has like 50% LOAD, the CPU is most likely bottlenecking or the software isn't using your GPU

CPU: Xeon 1230v3 - GPU: GTX 770  - SSD: 120GB 840 Evo - HDD: WD Blue 1TB - RAM: Ballistix 8GB - Case: CM N400 - PSU: CX 600M - Cooling: Cooler Master 212 Evo

Update Plans: Mini ITX this bitch

Link to comment
Share on other sites

Link to post
Share on other sites

 

i believe when there is a cpu bottleneck, the cpu is at 100% load while the gpu is only below 60%

"Sulit" (adj.) something that is worth it

i7 8700K 4.8Ghz delidded / Corsair H100i V2 / Asus Strix Z370-F / G.Skill Trident Z RGB 16GB 3200 / EVGA GTX 1080Ti FTW3 / ASUS ROG SWIFT PG279Q

Samsung 850 EVO 500GB & 250GB - Crucial MX300 M.2 525GB / Fractal Design Define S / Corsair K70 MX Reds / Logitech G502 / Beyerdynamic DT770 250Ohm

SMSL SD793II AMP/DAC - Schiit Magni 3 / PCPP

Old Rig

i5 2500k 4.5Ghz | Gigabyte Z68XP-UD3P | Zotac GTX 980 AMP! Extreme | Crucial Ballistix Tactical 16GB 1866MHz

Link to comment
Share on other sites

Link to post
Share on other sites

i'm gonna type this rant one more time: (because this time people seem to actually be interested in it...)

 

"bottlenecking" is a fine balance between a piece of software, the different areas of your computer it uses, and how powerful those different areas are.

bottlenecking is something that *always* happens, because theres always one piece of hardware thats the limiting factor. (a perfectly balanced system doesnt exist)

 

the "bottleneck" thats most known on the net is when your CPU isnt fast enough to let the game use 100% of your GPU: a CPU bottleneck.

when your CPU is strong enough to do this, you *technically* have a GPU bottleneck, the GPU is the limiting factor of how fast your game runs. (this is what most gamers are after)

 

theres also more areas where a computer can bottleneck than CPU and GPU: imagine extracting a 20GB zip archive on a system with 8GB RAM.

the system will be unable to load the entire archive in RAM for processing, and it'll have to spend time on dynamically loading and unloading parts of the archive, making the process slower than it could, resulting in a "RAM bottleneck"

 

then we come to the hidden parts of the computer no one really talks about: the different busses in your system:

if you're running an 18core xeon thats magically OC'ed to 10GHz, and a fury X on steroids, plugged ina PCI-e 4x slot. (the reason i say specificly fury x is because AMD allows down to 4x pci-e, nvidia only down to 8x)

theres a big chance that 4x pci-e slot will not be able to keep up with the talk between the CPU and GPU, allowing neither to run at 100% load.

 

theres less extreme places where this happens, mostly in badly coded games (minecraft had it going on for a while...) this is the point people think "my computer is broken" while in fact its an issue hidden deep inside the system, thats not really measurable trough conventional means.

--

if you've made it this far, i'm sure by now you've realised there is no clear-cut way of deciding if something will "bottleneck" or not. but it gets worse:

within one game, there could be scenes that load the CPU more, and scenes that load the GPU more. as well as the fact theres no two games with the same balance between CPU load, GPU load, and other loads. (even within one engine, theres a clear difference between HL2 and HL2: lost coast)

 

you can always "guesstimate" if a system will be balanced for your specific workload, but its never a clear answer. the only reason to know for sure is by testing.

 

i'd also like to add that theres no single "balanced system" that is ideal for everything. i spent a while with an i7 4770 and a GT640.

more often than not the 4770 was the "bottleneck" in my system, rather than the GT640, even in games.

 

i'd also like to add that benchmarks arent a clear answer to if a game will run fine on specific hardware or not, because generally benchmarks are performed with all settings maxed out, to create a "fair comparison"

 

in a lot of cases theres one or two settings you can turn down to make a game MUCH more playable on a system with a weak GPU, or in some cases even in cases with a weak CPU.

 

to give you an example: my GT640 ran league of legends at a clean 60FPS (1440p), while barely looking different from "all the way maxed out" that ran at a fairly horrible 20FPS.

Link to comment
Share on other sites

Link to post
Share on other sites

If the CPU cant push the GPU to 95-100% then you are sure or as some claim even if kinda wrong the program uses way to much CPU and way to little GPU. People also claim poorly optimized games is a CPU bottleneck but in truth those games should not if the game was made properly...

Lake-V-X6-10600 (Gaming PC)

R23 score MC: 9190pts | R23 score SC: 1302pts

R20 score MC: 3529cb | R20 score SC: 506cb

Spoiler

Case: Cooler Master HAF XB Evo Black / Case Fan(s) Front: Noctua NF-A14 ULN 140mm Premium Fans / Case Fan(s) Rear: Corsair Air Series AF120 Quiet Edition (red) / Case Fan(s) Side: Noctua NF-A6x25 FLX 60mm Premium Fan / Controller: Sony Dualshock 4 Wireless (DS4Windows) / Cooler: Cooler Master Hyper 212 Evo / CPU: Intel Core i5-10600, 6-cores, 12-threads, 4.4/4.8GHz, 13,5MB cache (Intel 14nm++ FinFET) / Display: ASUS 24" LED VN247H (67Hz OC) 1920x1080p / GPU: Gigabyte Radeon RX Vega 56 Gaming OC @1501MHz (Samsung 14nm FinFET) / Keyboard: Logitech Desktop K120 (Nordic) / Motherboard: ASUS PRIME B460 PLUS, Socket-LGA1200 / Mouse: Razer Abyssus 2014 / PCI-E: ASRock USB 3.1/A+C (PCI Express x4) / PSU: EVGA SuperNOVA G2, 850W / RAM A1, A2, B1 & B2: DDR4-2666MHz CL13-15-15-15-35-1T "Samsung 8Gbit C-Die" (4x8GB) / Operating System: Windows 10 Home / Sound: Zombee Z300 / Storage 1 & 2: Samsung 850 EVO 500GB SSD / Storage 3: Seagate® Barracuda 2TB HDD / Storage 4: Seagate® Desktop 2TB SSHD / Storage 5: Crucial P1 1000GB M.2 SSD/ Storage 6: Western Digital WD7500BPKX 2.5" HDD / Wi-fi: TP-Link TL-WN851N 11n Wireless Adapter (Qualcomm Atheros)

Zen-II-X6-3600+ (Gaming PC)

R23 score MC: 9893pts | R23 score SC: 1248pts @4.2GHz

R23 score MC: 10151pts | R23 score SC: 1287pts @4.3GHz

R20 score MC: 3688cb | R20 score SC: 489cb

Spoiler

Case: Medion Micro-ATX Case / Case Fan Front: SUNON MagLev PF70251VX-Q000-S99 70mm / Case Fan Rear: Fanner Tech(Shen Zhen)Co.,LTD. 80mm (Purple) / Controller: Sony Dualshock 4 Wireless (DS4Windows) / Cooler: AMD Near-silent 125w Thermal Solution / CPU: AMD Ryzen 5 3600, 6-cores, 12-threads, 4.2/4.2GHz, 35MB cache (T.S.M.C. 7nm FinFET) / Display: HP 24" L2445w (64Hz OC) 1920x1200 / GPU: MSI GeForce GTX 970 4GD5 OC "Afterburner" @1450MHz (T.S.M.C. 28nm) / GPU: ASUS Radeon RX 6600 XT DUAL OC RDNA2 32CUs @2607MHz (T.S.M.C. 7nm FinFET) / Keyboard: HP KB-0316 PS/2 (Nordic) / Motherboard: ASRock B450M Pro4, Socket-AM4 / Mouse: Razer Abyssus 2014 / PCI-E: ASRock USB 3.1/A+C (PCI Express x4) / PSU: EVGA SuperNOVA G2, 550W / RAM A2 & B2: DDR4-3600MHz CL16-18-8-19-37-1T "SK Hynix 8Gbit CJR" (2x16GB) / Operating System: Windows 10 Home / Sound 1: Zombee Z500 / Sound 2: Logitech Stereo Speakers S-150 / Storage 1 & 2: Samsung 850 EVO 500GB SSD / Storage 3: Western Digital My Passport 2.5" 2TB HDD / Storage 4: Western Digital Elements Desktop 2TB HDD / Storage 5: Kingston A2000 1TB M.2 NVME SSD / Wi-fi & Bluetooth: ASUS PCE-AC55BT Wireless Adapter (Intel)

Vishera-X8-9370 | R20 score MC: 1476cb

Spoiler

Case: Cooler Master HAF XB Evo Black / Case Fan(s) Front: Noctua NF-A14 ULN 140mm Premium Fans / Case Fan(s) Rear: Corsair Air Series AF120 Quiet Edition (red) / Case Fan(s) Side: Noctua NF-A6x25 FLX 60mm Premium Fan / Case Fan VRM: SUNON MagLev KDE1209PTV3 92mm / Controller: Sony Dualshock 4 Wireless (DS4Windows) / Cooler: Cooler Master Hyper 212 Evo / CPU: AMD FX-8370 (Base: @4.4GHz | Turbo: @4.7GHz) Black Edition Eight-Core (Global Foundries 32nm) / Display: ASUS 24" LED VN247H (67Hz OC) 1920x1080p / GPU: MSI GeForce GTX 970 4GD5 OC "Afterburner" @1450MHz (T.S.M.C. 28nm) / GPU: Gigabyte Radeon RX Vega 56 Gaming OC @1501MHz (Samsung 14nm FinFET) / Keyboard: Logitech Desktop K120 (Nordic) / Motherboard: MSI 970 GAMING, Socket-AM3+ / Mouse: Razer Abyssus 2014 / PCI-E: ASRock USB 3.1/A+C (PCI Express x4) / PSU: EVGA SuperNOVA G2, 850W PSU / RAM 1, 2, 3 & 4: Corsair Vengeance DDR3-1866MHz CL8-10-10-28-37-2T (4x4GB) 16.38GB / Operating System 1: Windows 10 Home / Sound: Zombee Z300 / Storage 1: Samsung 850 EVO 500GB SSD (x2) / Storage 2: Seagate® Barracuda 2TB HDD / Storage 3: Seagate® Desktop 2TB SSHD / Wi-fi: TP-Link TL-WN951N 11n Wireless Adapter

Godavari-X4-880K | R20 score MC: 810cb

Spoiler

Case: Medion Micro-ATX Case / Case Fan Front: SUNON MagLev PF70251VX-Q000-S99 70mm / Case Fan Rear: Fanner Tech(Shen Zhen)Co.,LTD. 80mm (Purple) / Controller: Sony Dualshock 4 Wireless (DS4Windows) / Cooler: AMD Near-silent 95w Thermal Solution / Cooler: AMD Near-silent 125w Thermal Solution / CPU: AMD Athlon X4 860K Black Edition Elite Quad-Core (T.S.M.C. 28nm) / CPU: AMD Athlon X4 880K Black Edition Elite Quad-Core (T.S.M.C. 28nm) / Display: HP 19" Flat Panel L1940 (75Hz) 1280x1024 / GPU: EVGA GeForce GTX 960 SuperSC 2GB (T.S.M.C. 28nm) / GPU: MSI GeForce GTX 970 4GD5 OC "Afterburner" @1450MHz (T.S.M.C. 28nm) / Keyboard: HP KB-0316 PS/2 (Nordic) / Motherboard: MSI A78M-E45 V2, Socket-FM2+ / Mouse: Razer Abyssus 2014 / PCI-E: ASRock USB 3.1/A+C (PCI Express x4) / PSU: EVGA SuperNOVA G2, 550W PSU / RAM 1, 2, 3 & 4: SK hynix DDR3-1866MHz CL9-10-11-27-40 (4x4GB) 16.38GB / Operating System 1: Ubuntu Gnome 16.04 LTS (Xenial Xerus) / Operating System 2: Windows 10 Home / Sound 1: Zombee Z500 / Sound 2: Logitech Stereo Speakers S-150 / Storage 1: Samsung 850 EVO 500GB SSD (x2) / Storage 2: Western Digital My Passport 2.5" 2TB HDD / Storage 3: Western Digital Elements Desktop 2TB HDD / Wi-fi: TP-Link TL-WN851N 11n Wireless Adapter

Acer Aspire 7738G custom (changed CPU, GPU & Storage)
Spoiler

CPU: Intel Core 2 Duo P8600, 2-cores, 2-threads, 2.4GHz, 3MB cache (Intel 45nm) / GPU: ATi Radeon HD 4570 515MB DDR2 (T.S.M.C. 55nm) / RAM: DDR2-1066MHz CL7-7-7-20-1T (2x2GB) / Operating System: Windows 10 Home / Storage: Crucial BX500 480GB 3D NAND SATA 2.5" SSD

Complete portable device SoC history:

Spoiler
Apple A4 - Apple iPod touch (4th generation)
Apple A5 - Apple iPod touch (5th generation)
Apple A9 - Apple iPhone 6s Plus
HiSilicon Kirin 810 (T.S.M.C. 7nm) - Huawei P40 Lite / Huawei nova 7i
Mediatek MT2601 (T.S.M.C 28nm) - TicWatch E
Mediatek MT6580 (T.S.M.C 28nm) - TECNO Spark 2 (1GB RAM)
Mediatek MT6592M (T.S.M.C 28nm) - my|phone my32 (orange)
Mediatek MT6592M (T.S.M.C 28nm) - my|phone my32 (yellow)
Mediatek MT6735 (T.S.M.C 28nm) - HMD Nokia 3 Dual SIM
Mediatek MT6737 (T.S.M.C 28nm) - Cherry Mobile Flare S6
Mediatek MT6739 (T.S.M.C 28nm) - my|phone myX8 (blue)
Mediatek MT6739 (T.S.M.C 28nm) - my|phone myX8 (gold)
Mediatek MT6750 (T.S.M.C 28nm) - honor 6C Pro / honor V9 Play
Mediatek MT6765 (T.S.M.C 12nm) - TECNO Pouvoir 3 Plus
Mediatek MT6797D (T.S.M.C 20nm) - my|phone Brown Tab 1
Qualcomm MSM8926 (T.S.M.C. 28nm) - Microsoft Lumia 640 LTE
Qualcomm MSM8974AA (T.S.M.C. 28nm) - Blackberry Passport
Qualcomm SDM710 (Samsung 10nm) - Oppo Realme 3 Pro

 

Link to comment
Share on other sites

Link to post
Share on other sites

Recently I became curious in bottlenecking. I realize that if I take the lowest tier CPU and combine it with the best GPU out there, it will bottleneck. What got me wondering is how exactly this bottlenecking works and how you can determine if your system is bottlenecked. I came across this article and what I got from it, if I understand correctly, a CPU basically should not be at full load when gaming? Does this mean it cannot deliver the frames to the GPU fast enough and work piles up or does it go deeper?

 

This brings me to a second question. Is there a way to check (or eyeball) bottlenecking? I see a question pop up every now and then if component X will bottleneck component Y. I've never been quite able to answer these questions, not even for myself. Is this something you learn with experience, or are there benchmarks or similar to look at and determine this?

 

How it works:

 

Every frame rendered requires the CPU to do a certain amount of work preparing the frame for the GPU. The CPU has to do certain calculations (animations, physics, how far things have moved, etc.) and tell the GPU what to draw... which objects are on screen, where they are, what affects need to be applied to them, lighting/shadow effects, etc. So as your framerate gets higher, the CPU load gets higher (because it has to do these tasks more frequently). So eventually you reach a framerate where the CPU cannot go any higher because it's basically maxed out from doing these tasks, even though the GPU could theoretically provide more frames per second.

 

How to tell:

 

It depends on the game... some games aren't so clear and have a complex relationship between the CPU and GPU, and there will be no apparent bottleneck but CPU will still impact performance significantly. Not really sure how this works so I'll gloss over this for now. 

 

As I said, the CPU has to prepare the frames for the GPU... so when the CPU is getting maxed out the GPU isn't getting all the frames it needs. Basically the CPU takes longer to prepare the frame than the GPU takes to render it. So when the CPU is bottlenecking the GPU, you will typically see GPU usage drop. You can monitor your GPU usage with something like MSI Afterburner. If your GPU usage is below ~90% then that's pretty evident of a bottleneck.

 

Some people check by seeing CPU usage... and while high CPU usage can mean the CPU will be a bottleneck, it's not super accurate because the bottleneck is usually caused by ONE core/thread not being fast enough, and also because tasks get thrown around to different threads so load can look lower than it is.

 

Really GPU usage is your best bet... though some games will have tools to monitor this more accurately. For example in Battlefield 4 (and I presume Hardline too) you can type the command PerfOverlay.DrawGraph 1 into the in-game console and it will tell you how long the CPU and the GPU spent on each frame actively... if the CPU line spikes up high on the graph or is routinely longer than the GPU, then the CPU is bottlenecking.

Intel i5-4690K @ 3.8GHz || Gigabyte Z97X-SLI || 8GB G.Skill Ripjaws X 1600MHz || Asus GTX 760 2GB @ 1150 / 6400 || 128GB A-Data SX900 + 1TB Toshiba 7200RPM || Corsair RM650 || Fractal 3500W

Link to comment
Share on other sites

Link to post
Share on other sites

Imagine your CPU is running @100% LOAD and your GPU only has like 50% LOAD, the CPU is most likely bottlenecking or the software isn't using your GPU

 

This isn't super accurate though because:

 

a.) bottlenecking is generally caused by one software thread not being processed fast enough (until DX12 gets around this is almost always draw calls, though sometimes it can be physics, AI or even just everything in games that only use a couple threads)

 

b.) Windows will move tasks to different threads of the CPU... not sure if it thinks it's more efficient or if it's to use the CPU evenly so it lasts longer (I would guess the second one but I really have no idea, just speculation)

 

Here's an example I recorded in the game RIFT. It's very evident the CPU is bottlenecking since GPU usage is extremely low and framerates are quite low and stuttery... but not a single core is anywhere near 100% and overall CPU usage is much lower than 100% because tasks are being moved around so much to different threads:

 

Intel i5-4690K @ 3.8GHz || Gigabyte Z97X-SLI || 8GB G.Skill Ripjaws X 1600MHz || Asus GTX 760 2GB @ 1150 / 6400 || 128GB A-Data SX900 + 1TB Toshiba 7200RPM || Corsair RM650 || Fractal 3500W

Link to comment
Share on other sites

Link to post
Share on other sites

Sorry for the late reply.

 

@Gamogamer

He explains it well indeed.

 

@Hieb

@manikyath

Thank you for taking the time to write it once more. Your answer made it much more clear that it is not one phenomenon and even can be game dependent.

 

Thanks for the replies :)

Crystal: CPU: i7 7700K | Motherboard: Asus ROG Strix Z270F | RAM: GSkill 16 GB@3200MHz | GPU: Nvidia GTX 1080 Ti FE | Case: Corsair Crystal 570X (black) | PSU: EVGA Supernova G2 1000W | Monitor: Asus VG248QE 24"

Laptop: Dell XPS 13 9370 | CPU: i5 10510U | RAM: 16 GB

Server: CPU: i5 4690k | RAM: 16 GB | Case: Corsair Graphite 760T White | Storage: 19 TB

Link to comment
Share on other sites

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×