[gclist] Finalizers & Reference counting.
Manoj Plakal
plakal@cs.wisc.edu
Thu, 29 Aug 2002 12:46:45 -0500
Greg Hudson wrote (Thu, Aug 29, 2002 at 11:05:10AM -0400) :
> Linus probably knows more about gcc than I do, but I think spending lots
> of time in the kernel may have skewed his judgment. Visible performance
> problems in the real world almost always stem from algorithms with poor
> scaling characteristics (O(n^2) or worse, where n is actually growing
> large). Not cache locality, not "hot spots" which need to be
> hand-optimized, not anything like that.
>
> Kernel programmers live in a world where cycle-counting optimizations
> may make sense: every program on the system uses the kernel, so every
> clock cycle you save in a common system call shaves off a little bit of
> time for every program anyone runs. libc programmers live in the same
> world. Everyone else should be looking at their algorithms and ignoring
> the rest.
I agree somewhat with your philosophy that
application writers should not waste time being
bean counters, trying to squeeze out 1% here
and 2% there.
On the other hand, I don't think you can
forget about the hardware and the system
that your app runs on. Or about working
sets and locality of reference.
It's quite possible to have two programs
that use algorithms of the same time complexity
but which have radically different memory access
patterns, causing a huge difference in performance.
You can most easily see this happening in numerical
applications on parallel computers, and I'm
sure you can see it in GC and other "real-world"
non-kernel/non-library applications too.
Predicting performance on modern
hardware can be tough with caches and
predictors. Hardware multithreading (e.g.,
Pentium 4 hyperthreading) can make it even more so.
The idea is not to spend all your time
worrying about low-level stuff but
to use good profiling tools so you
can see where your app spends time
when it runs on modern systems and
then try to do CPU/cache/TLB-optimizations
if they are causing problems.
That's what the GCC folks are trying
to do right now, to find the
source of the problem. Linus is
definitely biased, though :)
My 2 cents,
Manoj