A class representing the Reduce skeleton both for 1D and 2D reduce operation for 1D Vector, 2D Dense Matrix/Sparse matrices. More...
#include <reduce.h>
Public Member Functions | |
| Reduce (ReduceFuncRowWise *reduceFuncRowWise, ReduceFuncColWise *reduceFuncColWise) | |
| ~Reduce () | |
| template<typename T > | |
| T | operator() (Matrix< T > &input) |
| template<typename T > | |
| T | operator() (SparseMatrix< T > &input) |
| template<typename T > | |
| T | CPU (Matrix< T > &input) |
| template<typename T > | |
| T | CPU (SparseMatrix< T > &input) |
| template<typename T > | |
| T | OMP (Matrix< T > &input) |
| template<typename T > | |
| T | OMP (SparseMatrix< T > &input) |
| template<typename T > | |
| T | CU (Matrix< T > &input, int useNumGPU=1) |
| template<typename T > | |
| T | CU (SparseMatrix< T > &input, int useNumGPU=1) |
| template<typename T > | |
| T | CL (Matrix< T > &input, int useNumGPU=1) |
| template<typename T > | |
| T | CL (SparseMatrix< T > &input, int useNumGPU=1) |
A class representing the Reduce skeleton both for 1D and 2D reduce operation for 1D Vector, 2D Dense Matrix/Sparse matrices.
This class defines the Reduce skeleton which support following reduction operations: (a) (1D Reduction) Each element in the input range, yielding a scalar result by applying a commutative associative binary operator. Here we consider dense/sparse matrix as vector thus reducing all (non-zero) elements of the matrix. (b) (1D Reduction) Dense/Sparse matrix types: Where we reduce either row-wise or column-wise by applying a commutative associative binary operator. It returns a SkePU vector of results that corresponds to reduction on either dimension. (c) (2D Reduction) Dense/Sparse matrix types: Where we reduce both row- and column-wise by applying two commutative associative binary operators, one for row-wise reduction and one for column-wise reduction. It returns a scalar result. Two versions of this class are created using C++ partial class-template specialization to support (a) 1D reduction (where a "single" reduction operator is applied on all elements or to 1 direction for 2D Dense/Sparse matrix). (b) 2D reduction that works only for matrix (where two different reduction operations are used to reduce row-wise and column-wise separately.) Once instantiated, it is meant to be used as a function and therefore overloading operator(). The Reduce skeleton needs to be created with a 1 or 2 binary user function for 1D reduction and 2D reduction respectively.
If a certain backend is to be used, functions with the same interface as operator() but by the names CPU, CU, CL, OMP exists for CPU, CUDA, OpenCL and OpenMP respectively.
The Reduce skeleton also includes a pointer to an Environment which includes the devices available to execute on.
| skepu::Reduce< ReduceFuncRowWise, ReduceFuncColWise >::Reduce | ( | ReduceFuncRowWise * | reduceFuncRowWise, |
| ReduceFuncColWise * | reduceFuncColWise | ||
| ) |
When creating an instance of the 2D Reduce (First row-wise then column-wise) skeleton, a pointer to a binary user function must be provided. Also the Environment is set and if SKEPU_OPENCL is defined, the appropriate OpenCL program and kernel are created. Also creates a default execution plan which the skeleton will use if no other is specified.
| reduceFuncRowWise | A pointer to a valid binary user function used for row-wise reduction. Will be deleted in the destructor. |
| reduceFuncColWise | A pointer to a valid binary user function used for columns-wise reduction. Will be deleted in the destructor. |
References skepu::Environment< T >::getInstance().

| skepu::Reduce< ReduceFuncRowWise, ReduceFuncColWise >::~Reduce | ( | ) |
When the 2D Reduce skeleton is destroyed, it deletes the user functions it was created with.
| T skepu::Reduce< ReduceFuncRowWise, ReduceFuncColWise >::CL | ( | Matrix< T > & | input, |
| int | useNumGPU = 1 |
||
| ) |
Performs the 2D Reduction (First row-wise then column-wise) on an input matrix by using OpenCL backend. Returns a scalar result. The function can be applied by any number of OpenCL devices, thus internally calling the reduceSingle_CL or reduceNumDevices_CL depending upon number of OpenCL devices specified/available.
| input | An input matrix whose elements need to be reduced. |
| useNumGPU | Integer specifying how many devices to use. 0 = implementation decides. |
Referenced by skepu::Reduce< ReduceFunc, ReduceFunc >::CL(), and skepu::Reduce< ReduceFunc, ReduceFunc >::operator()().
| T skepu::Reduce< ReduceFuncRowWise, ReduceFuncColWise >::CL | ( | SparseMatrix< T > & | input, |
| int | useNumGPU = 1 |
||
| ) |
Performs the 2D Reduction (First row-wise then column-wise) on an input sparse matrix by using OpenCL backend. Returns a scalar result. The function can be applied by any number of OpenCL devices, thus internally calling the reduceSingle_CL or reduceNumDevices_CL depending upon number of OpenCL devices specified/available.
| input | An input sparse matrix whose elements need to be reduced. |
| useNumGPU | Integer specifying how many devices to use. 0 = implementation decides. |
| T skepu::Reduce< ReduceFuncRowWise, ReduceFuncColWise >::CPU | ( | Matrix< T > & | input | ) |
Performs the 2D Reduction (First row-wise then column-wise) on a input Matrix. Returns a scalar result. Using the CPU as backend.
| input | A matrix on which the 2D reduction will be performed on. |
Referenced by skepu::Reduce< ReduceFunc, ReduceFunc >::CPU(), skepu::cpu_tune_wrapper_reduce(), and skepu::Reduce< ReduceFunc, ReduceFunc >::operator()().
| T skepu::Reduce< ReduceFuncRowWise, ReduceFuncColWise >::CPU | ( | SparseMatrix< T > & | input | ) |
Performs the 2D Reduction (First row-wise then column-wise) on a input Sparse Matrix. Returns a scalar result. Using the CPU as backend.
| input | A sparse matrix on which the 2D reduction will be performed on. |
References skepu::SparseMatrix< T >::begin(), skepu::SparseMatrix< T >::total_cols(), skepu::SparseMatrix< T >::total_nnz(), skepu::SparseMatrix< T >::total_rows(), and skepu::SparseMatrix< T >::updateHost().

