Changes between Version 1 and Version 2 of BackEndNotes


Ignore:
Timestamp:
Aug 8, 2006 4:48:50 PM (8 years ago)
Author:
duncan
Comment:

mention branch prediction

Legend:

Unmodified
Added
Removed
Modified
  • BackEndNotes

    v1 v2  
    9797    into the above code (apparently gcc can do this). 
    9898 
     99== Framework for branch prediction == 
     100 
     101On modern CPUs correctly predicted branches are nearly free while mis-predicted branches incurr quite a high penalty due to pipeline stalls etc. 
     102 
     103There are a number of low level things that can be done if we have some idea of the probability of a branch being taken. For example the block corresponding to the branch that is unlikely to be taken can be made the target of the jump so that the fall through branch is the likely one. On some CPUs its possible to add explicit hints to conditional jump instructions. If a branch is comparatively very unlikely then its block can be moved completely out of line. See a CPU architecture/optimisation guide for more suggestions. 
     104 
     105GCC has a framework for gathering and using branch prediction information to improve code generation. It can get information from a static analysis and heuristics, from profile feedback and ffrom explicit user annotations via __builtin_expect(). 
     106 
     107So the suggestion is that GHC could have a similar framework including explicit user annotations. It is believed that this could make a significant difference to the speed of some low level code like ByteString. 
     108 
     109See ticket #849 for more details. 
     110 
    99111== Improving and refactoring the native code generator == 
    100112