Tuple allocation overhead
 Raj Bandyopadhyay
[
Home
]
[ Index:
by date

by threads
]
[ Message by date: previous  next ] [ Message in thread: previous  next ] [ Thread: previous  next ]
[ Message by date: previous  next ] [ Message in thread: previous  next ] [ Thread: previous  next ]
Date:   (:) 
From:  Raj Bandyopadhyay <technophobicgeek@g...> 
Subject:  Tuple allocation overhead 
Hi folks I was performing a little experiment to try and quantify some of the overhead of memory allocation in OCaml. Here is a the kind of little program that I am using for timings: let rec alloc3 n l = if n = 0 then l else alloc3 (n1) ((1,2,n)::l) The alloc3 function allocates a tuple of size 3 at every call (n is initially 100,000). I have similar functions alloc1 through alloc10, to allocate tuples of size 1 (just an integer) through 10. Here are my timing results (each time is the average of 100 runs): __Tuple sz 1 ________________ 100x avg= 1.964404E+01 msec __ Tuple sz 2 ________________ 100x avg= 4.699384E+01 msec __ Tuple sz 3 ________________ 100x avg= 4.232895E+01 msec __ Tuple sz 4 ________________ 100x avg= 4.265683E+01 msec __ Tuple sz 5 ________________ 100x avg= 4.442121E+01 msec __ Tuple sz 6 ________________ 100x avg= 4.723042E+01 msec __ Tuple sz 7 ________________ 100x avg= 5.168987E+01 msec __ Tuple sz 8 ________________ 100x avg= 5.234274E+01 msec __ Tuple sz 9 ________________ 100x avg= 5.504287E+01 msec __ Tuple sz 10 _______________ 100x avg= 5.836166E+01 msec As expected, the larger the size of the tuple, the longer it takes. However, there is a spike for tuple size 2. I am seeing this on multiple platforms (linux and mac). I was wondering if someone has a good explanation for this. I assume it has to do with some overhead of malloc, but I'm not sure. Why is it that a tuple of size 2 is more expensive to allocate than size 35 in this case? Are there other factors involved that I am not considering? Thanks Raj