SMAUG
Simulating Machine Learning Applications on gem5-Aladdin
ref_tanh_op.cpp
1 #include "smaug/core/backend.h"
3 #include "smaug/operators/tanh_op.h"
4 #include "smaug/operators/ref/ref_activation_fun_op.h"
5 
6 namespace smaug {
7 
8 template <>
9 void TanhOp<ReferenceBackend>::run() {
10  auto inputs = getInput(Inputs);
11  auto outputs = getOutput(Outputs);
12  assert(inputs->getShape() == outputs->getShape());
13  float* inputData = inputs->data<float>();
14  float* outputData = outputs->data<float>();
15  mapArrayToAccel(ref::kEltwiseOpHw, "inputs", inputData,
16  inputs->getShape().storageSize() * sizeof(float));
17  mapArrayToAccel(ref::kEltwiseOpHw, "results", outputData,
18  inputs->getShape().storageSize() * sizeof(float));
19  activation_type function = activation_type::TANH;
20  activation_param_t params;
21  invokeKernel(ref::kEltwiseOpHw, ref_activation_fun_nc, inputData,
22  outputData, inputs->getShape().size(), function, params);
23 }
24 
25 template <>
26 void HardTanhOp<ReferenceBackend>::run() {
27  auto inputs = getInput(Inputs);
28  auto outputs = getOutput(Outputs);
29  assert(inputs->getShape() == outputs->getShape());
30  float* inputData = inputs->data<float>();
31  float* outputData = outputs->data<float>();
32  mapArrayToAccel(ref::kEltwiseOpHw, "inputs", inputData,
33  inputs->getShape().storageSize() * sizeof(float));
34  mapArrayToAccel(ref::kEltwiseOpHw, "results", outputData,
35  inputs->getShape().storageSize() * sizeof(float));
36  activation_type function = activation_type::HARD_TANH;
37  activation_param_t params;
38  params.min = min;
39  params.max = max;
40  invokeKernel(ref::kEltwiseOpHw, ref_activation_fun_nc, inputData,
41  outputData, inputs->getShape().size(), function, params);
42 }
43 
44 } // namespace smaug
activation_type
enum _activation_type activation_type
The activation function to apply to an operator's output in hardware.
ref_activation_fun_nc
void ref_activation_fun_nc(float *inputs, float *results, int inputs_size, activation_type function, activation_param_t params)
Top level entry point for all Reference activation functions.
Definition: ref_activation_fun_op.cpp:8
_activation_param_t
Parameters to the activation function hardware.
Definition: common.h:194
smaug
The smaug namespace is the parent namespace of all C++ code in SMAUG.
Definition: backend.cpp:38
common.h
Utilities for writing and invoking Aladdin kernels from Operators.
smaug::mapArrayToAccel
void mapArrayToAccel(unsigned reqCode, const char *arrayName, void *baseAddr, size_t size)
Maps an array of data to the accelerator.
Definition: common.cpp:12
smaug::invokeKernel
void invokeKernel(int accelIdx, unsigned reqCode, const Kernel &kernel, Args &&... args)
The generic blocking interface for all accelerator kernel functions.
Definition: common.h:72