freepooma-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: [pooma-dev] AltView* classes


From: James Crotinger
Subject: RE: [pooma-dev] AltView* classes
Date: Tue, 2 Mar 2004 09:10:37 -0700

Hi Richard,

This tickled a neuron the other day, but I couldn't recall the details.

The AltView classes were put in to reduce link times and sizes for large codes. The classes that have enums end up having a link-time cost, both in space and time. I believe this refactoring was done to reduce the cardinality of classes having the "sv" enum. My recollection is that this, and other similar "optimizations", had a pretty substantial impact on link-time for Blanca. Unless these are hurting something else, I would tend to leave them in.

Does the CodeSourcery CVS repository have complete CVS history? (i.e. did we copy the repository, or just the head version?) This should have been easy to determine via CVS.

        Jim

------------------------------------------------------------------------
James A. Crotinger                           email:     address@hidden
NumeriX, LLC                                 phone:  (505) 424-4477 x104
2960 Rodeo Park Dr. W.
Santa Fe, NM 87505
 

> -----Original Message-----
> From: Richard Guenther [mailto:address@hidden]
> Sent: Tuesday, March 02, 2004 3:29 AM
> To: address@hidden
> Cc: Jeffrey D. Oldham
> Subject: Re: [pooma-dev] AltView* classes
>
> On Tue, 2 Mar 2004, Richard Guenther wrote:
>
> > On Fri, 27 Feb 2004, Richard Guenther wrote:
> >
> > > Hi!
> > >
> > > Does anyone remember the exact reason for the existance of the
> AltView*
> > > classes in Array.h and Field.h?  Removing them and fixing their usage
> to
> > > use View* seems to work (full test with gcc 3.3 and 3.4 in progress).
> >
> > Testing completed with no new failures.  Would it be ok to remove those
> > AltView* classes?
>
> Which would be...
>
> Ok?
>
> Richard.
>
>
> 2004Mar02  Richard Guenther <address@hidden>
>
>       * src/Array/Array.h: remove all traces of AltView0 class.
>       src/Field/Field.h: remove all traces of AltView1 and
>       AltView1Implementation classes.
>
> ===== Array/Array.h 1.14 vs edited =====
> --- 1.14/r2/src/Array/Array.h Tue Dec 16 15:19:57 2003
> +++ edited/Array/Array.h      Tue Mar  2 11:24:14 2004
> @@ -649,8 +649,6 @@
>  // an existing engine cannot be any kind of slice domain.
>  // Also, bounds checking would make no sense because it would
>  // reduce to contains(a.domain(), a.domain());
> -//
> -// Any changes to this class should also be made to AltView0.
>
>  template<int Dim, class T, class EngineTag>
>  struct View0<Array<Dim, T, EngineTag> >
> @@ -695,41 +693,6 @@
>      }
>  };
>
> -// AltView0 avoids an instantiation problem that arises when two
> -// classes use each other.  This class's definition should be exactly
> -// the same as View0 except omitting member functions.
> -//
> -// Do NOT explicitly instantiate this class.
> -
> -template<class ArrayTag>
> -struct AltView0;
> -
> -template<int Dim, class T, class EngineTag>
> -struct AltView0<Array<Dim, T, EngineTag> >
> -{
> -  // Convenience typedef for the thing we're taking a view of.
> -
> -  typedef Array<Dim, T, EngineTag> Subject_t;
> -
> -  // Deduce domains for the output type.
> -  // At some point, we need to fix NewDomain1; until then, use
> -  // the temporary version from Array.h.
> -
> -  typedef typename Subject_t::Engine_t Engine_t;
> -  typedef typename Subject_t::Domain_t Domain_t;
> -
> -  // Deduce the template parameters for the output type.
> -
> -  typedef typename NewEngine<Engine_t, Domain_t>::Type_t NewEngine_t;
> -  enum { newDim = NewEngine_t::dimensions };
> -  typedef typename NewEngine_t::Tag_t NewEngineTag_t;
> -
> -  // The output types.
> -
> -  typedef Array<newDim, T, NewEngineTag_t> Type_t;
> -  typedef Type_t ReadType_t;
> -};
> -
>  template<int Dim, class T, class EngineTag>
>  struct View1<Array<Dim, T, EngineTag>, int>
>  {
> @@ -1864,7 +1827,7 @@
>    /// A zero-argument version of operator(), which takes a view of
>    /// array's domain, is also supplied.
>    //@{
> -  typename AltView0<This_t>::ReadType_t
> +  typename View0<This_t>::ReadType_t
>    read() const
>      {
>        typedef View0<This_t> Ret_t;
> @@ -1934,7 +1897,7 @@
>        return Ret_t::makeRead(*this, s1, s2, s3, s4, s5, s6, s7);
>      }
>
> -  typename AltView0<This_t>::Type_t
> +  typename View0<This_t>::Type_t
>    operator()() const
>      {
>        typedef View0<This_t> Ret_t;
> ===== Field/Field.h 1.14 vs edited =====
> --- 1.14/r2/src/Field/Field.h Tue Dec 16 15:20:00 2003
> +++ edited/Field/Field.h      Tue Mar  2 11:25:22 2004
> @@ -269,9 +269,6 @@
>   * View1Implementation<Field, D, SV> specialization for indexing a field
>   * with a single domain. There is a single-valued version (SV == true)
>   * and a multi-valued version (SV == false).
> - *
> - * Any changes to View1Implementation should also be made to
> - * AltView1Implementation.
>   */
>
>  // Single-valued version. Handles scalars and Locs.
> @@ -508,62 +505,7 @@
>
>
>  /**
> - * AltView1Implementation avoids an instantiation problem that arises
> when two
> - * classes use each other.  This class's definition should be exactly
> - * the same as View1Implementation except omitting member functions.
> - *
> - * Do NOT explicitly instantiate this class.
> - */
> -
> -// Single-valued version. Handles scalars and Locs.
> -
> -template<class Subject, class Domain, bool SV>
> -struct AltView1Implementation;
> -
> -template<class Mesh, class T, class EngineTag, class Domain>
> -struct AltView1Implementation<Field<Mesh, T, EngineTag>, Domain, true>
> -{
> -  // Convenience typedef for the thing we're taking a view of.
> -
> -  typedef Field<Mesh, T, EngineTag> Subject_t;
> -
> -  // The return types are pretty simple here.
> -
> -  typedef typename Subject_t::Element_t ReadType_t;
> -  typedef typename Subject_t::ElementRef_t Type_t;
> -};
> -
> -template<class Mesh, class T, class EngineTag, class Domain>
> -struct AltView1Implementation<Field<Mesh, T, EngineTag>, Domain, false>
> -{
> -  // Convenience typedef for the thing we're taking a view of.
> -
> -  typedef Field<Mesh, T, EngineTag> Subject_t;
> -
> -  // Deduce domains for the output type.
> -
> -  typedef typename Subject_t::Engine_t Engine_t;
> -  typedef typename NewEngine<Engine_t, Domain>::Type_t NewEngine_t;
> -  typedef typename NewEngine_t::Element_t NewT_t;
> -  typedef typename NewEngine_t::Tag_t NewEngineTag_t;
> -
> -  // Deduce the new Mesh.
> -
> -  typedef typename
> -    NewMeshTag<NewEngine_t::dimensions, Mesh, Domain>::Type_t
> -      NewMeshTag_t;
> -
> -  // The output types.
> -
> -  typedef Field<NewMeshTag_t, NewT_t, NewEngineTag_t> ReadType_t;
> -  typedef Field<NewMeshTag_t, NewT_t, NewEngineTag_t> Type_t;
> -};
> -
> -
> -/**
>   * View1<Field, S1> specialization for indexing a field with a single
> domain.
> - *
> - * Any changes to View1 should also be made to AltView1.
>   */
>
>  template<class Mesh, class T, class EngineTag, class Sub1>
> @@ -613,8 +555,6 @@
>
>  /**
>   * View1<Field, int> specialization for indexing a field with an int.
> - *
> - * Any changes to View1 should also be made to AltView1.
>   */
>
>  template<class Mesh, class T, class EngineTag>
> @@ -658,71 +598,6 @@
>
>
>  /**
> - * AltView1 avoids an instantiation problem that arises when two
> - * classes use each other.  This class's definition should be exactly
> - * the same as View1 except omitting member functions.
> - *
> - * Do NOT explicitly instantiate this class.
> - */
> -
> -template<class FieldTag, class DomainTag>
> -struct AltView1;
> -
> -template<class Mesh, class T, class EngineTag, class Sub1>
> -struct AltView1<Field<Mesh, T, EngineTag>, Sub1>
> -{
> -  // Convenience typedef for the thing we're taking a view of.
> -
> -  typedef Field<Mesh, T, EngineTag> Subject_t;
> -
> -  // Deduce domains for the output type.
> -  // At some point, we need to fix NewDomain1; until then, use
> -  // the temporary version from NewDomain.h.
> -
> -  typedef typename Subject_t::Domain_t Domain_t;
> -  typedef TemporaryNewDomain1<Domain_t, Sub1> NewDomain_t;
> -  typedef typename NewDomain_t::SliceType_t SDomain_t;
> -
> -  // Deduce appropriate version of implementation to dispatch to.
> -
> -  enum { sv = DomainTraits<SDomain_t>::singleValued };
> -  typedef AltView1Implementation<Subject_t, SDomain_t, sv> Dispatch_t;
> -
> -  // The optimized domain combiner.
> -
> -  typedef CombineDomainOpt<NewDomain_t, sv> Combine_t;
> -
> -  // The return types.
> -
> -  typedef typename Dispatch_t::ReadType_t ReadType_t;
> -  typedef typename Dispatch_t::Type_t Type_t;
> -};
> -
> -
> -/**
> - * AltView1 avoids an instantiation problem that arises when two
> - * classes use each other.  This class's definition should be exactly
> - * the same as View1 except omitting member functions.
> - *
> - * Do NOT explicitly instantiate this class.
> - */
> -
> -template<class Mesh, class T, class EngineTag>
> -struct AltView1<Field<Mesh, T, EngineTag>, int>
> -{
> -  // Convenience typedef for the thing we're taking a view of.
> -
> -  typedef Field<Mesh, T, EngineTag> Subject_t;
> -
> -  // The return types.
> -
> -  typedef typename Subject_t::Element_t ReadType_t;
> -  typedef typename Subject_t::ElementRef_t Type_t;
> -
> -};
> -
> -
> -/**
>   * View2<Field, S1, S2> specialization for indexing a field with two
>   * domains.
>   */
> @@ -1455,14 +1330,14 @@
>    /// point fields the viewing domain is an actual centering domain.
>    //@{
>
> -  inline typename AltView1<This_t, Domain_t>::ReadType_t
> +  inline typename View1<This_t, Domain_t>::ReadType_t
>    read() const
>      {
>        typedef View1<This_t, Domain_t> Ret_t;
>        return Ret_t::makeRead(*this, physicalDomain());
>      }
>
> -  inline typename AltView1<This_t, Domain_t>::ReadType_t
> +  inline typename View1<This_t, Domain_t>::ReadType_t
>    readAll() const
>      {
>        typedef View1<This_t, Domain_t> Ret_t;
> @@ -1470,7 +1345,7 @@
>      }
>
>    template<class Sub1>
> -  inline typename AltView1<This_t, Sub1>::ReadType_t
> +  inline typename View1<This_t, Sub1>::ReadType_t
>    read(const Sub1 &s1) const
>      {
>        typedef View1<This_t, Sub1> Ret_t;
> @@ -1493,14 +1368,14 @@
>        return Ret_t::makeRead(*this, s1, s2, s3);
>      }
>
> -  inline typename AltView1<This_t, Domain_t>::Type_t
> +  inline typename View1<This_t, Domain_t>::Type_t
>    operator()() const
>      {
>        typedef View1<This_t, Domain_t> Ret_t;
>        return Ret_t::make(*this, physicalDomain());
>      }
>
> -  inline typename AltView1<This_t, Domain_t>::Type_t
> +  inline typename View1<This_t, Domain_t>::Type_t
>    all() const
>      {
>        typedef View1<This_t, Domain_t> Ret_t;
> @@ -1508,7 +1383,7 @@
>      }
>
>    template<class Sub1>
> -  inline typename AltView1<This_t, Sub1>::Type_t
> +  inline typename View1<This_t, Sub1>::Type_t
>    operator()(const Sub1 &s1) const
>      {
>        typedef View1<This_t, Sub1> Ret_t;


reply via email to

[Prev in Thread] Current Thread [Next in Thread]