Expression Templates Library (ETL)
conv_1d.hpp
Go to the documentation of this file.
1 //=======================================================================
2 // Copyright (c) 2014-2023 Baptiste Wicht
3 // Distributed under the terms of the MIT License.
4 // (See accompanying file LICENSE or copy at
5 // http://opensource.org/licenses/MIT)
6 //=======================================================================
7 
13 #pragma once
14 
15 #ifdef ETL_EGBLAS_MODE
16 
17 #include "etl/impl/cublas/cuda.hpp"
18 
19 #include <egblas.hpp>
20 
21 #endif
22 
23 namespace etl::impl::egblas {
24 
25 #ifdef EGBLAS_HAS_SCONV1_VALID
26 static constexpr bool has_sconv1_valid = true;
27 #else
28 static constexpr bool has_sconv1_valid = false;
29 #endif
30 
43 inline void conv1_valid([[maybe_unused]] size_t n,
44  [[maybe_unused]] size_t k,
45  [[maybe_unused]] float alpha,
46  [[maybe_unused]] const float* A,
47  [[maybe_unused]] size_t lda,
48  [[maybe_unused]] const float* B,
49  [[maybe_unused]] size_t ldb,
50  [[maybe_unused]] float* C,
51  [[maybe_unused]] size_t ldc) {
52 #ifdef EGBLAS_HAS_SCONV1_VALID
53  inc_counter("egblas");
54  egblas_sconv1_valid(n, k, alpha, A, lda, B, ldb, C, ldc);
55 #else
56  cpp_unreachable("Invalid call to egblas::conv1_valid");
57 #endif
58 }
59 
60 #ifdef EGBLAS_HAS_DCONV1_VALID
61 static constexpr bool has_dconv1_valid = true;
62 #else
63 static constexpr bool has_dconv1_valid = false;
64 #endif
65 
75 inline void conv1_valid([[maybe_unused]] size_t n,
76  [[maybe_unused]] size_t k,
77  [[maybe_unused]] double alpha,
78  [[maybe_unused]] const double* A,
79  [[maybe_unused]] size_t lda,
80  [[maybe_unused]] const double* B,
81  [[maybe_unused]] size_t ldb,
82  [[maybe_unused]] double* C,
83  [[maybe_unused]] size_t ldc) {
84 #ifdef EGBLAS_HAS_DCONV1_VALID
85  inc_counter("egblas");
86  egblas_dconv1_valid(n, k, alpha, A, lda, B, ldb, C, ldc);
87 #else
88  cpp_unreachable("Invalid call to egblas::conv1_valid");
89 #endif
90 }
91 
92 #ifdef EGBLAS_HAS_SCONV1_SAME
93 static constexpr bool has_sconv1_same = true;
94 #else
95 static constexpr bool has_sconv1_same = false;
96 #endif
97 
110 inline void conv1_same([[maybe_unused]] size_t n,
111  [[maybe_unused]] size_t k,
112  [[maybe_unused]] float alpha,
113  [[maybe_unused]] const float* A,
114  [[maybe_unused]] size_t lda,
115  [[maybe_unused]] const float* B,
116  [[maybe_unused]] size_t ldb,
117  [[maybe_unused]] float* C,
118  [[maybe_unused]] size_t ldc) {
119 #ifdef EGBLAS_HAS_SCONV1_SAME
120  inc_counter("egblas");
121  egblas_sconv1_same(n, k, alpha, A, lda, B, ldb, C, ldc);
122 #else
123  cpp_unreachable("Invalid call to egblas::conv1_same");
124 #endif
125 }
126 
127 #ifdef EGBLAS_HAS_DCONV1_SAME
128 static constexpr bool has_dconv1_same = true;
129 #else
130 static constexpr bool has_dconv1_same = false;
131 #endif
132 
142 inline void conv1_same([[maybe_unused]] size_t n,
143  [[maybe_unused]] size_t k,
144  [[maybe_unused]] double alpha,
145  [[maybe_unused]] const double* A,
146  [[maybe_unused]] size_t lda,
147  [[maybe_unused]] const double* B,
148  [[maybe_unused]] size_t ldb,
149  [[maybe_unused]] double* C,
150  [[maybe_unused]] size_t ldc) {
151 #ifdef EGBLAS_HAS_DCONV1_SAME
152  inc_counter("egblas");
153  egblas_dconv1_same(n, k, alpha, A, lda, B, ldb, C, ldc);
154 #else
155  cpp_unreachable("Invalid call to egblas::conv1_same");
156 #endif
157 }
158 
159 #ifdef EGBLAS_HAS_SCONV1_FULL
160 static constexpr bool has_sconv1_full = true;
161 #else
162 static constexpr bool has_sconv1_full = false;
163 #endif
164 
177 inline void conv1_full([[maybe_unused]] size_t n,
178  [[maybe_unused]] size_t k,
179  [[maybe_unused]] float alpha,
180  [[maybe_unused]] const float* A,
181  [[maybe_unused]] size_t lda,
182  [[maybe_unused]] const float* B,
183  [[maybe_unused]] size_t ldb,
184  [[maybe_unused]] float* C,
185  [[maybe_unused]] size_t ldc) {
186 #ifdef EGBLAS_HAS_SCONV1_FULL
187  inc_counter("egblas");
188  egblas_sconv1_full(n, k, alpha, A, lda, B, ldb, C, ldc);
189 #else
190  cpp_unreachable("Invalid call to egblas::conv1_full");
191 #endif
192 }
193 
194 #ifdef EGBLAS_HAS_DCONV1_FULL
195 static constexpr bool has_dconv1_full = true;
196 #else
197 static constexpr bool has_dconv1_full = false;
198 #endif
199 
209 inline void conv1_full([[maybe_unused]] size_t n,
210  [[maybe_unused]] size_t k,
211  [[maybe_unused]] double alpha,
212  [[maybe_unused]] const double* A,
213  [[maybe_unused]] size_t lda,
214  [[maybe_unused]] const double* B,
215  [[maybe_unused]] size_t ldb,
216  [[maybe_unused]] double* C,
217  [[maybe_unused]] size_t ldc) {
218 #ifdef EGBLAS_HAS_DCONV1_FULL
219  inc_counter("egblas");
220  egblas_dconv1_full(n, k, alpha, A, lda, B, ldb, C, ldc);
221 #else
222  cpp_unreachable("Invalid call to egblas::conv1_full");
223 #endif
224 }
225 
226 } //end of namespace etl::impl::egblas
Definition: abs.hpp:23
void conv1_same([[maybe_unused]] size_t n, [[maybe_unused]] size_t k, [[maybe_unused]] float alpha, [[maybe_unused]] const float *A, [[maybe_unused]] size_t lda, [[maybe_unused]] const float *B, [[maybe_unused]] size_t ldb, [[maybe_unused]] float *C, [[maybe_unused]] size_t ldc)
Wrappers for single-precision egblas conv1_same operation.
Definition: conv_1d.hpp:110
void inc_counter([[maybe_unused]] const char *name)
Increase the given counter.
Definition: counters.hpp:25
void conv1_valid([[maybe_unused]] size_t n, [[maybe_unused]] size_t k, [[maybe_unused]] float alpha, [[maybe_unused]] const float *A, [[maybe_unused]] size_t lda, [[maybe_unused]] const float *B, [[maybe_unused]] size_t ldb, [[maybe_unused]] float *C, [[maybe_unused]] size_t ldc)
Wrappers for single-precision egblas conv1_valid operation.
Definition: conv_1d.hpp:43