Actions

icon Post
text/html Subscribe
text/html Unsubscribe

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

Fix for solver-lu


  • To: vsipl++@xxxxxxxxxxxxxxxx
  • Subject: Fix for solver-lu
  • From: Jules Bergmann <jules@xxxxxxxxxxxxxxxx>
  • Date: Thu, 12 Jan 2006 00:41:14 -0500

This patch fixes a problem with parallel reductions of expressions that was causing the solver-lu test to fail. It also changes the random functions returning a matrix to return a Local_or_global view.

Patch applied.

            -- Jules
Index: ChangeLog
===================================================================
RCS file: /home/cvs/Repository/vpp/ChangeLog,v
retrieving revision 1.365
diff -u -r1.365 ChangeLog
--- ChangeLog	11 Jan 2006 16:15:59 -0000	1.365
+++ ChangeLog	12 Jan 2006 05:35:49 -0000
@@ -1,5 +1,14 @@
 2006-01-11 Jules Bergmann  <jules@xxxxxxxxxxxxxxxx>
 
+	* src/vsip/dense.hpp (get_local_block): overload for const Dense.
+	* src/vsip/random.hpp: Return matrices with Local_or_global_map.
+	* src/vsip/impl/expr_binary_block.hpp (Distributed_local_block):
+	  Add specialization for non-const expression block.
+	* src/vsip/impl/expr_ternary_block.hpp: Likewise.
+	* src/vsip/impl/expr_unary_block.hpp: Likewise.
+
+2006-01-11 Jules Bergmann  <jules@xxxxxxxxxxxxxxxx>
+
 	* configure.ac: Check if -lblas is necessary for generic lapack.
 	* src/vsip/map.hpp (impl_subblock_from_global_index): New par
 	  support function to convert from global index to subblock.
Index: src/vsip/dense.hpp
===================================================================
RCS file: /home/cvs/Repository/vpp/src/vsip/dense.hpp,v
retrieving revision 1.31
diff -u -r1.31 dense.hpp
--- src/vsip/dense.hpp	22 Dec 2005 01:29:25 -0000	1.31
+++ src/vsip/dense.hpp	12 Jan 2006 05:35:49 -0000
@@ -1044,6 +1044,16 @@
   return block;
 }
 
+template <dimension_type Dim,
+	  typename       T,
+	  typename       OrderT>
+Dense<Dim, T, OrderT, Local_map> const&
+get_local_block(
+  Dense<Dim, T, OrderT, Local_map> const& block)
+{
+  return block;
+}
+
 
 
 /// Overload of get_local_block for Dense with distributed map.
Index: src/vsip/random.hpp
===================================================================
RCS file: /home/cvs/Repository/vpp/src/vsip/random.hpp,v
retrieving revision 1.3
diff -u -r1.3 random.hpp
--- src/vsip/random.hpp	11 Jan 2006 16:22:44 -0000	1.3
+++ src/vsip/random.hpp	12 Jan 2006 05:35:49 -0000
@@ -357,8 +357,9 @@
 public:
   // View types [random.rand.view types]
   typedef Dense<1, T, row1_type, Local_or_global_map<1> > block1_type;
+  typedef Dense<2, T, row2_type, Local_or_global_map<2> > block2_type;
   typedef const_Vector<T, block1_type> vector_type;
-  typedef const_Matrix<T> matrix_type;
+  typedef const_Matrix<T, block2_type> matrix_type;
   
   // Constructors, copy, assignment, and destructor 
   //   [random.rand.constructors]
