Templated interfaces for generalized vector reduction/transformation operators in C++.


Classes

class  RTOpPack::ReductTarget
 Abstract base class for all reduction objects. More...
class  RTOpPack::RTOpT< Scalar >
 Templated interface to vector reduction/transformation operators {abstract}. More...

public types

typedef PrimitiveTypeTraits<
Scalar, Scalar >::primitiveType 
RTOpPack::RTOpT::primitive_value_type
 

Reduction object functions (NVI)

void RTOpPack::RTOpT::get_reduct_type_num_entries (const Ptr< int > &num_values, const Ptr< int > &num_indexes, const Ptr< int > &num_chars) const
 Get the number of entries of each basic data type in the externalized state for a reduction object for this operator.
Teuchos::RCP< ReductTarget > RTOpPack::RTOpT::reduct_obj_create () const
 Creates a new reduction target object initialized and ready to be used in a reduction.
void RTOpPack::RTOpT::reduce_reduct_objs (const ReductTarget &in_reduct_obj, const Ptr< ReductTarget > &inout_reduct_obj) const
 Reduce intermediate reduction target objects.
void RTOpPack::RTOpT::reduct_obj_reinit (const Ptr< ReductTarget > &reduct_obj) const
 Reinitialize an already created reduction object.
void RTOpPack::RTOpT::extract_reduct_obj_state (const ReductTarget &reduct_obj, const ArrayView< primitive_value_type > &value_data, const ArrayView< index_type > &index_data, const ArrayView< char_type > &char_data) const
 Extract the state of an already created reduction object.
void RTOpPack::RTOpT::load_reduct_obj_state (const ArrayView< const primitive_value_type > &value_data, const ArrayView< const index_type > &index_data, const ArrayView< const char_type > &char_data, const Ptr< ReductTarget > &reduct_obj) const
 Load the state of an already created reduction object given arrays of primitive objects.

Operator functions (NIV)

const std::string RTOpPack::RTOpT::op_name () const
 Return the name (as a null-terminated C-style string) of the operator.
bool RTOpPack::RTOpT::coord_invariant () const
 Returns true if this operator is coordinate invariant.
void RTOpPack::RTOpT::apply_op (const ArrayView< const ConstSubVectorView< Scalar > > &sub_vecs, const ArrayView< const SubVectorView< Scalar > > &targ_sub_vecs, const Ptr< ReductTarget > &reduct_obj) const
 Apply the reduction/transformation operator to a set of sub-vectors.

Deprecated (NVI)

void RTOpPack::RTOpT::get_reduct_type_num_entries (int *num_values, int *num_indexes, int *num_chars) const
 Deprecated.
void RTOpPack::RTOpT::reduce_reduct_objs (const ReductTarget &in_reduct_obj, ReductTarget *inout_reduct_obj) const
 Deprecated.
void RTOpPack::RTOpT::reduct_obj_reinit (ReductTarget *reduct_obj) const
 Deprecated.
void RTOpPack::RTOpT::extract_reduct_obj_state (const ReductTarget &reduct_obj, int num_values, primitive_value_type value_data[], int num_indexes, index_type index_data[], int num_chars, char_type char_data[]) const
 Deprecated.
void RTOpPack::RTOpT::load_reduct_obj_state (int num_values, const primitive_value_type value_data[], int num_indexes, const index_type index_data[], int num_chars, const char_type char_data[], ReductTarget *reduct_obj) const
 Deprecated.
void RTOpPack::RTOpT::apply_op (const int num_vecs, const ConstSubVectorView< Scalar > sub_vecs[], const int num_targ_vecs, const SubVectorView< Scalar > targ_sub_vecs[], ReductTarget *reduct_obj) const
 Deprecated.
virtual void RTOpPack::RTOpT::get_reduct_type_num_entries_impl (const Ptr< int > &num_values, const Ptr< int > &num_indexes, const Ptr< int > &num_chars) const
 Protected virtual functions to be overridden by subclasses. .
virtual Teuchos::RCP< ReductTarget > RTOpPack::RTOpT::reduct_obj_create_impl () const
 
virtual void RTOpPack::RTOpT::reduce_reduct_objs_impl (const ReductTarget &in_reduct_obj, const Ptr< ReductTarget > &inout_reduct_obj) const
 
virtual void RTOpPack::RTOpT::reduct_obj_reinit_impl (const Ptr< ReductTarget > &reduct_obj) const
 
virtual void RTOpPack::RTOpT::extract_reduct_obj_state_impl (const ReductTarget &reduct_obj, const ArrayView< primitive_value_type > &value_data, const ArrayView< index_type > &index_data, const ArrayView< char_type > &char_data) const
 
