[Python-Dev] Alignment assumptions

David Abrahams David Abrahams" <david.abrahams@rcn.com
Thu, 28 Feb 2002 15:44:32 -0500


----- Original Message -----
From: "Tim Peters" <tim.one@comcast.net>

> [David Abrahams, on
>     Include/objimpl.h:275: double dummy;  /* force worst-case alignment */
> ]
> > As I read the code, it affects all types (doesn't this header begin
every
> > object, regardless of its GC flags?)
>
> Nope, only objects that go through _PyObject_GC_Malloc().  It could be a
> nightmare if, e.g., every string and int object consumed another (at
least)
> 12 bytes.

Oh! I guess I should explicitly avoid _PyObject_GC_Malloc() unless I'm
supporting GC, then. As you can see, there's a lot of basic stuff I still
don't understand.

> > and I think that's a very unhappy circumstance for your numeric
> > community. Remember, the type that raised the alarm here was just a
> > long double.
>
> The *Python* numeric community is far more likely to embed a float than a
> long double, and in any case seems unlikely to build a container type
> mixing long double with PyObject* members (i.e., one that ought to
> participate in cyclic gc).

OK, I get it. I'm still not clear on what happens by default, but I was
under the mistaken impression that some types get GC support "automatically"
and thus that people would be subject to undesired alignment problems
without explicitly choosing them.

> I expect we have a blind spot towards long double in general since Python
> doesn't expose or use such a thing, all the developers run on platforms
> where (as far as they know <wink>) it's the same as a double, and "long
> double" was introduced after K&R (so some old-timers likely aren't even
> aware C89 introduced it).
>
> But I'll change the code here to use long double instead -- it's harmless,
> as it doesn't make a lick of difference on any platform that matters <0.7
> wink>.

Just for the record, I didn't twist your arm about this (only the ends of
your moustache).

> Well, nobody has complained yet, but the core never needs alignment
stricter
> than double, and-- as above --an extension type that both did and needed
to
> participate in GC is unlikey.

Makes sense. And I guess because this is 'C', hacking in the appropriate
alignment if such a type ever arose wouldn't be that hard.

> > and my clients were depending on it anyway, it was good enough for
> > my code (not!).
>
> One of the secrets to Python's success is that we tell unreasonable users
to
> go away and bother the C++ committee instead.

That explains everything, thank you (especially the oving relationship we
have with our lusers)!

> [128-byte alignment needed for KSR's _subpage type]
> > I was aware that this was a theoretical possibility, but not that it
> > was a practical one. What's KSR?
>
> Kendall Square Research, my (and Tani's, Tamah's and Steve Breit's)
employer
> before Dragon.  The address space was carved into 128-byte "subpages", and
> the hardware supported Python-style (non-owned non-reentrant) locks
directly
> on a per-subpage basis (Python's lock.acquire() and lock.release() were
one
> machine instruction each!).  Subpages were also the unit for cache
coherency
> across processors.  So use of _subpage in our system code, and in
> speed-obsessed app code, was ubiquitous.  I guess the main thing KSR
proved
> was that you can't stay in business designing custom hardware to execute
> Python's semantics directly <wink>.

/Please/ tell me you weren't trying to build a parallel Python machine
<5.99wink>.