On 20/06/12 16:37, Manu wrote:
On 20 June 2012 17:15, Don Clugston <[email protected]
<mailto:[email protected]>> wrote:

    On 20/06/12 13:22, Manu wrote:

        I find optimisers are very good at code simplification, assuming
        that

        you massage the code/expressions to neatly match any
        architectural quirks.
        I also appreciate that good x86 code is possibly the hardest
        architecture for an optimiser to get right...


    Optimizers improved enormously during the 80's and 90's, but the
    rate of improvement seems to have slowed.

    With x86, out-of-order execution has made it very easy to get
    reasonably good code, and much harder to achieve perfection. Still,
    Core i7 is much easier than Core2, since Intel removed one of the
    most complicated bottlenecks (on core2 and earlier there is a max 3
    reads per cycle, of registers you haven't written to in the previous
    3 cycles).


Yeah okay, I can easily imagine the complexity for an x86 codegen.
RISC architectures are so much more predictable.

How do you define 'perfection'? Performance as measured on what
particular machine? :)

The theoretical limit for a particular architecture. Eg in BigInt, the most crucial functions an integer multiply in each loop iteration. Since the machine only has one integer multiply unit, it is impossible to do better than one multiply per cycle. If you've achieved that, it's perfect. If the processors are different enough you may also need a separate branch for different processors.

Reply via email to