lkml.org 
[lkml]   [2007]   [Aug]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH] memchr (trivial) optimization
    On Thu, Aug 23, 2007 at 02:13:20AM +0200, Ingo Oeser wrote:
    > On Wednesday 22 August 2007, lode leroy wrote:
    > > While profiling something completely unrelated, I noticed
    > > that on the workloads I used memchr for, I saw a 30%-40% improvement
    > > in performance, with the following trivial changes...
    > > (basically, it saves 3 operations for each call)
    >
    > Yes, but then you could be a bit more explicit to the compiler
    > on what you are doing here:
    >
    > void *memchr(const void *s, int c, size_t n)
    > {
    > const unsigned char *p = s;
    >
    > for (; n != 0; n--, p++) {
    > if ((unsigned char)c == *p) {
    > return (void *)p;
    > }
    > return NULL;
    > }
    >
    > Now the compiler should see the loop more clearly.

    And you can do even better with this:

    void *memchr(const void *s, int c, size_t n)
    {
    const unsigned char *p = s, *e = s + n;
    const unsigned char *e = p + n;

    for (; p < e ; p++)
    if ((unsigned char)c == *p)
    return (void *)p;

    return NULL;
    }

    which changes the inner loop from:

    50: 38 08 cmp %cl,(%eax)
    52: 74 08 je 5c <memchr2+0x1a>
    54: 4a dec %edx
    55: 40 inc %eax
    56: 85 d2 test %edx,%edx
    58: 75 f6 jne 50 <memchr2+0xe>

    to:

    6e: 38 08 cmp %cl,(%eax)
    70: 74 07 je 79 <memchr3+0x1b>
    72: 40 inc %eax
    73: 39 d0 cmp %edx,%eax
    75: 72 f7 jb 6e <memchr3+0x10>


    --
    Mathematics is the supreme nostalgia of our time.
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2007-08-24 02:15    [W:0.023 / U:3.860 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site