[Part 2] Measuring CPU Draw Call Performance

MajinCry

Platinum Member
Jul 28, 2015
2,395
519
106
#1
(Part 1)

In the previous draw call benchmark, the settings I supplied were suboptimal; having the application split between the two different objects caused the application to eat up most of the CPU time. If only one object type is used, however, the driver has much more room to throw it's weight.

To see this for yourself, set the benchmark to use the old values (3000 ships, 6000 rocks). If you enable instancing, you get a nice bump. But with 1 ship + 16000 rocks, however? My 965 BE went from 12fps to 180fps after enabling instancing. Process Explorer also shows the driver thread doing much more with the CPU, using the new settings.


Now that's a driver test, if ever there was one. To clarify the steps you need to take:

Download the demo: NVidia, MEGA mirror
Ensure your driver settings for the program is as close to the following as possible:
yQYJut.jpg
Drag the ship slider to 1
Drag the rocks slider to 16000
Set Instancing to disabled
Tp3NyA.jpg

3000_6000.png

The next post will contain the results, as well as another fancy graph. Make sure to use the following format when reporting them:

CPU:
GPU:
GPU Driver:
OS:

Ships:
Rocks:
Draw Calls:
FPS:
 
Last edited:

MajinCry

Platinum Member
Jul 28, 2015
2,395
519
106
#2
1_16000.png

1_16000.png


Score.png

Score.png


MajinCry
CPU: Phenom II x4 965 BE @ 3.4ghz
GPU: AMD 7850 2GB
GPU Driver: 16.12.2
OS: Windows 7 64bit

Ships: 1
Rocks: 16000
Draw Calls: 16022
FPS: 12.10 - 12.28


Vodka
CPU: i5 2500k @ 4.5GHz
GPU: Sapphire R9 290 Tri-X @ 1075/1375
GPU Driver: 17.2.1 configured as in OP
OS: Windows 10 Pro x64

Ships: 1
Rocks: 16000
Draw Calls: 16022
FPS: 19.00-19.14

--

CPU: i5 2500k @ 5.1GHz
GPU: Sapphire R9 290 Tri-X @ 1075/1375
GPU Driver: 17.2.1 configured as in OP
OS: Windows 10 Pro x64

Ships: 1
Rocks: 16000
Draw Calls: 16022
FPS: 22.10-22.27


FrostigerFinger
CPU: i7 860 @ 3.60GHz
GPU: AMD Radeon HD 7950 @ 1040/1575
GPU driver: 16.12.1 (settings same as OP)
OS: Windows 7 64 bit

Ships: 1
Rocks: 16000
Draw calls: 16022
FPS: ~17.15


