Game not 64bit Optimized?

Simply put when running other Background tasks this game tends to choke / get laggy, however other games such as League OF Legends, Overwatch, Destiny 2, DOTA 2, all run perfectly with other background intensive tasks.

Is HOTS even 64bit optimized?

1 Like

Yes and no…

It is based on StarCraft II which was originally created as a x86 (32bit) game and optimized accordingly. However due to changing requirements and time a x86-64 (64bit) build was eventually required so one was made. Recently the x86 builds have been phased out for the x86-64 builds.

That said the game is benefiting a lot from the move to x86-64. It operates internally using a 32bit fixed point type which requires use of 64bit intermediates that are now as good as single instructions to compute. Additionally x86-64 is inherently faster due to its more RISC like design providing lots of general purpose registers. x86-64 even implicitly allows SSE2 vectorization which can make some operations considerably more efficient.

The only cause of slowdown, which is a problem in StarCraft II, is the increased memory usage due to larger pointer types which also increases memory bandwidth usage and decreases cache performance. That said from my experience since the first x86-64 builds of HotS the performance has improved drastically.

So why is the game performing badly? Let us look at the games you listed…

All of these games are nothing more than light weight clients attached to a heavy weight server which streams results to them. They perform well when your computer is busy since they basically do not have much to do.

StarCraft II, and so by inheritance HotS, do things slightly differently. The server is light weight and coordinates the clients, with each client keeping and updating a full copy of the game state. This is extremely resource intensive, especially on memory bandwidth. To make matters worse the age of StarCraft II/HotS means the game is not particularly multi threaded so only a single thread has to update the entire game state. Even though all the other games listed do not have as much work to do, they are likely heavily multi threaded which helps them perform better on busy systems.

Finally we get to how your processor itself works. Chances are it is a reasonably modern Intel or AMD processor. These dynamically change clock speeds based on the work load of the CPU. A modern I7 processor will run cores its fastest when only 1-2 cores are fully used and slowest when all cores are in use. As such for the multi threaded game engines this makes little difference since they will get a good amount of CPU performance from all cores. However for StarCraft II (and HotS) which depend on performance of just a single thread this means that by loading all cores of your CPU with background tasks you are decreasing the clock speed of all cores and hence decreasing the amount of processing resources available to the game per unit time.

Generally it is not recommended to run heavy work loads when gaming as the results are seldom good as games themselves are usually heavy work loads. If you really have to run it in these conditions then I recommend changing the process priority of Heroes of the Storm to High (not Realtime, that is intended for very specific applications). This can be done in Task Manager and should make the OS prioritize running HotS threads over background threads. One can do the inverse and lower the priority of the background task and it should have a similar effect. One can also restrict the number of CPUs the background tasks run on, which might allow the CPU to operate at a higher clock speed and hence give HotS threads more performance.

Yep that is what I figured the problem being that HOTS / StarCraft 2 uses a single thread rather than multiple threads, because I am running 32GB DDR4-3600, and all the games I use generally use all cores / threads thus the problem :O, and I hope Blizzard will eventually update it…

Also based off your description having a I7 over an AMD / SSE2, and additional instruction sets is better off than an AMD CPU <3?

But anyways I am on windows 10 PRO 64-bit, I assume that CPU - CORE 0 is what a 32 bit process want’s to run on thus, I could just free-up that entire core while gaming, or change priority?

Also got a question to if these reset back to default when the process / game is started later if I need to set each time, or if it rembers?

Multi threading is not architecturally simple given the type of synchronization model used. Where as Overwatch and such games can afford subtle deviations in game state as the single server is always right, in HotS/SC2 all clients must reproduce game state exactly to stay in sync. Although there are certainly ways to multithread, chances are they are not very easy to retrofit into the game engine without making big changes or potentially breaking existing content.

Yes and no. Technically modern intel processors perform more cycle for cycle than modern AMD processors. However both AMD and Intel make extremely beefy chips now so if you pay for the more premium products from either brand they will out perform some older or lesser I7 processors.

Instruction set wise both AMD and Intel are around parity. Technically x86-64 is AMD’s instruction set however Intel fully implements it. Since all x86-64 supporting processors from all vendors also support SSE2 that is why SSE2 is implicitly used when building targeting x86-64. It is unlikely that any platform specific instruction sets are used.

Not that simple. x86 (32bit) has nothing to do with multithreading, and follows the same rules as x86-64 processes. StarCraft II and Heroes of the Storm also do have many threads, however they only have 1 heavy thread (which does most of the work), with the others likely being used to handle blocking operations.

Windows 10 does not keep a single thread on a single processor all the time. It will rapidly move it between processor cores. If one looks at Heroes of the Storm loading the processor cores one will see 4 (6 or more with newer I7 models) cores having load on them. One might be fooled into thinking that the game is multi threaded, but it is actually that single heavy thread being time multiplexed across all cores. Why does the OS do this? I guess it is to evenly heat the surface of the processor since each core is usually its own area of the processor die.

As such I would not recommend restricting Heroes of the Storm to a single core. It will likely degrade performance and decrease cooling efficiency of the CPU. Instead I recommend limiting the background tasks that are processor intensive to only 1 or 2 cores. This should allow the processor to run at a higher boost clock speed and hence have more single thread performance. Additionally raise Heroes of the Storm process priority to High. Both these can be done from Task Manager but might have to be reapplied each time the processes are started.

I am not sure. There probably a way to automated it with shortcuts or a command script however.