Why are games running faster on multiple threads vs a single one on a single CPU system?
The reason is because there is a great deal of bus activity when using OpenGL. Multiple threads are more efficient because you can gain some cycles while data is being pushed around.
The extra overhead to switch between threads and pass objects between them would definitely lower the overall framerate.
CPU's can switch thread contexts extremely fast. So fast you would probably never see an FPS drop even if the other thread wasn't doing anything for you.
I can understand getting faster video framerate, but what about uncapped logic?
I honestly don't see a gain on a single CPU.
Uncap the logic, benchmark it properly, and then I bet you a single CPU will be faster overall on a single thread.
Unless there is something more going on that I just can't seem to see.
It is benchmarked properly or the game would not run properly when threading was turned off. It's to complicated to explain how the engine works in this message, but there are no more waits that are inccurred in non-threaded mode. The game logic an timing runs identically with threads on or off, it just runs 10-15% faster with them on.
The thing you are missing is the raw amount of IO that has to happen in a 3D engine. Textures generated at run-time (the consoles and holo-display), thousands of verts, thousands of normals and colors being manipulated, all leads to MB's of data going to the video card every frame.
The biggest thing to keep in mind as to why multithreaded can be benificial even on a single CPU system is because the graphics pipeline, no matter what amount of parallelism exists on the GPU, is still serial for state chanes and submission. No amount of NIO will change that, so there is always wasted cycles with just a single thread. The more you are sending to the card, the bigger the waste becomes.
As Cas said above, the bottleneck is the video card. This is why most games are better off with a high end video card and a mid-range processor as opposed to a mid ranged video card and a high end processor. With multiple threads you can take advantage of the lost CPU time to do something useful while waiting for the video card. The thing is, unless your engine is designed from the ground up to do this, there is no advantage to the strategy.
Developing a multithreaded engine is far more complex then a single threaded engine. The idea is to partition the logic between rendering and things like animation, AI, physics etc. The CPU intesive things (the later) can be done in another thread, so when data is being serialized down to the video card, the CPU can work on that other stuff for the next frame. This is the 10-15% gain in a single processor environment that I get. In a SMP or HT computer the gains will be even bigger...substantially bigger.