[vox-tech] benchmarking (again)

Micah J. Cowan micah at cowan.name
Fri Feb 17 13:46:09 PST 2006


On Fri, Feb 17, 2006 at 04:16:29PM -0500, Peter Jay Salzman wrote:
> On Fri 17 Feb 06, 12:00 PM, Mark K. Kim <lugod at cbreak.org> said:
> > On Fri, Feb 17, 2006 at 11:13:42AM -0500, Peter Jay Salzman wrote:
> > 
> > > And I've read that java allocates
> > > memory for all data items on the heap, which is never stored in L1 cache
> > > while for C and C++, temporary objects are often put into the L1 cache.
> > 
> > I think you mean CPU registers?  L1/L2/L3 caches are just buffers
> > between RAM and the CPU registers, and all data allocated in RAM, stack
> > or heap, go through L1 cache at some point.  Programming languages or
> > compilers have no direct memory allocation access of the caches.
>  
> I was under the impression that this is what computer scientists call
> "locality of data" -- if data is used once, it'll be used again soon.  The
> strategy that attempts to exploit locality of data is to hold recent data in
> L1 cache.
> 
> I read that in an article on Java World on optimizing Java programs.

Yes, but to my understanding, there is no direct software access to the
L1 or L2 (etc) caches: the CPU does all the decision making regarding
what gets into the cache, and there are no (to my knowledge)
instructions to give direction on this.

> > Anyway, wouldn't the details of data items getting allocated in the
> > heap/stack/register depend on the JVM and the JIT compiler?  Objects,
> > would have to be allocated in the heap, but simple data types like
> > "double" can certainly be temporarily allocated in a CPU register until
> > it's out of scope, no matter what the Java standard may say, if the JIT
> > compiler, for example, determines it can be done safely and can speed up
> > the execution.
> 
> I see what you mean.  Yeah, but the question still remains -- what's going
> on with the user time in java apps, and why does the program run faster in
> Java than C++?  Certainly C++ compilers know how to do all that stuff too.

The Cygwin argument somebody put forth seems like it might be an
explanation... I really don't want to comment too much until I actually
get to see what assembly code gets generated from a given C or C++
test...

-- 
Micah J. Cowan
micah at cowan.name


More information about the vox-tech mailing list