Difference between revisions of "AMOS:Optimizing Traditional ways"
Spellcoder (talk | contribs) (New page: ==Move invariant statement outside loops== speed increase: varies Move invariant statement outside loops (Standard optimising compiler stuff). If you have something like this: ...) |
(No difference)
|
Latest revision as of 00:03, 9 December 2007
Move invariant statement outside loops
speed increase: varies
Move invariant statement outside loops (Standard optimising compiler stuff).
If you have something like this:
Repeat If x<a*20 Then do something groovy Until something
If the rest of the loop does not modify a, this can become:
temp=a*20 Repeat If x<temp Then do something groovy Until something
Unroll loops
speed increase: varies
Unroll your Loops!! Cuts down on Stack-Access eliminating Loop-overhead and replacing it with dedicated code. Don't go TOO overboard though. Normally five iterations is enough to gain a bit of speed. Too many iterations unrolled will actually lose speed on systems with CPU caches.
Don't use:
For X=1 To 20 UPDATE_ALIEN[X] Next X
Use this instead:
For X=1 To 16 Step 5 UPDATE_ALIEN[X] UPDATE_ALIEN[X+1] UPDATE_ALIEN[X+2] UPDATE_ALIEN[X+3] UPDATE_ALIEN[X+4] Next X
Note: You should only carry out this optimisation on small segments of code, such as plotting pixels, otherwise your code can get very bloated.
Eliminate stack access
speed increase: medium
Eliminate stack access (the reason Procedures are slower than Gosubs)
Don't use:
For X=1 To 20 Gosub MOVE_ALIEN : Rem This uses the stack 40 times Next X ' Other code MOVE_ALIEN: Moves Alien X Return
Use this instead:
Gosub MOVE_ALIENS : Rem This only uses the stack twice. ' Other code MOVE_ALIENS: For X=1 To 20 Move Alien X Next X Return
Also, try to move local variables out of procedures to make them global. They are significantly faster to use.