• We have updated our Community Code of Conduct. Please read through the new rules for the forum that are an integral part of Paradox Interactive’s User Agreement.
Status
Not open for further replies.
B

bholstege

Guest
One of the biggest problems with HOI2 is that games become incredibly slow after about 8-10 years. Lots of people have ideas on how to speed it up, but I've never seen any actual tests confirming what works.

I would like to test this, so people know what they can do to speed up the game, both from a hardware upgrade perspective, and a purely software approach.

I had planned on doing the test by running the Doomsday scenario on extremely fast for 1 month as Cuba, and timing how long it took. If someone has a late stage save game with slowdown problems they would like me to test, I could do that to.

I could think of testing the following things:

Software:
Counters vs Sprites
removing minors
deleting save game history
modding minor AI files to produce less INF

Hardware:
CPU clock speed
memory speed and amount
presence of a DSP (dedicated sound processor, normally found on soundcards)
Hard drive speed

If anyone has suggestions for this, I would appreciate them.
 
Initial Results (1 month doomsday scenario as Cuba):
AI on weakling: 2 minutes 15 seconds
AI on furious: 2 minutes 30 seconds
Counters On: 3 minutes 2 seconds

So it seems like sprites are actually dramatically worse than sprites, and the AI difficulty effect is noticeable, but not extreme. People playing on Furious, and with counters, are hosed.
 
Nonsense. The difficulty level only gives bonuses/handicaps to AI. It does not directly affect AI calculations, so it won't directly affect the game's performance, either.
 
I'll rerun the test then, and see if I can recreate the results

Is that true for the AI difficulty, or only the game difficulty? I know game difficulty gives bonuses.
 
The AI Aggressiveness shouldn't make any difference in this at all.

The Game Difficulty setting which give AI bonuses to the AI should affect the game, with the IC bonuses the AI gets it means many more units moving around the map which is one of the things that drags the speed down.

So it seems like sprites are actually dramatically worse than sprites, and the AI difficulty effect is noticeable, but not extreme. People playing on Furious, and with counters, are hosed.
I am pretty sure that this is an anomaly. Using counters instead of sprites should increase the game speed. In fact deleting the sprites folder is supposed to dramatically increase the speed of the game.
 
In general my experience messing with this has revealed only four things within the player's control which can improve speed of the game, and one of them is a non-starter:

1. Get rid of sprites. Nuff said.

2. Turn down difficulty - a non-starter since it negatively impacts your gaming experience by forcing you to play at too easy a level.

3. Upgrade your hardware. A faster processor and more ram yield the greatest dividends. Hard drive speed plays a negligible role unless you have a seriously outdated drive or are trying to play with an external drive hosting your swap file.

4. Annex everyone! The fewer AI countries which exist, the lower the overhead. This is my personal favorite. :p
 
Code:
# Kill AI units

event = {
	id = 888880
	random = no
	persistent = yes

	name = "AI Unit terminate"
	desc = "You have been.. TERMINATED."
	style = 0
	picture = "VIC"

	action_a = {
		name = "OK"
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
		command = { type = delete_unit which = -1 }
	}
}

Just fire this to a random country, in example:

event 888880 ARG

Kills lot of units, fastens the game.
 
Later, the game slows because of the huge data is has to work with.
Also, game history adds to this (leader history, ships history of sinkings etc.).

The game is one huge number-crunching program (units, weather, economy, AI).
Expect slowdown, you can't do anythingabout this.

To make faster, buy major CPU geared towards calculations.
 
A CPU won't help you, you can find the right suggestions in the Wiki. People with Intel Core 2 Duo CPUs -- which, keep in mind, are three years *after* the game was actually made and tremendously faster than anything at that time -- have reported the *exact same* speed problems.

It is a problem with the game engine, and the general consensus is that it is about the number of units. Hence, the kill all event Lord Finnish suggested is highly successful.
 
I got a new PC at Christmas and it definitely improved the speed of the game. The slowdown is caused by the number of calculations the machine has to make every hour, so a faster processor will definitely help but I thought I heard that this game can't take advantage of dual core processors so that won't help at all, is this right?
 
I redid the tests, to confirm the results.

Normal/Normal DD scenario, 1 month: 2 minutes 23 seconds
Second test, same settings: 2 minutes 36 seconds

