This guide is meant for people with 3 CPU cores or more. It also focuses solely on the primary bottleneck in the game and will not waste your time walking you through how to change graphics settings because all of you reading this are perfectly capable of testing that per machine oneself without me getting in the way as i could only do.
Starcraft 2 only uses 2 threads at any one given time. If for example you have a 4 core processor like most i5’s (new ones have 6) microsofts thread scheduler will juggle the game across all 4 cores. However under CPU bound scenarios, which starcraft 2 is very CPU limited, even “maxed out”, the cores could only ever hope for 50% utilization across all 4. This is made worse with an i7 with 4 additional logical core handled threads.
Hyperthreading is often misconcieved as purely a software trick. This is absolutely false. Its basically a texas instruments calculator crunching math, sharing cache with a main core, and a floating point unit. The reason people disable hyperthreading on i7s and get better performance a lot of the time, is because most game engines only use 4 threads, and trying to use more only results in performance degradation. Only a handful of games actually can take advantage of hyperthreading basically speaking. Examples: Witcher 3, Crysis 3, Battlefield 4. Logical processors, the hardware source of hyperthreading perform about around 25% of a full fledged core. It only makes sense to use them for games, if the game is programmed to use more threads asynchronously without penalization. Most games not doing so, is precisely why for years and years and years, an i5 was enough for gaming. That was basically taken as wisdom, along with specific ram speeds that generally ignored overclocked memory controllers faster ram could interface with. With the public mind you tend to get approximations, not specifics.
Developers do not list the maximum number of threads that can be taken advantage of before inducing needless juggling which leads to level 3 cache being dumped as information is passed off between different cores. This is called context switching. Microsofts software engineers for years have taken the “its good enough” approach to programming thread behavior, so to get better results you need to understand whats happening and take matters into ones own hands to get better performance.
What can be done to get better performance in starcraft 2? Well you can overclock the CPU cores. Everyone knows this… The cache and integrated memory controller however are pretty esoteric. Ram frequency, main ram timings, tertiary timings can be set using online charts. This done correctly is a tedious process. Crashing a machine by finding overclock limits will lead to silent data corruption nooblings. It can even corrupt a boot partition! You can also go insane lengths to trim overhead of the OS, by trimming bloat in every possible way short of hacking the kernal and reverse engineering it to detangle the excessive dependencies and often needless processes otherwise interminable. Cortana is that you? This however is not the scope of this information piece. People are notoriously lazy, lets face it, its true; and so the main focus is as plug and play with limited input as possible. You realistically cant expect the average person even confronted with the path to do so, to dig through a task scheduler, or regedit, or other drudgery because its a legitimate painful complex long process with opportunities for instances of service and task with diverse hardware, for things I cannot reasonably foresee. To take it to the polished conclusion you need passion, dedication, and some level of intuition having had a bit of dirt under your nails with some help.
Whats more is this option works on any PC without overclocking or massive changes. I do not represent the company, and I would encourage those who appreciate their work to support it, but there is a free program (Also a paid option) that allows manual control of thread scheduling behavior. It is called process lasso. I find it better than task manager.
Playing with priority can introduce more problems than will be worthwhile with respect to the average person who understandably wont be willing to test every little change. A lot of them are program dependent. What matters more, is knowing what CPU architecture (core count, logical core presence) you have relative to the games needs to avoid context switching. In fact I do not recommend anyone disable hyperthreading in bios as this software used correctly makes it obsolete at best, and wasteful at worst as the logical cores can still at least help out by handling background operating system overhead. Learn what a CPU demanding program can take advantage of by benchmarking it with different settings especially at lower CPU clocks to introduce a visible scaling performance curve. Most of the time experience will be of sufficient expectation to get the desired result without really having to do this so you can get familiar with this for future optimization targets. Once you know it, you know it, like 1+1.
A 4 core 8 thread i7 like this machine will make the most of the hardware if starcraft 2 is set to core 0 and core 2. This is because core 1 and core 3 are logical cores, weaker hardware, and is to be avoided. Ryzen CPUs with SMT will require the same settings as an i7. If you have a 4 or 6 core i5; core 0, and 1 would be perfectly fine as there are no logical cores. If you have less than 3 cores (Old phenom CPUs) there will be no gains to be had. The reason the game in old benchmarks performed better on 3 core over 2 core processors is even with context switching, the OS in itself is a leach for CPU cycles competing with limited 2 core resources the game needs. As core count goes up, the penalization increases.
Another trick you can do especially if you purpose built a machine for starcraft 2 like I did, is take the entire array of background listed services from process lassos UI, checking periodically to permanently assign as they semi randomly pop up and will not be necessarily running all the time, and put them on alternate cores that are not going to be handling the games 2 threads. How these are linked is in a staggered order. Example: Core 0 is a full fledged core, core 1 is the weaker logical core dependent, with core 2 being a fully realized core with core 3 being a logical core, and so on. If you have an 8 thread or more CPU, you can easily avoid giving work to the the logical cores sharing resources with the full fledged cores processing the game threads. This by far is the most profound change one can make to hasten frame consistency where CPU’s struggle. I recommend you disable process lassos logging completely as its just increasing overhead.
Congratulations! You now have within the games limits of coding the maximal amount of resources isolated for the game itself. You may notice even loading the game and surfing the menus is more responsive. Sometimes wildly if the CPU is fairly weak.
This game in numerous scenarios will tank under 60hz no matter how potent your CPU is. Ive bought binned high end cutting edge consumer market CPUs and no matter what, if the game drops even 1 frame, to make the GPU monitor refresh synchronous, there will be frame duplication. Also called stutter. Essentially 1 frame drop will become 2 at the least to mathematically fit into the refresh set limit as the monitor doesnt just magically stop pumping more frames than the render can actually dish out. This is why G sync was marketed using starcraft 2 in one of its demos. I personally have tried getting Freesync to work in the past, but could not get it to work, though its reported it does work at present. To get a smooth experience you will need G sync or Freesync.
If you are one of those people that do not notice screen tearing with vsync off, or the stutter with vsync on in certain situations; maybe you shouldnt bother. That or buy some glasses or something because even the broadcasted games Blizzard puts out have screen tearing. Its honestly disgusting and worse, unnecessary.
How do I test the end result? Well you got yourself some replays right? I will eventually standardize a very intense 4 vs 4 replay we can use so there is parity across systems for comparison. The camera position of any given player is locked throughout, and with the majority of whats onscreen being deterministic, or identical (Ragdoll animations should be turned off), you can measure if the tweak is working. Particularly when jumping in game from a loading screen, the shader caching at the first second or so depending on CPU, will be your most blatant proof, as well as in 4 vs 4 games where unit count clashes into epic intensity. Some people are upset the countdown patched in hiding this. For worker splits I personally appreciate it. I should also mention the before and after of speeding up the replay will stand out because the freed up and isolated resources will be spent more instead on the game and it particularly struggles at 8x speed. Fraps is a free program to get active framerate but use what you want.