Browse thread
How to read different ints from a Bigarray?
[
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: | 2009-10-29 (19:03) |
From: | Goswin von Brederlow <goswin-v-b@w...> |
Subject: | Re: [Caml-list] How to read different ints from a Bigarray? |
Christophe TROESTLER <Christophe.Troestler+ocaml@umons.ac.be> writes: > On Thu, 29 Oct 2009 18:05:37 +0100, Goswin von Brederlow wrote: >> >> get an int out of a string: >> C Ocaml >> uint8 le 19.496 17.433 >> int8 le 19.298 17.850 >> uint16 le 19.427 25.046 >> int16 le 19.383 27.664 >> uint16 be 20.502 23.200 >> int16 be 20.350 27.535 >> >> get an int out of a Bigarray.Array1.t: >> safe unsafe >> uint8 le 55.194s 54.508s >> uint64 le 80.51s 81.46s >> >> The Bigarray unsafe_get is really disapointing. Note that uint64 is so >> much slower because of allocating the result (my guess). Array1.set >> runs the same speed for uint8 and uint64. > > This is likely because you used the polymorphic function to access > bigarrays (compile your code with -annot and press C-c C-t in Emacs > with the point on the variable). For the compiler to be able to emit > fast code, you need to provide the monomorphic type of the bigarray: > > (a: (int, int8_unsigned_elt, c_layout) Array1.t) > > (assuming you opened the Bigarray module). > > Cheers, > C. Wow, you are right. Down to 14.919s. String.unsafe_get, which actualy does exist despite not being documented, gets 14.843s. So basically the same. MfG Goswin