Dolphin, the GameCube and Wii emulator - Forums

Full Version: [solved]Bottleneck : CPU or GPU?
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Pages: 1 2 3
Thank you for the big owl picture and for filling me up.

Quote: 2. If someone were to ask how many cores it has you would say it has a total of 4 cores because that question always refers to physical cores by default unless otherwise specified.
That's how it should be, but in reality if you ask an i7 owner how many cores he has, he'll say 8.
Don't expect to receive the perfect answer. It's up to you, who has more knowledge on the subject to determine.

Quote: 3. While many people substitute the term "virtual cores" for "logical cores" it is not technically correct.
This is what I mean obviously. Even while it's not technically correct, it's the easiest way to explain it so people can comprehend it.

Quote:No problem at all (1920x1080, x3-4 internal resolution, AA8x, audio LLE etc...)
What back-end? DirectX9, 11, OpenGL?
Does the game work correctly with HLE?
(08-19-2012, 07:37 AM)DETOMINE Wrote: [ -> ]@LordVador
No problem at all (1920x1080, x3-4 internal resolution, AA8x, audio LLE etc...)

"N64 remixes" tend to be hard to emulate. Zelda OOC is hard to emulate too. You shouldn't worry about this
Garteal Wrote:
DETOMINE Wrote:No problem at all (1920x1080, x3-4 internal resolution, AA8x, audio LLE etc...)
What back-end? DirectX9, 11, OpenGL?
Does the game work correctly with HLE?
I was talking about GC/WII games in general.

@LordVador
Mario Tennis 64 is the only N64 game worth emulating in dolphin, project64 being a better choice for most N64 games. But it's truly requiring a heck of a CPU.

Quote:That's how it should be, but in reality if you ask an i7 owner how many cores he has, he'll say 8.

I've never seen that before. And even if an i7 user did say that they would be completely wrong so there is no reason to say it here.

The common expression is "4 cores, 8 threads". Which I find acceptable since in this context "threads" can refer to hardware threads.

Quote:This is what I mean obviously. Even while it's not technically correct, it's the easiest way to explain it so people can comprehend it.

I don't care if people know what you meant to say. Using incorrect terminology only makes the problem worse by getting readers who don't know any better to start using it as well. For the love of all that is holy please don't do it.

Quote:@NaturalViolence
I think I begin to understand. But I may have misunderstood your last sentence. I do have lock thread to cores off. It is pretty obvious to everyone (including me!) that I am in this case CPU limited. So shouldn't I see a 100% usage in at least one logical core (please see the screen-shots)? If not (seems to be the case here), please tell the criteria to know when the CPU is at its limit.

I'll make this as simple as I can.

Calculating CPU load
This is how task manager calculates your total cpu load:
1. Every once and awhile task manager looks at the schedulers for each cpu core to see how busy they are.
2. For each logical core it looks at the time spent doing work vs. time spent idle.
3. It then calculates the ratio of the two by dividing and converts that to a percent. This gives it the percent load for each logical core.
4. It then adds up the percentages of all of the logical cores and divides by the total number of logical cores. This gives it the average load.

With HT on you have 8 logical cores.
100 / 8 = 12.5
Meaning each logical core is worth 12.5% of the total.
Dolphin has two main work threads that run in parallel (ignoring all of the minor threads). Which means at any given moment in time it can use, at most, two logical cores at the same time.
12.5 x 2 = 25
This means that dolphin can use at most 25% of your total cpu load at any moment in time. Which means your average is never going to be any higher than that.

The problem with thread affinity
With lock threads to cores turned off the OS is in charge of setting the thread affinity (the affinity is basically the OS allocating time on a logical core to a software thread). This causes the threads to jump around as the OS keeps reassigning them to different logical cores. This means cores that are not running dolphin are at 0% load while cores that are running dolphin are at 100% load. However these threads are rapidly jumping from one core to another so the cores that dolphin uses end up jumping rapidly between 0% and 100% load depending on whether or not that core is running one of dolphins software threads at that particular moment in time.

Displaying cpu load
Since your cpu processes billions of operations per second task manager can't accurately graph that considering that your monitor only runs at 60Hz (and even if your monitor and computer could graph the load in real time your human eyes wouldn't be able to keep up). So instead each point on the graph is an average of the cpu load on that logical core over a period of time. Since the cores that dolphin uses jump between 0% and 100% load as threads come and go all we can say is that the graph point is going to be somewhere between 0% and 100% depending on how much of that time was spend processing a thread and how much time wasn't. Like I said, it's an average because it's not fast enough to display the changes in load in real time.

What happens if you turn lock threads to cores on?
This will allow dolphin to set the affinity of the threads manually. Ensuring that the threads stay on whatever core they are assigned to and don't jump around. This will make the cpu load easy to graph in an accurate way. But either way your total average cpu load is still going to be 25% regardless of whether the threads are allowed to jump around or not because dolphin still won't be able to use more than two logical cores at the same time either way.

Does all of this make sense to you (this post ended up being longer and more complex than I had originally intended)?
Ok I get it now.

Thanks a lot for your explanations!
I have the feeling that the task manager is somehow misleading for a noob like me.

I may have an idea. You said that dolphin can only use 2 threads at a given time (25% of the total cpu load). So what if I turn HT off (meaning I will have 4 physical and logical threads), I may be able to get 50% total cpu load. Am I wrong?
Well, yes, that would be the reading, but your speed in-game wouldn't change at all as Dolphin doesnt care about hyper-threading.
Of course, it was just to be sure that I understood that was said before.
That being said, it means that you can use fully your 4 cores/8 threads CPU with 4 demanding apps and have the task manager showing a 50% load.
If those 4 apps each only use one thread, then yes, but a lot of apps can use more than one so ymmv. The only reason Dolphin can't use more is because the Wii/GC doesn't have any more.
Hate to piggy back on another thread but this is along the same lines as my questions.

I have an I7 - 920 (4Cores + HT)
and a Geforce GTX670

I am fairly sure i know the answer but i thought i would check here. I have been playing Beat the Beat: Rhythm Paradise and 95% of the time the speed is perfect. However there are a couple places where things noticeably LAG (Just after the initial press of A+B the music stutters and slows down for 2-3 seconds) It also slows down in built to scale just before needing to press A+B. So I'm trying to figure out if my graphics card could be the bottleneck or if i need to look into overclocking my CPU

I currently have a stock cooler and no overclocking so in theory it should be running at 2.67 Ghz. Any suggestions for double checking if that's the case? or suggestions for a good aftermarket cooler for my setup?
Get an aftermarket cooler and overclock.
Pages: 1 2 3