From: Spiros Bousbouras on 13 Dec 2009 07:29 On Sat, 12 Dec 2009 19:47:25 GMT Spiros Bousbouras <spibou(a)gmail.com> wrote: > > Not at all. As I said in [1] > > Not that 1 subscript matters much of course , my main beef is > with the decision to only allow fixnums. Having made that > decision I can kind of see why they opted for simplicity and > specified ARRAY-DIMENSION-LIMIT and ARRAY-TOTAL-SIZE-LIMIT to > also be fixnums at the cost of taking 1 extra subscript away > from the programmer. > > > [1] <RylSm.7782$6p6.5066(a)newsfe05.ams2> > < http://groups.google.co.uk/group/comp.lang.lisp/msg/0268f9abf3bd8eca > Link is wrong , the correct is < http://groups.google.co.uk/group/comp.lang.lisp/msg/3cdf465376c4870c >
From: Tim Bradshaw on 13 Dec 2009 15:20 On 2009-12-12 17:47:37 +0000, Spiros Bousbouras <spibou(a)gmail.com> said: > So what did you do manually that your implementation wasn't clever > enough to do on its own ? It seems to me that the most naive thing an > implementation can do for implementing bit arrays is to use 1 byte per > bit. If this uses too much memory and leads to swapping then I can see > how it would damage performance. But I don't think it takes a > particularly clever compiler to pack bits into one byte (or word > if it leads to faster access) and then access individual bits using > masks. After all why would you declare a bit array if you don't want > that to happen ? If it's good enough to have each bit occupy a whole > byte you would declare each array element to be of type (mod 256) or > whatever is appropriate instead of 256. The problem was not paging, because the implementation did pack things (I'm sure that all serious implementations do). The problem was that the compiler was not up to doing the kind of loop-unrolling needed to generate a good pattern of fetches and masks. That's absolutely critical for good performance on huge bit-arrays, as otherwise you get something like a fetch/shift per element which is horrible. What I ended up doing (and I didn't completely implement this, as I ran out of time and energy) was using an array of some good, larger type, then using a macro to unroll the loop myself.
From: Antony on 16 Dec 2009 14:55
Spiros Bousbouras wrote: > On Mon, 7 Dec 2009 20:19:59 +0000 (UTC) > Kaz Kylheku <kkylheku(a)gmail.com> wrote: >> Ah, but on x86, the only architecture Spiros knows about, > > My first computer had a Z80 so there. Ah, so you know x85 :) -Antony |