dogen1
CPU: G3258 @ 4.30GHz(oc'd a bit more)
GPU: GTX 950 Stock
GPU driver: 378.49
OS: Windows 7 64 bit

Ships: 1
Rocks: 16000
Draw calls: 16022
FPS: 30.5-31


Mr Evil
CPU: FX 8370E
GPU: Fury
GPU Driver: 17.1.2
OS: Win 7 x64

Ships: 1
Rocks: 16000
Draw Calls: 16022
FPS: 11.13


SPBHM
CPU: i5 2310 @ 2.9ghz/3.1ghz (turbo seems to set the clock to mostly 3.1GHz while running it)
GPU: HD 5850
GPU Driver: 15.11.1
OS: Windows 10 x64

Ships: 1
Rocks: 16000
Draw Calls:16022
FPS: 13.37


Lebdnil
CPU: Core i5-6600 (3630MHz)
GPU: HD530 integrated
GPU Driver: Intel 4590 (default settings)
OS: Win10 x64

Ships: 1
Rocks: 16000
Draw Calls: 16022
FPS: 14.77


Brunnis
CPU: Core i7-6700K (stock)
GPU: GeForce GTX 1080
GPU Driver: 376.53
OS: Windows 10 64-bit

Ships: 1
Rocks: 16000
Draw Calls: 16022
FPS: 25.60


FrostigerFinger
CPU: Intel Core 2 Duo E6700 (Conroe) @ 2.66GHz
GPU: Nvidia Geforce 8800 GTS 320MB
GPU driver: 342.01
OS: Windows 7 32 bit

Ships: 1
Rocks: 16000
Draw calls: 16022
FPS: 13.32


Monk5217
CPU: i7 4771
GPU: XFX R9 Nano
GPU Driver: 17.1.2 with settings specified in OP
OS: Windows 10 x64

Ships: 1
Rocks: 16000
Draw Calls: 16022
FPS: 17.78-18.67


TheStilt
CPU: Ryzen R7 1800X
GPU: R9 Nano
GPU Driver: ?
OS: Windows 10 x64

Ships: 1
Rocks: 16000
Draw Calls: 16022
FPS: 12.80


TheStilt
CPU: Ryzen R7 1800X
GPU: R9 Nano
GPU Driver: ?
OS: Windows 10 x64

Ships: 1
Rocks: 16000
Draw Calls: 16022
FPS: 14.69


behrouz
CPU: Phenom II X4 925 @ 2.8ghz
GPU: ATI Radeon HD 3300
GPU Driver : 8.850.0.0 , 4/19/2011
OS: Windows 7 x64

Ships: 1
Rocks: 16000
Draw Calls: 16022
FPS: 9.98-10.01


roybotnik
CPU: Ryzen 1800x @ 4.0ghz (SMT OFF)
GPU: Radeon 290 (stock)
GPU Driver: 17.2.1
OS: Windows 10 x64

Ships: 1
Rocks: 16000
Draw Calls: 16022
FPS: 16.53-17.13


tomatone
CPU: G3258 @ 4.4GHz
GPU: R9 270
GPU Driver: 16.11.5
OS: Win 7 64bit

Ships: 1
Rocks: 16000
Draw Calls: 16022
FPS: 28.02-28.35


nevbie
CPU: C2D E8400 E0 @ 3GHz
GPU: ATI Radeon HD 4850 512MB
GPU Driver: (Catalyst 13.9)
OS: Win 7 x64

Ships: 1
Rocks: 16000
Draw Calls: 16022
FPS: 11.84-11.91 window focused, 9.59-9.61 not focused, 12.12-12.15 fullscreen


tbob18
CPU: Sandybridge E5-1660 @ 4.6Ghz
GPU: AMD R9 290
GPU Driver: ?
OS: Win 10 x64

Ships: 1
Rocks: 16000
Draw Calls: 16022
FPS: 20.06


CatMerc
CPU: Core i5 6600K @ 4.2GHz
GPU: R9 390 @ 1025MHz
GPU Driver: 17.2.1
OS: Win 10 64bit

Ships: 1
Rocks: 16k
Draw Calls: 16,022
FPS: 23~ FPS[/URL]


Magic Hate Ball
CPU: Ryzen 1800X @ 4.0ghz, No SMT, RAM @ 3200Mhz
GPU: Sapphire Fury Tri-X OC @ 1050Mhz
GPU driver: 17.3.1

Ships: 1
Rocks: 16000
Draw calls: 16022
FPS: ~17.72
 
Last edited:

.vodka

Golden Member
Dec 5, 2014
1,013
1,033
106
#3
.vodka
CPU: i5 2500k @ 4.5GHz
GPU: Sapphire R9 290 Tri-X @ 1075/1375
GPU Driver: 17.2.1 configured as in OP
OS: Windows 10 Pro x64

Ships: 1
Rocks: 16000
Draw Calls: 16022
FPS: 19.00-19.14

oYULT3.jpg

--------------------------------------

.vodka
CPU: i5 2500k @ 5.1GHz
GPU: Sapphire R9 290 Tri-X @ 1075/1375
GPU Driver: 17.2.1 configured as in OP
OS: Windows 10 Pro x64

Ships: 1
Rocks: 16000
Draw Calls: 16022
FPS: 22.10-22.27

BqQisn.jpg

------------------

Nice data you're gathering. I'd love to see the same as you, if Zen finally fixes AMD's deficit in this area for the past ten years since Conroe landed in 2006.
 
Feb 17, 2017
30
2
6
#4
CPU: i7 860 @ 3.60GHz
GPU: AMD Radeon HD 7950 @ 1040/1575
GPU driver: 16.12.1 (settings same as OP)
OS: Windows 7 64 bit

Ships: 1
Rocks: 16000
Draw calls: 16022
FPS: ~17.15

btw. maybe you should add to the OP that instancing must be disabled.
 

dogen1

Senior member
Oct 14, 2014
739
40
91
#5
CPU: G3258 @ 4.30GHz(oc'd a bit more)
GPU: GTX 950 Stock
GPU driver: 378.49
OS: Windows 7 64 bit

Ships: 1
Rocks: 16000
Draw calls: 16022
FPS: 30.5-31
 

Mr Evil

Senior member
Jul 24, 2015
348
109
86
mrevil.asvachin.eu
#6
CPU: FX 8370E
GPU: Fury
GPU Driver: 17.1.2
OS: Win 7 x64

Ships: 1
Rocks: 16000
Draw Calls: 16022
FPS: 11.13

Unlike the previous test, the FPS remains constant this time. CPU use is about 12% for the main thread, and 10% for the driver.

If I turn instancing on, CPU use drops to 8%/0.5%, and the following numbers change:
Draw Calls: 23
FPS: 222.52-226.46
 
Feb 17, 2017
30
2
6
#9
CPU-Z says 3.6GHz. I know it's supposed to have a turbo frequency of 4.3GHz, but I've never seen it actually do that.
Can you check with HWInfo64 instead? cpu-z doesn't show the frequency of all cores, hwinfo does.
 

Mr Evil

Senior member
Jul 24, 2015
348
109
86
mrevil.asvachin.eu
#10
HWInfo64 mostly shows 3.6GHz, with an occasional blip up to 4.3GHz for just a second.

There's nothing running in the background (CPU use without running the draw call test is <1%), nor is the CPU hot (only up to 49°C while testing).
 

MajinCry

Platinum Member
Jul 28, 2015
2,395
519
106
#12
Nice data you're gathering. I'd love to see the same as you, if Zen finally fixes AMD's deficit in this area for the past ten years since Conroe landed in 2006.
Yeah man, here's hoping. Supposing Zen finally gets AMD over that hurdle, I'll be splurging for a new platform upgrade. Otherwise, I'll probably just nab an i5 2500k off Ebay.


btw. maybe you should add to the OP that instancing must be disabled.
Good catch. Updated the OP.


Also updated the results posts. Gimme a few minutes to get the graph up.
 

MajinCry

Platinum Member
Jul 28, 2015
2,395
519
106
#15
Graph's up.

And lo' and behold, we see AMD's draw call deficit! That i7 860 is 144% faster than my 965 when it comes to processing these "ideal" draw calls. Fairly certain that if the rocks were each given a unique material and texture (so more draw call work), the gap would be even more pronounced.

Though, I am curious as to why the 8370E scored quite a bit better than my 965 BE. Wonder if it's something driver side, that does a bit of magic with Fury's sexy specs.
 

SPBHM

Diamond Member
Sep 12, 2012
4,700
226
106
#16
CPU: i5 2310 (stock, turbo seems to set the clock to mostly 3.1GHz while running it)
GPU: HD 5850
GPU Driver: 15.11.1
OS: Windows 10 x64

Ships: 1
Rocks: 16000
Draw Calls:16022
FPS: 13.37

comparing this result with the 2500K 4.5GHz one, it looks around the same increase in clock and FPS, so I think having an older driver/GPU from AMD is not having a significant effect on the result.
 

MajinCry

Platinum Member
Jul 28, 2015
2,395
519
106
#17
comparing this result with the 2500K 4.5GHz one, it looks around the same increase in clock and FPS, so I think having an older driver/GPU from AMD is not having a significant effect on the result.
'Twas one of the things mentioned by the ENB dev; modern intel CPUs scale almost linearly with clocks:draw calls.

If we take the i5 2500k scores, each 100mhz = 0.51fps. Bumping up your score to a theoretical 4.5ghz:

4.5ghz - 3.1ghz = 1,400 mhz
14 * 0.51 = 7.14fps
13.37 + 7.14 = 20.61fps

Close enough.
 

Lebdnil

Junior Member
Jul 13, 2016
11
8
36
#18
32133207894_1974d89c03_o.jpg


CPU: Core i5-6600 (3630MHz)
GPU: HD530 integrated
GPU Driver: Intel 4590 (default settings)
OS: Win10 x64

Ships: 1
Rocks: 16000
Draw Calls: 16022
FPS: 14.77

Byes
 

Brunnis

Senior member
Nov 15, 2004
480
39
91
#19
CPU: Core i7-6700K (stock)
GPU: GeForce GTX 1080
GPU Driver: 376.53
OS: Windows 10 64-bit

Ships: 1
Rocks: 16000
Draw Calls: 16022
FPS: 25.60
 

.vodka

Golden Member
Dec 5, 2014
1,013
1,033
106
#20
CPU: Core i7-6700K (stock)
GPU: GeForce GTX 1080
GPU Driver: 376.53
OS: Windows 10 64-bit

Ships: 1
Rocks: 16000
Draw Calls: 16022
FPS: 25.60
CPU: G3258 @ 4.30GHz(oc'd a bit more)
GPU: GTX 950 Stock
GPU driver: 378.49
OS: Windows 7 64 bit

Ships: 1
Rocks: 16000
Draw calls: 16022
FPS: 30.5-31
This is what I don't understand.

How in hell is that 4.3GHz G3258 beating a stock 6700k? GPU power doesn't matter here since we're CPU limited and the scene is simple even with so much stuff going on. I mean, single threaded DX9 running on modern hardware

dogen's rig was also posting way too high numbers in the first part.

What is going on? Some driver setting that makes such a difference? I haven't used an nV card since the GF 7 series back in 2006 so I have no idea about the current driver settings and what could be happening here.
 
Last edited:
Feb 17, 2017
30
2
6
#21
Here's another ancient one for comparison:

CPU: Intel Core 2 Duo E6700 (Conroe) @ 2.66GHz
GPU: Nvidia Geforce 8800 GTS 320MB
GPU driver: 342.01
OS: Windows 7 32 bit

Ships: 1
Rocks: 16000
Draw calls: 16022
FPS: 13.32


Surprisingly good if you ask me!
 
Feb 17, 2017
30
2
6
#22
Here's another ancient one for comparison:

CPU: Intel Core 2 Duo E6700 (Conroe) @ 2.66GHz
GPU: Nvidia Geforce 8800 GTS 320MB
GPU driver: 342.01
OS: Windows 7 32 bit

Ships: 1
Rocks: 16000
Draw calls: 16022
FPS: 13.32


Surprisingly good if you ask me!
In fact this result is way too good, the old Conroe seems to wipe the floor with Lynnfield and even Sandybridge, when accounting for the clock rate difference!

What is going on.
 

MajinCry

Platinum Member
Jul 28, 2015
2,395
519
106
#23
In fact this result is way too good, the old Conroe seems to wipe the floor with Lynnfield and even Sandybridge, when accounting for the clock rate difference!

What is going on.
It could be driver differences. I thought AMD's D3D9 driver was superior to NVidia's, since AMD has a hardware scheduler.

Might also be that since it's an NVidia demo, it's built around NVidia's driver behaviour. Answer to that is to not compare across the two brands. Compare AMD against AMD, and NVidia against NVidia. Still, it's pretty crazy.

The demo comes with source code, so the programming types could take a look and see if there's anything wonky going on.


Edit: Found the answer. Remembered talking about this ages ago.

http://enbseries.enbdev.com/forum/viewtopic.php?f=17&t=4869#p69741
With dips things are not that simple. Not just draw function call cost lot of performance, but every command to driver between draw calls. You may (for old nvidia drivers at least) call crazy amount of draw calls in cycle without modifying anything, performance will be awesome. Insert any changes to object -> bottleneck.
What he means by this, is that if you are ONLY just rendering the exact same object, with no variation in draw calls (i.e, 16000 of the same rock object), and no other driver work (shaders?), NVidia wins hands down.

Keep in mind that scenario never occurs in games, due to lighting, shaders, shadows, materials, morphs, etc.
 
Last edited:
Feb 17, 2017
30
2
6
#24
It could be driver differences. I thought AMD's D3D9 driver was superior to NVidia's, since AMD has a hardware scheduler.

Might also be that since it's an NVidia demo, it's built around NVidia's driver behaviour. Answer to that is to not compare across the two brands. Compare AMD against AMD, and NVidia against NVidia. Still, it's pretty crazy.

The demo comes with source code, so the programming types could take a look and see if there's anything wonky going on.


Edit: Found the answer. Remembered talking about this ages ago.

http://enbseries.enbdev.com/forum/viewtopic.php?f=17&t=4869#p69741


What he means by this, is that if you are ONLY just rendering the exact same object, with no variation in draw calls (i.e, 16000 of the same rock object), and no other driver work (shaders?), NVidia wins hands down.

Keep in mind that scenario never occurs in games, due to lighting, shaders, shadows, materials, morphs, etc.
This would also explain the godly performance of the Pentium paired with a 950.
 

.vodka

Golden Member
Dec 5, 2014
1,013
1,033
106
#25
It doesn't, 6700k is 4GHz base clock, 4.2GHz single threaded turbo and is using a GTX1080, so it's nvidia vs nvidia.

Assuming this is a single threaded test, 100Mhz advantage for the G3258 doesn't even cover the IPC gap between full Skylake 6700k and cut down (3MB L3$) Haswell G3258.

How come the G3258 rig is posting 30FPS while the 6700k rig is at the 25 FPS mark? They're using different drivers, and it's Windows 7 vs Windows 10, but still.
 

ASK THE COMMUNITY

TRENDING THREADS