@@ -398,7 +399,7 @@
   matrix_type randu(length_type rows, length_type columns) 
       VSIP_NOTHROW
     {
-      Matrix<T> m(rows, columns);
+      Matrix<T, block2_type> m(rows, columns);
       for ( index_type i = 0; i < rows; ++i )
         for ( index_type j = 0; j < columns; ++j )
           m.put( i, j, randu() );
@@ -415,7 +416,7 @@
   matrix_type randn(length_type rows, length_type columns) 
       VSIP_NOTHROW
     {
-      Matrix<T> m(rows, columns);
+      Matrix<T, block2_type> m(rows, columns);
       for ( index_type i = 0; i < rows; ++i )
         for ( index_type j = 0; j < columns; ++j )
           m.put( i, j, randn() );
Index: src/vsip/impl/expr_binary_block.hpp
===================================================================
RCS file: /home/cvs/Repository/vpp/src/vsip/impl/expr_binary_block.hpp,v
retrieving revision 1.17
diff -u -r1.17 expr_binary_block.hpp
--- src/vsip/impl/expr_binary_block.hpp	2 Nov 2005 18:44:03 -0000	1.17
+++ src/vsip/impl/expr_binary_block.hpp	12 Jan 2006 05:35:49 -0000
@@ -124,9 +124,6 @@
 
 
 
-// NOTE: Distributed_local_block needs to be defined for const
-// Binary_expr_block, not regular Binary_expr_block.
-
 template <dimension_type                      D,
 	  template <typename, typename> class Operator,
 	  typename                            LBlock,
@@ -152,6 +149,26 @@
 	  typename                            LType,
 	  typename                            RBlock,
 	  typename                            RType>
+struct Distributed_local_block<
+  Binary_expr_block<D, Operator, LBlock, LType, RBlock, RType> >
+{
+  typedef Binary_expr_block<D, Operator,
+			    typename Distributed_local_block<LBlock>::type,
+			    LType,
+			    typename Distributed_local_block<RBlock>::type,
+			    RType>
+		type;
+};
+
+
+
+
+template <dimension_type                      D,
+	  template <typename, typename> class Operator,
+	  typename                            LBlock,
+	  typename                            LType,
+	  typename                            RBlock,
+	  typename                            RType>
 Binary_expr_block<D, Operator,
 		  typename Distributed_local_block<LBlock>::type, LType,
 		  typename Distributed_local_block<RBlock>::type, RType>
Index: src/vsip/impl/expr_scalar_block.hpp
===================================================================
RCS file: /home/cvs/Repository/vpp/src/vsip/impl/expr_scalar_block.hpp,v
retrieving revision 1.11
diff -u -r1.11 expr_scalar_block.hpp
--- src/vsip/impl/expr_scalar_block.hpp	11 Jan 2006 16:22:44 -0000	1.11
+++ src/vsip/impl/expr_scalar_block.hpp	12 Jan 2006 05:35:49 -0000
@@ -114,9 +114,6 @@
 
 
 
-// NOTE: Distributed_local_block needs to be defined for const
-// Scalar_block, not regular Scalar_block.
-
 template <dimension_type D,
 	  typename       Scalar>
 struct Distributed_local_block<Scalar_block<D, Scalar> const>
@@ -124,6 +121,13 @@
   typedef Scalar_block<D, Scalar> const type;
 };
 
+template <dimension_type D,
+	  typename       Scalar>
+struct Distributed_local_block<Scalar_block<D, Scalar> >
+{
+  typedef Scalar_block<D, Scalar> type;
+};
+
 
 
 template <dimension_type D,
Index: src/vsip/impl/expr_ternary_block.hpp
===================================================================
RCS file: /home/cvs/Repository/vpp/src/vsip/impl/expr_ternary_block.hpp,v
retrieving revision 1.8
diff -u -r1.8 expr_ternary_block.hpp
--- src/vsip/impl/expr_ternary_block.hpp	2 Nov 2005 18:44:03 -0000	1.8
+++ src/vsip/impl/expr_ternary_block.hpp	12 Jan 2006 05:35:49 -0000
@@ -156,6 +156,24 @@
 		type;
 };
 
+template <dimension_type D,
+	  template <typename, typename, typename> class Functor,
+	  typename Block1, typename Type1,
+	  typename Block2, typename Type2,
+	  typename Block3, typename Type3>
+struct Distributed_local_block<
+  Ternary_expr_block<D, Functor,
+		     Block1, Type1,
+		     Block2, Type2,
+		     Block3, Type3> >
+{
+  typedef Ternary_expr_block<D, Functor,
+		typename Distributed_local_block<Block1>::type, Type1,
+		typename Distributed_local_block<Block2>::type, Type2,
+		typename Distributed_local_block<Block3>::type, Type3>
+		type;
+};
+
 
 
 template <dimension_type D,
Index: src/vsip/impl/expr_unary_block.hpp
===================================================================
RCS file: /home/cvs/Repository/vpp/src/vsip/impl/expr_unary_block.hpp,v
retrieving revision 1.13
diff -u -r1.13 expr_unary_block.hpp
--- src/vsip/impl/expr_unary_block.hpp	2 Nov 2005 18:44:03 -0000	1.13
+++ src/vsip/impl/expr_unary_block.hpp	12 Jan 2006 05:35:49 -0000
@@ -125,6 +125,19 @@
 		type;
 };
 
+template <dimension_type            Dim,
+	  template <typename> class Op,
+	  typename                  Block,
+	  typename                  Type>
+struct Distributed_local_block<
+  Unary_expr_block<Dim, Op, Block, Type> >
+{
+  typedef Unary_expr_block<Dim, Op,
+			   typename Distributed_local_block<Block>::type,
+			   Type> 
+		type;
+};
+
 
 
 template <dimension_type            Dim,