virtual void RTOpPack::RTOpT::load_reduct_obj_state_impl (const ArrayView< const primitive_value_type > &value_data, const ArrayView< const index_type > &index_data, const ArrayView< const char_type > &char_data, const Ptr< ReductTarget > &reduct_obj) const
 
virtual const std::string RTOpPack::RTOpT::op_name_impl () const
 
virtual bool RTOpPack::RTOpT::coord_invariant_impl () const
 
virtual void RTOpPack::RTOpT::apply_op_impl (const ArrayView< const ConstSubVectorView< Scalar > > &sub_vecs, const ArrayView< const SubVectorView< Scalar > > &targ_sub_vecs, const Ptr< ReductTarget > &reduct_obj) const =0
 
 RTOpPack::RTOpT::RTOpT (const std::string &op_name_base="")
 Nonvirtual protected functions. Constructor that creates an operator name appended with the type.
void RTOpPack::RTOpT::setOpNameBase (const std::string &op_name_base)
 Just set the opeator name.

Typedef Documentation

template<class Scalar>
typedef PrimitiveTypeTraits<Scalar,Scalar>::primitiveType RTOpPack::RTOpT< Scalar >::primitive_value_type [inherited]

Definition at line 169 of file RTOpPack_RTOpT_decl.hpp.


Function Documentation

template<class Scalar>
void RTOpPack::RTOpT< Scalar >::get_reduct_type_num_entries ( const Ptr< int > &  num_values,
const Ptr< int > &  num_indexes,
const Ptr< int > &  num_chars 
) const [inline, inherited]

Get the number of entries of each basic data type in the externalized state for a reduction object for this operator.

Note that a specific reduction object is not passed in as an argument. This is because the structure of a reduction object is completely determined by its associated operator object and this structure can not change as a result of a reduction operation (this is needed to simplify global communication code when used * with MPI).

The default implementation returns zeros for *num_values, *num_indexes and *num_chars (i.e. by default there is no reduction operation performed).

Definition at line 191 of file RTOpPack_RTOpT_decl.hpp.

template<class Scalar>
Teuchos::RCP<ReductTarget> RTOpPack::RTOpT< Scalar >::reduct_obj_create (  )  const [inline, inherited]

Creates a new reduction target object initialized and ready to be used in a reduction.

To delete this object simply let the returned RCP<> object go out of scope.

The default implementation returns return.get()==NULL (i.e. by default there is no reduction operation performed).

Definition at line 210 of file RTOpPack_RTOpT_decl.hpp.

template<class Scalar>
void RTOpPack::RTOpT< Scalar >::reduce_reduct_objs ( const ReductTarget in_reduct_obj,
const Ptr< ReductTarget > &  inout_reduct_obj 
) const [inline, inherited]

Reduce intermediate reduction target objects.

The default implementation does not do anything (i.e. by default there is no reduction operation performed).

Definition at line 220 of file RTOpPack_RTOpT_decl.hpp.

template<class Scalar>
void RTOpPack::RTOpT< Scalar >::reduct_obj_reinit ( const Ptr< ReductTarget > &  reduct_obj  )  const [inline, inherited]

Reinitialize an already created reduction object.

The default implementation does nothing (i.e. by default there is no reduction operation performed).

Parameters:
reduct_obj [in/out] Reduction object is reinitialized on output.

Definition at line 234 of file RTOpPack_RTOpT_decl.hpp.

template<class Scalar>
void RTOpPack::RTOpT< Scalar >::extract_reduct_obj_state ( const ReductTarget reduct_obj,
const ArrayView< primitive_value_type > &  value_data,
const ArrayView< index_type > &  index_data,
const ArrayView< char_type > &  char_data 
) const [inline, inherited]

Extract the state of an already created reduction object.

This method allows the state of a reduction target object to be externalized so that it can be passed over a heterogeneous network of computers.

The default implementation does nothing (i.e. by default there is no reduction operation performed).

Definition at line 248 of file RTOpPack_RTOpT_decl.hpp.

template<class Scalar>
void RTOpPack::RTOpT< Scalar >::load_reduct_obj_state ( const ArrayView< const primitive_value_type > &  value_data,
const ArrayView< const index_type > &  index_data,
const ArrayView< const char_type > &  char_data,
const Ptr< ReductTarget > &  reduct_obj 
) const [inline, inherited]

Load the state of an already created reduction object given arrays of primitive objects.

The default implementation does nothing.

