Software optimization: Difference between revisions
Appearance
Content deleted Content added
Added a couple more techniques. |
more optimizations; changed header |
||
Line 1: | Line 1: | ||
Optimization of software is making it use less time or space to do the same thing. It's a very large topic |
Optimization of software is making it use less time or space to do the same thing. It's a very large topic; some aspects of optimization follow, each big enough to deserve its own Wikipedia article: |
||
* profiling to find critical parts of the software (and then optimizing those) |
* profiling to find critical parts of the software (and then optimizing those) |
||
Line 33: | Line 33: | ||
* sentinels |
* sentinels |
||
* removing recursion |
* removing recursion |
||
* strength reduction* reduction of cache collisions (e.g. by disrupting alignment within a page) |
Revision as of 20:29, 25 October 2001
Optimization of software is making it use less time or space to do the same thing. It's a very large topic; some aspects of optimization follow, each big enough to deserve its own Wikipedia article:
- profiling to find critical parts of the software (and then optimizing those)
- measuring attempted optimizations to see if they actually improved matters
- using a better algorithm or data structure to reduce time, space, or both
- rewriting code in a lower-level language (C or assembly language are common choices) to reduce both time and space
- precomputation, memoization, caching, and hints to reduce time
- using packed bit-fields or packed bytes to reduce memory usage
- alignment
- using data instead of code to reduce memory usage
- using overlays or virtual memory to reduce memory usage
- using a compiler, or a better compiler, on your code, or supplying different optimization flags to your compiler
- parallellization
- specialized fast-path code to handle common cases
- normalization or denormalization of data
- reorganization of data to reduce false sharing, improve packing, improve locality of reference (by rearranging fields in a record or by moving some fields to other records.)
- lazy evaluation
- speculation and prefetching
- reduction of overhead by batching
Some more specific tricks, many of which can be done either by hand or by a compiler, follow:
- loop unrolling
- loop combining
- loop interchange (swapping inner and outer loops)
- common subexpression elimination
- test reordering
- inlining of procedures
- constant folding and propagation
- instruction scheduling
- dead code elimination
- code-block reordering to reduce conditional branches and improve locality of reference
- factoring out of invariants (moving invariant expressions out of loops, e.g.)
- sentinels
- removing recursion
- strength reduction* reduction of cache collisions (e.g. by disrupting alignment within a page)