From: Spiros Bousbouras on
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
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
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