/**
* Multiply each entry of @p val of size @p N by @p a.
+ *
+ * @ingroup CUDAWrappers
*/
template <typename Number>
__global__ void
/**
* Functor defining the addition of two Numbers.
+ *
+ * @ingroup CUDAWrappers
*/
struct Binop_Addition
{
/**
* Functor defining the subtraction of two Numbers.
+ *
+ * @ingroup CUDAWrappers
*/
struct Binop_Subtraction
{
/**
* Apply the functor @tparam Binop to each element of @p v1 and @p v2.
+ *
+ * @ingroup CUDAWrappers
*/
template <typename Number, typename Binop>
__global__ void
/**
* Structure implementing the functions used to add elements when using a
* reduction.
+ *
+ * @ingroup CUDAWrappers
*/
template <typename Number>
struct ElemSum
/**
* Structure implementing the functions used to compute the L1 norm when
* using a reduction.
+ *
+ * @ingroup CUDAWrappers
*/
template <typename Number>
struct L1Norm
/**
* Structure implementing the functions used to compute the L-infinity
* norm when using a reduction.
+ *
+ * @ingroup CUDAWrappers
*/
template <typename Number>
struct LInfty
/**
- * Perform a reduction on @p v using @tparam Operation
+ * Perform a reduction on @p v using @tparam Operation.
+ *
+ * @ingroup CUDAWrappers
*/
template <typename Number, typename Operation>
__global__ void
/**
* Structure implementing the functions used to compute the dot product
* norm when using a double vector reduction.
+ *
+ * @ingroup CUDAWrappers
*/
template <typename Number>
struct DotProduct
/**
* Perform a binary operation on each element of @p v1 and @p v2 followed
* by reduction on the resulting array.
+ *
+ * @ingroup CUDAWrappers
*/
template <typename Number, typename Operation>
__global__ void
/**
* Add @p a to each element of @p val.
+ *
+ * @ingroup CUDAWrappers
*/
template <typename Number>
__global__ void
/**
* Addition of a multiple of a vector, i.e., <tt>val += a*V_val</tt>.
+ *
+ * @ingroup CUDAWrappers
*/
template <typename Number>
__global__ void
/**
* Addition of multiple scaled vector, i.e., <tt>val += a*V_val +
* b*W_val</tt>.
+ *
+ * @ingroup CUDAWrappers
*/
template <typename Number>
__global__ void
/**
* Scaling and simple addition of a multiple of a vector, i.e. <tt>val =
* = s*val + a*V_val</tt>
+ *
+ * @ingroup CUDAWrappers
*/
template <typename Number>
__global__ void
/**
* Scaling and multiple additions of scaled vectors, i.e. <tt>val =
* = s*val + a*V_val + b*W_val</tt>
+ *
+ * @ingroup CUDAWrappers
*/
template <typename Number>
__global__ void
/**
* Scale each element of this vector by the corresponding element in the
* argument.
+ *
+ * @ingroup CUDAWrappers
*/
template <typename Number>
__global__ void
/**
* Assignment <tt>val = a*V_val</tt>.
+ *
+ * @ingroup CUDAWrappers
*/
template <typename Number>
__global__ void
/**
* Assignment <tt>val = a*V_val + b*W_val</tt>.
+ *
+ * @ingroup CUDAWrappers
*/
template <typename Number>
__global__ void
/**
* Perform a combined operation of a vector addition and a subsequent
* inner product, returning the value of the inner product.
+ *
+ * @ingroup CUDAWrappers
*/
template <typename Number>
__global__ void
/**
* Set each element of @p val to @p s.
+ *
+ * @ingroup CUDAWrappers
*/
template <typename Number>
__global__ void
/**
* Set each element @v val to @p v using @p indices as permutation, i.e.,
* <tt>val[indices[i]] = v[i]</tt>.
+ *
+ * @ingroup CUDAWrappers
*/
template <typename Number>
__global__ void
/**
* Add each element @v val to @p v using @p indices as permutation, i.e.,
* <tt>val[indices[i]] += v[i]</tt>.
+ *
+ * @ingroup CUDAWrappers
*/
template <typename Number>
__global__ void