[M3devel] <*LAZYALIGN*>
Tony Hosking
hosking at cs.purdue.edu
Mon Feb 18 18:36:43 CET 2008
Can someone remind me again why we need LAZYALIGN? I concur with
Randy that if it is rarely used and moreso breaks things I would
argue to abandon it.
On Feb 18, 2008, at 10:56 AM, Randy Coleburn wrote:
> I use pickles extensively and they are used also by network objects.
> I've never used LAZYALIGN.
> My vote is that we don't break something (pickles/netobj) to add
> support for something that is rarely used.
> Regards,
> Randy
>
> >>> "Rodney M. Bates" <rodney.bates at wichita.edu> 2/15/2008 5:06 PM >>>
> I'll put it in comments in the code. I am sure I can fix it to
> handle LAZYALIGN too, just not sure whether I can do it without
> requiring existing pickle files to be regenerated and/or existing
> code that reads/writes pickles to need recompilation.
>
> Anybody on this list who has code that might be affected if pickles
> or compiled code were invalidated by a change?
>
> I do propose we change the way of telling the compiler to do
> LAZYALIGN so that it is a property of a type and affects all
> variables of that type.
>
> Olaf Wagner wrote:
> > Perhaps we should check-in this description somewhere near the
> > actual code? Or is there enough documentation already?
> >
> > Olaf
> >
> > PS: Based on your description, I'd say we should abandon LAZYALIGN.
> > Or at least put a big sticker on that it will break pickles.
> >
> > Quoting "Rodney M. Bates" <rodney.bates at wichita.edu>:
> >
> >> The word "Packing" in RTPacking is perhaps misleading. Using
> BITSIZE,
> >> etc. only works for getting object layouts as on the machine
> executing
> >> the code, which is all that is needed when writing a pickle.
> >>
> >> When reading, Pickle code needs to know the layouts of a type
> both as
> >> it is on the reading machine and as it was on the machine that
> wrote
> >> the pickle. The type description that the compiler generates is
> >> excerpted and contains no field displacements, just lists of field
> >> types (which are either recursive type descriptions or builtin
> types).
> >> So it is independent of word sizes, etc.
> >>
> >> Pickles regenerates the displacements using the few target machine
> >> characteristics in a RTPacking.T It traverses a type
> description and
> >> simultaneously computes two sets of field displacements, both as
> they
> >> are on the reading machine and on the writing machine. For the
> latter,
> >> the value of RTPacking.T is (after a compact bit encoding)
> stored in the
> >> header of the pickle file. For the former, it's gotten by
> techniques
> >> like
> >> using BITSIZE. This is actually all done in RTTipe, part of
> m3core, and
> >> called by Pickle code.
> >>
> >> This is very fragile. RTTipe has to duplicate the compiler's
> layout
> >> behavior. There is no shared code. Making it common would involve
> >> quite a bit of rework, as the two use substantially different data
> >> structure and code organization. It will be obvious what kind
> of bit
> >> damage could occur if the two algorithms didn't agree.
> >>
> >> This is why I am obsessing over LAZYALIGN. I have been
> comparing the
> >> field displacement computations in RTTipe and in the compiler. The
> >> former is oblivious to LAZYALIGN.
> >>
> >> Note that all this is required even without any packing of small
> fields
> >> within words. E.G., a record with two INTEGER fields, pickled on a
> >> 32-bit machine and unpickled on a 64.
> >>
> >> Tony Hosking wrote:
> >>
> >>> Rodney,
> >>>
> >>> Why does there need to be an entry for LONGINT in RTPacking? I
> >>> would have thought all packing is done on word-sized units
> anyway.
> >>> Each side of the connection can check BITSIZE(LONGINT) to figure
> >>> out what to do presumably no differently from the way INTEGER is
> >>> communicated between 32-bit and 64-bit machines. Am I missing
> >>> something?
> >>>
> >>> -- Tony
> >>>
> >>> On Feb 15, 2008, at 10:51 AM, Tony Hosking wrote:
> >>>
> >>>> Ah, OK. I don't much delve in pickle-land. Anything I can
> help with?
> >>>>
> >>>> On Feb 14, 2008, at 11:02 PM, Rodney M. Bates wrote:
> >>>>
> >>>>> 1) RTPacking.T and needs to have a separate size for LONGINT,
> >>>>> (which can vary independently of the size of INTEGER).
> >>>>> 2) Variable length values of subrange bounds found in type
> >>>>> descriptions (in TipeDesc.i3) can now have values beyond
> >>>>> what the native word size can represent.
> >>>>> 3) RTType.Kind.Longint (which I presume you, Tony, added
> recently)
> >>>>> is not handled by Pickles.
> >>>>>
> >>>>> I have done some coding on this, but have been interrupted.
> >>>>>
> >>>>> Tony Hosking wrote:
> >>>>>
> >>>>>> Why is LONGINT for pickles not yet supported?
> >>>>>
> >>>>>
> >>>>>
> >>>>> --
> >>>>> -------------------------------------------------------------
> >>>>> Rodney M. Bates, retired assistant professor
> >>>>> Dept. of Computer Science, Wichita State University
> >>>>> Wichita, KS 67260-0083
> >>>>> 316-978-3922
> >>>>> rodney.bates at wichita.edu
> >>>
> >>>
> >>>
> >>>
> >>
> >> --
> >> -------------------------------------------------------------
> >> Rodney M. Bates, retired assistant professor
> >> Dept. of Computer Science, Wichita State University
> >> Wichita, KS 67260-0083
> >> 316-978-3922
> >> rodney.bates at wichita.edu
> >
> >
> >
> >
>
> --
> -------------------------------------------------------------
> Rodney M. Bates, retired assistant professor
> Dept. of Computer Science, Wichita State University
> Wichita, KS 67260-0083
> 316-978-3922
> rodney.bates at wichita.edu
>
More information about the M3devel
mailing list