Friday, February 18, 2011

Didja know that STARCRAFT II don't run so well on multi-core systems?

Well, you do now! But be of good cheer: I'm about to tell you how to fix that.

I've had StarCraft II for awhile now, but haven't played even anywhere close to finishing the first campaign. Among other reasons, I've been frustrated by what I have been certain is too slow performance for the high-end rig I've got it installed on. And yesterday, I finally set out to find out why (or if I was even right about that).

Turns out that StarCraft II doesn't like multiple CPUs all that well. Optimally it should be running on two cores, not three or four. So Yours Truly went searching for a way to bring it down to operating on only two processors. Lo and behold: it can be done! Start up StarCraft II from the desktop, then bring up Task Manager (usually done through CTRL+ALT+Delete), go to the sc2.exe process and right-click on it and look for "Set Affinity". From here you can specify which CPUs you want to run the game on and which ones to turn off.

I tried it yesterday and the game performed significantly faster than it had before.

But, there was one hitch: every time the game is exited, doing Set Affinity through Task Manager must be done all over again. Leaving the program causes CPU affinity to revert to the default four cores (or whatever is the number of cores on your computer).

This is the kind of problem that, I can sometimes be awake for days trying to solve. I just don't like it when I've a gut feeling that a technical issue can be resolved, given enough time and thinkin' about it.

Well dear readers, a short while ago I came across a fix.

Actually, good friend Adam Smith located the substance of the solution, so credit goes to where it must :-) If you're trying to get StarCraft II - or any program that might run faster on one or two cores instead of four or five or seven - downshifted from too much processing power, then PriFinitty is the tool you need. PriFinitty (currently at version 2.47) sets affinity for whatever executable programs you need to do it for, and it keeps the affinity settings in a profile that loads automatically whenever you launch PriFinitty (which can be set to load at startup). I set StarCraft II to use CPUs 2 and 3, ignoring the rest, and it worked beautifully! Then I exited the game, and re-launched it. The affinity settings were still binding just those two cores! So... color me impressed :-)

There is just one thing that I need to say about using PriFinitty with StarCraft II: you should have PriFinitty set affinity for both "starcraft ii.exe" and "sc2.exe". But there are more than one version of sc2.exe to consider: they're all in the Versions folder of the StarCraft II main folder. And then you'll have to look in the folders in the Versions folder that say "Base..." (my install has six of 'em currently). So, I'd recommend going into all of the Base* folders, and adding each sc2.exe to your PriFinitty profile and adjusting the affinity for each. Y'know, just to be on the safe side. I don't see how doing it to any extra sc2 executables is going to do any harm.

Then make sure that PriFinitty is running in the background with your profile and launch StarCraft II and prepare to take the fight to the Zerg faster than ever!

(And a tip o' the hat to Adam Smith for pointing me toward PriFinnity :-)

2 comments:

  1. HOWLEEEE SMOKES!!!!!!!! I've been trying to get Starcraft 2 performing better for months and nothing worked until I tried this. NOTHING FREEZES OR STALLS NOW!

    You dah man Chris!!! :)

    ReplyDelete
  2. Glad to help :-) I have also tried PriFinnity in the past few days to improve performance of the original StarCraft (it kept asking for the game disc, then I had to hit "Cancel" and re-start again, which began the game the second time) and iTunes (it's MUCH faster in loading now!).

    I am now thinking of trying it with Fallout 3, since that game has refused to work ever since I installed a new graphics board, and apparently Fallout 3 has wonky issues with multiple cores as well.

    ReplyDelete