Definition at line 264 of file RTOpPack_RTOpT_decl.hpp.

template<class Scalar>
const std::string RTOpPack::RTOpT< Scalar >::op_name (  )  const [inline, inherited]

Return the name (as a null-terminated C-style string) of the operator.

This name is used to differentiate an operator subclass from all other operator subclasses. This is an important property needed for a client/server or master/slave runtime configuration.

The default implementation uses the value created in the constructor RTOpT().

Definition at line 288 of file RTOpPack_RTOpT_decl.hpp.

template<class Scalar>
bool RTOpPack::RTOpT< Scalar >::coord_invariant (  )  const [inline, inherited]

Returns true if this operator is coordinate invariant.

The default implementation returns true as most vector operators are coordinate invariant.

Definition at line 302 of file RTOpPack_RTOpT_decl.hpp.

template<class Scalar>
void RTOpPack::RTOpT< Scalar >::apply_op ( const ArrayView< const ConstSubVectorView< Scalar > > &  sub_vecs,
const ArrayView< const SubVectorView< Scalar > > &  targ_sub_vecs,
const Ptr< ReductTarget > &  reduct_obj 
) const [inline, inherited]

Apply the reduction/transformation operator to a set of sub-vectors.

op(sub_vecs[],targ_sub_vecs[]),reduct_obj) -> targ_sub_vecs[],reduct_obj.

This is the bread and butter of the whole design. Through this method, a vector implementation applies a reduction/transformation operator to a set of sub-vectors.

Parameters:
num_vecs [in] Number of non-mutable sub-vectors in sub_vec[].
sub_vecs [in] Array (length num_vecs) of non-mutable vectors to apply the operator over. The ordering of these sub-vectors sub_vecs[k], for k = 0...num_vecs-1, is significant to the this operator object. If num_vecs==0 then sub_vecs can be NULL.
num_targ_vecs [in] Number of mutable sub-vectors in targ_sub_vec[].
targ_sub_vecs [in/out] Array (length num_targ_vecs) of mutable vectors to apply the operator over and be mutated. The ordering of these sub-vectors targ_sub_vecs[k], for k = 0...num_targ_vecs-1, is significant to this operator object. If num_targ_vecs==0 then targ_sub_vecs can be NULL.
reduct_obj [in/out] This reduction object must have been created by a this->reduct_obj_create() call and it may have * already passed through one or more other reduction operations (accumulating the reductions along the way). If this->get_reduct_type_num_entries() returns num_values==0, num_indexes==0 and num_chars==0, then reduct_obj should be set to NULL as no reduction will be performed.
Preconditions:

If reduct_obj != NULL then the reduction operation will be accumulated as:

   op(op(sub_vecs[],targ_sub_vecs[]),reduct_obj) -> reduct_obj
   

By allowing an in/out reduct_obj and an accumulation of the reduction, the maximum reuse of memory is achieved. If this->reduct_obj_create() or this->reduct_obj_reinit() (passing in reduct_obj) was called immediately before this function, then on return, reduct_obj will contain only the reduction from this function call.

If num_vecs is incompatible with the underlying operator object then InvalidNumVecs is thrown. If the sub-vectors are not compatible (i.e. globalOffset and/or subDim not the same) then IncompatibleVecs is thrown.

Definition at line 378 of file RTOpPack_RTOpT_decl.hpp.

template<class Scalar>
void RTOpPack::RTOpT< Scalar >::get_reduct_type_num_entries ( int *  num_values,
int *  num_indexes,
int *  num_chars 
) const [inline, inherited]

Deprecated.

Definition at line 393 of file RTOpPack_RTOpT_decl.hpp.

template<class Scalar>
void RTOpPack::RTOpT< Scalar >::reduce_reduct_objs ( const ReductTarget in_reduct_obj,
ReductTarget inout_reduct_obj 
) const [inline, inherited]

Deprecated.

Definition at line 403 of file RTOpPack_RTOpT_decl.hpp.

template<class Scalar>
void RTOpPack::RTOpT< Scalar >::reduct_obj_reinit ( ReductTarget reduct_obj  )  const [inline, inherited]

Deprecated.

Definition at line 411 of file RTOpPack_RTOpT_decl.hpp.

template<class Scalar>
void RTOpPack::RTOpT< Scalar >::extract_reduct_obj_state ( const ReductTarget reduct_obj,
int  num_values,
primitive_value_type  value_data[],
int  num_indexes,
index_type  index_data[],
int  num_chars,
char_type  char_data[] 
) const [inline, inherited]

Deprecated.

