aspell-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[aspell-devel] optimizations


From: Karl Chen
Subject: [aspell-devel] optimizations
Date: 26 Apr 2004 16:52:59 -0700
User-agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.3.50

>>>>> "Kevin" == Kevin Atkinson <address@hidden> writes:
    >> Gcc 3.3 requires constants (empty_str) to be initialized.
    >> (BTW, you could probably make it static const or just write
    >> the value instead of empty_str)
    Kevin> 
    Kevin> Its a minor memory optimization.  The idea is to avoid
    Kevin> having to dereference a distant memory location just to
    Kevin> discover that it is the empty string.

Are you sure this is really worth it?  (I'm asking, not being rude.)

It seems like a very premature optimization (trying to make sure
that the string contents are in L1 cache).  For example, if you
wanted to trade simplicity for acute optimizations you could use
NULL instead of "" to indicate empty strings to avoid the
memory-load altogether when reading the value.

Since gcc pools equal string constants together, there's only one
memory location to read; other string constants are likely to be
nearby also.  So if you dereference the value of "" a lot then
it's likely to already be in L1 cache anyway.

For writing the value your optimization is actually worse;
consider this code:

extern void bar(char const*);

struct C {
    const char* s;
    const char z[1];
    C() : z() {}

    int foo1();
    int foo2();

    int quux1();
    int quux2();
};

int C::foo1() { bar(""); return 1;}
int C::foo2() { bar(z); return 1;}

int C::quux1() { s = ""; return 1;}
int C::quux2() { s = z; return 1;}


Compiled with: g++-3.3 -March=i686 -S -O2 a.cc


bar(""):
        movl    $.LC0, (%esp)
        call    _Z3barPKc

bar(z):
        movl    8(%ebp), %eax
        addl    $4, %eax
        movl    %eax, (%esp)
        call    _Z3barPKc

s = "":
        movl    8(%ebp), %eax
        movl    $.LC0, (%eax)

s = z:
        movl    8(%ebp), %edx
        leal    4(%edx), %eax
        movl    %eax, (%edx)
        movl    $1, %eax


P.S. I think either way the effort is wasted doing this kind of
optimization in a spell-checker.  Since it sounds from the web
page you're strapped for time/energy, I think it's more important
to work on featureset, bugs, etc. than rewriting/optimizing STL.


-- 
Karl 2004-04-24 13:10




reply via email to

[Prev in Thread] Current Thread [Next in Thread]