Automatic Differentiation
 
Loading...
Searching...
No Matches
prod.hpp
Go to the documentation of this file.
1#ifndef STAN_MATH_OPENCL_PRIM_PROD_HPP
2#define STAN_MATH_OPENCL_PRIM_PROD_HPP
3#ifdef STAN_OPENCL
4
9
10namespace stan {
11namespace math {
12
19template <typename T,
20 require_all_kernel_expressions_and_none_scalar_t<T>* = nullptr>
21inline value_type_t<T> prod(const T& m) {
22 if constexpr (is_matrix_cl<T>::value) {
23 if (m.size() < 1000) {
24 // for small matrices running another kernel is not worth it
25 return prod(from_matrix_cl(m));
26 }
27 }
29 if (m.rows() <= 8) {
30 // without transpose we would use just a few threads in a work group
31 res = prod_2d(transpose(m));
32 } else {
33 res = prod_2d(m);
34 }
35 return prod(from_matrix_cl(res));
36}
37
38} // namespace math
39} // namespace stan
40
41#endif
42#endif
Represents an arithmetic matrix on the OpenCL device.
Definition matrix_cl.hpp:47
auto transpose(Arg &&a)
Transposes a kernel generator expression.
auto prod_2d(T &&a)
Two dimensional product - reduction of a kernel generator expression.
auto from_matrix_cl(const T &src)
Copies the source matrix that is stored on the OpenCL device to the destination Eigen matrix.
Definition copy.hpp:61
typename value_type< T >::type value_type_t
Helper function for accessing underlying type.
value_type_t< T > prod(const T &m)
Calculates product of given kernel generator expression elements.
Definition prod.hpp:21
The lgamma implementation in stan-math is based on either the reentrant safe lgamma_r implementation ...
Checks if the decayed type of T is a matrix_cl.