This means we have a margin of error of about 9 percent. Any change within 9 percent of our 2 minute 23 second baseline can be considered to have no noticeable effect.

Same settings as above, with counters: 3 minutes 7 seconds

This is outside the margin of error, and can be considered significant. Using counters does slow down the game.

Very hard/Furious with counters: 4 minutes 1 second
Very hard/Furious: 4 minutes 47 seconds

These results are very strange, to say the least. It would seem that counters are slower at lower difficulties, but faster at higher, winch doesn't make a great deal of sense. Keep in mind that all of these results are outside the margin of error. Another explanation could be that the engine retains data from previous games, causing it to become slower the longer you play it. This warrants more testing.

Regardless, we can say without a doubt that higher difficulties have a dramatic impact on game speed. Keep in mind this was only over the course of a single month. Over the course of the entire game, the effect should be even more pronounced.
 
I thought using counters makes the game *load* much faster, but how it will affect in game speed I don't know. Given that I like sprites more I can live with your results, but I have to admit I still find them strange.

One possible explanation could be that counters do seem to exist for every single nation separately, while lots of countries use the same sprites (like inf), only with some majors having own sprites for planes/tanks in a standard installation. But it's still strange, since all counters are still much smaller (filesizes).
 
sbr said:
The slowdown is caused by the number of calculations the machine has to make every hour, so a faster processor will definitely help but I thought I heard that this game can't take advantage of dual core processors so that won't help at all, is this right?

This is correct for the most part. The game can only make use of one processor. That said, having a second available, as in a dual or quad core proc, the game gets one WHOLE processor to itself, while the OS processes and background tasks run on the other processor core(s), so there is a marginal gain for that offloading of background noise.

And contrary to what bbasgen and bholstege say, a FASTER processor does indeed help. It doesn't eliminate the slowdown, i.e. the game will still run slower in the later years than it does in the prewar years. But it will still run proportionately faster than the slow processor in ALL years.

Another BIG hardware factor is the amount of physical RAM in your system. More usable RAM means less swapping, which can be a dramatic improvement. Additionally, having bare minimum RAM causes a lot of drive thrashing, which wears out your hard drive a lot faster.
 
bholstege said:
I didn't say a faster CPU didn't help, I said it didn't eliminate the problem.
No you didn't but bbasgen did.
bbasgen said:
A CPU won't help you, you can find the right suggestions in the Wiki. People with Intel Core 2 Duo CPUs -- which, keep in mind, are three years *after* the game was actually made and tremendously faster than anything at that time -- have reported the *exact same* speed problems.

It is a problem with the game engine, and the general consensus is that it is about the number of units. Hence, the kill all event Lord Finnish suggested is highly successful.
 
Having played this game for an extensive period of time since it's first release, I can say with a great degree of certainty that the game is VERY tied to CPU speed. Here are my experiences in short with game speed and the related hardware I have used.

Athlon 750 & 512 MB RAM - Nearly unplayable from the start
Sempron 2600+ & 512 MB RAM - Very playable at game start, but very difficult to play after 43' or so
Athlon XP 2800+ & 1 GB RAM - Marginally better than previous config
Sempron 3000+ & 3 GB RAM - More or less the same as previous config
Celeron D 2.53 GHZ & 2 GB RAM - Not very playable, slow from game start in '36
Pentium Dual Core e2180 & 2.25 GB RAM - EXCELLENT speed throughout. I recently just finished a game as France from 1936 to 1953 and only the very late part of the game got too slow for my liking.

All of these installs were using XP SP2. The common theme as I stated above is the CPU speed. The Pentium Dual-Core is an Allendale core, which is basically a Core 2 Duo. Those who claim CPU speed doesn't matter must have a large amount of junk running in the background. My Pentium Dual Core setup is a secondary computer I do not use online, as such it has no anti-virus nor anti-spyware software running.

There is no way to stop the slowdown in the game. I once crafted an only Europe map, cutting out most of the world for a scenario. The result was significantly faster game because there was less units, less of EVERYTHING.

The bottom line is the faster your CPU, the more RAM you have and the less junk you have running in the background, the better your game experience will be.

A q6600 Core 2 Duo or an e8400 Core 2 Duo are the best processors you can get to improve your game speed right now. Of course, you could spend nearly a 1000$ on a Core 2 Extreme or something similar, but these CPUs give you the best bang for your buck.
 
Status
Not open for further replies.