lkml.org 
[lkml]   [2004]   [Oct]   [31]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: Semaphore assembly-code bug
    On Fri, 29 Oct 2004, Linus Torvalds wrote:

    >
    >
    > On Fri, 29 Oct 2004, linux-os wrote:
    >>
    >> Linus, there is no way in hell that you are going to move
    >> a value from memory into a register (pop ecx) faster than
    >> you are going to do anything to the stack-pointer or
    >> any other register.
    >
    > Sorry, but you're wrong.

    I am not wrong.

    I don't understand anything about your theoretical CPU
    with the magic stack engine. Anything I can get my
    hands on functions exactly as I described and exactly
    as would be expected. We work with real hardware here
    and I have to test it as part of my job.

    And, FYI, I spend all my working time trying to get the
    last iota of performance out of ix86 CPUS. Since I can
    only read publicly available documentation, I have
    to test code in actual operation.

    The attached file shows that the Intel Pentium 4 runs
    exactly as I described. Further, there is no difference in
    the CPU clocks used when adding a constant to the stack-
    pointer or using LEA.

    It also shows that poping stack-data into the same register
    twice, as you suggested, takes the same time as using a
    different register.


    Timer overhead = 88 CPU clocks
    push 3, pop 3 = 12 CPU clocks
    push 3, pop 2 = 12 CPU clocks
    push 3, pop 1 = 12 CPU clocks
    push 3, pop none using ADD = 8 CPU clocks
    push 3, pop none using LEA = 8 CPU clocks
    push 3, pop into same register = 12 CPU clocks

    The code uses a separate assembly-language file so that
    the 'C' compiler can't optimize-away what I am measuring.
    It also saves and uses the shortest number of CPU cycles
    so the code doesn't have to execute with the interrupts
    OFF to get a stable reading.

    >
    > Learn about modern CPU's some day, and realize that cached accesses are
    > fast, and pipeline stalls are relatively much more expensive.
    >

    That's what I do, and that's what I teach.

    > Now, if it was uncached, you'd have a point.
    >
    > Also think about why
    >
    > call xxx
    > jmp yy
    >
    > is often much faster than
    >
    > push $yy
    > jmp xxx
    >
    > and other small interesting facts about how CPU's actually work these
    > days.
    >
    > Linus
    >

    Cheers,
    Dick Johnson
    Penguin : Linux version 2.6.9 on an i686 machine (5537.79 BogoMips).
    Notice : All mail here is now cached for review by John Ashcroft.
    98.36% of all statistics are fiction.[unhandled content-type:application/x-gzip]
    \
     
     \ /
      Last update: 2005-03-22 14:07    [W:0.032 / U:32.660 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site