27 template <
typename I,
typename K,
typename C>
41 if (impl::cudnn::conv_possible<I, K, C> && is_2d<I> && !no_gpu) {
47 }
else if (impl::blas::blas_conv2_possible<I, K, C>) {
51 if (impl::vec::conv2_possible<vector_mode, I, K, C>) {
69 template <
typename I,
typename K,
typename C>
83 if (impl::vec::conv2_possible<vector_mode, I, K, C>) {
88 if (impl::blas::blas_conv2_possible<I, K, C>) {
97 #ifdef ETL_MANUAL_SELECT 106 template <
typename I,
typename K,
typename C>
114 if (!impl::cudnn::conv_possible<I, K, C>) {
115 std::cerr <<
"Forced selection to CUDNN conv implementation, but not possible for this expression" << std::endl;
124 std::cerr <<
"Forced selection to MKL conv implementation, but not possible for this expression" << std::endl;
132 if (!impl::blas::blas_conv2_possible<I, K, C>) {
133 std::cerr <<
"Forced selection to BLAS conv implementation, but not possible for this expression" << std::endl;
142 std::cerr <<
"Forced selection to VEC conv_valid_multi implementation, but not possible for this expression" << std::endl;
149 if (!impl::vec::conv2_possible<vector_mode, I, K, C>) {
150 std::cerr <<
"Forced selection to BLAS_VEC conv_valid_multi implementation, but not possible for this expression" << std::endl;
173 template <
typename I,
typename K,
typename C>
181 if (!impl::blas::blas_conv2_possible<I, K, C>) {
182 std::cerr <<
"Forced selection to BLAS conv implementation, but not possible for this expression" << std::endl;
183 return select_default_conv_valid_multi_multi_impl<I, K, C>();
191 if (!impl::vec::conv2_possible<vector_mode, I, K, C>) {
192 std::cerr <<
"Forced selection to VEC conv_valid_multi_multi implementation, but not possible for this expression" << std::endl;
193 return select_default_conv_valid_multi_multi_impl<I, K, C>();
205 return select_default_conv_valid_multi_multi_impl<I, K, C>();
217 template <
typename I,
typename K,
typename C>
219 return select_default_conv_valid_multi<I, K, C>(
false);
229 template <
typename I,
typename K,
typename C>
231 return select_default_conv_valid_multi_multi_impl<I, K, C>();
constexpr bool mkl_enabled
Indicates if the MKL library is available for ETL.
Definition: config.hpp:64
constexpr bool conv_valid_fft
Indicates if conv_valid_multi can use FFT.
Definition: config.hpp:40
constexpr etl::conv_multi_impl select_default_conv_valid_multi(bool no_gpu)
Select the implementation of the conv multi of I and K in C.
Definition: conv_multi_select.hpp:28
constexpr bool vectorize_impl
Indicates if the implementations can be automatically vectorized by ETL.
Definition: config.hpp:35
constexpr bool vec_enabled
Indicates if vectorization is available in any format.
Definition: config.hpp:220
order
Storage order of a matrix.
Definition: order.hpp:15
Definition: expression_builder.hpp:699
Traits to get information about ETL types.
Definition: tmp.hpp:68
context & local_context()
Return the configuration context of the current thread.
Definition: context.hpp:50
conv_multi_impl
Enumeration describing the different multiple convolution implementations.
Definition: conv_impl.hpp:47
constexpr etl::conv_multi_impl select_conv_valid_multi_impl()
Select the implementation of the conv of I and K in C.
Definition: conv_multi_select.hpp:218
bool cpu
Force CPU evaluation.
Definition: context.hpp:29
Reductiont to FFT (valid)
constexpr etl::conv_multi_impl select_default_conv_valid_multi_multi_impl()
Select the implementation of the conv multi of I and K in C.
Definition: conv_multi_select.hpp:70
constexpr etl::conv_multi_impl select_conv_valid_multi_multi_impl()
Select the implementation of the conv of I and K in C.
Definition: conv_multi_select.hpp:230