RFA: Patch: Miscellaneous Array, Engine, and Field Changes

Jeffrey Oldham oldham at codesourcery.com
Fri May 11 03:01:58 UTC 2001


OK to commit this patch?

Attached is a patch of miscellaneous changes found when trying to
explicitly instantiate various Arrays and Fields.  I removed
Array::innerDomain() because it invoked engines' innerDomain(), which
did not seem to be defined.  I used analogies to add domain() and
makeOwnCopy().

2001-05-10  Jeffrey D. Oldham  <oldham at codesourcery.com>

	* Array/Array.h: Add View0 to comment listing implemented classes.
	(Array::innerDomain): Remove the function since engines do not
	implement it.
	* Engine/CompressibleBlock.h
	(CompressibleBlockController::CompressibleBlockController):
	Reorder member initialization order.
	* Engine/CompressibleBrick.cpp
	(Engine<Dim,T,CompressibleBrickView>::makeOwnCopy()): New
	function.
	* Engine/CompressibleBrick.h (Engine<Dim, T,
	CompressibleBrick>::domain()): Likewise.
	(Engine<Dim,T,CompressibleBrickView>::domain()): Likewise.
	(Engine<Dim,T,CompressibleBrickView>::makeOwnCopy()): New
	declaration.
	(ElementProperties<Engine<Dim, T, CompressibleBrickView> >): New
	definition.
	* Layout/Node.h (Node::Node): Reorder member initialization order.
	* NewField/FieldEngine/FieldEngine.NoGeometry.h
	(FieldEngine<NoGeometry<Dim>, T, EngineTag>::physicalCellDomain):
	s/shrink/shrinkRight/
	(FieldEngine<NoGeometry<Dim>, T, EngineTag>::totalCellDomain):
	Likewise.
	
Tested on	sequential Linux using g++ 3.0 by building library
Approved by	???you???

Thanks,
Jeffrey D. Oldham
oldham at codesourcery.com
-------------- next part --------------
Index: Array/Array.h
===================================================================
RCS file: /home/pooma/Repository/r2/src/Array/Array.h,v
retrieving revision 1.139
diff -c -p -r1.139 Array.h
*** Array/Array.h	2001/04/20 21:16:23	1.139
--- Array/Array.h	2001/05/11 02:37:11
***************
*** 29,34 ****
--- 29,35 ----
  //-----------------------------------------------------------------------------
  // Classes: 
  //   Array
+ //   View0
  //   View[1-7]<Array,various domains>
  //   LeafFunctor<Array, DomainFunctorTag>
  //   LeafFunctor<Array, ViewFunctorTag<Domain> >
*************** public:
*** 1763,1773 ****
    inline Domain_t domain() const 
      {
        return engine_m.domain();
-     }
- 
-   inline Domain_t innerDomain() const 
-     {
-       return engine_m.innerDomain();
      }
  
    inline Domain_t physicalDomain() const 
--- 1764,1769 ----
Index: Engine/CompressibleBlock.h
===================================================================
RCS file: /home/pooma/Repository/r2/src/Engine/CompressibleBlock.h,v
retrieving revision 1.27
diff -c -p -r1.27 CompressibleBlock.h
*** Engine/CompressibleBlock.h	2000/07/11 22:13:00	1.27
--- Engine/CompressibleBlock.h	2001/05/11 02:37:13
*************** private:
*** 531,541 ****
      
      CompressibleBlockController(const CompressibleBlockController& model)
        : Observable<T*>(ptr_m),
-         size_m(model.size_m),
          compressible_m(!Pooma::neverCompress()),
          dataObject_m(model.dataObject_m.affinity()), 
