blob: de94255b48a4dc99aa7b67a488fdc357001f8294 [file] [log] [blame]
Michalis Spyroue9362622018-11-23 17:41:37 +00001/*
Michele Di Giorgiod9eaf612020-07-08 11:12:57 +01002 * Copyright (c) 2018-2020 Arm Limited.
Michalis Spyroue9362622018-11-23 17:41:37 +00003 *
4 * SPDX-License-Identifier: MIT
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to
8 * deal in the Software without restriction, including without limitation the
9 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10 * sell copies of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included in all
14 * copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 * SOFTWARE.
23 */
24#include "arm_compute/runtime/CL/functions/CLElementWiseUnaryLayer.h"
25
26#include "arm_compute/core/CL/kernels/CLElementWiseUnaryLayerKernel.h"
Matthew Bentham92046462020-03-07 22:15:55 +000027#include "support/MemorySupport.h"
Michalis Spyroue9362622018-11-23 17:41:37 +000028
29#include <utility>
30
31namespace arm_compute
32{
Michalis Spyrouf738fe62020-07-15 18:10:17 +010033namespace experimental
34{
Georgios Pinitas09cad722020-07-22 12:11:20 +010035void CLRsqrt::configure(const CLCompileContext &compile_context, const ITensorInfo *input, ITensorInfo *output)
Michalis Spyrouf738fe62020-07-15 18:10:17 +010036{
37 auto k = arm_compute::support::cpp14::make_unique<CLElementWiseUnaryLayerKernel>();
38 k->configure(compile_context, input, output, ElementWiseUnary::RSQRT);
39 _kernel = std::move(k);
40}
41
Georgios Pinitas09cad722020-07-22 12:11:20 +010042Status CLRsqrt::validate(const ITensorInfo *input, const ITensorInfo *output)
Michalis Spyrouf738fe62020-07-15 18:10:17 +010043{
44 return arm_compute::CLElementWiseUnaryLayerKernel::validate(input, output, ElementWiseUnary::RSQRT);
45}
46
Georgios Pinitas09cad722020-07-22 12:11:20 +010047void CLExp::configure(const CLCompileContext &compile_context, const ITensorInfo *input, ITensorInfo *output)
Michalis Spyrouf738fe62020-07-15 18:10:17 +010048{
49 auto k = arm_compute::support::cpp14::make_unique<CLElementWiseUnaryLayerKernel>();
50 k->configure(compile_context, input, output, ElementWiseUnary::EXP);
51 _kernel = std::move(k);
52}
53
Georgios Pinitas09cad722020-07-22 12:11:20 +010054Status CLExp::validate(const ITensorInfo *input, const ITensorInfo *output)
Michalis Spyrouf738fe62020-07-15 18:10:17 +010055{
56 return arm_compute::CLElementWiseUnaryLayerKernel::validate(input, output, ElementWiseUnary::EXP);
57}
58
Georgios Pinitas09cad722020-07-22 12:11:20 +010059void CLNeg::configure(const CLCompileContext &compile_context, const ITensorInfo *input, ITensorInfo *output)
Michalis Spyrouf738fe62020-07-15 18:10:17 +010060{
61 auto k = arm_compute::support::cpp14::make_unique<CLElementWiseUnaryLayerKernel>();
62 k->configure(compile_context, input, output, ElementWiseUnary::NEG);
63 _kernel = std::move(k);
64}
65
Georgios Pinitas09cad722020-07-22 12:11:20 +010066Status CLNeg::validate(const ITensorInfo *input, const ITensorInfo *output)
Michalis Spyrouf738fe62020-07-15 18:10:17 +010067{
68 return arm_compute::CLElementWiseUnaryLayerKernel::validate(input, output, ElementWiseUnary::NEG);
69}
70
Georgios Pinitas09cad722020-07-22 12:11:20 +010071void CLSin::configure(const CLCompileContext &compile_context, const ITensorInfo *input, ITensorInfo *output)
Michalis Spyrouf738fe62020-07-15 18:10:17 +010072{
73 auto k = arm_compute::support::cpp14::make_unique<CLElementWiseUnaryLayerKernel>();
74 k->configure(compile_context, input, output, ElementWiseUnary::SIN);
75 _kernel = std::move(k);
76}
77
Georgios Pinitas09cad722020-07-22 12:11:20 +010078Status CLSin::validate(const ITensorInfo *input, const ITensorInfo *output)
Michalis Spyrouf738fe62020-07-15 18:10:17 +010079{
80 return arm_compute::CLElementWiseUnaryLayerKernel::validate(input, output, ElementWiseUnary::SIN);
81}
82
Georgios Pinitas09cad722020-07-22 12:11:20 +010083void CLAbs::configure(const CLCompileContext &compile_context, const ITensorInfo *input, ITensorInfo *output)
Michalis Spyrouf738fe62020-07-15 18:10:17 +010084{
85 auto k = arm_compute::support::cpp14::make_unique<CLElementWiseUnaryLayerKernel>();
86 k->configure(compile_context, input, output, ElementWiseUnary::ABS);
87 _kernel = std::move(k);
88}
89
Georgios Pinitas09cad722020-07-22 12:11:20 +010090Status CLAbs::validate(const ITensorInfo *input, const ITensorInfo *output)
Michalis Spyrouf738fe62020-07-15 18:10:17 +010091{
92 return arm_compute::CLElementWiseUnaryLayerKernel::validate(input, output, ElementWiseUnary::ABS);
93}
94
Georgios Pinitas09cad722020-07-22 12:11:20 +010095void CLLog::configure(const CLCompileContext &compile_context, const ITensorInfo *input, ITensorInfo *output)
Michalis Spyrouf738fe62020-07-15 18:10:17 +010096{
97 auto k = arm_compute::support::cpp14::make_unique<CLElementWiseUnaryLayerKernel>();
98 k->configure(compile_context, input, output, ElementWiseUnary::LOG);
99 _kernel = std::move(k);
100}
101
Georgios Pinitas09cad722020-07-22 12:11:20 +0100102Status CLLog::validate(const ITensorInfo *input, const ITensorInfo *output)
Michalis Spyrouf738fe62020-07-15 18:10:17 +0100103{
104 return arm_compute::CLElementWiseUnaryLayerKernel::validate(input, output, ElementWiseUnary::LOG);
105}
106
Georgios Pinitas09cad722020-07-22 12:11:20 +0100107void CLRound::configure(const CLCompileContext &compile_context, const ITensorInfo *input, ITensorInfo *output)
Michalis Spyrouf738fe62020-07-15 18:10:17 +0100108{
109 auto k = arm_compute::support::cpp14::make_unique<CLElementWiseUnaryLayerKernel>();
110 k->configure(compile_context, input, output, ElementWiseUnary::ROUND);
111 _kernel = std::move(k);
112}
113
Georgios Pinitas09cad722020-07-22 12:11:20 +0100114Status CLRound::validate(const ITensorInfo *input, const ITensorInfo *output)
Michalis Spyrouf738fe62020-07-15 18:10:17 +0100115{
116 return arm_compute::CLElementWiseUnaryLayerKernel::validate(input, output, ElementWiseUnary::ROUND);
117}
Michalis Spyrouf738fe62020-07-15 18:10:17 +0100118} // namespace experimental
119
120struct CLRsqrtLayer::Impl
121{
Georgios Pinitas09cad722020-07-22 12:11:20 +0100122 const ICLTensor *src{ nullptr };
123 ICLTensor *dst{ nullptr };
124 std::unique_ptr<experimental::CLRsqrt> op{ nullptr };
Michalis Spyrouf738fe62020-07-15 18:10:17 +0100125};
126
127CLRsqrtLayer::CLRsqrtLayer()
128 : _impl(support::cpp14::make_unique<Impl>())
129{
130}
131
132CLRsqrtLayer::CLRsqrtLayer(CLRsqrtLayer &&) = default;
133CLRsqrtLayer &CLRsqrtLayer::operator=(CLRsqrtLayer &&) = default;
134CLRsqrtLayer::~CLRsqrtLayer() = default;
135
Michalis Spyroue9362622018-11-23 17:41:37 +0000136void CLRsqrtLayer::configure(const ICLTensor *input, ICLTensor *output)
137{
Manuel Bottini2b84be52020-04-08 10:15:51 +0100138 configure(CLKernelLibrary::get().get_compile_context(), input, output);
139}
140
141void CLRsqrtLayer::configure(const CLCompileContext &compile_context, const ICLTensor *input, ICLTensor *output)
142{
Michalis Spyrouf738fe62020-07-15 18:10:17 +0100143 _impl->src = input;
144 _impl->dst = output;
Georgios Pinitas09cad722020-07-22 12:11:20 +0100145 _impl->op = arm_compute::support::cpp14::make_unique<experimental::CLRsqrt>();
Michalis Spyrouf738fe62020-07-15 18:10:17 +0100146 _impl->op->configure(compile_context, input->info(), output->info());
Michalis Spyroue9362622018-11-23 17:41:37 +0000147}
Michalis Spyrouf738fe62020-07-15 18:10:17 +0100148
Michalis Spyroue9362622018-11-23 17:41:37 +0000149Status CLRsqrtLayer::validate(const ITensorInfo *input, const ITensorInfo *output)
150{
Georgios Pinitas09cad722020-07-22 12:11:20 +0100151 return experimental::CLRsqrt::validate(input, output);
Michalis Spyroue9362622018-11-23 17:41:37 +0000152}
153
Michalis Spyrouf738fe62020-07-15 18:10:17 +0100154void CLRsqrtLayer::run()
155{
Georgios Pinitas0499dff2020-07-31 22:21:38 +0100156 ITensorPack pack;
157 pack.add_tensor(TensorType::ACL_SRC, _impl->src);
158 pack.add_tensor(TensorType::ACL_DST, _impl->dst);
159 _impl->op->run(pack);
Michalis Spyrouf738fe62020-07-15 18:10:17 +0100160}
161
162struct CLExpLayer::Impl
163{
Georgios Pinitas09cad722020-07-22 12:11:20 +0100164 const ICLTensor *src{ nullptr };
165 ICLTensor *dst{ nullptr };
166 std::unique_ptr<experimental::CLExp> op{ nullptr };
Michalis Spyrouf738fe62020-07-15 18:10:17 +0100167};
168
169CLExpLayer::CLExpLayer()
170 : _impl(support::cpp14::make_unique<Impl>())
171{
172}
173
174CLExpLayer::CLExpLayer(CLExpLayer &&) = default;
175CLExpLayer &CLExpLayer::operator=(CLExpLayer &&) = default;
176CLExpLayer::~CLExpLayer() = default;
177
Michalis Spyroue9362622018-11-23 17:41:37 +0000178void CLExpLayer::configure(const ICLTensor *input, ICLTensor *output)
179{
Manuel Bottini2b84be52020-04-08 10:15:51 +0100180 configure(CLKernelLibrary::get().get_compile_context(), input, output);
181}
182
183void CLExpLayer::configure(const CLCompileContext &compile_context, const ICLTensor *input, ICLTensor *output)
184{
Michalis Spyrouf738fe62020-07-15 18:10:17 +0100185 _impl->src = input;
186 _impl->dst = output;
Georgios Pinitas09cad722020-07-22 12:11:20 +0100187 _impl->op = arm_compute::support::cpp14::make_unique<experimental::CLExp>();
Michalis Spyrouf738fe62020-07-15 18:10:17 +0100188 _impl->op->configure(compile_context, input->info(), output->info());
Michalis Spyroue9362622018-11-23 17:41:37 +0000189}
Michalis Spyrouf738fe62020-07-15 18:10:17 +0100190
Michalis Spyroue9362622018-11-23 17:41:37 +0000191Status CLExpLayer::validate(const ITensorInfo *input, const ITensorInfo *output)
192{
Georgios Pinitas09cad722020-07-22 12:11:20 +0100193 return experimental::CLExp::validate(input, output);
Michalis Spyroue9362622018-11-23 17:41:37 +0000194}
Usama Arifeb312ef2019-05-13 17:45:54 +0100195
Michalis Spyrouf738fe62020-07-15 18:10:17 +0100196void CLExpLayer::run()
197{
Georgios Pinitas0499dff2020-07-31 22:21:38 +0100198 ITensorPack pack;
199 pack.add_tensor(TensorType::ACL_SRC, _impl->src);
200 pack.add_tensor(TensorType::ACL_DST, _impl->dst);
201 _impl->op->run(pack);
Michalis Spyrouf738fe62020-07-15 18:10:17 +0100202}
203
204struct CLNegLayer::Impl
205{
Georgios Pinitas09cad722020-07-22 12:11:20 +0100206 const ICLTensor *src{ nullptr };
207 ICLTensor *dst{ nullptr };
208 std::unique_ptr<experimental::CLNeg> op{ nullptr };
Michalis Spyrouf738fe62020-07-15 18:10:17 +0100209};
210
211CLNegLayer::CLNegLayer()
212 : _impl(support::cpp14::make_unique<Impl>())
213{
214}
215
216CLNegLayer::CLNegLayer(CLNegLayer &&) = default;
217CLNegLayer &CLNegLayer::operator=(CLNegLayer &&) = default;
218CLNegLayer::~CLNegLayer() = default;
219
Usama Arifeb312ef2019-05-13 17:45:54 +0100220void CLNegLayer::configure(const ICLTensor *input, ICLTensor *output)
221{
Manuel Bottini2b84be52020-04-08 10:15:51 +0100222 configure(CLKernelLibrary::get().get_compile_context(), input, output);
223}
224
225void CLNegLayer::configure(const CLCompileContext &compile_context, const ICLTensor *input, ICLTensor *output)
226{
Michalis Spyrouf738fe62020-07-15 18:10:17 +0100227 _impl->src = input;
228 _impl->dst = output;
Georgios Pinitas09cad722020-07-22 12:11:20 +0100229 _impl->op = arm_compute::support::cpp14::make_unique<experimental::CLNeg>();
Michalis Spyrouf738fe62020-07-15 18:10:17 +0100230 _impl->op->configure(compile_context, input->info(), output->info());
Usama Arifeb312ef2019-05-13 17:45:54 +0100231}
232Status CLNegLayer::validate(const ITensorInfo *input, const ITensorInfo *output)
233{
Georgios Pinitas09cad722020-07-22 12:11:20 +0100234 return experimental::CLNeg::validate(input, output);
Usama Arifeb312ef2019-05-13 17:45:54 +0100235}
236
Michalis Spyrouf738fe62020-07-15 18:10:17 +0100237void CLNegLayer::run()
238{
Georgios Pinitas0499dff2020-07-31 22:21:38 +0100239 ITensorPack pack;
240 pack.add_tensor(TensorType::ACL_SRC, _impl->src);
241 pack.add_tensor(TensorType::ACL_DST, _impl->dst);
242 _impl->op->run(pack);
Michalis Spyrouf738fe62020-07-15 18:10:17 +0100243}
244
245struct CLSinLayer::Impl
246{
Georgios Pinitas09cad722020-07-22 12:11:20 +0100247 const ICLTensor *src{ nullptr };
248 ICLTensor *dst{ nullptr };
249 std::unique_ptr<experimental::CLSin> op{ nullptr };
Michalis Spyrouf738fe62020-07-15 18:10:17 +0100250};
251
252CLSinLayer::CLSinLayer()
253 : _impl(support::cpp14::make_unique<Impl>())
254{
255}
256
257CLSinLayer::CLSinLayer(CLSinLayer &&) = default;
258CLSinLayer &CLSinLayer::operator=(CLSinLayer &&) = default;
259CLSinLayer::~CLSinLayer() = default;
260
Michalis Spyrou0af44182019-05-17 14:04:47 +0100261void CLSinLayer::configure(const ICLTensor *input, ICLTensor *output)
262{
Manuel Bottini2b84be52020-04-08 10:15:51 +0100263 configure(CLKernelLibrary::get().get_compile_context(), input, output);
264}
265
266void CLSinLayer::configure(const CLCompileContext &compile_context, const ICLTensor *input, ICLTensor *output)
267{
Michalis Spyrouf738fe62020-07-15 18:10:17 +0100268 _impl->src = input;
269 _impl->dst = output;
Georgios Pinitas09cad722020-07-22 12:11:20 +0100270 _impl->op = arm_compute::support::cpp14::make_unique<experimental::CLSin>();
Michalis Spyrouf738fe62020-07-15 18:10:17 +0100271 _impl->op->configure(compile_context, input->info(), output->info());
Michalis Spyrou0af44182019-05-17 14:04:47 +0100272}
273Status CLSinLayer::validate(const ITensorInfo *input, const ITensorInfo *output)
274{
Georgios Pinitas09cad722020-07-22 12:11:20 +0100275 return experimental::CLSin::validate(input, output);
Michalis Spyrou0af44182019-05-17 14:04:47 +0100276}
277
Michalis Spyrouf738fe62020-07-15 18:10:17 +0100278void CLSinLayer::run()
279{
Georgios Pinitas0499dff2020-07-31 22:21:38 +0100280 ITensorPack pack;
281 pack.add_tensor(TensorType::ACL_SRC, _impl->src);
282 pack.add_tensor(TensorType::ACL_DST, _impl->dst);
283 _impl->op->run(pack);
Michalis Spyrouf738fe62020-07-15 18:10:17 +0100284}
285
286struct CLAbsLayer::Impl
287{
Georgios Pinitas09cad722020-07-22 12:11:20 +0100288 const ICLTensor *src{ nullptr };
289 ICLTensor *dst{ nullptr };
290 std::unique_ptr<experimental::CLAbs> op{ nullptr };
Michalis Spyrouf738fe62020-07-15 18:10:17 +0100291};
292
293CLAbsLayer::CLAbsLayer()
294 : _impl(support::cpp14::make_unique<Impl>())
295{
296}
297
298CLAbsLayer::CLAbsLayer(CLAbsLayer &&) = default;
299CLAbsLayer &CLAbsLayer::operator=(CLAbsLayer &&) = default;
300CLAbsLayer::~CLAbsLayer() = default;
301
giuros01f24411f2019-05-16 11:47:13 +0100302void CLAbsLayer::configure(const ICLTensor *input, ICLTensor *output)
303{
Manuel Bottini2b84be52020-04-08 10:15:51 +0100304 configure(CLKernelLibrary::get().get_compile_context(), input, output);
305}
306
307void CLAbsLayer::configure(const CLCompileContext &compile_context, const ICLTensor *input, ICLTensor *output)
308{
Michalis Spyrouf738fe62020-07-15 18:10:17 +0100309 _impl->src = input;
310 _impl->dst = output;
Georgios Pinitas09cad722020-07-22 12:11:20 +0100311 _impl->op = arm_compute::support::cpp14::make_unique<experimental::CLAbs>();
Michalis Spyrouf738fe62020-07-15 18:10:17 +0100312 _impl->op->configure(compile_context, input->info(), output->info());
giuros01f24411f2019-05-16 11:47:13 +0100313}
314Status CLAbsLayer::validate(const ITensorInfo *input, const ITensorInfo *output)
315{
Georgios Pinitas09cad722020-07-22 12:11:20 +0100316 return experimental::CLAbs::validate(input, output);
giuros01f24411f2019-05-16 11:47:13 +0100317}
Michalis Spyrouf738fe62020-07-15 18:10:17 +0100318
319void CLAbsLayer::run()
320{
Georgios Pinitas0499dff2020-07-31 22:21:38 +0100321 ITensorPack pack;
322 pack.add_tensor(TensorType::ACL_SRC, _impl->src);
323 pack.add_tensor(TensorType::ACL_DST, _impl->dst);
324 _impl->op->run(pack);
Michalis Spyrouf738fe62020-07-15 18:10:17 +0100325}
326
327struct CLLogLayer::Impl
328{
Georgios Pinitas09cad722020-07-22 12:11:20 +0100329 const ICLTensor *src{ nullptr };
330 ICLTensor *dst{ nullptr };
331 std::unique_ptr<experimental::CLLog> op{ nullptr };
Michalis Spyrouf738fe62020-07-15 18:10:17 +0100332};
333
334CLLogLayer::CLLogLayer()
335 : _impl(support::cpp14::make_unique<Impl>())
336{
337}
338
339CLLogLayer::CLLogLayer(CLLogLayer &&) = default;
340CLLogLayer &CLLogLayer::operator=(CLLogLayer &&) = default;
341CLLogLayer::~CLLogLayer() = default;
342
Usama Arifac33d7e2019-05-20 14:21:40 +0100343void CLLogLayer::configure(const ICLTensor *input, ICLTensor *output)
344{
Manuel Bottini2b84be52020-04-08 10:15:51 +0100345 configure(CLKernelLibrary::get().get_compile_context(), input, output);
346}
347
348void CLLogLayer::configure(const CLCompileContext &compile_context, const ICLTensor *input, ICLTensor *output)
349{
Michalis Spyrouf738fe62020-07-15 18:10:17 +0100350 _impl->src = input;
351 _impl->dst = output;
Georgios Pinitas09cad722020-07-22 12:11:20 +0100352 _impl->op = arm_compute::support::cpp14::make_unique<experimental::CLLog>();
Michalis Spyrouf738fe62020-07-15 18:10:17 +0100353 _impl->op->configure(compile_context, input->info(), output->info());
Usama Arifac33d7e2019-05-20 14:21:40 +0100354}
355Status CLLogLayer::validate(const ITensorInfo *input, const ITensorInfo *output)
356{
Georgios Pinitas09cad722020-07-22 12:11:20 +0100357 return experimental::CLLog::validate(input, output);
Usama Arifac33d7e2019-05-20 14:21:40 +0100358}
giuros01f24411f2019-05-16 11:47:13 +0100359
Michalis Spyrouf738fe62020-07-15 18:10:17 +0100360void CLLogLayer::run()
361{
Georgios Pinitas0499dff2020-07-31 22:21:38 +0100362 ITensorPack pack;
363 pack.add_tensor(TensorType::ACL_SRC, _impl->src);
364 pack.add_tensor(TensorType::ACL_DST, _impl->dst);
365 _impl->op->run(pack);
Michalis Spyrouf738fe62020-07-15 18:10:17 +0100366}
367
368struct CLRoundLayer::Impl
369{
Georgios Pinitas09cad722020-07-22 12:11:20 +0100370 const ICLTensor *src{ nullptr };
371 ICLTensor *dst{ nullptr };
372 std::unique_ptr<experimental::CLRound> op{ nullptr };
Michalis Spyrouf738fe62020-07-15 18:10:17 +0100373};
374
375CLRoundLayer::CLRoundLayer()
376 : _impl(support::cpp14::make_unique<Impl>())
377{
378}
379
380CLRoundLayer::CLRoundLayer(CLRoundLayer &&) = default;
381CLRoundLayer &CLRoundLayer::operator=(CLRoundLayer &&) = default;
382CLRoundLayer::~CLRoundLayer() = default;
383
Usama Arif6a4d5422019-05-24 14:53:59 +0100384void CLRoundLayer::configure(const ICLTensor *input, ICLTensor *output)
385{
Manuel Bottini2b84be52020-04-08 10:15:51 +0100386 configure(CLKernelLibrary::get().get_compile_context(), input, output);
387}
388
389void CLRoundLayer::configure(const CLCompileContext &compile_context, const ICLTensor *input, ICLTensor *output)
390{
Michalis Spyrouf738fe62020-07-15 18:10:17 +0100391 _impl->src = input;
392 _impl->dst = output;
Georgios Pinitas09cad722020-07-22 12:11:20 +0100393 _impl->op = arm_compute::support::cpp14::make_unique<experimental::CLRound>();
Michalis Spyrouf738fe62020-07-15 18:10:17 +0100394 _impl->op->configure(compile_context, input->info(), output->info());
Usama Arif6a4d5422019-05-24 14:53:59 +0100395}
396Status CLRoundLayer::validate(const ITensorInfo *input, const ITensorInfo *output)
397{
Georgios Pinitas09cad722020-07-22 12:11:20 +0100398 return experimental::CLRound::validate(input, output);
Usama Arif6a4d5422019-05-24 14:53:59 +0100399}
400
Michalis Spyrouf738fe62020-07-15 18:10:17 +0100401void CLRoundLayer::run()
402{
Georgios Pinitas0499dff2020-07-31 22:21:38 +0100403 ITensorPack pack;
404 pack.add_tensor(TensorType::ACL_SRC, _impl->src);
405 pack.add_tensor(TensorType::ACL_DST, _impl->dst);
406 _impl->op->run(pack);
Michalis Spyrouf738fe62020-07-15 18:10:17 +0100407}
Michalis Spyroue9362622018-11-23 17:41:37 +0000408} // namespace arm_compute