| T skepu::Reduce< ReduceFuncRowWise, ReduceFuncColWise >::CU | ( | Matrix< T > & | input, |
| int | useNumGPU = 1 |
||
| ) |
Performs the 2D Reduction (First row-wise then column-wise) on an input matrix by using CUDA backend. Returns a scalar result. The function can be applied by any number of CUDA devices, thus internally calling the reduceSingle_CL or reduceNumDevices_CL depending upon number of CUDA devices specified/available.
| input | An input matrix whose elements need to be reduced. |
| useNumGPU | Integer specifying how many devices to use. 0 = implementation decides. |
Referenced by skepu::Reduce< ReduceFunc, ReduceFunc >::CU(), skepu::cuda_tune_wrapper_reduce(), and skepu::Reduce< ReduceFunc, ReduceFunc >::operator()().
| T skepu::Reduce< ReduceFuncRowWise, ReduceFuncColWise >::CU | ( | SparseMatrix< T > & | input, |
| int | useNumGPU = 1 |
||
| ) |
Performs the 2D Reduction (First row-wise then column-wise) on a input Sparse Matrix. Returns a scalar result. Using the CUDA as backend. The function can be applied by any number of CUDA devices, thus internally calling the reduceSingle_CL or reduceNumDevices_CL depending upon number of CUDA devices specified/available.
| input | An input sparse matrix whose elements need to be reduced. |
| useNumGPU | Integer specifying how many devices to use. 0 = implementation decides. |
| T skepu::Reduce< ReduceFuncRowWise, ReduceFuncColWise >::OMP | ( | Matrix< T > & | input | ) |
Performs the 2D Reduction (First row-wise then column-wise) on a input Matrix. Returns a scalar result. Using the OpenMP as backend.
| input | A matrix on which the 2D reduction will be performed on. |
Referenced by skepu::Reduce< ReduceFunc, ReduceFunc >::OMP(), skepu::omp_tune_wrapper_reduce(), and skepu::Reduce< ReduceFunc, ReduceFunc >::operator()().
| T skepu::Reduce< ReduceFuncRowWise, ReduceFuncColWise >::OMP | ( | SparseMatrix< T > & | input | ) |
Performs the 2D Reduction (First row-wise then column-wise) on a input Sparse Matrix. Returns a scalar result. Using the CPU as backend.
| input | A sparse matrix on which the 2D reduction will be performed on. |
References skepu::SparseMatrix< T >::total_nnz(), skepu::SparseMatrix< T >::total_rows(), and skepu::SparseMatrix< T >::updateHost().

| T skepu::Reduce< ReduceFuncRowWise, ReduceFuncColWise >::operator() | ( | Matrix< T > & | input | ) |
Performs the 2D Reduction (First row-wise then column-wise) on a whole Matrix. Returns a scalar result.
Depending on which backend was used, different versions of the skeleton is called. If SKEPU_CUDA is defined, the CUDA backend is used, similarly if SKEPU_OPENCL or SKEPU_OPENMP are defined then the OpenCL or OpenMP backend is used. As a fallback there is always a CPU version.
| input | A matrix on which the 2D reduction will be performed on. |
It might be the case that in a complex program suchg as SPH, some skeleton obj use default exec plan as are not perf relevant...
| T skepu::Reduce< ReduceFuncRowWise, ReduceFuncColWise >::operator() | ( | SparseMatrix< T > & | input | ) |
Performs the 2D Reduction (First row-wise then column-wise) on a whole Matrix. Returns a scalar result.
Depending on which backend was used, different versions of the skeleton is called. If SKEPU_CUDA is defined, the CUDA backend is used, similarly if SKEPU_OPENCL or SKEPU_OPENMP are defined then the OpenCL or OpenMP backend is used. As a fallback there is always a CPU version.
| input | A matrix on which the 2D reduction will be performed on. |
It might be the case that in a complex program suchg as SPH, some skeleton obj use default exec plan as are not perf relevant...
References skepu::SparseMatrix< T >::isModified_CU(), skepu::SparseMatrix< T >::isSparseMatrixOnDevice_CU(), skepu::SparseMatrix< T >::total_cols(), skepu::SparseMatrix< T >::total_nnz(), and skepu::SparseMatrix< T >::total_rows().

1.8.5