Part 1 applies to AMD processor users only:
Basically the game uses intels compiler which will penalize AMD processors unless you patch the game using the directions below. The menu performance otherwise is very sluggish and the general in game performance is worse without patching it. Some other programs benefit from this patch, like carnivores reborn which now allows a much higher LOD on this ryzen 3700X 4.35Ghz 1:1ed 3733 CAS 16 1T (Virginized tertiaries).
The actual instructions:
[ / w w w . anger . o r g /optimize/intel_dispatch_patch.zIp ]( h t t p s : / / w w w .agner. o r g /optimize/intel_dispatch_patch.zip)
1: Download from the link that he shows in the video I linked above on YouTube around 11 minutes.
2: Google visual studios 2017 and download that too. Dont worry about the 30 day time out. The feature we are using is still fully accessible for free.
3: Open the game followed by opening the patch. The green “attach…” area click and locate the game instance in the menu.
4: Run intel_mkl_cpuid_patch.c. The game will crash as a result of being patched. That’s all there is to it. You can play online without worrying about anti cheats just fine.
It worked easily for StarCraft 2. The game is SIGNIFICANTLY faster because its now using the SSE3 instruction set. Some applications it may not without running visual studios as an admin. If you have to do this with any application simply open a new project when it offers to reboot it under admin, and look for c#, then go to open file and find intel_mkl_cpuid_patch.c. From there go to “debug” and find “attach to process”. From there do the same thing and it will work.
(Edit: I recently discovered there is a change in the code, SC2 can now use 4 threads!)
Part 2 applies to both intel and AMD:
Requirements are 6 hardware threads or more. This can include 4 core i7s, or ryzens with hyperthreading.
1: Download process lasso. Find StarCraft II as its running in the menu and change the CPU affinity using the chart below.
6 core i5 (…core 0, 1, 2, 3)
4 core 8 thread i7 (…0, 2, 4, 6)
6 core 12 thread i7 (0, 2, 4, 6)
10 core 20 thread i9 (0, 2, 4, 6)
The pattern if your CPU isn’t listed is a question of, does it have hyperthreading.
6 core Phenom (0, 2, 4, 6)
FX series (0, 2, 4, 6)
Ryzen series (0, 2, 4, 6)
FX series shares cache (So you want to avoid sharing that resource when possible) like hyperthreading does, and ryzen actually has hyperthreading. That’s it, you are now done. On ryzen 2 with 8 cores, I tried splitting the game to cores 0, 2, 8, 10 as the 16mb cache pool is split. The game performance tanked compared to just using 0, 2, 4, 6 so just stick with the above.
The TLDR version of Part 2 (Read at your own risk):
This guide is meant for people with 6 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 4 threads (At some point it was only 2!) at any one given time. If for example you have a 6 core processor like some i5’s, microsofts thread scheduler will juggle the game across all 6 cores. However under CPU bound scenarios, which starcraft 2 is very CPU limited. This is made worse with an i7 with 4 additional logical core handled threads.
Hyperthreading is basically a physical piece of hardware like 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, DX12, Vulkan. 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 or if you can outright avoid using weaker logical cores altogether when it doesn’t serve you. Most games not utilizing this i7 feature, is precisely why for 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. 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 truly polished conclusion (Raw speed) you need passion, dedication, and some level of intuition having had a bit of dirt under your nails with some help. For most of you dont worry about all that fine detail. Lets keep with things as simple as possible.
Download process lasso to take control of your CPU threads.
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 instead of sometimes leaching from the same cores the game has to use. 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, 2, 4, and 6. 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 6 core i5; core 0, 1, 3, 4 would be perfectly fine as there are no logical cores. If you have less than 6 cores there will be no gains to be had. The reason the game in old benchmarks performed better on 3 core over 2 core processors in old benchmarks is even with context switching, the OS in itself is a leach for CPU cycles competing with limited original 2 core resources the game needed. 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 6 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.
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. To get a smooth experience you will need G sync or Freesync.
How do I test the end result? Well you got yourself some replays right? Pull up your framerate using fraps then use a 4 vs 4 replay and any locked camera position of a player (You see exactly what they saw during that match) and turn off ragdolls as they are not purely deterministic. I should also mention the before and after of speeding up the replay will stand out very obviously. It can actually save you time if you are one of those players that looks back at replays trying to improve.
Edit: Recently for whatever reason the game has begun to hang with the waiting for program to respond nonsense post in game going back into the menus. Its hit or miss if it comes back eventually or outright crashes. The solution is put StarCraft 2 on high priority instead of normal. It works perfectly again.