On Wed Apr 25 15:17:15 EDT 2012, [email protected] wrote:
> On 25/04/2012, erik quanstrom <[email protected]> wrote:
> > i think you mean the maximum value of an integer
> > rather than a count. assuming this, vlongs are
> > still 64 bits with 8c and the 32-bit architecture.
> >
> > what's wrong with them?
>
> Twice as many instructions, if I'm not mistaken, and a waste of good
> 64-bit registers.
it's not like the registers are real on a modern x86 machine in any mode
after renaming, etc. and this is also offset somewhat by the fact that
pointers are now twice as big.
so best case for 64-bit, is that you are adding 64-bit numbers in a tight
loop with almost no memory access. i get only a 2-3x speedup for this
case
32-bit machine (not idle):
minooka; time 8.addv
3.08u 0.00s 3.11r 8.addv # status= main
minooka; aux/cpuid -i
Intel(R) Xeon(R) CPU E5540 @ 2.53GHz
64-bit machine (idle, but slower)
bonanza; time 6.addv
1.55u 0.00s 1.58r 6.addv # status= main
bonanza; aux/cpuid -i
Intel(R) Xeon(R) CPU E5504 @ 2.00GHz
by amdahl's law, you're going to have to be doing a hell of a lot of
vlong arithmetic to make this pay.
also, in case you missed it sizeof(int)==sizeof(long)==4 on both 32
and 64 bit plan 9, so recompiled programs won't get bigger integers
just for the recompiling.
- erik
-----
bonanza; cat addv.c
#include <u.h>
#include <libc.h>
void
main(void)
{
int i;
vlong acc;
acc = 0;
for(i = 0; i < 1000000000; i++)
acc += i;
}