Array Descriptor Update

Daniel Kraft d@domob.eu
Fri Sep 26 09:39:00 GMT 2008


Hi Paul,

Paul Richard Thomas wrote:
> Janne and Thomas have been contributing to a rather important page on
> the gfortran wiki: http://gcc.gnu.org/wiki/ArrayDescriptorUpdate
> 
> It starts with, "In some cases it would be nice to improve gfortran's
> array descriptors."

This is indeed interesting (I've followed the talk about array 
descriptors a bit in the past), and although I'm not really an expert on 
this topic, would like to contribute whatever I can.

> I think that it has become essential to do this as one of the first
> tasks in gcc-4.5, for the reasons given in the wiki page and to
> realise such things as allocatable scalars and, I have come to
> believe, CLASSES.  The reason it might be a good thing for classes is
> because of the need to carry a type identifier with the class pointer.
>  This could be done in the same way as character lengths, as at
> present, or as a descriptor field.  I do wonder if this is not the
> purpose of the reserved word in the Intel descriptor?

If I understand you correctly, we would have one type of descriptor that 
would be used for allocated arrays as well as allocatable scalars and 
CLASS pointers/pointees, so that would be "the" place to store the 
runtime type token?

As you mentioned character lengths, maybe we should think about length 
type parameters in general for this project?  But that's just an 
associative thought, I've no idea at the moment about what length type 
parameters really impose on the compiler.

> One thing that is noticable about the Intel and the Pathscale
> descriptors is that they carry no type or kind information, whereas
> gfortran packs this into the DTYPE word.  I started looking to see if
> gfortran uses this descriptor information anywhere and so far have
> drawn a blank; admittedly on a not very thorough search.  In addition,
> I have not seen any use of the size information either.  Does anybody
> know if it is used anywhere?

I can't answer your original question, but I believe this information is 
not really "needed" as the type is compile time known and gfortran can 
insert the appropriate handling for the type at compile time; I guess 
that's why we don't need it...  But with your proposal for polymorphic 
entities, we would want to carry a runtime type.  I guess we could 
probably drop the static type information (for CLASS(t) it would be "t") 
and replace it by the dynamic one (the runtime type).

> It crosses my mind that in order to preserve backward compatibility of
> the API, we could put extra information after the dimension fields and
> leave the latter alone.  This would have the disadvantage that the
> reform (stride, lbound, ubound) => (lbound, stride, extent) and
> handling bytes rather than words would be put off.  How important is
> backward compatibility?

What I heard from the talk about 4.3 ABI breakage, I got the idea that 
in the past each major version of gfortran broke it anyways (maybe 
except the upcoming 4.4 now?).  So for a descriptor rework in favor of 
new features like allocatable scalars or CLASS, I would see it 
reasonable to simply go along and do the best of design we can come up 
with, not introducing any kludges to try preserving the ABI.  But that's 
of course only my personal opinion, as someone who didn't really use any 
Fortran for large projects yet and does not have any compiled code lying 
around...

Thanks for bringing this up!

Daniel

-- 
Done:  Arc-Bar-Cav-Rog-Sam-Val-Wiz
To go: Hea-Kni-Mon-Pri-Ran-Tou



More information about the Fortran mailing list