Definition at line 417 of file RTOpPack_RTOpT_decl.hpp.

template<class Scalar>
void RTOpPack::RTOpT< Scalar >::load_reduct_obj_state ( int  num_values,
const primitive_value_type  value_data[],
int  num_indexes,
const index_type  index_data[],
int  num_chars,
const char_type  char_data[],
ReductTarget reduct_obj 
) const [inline, inherited]

Deprecated.

Definition at line 431 of file RTOpPack_RTOpT_decl.hpp.

template<class Scalar>
void RTOpPack::RTOpT< Scalar >::apply_op ( const int  num_vecs,
const ConstSubVectorView< Scalar >  sub_vecs[],
const int  num_targ_vecs,
const SubVectorView< Scalar >  targ_sub_vecs[],
ReductTarget reduct_obj 
) const [inline, inherited]

Deprecated.

Definition at line 445 of file RTOpPack_RTOpT_decl.hpp.

template<class Scalar>
void RTOpPack::RTOpT< Scalar >::get_reduct_type_num_entries_impl ( const Ptr< int > &  num_values,
const Ptr< int > &  num_indexes,
const Ptr< int > &  num_chars 
) const [protected, virtual, inherited]

Protected virtual functions to be overridden by subclasses. .

Definition at line 46 of file RTOpPack_RTOpT_def.hpp.

template<class Scalar>
Teuchos::RCP< ReductTarget > RTOpPack::RTOpT< Scalar >::reduct_obj_create_impl (  )  const [protected, virtual, inherited]

Definition at line 60 of file RTOpPack_RTOpT_def.hpp.

template<class Scalar>
void RTOpPack::RTOpT< Scalar >::reduce_reduct_objs_impl ( const ReductTarget in_reduct_obj,
const Ptr< ReductTarget > &  inout_reduct_obj 
) const [protected, virtual, inherited]

Definition at line 67 of file RTOpPack_RTOpT_def.hpp.

template<class Scalar>
void RTOpPack::RTOpT< Scalar >::reduct_obj_reinit_impl ( const Ptr< ReductTarget > &  reduct_obj  )  const [protected, virtual, inherited]

Definition at line 76 of file RTOpPack_RTOpT_def.hpp.

template<class Scalar>
void RTOpPack::RTOpT< Scalar >::extract_reduct_obj_state_impl ( const ReductTarget reduct_obj,
const ArrayView< primitive_value_type > &  value_data,
const ArrayView< index_type > &  index_data,
const ArrayView< char_type > &  char_data 
) const [protected, virtual, inherited]

Definition at line 84 of file RTOpPack_RTOpT_def.hpp.

template<class Scalar>
void RTOpPack::RTOpT< Scalar >::load_reduct_obj_state_impl ( const ArrayView< const primitive_value_type > &  value_data,
const ArrayView< const index_type > &  index_data,
const ArrayView< const char_type > &  char_data,
const Ptr< ReductTarget > &  reduct_obj 
) const [protected, virtual, inherited]

Definition at line 96 of file RTOpPack_RTOpT_def.hpp.

template<class Scalar>
const std::string RTOpPack::RTOpT< Scalar >::op_name_impl (  )  const [protected, virtual, inherited]

Definition at line 108 of file RTOpPack_RTOpT_def.hpp.

template<class Scalar>
bool RTOpPack::RTOpT< Scalar >::coord_invariant_impl (  )  const [protected, virtual, inherited]

Definition at line 115 of file RTOpPack_RTOpT_def.hpp.

template<class Scalar>
virtual void RTOpPack::RTOpT< Scalar >::apply_op_impl ( const ArrayView< const ConstSubVectorView< Scalar > > &  sub_vecs,
const ArrayView< const SubVectorView< Scalar > > &  targ_sub_vecs,
const Ptr< ReductTarget > &  reduct_obj 
) const [protected, pure virtual, inherited]

template<class Scalar>
RTOpPack::RTOpT< Scalar >::RTOpT ( const std::string &  op_name_base = ""  )  [protected, inherited]

Nonvirtual protected functions. Constructor that creates an operator name appended with the type.

Definition at line 125 of file RTOpPack_RTOpT_def.hpp.

template<class Scalar>
void RTOpPack::RTOpT< Scalar >::setOpNameBase ( const std::string &  op_name_base  )  [protected, inherited]

Just set the opeator name.

Definition at line 132 of file RTOpPack_RTOpT_def.hpp.


Generated on Wed May 12 21:25:48 2010 for Fundamental Vector Reduction/Transformation Operator (RTOp) Interfaces by  doxygen 1.4.7