|
RTOpPack: Extra C/C++ Code for Vector Reduction/Transformation Operators
Version of the Day
|
Functions | |
| void | RTOp_MPI_type_signature (const int num_values, const int num_indexes, const int num_chars, int *num_entries, int block_lengths[], MPI_Aint displacements[], MPI_Datatype datatypes[]) |
| int | RTOp_extract_reduct_obj_ext_state (const struct RTOp_RTOp *op, RTOp_ReductTarget reduct_obj, int num_values, int num_indexes, int num_chars, void *reduct_obj_ext) |
| int | RTOp_load_reduct_obj_ext_state (const struct RTOp_RTOp *op, const void *reduct_obj_ext, RTOp_ReductTarget reduct_obj) |
| int | RTOp_MPI_apply_op (MPI_Comm comm, const struct RTOp_RTOp *op, int root_rank, const int num_cols, const int num_vecs, const struct RTOp_SubVector sub_vecs[], const int num_targ_vecs, const struct RTOp_MutableSubVector sub_targ_vecs[], RTOp_ReductTarget reduct_objs[]) |
reduction/transformation operations in C with MPI.
| void RTOp_MPI_type_signature | ( | const int | num_values, |
| const int | num_indexes, | ||
| const int | num_chars, | ||
| int * | num_entries, | ||
| int | block_lengths[], | ||
| MPI_Aint | displacements[], | ||
| MPI_Datatype | datatypes[] | ||
| ) |
Initialize MPI compatible type signature arrays for reduction/transformation operator object instance data and reduction target object data.
| num_values | [in] Number of value members |
| num_indexes | [in] Number of index members |
| num_chars | [in] Number of character members |
| num_entries | [out] Number of entries in output arrays set |
| block_lengths | [out] array (length >= RTOp_NUM_DATA_TYPES) |
| displacements | [out] array (length >= RTOp_NUM_DATA_TYPES) |
| datatypes | [out] array (length >= RTOp_NUM_DATA_TYPES) |
See the MPI function MPI_Type_struct(...) for a discription of these arrays.
Definition at line 53 of file RTOpToMPI.c.
| int RTOp_extract_reduct_obj_ext_state | ( | const struct RTOp_RTOp * | op, |
| RTOp_ReductTarget | reduct_obj, | ||
| int | num_values, | ||
| int | num_indexes, | ||
| int | num_chars, | ||
| void * | reduct_obj_ext | ||
| ) |
Fill a compacted representation for a reduction object.
| op | [in] RTOp operator object |
| reduct_obj | [in] Reduction object |
| num_values | [in] Number of value members |
| num_indexes | [in] Number of index members |
| num_chars | [in] Number of character members |
| reduct_obj_ext | [out] (size = sizeof(RTOp_value_type)*(3 + num_values) |
Returns 0 if successful otherwise returns an error code. Definition at line 88 of file RTOpToMPI.c.
| int RTOp_load_reduct_obj_ext_state | ( | const struct RTOp_RTOp * | op, |
| const void * | reduct_obj_ext, | ||
| RTOp_ReductTarget | reduct_obj | ||
| ) |
Copy from a compacted representation for a reduction object.
| op | [in] RTOp operator object |
| reduct_obj_ext | [in] (size = sizeof(RTOp_value_type)*(3 + num_values) |
| reduct_obj | [in/out] Reduction object set to the values in |
Returns 0 if successful otherwise returns an error code. Definition at line 117 of file RTOpToMPI.c.
| int RTOp_MPI_apply_op | ( | MPI_Comm | comm, |
| const struct RTOp_RTOp * | op, | ||
| int | root_rank, | ||
| const int | num_cols, | ||
| const int | num_vecs, | ||
| const struct RTOp_SubVector | sub_vecs[], | ||
| const int | num_targ_vecs, | ||
| const struct RTOp_MutableSubVector | sub_targ_vecs[], | ||
| RTOp_ReductTarget | reduct_objs[] | ||
| ) |
Apply a reduction operation over a set of local sub-vectors using MPI.
| comm | [in] MPI communicator |
| op | [in] reduction/transformation operator object |
| root_rank | [in] See below |
| num_cols | [in] The number of columns for each vector |
| num_vecs | [in] See RTOpPack::RTOp::apply_op() |
| sub_vecs | [in] Array (size num_targ_vecs * num_cols) of nonmutable subvectors. The vectors for each column kc begin at sub_vecs+kc*num_vecs where kc=0...num_cols-1 Can be NULL if there are no local vector elements. |
| num_targ_vecs | [in] See RTOpPack::RTOp::apply_op() |
| sub_targ_vecs | [in] Array (size num_targ_vecs * num_cols) of mutable subvectors. The vectors for each column kc begin at sub_vecs+kc*num_targ_vecs where kc=0...num_cols-1 Can be NULL if there are no local vector elements. |
| reduct_objs | [in/out] Array (size num_cols) See below. If reduct_objs != NULL then on output, reduct_objs[i] will contain the reduction target over all the processes along with the reduction on input if reduct_objs[i] has already been through one or more reductions already and not reinitialized. |
sub_vecs[] and sub_targ_vecs[] arguments and to deside what type of reduction operation to perform (MPI_Allreduce() or MPI_Reduce()).Let rank be the value returned from MPI_Comm_rank(comm,&rank) in this process. The expected arguments to this function depend on the argument root_rank and rank as follows:
root_rank < 0 : In this case we are performing a MPI_Allreduce(...) reduction operation over all of the processes with the results collected in all of the processes. In this case reduct_obj!=RTOp_REDUCT_OBJ_NULL must be true in all of the processes. root_rank < 0 in all processes reduct_obj != RTOp_REDUCT_OBJ_NULL in all processes if a reduction is being performed. root_rank >= 0 : In this case we are performing a MPI_Reduce(...) reduction operation over all of the processes with the result only collected in the process with rank root_rank. Here all of the processes must pass the same value for root_rank. The reduction target object is only passed in for the processes with rank == root_rank. root_rank same in all of the processes rank == root_rank then reduct_obj != RTOp_REDUCT_OBJ_NULL rank != root_rank then reduct_obj == RTOp_REDUCT_OBJ_NULL Note that if a reduction operation is not performed then no synchronization of the the processes are performed. This is the fastest behavior and should be fine for a single thread but may cause problems with multiple threads.
Definition at line 144 of file RTOpToMPI.c.
1.8.6