1 /*
2 * Copyright (c) 2010, Michael Lehn
3 *
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 *
10 * 1) Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2) Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in
14 * the documentation and/or other materials provided with the
15 * distribution.
16 * 3) Neither the name of the FLENS development group nor the names of
17 * its contributors may be used to endorse or promote products derived
18 * from this software without specific prior written permission.
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 */
32
33
34 #include <flens/blas/blaslogclear.h>
35
36 #define FLENS_BLASLOG_SETTAG(tag) \
37 verbose::ClosureLog::setTag(tag)
38
39 //------------------------------------------------------------------------------
40
41 #define FLENS_BLASLOG_UNSETTAG \
42 verbose::ClosureLog::unsetTag()
43
44 //------------------------------------------------------------------------------
45
46 #define FLENS_BLASLOG_END \
47 verbose::ClosureLog::closeEntry();
48
49 //------------------------------------------------------------------------------
50
51 #define FLENS_BLASLOG_BEGIN_ASSIGNMENT(X, Y) \
52 if (verbose::ClosureLog::createEntry()) { \
53 verbose::ClosureLog::separator(); \
54 verbose::ClosureLog::append() << Y << " = " << X << ";"; \
55 verbose::ClosureLog::append() << "flens::assign(" << X << ", " << Y \
56 << ");"; \
57 }
58
59 //------------------------------------------------------------------------------
60
61 #define FLENS_BLASLOG_BEGIN_PLUSASSIGNMENT(X, Y) \
62 if (verbose::ClosureLog::createEntry()) { \
63 verbose::ClosureLog::separator(); \
64 verbose::ClosureLog::append() << Y << " += " << X << ";"; \
65 verbose::ClosureLog::append() << "flens::plusAssign(" \
66 << X << ", " << Y << ");"; \
67 }
68
69 //------------------------------------------------------------------------------
70
71 #define FLENS_BLASLOG_BEGIN_MINUSASSIGNMENT(X, Y) \
72 if (verbose::ClosureLog::createEntry()) { \
73 verbose::ClosureLog::separator(); \
74 verbose::ClosureLog::append() << Y << " -= " << X << ";"; \
75 verbose::ClosureLog::append() << "flens::minusAssign(" \
76 << X << ", " << Y << ");"; \
77 }
78
79 //------------------------------------------------------------------------------
80
81 #define FLENS_BLASLOG_IDENTICAL(A, B) \
82 if (verbose::ClosureLog::createEntry()) { \
83 verbose::ClosureLog::append() << "Note that " \
84 << A << " and " << B \
85 << " are identical."; \
86 verbose::ClosureLog::closeEntry(); \
87 }
88
89 //------------------------------------------------------------------------------
90
91 #define FLENS_BLASLOG_TMP_ADD(tmp) \
92 if (verbose::ClosureLog::createEntry()) { \
93 verbose::ClosureLog::variablePool.addTemporary(tmp); \
94 verbose::ClosureLog::closeEntry(); \
95 }
96
97
98 //------------------------------------------------------------------------------
99
100 #define FLENS_BLASLOG_TMP_TRON \
101 verbose::ClosureLog::variablePool.tmpTron = true; \
102
103 //------------------------------------------------------------------------------
104
105 #define FLENS_BLASLOG_TMP_TROFF \
106 verbose::ClosureLog::variablePool.tmpTron = false; \
107
108 //------------------------------------------------------------------------------
109
110 #define FLENS_BLASLOG_TMP_REMOVE(tmp, X) \
111 if (verbose::ClosureLog::createEntry()) { \
112 verbose::ClosureLog::append() << "WARNING: Temporary " << tmp \
113 << " was required for " << X; \
114 verbose::ClosureLog::variablePool.removeTemporary(tmp); \
115 verbose::ClosureLog::closeEntry(); \
116 }
117
118 //------------------------------------------------------------------------------
119
120 #define FLENS_BLASLOG_ERROR_COPY(X, Y) \
121 if (verbose::ClosureLog::createEntry()) { \
122 verbose::ClosureLog::append() << "ERROR: Can not evaluate"; \
123 verbose::ClosureLog::append() << "flens::blas::copy(" \
124 << X << ", " << Y << ");"; \
125 verbose::ClosureLog::append() << "Unknown operation in: " << X; \
126 verbose::ClosureLog::stop(); \
127 ASSERT(0); \
128 }
129
130 //------------------------------------------------------------------------------
131
132 #define FLENS_BLASLOG_ERROR_MCOPY(TRANS, X, Y) \
133 if (verbose::ClosureLog::createEntry()) { \
134 verbose::ClosureLog::append() << "ERROR: Can not evaluate"; \
135 verbose::ClosureLog::append() << "flens::blas::copy(" << TRANS \
136 << ", " << X << ", " << Y << ");"; \
137 verbose::ClosureLog::append() << "Unknown operation in: " << X; \
138 verbose::ClosureLog::stop(); \
139 ASSERT(0); \
140 }
141
142 //------------------------------------------------------------------------------
143
144 #define FLENS_BLASLOG_ERROR_AXPY(ALPHA, X, Y) \
145 if (verbose::ClosureLog::createEntry()) { \
146 verbose::ClosureLog::append() << "ERROR: Can not evaluate"; \
147 verbose::ClosureLog::append() << "flens::blas::axpy(" \
148 << ALPHA << ", " << X << ", " << Y \
149 << ");"; \
150 verbose::ClosureLog::append() << "Unknown operation in: " << X; \
151 verbose::ClosureLog::stop(); \
152 ASSERT(0); \
153 }
154
155 //------------------------------------------------------------------------------
156
157 #define FLENS_BLASLOG_ERROR_MAXPY(TRANS, ALPHA, X, Y) \
158 if (verbose::ClosureLog::createEntry()) { \
159 verbose::ClosureLog::append() << "ERROR: Can not evaluate"; \
160 verbose::ClosureLog::append() << "flens::blas::axpy(" \
161 << TRANS << "," \
162 << ALPHA << ", " << X << ", " << Y \
163 << ");"; \
164 verbose::ClosureLog::append() << "Unknown operation in: " << X; \
165 verbose::ClosureLog::stop(); \
166 ASSERT(0); \
167 }
168
169 //------------------------------------------------------------------------------
170
171 #define FLENS_BLASLOG_RESIZE_VECTOR(X, n) \
172 if (verbose::ClosureLog::openEntry()) { \
173 verbose::ClosureLog::append() << "WARNING: Resizing " << X \
174 << " old dim = " << X.length() \
175 << " new dim = " << n; \
176 }
177
178 //------------------------------------------------------------------------------
179
180 #define FLENS_BLASLOG_RESIZE_MATRIX(A, m, n) \
181 if (verbose::ClosureLog::openEntry()) { \
182 verbose::ClosureLog::append() << "WARNING: Resizing " << A \
183 << " old dim = " << A.numRows() << " x " << A.numCols() \
184 << ", new dim = " << m << " x " << n; \
185 }
186
187 //------------------------------------------------------------------------------
188
189 #define FLENS_BLASLOG_BEGIN_COPY(X, Y) \
190 if (verbose::ClosureLog::createEntry()) { \
191 verbose::ClosureLog::append() << "flens::blas::copy(" \
192 << X << ", " << Y << ");"; \
193 }
194
195 //------------------------------------------------------------------------------
196
197 #define FLENS_BLASLOG_BEGIN_RESIDUAL(b, A, x, y) \
198 if (verbose::ClosureLog::createEntry()) { \
199 verbose::ClosureLog::append() << "residual(" \
200 << b << ", " << A << ", " << x << ", " << y << ");"; \
201 }
202
203 //------------------------------------------------------------------------------
204
205 #define FLENS_BLASLOG_BEGIN_MCOPY(TRANS, X, Y) \
206 if (verbose::ClosureLog::createEntry()) { \
207 verbose::ClosureLog::append() << "flens::blas::copy(" << TRANS \
208 << ", " << X << ", " << Y << ");"; \
209 }
210
211 //------------------------------------------------------------------------------
212
213 #define FLENS_BLASLOG_BEGIN_MCOTR(TRANS, X) \
214 if (verbose::ClosureLog::createEntry()) { \
215 verbose::ClosureLog::append() << "flens::blas::cotr(" << TRANS \
216 << ", " << X << ");"; \
217 }
218
219 //------------------------------------------------------------------------------
220
221 #define FLENS_BLASLOG_BEGIN_AXPY(ALPHA, X, Y) \
222 if (verbose::ClosureLog::createEntry()) { \
223 verbose::ClosureLog::append() << "flens::blas::axpy(" \
224 << ALPHA << ", " << X << ", " << Y \
225 << ");"; \
226 }
227
228 //------------------------------------------------------------------------------
229
230 #define FLENS_BLASLOG_BEGIN_MAXPY(TRANS, ALPHA, X, Y) \
231 if (verbose::ClosureLog::createEntry()) { \
232 verbose::ClosureLog::append() << "flens::blas::axpy(" << TRANS \
233 << ", " << ALPHA << ", " << X << ", " \
234 << Y << ");"; \
235 }
236
237 //------------------------------------------------------------------------------
238
239 #define FLENS_BLASLOG_BEGIN_RAXPY(ALPHA, X, Y) \
240 if (verbose::ClosureLog::createEntry()) { \
241 verbose::ClosureLog::append() << "flens::blas::raxpy(" \
242 << ALPHA << ", " << X << ", " << Y \
243 << ");"; \
244 }
245
246 //------------------------------------------------------------------------------
247
248 #define FLENS_BLASLOG_BEGIN_MRAXPY(TRANS, ALPHA, X, Y) \
249 if (verbose::ClosureLog::createEntry()) { \
250 verbose::ClosureLog::append() << "flens::blas::raxpy(" \
251 << TRANS << ", " \
252 << ALPHA << ", " << X << ", " << Y \
253 << ");"; \
254 }
255
256 //------------------------------------------------------------------------------
257
258 #define FLENS_BLASLOG_BEGIN_SCAL(ALPHA, X) \
259 if (verbose::ClosureLog::createEntry()) { \
260 verbose::ClosureLog::append() << "flens::blas::scal(" \
261 << ALPHA << ", " << X << ");"; \
262 }
263
264 //------------------------------------------------------------------------------
265
266 #define FLENS_BLASLOG_BEGIN_RSCAL(ALPHA, X) \
267 if (verbose::ClosureLog::createEntry()) { \
268 verbose::ClosureLog::append() << "flens::blas::rscal(" \
269 << ALPHA << ", " << X << ");"; \
270 }
271
272 //------------------------------------------------------------------------------
273
274 #define FLENS_BLASLOG_BEGIN_DOT(X, Y) \
275 if (verbose::ClosureLog::createEntry()) { \
276 verbose::ClosureLog::separator(); \
277 verbose::ClosureLog::append() << "flens::blas::dot(" \
278 << X << ", " << Y << ");"; \
279 }
280
281 //------------------------------------------------------------------------------
282
283 #define FLENS_BLASLOG_BEGIN_GEMV(TRANS, ALPHA, A, X, BETA, Y) \
284 if (verbose::ClosureLog::createEntry()) { \
285 verbose::ClosureLog::append() << "flens::blas::mv(" \
286 << TRANS << ", " << ALPHA << ", " \
287 << A << ", " << X << ", " \
288 << BETA << ", " \
289 << Y << ");"; \
290 }
291
292 //------------------------------------------------------------------------------
293
294 #define FLENS_BLASLOG_BEGIN_TRMV(TRANS, A, X) \
295 if (verbose::ClosureLog::createEntry()) { \
296 verbose::ClosureLog::append() << "flens::blas::mv(" \
297 << TRANS << ", " \
298 << A << ", " << X \
299 << ");"; \
300 }
301
302
303 //------------------------------------------------------------------------------
304
305 #define FLENS_BLASLOG_BEGIN_GEMM(transA, transB, alpha, A, B, beta, C) \
306 if (verbose::ClosureLog::createEntry()) { \
307 verbose::ClosureLog::append() << "flens::blas::mm(" \
308 << transA << ", " << transB << ", " \
309 << alpha << ", " \
310 << A << ", " << B << ", " \
311 << beta << ", " \
312 << C << ");"; \
313 }
314
315 //------------------------------------------------------------------------------
316
317 #define FLENS_BLASLOG_BEGIN_TRMM(side, transA, alpha, A, B) \
318 if (verbose::ClosureLog::createEntry()) { \
319 verbose::ClosureLog::append() << "flens::blas::mm(" \
320 << side << ", " << transA << ", " \
321 << alpha << ", " \
322 << A << ", " << B << ");"; \
323 }
324
325 //------------------------------------------------------------------------------
326
327 #define FLENS_BLASLOG_BEGIN_SYMM(side, alpha, A, B, beta, C) \
328 if (verbose::ClosureLog::createEntry()) { \
329 verbose::ClosureLog::append() << "flens::blas::mm(" \
330 << side << ", " \
331 << alpha << ", " \
332 << A << ", " << B << ", " \
333 << beta << ", " \
334 << C << ");"; \
335 }
336
337
338
2 * Copyright (c) 2010, Michael Lehn
3 *
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 *
10 * 1) Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2) Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in
14 * the documentation and/or other materials provided with the
15 * distribution.
16 * 3) Neither the name of the FLENS development group nor the names of
17 * its contributors may be used to endorse or promote products derived
18 * from this software without specific prior written permission.
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 */
32
33
34 #include <flens/blas/blaslogclear.h>
35
36 #define FLENS_BLASLOG_SETTAG(tag) \
37 verbose::ClosureLog::setTag(tag)
38
39 //------------------------------------------------------------------------------
40
41 #define FLENS_BLASLOG_UNSETTAG \
42 verbose::ClosureLog::unsetTag()
43
44 //------------------------------------------------------------------------------
45
46 #define FLENS_BLASLOG_END \
47 verbose::ClosureLog::closeEntry();
48
49 //------------------------------------------------------------------------------
50
51 #define FLENS_BLASLOG_BEGIN_ASSIGNMENT(X, Y) \
52 if (verbose::ClosureLog::createEntry()) { \
53 verbose::ClosureLog::separator(); \
54 verbose::ClosureLog::append() << Y << " = " << X << ";"; \
55 verbose::ClosureLog::append() << "flens::assign(" << X << ", " << Y \
56 << ");"; \
57 }
58
59 //------------------------------------------------------------------------------
60
61 #define FLENS_BLASLOG_BEGIN_PLUSASSIGNMENT(X, Y) \
62 if (verbose::ClosureLog::createEntry()) { \
63 verbose::ClosureLog::separator(); \
64 verbose::ClosureLog::append() << Y << " += " << X << ";"; \
65 verbose::ClosureLog::append() << "flens::plusAssign(" \
66 << X << ", " << Y << ");"; \
67 }
68
69 //------------------------------------------------------------------------------
70
71 #define FLENS_BLASLOG_BEGIN_MINUSASSIGNMENT(X, Y) \
72 if (verbose::ClosureLog::createEntry()) { \
73 verbose::ClosureLog::separator(); \
74 verbose::ClosureLog::append() << Y << " -= " << X << ";"; \
75 verbose::ClosureLog::append() << "flens::minusAssign(" \
76 << X << ", " << Y << ");"; \
77 }
78
79 //------------------------------------------------------------------------------
80
81 #define FLENS_BLASLOG_IDENTICAL(A, B) \
82 if (verbose::ClosureLog::createEntry()) { \
83 verbose::ClosureLog::append() << "Note that " \
84 << A << " and " << B \
85 << " are identical."; \
86 verbose::ClosureLog::closeEntry(); \
87 }
88
89 //------------------------------------------------------------------------------
90
91 #define FLENS_BLASLOG_TMP_ADD(tmp) \
92 if (verbose::ClosureLog::createEntry()) { \
93 verbose::ClosureLog::variablePool.addTemporary(tmp); \
94 verbose::ClosureLog::closeEntry(); \
95 }
96
97
98 //------------------------------------------------------------------------------
99
100 #define FLENS_BLASLOG_TMP_TRON \
101 verbose::ClosureLog::variablePool.tmpTron = true; \
102
103 //------------------------------------------------------------------------------
104
105 #define FLENS_BLASLOG_TMP_TROFF \
106 verbose::ClosureLog::variablePool.tmpTron = false; \
107
108 //------------------------------------------------------------------------------
109
110 #define FLENS_BLASLOG_TMP_REMOVE(tmp, X) \
111 if (verbose::ClosureLog::createEntry()) { \
112 verbose::ClosureLog::append() << "WARNING: Temporary " << tmp \
113 << " was required for " << X; \
114 verbose::ClosureLog::variablePool.removeTemporary(tmp); \
115 verbose::ClosureLog::closeEntry(); \
116 }
117
118 //------------------------------------------------------------------------------
119
120 #define FLENS_BLASLOG_ERROR_COPY(X, Y) \
121 if (verbose::ClosureLog::createEntry()) { \
122 verbose::ClosureLog::append() << "ERROR: Can not evaluate"; \
123 verbose::ClosureLog::append() << "flens::blas::copy(" \
124 << X << ", " << Y << ");"; \
125 verbose::ClosureLog::append() << "Unknown operation in: " << X; \
126 verbose::ClosureLog::stop(); \
127 ASSERT(0); \
128 }
129
130 //------------------------------------------------------------------------------
131
132 #define FLENS_BLASLOG_ERROR_MCOPY(TRANS, X, Y) \
133 if (verbose::ClosureLog::createEntry()) { \
134 verbose::ClosureLog::append() << "ERROR: Can not evaluate"; \
135 verbose::ClosureLog::append() << "flens::blas::copy(" << TRANS \
136 << ", " << X << ", " << Y << ");"; \
137 verbose::ClosureLog::append() << "Unknown operation in: " << X; \
138 verbose::ClosureLog::stop(); \
139 ASSERT(0); \
140 }
141
142 //------------------------------------------------------------------------------
143
144 #define FLENS_BLASLOG_ERROR_AXPY(ALPHA, X, Y) \
145 if (verbose::ClosureLog::createEntry()) { \
146 verbose::ClosureLog::append() << "ERROR: Can not evaluate"; \
147 verbose::ClosureLog::append() << "flens::blas::axpy(" \
148 << ALPHA << ", " << X << ", " << Y \
149 << ");"; \
150 verbose::ClosureLog::append() << "Unknown operation in: " << X; \
151 verbose::ClosureLog::stop(); \
152 ASSERT(0); \
153 }
154
155 //------------------------------------------------------------------------------
156
157 #define FLENS_BLASLOG_ERROR_MAXPY(TRANS, ALPHA, X, Y) \
158 if (verbose::ClosureLog::createEntry()) { \
159 verbose::ClosureLog::append() << "ERROR: Can not evaluate"; \
160 verbose::ClosureLog::append() << "flens::blas::axpy(" \
161 << TRANS << "," \
162 << ALPHA << ", " << X << ", " << Y \
163 << ");"; \
164 verbose::ClosureLog::append() << "Unknown operation in: " << X; \
165 verbose::ClosureLog::stop(); \
166 ASSERT(0); \
167 }
168
169 //------------------------------------------------------------------------------
170
171 #define FLENS_BLASLOG_RESIZE_VECTOR(X, n) \
172 if (verbose::ClosureLog::openEntry()) { \
173 verbose::ClosureLog::append() << "WARNING: Resizing " << X \
174 << " old dim = " << X.length() \
175 << " new dim = " << n; \
176 }
177
178 //------------------------------------------------------------------------------
179
180 #define FLENS_BLASLOG_RESIZE_MATRIX(A, m, n) \
181 if (verbose::ClosureLog::openEntry()) { \
182 verbose::ClosureLog::append() << "WARNING: Resizing " << A \
183 << " old dim = " << A.numRows() << " x " << A.numCols() \
184 << ", new dim = " << m << " x " << n; \
185 }
186
187 //------------------------------------------------------------------------------
188
189 #define FLENS_BLASLOG_BEGIN_COPY(X, Y) \
190 if (verbose::ClosureLog::createEntry()) { \
191 verbose::ClosureLog::append() << "flens::blas::copy(" \
192 << X << ", " << Y << ");"; \
193 }
194
195 //------------------------------------------------------------------------------
196
197 #define FLENS_BLASLOG_BEGIN_RESIDUAL(b, A, x, y) \
198 if (verbose::ClosureLog::createEntry()) { \
199 verbose::ClosureLog::append() << "residual(" \
200 << b << ", " << A << ", " << x << ", " << y << ");"; \
201 }
202
203 //------------------------------------------------------------------------------
204
205 #define FLENS_BLASLOG_BEGIN_MCOPY(TRANS, X, Y) \
206 if (verbose::ClosureLog::createEntry()) { \
207 verbose::ClosureLog::append() << "flens::blas::copy(" << TRANS \
208 << ", " << X << ", " << Y << ");"; \
209 }
210
211 //------------------------------------------------------------------------------
212
213 #define FLENS_BLASLOG_BEGIN_MCOTR(TRANS, X) \
214 if (verbose::ClosureLog::createEntry()) { \
215 verbose::ClosureLog::append() << "flens::blas::cotr(" << TRANS \
216 << ", " << X << ");"; \
217 }
218
219 //------------------------------------------------------------------------------
220
221 #define FLENS_BLASLOG_BEGIN_AXPY(ALPHA, X, Y) \
222 if (verbose::ClosureLog::createEntry()) { \
223 verbose::ClosureLog::append() << "flens::blas::axpy(" \
224 << ALPHA << ", " << X << ", " << Y \
225 << ");"; \
226 }
227
228 //------------------------------------------------------------------------------
229
230 #define FLENS_BLASLOG_BEGIN_MAXPY(TRANS, ALPHA, X, Y) \
231 if (verbose::ClosureLog::createEntry()) { \
232 verbose::ClosureLog::append() << "flens::blas::axpy(" << TRANS \
233 << ", " << ALPHA << ", " << X << ", " \
234 << Y << ");"; \
235 }
236
237 //------------------------------------------------------------------------------
238
239 #define FLENS_BLASLOG_BEGIN_RAXPY(ALPHA, X, Y) \
240 if (verbose::ClosureLog::createEntry()) { \
241 verbose::ClosureLog::append() << "flens::blas::raxpy(" \
242 << ALPHA << ", " << X << ", " << Y \
243 << ");"; \
244 }
245
246 //------------------------------------------------------------------------------
247
248 #define FLENS_BLASLOG_BEGIN_MRAXPY(TRANS, ALPHA, X, Y) \
249 if (verbose::ClosureLog::createEntry()) { \
250 verbose::ClosureLog::append() << "flens::blas::raxpy(" \
251 << TRANS << ", " \
252 << ALPHA << ", " << X << ", " << Y \
253 << ");"; \
254 }
255
256 //------------------------------------------------------------------------------
257
258 #define FLENS_BLASLOG_BEGIN_SCAL(ALPHA, X) \
259 if (verbose::ClosureLog::createEntry()) { \
260 verbose::ClosureLog::append() << "flens::blas::scal(" \
261 << ALPHA << ", " << X << ");"; \
262 }
263
264 //------------------------------------------------------------------------------
265
266 #define FLENS_BLASLOG_BEGIN_RSCAL(ALPHA, X) \
267 if (verbose::ClosureLog::createEntry()) { \
268 verbose::ClosureLog::append() << "flens::blas::rscal(" \
269 << ALPHA << ", " << X << ");"; \
270 }
271
272 //------------------------------------------------------------------------------
273
274 #define FLENS_BLASLOG_BEGIN_DOT(X, Y) \
275 if (verbose::ClosureLog::createEntry()) { \
276 verbose::ClosureLog::separator(); \
277 verbose::ClosureLog::append() << "flens::blas::dot(" \
278 << X << ", " << Y << ");"; \
279 }
280
281 //------------------------------------------------------------------------------
282
283 #define FLENS_BLASLOG_BEGIN_GEMV(TRANS, ALPHA, A, X, BETA, Y) \
284 if (verbose::ClosureLog::createEntry()) { \
285 verbose::ClosureLog::append() << "flens::blas::mv(" \
286 << TRANS << ", " << ALPHA << ", " \
287 << A << ", " << X << ", " \
288 << BETA << ", " \
289 << Y << ");"; \
290 }
291
292 //------------------------------------------------------------------------------
293
294 #define FLENS_BLASLOG_BEGIN_TRMV(TRANS, A, X) \
295 if (verbose::ClosureLog::createEntry()) { \
296 verbose::ClosureLog::append() << "flens::blas::mv(" \
297 << TRANS << ", " \
298 << A << ", " << X \
299 << ");"; \
300 }
301
302
303 //------------------------------------------------------------------------------
304
305 #define FLENS_BLASLOG_BEGIN_GEMM(transA, transB, alpha, A, B, beta, C) \
306 if (verbose::ClosureLog::createEntry()) { \
307 verbose::ClosureLog::append() << "flens::blas::mm(" \
308 << transA << ", " << transB << ", " \
309 << alpha << ", " \
310 << A << ", " << B << ", " \
311 << beta << ", " \
312 << C << ");"; \
313 }
314
315 //------------------------------------------------------------------------------
316
317 #define FLENS_BLASLOG_BEGIN_TRMM(side, transA, alpha, A, B) \
318 if (verbose::ClosureLog::createEntry()) { \
319 verbose::ClosureLog::append() << "flens::blas::mm(" \
320 << side << ", " << transA << ", " \
321 << alpha << ", " \
322 << A << ", " << B << ");"; \
323 }
324
325 //------------------------------------------------------------------------------
326
327 #define FLENS_BLASLOG_BEGIN_SYMM(side, alpha, A, B, beta, C) \
328 if (verbose::ClosureLog::createEntry()) { \
329 verbose::ClosureLog::append() << "flens::blas::mm(" \
330 << side << ", " \
331 << alpha << ", " \
332 << A << ", " << B << ", " \
333 << beta << ", " \
334 << C << ");"; \
335 }
336
337
338