! 	ucOffset_m(model.ucOffset_m),
! 	viewcount_m(0)
      {
        // Lock the model while we get information pertaining to it
        // being compressed or not (such data can't be initialized in
--- 531,541 ----
      
      CompressibleBlockController(const CompressibleBlockController& model)
        : Observable<T*>(ptr_m),
          compressible_m(!Pooma::neverCompress()),
+ 	viewcount_m(0),
          dataObject_m(model.dataObject_m.affinity()), 
!         size_m(model.size_m),
! 	ucOffset_m(model.ucOffset_m)
      {
        // Lock the model while we get information pertaining to it
        // being compressed or not (such data can't be initialized in
Index: Engine/CompressibleBrick.cpp
===================================================================
RCS file: /home/pooma/Repository/r2/src/Engine/CompressibleBrick.cpp,v
retrieving revision 1.24
diff -c -p -r1.24 CompressibleBrick.cpp
*** Engine/CompressibleBrick.cpp	2000/07/11 23:06:40	1.24
--- Engine/CompressibleBrick.cpp	2001/05/11 02:37:13
*************** Engine(const Engine<Dim,T,CompressibleBr
*** 501,506 ****
--- 501,542 ----
  
  //-----------------------------------------------------------------------------
  //
+ // Engine<Dim,T,CompressibleBrickView> & makeOwnCopy()
+ //
+ // Causes the CompressibleBrickView-Engine to obtain a private copy of the data
+ // that it refers to.
+ //
+ //-----------------------------------------------------------------------------
+ 
+ template <int Dim, class T>
+ Engine<Dim,T,CompressibleBrickView> &Engine<Dim,T,CompressibleBrickView>::makeOwnCopy()
+ {
+   // JIM: This is probably not thread safe??? 
+   // There is a race from checking isShared to getting into cblock's
+   // makeOwnCopy, which is thread safe. As a result, this should only
+   // be called after a blockAndEvaluate() to ensure that nobody else
+   // is messing with the underlying CBC while this is
+   // occuring. (Logically, this is necessary anyway since you probably
+   // want a copy of the data that results from all previous
+   // computations having taken place.)  Also, as mentioned elsewhere,
+   // the current implementation results in copying uncompressed data
+   // in the parse thread, which will result in incorrect memory
+   // affinity.
+   
+   if (cblock_m.isControllerValidUnlocked() && cblock_m.isShared()) 
+     {
+       cblock_m.detach(this);
+       cblock_m.makeOwnCopy();
+       cblock_m.attach(this);
+ 
+       data0_m = cblock_m.data() + (cblock_m.compressed() ? 0 : baseOffset());
+     }
+ 
+   return *this;
+ }
+ 
+ //-----------------------------------------------------------------------------
+ //
  // Engine<Dim, T, CompressibleBrickView>::
  // elementsCompressed() const
  //
Index: Engine/CompressibleBrick.h
===================================================================
RCS file: /home/pooma/Repository/r2/src/Engine/CompressibleBrick.h,v
retrieving revision 1.67
diff -c -p -r1.67 CompressibleBrick.h
*** Engine/CompressibleBrick.h	2000/07/11 23:06:40	1.67
--- Engine/CompressibleBrick.h	2001/05/11 02:37:14
*************** public:
*** 237,242 ****
--- 237,250 ----
  
    inline Layout_t layout() const { return Layout_t(domain_m); }
  
+   //---------------------------------------------------------------------------
+   // Return the domain and base domain.
+ 
+   inline const Domain_t &domain() const
+   {
+     return layout().domain();
+   }
+ 
    // Get a private copy of data viewed by this Engine.
  
    Engine_t &makeOwnCopy();
*************** public:
*** 557,562 ****
--- 565,582 ----
    ElementRef_t operator()(const Loc<Dim> &) const;
    Element_t read(const Loc<Dim> &) const;
    
+   //---------------------------------------------------------------------------
+   // Return the domain and base domain.
+ 
+   inline const Domain_t &domain() const
+   {
+     return Layout_t(domain_m).domain();
+   }
+ 
+   // Get a private copy of data viewed by this Engine.
+ 
+   Engine_t &makeOwnCopy();
+ 
    // Return the block controller (uncompressed). 
    // See comments in CompressibleBrick above.
    
*************** struct NewEngine<Engine<Dim,T,Compressib
*** 801,806 ****
--- 821,831 ----
  template <int Dim, class T>
  struct ElementProperties<Engine<Dim, T, CompressibleBrick> > 
    : public MakeOwnCopyProperties<Engine<Dim, T, CompressibleBrick> >
+ { };
+ 
+ template <int Dim, class T>
+ struct ElementProperties<Engine<Dim, T, CompressibleBrickView> > 
+   : public MakeOwnCopyProperties<Engine<Dim, T, CompressibleBrickView> >
  { };
  
  
Index: Layout/Node.h
===================================================================
RCS file: /home/pooma/Repository/r2/src/Layout/Node.h,v
retrieving revision 1.35
diff -c -p -r1.35 Node.h
*** Layout/Node.h	2001/05/04 15:41:28	1.35
--- Layout/Node.h	2001/05/11 02:37:15
*************** public:
*** 121,128 ****
    Node(const Domain_t &owned, const AllocatedDomain_t &allocated, 
         Context_t c, ID_t gid, ID_t lid = (-1))
      : domain_m(owned), allocated_m(allocated), 
!       context_m(c), global_m(gid), local_m(lid),
!       affinity_m(-1)
    {
      PAssert(owned.size() >= 0);
      PAssert(allocated.size() >= 0);
--- 121,128 ----
    Node(const Domain_t &owned, const AllocatedDomain_t &allocated, 
         Context_t c, ID_t gid, ID_t lid = (-1))
      : domain_m(owned), allocated_m(allocated), 
!       local_m(lid), global_m(gid),
!       context_m(c), affinity_m(-1)
    {
      PAssert(owned.size() >= 0);
      PAssert(allocated.size() >= 0);
*************** public:
*** 130,137 ****
    }
  
    Node(const Domain_t &d, Context_t c, ID_t gid, ID_t lid = (-1))
!     : domain_m(d), allocated_m(d), context_m(c), global_m(gid), local_m(lid),
!       affinity_m(-1)
    {
      PAssert(d.size() >= 0);
      PAssert(gid >= 0);
--- 130,138 ----
    }
  
    Node(const Domain_t &d, Context_t c, ID_t gid, ID_t lid = (-1))
!     : domain_m(d), allocated_m(d),
!       local_m(lid), global_m(gid),
!       context_m(c), affinity_m(-1)
    {
      PAssert(d.size() >= 0);
      PAssert(gid >= 0);
*************** public:
*** 152,159 ****
  
    Node(int affinity, const Domain_t &d,
         Context_t c, ID_t gid, ID_t lid = (-1))
!     : domain_m(d), allocated_m(d), context_m(c), global_m(gid), local_m(lid),
!       affinity_m(affinity)
    {
      PAssert(d.size() >= 0);
      PAssert(gid >= 0);
--- 153,161 ----
  
    Node(int affinity, const Domain_t &d,
         Context_t c, ID_t gid, ID_t lid = (-1))
!     : domain_m(d), allocated_m(d),
!       local_m(lid), global_m(gid),
!       context_m(c), affinity_m(affinity)
    {
      PAssert(d.size() >= 0);
      PAssert(gid >= 0);
*************** public:
*** 172,180 ****
    
    template<class ODom, class OAlloc>
    Node(const Node<ODom,OAlloc> &n)
!     : domain_m(n.domain()), context_m(n.context()), allocated_m(n.allocated()),
!       global_m(n.globalID()), local_m(n.localID()),
!       affinity_m(n.affinity())
    {
    }
  
--- 174,182 ----
    
    template<class ODom, class OAlloc>
    Node(const Node<ODom,OAlloc> &n)
!     : domain_m(n.domain()), allocated_m(n.allocated()),
!       local_m(n.localID()), global_m(n.globalID()),
!       context_m(n.context()), affinity_m(n.affinity())
    {
    }
  
Index: NewField/FieldEngine/FieldEngine.NoGeometry.h
===================================================================
RCS file: /home/pooma/Repository/r2/src/NewField/FieldEngine/FieldEngine.NoGeometry.h,v
retrieving revision 1.4
diff -c -p -r1.4 FieldEngine.NoGeometry.h
*** NewField/FieldEngine/FieldEngine.NoGeometry.h	2001/04/10 23:13:25	1.4
--- NewField/FieldEngine/FieldEngine.NoGeometry.h	2001/05/11 02:37:15
*************** public:
*** 254,267 ****
    // This field-engine always has vert-centering and the total domain is
    // given by the engine.
          
!   inline const Domain_t &physicalCellDomain() const
      {
!       return shrink(physicalDomain(), 1);
      }
          
    inline Domain_t totalCellDomain() const
      {
!       return shrink(engine_m.domain(), 1);
      }
  
    Domain_t physicalDomain() const
--- 254,267 ----
    // This field-engine always has vert-centering and the total domain is
    // given by the engine.
          
!   inline const Domain_t physicalCellDomain() const
      {
!       return shrinkRight(physicalDomain(), 1);
      }
          
    inline Domain_t totalCellDomain() const
      {
!       return shrinkRight(engine_m.domain(), 1);
      }
  
    Domain_t physicalDomain() const


More information about the pooma-dev mailing list